Skip to content

Commit a00cb45

Browse files
committed
fix: keep Smart Route starters on v1
1 parent db5af37 commit a00cb45

6 files changed

Lines changed: 350 additions & 1753 deletions

‎README.md‎

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ Model catalog data as JSON files, refreshed on a schedule.
66
https://raw.githubusercontent.com/cloudstack-llc/model-catalog/main/v1/prices.json
77
https://raw.githubusercontent.com/cloudstack-llc/model-catalog/main/v1/ollama-models.json
88
https://raw.githubusercontent.com/cloudstack-llc/model-catalog/main/v1/featured-models.json
9-
https://raw.githubusercontent.com/cloudstack-llc/model-catalog/main/v2/smart-route-starters.json
9+
https://raw.githubusercontent.com/cloudstack-llc/model-catalog/main/v1/smart-route-starters.json
1010
```
1111

1212
| File | Contents | Source | Cadence |
1313
| --- | --- | --- | --- |
1414
| `v1/prices.json` | Token pricing for hosted models | [models.dev](https://models.dev) | 6 hours |
1515
| `v1/ollama-models.json` | The Ollama library: models, tags, sizes, context windows | [ollama.com](https://ollama.com/library) | 12 hours |
1616
| `v1/featured-models.json` | Curated local models worth downloading, grouped into collections | Curated; resolved against Ollama and Hugging Face | On change |
17-
| `v2/smart-route-starters.json` | Model-neutral Smart Route starters, grouped by use | Curated | On change |
17+
| `v1/smart-route-starters.json` | Model-neutral Smart Route starters, grouped by use | Curated | On change |
1818

1919
# Token pricing
2020

@@ -69,7 +69,7 @@ No dependencies.
6969

7070
# Smart Route starters
7171

72-
`v2/smart-route-starters.json` gives Msty Nexus a model-neutral starting point
72+
`v1/smart-route-starters.json` gives Msty Nexus a model-neutral starting point
7373
for common routing jobs. A starter contains the route name, classifier lanes,
7474
target guidance, and the endpoint families it expects. It never contains a
7575
model or pool ID. Nexus asks the person adding it to choose those targets.
@@ -82,10 +82,6 @@ never changed by a catalog update.
8282
Displayed copy describes each starter and lane directly. Lane descriptions are
8383
capped at 512 bytes because that is the classifier input limit.
8484

85-
`v1/smart-route-starters.json` remains published for Runtime versions that
86-
shipped with its original copy contract. New curation belongs in `v2`; do not
87-
rewrite v1 in place.
88-
8985
## Writing lane descriptions
9086

9187
Arch-Router matches the latest request against every lane as a natural-language

‎scripts/smart-route-starters-verify.mjs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { fileURLToPath } from "node:url";
99
import { validateSmartRouteStarters } from "./smart-route-starters.mjs";
1010

1111
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
12-
const path = resolve(repoRoot, process.argv[2] ?? "v2/smart-route-starters.json");
12+
const path = resolve(repoRoot, process.argv[2] ?? "v1/smart-route-starters.json");
1313
const text = await readFile(path, "utf8");
1414
const artifact = JSON.parse(text);
1515
const problems = validateSmartRouteStarters(artifact);

‎scripts/smart-route-starters.mjs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ export function validateSmartRouteStarters(artifact) {
9595
new Set(["schema_version", "generated_at", "locale", "collections", "starters"]),
9696
)) return problems;
9797

98-
if (artifact.schema_version !== 1 && artifact.schema_version !== 2) {
99-
problems.push("schema_version must be 1 or 2");
98+
if (artifact.schema_version !== 1) {
99+
problems.push("schema_version must be 1");
100100
}
101-
const directCopy = artifact.schema_version === 2;
101+
const directCopy = true;
102102
if (
103103
typeof artifact.generated_at !== "string" ||
104104
Number.isNaN(Date.parse(artifact.generated_at))

‎scripts/smart-route-starters.test.mjs‎

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { validateSmartRouteStarters } from "./smart-route-starters.mjs";
66

77
function artifact() {
88
return {
9-
schema_version: 2,
9+
schema_version: 1,
1010
generated_at: "2026-08-23T00:00:00Z",
1111
locale: "en",
1212
collections: [
@@ -49,23 +49,11 @@ test("accepts a model-neutral starter catalog with direct copy", () => {
4949
assert.deepEqual(validateSmartRouteStarters(artifact()), []);
5050
});
5151

52-
test("the committed starter catalogs are valid and model-neutral", async () => {
53-
for (const version of ["v1", "v2"]) {
54-
const committed = JSON.parse(
55-
await readFile(
56-
new URL(`../${version}/smart-route-starters.json`, import.meta.url),
57-
"utf8",
58-
),
59-
);
60-
assert.deepEqual(validateSmartRouteStarters(committed), []);
61-
}
62-
});
63-
64-
test("keeps the v1 copy contract readable for existing runtimes", () => {
65-
const input = artifact();
66-
input.schema_version = 1;
67-
input.starters[0].summary = "I want a route for daily work.";
68-
assert.deepEqual(validateSmartRouteStarters(input), []);
52+
test("the committed starter catalog is valid and model-neutral", async () => {
53+
const committed = JSON.parse(
54+
await readFile(new URL("../v1/smart-route-starters.json", import.meta.url), "utf8"),
55+
);
56+
assert.deepEqual(validateSmartRouteStarters(committed), []);
6957
});
7058

7159
test("rejects model bindings and unsupported endpoints", () => {

0 commit comments

Comments
 (0)