diff --git a/internal/providers/configs/unboundai.json b/internal/providers/configs/unboundai.json new file mode 100644 index 00000000..ca4247ec --- /dev/null +++ b/internal/providers/configs/unboundai.json @@ -0,0 +1,281 @@ +{ + "name": "Unbound AI", + "id": "unbound", + "api_key": "$UNBOUND_AI_API_KEY", + "api_endpoint": "https://api.getunbound.ai/v1", + "type": "openai", + "default_large_model_id": "openai/gpt-5", + "default_small_model_id": "google/gemini-2.0-flash-lite", + "models": [ + { + "id": "anthropic/claude-3-5-haiku-20241022", "name": "Anthropic Claude 3.5 Haiku", + "cost_per_1m_in": 800000, "cost_per_1m_out": 4000000, + "context_window": 200000, "default_max_tokens": 8192 + }, + { + "id": "anthropic/claude-3-5-sonnet-20241022", "name": "Anthropic Claude 3.5 Sonnet", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 200000, "default_max_tokens": 8192 + }, + { + "id": "anthropic/claude-3-7-sonnet-20250219", "name": "Anthropic Claude 3.7 Sonnet", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 200000, "default_max_tokens": 64000 + }, + { + "id": "anthropic/claude-3-haiku-20240307", "name": "Anthropic Claude 3 Haiku", + "cost_per_1m_in": 250000, "cost_per_1m_out": 1250000, + "context_window": 200000, "default_max_tokens": 4096 + }, + { + "id": "anthropic/claude-3-opus-20240229", "name": "Anthropic Claude 3 Opus", + "cost_per_1m_in": 15000000, "cost_per_1m_out": 75000000, + "context_window": 200000, "default_max_tokens": 4096 + }, + { + "id": "anthropic/claude-3-sonnet-20240229", "name": "Anthropic Claude 3 Sonnet", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 200000, "default_max_tokens": 4096 + }, + { + "id": "anthropic/claude-opus-4-1-20250805", "name": "Anthropic Claude Opus 4.1", + "cost_per_1m_in": 15000000, "cost_per_1m_out": 75000000, + "context_window": 200000, "default_max_tokens": 32000 + }, + { + "id": "anthropic/claude-opus-4-20250514", "name": "Anthropic Claude Opus 4", + "cost_per_1m_in": 15000000, "cost_per_1m_out": 75000000, + "context_window": 200000, "default_max_tokens": 32000 + }, + { + "id": "anthropic/claude-sonnet-4-20250514", "name": "Anthropic Claude Sonnet 4", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 200000, "default_max_tokens": 64000 + }, + { + "id": "bedrock/us.anthropic.claude-3-5-sonnet-20240620-v1:0", "name": "Bedrock Claude 3.5 Sonnet", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 200000, "default_max_tokens": 8192 + }, + { + "id": "bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0", "name": "Bedrock Claude 3.7 Sonnet", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 200000, "default_max_tokens": 64000 + }, + { + "id": "dashscope/qwen2.5-7b-instruct", "name": "Dashscope Qwen 2.5 7B Instruct", + "cost_per_1m_in": 0, "cost_per_1m_out": 0, + "context_window": 128000, "default_max_tokens": 4096 + }, + { + "id": "dashscope/qwen2.5-vl-72b-instruct", "name": "Dashscope Qwen 2.5 VL 72B Instruct", + "cost_per_1m_in": 0, "cost_per_1m_out": 0, + "context_window": 128000, "default_max_tokens": 4096 + }, + { + "id": "fireworks-ai/gpt-oss-120b", "name": "Fireworks AI GPT OSS 120B", + "cost_per_1m_in": 150000, "cost_per_1m_out": 600000, + "context_window": 128000, "default_max_tokens": 32768 + }, + { + "id": "fireworks-ai/gpt-oss-20b", "name": "Fireworks AI GPT OSS 20B", + "cost_per_1m_in": 70000, "cost_per_1m_out": 300000, + "context_window": 128000, "default_max_tokens": 32768 + }, + { + "id": "fireworks-ai/kimi-k2-instruct", "name": "Fireworks AI Kimi K2 Instruct", + "cost_per_1m_in": 600000, "cost_per_1m_out": 2500000, + "context_window": 131072, "default_max_tokens": 131072 + }, + { + "id": "fireworks-ai/qwen3-235b-a22b-instruct-2507", "name": "Fireworks AI Qwen3 235B Instruct", + "cost_per_1m_in": 220000, "cost_per_1m_out": 880000, + "context_window": 256000, "default_max_tokens": 32768 + }, + { + "id": "fireworks-ai/qwen3-coder-480b-a35b-instruct", "name": "Fireworks AI Qwen3 Coder 480B", + "cost_per_1m_in": 450000, "cost_per_1m_out": 1800000, + "context_window": 256000, "default_max_tokens": 32768 + }, + { + "id": "google/gemini-1.5-flash", "name": "Google Gemini 1.5 Flash", + "cost_per_1m_in": 100000, "cost_per_1m_out": 400000, + "context_window": 128000, "default_max_tokens": 4096 + }, + { + "id": "google/gemini-2.0-flash", "name": "Google Gemini 2.0 Flash", + "cost_per_1m_in": 100000, "cost_per_1m_out": 400000, + "context_window": 0, "default_max_tokens": 8192 + }, + { + "id": "google/gemini-2.0-flash-lite", "name": "Google Gemini 2.0 Flash Lite", + "cost_per_1m_in": 80000, "cost_per_1m_out": 300000, + "context_window": 0, "default_max_tokens": 8192 + }, + { + "id": "google/gemini-2.0-pro-exp-02-05", "name": "Google Gemini 2.0 Pro Experimental", + "cost_per_1m_in": 0, "cost_per_1m_out": 0, + "context_window": 0, "default_max_tokens": 8192 + }, + { + "id": "google/gemini-2.5-flash", "name": "Google Gemini 2.5 Flash", + "cost_per_1m_in": 300000, "cost_per_1m_out": 2500000, + "context_window": 1048576, "default_max_tokens": 65535 + }, + { + "id": "google/gemini-2.5-flash-lite-preview-06-17", "name": "Google Gemini 2.5 Flash Lite Preview", + "cost_per_1m_in": 100000, "cost_per_1m_out": 400000, + "context_window": 1048576, "default_max_tokens": 65535 + }, + { + "id": "google/gemini-2.5-flash-preview-04-17", "name": "Google Gemini 2.5 Flash Preview", + "cost_per_1m_in": 150000, "cost_per_1m_out": 600000, + "context_window": 1048576, "default_max_tokens": 65535 + }, + { + "id": "google/gemini-2.5-pro", "name": "Google Gemini 2.5 Pro", + "cost_per_1m_in": 1250000, "cost_per_1m_out": 10000000, + "context_window": 1048576, "default_max_tokens": 65536 + }, + { + "id": "google/gemini-2.5-pro-exp-03-25", "name": "Google Gemini 2.5 Pro Experimental", + "cost_per_1m_in": 0, "cost_per_1m_out": 0, + "context_window": 0, "default_max_tokens": 65536 + }, + { + "id": "google/gemini-2.5-pro-preview-05-06", "name": "Google Gemini 2.5 Pro Preview", + "cost_per_1m_in": 1250000, "cost_per_1m_out": 10000000, + "context_window": 0, "default_max_tokens": 65535 + }, + { + "id": "meta/meta-llama-3.3-70b-instruct", "name": "Meta Llama 3.3 70B Instruct", + "cost_per_1m_in": 500000, "cost_per_1m_out": 1500000, + "context_window": 128000, "default_max_tokens": 9500 + }, + { + "id": "mistral-ai/codestral-latest", "name": "Mistral AI Codestral Latest", + "cost_per_1m_in": 300000, "cost_per_1m_out": 900000, + "context_window": 256000, "default_max_tokens": 32768 + }, + { + "id": "openai/gpt-3.5-turbo", "name": "OpenAI GPT-3.5 Turbo", + "cost_per_1m_in": 500000, "cost_per_1m_out": 1500000, + "context_window": 16384, "default_max_tokens": 4096 + }, + { + "id": "openai/gpt-4.1", "name": "OpenAI GPT-4.1", + "cost_per_1m_in": 2000000, "cost_per_1m_out": 8000000, + "context_window": 1047576, "default_max_tokens": 32768 + }, + { + "id": "openai/gpt-4.1-mini", "name": "OpenAI GPT-4.1 Mini", + "cost_per_1m_in": 400000, "cost_per_1m_out": 1600000, + "context_window": 1047576, "default_max_tokens": 32768 + }, + { + "id": "openai/gpt-4.1-nano", "name": "OpenAI GPT-4.1 Nano", + "cost_per_1m_in": 100000, "cost_per_1m_out": 400000, + "context_window": 1047576, "default_max_tokens": 32768 + }, + { + "id": "openai/gpt-4o", "name": "OpenAI GPT-4o", + "cost_per_1m_in": 2500000, "cost_per_1m_out": 10000000, + "context_window": 128000, "default_max_tokens": 4096 + }, + { + "id": "openai/gpt-4o-mini", "name": "OpenAI GPT-4o Mini", + "cost_per_1m_in": 150000, "cost_per_1m_out": 600000, + "context_window": 128000, "default_max_tokens": 16384 + }, + { + "id": "openai/gpt-5", "name": "OpenAI GPT-5", + "cost_per_1m_in": 1250000, "cost_per_1m_out": 10000000, + "context_window": 400000, "default_max_tokens": 128000 + }, + { + "id": "openai/gpt-5-mini", "name": "OpenAI GPT-5 Mini", + "cost_per_1m_in": 250000, "cost_per_1m_out": 2000000, + "context_window": 400000, "default_max_tokens": 128000 + }, + { + "id": "openai/gpt-5-nano", "name": "OpenAI GPT-5 Nano", + "cost_per_1m_in": 50000, "cost_per_1m_out": 400000, + "context_window": 400000, "default_max_tokens": 128000 + }, + { + "id": "openai/o1-mini", "name": "OpenAI o1 Mini", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 12000000, + "context_window": 128000, "default_max_tokens": 65536 + }, + { + "id": "openai/o1-preview", "name": "OpenAI o1 Preview", + "cost_per_1m_in": 15000000, "cost_per_1m_out": 60000000, + "context_window": 128000, "default_max_tokens": 32768 + }, + { + "id": "openai/o3", "name": "OpenAI o3", + "cost_per_1m_in": 10000000, "cost_per_1m_out": 40000000, + "context_window": 200000, "default_max_tokens": 100000 + }, + { + "id": "openai/o3-mini", "name": "OpenAI o3 Mini", + "cost_per_1m_in": 1100000, "cost_per_1m_out": 4400000, + "context_window": 200000, "default_max_tokens": 100000 + }, + { + "id": "openai/o4-mini", "name": "OpenAI o4 Mini", + "cost_per_1m_in": 1100000, "cost_per_1m_out": 4400000, + "context_window": 200000, "default_max_tokens": 100000 + }, + { + "id": "tinfoil/deepseek-r1-70b", "name": "Tinfoil Deepseek R1 70B", + "cost_per_1m_in": 2000000, "cost_per_1m_out": 2000000, + "context_window": 64000, "default_max_tokens": 32768 + }, + { + "id": "tinfoil/llama3-3-70b", "name": "Tinfoil Llama3 3 70B", + "cost_per_1m_in": 2000000, "cost_per_1m_out": 2000000, + "context_window": 64000, "default_max_tokens": 16384 + }, + { + "id": "tinfoil/mistral-small-3-1-24b", "name": "Tinfoil Mistral Small 3.1 24B", + "cost_per_1m_in": 2000000, "cost_per_1m_out": 2000000, + "context_window": 128000, "default_max_tokens": 128000 + }, + { + "id": "x-ai/grok-2-latest", "name": "x-AI Grok 2 Latest", + "cost_per_1m_in": 2000000, "cost_per_1m_out": 10000000, + "context_window": 131072, "default_max_tokens": 0 + }, + { + "id": "x-ai/grok-3-beta", "name": "x-AI Grok 3 Beta", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 131072, "default_max_tokens": 0 + }, + { + "id": "x-ai/grok-3-fast-beta", "name": "x-AI Grok 3 Fast Beta", + "cost_per_1m_in": 5000000, "cost_per_1m_out": 25000000, + "context_window": 131072, "default_max_tokens": 0 + }, + { + "id": "x-ai/grok-3-mini-beta", "name": "x-AI Grok 3 Mini Beta", + "cost_per_1m_in": 300000, "cost_per_1m_out": 500000, + "context_window": 131072, "default_max_tokens": 0 + }, + { + "id": "x-ai/grok-3-mini-fast-beta", "name": "x-AI Grok 3 Mini Fast Beta", + "cost_per_1m_in": 600000, "cost_per_1m_out": 4000000, + "context_window": 131072, "default_max_tokens": 0 + }, + { + "id": "x-ai/grok-4", "name": "x-AI Grok 4", + "cost_per_1m_in": 3000000, "cost_per_1m_out": 15000000, + "context_window": 256000, "default_max_tokens": 0 + }, + { + "id": "x-ai/grok-beta", "name": "x-AI Grok Beta", + "cost_per_1m_in": 5000000, "cost_per_1m_out": 15000000, + "context_window": 131072, "default_max_tokens": 0 + } + ] +} \ No newline at end of file diff --git a/internal/providers/providers.go b/internal/providers/providers.go index 4d6af227..1ff417ec 100644 --- a/internal/providers/providers.go +++ b/internal/providers/providers.go @@ -48,6 +48,9 @@ var cerebrasConfig []byte //go:embed configs/venice.json var veniceConfig []byte +//go:embed configs/unboundai.json +var unboundaiConfig []byte + // ProviderFunc is a function that returns a Provider. type ProviderFunc func() catwalk.Provider @@ -65,6 +68,7 @@ var providerRegistry = []ProviderFunc{ lambdaProvider, cerebrasProvider, veniceProvider, + unboundaiProvider, } // GetAll returns all registered providers. @@ -136,3 +140,7 @@ func cerebrasProvider() catwalk.Provider { func veniceProvider() catwalk.Provider { return loadProviderFromConfig(veniceConfig) } + +func unboundaiProvider() catwalk.Provider { + return loadProviderFromConfig(unboundaiConfig) +} \ No newline at end of file