diff --git a/open-sse/config/providerModels.js b/open-sse/config/providerModels.js index 139c1270..4ed9c52f 100644 --- a/open-sse/config/providerModels.js +++ b/open-sse/config/providerModels.js @@ -348,8 +348,19 @@ export const PROVIDER_MODELS = { { id: "DeepSeek-V3.2", name: "DeepSeek-V3.2" }, ], "cloudflare-ai": [ + { id: "@cf/meta/llama-3.2-1b-instruct", name: "Llama 3.2 1B Instruct" }, + { id: "@cf/meta/llama-3.2-3b-instruct", name: "Llama 3.2 3B Instruct" }, + { id: "@cf/meta/llama-3.1-8b-instruct-fp8-fast", name: "Llama 3.1 8B Instruct FP8 Fast" }, + { id: "@cf/meta/llama-3.1-8b-instruct-awq", name: "Llama 3.1 8B Instruct AWQ" }, + { id: "@cf/mistralai/mistral-small-3.1-24b-instruct", name: "Mistral Small 3.1 24B Instruct" }, + { id: "@cf/meta/llama-3.1-70b-instruct-fp8-fast", name: "Llama 3.1 70B Instruct FP8 Fast" }, + { id: "@cf/meta/llama-3.3-70b-instruct-fp8-fast", name: "Llama 3.3 70B Instruct FP8 Fast" }, + { id: "@cf/deepseek-ai/deepseek-r1-distill-qwen-32b", name: "DeepSeek R1 Distill Qwen 32B" }, + { id: "@cf/moonshotai/kimi-k2.5", name: "Kimi K2.5" }, { id: "@cf/moonshotai/kimi-k2.6", name: "Kimi K2.6" }, { id: "@cf/zai-org/glm-4.7-flash", name: "GLM 4.7 Flash" }, + { id: "@cf/qwen/qwq-32b", name: "QwQ 32B" }, + { id: "@cf/qwen/qwen2.5-coder-32b-instruct", name: "Qwen 2.5 Coder 32B Instruct" }, ], byteplus: [ { id: "seed-2-0-pro-260328", name: "Seed 2.0 Pro" }, diff --git a/open-sse/services/model.js b/open-sse/services/model.js index be1f6656..c5ebcff3 100644 --- a/open-sse/services/model.js +++ b/open-sse/services/model.js @@ -65,6 +65,8 @@ const ALIAS_TO_PROVIDER_ID = { "perplexity-web": "perplexity-web", mimo: "xiaomi-mimo", "xiaomi-mimo": "xiaomi-mimo", + cf: "cloudflare-ai", + "cloudflare-ai": "cloudflare-ai", }; /** diff --git a/public/providers/cloudflare-ai.png b/public/providers/cloudflare-ai.png new file mode 100644 index 00000000..d2e8519a Binary files /dev/null and b/public/providers/cloudflare-ai.png differ diff --git a/public/providers/nebius.png b/public/providers/nebius.png index 483b81cb..5a9586ed 100644 Binary files a/public/providers/nebius.png and b/public/providers/nebius.png differ diff --git a/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js b/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js index ae14fcf6..db3427a9 100644 --- a/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js +++ b/src/app/(dashboard)/dashboard/cli-tools/components/AntigravityToolCard.js @@ -290,7 +290,7 @@ export default function AntigravityToolCard({ {/* Start/Stop Button */} -
+
{isRunning ? ( diff --git a/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js b/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js index 97d8c7d5..65367dbd 100644 --- a/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js +++ b/src/app/(dashboard)/dashboard/cli-tools/components/ClaudeToolCard.js @@ -95,7 +95,7 @@ export default function ClaudeToolCard({ if (claudeStatus?.installed && !hasInitializedModels.current) { hasInitializedModels.current = true; const env = claudeStatus.settings?.env || {}; - + tool.defaultModels.forEach((model) => { if (model.envKey) { const value = env[model.envKey] || model.defaultValue || ""; @@ -141,16 +141,16 @@ export default function ClaudeToolCard({ setMessage(null); try { const env = { ANTHROPIC_BASE_URL: getEffectiveBaseUrl() }; - + // Get key from dropdown, fallback to first key or sk_9router for localhost - const keyToUse = selectedApiKey?.trim() + const keyToUse = selectedApiKey?.trim() || (apiKeys?.length > 0 ? apiKeys[0].key : null) || (!cloudEnabled ? "sk_9router" : null); - + if (keyToUse) { env.ANTHROPIC_AUTH_TOKEN = keyToUse; } - + tool.defaultModels.forEach((model) => { const targetModel = modelMappings[model.alias]; if (targetModel && model.envKey) env[model.envKey] = targetModel; @@ -205,15 +205,15 @@ export default function ClaudeToolCard({ // Generate settings.json content for manual copy const getManualConfigs = () => { - const keyToUse = (selectedApiKey && selectedApiKey.trim()) - ? selectedApiKey + const keyToUse = (selectedApiKey && selectedApiKey.trim()) + ? selectedApiKey : (!cloudEnabled ? "sk_9router" : ""); const env = { ANTHROPIC_BASE_URL: getEffectiveBaseUrl(), ANTHROPIC_AUTH_TOKEN: keyToUse }; tool.defaultModels.forEach((model) => { const targetModel = modelMappings[model.alias]; if (targetModel && model.envKey) env[model.envKey] = targetModel; }); - + return [ { filename: "~/.claude/settings.json", @@ -292,7 +292,7 @@ export default function ClaudeToolCard({
{/* Current Base URL */} {claudeStatus?.settings?.env?.ANTHROPIC_BASE_URL && ( -
+
Current arrow_forward @@ -302,15 +302,15 @@ export default function ClaudeToolCard({ )} {/* Base URL */} -
+
Base URL arrow_forward - setCustomBaseUrl(e.target.value)} - placeholder="https://.../v1" - className="min-w-0 px-2 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5" + setCustomBaseUrl(e.target.value)} + placeholder="https://.../v1" + className="w-full min-w-0 px-2 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5" /> {customBaseUrl && customBaseUrl !== baseUrl && (
{/* API Key */} -
+
API Key arrow_forward {apiKeys.length > 0 ? ( - setSelectedApiKey(e.target.value)} className="w-full min-w-0 px-2 py-2 bg-surface rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5"> {apiKeys.map((key) => )} ) : ( @@ -336,17 +336,17 @@ export default function ClaudeToolCard({ {/* Model Mappings */} {tool.defaultModels.map((model) => ( -
+
{model.name} arrow_forward - onModelMappingChange(model.alias, e.target.value)} placeholder="provider/model-id" className="min-w-0 px-2 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5" /> - + onModelMappingChange(model.alias, e.target.value)} placeholder="provider/model-id" className="w-full min-w-0 px-2 py-2 bg-surface rounded border border-border text-xs focus:outline-none focus:ring-1 focus:ring-primary/50 sm:py-1.5" /> + {modelMappings[model.alias] && }
))} {/* CC Filter Naming */} -
+
Filter naming arrow_forward