Skip to content

Commit 2dd5943

Browse files
committed
fix: display Kimi K3.1 Pro model label
1 parent e396846 commit 2dd5943

3 files changed

Lines changed: 97 additions & 1 deletion

File tree

‎sdks/python/agenta/sdk/agents/data/pi_models.curated.json‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"_curation": {
44
"target": "pi_models.generated.json",
55
"note": "Human overlay for the generated Pi catalog. Keyed by the entry `id` (the `provider/model` join key). Only `label`, `description`, and `ratings` may appear here; the objective facts (name/pricing/context_window/modalities) always come from the generated file. The SDK loader merges this on top of the generated facts, so a pi-ai regeneration never overwrites these judgments. Ratings: 1-5, higher is better; `cost` is cost-efficiency (5 = cheapest). Sourced from the current lineup (Fable 5 is the Anthropic frontier, above Opus), not a model's memory. Uncurated ids are valid and fall back to `name` in the picker; seed only the models worth a description. The separate `additions` list carries WHOLE entries (facts included, `source`: `curated`) for models released after the pinned pi-ai snapshot, which the generated file cannot carry at all. A generated entry of the same id always wins, so an addition retires itself on the next regeneration; drop it then.",
6-
"sources": "@earendil-works/pi-ai@0.99.1 (regenerated 2026-09-30; the Claude Sonnet 5.5 addition retired because pi-ai 0.99.1 carries it); vendor model and pricing pages, checked 2026-09-07; GPT-6 Sol and Luna from OpenAI's 2026-09-22 launch (openai.com/index/introducing-gpt-6-sol-and-luna, VentureBeat, MarkTechPost), checked 2026-09-27. GPT-6.1 Sol from OpenAI's 2026-09-29 DevDay launch ($2/$10 per Mtok, $0.10 cached input, near-Astra agentic coding at one fifth of Astra's price; pi-ai 0.99.1 carries it and makes it the Codex default), checked 2026-09-30."
6+
"sources": "@earendil-works/pi-ai@0.99.1 (regenerated 2026-09-30; the Claude Sonnet 5.5 addition retired because pi-ai 0.99.1 carries it); vendor model and pricing pages, checked 2026-09-07; GPT-6 Sol and Luna from OpenAI's 2026-09-22 launch (openai.com/index/introducing-gpt-6-sol-and-luna, VentureBeat, MarkTechPost), checked 2026-09-27. GPT-6.1 Sol from OpenAI's 2026-09-29 DevDay launch ($2/$10 per Mtok, $0.10 cached input, near-Astra agentic coding at one fifth of Astra's price; pi-ai 0.99.1 carries it and makes it the Codex default), checked 2026-09-30. Kimi K3.1 Pro facts from OpenRouter's public model catalog (https://openrouter.ai/api/v1/models), checked 2026-10-26."
77
},
88
"overlay": {
99
"openai/gpt-6-astra": {
@@ -88,6 +88,9 @@
8888
"gemini/gemini-3-pro-preview": {
8989
"description": "Google's flagship Gemini 3 Pro, large context and multimodal input.",
9090
"ratings": {"cost": 4, "intelligence": 4, "speed": 4}
91+
},
92+
"openrouter/moonshotai/kimi-k3.1-pro": {
93+
"label": "Kimi K3.1 Pro"
9194
}
9295
},
9396
"additions": [
@@ -96,6 +99,20 @@
9699
"provider": "openrouter",
97100
"source": "curated",
98101
"name": "Gemini 4 Argon"
102+
},
103+
{
104+
"id": "openrouter/moonshotai/kimi-k3.1-pro",
105+
"provider": "openrouter",
106+
"source": "curated",
107+
"name": "MoonshotAI: Kimi K3.1 Pro",
108+
"pricing": {
109+
"input_per_mtok": 2,
110+
"output_per_mtok": 10,
111+
"cache_read_per_mtok": 0.2,
112+
"currency": "USD"
113+
},
114+
"context_window": 1048576,
115+
"modalities": ["text", "image", "video"]
99116
}
100117
]
101118
}

