From d1fb485954ac146eb804084bc4ebea42e64737a9 Mon Sep 17 00:00:00 2001 From: Lucas1479 Date: Thu, 29 Oct 2026 11:41:35 +1300 Subject: [PATCH] fix(config): default DeepSeek model to deepseek-flash Signed-off-by: Lucas1479 --- .env.example | 6 +++--- README.md | 4 ++-- config/catalog/models/deepseek.json | 2 +- config/catalog/providers/codex.json | 2 +- config/catalog/providers/pi.json | 2 +- electron/src/renderer/components/SettingsPage.tsx | 2 +- .../src/renderer/components/sceneCapabilityProjection.ts | 2 +- electron/src/shared/configCatalog.generated.ts | 6 +++--- server/vn_tts_bridge.py | 4 ++-- server/wallpaper_subtitle_translator.py | 2 +- tests/test_config_catalog.py | 8 ++++++++ 11 files changed, 24 insertions(+), 16 deletions(-) diff --git a/.env.example b/.env.example index 837c710b..0fdc112f 100644 --- a/.env.example +++ b/.env.example @@ -381,7 +381,7 @@ RAG_MAX_DISTANCE=0.33 # DeepSeek # DEEPSEEK_API_KEY= DEEPSEEK_BASE_URL=https://api.deepseek.com -DEEPSEEK_MODEL_NAME=deepseek-v4-flash +DEEPSEEK_MODEL_NAME=deepseek-flash # END GENERATED CONFIG: deepseek # BEGIN GENERATED CONFIG: gemini @@ -429,7 +429,7 @@ OPENAI_MODEL_NAME=gpt-5.4-mini CODEX_APP_SERVER_CODEX_BIN="" # CODEX_APP_SERVER_AUTH_MODE=model_api # chatgpt | model_api CODEX_APP_SERVER_MODEL_PROVIDER=deepseek # deepseek | openai -CODEX_APP_SERVER_MODEL=deepseek-v4-flash +CODEX_APP_SERVER_MODEL=deepseek-flash CODEX_APP_SERVER_REASONING_EFFORT=max # none | minimal | low | medium | high | xhigh | max CODEX_APP_SERVER_SERVICE_TIER="" # | auto | default | flex | priority | fast | ultrafast DIRECT_CODEX_CLI_PATH=codex @@ -450,7 +450,7 @@ PI_PROVIDER_ENABLED=true PI_NODE_PATH=node PI_AGENT_DIR=runtime/pi PI_MODEL_PROVIDER=deepseek -PI_MODEL=deepseek-v4-flash +PI_MODEL=deepseek-flash # END GENERATED CONFIG: pi # BEGIN GENERATED CONFIG: work_routing diff --git a/README.md b/README.md index bf27a66b..03181006 100644 --- a/README.md +++ b/README.md @@ -753,11 +753,11 @@ failure: | Responsibility | Recommended profile | Current boundary | |---|---|---| -| Main Chat API | DeepSeek-V4-Flash-0731: `DEEPSEEK_BASE_URL=https://api.deepseek.com` and `DEEPSEEK_MODEL_NAME=deepseek-v4-flash` | `deepseek-v4-flash` is the stable API alias currently pointing to the 0731 release; the dated version is not used as the runtime model id. | +| Main Chat API | DeepSeek Flash: `DEEPSEEK_BASE_URL=https://api.deepseek.com` and `DEEPSEEK_MODEL_NAME=deepseek-flash` | `deepseek-flash` is the recommended API model name; see the [official model-name guidance](https://api-docs.deepseek.com/quick_start/agent_integrations/). Existing explicit model settings are preserved. | | Remote speech synthesis | **Fish Audio S2.1**: `TTS_BACKEND=fish_audio`, `FISH_TTS_MODEL=s2.1-pro-free`; Kurisu voice: `FISH_TTS_REFERENCE_ID=b450b19370434173b121446057622e9b` | Bidirectional WebSocket streaming; locally committed sentence chunks use `text → flush`, with incremental audio output. Existing Chat sentence scheduling is preserved. | | Multimodal / Vision | Prefer `gemini-3.7-flash`; use `gemini-3.5-flash` as a more conservative compatibility profile | Host-owned visual context performs capture in-process, while image delivery still follows the Main Chat Provider. Independent Gemini Vision API routing is not implemented and does not imply restoring the retired Gemini Live sidecar. | | Work execution Provider | Pi for daily tasks; Codex App Server for complex coding | Desktop installation includes the pinned Pi runtime; [configure model credentials](docs/pi-rpc-provider.md). OpenClaw remains optional for explicit selection; Browser retains managed-page operations. | -| Work execution model | Codex App Server may explicitly select a GPT-5.6-family model or `deepseek-v4-flash` | The execution model belongs to the Work Provider and does not share Main Chat routing or credentials. | +| Work execution model | Codex App Server may explicitly select a GPT-5.6-family model or `deepseek-flash` | The execution model belongs to the Work Provider and does not share Main Chat routing or credentials. | | AUIP runtime action decisions | `AUIP_ACTION_PROVIDER=openai`, `AUIP_ACTION_MODEL=gpt-5.6-terra`, `AUIP_ACTION_REASONING_EFFORT=low`, and `AUIP_ACTION_SERVICE_TIER=fast` | This model decides AppSession actions and participation; it is not the execution Provider that authors an AUIP Artifact. `fast` requires availability for the API project. | ### Recommended remote TTS: Fish Audio + Kurisu diff --git a/config/catalog/models/deepseek.json b/config/catalog/models/deepseek.json index 89624d41..469d18b7 100644 --- a/config/catalog/models/deepseek.json +++ b/config/catalog/models/deepseek.json @@ -42,7 +42,7 @@ "en-US": "Independent from the Codex Work Provider model.", "zh-CN": "独立于 Codex Work Provider 使用的模型。" }, - "default": "deepseek-v4-flash", + "default": "deepseek-flash", "example_active": true } }, diff --git a/config/catalog/providers/codex.json b/config/catalog/providers/codex.json index 023752b4..7a2b3844 100644 --- a/config/catalog/providers/codex.json +++ b/config/catalog/providers/codex.json @@ -125,7 +125,7 @@ "zh-CN": "默认继承所选 Models 连接中的模型。" }, "computed_default": true, - "example": "deepseek-v4-flash", + "example": "deepseek-flash", "visible_when": { "CODEX_PROVIDER_TRANSPORT": [ "app_server" diff --git a/config/catalog/providers/pi.json b/config/catalog/providers/pi.json index 9f87cb90..666cd214 100644 --- a/config/catalog/providers/pi.json +++ b/config/catalog/providers/pi.json @@ -57,7 +57,7 @@ "zh-CN": "Pi 模型" }, "computed_default": true, - "example": "deepseek-v4-flash", + "example": "deepseek-flash", "example_active": true } }, diff --git a/electron/src/renderer/components/SettingsPage.tsx b/electron/src/renderer/components/SettingsPage.tsx index 347b1822..ad6feb2e 100644 --- a/electron/src/renderer/components/SettingsPage.tsx +++ b/electron/src/renderer/components/SettingsPage.tsx @@ -1073,7 +1073,7 @@ export default function SettingsPage({ send, subscribe, connected, reconnectBack const mainModelLabel = modelProviderLabels[mainModelProvider] || mainModelProvider const imageModel = mainModelProvider === 'deepseek' || mainModelProvider === 'hybrid2' ? String(modelConnections.find(group => group.id === 'deepseek')?.fields - ?.find(field => field.key === 'DEEPSEEK_MODEL_NAME')?.value || 'deepseek-v4-flash') + ?.find(field => field.key === 'DEEPSEEK_MODEL_NAME')?.value || 'deepseek-flash') : '' const visionModelReady = mainModelReady && chatProviderSupportsImages(mainModelProvider, imageModel) const configuredTranslationModels = modelConnections diff --git a/electron/src/renderer/components/sceneCapabilityProjection.ts b/electron/src/renderer/components/sceneCapabilityProjection.ts index 86502f2c..12ec3e0d 100644 --- a/electron/src/renderer/components/sceneCapabilityProjection.ts +++ b/electron/src/renderer/components/sceneCapabilityProjection.ts @@ -323,7 +323,7 @@ function sceneVisualCapability( const modelConnections = groups(settings.model_connections) const requiredConnections = chatProfileConnections(provider) const imageModel = provider === 'deepseek' || provider === 'hybrid2' - ? fieldValue(findGroup(modelConnections, 'deepseek'), 'DEEPSEEK_MODEL_NAME', 'deepseek-v4-flash') + ? fieldValue(findGroup(modelConnections, 'deepseek'), 'DEEPSEEK_MODEL_NAME', 'deepseek-flash') : '' const supported = chatProviderSupportsImages(provider, imageModel) const modelConfigured = requiredConnections.length > 0 diff --git a/electron/src/shared/configCatalog.generated.ts b/electron/src/shared/configCatalog.generated.ts index feadbcf3..4aaeb76d 100644 --- a/electron/src/shared/configCatalog.generated.ts +++ b/electron/src/shared/configCatalog.generated.ts @@ -794,7 +794,7 @@ export const catalogGroups: CatalogGroup[] = [ "en-US": "Independent from the Codex Work Provider model.", "zh-CN": "独立于 Codex Work Provider 使用的模型。" }, - "default": "deepseek-v4-flash", + "default": "deepseek-flash", "example_active": true } }, @@ -1395,7 +1395,7 @@ export const catalogGroups: CatalogGroup[] = [ "zh-CN": "默认继承所选 Models 连接中的模型。" }, "computed_default": true, - "example": "deepseek-v4-flash", + "example": "deepseek-flash", "visible_when": { "CODEX_PROVIDER_TRANSPORT": [ "app_server" @@ -1630,7 +1630,7 @@ export const catalogGroups: CatalogGroup[] = [ "zh-CN": "Pi 模型" }, "computed_default": true, - "example": "deepseek-v4-flash", + "example": "deepseek-flash", "example_active": true } }, diff --git a/server/vn_tts_bridge.py b/server/vn_tts_bridge.py index 801cf409..fbdc4232 100644 --- a/server/vn_tts_bridge.py +++ b/server/vn_tts_bridge.py @@ -767,7 +767,7 @@ async def _translate_ja_to_zh(japanese_text: str) -> str: else: api_key = getattr(settings, "DEEPSEEK_API_KEY", "") base_url = os.environ.get("VN_SUBTITLE_TRANSLATE_BASE_URL") or getattr(settings, "DEEPSEEK_BASE_URL", "") - model = read_catalog_value(EnvironmentReader(os.environ), "VN_SUBTITLE_TRANSLATE_MODEL") or getattr(settings, "DEEPSEEK_MODEL_NAME", "deepseek-v4-flash") + model = read_catalog_value(EnvironmentReader(os.environ), "VN_SUBTITLE_TRANSLATE_MODEL") or getattr(settings, "DEEPSEEK_MODEL_NAME", "deepseek-flash") if not api_key: raise RuntimeError(f"{provider} API key is not configured") @@ -814,7 +814,7 @@ async def _stream_translate_zh_to_ja(chinese_text: str) -> AsyncIterator[str]: else: api_key = getattr(settings, "DEEPSEEK_API_KEY", "") base_url = os.environ.get("VN_TTS_TRANSLATE_BASE_URL") or getattr(settings, "DEEPSEEK_BASE_URL", "") - model = read_catalog_value(EnvironmentReader(os.environ), "VN_TTS_TRANSLATE_MODEL") or getattr(settings, "DEEPSEEK_MODEL_NAME", "deepseek-v4-flash") + model = read_catalog_value(EnvironmentReader(os.environ), "VN_TTS_TRANSLATE_MODEL") or getattr(settings, "DEEPSEEK_MODEL_NAME", "deepseek-flash") if not api_key: raise RuntimeError(f"{provider} API key is not configured") diff --git a/server/wallpaper_subtitle_translator.py b/server/wallpaper_subtitle_translator.py index 403f5069..81d8f1ff 100644 --- a/server/wallpaper_subtitle_translator.py +++ b/server/wallpaper_subtitle_translator.py @@ -152,7 +152,7 @@ def _config_for_provider(base: SubtitleTranslatorConfig, provider: str) -> Subti base_url = base_url_override or "https://generativelanguage.googleapis.com/v1beta" else: provider = "deepseek" - model = model_override or getattr(settings, "DEEPSEEK_MODEL_NAME", "deepseek-v4-flash") + model = model_override or getattr(settings, "DEEPSEEK_MODEL_NAME", "deepseek-flash") base_url = base_url_override or getattr(settings, "DEEPSEEK_BASE_URL", "") return SubtitleTranslatorConfig( diff --git a/tests/test_config_catalog.py b/tests/test_config_catalog.py index 8918bb02..50a86855 100644 --- a/tests/test_config_catalog.py +++ b/tests/test_config_catalog.py @@ -116,6 +116,14 @@ def test_catalog_defaults_remain_registered_in_the_environment_reader() -> None: }.get(field["type"], "str")) +@pytest.mark.parametrize("model", [None, "deepseek-v4-flash", "deepseek-v4-pro", "custom-model", ""]) +def test_deepseek_default_preserves_explicit_model_selection(model) -> None: + reader = EnvironmentReader({} if model is None else {"DEEPSEEK_MODEL_NAME": model}) + assert catalog.read_catalog_value(reader, "DEEPSEEK_MODEL_NAME") == ( + "deepseek-flash" if model is None else model + ) + + def test_catalog_preserves_explicit_empty_values_and_secret_normalization() -> None: reader = EnvironmentReader({ "FISH_TTS_MODEL": "", "FISH_TTS_LATENCY": "low",