From 40bfb137ad1aaa58558859b968fe1c9116a79c6c Mon Sep 17 00:00:00 2001 From: Leo Walker Date: Tue, 30 Jun 2026 14:15:43 -0700 Subject: [PATCH] feat(providers): add Fireworks AI declarative provider (#9990) Signed-off-by: Leo Walker --- .../src/providers/declarative/fireworks.json | 55 +++++++++++++++++++ crates/goose/src/providers/init.rs | 24 ++++++++ 2 files changed, 79 insertions(+) create mode 100644 crates/goose/src/providers/declarative/fireworks.json diff --git a/crates/goose/src/providers/declarative/fireworks.json b/crates/goose/src/providers/declarative/fireworks.json new file mode 100644 index 000000000..85b56bb67 --- /dev/null +++ b/crates/goose/src/providers/declarative/fireworks.json @@ -0,0 +1,55 @@ +{ + "name": "fireworks-ai", + "engine": "openai", + "display_name": "Fireworks AI", + "description": "Fast serverless inference for open models with an OpenAI-compatible API", + "api_key_env": "FIREWORKS_API_KEY", + "base_url": "https://api.fireworks.ai/inference/v1/chat/completions", + "catalog_provider_id": "fireworks-ai", + "dynamic_models": false, + "models": [ + { + "name": "accounts/fireworks/models/kimi-k2p7-code", + "context_limit": 262000 + }, + { + "name": "accounts/fireworks/models/kimi-k2p6", + "context_limit": 262000 + }, + { + "name": "accounts/fireworks/models/glm-5p2", + "context_limit": 1048576 + }, + { + "name": "accounts/fireworks/models/deepseek-v4-pro", + "context_limit": 1000000 + }, + { + "name": "accounts/fireworks/models/deepseek-v4-flash", + "context_limit": 1000000 + }, + { + "name": "accounts/fireworks/models/minimax-m3", + "context_limit": 512000 + }, + { + "name": "accounts/fireworks/models/qwen3p7-plus", + "context_limit": 262144 + }, + { + "name": "accounts/fireworks/models/glm-5p1", + "context_limit": 202800 + }, + { + "name": "accounts/fireworks/models/gpt-oss-120b", + "context_limit": 131072 + }, + { + "name": "accounts/fireworks/models/gpt-oss-20b", + "context_limit": 131072 + } + ], + "preserves_thinking": true, + "supports_streaming": true, + "model_doc_link": "https://fireworks.ai/models" +} diff --git a/crates/goose/src/providers/init.rs b/crates/goose/src/providers/init.rs index e2261dcb6..e258f2666 100644 --- a/crates/goose/src/providers/init.rs +++ b/crates/goose/src/providers/init.rs @@ -409,6 +409,30 @@ mod tests { assert!(api_key.primary, "DASHSCOPE_API_KEY should be primary"); } + #[tokio::test] + async fn test_fireworks_declarative_provider_registry_wiring() { + let fireworks = get_from_registry("fireworks-ai") + .await + .expect("fireworks-ai provider should be registered"); + let meta = fireworks.metadata(); + + assert_eq!(fireworks.provider_type(), ProviderType::Declarative); + assert_eq!(meta.display_name, "Fireworks AI"); + assert_eq!( + meta.default_model, + "accounts/fireworks/models/kimi-k2p7-code" + ); + assert_eq!(meta.model_doc_link, "https://fireworks.ai/models"); + + let api_key = meta + .config_keys + .iter() + .find(|k| k.name == "FIREWORKS_API_KEY") + .expect("FIREWORKS_API_KEY config key should exist"); + assert!(api_key.required, "FIREWORKS_API_KEY should be required"); + assert!(api_key.secret, "FIREWORKS_API_KEY should be secret"); + } + #[tokio::test] async fn test_openai_compatible_providers_config_keys() { let providers_list = providers().await;