Naar hoofdinhoud gaan
models.providers.<id>.localService laat OpenClaw op aanvraag een lokale modelserver starten die eigendom is van de provider. Het is configuratie op providerniveau: wanneer het geselecteerde model bij die provider hoort, peilt OpenClaw de service, start het proces als het endpoint offline is, wacht op gereedheid en verzendt daarna het modelverzoek. Gebruik dit voor lokale servers die duur zijn om de hele dag actief te houden, of voor handmatige setups waarbij modelselectie genoeg moet zijn om de backend op te starten.

Hoe het werkt

  1. Een modelverzoek wordt omgezet naar een geconfigureerde provider.
  2. Als die provider localService heeft, peilt OpenClaw healthUrl.
  3. Als de peiling slaagt, gebruikt OpenClaw de bestaande server.
  4. Als de peiling mislukt, start OpenClaw command met args.
  5. OpenClaw peilt gereedheid totdat readyTimeoutMs verloopt.
  6. Het modelverzoek wordt verzonden via het normale providertransport.
  7. Als OpenClaw het proces heeft gestart en idleStopMs positief is, wordt het proces gestopt nadat het laatste lopende verzoek zo lang inactief is geweest.
OpenClaw installeert hiervoor geen launchd, systemd, Docker of daemon. De server is een childproces van het OpenClaw-proces dat deze als eerste nodig had.

Configuratievorm

{
  models: {
    providers: {
      local: {
        baseUrl: "http://127.0.0.1:8000/v1",
        apiKey: "local-model",
        api: "openai-completions",
        timeoutSeconds: 300,
        localService: {
          command: "/absolute/path/to/server",
          args: ["--host", "127.0.0.1", "--port", "8000"],
          cwd: "/absolute/path/to/working-dir",
          env: { LOCAL_MODEL_CACHE: "/absolute/path/to/cache" },
          healthUrl: "http://127.0.0.1:8000/v1/models",
          readyTimeoutMs: 180000,
          idleStopMs: 0,
        },
        models: [
          {
            id: "my-local-model",
            name: "My Local Model",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 131072,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
}

Velden

  • command: absoluut pad naar het uitvoerbare bestand. Shell-lookup wordt niet gebruikt.
  • args: procesargumenten. Er worden geen shell-expansie, pipes, globbing of regels voor aanhalingstekens toegepast.
  • cwd: optionele werkmap voor het proces.
  • env: optionele omgevingsvariabelen die over de omgeving van het OpenClaw-proces worden samengevoegd.
  • healthUrl: gereedheids-URL. Als deze wordt weggelaten, voegt OpenClaw /models toe aan baseUrl, zodat http://127.0.0.1:8000/v1 http://127.0.0.1:8000/v1/models wordt.
  • readyTimeoutMs: deadline voor opstartgereedheid. Standaard: 120000.
  • idleStopMs: vertraging voor afsluiten bij inactiviteit voor door OpenClaw gestarte processen. 0 of weggelaten houdt het proces actief totdat OpenClaw afsluit.

Inferrs-voorbeeld

Inferrs is een aangepaste OpenAI-compatibele /v1-backend, dus dezelfde lokale service-API werkt met de providervermelding inferrs.
{
  agents: {
    defaults: {
      model: { primary: "inferrs/google/gemma-4-E2B-it" },
    },
  },
  models: {
    mode: "merge",
    providers: {
      inferrs: {
        baseUrl: "http://127.0.0.1:8080/v1",
        apiKey: "inferrs-local",
        api: "openai-completions",
        timeoutSeconds: 300,
        localService: {
          command: "/opt/homebrew/bin/inferrs",
          args: [
            "serve",
            "google/gemma-4-E2B-it",
            "--host",
            "127.0.0.1",
            "--port",
            "8080",
            "--device",
            "metal",
          ],
          healthUrl: "http://127.0.0.1:8080/v1/models",
          readyTimeoutMs: 180000,
          idleStopMs: 0,
        },
        models: [
          {
            id: "google/gemma-4-E2B-it",
            name: "Gemma 4 E2B (inferrs)",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 131072,
            maxTokens: 4096,
            compat: {
              requiresStringContent: true,
            },
          },
        ],
      },
    },
  },
}
Vervang command door het resultaat van which inferrs op de machine waarop OpenClaw draait.

ds4-voorbeeld

Zie voor de volledige setup, richtlijnen voor contextgrootte en verificatieopdrachten ds4.
{
  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: [],
      },
    },
  },
}

Operationele opmerkingen

  • Eén OpenClaw-proces beheert het childproces dat het heeft gestart. Een ander OpenClaw-proces dat dezelfde health-URL al live ziet, hergebruikt deze zonder het proces over te nemen.
  • Opstarten wordt per provideropdracht en argumentenset geserialiseerd, zodat gelijktijdige verzoeken geen dubbele servers voor dezelfde configuratie starten.
  • Actieve streamingantwoorden houden een lease vast; afsluiten bij inactiviteit wacht totdat de afhandeling van de antwoordbody is voltooid.
  • Gebruik timeoutSeconds op trage lokale providers, zodat cold starts en lange generaties niet tegen de standaardtime-out voor modelverzoeken aanlopen.
  • Gebruik een expliciete healthUrl als je server gereedheid ergens anders aanbiedt dan /v1/models.

Gerelateerd

Local models

Setup van lokale modellen, providerkeuzes en veiligheidsrichtlijnen.

Inferrs

Voer OpenClaw uit via de inferrs OpenAI-compatibele lokale server.