Run a single live Kimi scenario: kimi-k3 over the Anthropic shape

The Moonshot platform serves this account exactly one model — kimi-k3.
kimi-k2-thinking and the kimi-latest alias both return
resource_not_found_error on either API surface, so two concurrent Kimi
provider records would claim the same model and route ambiguously
(the router's path-prefix tiebreak needs the client to author the
/anthropic prefix, which the standard wire shapes don't). Keep the
flagship Claude Code path — kimi-k3 via /anthropic, green in run #74 —
as the live scenario; the OpenAI wire shape stays covered by the other
chat-shaped matrix providers and passed with kimi-k3 in run #73.
This commit is contained in:
Claude
2026-07-21 13:02:03 +00:00
parent b3b70fe581
commit e80de242cb
+10 -11
View File
@@ -43,17 +43,16 @@ func availableProviders() []providerCase {
// Kimi (Moonshot AI) serves two body shapes from the same key: OpenAI // Kimi (Moonshot AI) serves two body shapes from the same key: OpenAI
// Chat Completions on the bare host (/v1/...) and the Anthropic // Chat Completions on the bare host (/v1/...) and the Anthropic
// Messages API under the /anthropic path prefix (the endpoint // Messages API under the /anthropic path prefix (the endpoint
// Moonshot's Claude Code guide uses). One provider record per shape, // Moonshot's Claude Code guide uses). The platform serves this
// with distinct model strings so model→provider routing stays // account exactly ONE model — kimi-k3 (kimi-k2-thinking and even
// unambiguous while both are enabled. Model choice is constrained by // kimi-latest return resource_not_found_error on both surfaces) — so
// what the platform actually serves this account: kimi-k2-thinking // two concurrent provider records would claim the same model and
// returns resource_not_found_error ("... or Permission denied") on // route ambiguously. Run the Anthropic shape, the flagship Claude
// both surfaces — K2-era models aren't available to newer platform // Code path; the OpenAI wire shape is covered live by the other
// accounts — so the OpenAI shape uses the kimi-latest alias and the // chat-shaped matrix providers, and Kimi-over-chat passed with
// Anthropic shape the kimi-k3 flagship (the only model that surface // kimi-k3 before the single-model constraint surfaced (run #73 on
// serves; it's what Moonshot's Claude Code guide configures). // the kimi feature branch).
ps = append(ps, providerCase{name: "kimi-openai", catalogID: "kimi_api", upstream: "https://api.moonshot.ai", apiKey: k, model: "kimi-latest", kind: harness.WireChat}) ps = append(ps, providerCase{name: "kimi", catalogID: "kimi_api", upstream: "https://api.moonshot.ai/anthropic", apiKey: k, model: "kimi-k3", kind: harness.WireMessages})
ps = append(ps, providerCase{name: "kimi-anthropic", catalogID: "kimi_api", upstream: "https://api.moonshot.ai/anthropic", apiKey: k, model: "kimi-k3", kind: harness.WireMessages})
} }
if k, u := os.Getenv("VERCEL_TOKEN"), os.Getenv("VERCEL_URL"); k != "" && u != "" { if k, u := os.Getenv("VERCEL_TOKEN"), os.Getenv("VERCEL_URL"); k != "" && u != "" {
ps = append(ps, providerCase{name: "vercel", catalogID: "vercel_ai_gateway", upstream: u, apiKey: k, model: "openai/gpt-4o-mini", kind: harness.WireChat}) ps = append(ps, providerCase{name: "vercel", catalogID: "vercel_ai_gateway", upstream: u, apiKey: k, model: "openai/gpt-4o-mini", kind: harness.WireChat})