From 26bf09ae0b8c6162d5f7f43917ae2245d98dc803 Mon Sep 17 00:00:00 2001 From: Andrew Gele Date: Sun, 26 Apr 2026 17:24:05 -0400 Subject: [PATCH] chore: add Fireworks AI as a provider Co-Authored-By: Claude Sonnet 4.6 --- internal/providers/configs/fireworks.json | 185 ++++++++++++++++++++++ internal/providers/providers.go | 8 + pkg/catwalk/provider.go | 2 + 3 files changed, 195 insertions(+) create mode 100644 internal/providers/configs/fireworks.json diff --git a/internal/providers/configs/fireworks.json b/internal/providers/configs/fireworks.json new file mode 100644 index 00000000..ca35099d --- /dev/null +++ b/internal/providers/configs/fireworks.json @@ -0,0 +1,185 @@ +{ + "name": "Fireworks AI", + "id": "fireworks", + "api_key": "$FIREWORKS_API_KEY", + "api_endpoint": "https://api.fireworks.ai/inference/v1", + "type": "openai-compat", + "default_large_model_id": "accounts/fireworks/models/kimi-k2p5", + "default_small_model_id": "accounts/fireworks/models/qwen3-8b", + "models": [ + { + "id": "accounts/fireworks/models/deepseek-v3p1", + "name": "DeepSeek V3.1", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 163840, + "default_max_tokens": 40960, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/deepseek-v3p2", + "name": "Deepseek v3.2", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 163840, + "default_max_tokens": 40960, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/glm-5p1", + "name": "GLM 5.1", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 202752, + "default_max_tokens": 50688, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/glm-4p7", + "name": "GLM-4.7", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 202752, + "default_max_tokens": 50688, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/glm-5", + "name": "GLM-5", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 202752, + "default_max_tokens": 50688, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/kimi-k2p5", + "name": "Kimi K2.5", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 262144, + "default_max_tokens": 65536, + "can_reason": false, + "supports_attachments": true + }, + { + "id": "accounts/fireworks/models/kimi-k2p6", + "name": "Kimi K2.6", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 262144, + "default_max_tokens": 65536, + "can_reason": false, + "supports_attachments": true + }, + { + "id": "accounts/fireworks/models/minimax-m2p7", + "name": "MiniMax M2.7", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 196608, + "default_max_tokens": 49152, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/minimax-m2p5", + "name": "MiniMax-M2.5", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 196608, + "default_max_tokens": 49152, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/gpt-oss-120b", + "name": "OpenAI gpt-oss-120b", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 131072, + "default_max_tokens": 32768, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/qwen3-8b", + "name": "Qwen3 8B", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 40960, + "default_max_tokens": 10240, + "can_reason": false, + "supports_attachments": false + }, + { + "id": "accounts/fireworks/models/qwen3-vl-30b-a3b-instruct", + "name": "Qwen3 VL 30B A3B Instruct", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 262144, + "default_max_tokens": 65536, + "can_reason": false, + "supports_attachments": true + }, + { + "id": "accounts/fireworks/models/qwen3-vl-30b-a3b-thinking", + "name": "Qwen3 VL 30B A3B Thinking", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 262144, + "default_max_tokens": 65536, + "can_reason": true, + "reasoning_levels": [ + "low", + "medium", + "high" + ], + "default_reasoning_effort": "medium", + "supports_attachments": true + }, + { + "id": "accounts/fireworks/models/qwen3p6-plus", + "name": "Qwen3.6 Plus", + "cost_per_1m_in": 0, + "cost_per_1m_out": 0, + "cost_per_1m_in_cached": 0, + "cost_per_1m_out_cached": 0, + "context_window": 131072, + "default_max_tokens": 32768, + "can_reason": false, + "supports_attachments": true + } + ] +} diff --git a/internal/providers/providers.go b/internal/providers/providers.go index 4ba9d43f..59c1c781 100644 --- a/internal/providers/providers.go +++ b/internal/providers/providers.go @@ -39,6 +39,9 @@ var cortecsConfig []byte //go:embed configs/deepseek.json var deepSeekConfig []byte +//go:embed configs/fireworks.json +var fireworksConfig []byte + //go:embed configs/gemini.json var geminiConfig []byte @@ -130,6 +133,7 @@ var providerRegistry = []ProviderFunc{ copilotProvider, cortecsProvider, deepSeekProvider, + fireworksProvider, groqProvider, huggingFaceProvider, ioNetProvider, @@ -204,6 +208,10 @@ func deepSeekProvider() catwalk.Provider { return loadProviderFromConfig(deepSeekConfig) } +func fireworksProvider() catwalk.Provider { + return loadProviderFromConfig(fireworksConfig) +} + func geminiProvider() catwalk.Provider { return loadProviderFromConfig(geminiConfig) } diff --git a/pkg/catwalk/provider.go b/pkg/catwalk/provider.go index f107df35..b5d35eeb 100644 --- a/pkg/catwalk/provider.go +++ b/pkg/catwalk/provider.go @@ -42,6 +42,7 @@ const ( InferenceKimiCoding InferenceProvider = "kimi-coding" InferenceProviderCopilot InferenceProvider = "copilot" InferenceProviderCortecs InferenceProvider = "cortecs" + InferenceProviderFireworks InferenceProvider = "fireworks" InferenceProviderVercel InferenceProvider = "vercel" InferenceProviderMiniMax InferenceProvider = "minimax" InferenceProviderMiniMaxChina InferenceProvider = "minimax-china" @@ -118,6 +119,7 @@ func KnownProviders() []InferenceProvider { InferenceKimiCoding, InferenceProviderCopilot, InferenceProviderCortecs, + InferenceProviderFireworks, InferenceProviderVercel, InferenceProviderMiniMax, InferenceProviderMiniMaxChina,