roadmodel 0.2.64__tar.gz → 0.2.67__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {roadmodel-0.2.64 → roadmodel-0.2.67}/PKG-INFO +1 -1
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/benchmarks.json +62 -62
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/catalog.json +4 -4
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/model-selector.txt +15 -3
- {roadmodel-0.2.64 → roadmodel-0.2.67}/hatch_build.py +12 -4
- {roadmodel-0.2.64 → roadmodel-0.2.67}/infra/README.md +4 -2
- {roadmodel-0.2.64 → roadmodel-0.2.67}/pyproject.toml +6 -1
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/benchmarks.json +62 -62
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/catalog.json +4 -4
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/model-selector.txt +15 -3
- roadmodel-0.2.67/scripts/agent_context.py +583 -0
- roadmodel-0.2.67/scripts/agent_rules.py +227 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/scripts/update_projects.py +296 -27
- roadmodel-0.2.67/scripts/updater_lock.py +122 -0
- roadmodel-0.2.67/scripts/upgrade_fleet.py +362 -0
- roadmodel-0.2.67/scripts/worktree_memory.py +299 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/__init__.py +1 -1
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/recommend.py +6 -3
- {roadmodel-0.2.64 → roadmodel-0.2.67}/.gitignore +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/LICENSE +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/NOTICE +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/README.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/model-tier-cost-scale.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/settings-display.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/templates/phase-roadmap-template.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/templates/planning-kit-how-to-use.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/templates/project-roadmap-template.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/templates/prompt-phase-roadmap.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/templates/prompt-project-roadmap.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/docs/user-context.example.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/infra/gcp-killswitch/README.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/infra/supabase/README.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/model-tier-cost-scale.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/phase-roadmap-template.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/planning-kit-how-to-use.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/project-roadmap-template.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/prompt-phase-roadmap.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/prompt-project-roadmap.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/settings-display.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/roadmodel/data/user-context.example.md +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/__main__.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/cli.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/config.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/cost.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/errors.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/mcp_server.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/providers/__init__.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/providers/anthropic.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/providers/google.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/providers/openai.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/providers/openai_compatible.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/providers/registry.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/scoring.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/usage.py +0 -0
- {roadmodel-0.2.64 → roadmodel-0.2.67}/src/roadmodel/user_context.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: roadmodel
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.67
|
|
4
4
|
Summary: BYO-key CLI that recommends the right AI model, platform, and settings for a prompt.
|
|
5
5
|
Project-URL: Homepage, https://roadmodel.ai
|
|
6
6
|
Project-URL: Repository, https://github.com/nathanramoscfa/roadmodel
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"endpoint": "https://artificialanalysis.ai/api/v2/data/llms/models",
|
|
7
7
|
"attribution": "Benchmark data © Artificial Analysis, used under its API terms with attribution."
|
|
8
8
|
},
|
|
9
|
-
"generated_at_utc": "2026-10-
|
|
9
|
+
"generated_at_utc": "2026-10-05T22:11:00Z",
|
|
10
10
|
"model_count": 54,
|
|
11
11
|
"unmapped": [],
|
|
12
12
|
"missing_slugs": [],
|
|
@@ -38,13 +38,13 @@
|
|
|
38
38
|
"tau2": 0.546783625730994,
|
|
39
39
|
"tau_banking": 0.0927835051546392
|
|
40
40
|
},
|
|
41
|
-
"median_output_tokens_per_second":
|
|
42
|
-
"median_time_to_first_token_seconds":
|
|
41
|
+
"median_output_tokens_per_second": 107.429,
|
|
42
|
+
"median_time_to_first_token_seconds": 7.79
|
|
43
43
|
},
|
|
44
44
|
"claude-fable-5": {
|
|
45
45
|
"aa_id": "cd55210d-358e-4df1-ba9c-9acb5f186cc9",
|
|
46
46
|
"aa_slug": "claude-fable-5",
|
|
47
|
-
"aa_name": "Claude Fable 5 (
|
|
47
|
+
"aa_name": "Claude Fable 5 (Max, Opus 4.8 Fallback)",
|
|
48
48
|
"aa_creator": "Anthropic",
|
|
49
49
|
"release_date": "2026-06-09",
|
|
50
50
|
"evaluations": {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"claude-fable-5.1": {
|
|
74
74
|
"aa_id": "3e87c73e-a257-495e-9730-367a66229811",
|
|
75
75
|
"aa_slug": "claude-fable-5-1",
|
|
76
|
-
"aa_name": "Claude Fable 5.1 (
|
|
76
|
+
"aa_name": "Claude Fable 5.1 (Max, Default Fallback)",
|
|
77
77
|
"aa_creator": "Anthropic",
|
|
78
78
|
"release_date": "2026-09-01",
|
|
79
79
|
"evaluations": {
|
|
@@ -96,13 +96,13 @@
|
|
|
96
96
|
"tau2": null,
|
|
97
97
|
"tau_banking": 0.472164948453608
|
|
98
98
|
},
|
|
99
|
-
"median_output_tokens_per_second": 68.
|
|
100
|
-
"median_time_to_first_token_seconds":
|
|
99
|
+
"median_output_tokens_per_second": 68.612,
|
|
100
|
+
"median_time_to_first_token_seconds": 145.612
|
|
101
101
|
},
|
|
102
102
|
"claude-opus-5": {
|
|
103
103
|
"aa_id": "b8fc61f7-5e9a-49e6-8547-6ac56db24627",
|
|
104
104
|
"aa_slug": "claude-opus-5",
|
|
105
|
-
"aa_name": "Claude Opus 5 (
|
|
105
|
+
"aa_name": "Claude Opus 5 (Max)",
|
|
106
106
|
"aa_creator": "Anthropic",
|
|
107
107
|
"release_date": "2026-07-24",
|
|
108
108
|
"evaluations": {
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
"claude-opus-5-5": {
|
|
132
132
|
"aa_id": "2f3c4dc9-a450-4303-8697-0237257cf08f",
|
|
133
133
|
"aa_slug": "claude-opus-5-5",
|
|
134
|
-
"aa_name": "Claude Opus 5.5 (
|
|
134
|
+
"aa_name": "Claude Opus 5.5 (Max, Default Fallback)",
|
|
135
135
|
"aa_creator": "Anthropic",
|
|
136
136
|
"release_date": "2026-09-22",
|
|
137
137
|
"evaluations": {
|
|
@@ -154,13 +154,13 @@
|
|
|
154
154
|
"tau2": null,
|
|
155
155
|
"tau_banking": null
|
|
156
156
|
},
|
|
157
|
-
"median_output_tokens_per_second": 96.
|
|
158
|
-
"median_time_to_first_token_seconds":
|
|
157
|
+
"median_output_tokens_per_second": 96.593,
|
|
158
|
+
"median_time_to_first_token_seconds": 489.353
|
|
159
159
|
},
|
|
160
160
|
"claude-sonnet-5": {
|
|
161
161
|
"aa_id": "23c86e4a-c769-43c0-a056-79e3cd15834f",
|
|
162
162
|
"aa_slug": "claude-sonnet-5",
|
|
163
|
-
"aa_name": "Claude Sonnet 5 (
|
|
163
|
+
"aa_name": "Claude Sonnet 5 (Max)",
|
|
164
164
|
"aa_creator": "Anthropic",
|
|
165
165
|
"release_date": "2026-06-30",
|
|
166
166
|
"evaluations": {
|
|
@@ -183,13 +183,13 @@
|
|
|
183
183
|
"tau2": null,
|
|
184
184
|
"tau_banking": 0.37319587628866
|
|
185
185
|
},
|
|
186
|
-
"median_output_tokens_per_second":
|
|
187
|
-
"median_time_to_first_token_seconds":
|
|
186
|
+
"median_output_tokens_per_second": 0,
|
|
187
|
+
"median_time_to_first_token_seconds": 0
|
|
188
188
|
},
|
|
189
189
|
"claude-sonnet-5-5": {
|
|
190
190
|
"aa_id": "b171d979-5ec1-45de-b8b9-db1ee65e77ec",
|
|
191
191
|
"aa_slug": "claude-sonnet-5-5",
|
|
192
|
-
"aa_name": "Claude Sonnet 5.5 (
|
|
192
|
+
"aa_name": "Claude Sonnet 5.5 (Max, Default Fallback)",
|
|
193
193
|
"aa_creator": "Anthropic",
|
|
194
194
|
"release_date": "2026-09-28",
|
|
195
195
|
"evaluations": {
|
|
@@ -212,8 +212,8 @@
|
|
|
212
212
|
"tau2": null,
|
|
213
213
|
"tau_banking": null
|
|
214
214
|
},
|
|
215
|
-
"median_output_tokens_per_second":
|
|
216
|
-
"median_time_to_first_token_seconds":
|
|
215
|
+
"median_output_tokens_per_second": 137.507,
|
|
216
|
+
"median_time_to_first_token_seconds": 269.765
|
|
217
217
|
},
|
|
218
218
|
"deepseek-flash": {
|
|
219
219
|
"aa_id": "dbe7c625-3100-4463-b479-a228c41f75dd",
|
|
@@ -241,8 +241,8 @@
|
|
|
241
241
|
"tau2": null,
|
|
242
242
|
"tau_banking": null
|
|
243
243
|
},
|
|
244
|
-
"median_output_tokens_per_second":
|
|
245
|
-
"median_time_to_first_token_seconds": 0.
|
|
244
|
+
"median_output_tokens_per_second": 214.176,
|
|
245
|
+
"median_time_to_first_token_seconds": 0.802
|
|
246
246
|
},
|
|
247
247
|
"deepseek-v4-pro": {
|
|
248
248
|
"aa_id": "83173329-c09a-41f1-a028-a282a5f908d7",
|
|
@@ -270,8 +270,8 @@
|
|
|
270
270
|
"tau2": null,
|
|
271
271
|
"tau_banking": 0.395876288659794
|
|
272
272
|
},
|
|
273
|
-
"median_output_tokens_per_second":
|
|
274
|
-
"median_time_to_first_token_seconds": 1.
|
|
273
|
+
"median_output_tokens_per_second": 103.076,
|
|
274
|
+
"median_time_to_first_token_seconds": 1.112
|
|
275
275
|
},
|
|
276
276
|
"gemini-2.5-flash": {
|
|
277
277
|
"aa_id": "219ed587-60c5-4a48-9517-8480e08d0ca1",
|
|
@@ -386,8 +386,8 @@
|
|
|
386
386
|
"tau2": 0.956140350877193,
|
|
387
387
|
"tau_banking": 0.214432989690722
|
|
388
388
|
},
|
|
389
|
-
"median_output_tokens_per_second":
|
|
390
|
-
"median_time_to_first_token_seconds":
|
|
389
|
+
"median_output_tokens_per_second": 123.821,
|
|
390
|
+
"median_time_to_first_token_seconds": 15.32
|
|
391
391
|
},
|
|
392
392
|
"gemini-3.5-flash": {
|
|
393
393
|
"aa_id": "0097ebf5-124f-42f6-9463-33b00e711f03",
|
|
@@ -502,8 +502,8 @@
|
|
|
502
502
|
"tau2": null,
|
|
503
503
|
"tau_banking": 0.449484536082474
|
|
504
504
|
},
|
|
505
|
-
"median_output_tokens_per_second":
|
|
506
|
-
"median_time_to_first_token_seconds":
|
|
505
|
+
"median_output_tokens_per_second": 223.213,
|
|
506
|
+
"median_time_to_first_token_seconds": 9.822
|
|
507
507
|
},
|
|
508
508
|
"glm-4.5-air": {
|
|
509
509
|
"aa_id": "5d303dc9-c027-401f-9803-4e9aa3331007",
|
|
@@ -618,8 +618,8 @@
|
|
|
618
618
|
"tau2": null,
|
|
619
619
|
"tau_banking": 0.503092783505155
|
|
620
620
|
},
|
|
621
|
-
"median_output_tokens_per_second":
|
|
622
|
-
"median_time_to_first_token_seconds":
|
|
621
|
+
"median_output_tokens_per_second": 75.232,
|
|
622
|
+
"median_time_to_first_token_seconds": 3.1
|
|
623
623
|
},
|
|
624
624
|
"glm-5.3-flash": {
|
|
625
625
|
"aa_id": "19496b81-9f41-4214-a77a-1df803b3c5ae",
|
|
@@ -647,8 +647,8 @@
|
|
|
647
647
|
"tau2": null,
|
|
648
648
|
"tau_banking": 0.472164948453608
|
|
649
649
|
},
|
|
650
|
-
"median_output_tokens_per_second": 49.
|
|
651
|
-
"median_time_to_first_token_seconds":
|
|
650
|
+
"median_output_tokens_per_second": 49.967,
|
|
651
|
+
"median_time_to_first_token_seconds": 2.638
|
|
652
652
|
},
|
|
653
653
|
"gpt-5": {
|
|
654
654
|
"aa_id": "48e50f00-1fd1-4acc-b337-61078aa341e6",
|
|
@@ -850,8 +850,8 @@
|
|
|
850
850
|
"tau2": 0.859649122807018,
|
|
851
851
|
"tau_banking": null
|
|
852
852
|
},
|
|
853
|
-
"median_output_tokens_per_second":
|
|
854
|
-
"median_time_to_first_token_seconds":
|
|
853
|
+
"median_output_tokens_per_second": 102.301,
|
|
854
|
+
"median_time_to_first_token_seconds": 34.347
|
|
855
855
|
},
|
|
856
856
|
"gpt-5.4": {
|
|
857
857
|
"aa_id": "a89c4b28-2d8c-456e-88ea-255fb51fd2b6",
|
|
@@ -1053,8 +1053,8 @@
|
|
|
1053
1053
|
"tau2": 0.862573099415205,
|
|
1054
1054
|
"tau_banking": 0.402061855670103
|
|
1055
1055
|
},
|
|
1056
|
-
"median_output_tokens_per_second":
|
|
1057
|
-
"median_time_to_first_token_seconds":
|
|
1056
|
+
"median_output_tokens_per_second": 116.052,
|
|
1057
|
+
"median_time_to_first_token_seconds": 82.187
|
|
1058
1058
|
},
|
|
1059
1059
|
"gpt-6-astra": {
|
|
1060
1060
|
"aa_id": "2f339a97-9a0d-499a-9cb5-e0db665bfa25",
|
|
@@ -1082,8 +1082,8 @@
|
|
|
1082
1082
|
"tau2": null,
|
|
1083
1083
|
"tau_banking": 0.414432989690722
|
|
1084
1084
|
},
|
|
1085
|
-
"median_output_tokens_per_second":
|
|
1086
|
-
"median_time_to_first_token_seconds":
|
|
1085
|
+
"median_output_tokens_per_second": 64.764,
|
|
1086
|
+
"median_time_to_first_token_seconds": 191.318
|
|
1087
1087
|
},
|
|
1088
1088
|
"gpt-6-luna": {
|
|
1089
1089
|
"aa_id": "6fb13851-40ce-4bda-ad3f-6b38e0c5daa7",
|
|
@@ -1111,8 +1111,8 @@
|
|
|
1111
1111
|
"tau2": null,
|
|
1112
1112
|
"tau_banking": null
|
|
1113
1113
|
},
|
|
1114
|
-
"median_output_tokens_per_second":
|
|
1115
|
-
"median_time_to_first_token_seconds":
|
|
1114
|
+
"median_output_tokens_per_second": 135.654,
|
|
1115
|
+
"median_time_to_first_token_seconds": 75.426
|
|
1116
1116
|
},
|
|
1117
1117
|
"gpt-6-sol": {
|
|
1118
1118
|
"aa_id": "c50ea08c-88c0-4eb7-85b8-27f2bbf6d527",
|
|
@@ -1140,8 +1140,8 @@
|
|
|
1140
1140
|
"tau2": null,
|
|
1141
1141
|
"tau_banking": null
|
|
1142
1142
|
},
|
|
1143
|
-
"median_output_tokens_per_second":
|
|
1144
|
-
"median_time_to_first_token_seconds":
|
|
1143
|
+
"median_output_tokens_per_second": 0,
|
|
1144
|
+
"median_time_to_first_token_seconds": 0
|
|
1145
1145
|
},
|
|
1146
1146
|
"gpt-6.1-sol": {
|
|
1147
1147
|
"aa_id": "b25ac058-1e33-4c31-bbc9-a20c3ad0717a",
|
|
@@ -1169,8 +1169,8 @@
|
|
|
1169
1169
|
"tau2": null,
|
|
1170
1170
|
"tau_banking": null
|
|
1171
1171
|
},
|
|
1172
|
-
"median_output_tokens_per_second":
|
|
1173
|
-
"median_time_to_first_token_seconds":
|
|
1172
|
+
"median_output_tokens_per_second": 60.455,
|
|
1173
|
+
"median_time_to_first_token_seconds": 157.396
|
|
1174
1174
|
},
|
|
1175
1175
|
"gpt-oss-120b": {
|
|
1176
1176
|
"aa_id": "f0083258-8646-45b8-8082-7aaf6c2ea82a",
|
|
@@ -1198,8 +1198,8 @@
|
|
|
1198
1198
|
"tau2": 0.657894736842105,
|
|
1199
1199
|
"tau_banking": 0.127835051546392
|
|
1200
1200
|
},
|
|
1201
|
-
"median_output_tokens_per_second":
|
|
1202
|
-
"median_time_to_first_token_seconds": 0.
|
|
1201
|
+
"median_output_tokens_per_second": 199.818,
|
|
1202
|
+
"median_time_to_first_token_seconds": 0.501
|
|
1203
1203
|
},
|
|
1204
1204
|
"gpt-oss-20b": {
|
|
1205
1205
|
"aa_id": "36f73aaf-d38a-4b56-a2b3-d04d17186910",
|
|
@@ -1227,8 +1227,8 @@
|
|
|
1227
1227
|
"tau2": 0.60233918128655,
|
|
1228
1228
|
"tau_banking": 0.0701030927835052
|
|
1229
1229
|
},
|
|
1230
|
-
"median_output_tokens_per_second":
|
|
1231
|
-
"median_time_to_first_token_seconds": 0.
|
|
1230
|
+
"median_output_tokens_per_second": 227.873,
|
|
1231
|
+
"median_time_to_first_token_seconds": 0.427
|
|
1232
1232
|
},
|
|
1233
1233
|
"grok-4.3": {
|
|
1234
1234
|
"aa_id": "948892b5-db03-4118-a4a8-ccd51ed871ea",
|
|
@@ -1314,8 +1314,8 @@
|
|
|
1314
1314
|
"tau2": null,
|
|
1315
1315
|
"tau_banking": null
|
|
1316
1316
|
},
|
|
1317
|
-
"median_output_tokens_per_second":
|
|
1318
|
-
"median_time_to_first_token_seconds":
|
|
1317
|
+
"median_output_tokens_per_second": 72.511,
|
|
1318
|
+
"median_time_to_first_token_seconds": 9.66
|
|
1319
1319
|
},
|
|
1320
1320
|
"kimi-k2.7-code": {
|
|
1321
1321
|
"aa_id": "8d0cb231-7303-452c-9923-a9620b948475",
|
|
@@ -1343,8 +1343,8 @@
|
|
|
1343
1343
|
"tau2": 0.900584795321637,
|
|
1344
1344
|
"tau_banking": 0.202061855670103
|
|
1345
1345
|
},
|
|
1346
|
-
"median_output_tokens_per_second":
|
|
1347
|
-
"median_time_to_first_token_seconds": 1.
|
|
1346
|
+
"median_output_tokens_per_second": 105.681,
|
|
1347
|
+
"median_time_to_first_token_seconds": 1.142
|
|
1348
1348
|
},
|
|
1349
1349
|
"kimi-k3": {
|
|
1350
1350
|
"aa_id": "f7d2fc3e-1f7b-405f-818c-07952a4af78f",
|
|
@@ -1372,8 +1372,8 @@
|
|
|
1372
1372
|
"tau2": null,
|
|
1373
1373
|
"tau_banking": 0.45979381443299
|
|
1374
1374
|
},
|
|
1375
|
-
"median_output_tokens_per_second":
|
|
1376
|
-
"median_time_to_first_token_seconds":
|
|
1375
|
+
"median_output_tokens_per_second": 45.199,
|
|
1376
|
+
"median_time_to_first_token_seconds": 2.455
|
|
1377
1377
|
},
|
|
1378
1378
|
"mistral-large-3": {
|
|
1379
1379
|
"aa_id": "4928e950-7f37-4475-b0dc-c5bad781a321",
|
|
@@ -1401,8 +1401,8 @@
|
|
|
1401
1401
|
"tau2": 0.245614035087719,
|
|
1402
1402
|
"tau_banking": 0.0577319587628866
|
|
1403
1403
|
},
|
|
1404
|
-
"median_output_tokens_per_second":
|
|
1405
|
-
"median_time_to_first_token_seconds": 0.
|
|
1404
|
+
"median_output_tokens_per_second": 79.265,
|
|
1405
|
+
"median_time_to_first_token_seconds": 0.692
|
|
1406
1406
|
},
|
|
1407
1407
|
"mistral-medium-3.5": {
|
|
1408
1408
|
"aa_id": "dd059b25-d82a-4ead-82a4-4adceaaec48b",
|
|
@@ -1430,8 +1430,8 @@
|
|
|
1430
1430
|
"tau2": 0.941520467836257,
|
|
1431
1431
|
"tau_banking": 0.150515463917526
|
|
1432
1432
|
},
|
|
1433
|
-
"median_output_tokens_per_second":
|
|
1434
|
-
"median_time_to_first_token_seconds": 0.
|
|
1433
|
+
"median_output_tokens_per_second": 168.037,
|
|
1434
|
+
"median_time_to_first_token_seconds": 0.6
|
|
1435
1435
|
},
|
|
1436
1436
|
"mistral-small-4": {
|
|
1437
1437
|
"aa_id": "3fd96175-4ef1-434c-8795-f873aec2abc1",
|
|
@@ -1459,8 +1459,8 @@
|
|
|
1459
1459
|
"tau2": 0.412280701754386,
|
|
1460
1460
|
"tau_banking": 0.0494845360824742
|
|
1461
1461
|
},
|
|
1462
|
-
"median_output_tokens_per_second":
|
|
1463
|
-
"median_time_to_first_token_seconds": 0.
|
|
1462
|
+
"median_output_tokens_per_second": 171.598,
|
|
1463
|
+
"median_time_to_first_token_seconds": 0.559
|
|
1464
1464
|
},
|
|
1465
1465
|
"muse-spark-1.3": {
|
|
1466
1466
|
"aa_id": "9999672c-b687-4026-9c15-5cef02ff53bb",
|
|
@@ -1488,13 +1488,13 @@
|
|
|
1488
1488
|
"tau2": null,
|
|
1489
1489
|
"tau_banking": 0.505154639175258
|
|
1490
1490
|
},
|
|
1491
|
-
"median_output_tokens_per_second":
|
|
1492
|
-
"median_time_to_first_token_seconds":
|
|
1491
|
+
"median_output_tokens_per_second": 122.652,
|
|
1492
|
+
"median_time_to_first_token_seconds": 28.442
|
|
1493
1493
|
},
|
|
1494
1494
|
"opus-4.7": {
|
|
1495
1495
|
"aa_id": "e9a09db3-8fd6-41dd-ba2f-20e0a2bff7f2",
|
|
1496
1496
|
"aa_slug": "claude-opus-4-7",
|
|
1497
|
-
"aa_name": "Claude Opus 4.7 (
|
|
1497
|
+
"aa_name": "Claude Opus 4.7 (Max)",
|
|
1498
1498
|
"aa_creator": "Anthropic",
|
|
1499
1499
|
"release_date": "2026-04-16",
|
|
1500
1500
|
"evaluations": {
|
|
@@ -1523,7 +1523,7 @@
|
|
|
1523
1523
|
"opus-4.8": {
|
|
1524
1524
|
"aa_id": "992b7b84-5069-4c6a-9295-834252553d50",
|
|
1525
1525
|
"aa_slug": "claude-opus-4-8",
|
|
1526
|
-
"aa_name": "Claude Opus 4.8 (
|
|
1526
|
+
"aa_name": "Claude Opus 4.8 (Max)",
|
|
1527
1527
|
"aa_creator": "Anthropic",
|
|
1528
1528
|
"release_date": "2026-05-28",
|
|
1529
1529
|
"evaluations": {
|
|
@@ -1552,7 +1552,7 @@
|
|
|
1552
1552
|
"sonnet-4.6": {
|
|
1553
1553
|
"aa_id": "df8d14e0-3997-4e4d-b4ad-9c047acc9c69",
|
|
1554
1554
|
"aa_slug": "claude-sonnet-4-6-adaptive",
|
|
1555
|
-
"aa_name": "Claude Sonnet 4.6 (
|
|
1555
|
+
"aa_name": "Claude Sonnet 4.6 (Max)",
|
|
1556
1556
|
"aa_creator": "Anthropic",
|
|
1557
1557
|
"release_date": "2026-02-17",
|
|
1558
1558
|
"evaluations": {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema_version": "4",
|
|
3
3
|
"output_contract_version": 2,
|
|
4
|
-
"generated_at_utc": "2026-10-
|
|
4
|
+
"generated_at_utc": "2026-10-06T20:14:04Z",
|
|
5
5
|
"source_doc_sha256": {
|
|
6
|
-
"model-selector.txt": "
|
|
6
|
+
"model-selector.txt": "b7abeb92fb4d9b85b70a4544369a49de103d5695bf6dd77ea996dc4e85db0a31",
|
|
7
7
|
"model-tier-cost-scale.md": "2b3b0eb82237eb5cb5bf468a3fe971bcaf0160ad7d0bc700698d2c16640bc41d"
|
|
8
8
|
},
|
|
9
9
|
"models": [
|
|
@@ -1424,7 +1424,7 @@
|
|
|
1424
1424
|
"speed": "B"
|
|
1425
1425
|
},
|
|
1426
1426
|
"jurisdiction": "us",
|
|
1427
|
-
"headline_benchmarks": "AA Intelligence Index 30.1 (
|
|
1427
|
+
"headline_benchmarks": "AA Intelligence Index 30.1 (max); HLE 33.6%; SciCode 50.1; Terminal-Bench 4.0 3.0; AA-LCR 0.800; LMArena Text Elo 1457.7 (#41); AA-Omniscience 12.4",
|
|
1428
1428
|
"pricing_notes": "Hidden by default; Requires Max Mode on legacy request-based plans; Up to 1M tokens with extended context at the same per-token rates (no long-context surcharge)",
|
|
1429
1429
|
"best_for": "Strong multimodal input and long context at a high price. Its AA Intelligence Index of 30.1 ranks 33rd of 54 measured models.",
|
|
1430
1430
|
"superseded_by": null,
|
|
@@ -2048,7 +2048,7 @@
|
|
|
2048
2048
|
"exposes_max_mode": "no",
|
|
2049
2049
|
"exposes_thinking": "yes",
|
|
2050
2050
|
"exposes_orchestration": "no",
|
|
2051
|
-
"best_for": "Per-token AGGREGATOR that resells other makers' models behind one OpenAI-format endpoint and one key (openrouter.ai) \u2014 like Cursor's pool but paid per call, not a subscription. Reaches most of the catalog: supports-models is
|
|
2051
|
+
"best_for": "Per-token AGGREGATOR that resells other makers' models behind one OpenAI-format endpoint and one key (openrouter.ai) \u2014 like Cursor's pool but paid per call, not a subscription. Reaches most of the catalog: supports-models is synced daily from openrouter.ai/models (OpenRouter's public model list): each catalogued model it lists as a text chat route, matched by name (absent today: composer-2.5, which is Cursor-only, and gemini-3-pro, which OpenRouter serves only as an image model). The operator should trust it LESS than a provider-direct method \u2014 prefer the maker's own method when the operator holds that key. BILLING: OpenRouter charges the maker's list price plus its platform fee (~5% on credit purchases at authoring), so the catalog price is a FLOOR for this method, never an exact estimate. ROUTING: a request may be served by any of OpenRouter's upstream hosts for that model; the MODEL-level jurisdiction filter (Step 0b) still governs which models are eligible, and this method's `us` code is OpenRouter's own (the operator's counterparty), NOT the upstream host's. Exposes the maker's reasoning dial where the routed model documents one (`reasoning_effort` on OpenAI / gpt-oss / GLM / DeepSeek families). Never the maker of any model it resells: the cross-provider BACKUP guard resolves makers through provider-direct methods, exactly as it does for Cursor."
|
|
2052
2052
|
},
|
|
2053
2053
|
{
|
|
2054
2054
|
"id": "xai-api",
|
|
@@ -456,7 +456,19 @@
|
|
|
456
456
|
default. It also makes Opus 4.7+ and Fable default to a 1M context
|
|
457
457
|
window on Bedrock, Vertex, Foundry and the Claude apps gateway. The
|
|
458
458
|
`/effort` vocabulary and the extended-thinking controls are
|
|
459
|
-
unchanged.
|
|
459
|
+
unchanged. 2.1.288 fixes resumed sessions dropping the model's
|
|
460
|
+
earlier thinking, retries thinking-only responses after a
|
|
461
|
+
mid-response API timeout, and makes a plugin-defined agent spawned
|
|
462
|
+
by name run with its own effort instead of the default. 2.1.289 is a
|
|
463
|
+
plugin / mod / permission-rule bug-fix release. Neither changes the
|
|
464
|
+
`/effort` vocabulary or the extended-thinking controls. 2.1.290
|
|
465
|
+
makes three effort/thinking fixes. A flagged message retried on a
|
|
466
|
+
fallback model with a different saved level no longer changes the
|
|
467
|
+
effort level. A reply that the output content filter stopped while
|
|
468
|
+
Claude was still thinking is now retried once. `/effort` sent from
|
|
469
|
+
`claude agents` to a busy background session now applies right
|
|
470
|
+
away. 2.1.291 is a hotfix for two regressions. Neither release
|
|
471
|
+
changes the `/effort` vocabulary or the extended-thinking controls.
|
|
460
472
|
- OpenAI (Codex, OpenAI API, ChatGPT advanced controls):
|
|
461
473
|
`reasoning_effort` knob — `low`, `medium`, `high`, `xhigh`, `max`,
|
|
462
474
|
`ultra`. Codex's plan-mode `plan_mode_reasoning_effort` variant
|
|
@@ -1040,7 +1052,7 @@
|
|
|
1040
1052
|
tier-coding="B" tier-planning="B" tier-agentic="B"
|
|
1041
1053
|
tier-multimodal="A" tier-long-context="A" tier-knowledge="B"
|
|
1042
1054
|
tier-speed="B"
|
|
1043
|
-
headline-benchmarks="AA Intelligence Index 30.1 (
|
|
1055
|
+
headline-benchmarks="AA Intelligence Index 30.1 (max); HLE 33.6%; SciCode 50.1; Terminal-Bench 4.0 3.0; AA-LCR 0.800; LMArena Text Elo 1457.7 (#41); AA-Omniscience 12.4"
|
|
1044
1056
|
pricing-notes="Hidden by default; Requires Max Mode on legacy request-based plans; Up to 1M tokens with extended context at the same per-token rates (no long-context surcharge)"
|
|
1045
1057
|
prose-generated="best-for headline-benchmarks"
|
|
1046
1058
|
best-for="Strong multimodal input and long context at a high price. Its AA Intelligence Index of 30.1 ranks 33rd of 54 measured models."/>
|
|
@@ -1693,7 +1705,7 @@
|
|
|
1693
1705
|
supports-models="claude-sonnet-5-5,claude-opus-5-5,claude-opus-5,opus-4.8,claude-fable-5.1,claude-fable-5,opus-4.7,claude-sonnet-5,sonnet-4.6,claude-4.5-haiku,gpt-6-astra,gpt-6.1-sol,gpt-6-sol,gpt-6-luna,gpt-5.6-sol,gpt-5.5,gpt-5.6-terra,gpt-5.4,gpt-5.3-codex,gpt-5.2,gpt-5.2-codex,gpt-5.1-codex-max,gpt-5.1-codex,gpt-5.1-codex-mini,gpt-5,gpt-5.6-luna,gpt-5.4-mini,gpt-5.4-nano,gpt-5-mini,gemini-3.1-pro,gemini-3.8-flash,gemini-3.7-flash,gemini-3.6-flash,gemini-3.5-flash,gemini-3-flash,gemini-2.5-flash,grok-4.7,grok-4.6,grok-4.3,deepseek-v4-pro,deepseek-flash,mistral-medium-3.5,mistral-small-4,codestral,glm-5.3,glm-5.3-flash,glm-5.2,glm-4.6,glm-4.5-air,gpt-oss-120b,gpt-oss-20b,kimi-k3,kimi-k2.7-code,muse-spark-1.3"
|
|
1694
1706
|
exposes-max-mode="no" exposes-thinking="yes"
|
|
1695
1707
|
exposes-orchestration="no"
|
|
1696
|
-
best-for="Per-token AGGREGATOR that resells other makers' models behind one OpenAI-format endpoint and one key (openrouter.ai) — like Cursor's pool but paid per call, not a subscription. Reaches most of the catalog: supports-models is
|
|
1708
|
+
best-for="Per-token AGGREGATOR that resells other makers' models behind one OpenAI-format endpoint and one key (openrouter.ai) — like Cursor's pool but paid per call, not a subscription. Reaches most of the catalog: supports-models is synced daily from openrouter.ai/models (OpenRouter's public model list): each catalogued model it lists as a text chat route, matched by name (absent today: composer-2.5, which is Cursor-only, and gemini-3-pro, which OpenRouter serves only as an image model). The operator should trust it LESS than a provider-direct method — prefer the maker's own method when the operator holds that key. BILLING: OpenRouter charges the maker's list price plus its platform fee (~5% on credit purchases at authoring), so the catalog price is a FLOOR for this method, never an exact estimate. ROUTING: a request may be served by any of OpenRouter's upstream hosts for that model; the MODEL-level jurisdiction filter (Step 0b) still governs which models are eligible, and this method's `us` code is OpenRouter's own (the operator's counterparty), NOT the upstream host's. Exposes the maker's reasoning dial where the routed model documents one (`reasoning_effort` on OpenAI / gpt-oss / GLM / DeepSeek families). Never the maker of any model it resells: the cross-provider BACKUP guard resolves makers through provider-direct methods, exactly as it does for Cursor." />
|
|
1697
1709
|
</access-methods>
|
|
1698
1710
|
|
|
1699
1711
|
<selection-algorithm>
|
|
@@ -80,7 +80,15 @@ class BundleDocsHook(BuildHookInterface): # type: ignore[misc]
|
|
|
80
80
|
# source file: scripts/update_projects.py, which is also the bootstrap
|
|
81
81
|
# URL, so it is mapped in rather than copied under src/.
|
|
82
82
|
if self.target_name == "wheel":
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
for name in (
|
|
84
|
+
"update_projects",
|
|
85
|
+
"agent_context",
|
|
86
|
+
"agent_rules",
|
|
87
|
+
"upgrade_fleet",
|
|
88
|
+
"worktree_memory",
|
|
89
|
+
"updater_lock",
|
|
90
|
+
):
|
|
91
|
+
updater = root / "scripts" / (name + ".py")
|
|
92
|
+
if not updater.is_file():
|
|
93
|
+
raise FileNotFoundError(f"hatch_build.py: {updater} is missing")
|
|
94
|
+
force_include[str(updater)] = f"roadmodel/{name}.py"
|
|
@@ -153,7 +153,7 @@ is wired across three env scopes:
|
|
|
153
153
|
Google Password Manager as `roadmodel ROADMODEL_IP_SALT`).
|
|
154
154
|
Rotation cadence is **quarterly** per the Phase 7
|
|
155
155
|
secrets-rotation policy. Defaults to a placeholder in
|
|
156
|
-
`web/lib/
|
|
156
|
+
`web/lib/ip-salt.ts` so local + CI builds work without
|
|
157
157
|
override, but production builds without the override silently
|
|
158
158
|
bucket every IP under the same key, so the var **must** be
|
|
159
159
|
set in every Vercel scope serving real traffic.
|
|
@@ -442,7 +442,9 @@ deliberate — Step 6 should not relitigate the Upstash decision.
|
|
|
442
442
|
| `UPSTASH_REDIS_TOKEN` | `roadmodel-web` Vercel env vars (Marketplace Upstash + alias) | Next.js rate limiter (live since Step 7 close-out) | web: production + preview + development + staging Custom Env (Step 7) | web: production + preview + development + staging |
|
|
443
443
|
| `ROADMODEL_IP_SALT` | `roadmodel-web` Vercel env vars (generated `openssl rand -hex 32`) | Next.js rate limiter daily IP+UA hashing salt (live since Step 7 close-out); rotate quarterly | web: production + preview + development + staging Custom Env (Step 7) | web: production + preview + development + staging |
|
|
444
444
|
| `FRONTIER_ROADMAP_ENABLED` | `roadmodel-web` Vercel env vars (default `false`) | Next.js model-routing resolver — gates the Phase 5 Anthropic frontier branch | **not set anywhere in Phase 4 (defaults false)** | web: production + preview + staging (set true on the scope where Phase 5 rolls out) |
|
|
445
|
-
| `RECOMMEND_RATELIMIT_EXEMPT_USER_IDS` | `roadmodel-web` Vercel env vars (comma-separated founder Supabase uid; default empty) |
|
|
445
|
+
| `RECOMMEND_RATELIMIT_EXEMPT_USER_IDS` | `roadmodel-web` Vercel env vars (comma-separated founder Supabase uid; default empty) | The FOUNDER list (`web/lib/funding-lane.ts`): these user_ids run `/api/recommend` and `/api/roadmap` on the operator's keys with no rate limit, and see the founder-only engines; empty = nobody | web: production (founder uid) | web: production (+ preview/staging if founder tests there) |
|
|
446
|
+
| `RECOMMEND_INVITED_USER_IDS` | `roadmodel-web` Vercel env vars (comma-separated Supabase uids; default empty; personal data, never committed) | The INVITE list (`web/lib/funding-lane.ts`, Phase 4.11): these user_ids run on the operator's keys, 20 a day each; every caller on neither list gets `402 funding_required` before any paid call | web: production (Phase 4.11 Step 1) | web: production |
|
|
447
|
+
| `ROADMODEL_DAILY_COST_CAP_USD` | `roadmodel-web` Vercel env vars (readable, not sensitive) | The operator lane's daily spend circuit breaker (`web/lib/spend-guard.ts`): once the UTC day's operator-funded `audit_log.cost_usd` reaches it, the operator lane answers 503 until midnight; 0 = off | web: production = `2` (Phase 4.11 Step 1) | web: production |
|
|
446
448
|
|
|
447
449
|
Rules:
|
|
448
450
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "roadmodel"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.67"
|
|
8
8
|
description = "BYO-key CLI that recommends the right AI model, platform, and settings for a prompt."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -92,6 +92,11 @@ include = [
|
|
|
92
92
|
"docs/catalog.json",
|
|
93
93
|
"docs/benchmarks.json",
|
|
94
94
|
"scripts/update_projects.py",
|
|
95
|
+
"scripts/agent_context.py",
|
|
96
|
+
"scripts/agent_rules.py",
|
|
97
|
+
"scripts/upgrade_fleet.py",
|
|
98
|
+
"scripts/worktree_memory.py",
|
|
99
|
+
"scripts/updater_lock.py",
|
|
95
100
|
"hatch_build.py",
|
|
96
101
|
"README.md",
|
|
97
102
|
"LICENSE",
|