‎sdks/python/oss/tests/pytest/unit/agents/connections/test_model_catalog.py‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,3 +545,29 @@ def test_gemini_4_argon_is_published_with_its_display_name():
545545
)
546546
assert entry["name"] == "Gemini 4 Argon"
547547
assert entry["provider"] == "openrouter"
548+
549+
550+
def test_kimi_k3_1_pro_is_published_with_a_clean_label():
551+
entries = harness_catalog_document()["pi_core"]["capabilities"]["model_catalog"]
552+
entry = next(
553+
(
554+
item
555+
for item in entries
556+
if item["id"] == "openrouter/moonshotai/kimi-k3.1-pro"
557+
),
558+
None,
559+
)
560+
assert entry is not None, (
561+
"openrouter/moonshotai/kimi-k3.1-pro missing from the pi catalog"
562+
)
563+
assert entry["provider"] == "openrouter"
564+
assert entry["source"] == "curated"
565+
assert entry["name"] == "MoonshotAI: Kimi K3.1 Pro"
566+
assert entry["label"] == "Kimi K3.1 Pro"
567+
assert entry["context_window"] == 1048576
568+
assert entry["modalities"] == ["text", "image", "video"]
569+
assert entry["pricing"]["input_per_mtok"] == 2
570+
assert entry["pricing"]["output_per_mtok"] == 10
571+
assert entry["pricing"]["cache_read_per_mtok"] == 0.2
572+
assert entry["pricing"]["cache_write_per_mtok"] is None
573+
assert entry["pricing"]["currency"] == "USD"

‎web/packages/agenta-entities/tests/unit/prompt-model-groups.test.ts‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,11 @@ describe("selectedOptionLabel", () => {
10051005
provider: "openrouter",
10061006
label: "DeepSeek: DeepSeek V4 Flash",
10071007
},
1008+
{
1009+
id: "openrouter/moonshotai/kimi-k3.1-pro",
1010+
provider: "openrouter",
1011+
label: "Kimi K3.1 Pro",
1012+
},
10081013
],
10091014
},
10101015
}
@@ -1036,6 +1041,54 @@ describe("selectedOptionLabel", () => {
10361041
)
10371042
})
10381043

1044+
it("labels Kimi K3.1 Pro without changing its runnable OpenRouter id", () => {
1045+
const groups = buildConnectionModelGroups({
1046+
connections: [
1047+
standard({
1048+
id: "or",
1049+
slug: "openrouter",
1050+
kind: "openrouter",
1051+
models: ["moonshotai/kimi-k3.1-pro"],
1052+
}),
1053+
],
1054+
capabilities: caps,
1055+
})
1056+
1057+
expect(groups[0].options).toMatchObject([
1058+
{
1059+
label: "Kimi K3.1 Pro",
1060+
value: "openrouter/moonshotai/kimi-k3.1-pro",
1061+
},
1062+
])
1063+
expect(selectedOptionLabel({groups, model: "openrouter/moonshotai/kimi-k3.1-pro"})).toBe(
1064+
"Kimi K3.1 Pro",
1065+
)
1066+
})
1067+
1068+
it("keeps an uncatalogued OpenRouter model id as its fallback label", () => {
1069+
const groups = buildConnectionModelGroups({
1070+
connections: [
1071+
standard({
1072+
id: "or",
1073+
slug: "openrouter",
1074+
kind: "openrouter",
1075+
models: ["moonshotai/uncatalogued-model"],
1076+
}),
1077+
],
1078+
capabilities: caps,
1079+
})
1080+
1081+
expect(groups[0].options).toMatchObject([
1082+
{
1083+
label: "moonshotai/uncatalogued-model",
1084+
value: "openrouter/moonshotai/uncatalogued-model",
1085+
},
1086+
])
1087+
expect(
1088+
selectedOptionLabel({groups, model: "openrouter/moonshotai/uncatalogued-model"}),
1089+
).toBe("moonshotai/uncatalogued-model")
1090+
})
1091+
10391092
it("gives a manually added id back exactly as typed", () => {
10401093
const groups = buildConnectionModelGroups({
10411094
connections: [standard({models: ["my-fine-tune-v3"]})],

0 commit comments

Comments
 (0)