Providers
استنباط میکند
inferrs میتواند مدلهای محلی را پشت یک API سازگار با OpenAI در مسیر /v1 ارائه کند. OpenClaw از طریق مسیر عمومی openai-completions با inferrs کار میکند.
| ویژگی | مقدار |
|---|---|
| شناسهٔ ارائهدهنده | inferrs (سفارشی؛ زیر models.providers.inferrs پیکربندی کنید) |
| Plugin | هیچکدام — inferrs یک Plugin ارائهدهندهٔ همراه OpenClaw نیست |
| متغیر محیطی احراز هویت | اختیاری. اگر سرور inferrs شما احراز هویت ندارد، هر مقداری کار میکند |
| API | سازگار با OpenAI (openai-completions) |
| URL پایهٔ پیشنهادی | http://127.0.0.1:8080/v1 (یا هرجایی که سرور inferrs شما اجرا میشود) |
شروع به کار
Start inferrs with a model
inferrs serve google/gemma-4-E2B-it \
--host 127.0.0.1 \
--port 8080 \
--device metal
Verify the server is reachable
curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/v1/models
Add an OpenClaw provider entry
یک ورودی صریح برای ارائهدهنده اضافه کنید و مدل پیشفرض خود را به آن اشاره دهید. نمونهٔ کامل پیکربندی را در پایین ببینید.
نمونهٔ کامل پیکربندی
این نمونه از Gemma 4 روی یک سرور محلی inferrs استفاده میکند.
{
agents: {
defaults: {
model: { primary: "inferrs/google/gemma-4-E2B-it" },
models: {
"inferrs/google/gemma-4-E2B-it": {
alias: "Gemma 4 (inferrs)",
},
},
},
},
models: {
mode: "merge",
providers: {
inferrs: {
baseUrl: "http://127.0.0.1:8080/v1",
apiKey: "inferrs-local",
api: "openai-completions",
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,
},
},
],
},
},
},
}
پیکربندی پیشرفته
Why requiresStringContent matters
برخی مسیرهای Chat Completions در inferrs فقط
messages[].content رشتهای را میپذیرند، نه آرایههای ساختاریافتهٔ بخشهای محتوا.
compat: {
requiresStringContent: true
}
OpenClaw قبل از ارسال درخواست، بخشهای محتوای کاملاً متنی را به رشتههای ساده تبدیل میکند.
Gemma and tool-schema caveat
برخی ترکیبهای فعلی inferrs + Gemma درخواستهای کوچک مستقیم
/v1/chat/completions را میپذیرند، اما همچنان در نوبتهای کامل زمان اجرای عامل OpenClaw ناموفق میشوند.
اگر این اتفاق افتاد، ابتدا این را امتحان کنید:
compat: {
requiresStringContent: true,
supportsTools: false
}
این کار سطح طرحوارهٔ ابزار OpenClaw را برای مدل غیرفعال میکند و میتواند فشار پرامپت را روی بکاندهای محلی سختگیرتر کاهش دهد.
اگر درخواستهای مستقیم کوچک همچنان کار میکنند اما نوبتهای عادی عامل OpenClaw همچنان داخل inferrs خراب میشوند، مشکل باقیمانده معمولاً به رفتار مدل/سرور بالادستی مربوط است، نه لایهٔ انتقال OpenClaw.
Manual smoke test
پس از پیکربندی، هر دو لایه را آزمایش کنید:
curl http://127.0.0.1:8080/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"google/gemma-4-E2B-it","messages":[{"role":"user","content":"What is 2 + 2?"}],"stream":false}'
openclaw infer model run \
--model inferrs/google/gemma-4-E2B-it \
--prompt "What is 2 + 2? Reply with one short sentence." \
--json
اگر فرمان اول کار میکند اما فرمان دوم ناموفق است، بخش عیبیابی زیر را بررسی کنید.
Proxy-style behavior
inferrs بهعنوان یک بکاند /v1 سازگار با OpenAI و به سبک پراکسی در نظر گرفته میشود، نه یک نقطهٔ پایانی بومی OpenAI.
- شکلدهی درخواستهای فقط مخصوص OpenAI بومی اینجا اعمال نمیشود
- نه
service_tier، نه Responsesstore، نه راهنماییهای کش پرامپت، و نه شکلدهی بارسنج سازگاری استدلال OpenAI وجود دارد - سرآیندهای انتساب پنهان OpenClaw (
originator،version،User-Agent) روی URLهای پایهٔ سفارشیinferrsتزریق نمیشوند
عیبیابی
curl /v1/models fails
inferrs اجرا نیست، در دسترس نیست، یا به میزبان/درگاه مورد انتظار متصل نشده است. مطمئن شوید سرور شروع شده و روی نشانیای که پیکربندی کردهاید در حال گوش دادن است.
messages[].content expected a string
در ورودی مدل compat.requiresStringContent: true را تنظیم کنید. برای جزئیات، بخش requiresStringContent بالا را ببینید.
Direct /v1/chat/completions calls pass but openclaw infer model run fails
برای غیرفعال کردن سطح طرحوارهٔ ابزار، تنظیم compat.supportsTools: false را امتحان کنید. نکتهٔ احتیاطی طرحوارهٔ ابزار Gemma در بالا را ببینید.
inferrs still crashes on larger agent turns
اگر OpenClaw دیگر خطاهای طرحواره دریافت نمیکند اما inferrs همچنان در نوبتهای بزرگتر عامل خراب میشود، آن را بهعنوان محدودیت بالادستی inferrs یا مدل در نظر بگیرید. فشار پرامپت را کاهش دهید یا به بکاند یا مدل محلی دیگری تغییر دهید.