Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ RAG_MAX_DISTANCE=0.33
# DeepSeek
# DEEPSEEK_API_KEY=<your-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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion config/catalog/models/deepseek.json
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
},
Expand Down
2 changes: 1 addition & 1 deletion config/catalog/providers/codex.json
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
"zh-CN": "默认继承所选 Models 连接中的模型。"
},
"computed_default": true,
"example": "deepseek-v4-flash",
"example": "deepseek-flash",
"visible_when": {
"CODEX_PROVIDER_TRANSPORT": [
"app_server"
Expand Down
2 changes: 1 addition & 1 deletion config/catalog/providers/pi.json
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"zh-CN": "Pi 模型"
},
"computed_default": true,
"example": "deepseek-v4-flash",
"example": "deepseek-flash",
"example_active": true
}
},
Expand Down
2 changes: 1 addition & 1 deletion electron/src/renderer/components/SettingsPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions electron/src/shared/configCatalog.generated.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions server/vn_tts_bridge.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")

Expand Down Expand Up @@ -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")

Expand Down
2 changes: 1 addition & 1 deletion server/wallpaper_subtitle_translator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
8 changes: 8 additions & 0 deletions tests/test_config_catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
Loading