diff --git a/crates/goose-provider-types/src/canonical.rs b/crates/goose-provider-types/src/canonical.rs index 1b05b09fe..f444f692f 100644 --- a/crates/goose-provider-types/src/canonical.rs +++ b/crates/goose-provider-types/src/canonical.rs @@ -132,4 +132,13 @@ mod tests { assert!(canonical.cost.input.is_some()); assert!(canonical.cost.output.is_some()); } + + #[test] + fn kimi_code_k3_resolves_with_reasoning_and_context_limit() { + let canonical = maybe_get_canonical_model("kimi_code", "k3") + .expect("kimi_code/k3 should resolve via kimi-for-coding provider mapping"); + assert_eq!(canonical.limit.context, 1_048_576); + assert_eq!(canonical.reasoning, Some(true)); + assert_eq!(canonical.temperature, Some(false)); + } } diff --git a/crates/goose-provider-types/src/canonical/name_builder.rs b/crates/goose-provider-types/src/canonical/name_builder.rs index 0c1c4be7b..a47c204d4 100644 --- a/crates/goose-provider-types/src/canonical/name_builder.rs +++ b/crates/goose-provider-types/src/canonical/name_builder.rs @@ -54,6 +54,7 @@ pub fn map_provider_name(provider: &str) -> &str { "novita" => "novita-ai", "opencode_go" => "opencode-go", "ollama_cloud" => "ollama-cloud", + "kimi_code" => "kimi-for-coding", _ => provider, } } @@ -532,6 +533,16 @@ mod tests { Some("zhipuai/glm-5".to_string()) ); + // === Kimi Code === + assert_eq!( + map_to_canonical_model("kimi_code", "kimi-for-coding", r), + Some("kimi-for-coding/kimi-for-coding".to_string()) + ); + assert_eq!( + map_to_canonical_model("kimi_code", "kimi-for-coding-highspeed", r), + Some("kimi-for-coding/kimi-for-coding-highspeed".to_string()) + ); + // === GCP Vertex AI === assert_eq!( map_to_canonical_model("gcp_vertex_ai", "gemini-2.5-flash", r), diff --git a/crates/goose/src/providers/kimicode.rs b/crates/goose/src/providers/kimicode.rs index b36a8f4b3..42ef464d2 100644 --- a/crates/goose/src/providers/kimicode.rs +++ b/crates/goose/src/providers/kimicode.rs @@ -4,7 +4,7 @@ use async_stream::try_stream; use async_trait::async_trait; use chrono::{DateTime, Duration, Utc}; use futures::TryStreamExt; -use goose_providers::formats::anthropic::{AnthropicFormatOptions, ANTHROPIC_PROVIDER_NAME}; +use goose_providers::formats::anthropic::AnthropicFormatOptions; use reqwest::header::{HeaderMap, HeaderValue}; use reqwest::Client; use serde::{Deserialize, Serialize}; @@ -420,7 +420,7 @@ impl Provider for KimiCodeProvider { tools: &[Tool], ) -> Result { let mut payload = create_request( - ANTHROPIC_PROVIDER_NAME, + KIMI_CODE_PROVIDER_NAME, model_config, system, messages,