Gateway
سرویسهای مدل محلی
models.providers.<id>.localService به OpenClaw اجازه میدهد در صورت نیاز، یک
سرور مدل محلی متعلق به ارائهدهنده را راهاندازی کند. این پیکربندی در سطح
ارائهدهنده است: وقتی مدل انتخابشده به آن ارائهدهنده تعلق داشته باشد،
OpenClaw سرویس را بررسی میکند، اگر نقطه پایانی از کار افتاده باشد فرایند را
شروع میکند، منتظر آمادگی میماند، سپس درخواست مدل را ارسال میکند.
از آن برای سرورهای محلیای استفاده کنید که روشن نگه داشتنشان در تمام روز پرهزینه است، یا برای راهاندازیهای دستیای که در آنها انتخاب مدل باید برای بالا آوردن بکاند کافی باشد.
نحوه کار
- یک درخواست مدل به یک ارائهدهنده پیکربندیشده resolve میشود.
- اگر آن ارائهدهنده
localServiceداشته باشد، OpenClaw آدرسhealthUrlرا بررسی میکند. - اگر بررسی موفق باشد، OpenClaw از سرور موجود استفاده میکند.
- اگر بررسی ناموفق باشد، OpenClaw دستور
commandرا باargsاجرا میکند. - OpenClaw آمادگی را تا زمان منقضی شدن
readyTimeoutMspolling میکند. - درخواست مدل از طریق transport معمول ارائهدهنده ارسال میشود.
- اگر OpenClaw فرایند را شروع کرده باشد و
idleStopMsمثبت باشد، فرایند پس از آنکه آخرین درخواست در حال اجرا به همان مدت بیکار ماند، متوقف میشود.
OpenClaw برای این کار launchd، systemd، Docker یا daemon نصب نمیکند. سرور یک فرایند فرزندِ همان فرایند OpenClaw است که نخستین بار به آن نیاز پیدا کرده است.
شکل پیکربندی
{
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,
},
],
},
},
},
}
فیلدها
command: مسیر مطلق فایل اجرایی. lookup در shell استفاده نمیشود.args: آرگومانهای فرایند. هیچ shell expansion، pipe، globbing یا قاعده quoting اعمال نمیشود.cwd: دایرکتوری کاری اختیاری برای فرایند.env: متغیرهای محیطی اختیاری که روی محیط فرایند OpenClaw merge میشوند.healthUrl: URL آمادگی. اگر حذف شود، OpenClaw مقدار/modelsرا بهbaseUrlاضافه میکند، بنابراینhttp://127.0.0.1:8000/v1بهhttp://127.0.0.1:8000/v1/modelsتبدیل میشود.readyTimeoutMs: مهلت آمادگی هنگام راهاندازی. پیشفرض:120000.idleStopMs: تاخیر خاموشسازی در حالت بیکاری برای فرایندهایی که OpenClaw شروع کرده است. مقدار0یا حذف این فیلد، فرایند را تا زمان خروج OpenClaw زنده نگه میدارد.
نمونه Inferrs
Inferrs یک بکاند سفارشی سازگار با OpenAI برای /v1 است، بنابراین همان API
سرویس محلی با ورودی ارائهدهنده 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,
},
},
],
},
},
},
}
command را با نتیجه which inferrs روی ماشینی که OpenClaw را اجرا میکند
جایگزین کنید.
نمونه ds4
{
models: {
providers: {
ds4: {
baseUrl: "http://127.0.0.1:18000/v1",
apiKey: "ds4-local",
api: "openai-completions",
timeoutSeconds: 300,
localService: {
command: "/Users/you/Projects/oss/ds4/ds4-server",
args: [
"--model",
"/Users/you/Projects/oss/ds4/ds4flash.gguf",
"--host",
"127.0.0.1",
"--port",
"18000",
"--ctx",
"393216",
],
cwd: "/Users/you/Projects/oss/ds4",
healthUrl: "http://127.0.0.1:18000/v1/models",
readyTimeoutMs: 300000,
idleStopMs: 0,
},
models: [],
},
},
},
}
نکات عملیاتی
- یک فرایند OpenClaw همان فرزند را که خودش شروع کرده مدیریت میکند. فرایند OpenClaw دیگری که همان health URL را از قبل فعال ببیند، بدون پذیرش مالکیت آن دوباره از آن استفاده میکند.
- راهاندازی به ازای هر دستور ارائهدهنده و مجموعه آرگومان serialize میشود، بنابراین درخواستهای همزمان سرورهای تکراری برای همان پیکربندی ایجاد نمیکنند.
- پاسخهای streaming فعال یک lease نگه میدارند؛ خاموشسازی در حالت بیکاری تا کامل شدن پردازش بدنه پاسخ منتظر میماند.
- روی ارائهدهندههای محلی کند از
timeoutSecondsاستفاده کنید تا cold startها و تولیدهای طولانی به timeout پیشفرض درخواست مدل برخورد نکنند. - اگر سرور شما آمادگی را در جایی غیر از
/v1/modelsارائه میکند، از یکhealthUrlصریح استفاده کنید.