Skip to content

Add Kimi K3 (Moonshot) as a verifiable teacher via OpenRouter - #59

Merged
ai-hpc merged 2 commits into
mainfrom
feat/moonshot-kimi-k3
Aug 8, 2026
Merged

Add Kimi K3 (Moonshot) as a verifiable teacher via OpenRouter#59
ai-hpc merged 2 commits into
mainfrom
feat/moonshot-kimi-k3

Conversation

@ai-hpc

@ai-hpc ai-hpc commented Aug 8, 2026

Copy link
Copy Markdown
Member

Stacked on #58 (base is feat/qwen-teacher). Merge #58 first.

Adds the moonshot provider pinned to the OpenRouter slug moonshotai/kimi-k3, with kimi-k3 as the logical model id recorded on a trajectory and checked against ALLOWED_MODELS. The moonshotai/ prefix addresses the model; it is not the record — the prefixed form is rejected as a logical id, with a test saying so.

Naming

Provider key is the vendor, not the model family: moonshot/kimi-k3 matches anthropic/claude-fable-5 and openai/gpt-5.6. This also follows the naming on the older feat/kimi-k3-teacher branch — which predates v0.3.0 and swaps GPT 5.6 Sol out rather than adding alongside it, so it isn't reusable as-is.

Pinned to OpenRouter only

The same model through a different gateway is not the same evidence — OpenRouter is the one route with a generation-id ledger re-check. moonshot via yunwu is refused.

The pin holds in both directions

Case Result
moonshot / kimi-k3
moonshot / kimi-k3-2026-08 (dated build) ✅ → kimi-k3
moonshot / moonshotai/kimi-k3 ❌ request slug, not logical id
moonshot claiming claude-fable-5
anthropic claiming kimi-k3
moonshot / kimi-k2 ❌ wrong version
moonshot via yunwu ❌ not the pinned route

Without the cross-provider check the allowlist would only prove that some pinned teacher was used, not which one.

Unchanged

gpt-5.6-sol stays in ALLOWED_MODELS — retired for generation, but 23 merged registry entries were proved with it and removing it would retroactively invalidate the data behind the current frontier. A test asserts the other three teachers still normalize exactly as before.

Verification

400 tests pass (9 new), ruff clean.

Adds the `moonshot` provider pinned to the OpenRouter slug
`moonshotai/kimi-k3`, with `kimi-k3` as the logical model id recorded on a
trajectory and checked against ALLOWED_MODELS. The prefix addresses the model;
it is not the record, which is why the prefixed form is rejected as a logical
id and there is a test saying so.

Provider key is the vendor, not the model family: `moonshot`/`kimi-k3` matches
`anthropic`/`claude-fable-5` and `openai`/`gpt-5.6`. This also follows the
naming on the older feat/kimi-k3-teacher branch, which predates v0.3.0 and
swapped GPT 5.6 Sol out rather than adding alongside it.

Kimi is pinned to OpenRouter only. The same model reached through a different
gateway is not the same evidence -- OpenRouter is the one route with a
generation-id ledger re-check -- so kimi via yunwu is refused.

The pin is enforced in both directions, as with Qwen: a moonshot bundle
claiming `claude-fable-5` and an anthropic bundle claiming `kimi-k3` are both
rejected. Without the cross-provider check the allowlist would only prove that
some pinned teacher was used, not which one.

OpenRouter dated build suffixes (kimi-k3-<date>) normalize to kimi-k3.

gpt-5.6-sol stays in ALLOWED_MODELS. It is retired for generation but 23
merged registry entries were proved with it, and removing it here would
retroactively invalidate the data behind the current frontier.

Stacked on feat/qwen-teacher.
@ai-hpc
ai-hpc changed the base branch from feat/qwen-teacher to main August 8, 2026 00:36
@ai-hpc
ai-hpc merged commit 0c98574 into main Aug 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant