Gateway
سرویسهای مدل محلی
models.providers.<id>.localService به OmeniaClaw اجازه میدهد در صورت نیاز، یک
سرور مدل محلی متعلق به ارائهدهنده را راهاندازی کند. این پیکربندی در سطح
ارائهدهنده است: وقتی مدل انتخابشده به آن ارائهدهنده تعلق داشته باشد،
OmeniaClaw سرویس را بررسی میکند، اگر نقطه پایانی از کار افتاده باشد فرایند را
شروع میکند، منتظر آمادگی میماند، سپس درخواست مدل را ارسال میکند.
از آن برای سرورهای محلیای استفاده کنید که روشن نگه داشتنشان در تمام روز پرهزینه است، یا برای راهاندازیهای دستیای که در آنها انتخاب مدل باید برای بالا آوردن بکاند کافی باشد.
نحوه کار
- یک درخواست مدل به یک ارائهدهنده پیکربندیشده resolve میشود.
- اگر آن ارائهدهنده
localServiceداشته باشد، OmeniaClaw آدرسhealthUrlرا بررسی میکند. - اگر بررسی موفق باشد، OmeniaClaw از سرور موجود استفاده میکند.
- اگر بررسی ناموفق باشد، OmeniaClaw دستور
commandرا باargsاجرا میکند. - OmeniaClaw آمادگی را تا زمان منقضی شدن
readyTimeoutMspolling میکند. - درخواست مدل از طریق transport معمول ارائهدهنده ارسال میشود.
- اگر OmeniaClaw فرایند را شروع کرده باشد و
idleStopMsمثبت باشد، فرایند پس از آنکه آخرین درخواست در حال اجرا به همان مدت بیکار ماند، متوقف میشود.
OmeniaClaw برای این کار launchd، systemd، Docker یا daemon نصب نمیکند. سرور یک فرایند فرزندِ همان فرایند OmeniaClaw است که نخستین بار به آن نیاز پیدا کرده است.
شکل پیکربندی
{ 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: متغیرهای محیطی اختیاری که روی محیط فرایند OmeniaClaw merge میشوند.healthUrl: URL آمادگی. اگر حذف شود، OmeniaClaw مقدار/modelsرا بهbaseUrlاضافه میکند، بنابراینhttp://127.0.0.1:8000/v1بهhttp://127.0.0.1:8000/v1/modelsتبدیل میشود.readyTimeoutMs: مهلت آمادگی هنگام راهاندازی. پیشفرض:120000.idleStopMs: تاخیر خاموشسازی در حالت بیکاری برای فرایندهایی که OmeniaClaw شروع کرده است. مقدار0یا حذف این فیلد، فرایند را تا زمان خروج OmeniaClaw زنده نگه میدارد.
نمونه 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 روی ماشینی که OmeniaClaw را اجرا میکند
جایگزین کنید.
نمونه 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: [], }, }, },}نکات عملیاتی
- یک فرایند OmeniaClaw همان فرزند را که خودش شروع کرده مدیریت میکند. فرایند OmeniaClaw دیگری که همان health URL را از قبل فعال ببیند، بدون پذیرش مالکیت آن دوباره از آن استفاده میکند.
- راهاندازی به ازای هر دستور ارائهدهنده و مجموعه آرگومان serialize میشود، بنابراین درخواستهای همزمان سرورهای تکراری برای همان پیکربندی ایجاد نمیکنند.
- پاسخهای streaming فعال یک lease نگه میدارند؛ خاموشسازی در حالت بیکاری تا کامل شدن پردازش بدنه پاسخ منتظر میماند.
- روی ارائهدهندههای محلی کند از
timeoutSecondsاستفاده کنید تا cold startها و تولیدهای طولانی به timeout پیشفرض درخواست مدل برخورد نکنند. - اگر سرور شما آمادگی را در جایی غیر از
/v1/modelsارائه میکند، از یکhealthUrlصریح استفاده کنید.