46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 | class InstitutionRanking(BaseModel):
"""Institution ranking aggregating artifact production, citation impact, and AE committee service across affiliated authors."""
affiliation: str = Field(
description="Normalized institution name, e.g. 'University of Illinois Urbana-Champaign', 'EPFL'.",
examples=["ETH Zurich"],
)
country: str | None = Field(
default=None,
description="Country name resolved from affiliation, e.g. 'United States', 'Germany'. Null if unresolved.",
examples=["United States"],
)
country_code: str | None = Field(
default=None,
min_length=2,
max_length=2,
description="ISO 3166-1 alpha-2 country code, e.g. 'US', 'DE'. Null if unresolved.",
examples=["US"],
)
combined_score: int = Field(
ge=3,
description="Total score: artifact_score + citation_score + ae_score. Example: 633.",
examples=[15],
)
artifact_score: int = Field(
ge=0,
description="Points from artifact contributions. Scoring: 1 (available) + 1 (functional) + 1 (reproduced) per artifact.",
examples=[9],
)
artifact_citations: int | None = Field(
default=None,
ge=0,
description="Sum of artifact citation counts. Currently 0 for most institutions (tracking in progress).",
examples=[3],
)
citation_score: int | None = Field(
default=None,
ge=0,
description="Points from artifact citations. Currently 0 for most institutions (tracking in progress).",
examples=[0],
)
ae_score: int = Field(
ge=0,
description="Points from AE service: (memberships × 3) + (chairs × 2).",
examples=[6],
)
ae_ratio: float | None = Field(
default=None,
description="Artifact-to-AE score ratio (artifact_score / ae_score). Null when ae_score is 0. E.g. 0.48.",
examples=[1.5],
)
role: Literal["Producer", "Consumer", "Balanced"] = Field(
description="Role classification based on artifact-to-AE ratio: 'Producer', 'Consumer', 'Balanced'.",
examples=["member"],
)
artifact_count: int = Field(
ge=0, description="Total number of artifacts produced by authors at this institution.", examples=[5]
)
badges_functional: int = Field(
ge=0,
description="Total 'functional' badges across all artifacts from this institution.",
examples=[10],
)
badges_reproducible: int = Field(
ge=0,
description="Total 'reproduced'/'replicated' badges across all artifacts from this institution.",
examples=[8],
)
ae_memberships: int = Field(
ge=0, description="Total AE committee memberships by authors at this institution.", examples=[4]
)
chair_count: int = Field(
ge=0, description="Number of AE chair roles held by authors at this institution.", examples=[1]
)
total_papers: int = Field(
ge=0,
description="Total papers at tracked conferences by authors at this institution, sourced from DBLP.",
examples=[42],
)
artifact_pct: float = Field(
ge=0,
le=100,
description="Percentage of papers with artifacts: (artifact_count / total_papers) * 100. E.g. 53.4.",
examples=[71.4],
)
author_count: int = Field(
ge=1, description="Number of unique authors affiliated with this institution.", examples=[15]
)
conferences: list[str] = Field(
description="Distinct conference abbreviations, e.g. ['ATC', 'OSDI', 'USENIXSEC'].",
examples=[["OSDI", "ATC", "USENIXSEC"]],
)
years: dict[str, int] = Field(
description="Year (as string) → activity count, e.g. {'2023': 31, '2024': 59}.", examples=[[2021, 2022, 2023]]
)
top_authors: list[TopAuthor] = Field(
max_length=20,
description="Up to 20 top-scoring authors from this institution, sorted by combined_score descending.",
)
scope: str | None = Field(
default=None,
description="Scope tag for scoped rankings, e.g. 'systems' or 'OSDI'. Null in overall rankings.",
examples=["systems"],
)
model_config = {"extra": "forbid"}
|