Summary
Add Kimi (Moonshot) as a provider. Moonshot exposes an OpenAI Chat Completions-compatible API, so this reuses the seam from #71 — it should be a data row + pricing rows + a contract test, not a new adapter.
Blocked by #71 (the OpenAI-compatible provider seam).
Scope
Acceptance
provider: moonshot runs from a recorded cassette with no adapter code beyond the seam.
make check green, offline.
Notes
Confirm tool-calling parity: if Kimi ever returns tool arguments as a non-string or truncated JSON, the existing defensive parse (arguments={} + malformed_arguments) must cover it — add a malformed-arguments fixture if so.
Summary
Add Kimi (Moonshot) as a provider. Moonshot exposes an OpenAI Chat Completions-compatible API, so this reuses the seam from #71 — it should be a data row + pricing rows + a contract test, not a new adapter.
Blocked by #71 (the OpenAI-compatible provider seam).
Scope
moonshot,base_url= Moonshot's OpenAI-compatible endpoint, key fromMOONSHOT_API_KEY. Verify the current base URL and env-var name at implementation time (Moonshot has region-specific hosts).dryfire/data/pricing.yamlfor the Kimi model family (e.g.moonshot:kimi-k2-...). Advisory only — an unknown model yields no cost, never a guess.from_wire/to_wirehandle it.@pytest.mark.livesmoke test behindMOONSHOT_API_KEY.Acceptance
provider: moonshotruns from a recorded cassette with no adapter code beyond the seam.make checkgreen, offline.Notes
Confirm tool-calling parity: if Kimi ever returns tool arguments as a non-string or truncated JSON, the existing defensive parse (
arguments={}+malformed_arguments) must cover it — add a malformed-arguments fixture if so.