Aller au contenu

ds4

ds4 sert DeepSeek V4 Flash depuis un backend Metal local avec une OpenAI API-compatible /v1. OpenClaw se connecte à ds4 via la famille de providers générique openai-completions.

ds4 n’est pas un plugin de provider OpenClaw inclus. Configurez-le sous models.providers.ds4, puis sélectionnez ds4/deepseek-v4-flash.

  • ID du provider : ds4
  • Plugin : aucun
  • API : Complétions de chat compatibles OpenAI (openai-completions)
  • URL de base suggérée : http://127.0.0.1:18000/v1
  • ID du modèle : deepseek-v4-flash
  • Appels d’outils : pris en charge via tools et tool_calls de style OpenAI
  • Raisonnement : thinking et reasoning_effort de style DeepSeek
  • macOS avec prise en charge Metal.
  • Un checkout ds4 fonctionnel avec ds4-server et le fichier GGUF DeepSeek V4 Flash.
  • Suffisamment de mémoire pour le contexte que vous choisissez. Des valeurs --ctx plus élevées allouent plus de mémoire KV au démarrage du serveur.
  1. Démarrer ds4-server

    Remplacez `

    ` par le chemin de votre checkout ds4.

    ```bash

    /ds4-server
    —model

    /ds4flash.gguf
    —host 127.0.0.1
    —port 18000
    —ctx 32768
    —tokens 128 ```

  2. Vérifiez le point de terminaison compatible OpenAI

    Fenêtre de terminal
    curl http://127.0.0.1:18000/v1/models

    La réponse doit inclure deepseek-v4-flash.

  3. Ajoutez la configuration du fournisseur OpenClaw

    Ajoutez la configuration depuis Full config, puis lancez une vérification unique du modèle :

    Fenêtre de terminal
    openclaw infer model run \
    --local \
    --model ds4/deepseek-v4-flash \
    --thinking off \
    --prompt "Reply with exactly: openclaw-ds4-ok" \
    --json

Utilisez cette configuration lorsque ds4 est déjà en cours d’exécution sur 127.0.0.1:18000.

{
agents: {
defaults: {
model: { primary: "ds4/deepseek-v4-flash" },
models: {
"ds4/deepseek-v4-flash": {
alias: "DS4 local",
},
},
},
},
models: {
mode: "merge",
providers: {
ds4: {
baseUrl: "http://127.0.0.1:18000/v1",
apiKey: "ds4-local",
api: "openai-completions",
timeoutSeconds: 300,
models: [
{
id: "deepseek-v4-flash",
name: "DeepSeek V4 Flash (ds4)",
reasoning: true,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 32768,
maxTokens: 128,
compat: {
supportsUsageInStreaming: true,
supportsReasoningEffort: true,
maxTokensField: "max_tokens",
supportsStrictMode: false,
thinkingFormat: "deepseek",
supportedReasoningEfforts: ["low", "medium", "high", "xhigh"],
},
},
],
},
},
},
}

Gardez contextWindow aligné avec la valeur ds4-server --ctx. Gardez maxTokens aligné avec --tokens sauf si vous voulez intentionnellement que OpenClaw demande moins de sortie que la valeur par défaut du serveur.

OpenClaw peut démarrer ds4 uniquement lorsqu’un modèle ds4/... est sélectionné. Ajoutez localService à la même entrée de fournisseur :

{
models: {
providers: {
ds4: {
baseUrl: "http://127.0.0.1:18000/v1",
apiKey: "ds4-local",
api: "openai-completions",
timeoutSeconds: 300,
localService: {
command: "<DS4_DIR>/ds4-server",
args: ["--model", "<DS4_DIR>/ds4flash.gguf", "--host", "127.0.0.1", "--port", "18000", "--ctx", "32768", "--tokens", "128"],
cwd: "<DS4_DIR>",
healthUrl: "http://127.0.0.1:18000/v1/models",
readyTimeoutMs: 300000,
idleStopMs: 0,
},
models: [
{
id: "deepseek-v4-flash",
name: "DeepSeek V4 Flash (ds4)",
reasoning: true,
input: ["text"],
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: 32768,
maxTokens: 128,
compat: {
supportsUsageInStreaming: true,
supportsReasoningEffort: true,
maxTokensField: "max_tokens",
supportsStrictMode: false,
thinkingFormat: "deepseek",
supportedReasoningEfforts: ["low", "medium", "high", "xhigh"],
},
},
],
},
},
},
}

command doit être un chemin absolu vers l’exécutable. La recherche dans le shell et l’expansion ~ ne sont pas utilisées. Voir Local model services pour chaque champ localService.

ds4 applique Think Max uniquement lorsque les deux conditions sont vraies :

  • ds4-server commence par --ctx 393216 ou supérieur.
  • La requête utilise reasoning_effort: "max" ou le champ d’effort ds4 équivalent.

Si vous utilisez ce grand contexte, mettez à jour à la fois les indicateurs du serveur et les métadonnées du modèle OpenClaw :

{
contextWindow: 393216,
maxTokens: 384000,
compat: {
supportsUsageInStreaming: true,
supportsReasoningEffort: true,
maxTokensField: "max_tokens",
supportsStrictMode: false,
thinkingFormat: "deepseek",
supportedReasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
},
}

Commencez par une vérification HTTP directe :

Fenêtre de terminal
curl http://127.0.0.1:18000/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"Reply with exactly: ds4-ok"}],"max_tokens":16,"stream":false,"thinking":{"type":"disabled"}}'

Ensuite, testez le routage du modèle OpenClaw :

Fenêtre de terminal
openclaw infer model run \
--local \
--model ds4/deepseek-v4-flash \
--thinking off \
--prompt "Reply with exactly: openclaw-ds4-ok" \
--json

Pour un test complet d’agent et d’appel d’outil, utilisez un contexte d’au moins 32768 :

Fenêtre de terminal
openclaw agent \
--local \
--session-id ds4-tool-smoke \
--model ds4/deepseek-v4-flash \
--thinking off \
--message "Use the shell command pwd once, then reply exactly: tool-ok <output>" \
--json \
--timeout 240

Résultat attendu :

  • executionTrace.winnerProvider est ds4
  • executionTrace.winnerModel est deepseek-v4-flash
  • toolSummary.calls est au moins 1
  • finalAssistantVisibleText commence par tool-ok
curl /v1/models cannot connect

ds4 n’est pas en cours d’exécution ou n’est pas lié à l’hôte et au port dans baseUrl. Démarrez ds4-server, puis réessayez :

Fenêtre de terminal
curl http://127.0.0.1:18000/v1/models
500 prompt exceeds context

Le --ctx configuré est trop petit pour le tour OpenClaw. Augmentez ds4-server --ctx, puis mettez à jour models.providers.ds4.models[].contextWindow pour correspondre. Les tours complets d’agent avec outils nécessitent substantiellement plus de contexte qu’une requête curl directe à un seul message.

Think Max does not activate

ds4 n’utilise Think Max que lorsque --ctx est au moins 393216 et que la requête demande reasoning_effort: "max". Les contextes plus petits reviennent à un raisonnement élevé.

The first request is slow

ds4 a une phase de résidence Metal à froid et de préchauffage du modèle. Utilisez localService.readyTimeoutMs: 300000 lorsque OpenClaw démarre le serveur à la demande.

Local model services

Démarrez les serveurs de modèle locaux à la demande avant les requêtes de modèle.

Local models

Choisissez et exploitez les backends de modèles locaux.

Model providers

Configurez les références de provider, l’authentification et le basculement.

DeepSeek

Comportement natif du provider DeepSeek et contrôles de réflexion.