From 3badf1cbb6b06b99d586c12dd9cabe2f44a87285 Mon Sep 17 00:00:00 2001 From: Anurag Saxena Date: Fri, 17 Apr 2026 01:06:00 -0400 Subject: [PATCH] fix: add Blackbox AI as a supported provider (closes #599) (#630) * fix: add multi-model support for Factory Droid CLI tool (closes #521) * Add Claude Opus 4.7 to cc and cl provider lists RESEARCH confirmed GA release April 16, 2026. Adding to: - cc (Claude Code): claude-opus-4-7 - cl (Cline): anthropic/claude-opus-4.7 Refs: TICKET-20260416-ENG-O4.7-001 * fix: add Blackbox AI as a supported provider (closes #599) --- open-sse/config/providerModels.js | 21 +++++++++++++++++++++ src/app/api/providers/validate/route.js | 18 ++++++++++++++++++ src/shared/constants/providers.js | 1 + 3 files changed, 40 insertions(+) diff --git a/open-sse/config/providerModels.js b/open-sse/config/providerModels.js index f007db8..3b790a2 100644 --- a/open-sse/config/providerModels.js +++ b/open-sse/config/providerModels.js @@ -8,6 +8,7 @@ import { buildTtsProviderModels } from "./ttsModels.js"; export const PROVIDER_MODELS = { // OAuth Providers (using alias) cc: [ // Claude Code + { id: "claude-opus-4-7", name: "Claude Opus 4.7" }, { id: "claude-opus-4-6", name: "Claude Opus 4.6" }, { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" }, { id: "claude-opus-4-5-20251101", name: "Claude 4.5 Opus" }, @@ -154,6 +155,7 @@ export const PROVIDER_MODELS = { ], cl: [ // Cline + { id: "anthropic/claude-opus-4.7", name: "Claude Opus 4.7" }, { id: "anthropic/claude-sonnet-4.6", name: "Claude Sonnet 4.6" }, { id: "anthropic/claude-opus-4.6", name: "Claude Opus 4.6" }, { id: "openai/gpt-5.3-codex", name: "GPT-5.3 Codex" }, @@ -260,6 +262,25 @@ export const PROVIDER_MODELS = { { id: "MiniMax-M2.5", name: "MiniMax M2.5" }, { id: "MiniMax-M2.1", name: "MiniMax M2.1" }, ], + blackbox: [ + { id: "gpt-4o", name: "GPT-4o" }, + { id: "gpt-4o-mini", name: "GPT-4o mini" }, + { id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6" }, + { id: "claude-sonnet-4.5", name: "Claude Sonnet 4.5" }, + { id: "claude-opus-4.6", name: "Claude Opus 4.6" }, + { id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6 (Legacy)" }, + { id: "claude-opus-4-6", name: "Claude Opus 4.6 (Legacy)" }, + { id: "deepseek-chat", name: "DeepSeek Chat" }, + { id: "deepseek-v3-671b", name: "DeepSeek V3 671B" }, + { id: "deepseek-r1", name: "DeepSeek R1" }, + { id: "o1", name: "OpenAI o1" }, + { id: "o3-mini", name: "OpenAI o3-mini" }, + { id: "gemini-2.5-flash", name: "Gemini 2.5 Flash" }, + { id: "gemini-3-flash-preview", name: "Gemini 3 Flash Preview" }, + { id: "qwen3-coder-plus", name: "Qwen3 Coder Plus" }, + { id: "qwen3-max", name: "Qwen3 Max" }, + { id: "qwen3-vl-plus", name: "Qwen3 VL Plus" }, + ], "minimax-cn": [ { id: "MiniMax-M2.7", name: "MiniMax M2.7" }, { id: "MiniMax-M2.5", name: "MiniMax M2.5" }, diff --git a/src/app/api/providers/validate/route.js b/src/app/api/providers/validate/route.js index 0247a8a..e548e68 100644 --- a/src/app/api/providers/validate/route.js +++ b/src/app/api/providers/validate/route.js @@ -204,6 +204,24 @@ export async function POST(request) { break; } + case "blackbox": { + const res = await fetch("https://api.blackbox.ai/chat/completions", { + method: "POST", + headers: { + "Authorization": `Bearer ${apiKey}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model: "gpt-4o", + messages: [{ role: "user", content: "test" }], + max_tokens: 10, + }), + }); + // Returns 401 for invalid key, 200 for valid, 400 for malformed + isValid = res.status === 200 || res.status === 400; + break; + } + case "vertex": { // Raw key: probe global endpoint (always 404 for unknown model, never 401) // SA JSON: attempt token mint via JWT assertion diff --git a/src/shared/constants/providers.js b/src/shared/constants/providers.js index d344ca7..f5ce84b 100644 --- a/src/shared/constants/providers.js +++ b/src/shared/constants/providers.js @@ -87,6 +87,7 @@ export const APIKEY_PROVIDERS = { sdwebui: { id: "sdwebui", alias: "sdwebui", name: "SD WebUI", icon: "brush", color: "#FF7043", textIcon: "SD", website: "https://github.com/AUTOMATIC1111/stable-diffusion-webui", serviceKinds: ["image"] }, comfyui: { id: "comfyui", alias: "comfyui", name: "ComfyUI", icon: "account_tree", color: "#4CAF50", textIcon: "CF", website: "https://github.com/comfyanonymous/ComfyUI", serviceKinds: ["image"] }, huggingface: { id: "huggingface", alias: "hf", name: "HuggingFace", icon: "face", color: "#FFD21E", textIcon: "HF", website: "https://huggingface.co", serviceKinds: ["image", "imageToText", "tts"], hiddenKinds: ["tts"] }, + blackbox: { id: "blackbox", alias: "bb", name: "Blackbox AI", icon: "smart_toy", color: "#5B5FEF", textIcon: "BB", website: "https://blackbox.ai", serviceKinds: ["llm"] }, chutes: { id: "chutes", alias: "ch", name: "Chutes AI", icon: "water_drop", color: "#ffffffff", textIcon: "CH", website: "https://chutes.ai" }, "ollama-local": { id: "ollama-local", alias: "ollama-local", name: "Ollama Local", icon: "cloud", color: "#ffffffff", textIcon: "OL", website: "https://ollama.com" }, "vertex-partner": { id: "vertex-partner", alias: "vxp", name: "Vertex Partner", icon: "cloud", color: "#34A853", textIcon: "VP", website: "https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models" },