diff --git a/crates/goose-providers/src/declarative.rs b/crates/goose-providers/src/declarative.rs index 20d832bb0..1a287dd05 100644 --- a/crates/goose-providers/src/declarative.rs +++ b/crates/goose-providers/src/declarative.rs @@ -41,6 +41,7 @@ pub(crate) mod declarative_providers { orcarouter, ovhcloud, perplexity, + pleumrouter, routstr, sakana, saladcloud, diff --git a/crates/goose-providers/src/declarative/definitions/pleumrouter.json b/crates/goose-providers/src/declarative/definitions/pleumrouter.json new file mode 100644 index 000000000..dbb5cd0f8 --- /dev/null +++ b/crates/goose-providers/src/declarative/definitions/pleumrouter.json @@ -0,0 +1,30 @@ +{ + "name": "pleumrouter", + "engine": "openai", + "display_name": "PleumRouter", + "description": "Korea-region OpenAI-compatible multi-provider LLM gateway — one key for OpenAI, Anthropic, Google, and more.", + "api_key_env": "PLEUMROUTER_API_KEY", + "base_url": "https://router.pleum.ai/v1", + "catalog_provider_id": "pleumrouter", + "headers": { + "http-referer": "https://goose-docs.ai", + "x-title": "goose" + }, + "models": [ + { "name": "deepseek-v4-pro", "context_limit": 1000000 }, + { "name": "glm-5.1", "context_limit": 200000 }, + { "name": "qwen3-max", "context_limit": 262144 }, + { "name": "claude-sonnet-4-6", "context_limit": 1000000 }, + { "name": "gpt-5.5", "context_limit": 1050000 }, + { "name": "gemini-2.5-pro", "context_limit": 1000000 } + ], + "dynamic_models": true, + "supports_streaming": true, + "preserves_thinking": true, + "model_doc_link": "https://router.pleum.ai/docs", + "setup_steps": [ + "Sign up at https://router.pleum.ai", + "Create an API key (starts with plm_)", + "Paste the key above as PLEUMROUTER_API_KEY" + ] +} diff --git a/crates/goose-providers/src/openai.rs b/crates/goose-providers/src/openai.rs index 7248ca9c8..6bad5a21c 100644 --- a/crates/goose-providers/src/openai.rs +++ b/crates/goose-providers/src/openai.rs @@ -425,7 +425,7 @@ impl OpenAiProvider { "ovhcloud", ]; - const PROVIDERS_NEEDING_STANDARD_CHAT_PARAMS: &[&str] = &["nearai"]; + const PROVIDERS_NEEDING_STANDARD_CHAT_PARAMS: &[&str] = &["nearai", "pleumrouter"]; /// Providers whose reasoning models accept an OpenAI-style /// `reasoning_effort` field on chat-completions requests but aren't