From 14ff538f2e48aabfd09882f5660bb683a7016bc1 Mon Sep 17 00:00:00 2001 From: Zhen <80612068+DEYLNN@users.noreply.github.com> Date: Sun, 3 May 2026 14:55:43 +0700 Subject: [PATCH] Improve mobile layouts and restore Cloudflare provider (#840) Co-authored-by: Delynn Assistant --- open-sse/config/providerModels.js | 11 +++ open-sse/services/model.js | 2 + public/providers/cloudflare-ai.png | Bin 0 -> 24109 bytes public/providers/nebius.png | Bin 1743 -> 4287 bytes .../components/AntigravityToolCard.js | 12 +-- .../cli-tools/components/ClaudeToolCard.js | 46 +++++----- .../cli-tools/components/CodexToolCard.js | 80 ++++++++-------- .../cli-tools/components/DefaultToolCard.js | 14 +-- .../cli-tools/components/DroidToolCard.js | 14 +-- .../cli-tools/components/HermesToolCard.js | 28 +++--- .../cli-tools/components/MitmToolCard.js | 2 +- .../cli-tools/components/OpenClawToolCard.js | 40 ++++---- .../cli-tools/components/OpenCodeToolCard.js | 52 +++++------ .../media-providers/[kind]/[id]/page.js | 86 +++++++++--------- .../dashboard/media-providers/[kind]/page.js | 2 +- .../media-providers/web/combo/[id]/page.js | 8 +- .../dashboard/media-providers/web/page.js | 10 +- .../providers/components/ConnectionsCard.js | 24 ++--- src/shared/components/Sidebar.js | 1 - src/shared/constants/providers.js | 1 + 20 files changed, 223 insertions(+), 210 deletions(-) create mode 100644 public/providers/cloudflare-ai.png 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 0000000000000000000000000000000000000000..d2e8519a627bcd391b0347c9bad63e1b0931b3ab GIT binary patch literal 24109 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 ogul+Y-_)mVXdmX}VZNh {/* 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