- الرئيسية
- Documentation
- الموفرون
- تكوين النماذج ومزودي الخدمة (`models.yml`)
تكوين النماذج ومزودي الخدمة (`models.yml`)
يصف هذا المستند كيف يقوم وكيل التشفير حاليًا بتحميل النماذج، وتطبيق التجاوزات، وحل بيانات الاعتماد، واختيار النماذج في وقت التشغيل.
ما الذي يتحكم في سلوك النموذج
Section titled “ما الذي يتحكم في سلوك النموذج”ملفات التنفيذ الأساسية:
src/config/model-registry.ts— يُحمل النماذج المدمجة + المخصصة، وتجاوزات مزودي الخدمة، واكتشاف وقت التشغيل، وتكامل المصادقةsrc/config/model-resolver.ts— يحلل أنماط النموذج ويختار النماذج الأولية/الصغيرة/البطيئةsrc/config/settings-schema.ts— الإعدادات المتعلقة بالنماذج (modelRoles، تفضيلات نقل مزود الخدمة)src/session/auth-storage.ts— مفتاح API + ترتيب حل OAuthpackages/ai/src/models.tsوpackages/ai/src/types.ts— مزودو/نماذج الخدمة المدمجة وأنواعModel/compat
موقع ملف التكوين والسلوك القديم
Section titled “موقع ملف التكوين والسلوك القديم”مسار التكوين الافتراضي:
~/.xcsh/agent/models.yml
لا يزال السلوك القديم موجودًا:
- إذا كان
models.ymlمفقودًا وكانmodels.jsonموجودًا في نفس الموقع، فسيتم ترحيله إلىmodels.yml. - لا تزال مسارات التكوين الصريحة
.json/.jsoncمدعومة عند تمريرها برمجيًا إلىModelRegistry.
شكل models.yml
Section titled “شكل models.yml”configVersion: 1 # optional — written by auto-config, used for migration detectionproviders: <provider-id>: # provider-level configequivalence: overrides: <provider-id>/<model-id>: <canonical-model-id> exclude: - <provider-id>/<model-id>configVersion هو عدد صحيح اختياري يكتبه نظام التكوين التلقائي. عند وجوده، يستخدمه xcsh لاكتشاف التكوينات القديمة وترقيتها تلقائيًا.
provider-id هو مفتاح مزود الخدمة الأساسي المستخدم عبر الاختيار والبحث عن المصادقة.
equivalence اختياري ويقوم بتكوين تجميع النماذج الأساسية أعلى نماذج مزود الخدمة الملموسة:
overridesيعين محددًا ملموسًا دقيقًا (provider/modelId) إلى معرف أساسي رسمي من المصدرexcludeيستبعد محددًا ملموسًا من التجميع الأساسي
الحقول على مستوى مزود الخدمة
Section titled “الحقول على مستوى مزود الخدمة”providers: my-provider: baseUrl: https://api.example.com/v1 apiKey: MY_PROVIDER_API_KEY api: openai-completions headers: X-Team: platform authHeader: true auth: apiKey discovery: type: ollama modelOverrides: some-model-id: name: Renamed model models: - id: some-model-id name: Some Model api: openai-completions reasoning: false input: [text] cost: input: 0 output: 0 cacheRead: 0 cacheWrite: 0 contextWindow: 128000 maxTokens: 16384 headers: X-Model: value compat: supportsStore: true supportsDeveloperRole: true supportsReasoningEffort: true maxTokensField: max_completion_tokens openRouterRouting: only: [anthropic] vercelGatewayRouting: order: [anthropic, openai] extraBody: gateway: m1-01 controller: mlxقيم api المسموح بها لمزود الخدمة/النموذج
Section titled “قيم api المسموح بها لمزود الخدمة/النموذج”openai-completionsopenai-responsesopenai-codex-responsesazure-openai-responsesanthropic-messagesgoogle-generative-aigoogle-vertex
قيم المصادقة/الاكتشاف المسموح بها
Section titled “قيم المصادقة/الاكتشاف المسموح بها”auth:apiKey(افتراضي) أوnonediscovery.type:ollama
قواعد التحقق من الصحة (الحالية)
Section titled “قواعد التحقق من الصحة (الحالية)”مزود خدمة مخصص بالكامل (models غير فارغ)
Section titled “مزود خدمة مخصص بالكامل (models غير فارغ)”مطلوب:
baseUrlapiKeyما لم يكنauth: noneapiعلى مستوى مزود الخدمة أو لكل نموذج
مزود خدمة التجاوز فقط (models مفقود أو فارغ)
Section titled “مزود خدمة التجاوز فقط (models مفقود أو فارغ)”يجب تحديد واحد على الأقل من:
baseUrlmodelOverridesdiscovery
الاكتشاف
Section titled “الاكتشاف”- يتطلب
discoveryapiعلى مستوى مزود الخدمة.
فحوصات قيم النموذج
Section titled “فحوصات قيم النموذج”idمطلوب- يجب أن يكون
contextWindowوmaxTokensموجبين إذا تم توفيرهما
ترتيب الدمج والتجاوز
Section titled “ترتيب الدمج والتجاوز”خط أنابيب ModelRegistry (عند التحديث):
- تحميل مزودي الخدمة/النماذج المدمجة من
@f5-sales-demo/pi-ai. - تحميل التكوين المخصص
models.yml. - تطبيق تجاوزات مزود الخدمة (
baseUrl،headers) على النماذج المدمجة. - تطبيق
modelOverrides(لكل مزود خدمة + معرف النموذج). - دمج
modelsالمخصصة:provider + idنفسه يحل محل الموجود- غير ذلك يتم إلحاقه
- تطبيق النماذج المكتشفة في وقت التشغيل (حاليًا Ollama و LM Studio)، ثم إعادة تطبيق تجاوزات النموذج.
التكافؤ الأساسي للنموذج والتجميع
Section titled “التكافؤ الأساسي للنموذج والتجميع”يحتفظ السجل بكل نموذج ملموس لمزود الخدمة ثم يبني طبقة أساسية فوقها.
المعرفات الأساسية هي معرفات رسمية من المصدر فقط، على سبيل المثال:
claude-opus-4-6claude-haiku-4-5gpt-5.3-codex
تكوين التكافؤ في models.yml
Section titled “تكوين التكافؤ في models.yml”مثال:
providers: zenmux: baseUrl: https://api.zenmux.example/v1 apiKey: ZENMUX_API_KEY api: openai-codex-responses models: - id: codex name: Zenmux Codex reasoning: true input: [text] cost: input: 0 output: 0 cacheRead: 0 cacheWrite: 0 contextWindow: 200000 maxTokens: 32768
equivalence: overrides: zenmux/codex: gpt-5.3-codex p-codex/codex: gpt-5.3-codex exclude: - demo/codex-previewترتيب البناء للتجميع الأساسي:
- التجاوز الدقيق للمستخدم من
equivalence.overrides - مطابقات المعرف الرسمي المجمعة من بيانات التعريف المدمجة للنموذج
- التطبيع التجريبي المحافظ لمتغيرات البوابة/مزود الخدمة
- التراجع إلى المعرف الخاص بالنموذج الملموس
الاستدلالات الحالية ضيقة عن قصد:
- يمكن إزالة البادئات المضمنة من المصدر عند وجودها، على سبيل المثال
anthropic/...أوopenai/... - يمكن أن تتطابق المتغيرات ذات الإصدارات المنقطة والموصولة بشرطة فقط عندما تعين لمعرف رسمي موجود، على سبيل المثال
4.6 -> 4-6 - لا يتم دمج العائلات أو الإصدارات الغامضة بدون مطابقة مجمعة أو تجاوز صريح
سلوك الدقة الأساسية
Section titled “سلوك الدقة الأساسية”عندما تشترك عدة متغيرات ملموسة في معرف أساسي، تستخدم الدقة:
- التوفر والمصادقة
config.ymlmodelProviderOrder- ترتيب السجل/مزود الخدمة الموجود إذا كان
modelProviderOrderغير معين
يتم تخطي مزودي الخدمة المعطلين أو غير المصادق عليهم.
تستمر حالة الجلسة والنصوص في تسجيل مزود الخدمة/النموذج الملموس الذي نفذ الدور الفعلي.
الافتراضيات لمزود الخدمة مقابل التجاوزات لكل نموذج:
- تعتبر
headersلمزود الخدمة خط الأساس. - تتجاوز
headersللنموذج مفاتيح رأس مزود الخدمة. - يمكن أن تتجاوز
modelOverridesبيانات تعريف النموذج (name،reasoning،input،cost،contextWindow،maxTokens،headers،compat،contextPromotionTarget). - يتم دمج
compatبعمق لكتل التوجيه المتداخلة (openRouterRouting،vercelGatewayRouting،extraBody).
تكامل اكتشاف وقت التشغيل
Section titled “تكامل اكتشاف وقت التشغيل”اكتشاف Ollama الضمني
Section titled “اكتشاف Ollama الضمني”إذا لم يتم تكوين ollama بشكل صريح، يضيف السجل مزود خدمة اكتشاف ضمني:
- مزود الخدمة:
ollama - واجهة برمجة التطبيقات:
openai-completions - عنوان URL الأساسي:
OLLAMA_BASE_URLأوhttp://127.0.0.1:11434 - وضع المصادقة: بدون مفتاح (سلوك
auth: none)
يستدعي اكتشاف وقت التشغيل GET /api/tags على Ollama ويقوم بتركيب إدخالات النموذج مع الافتراضيات المحلية.
اكتشاف llama.cpp الضمني
Section titled “اكتشاف llama.cpp الضمني”إذا لم يتم تكوين llama.cpp بشكل صريح، يضيف السجل مزود خدمة اكتشاف ضمني:
ملاحظة: يستخدم واجهة برمجة تطبيقات رسائل antropic الأحدث بدلاً من openai-competions.
- مزود الخدمة:
llama.cpp - واجهة برمجة التطبيقات:
openai-responses - عنوان URL الأساسي:
LLAMA_CPP_BASE_URLأوhttp://127.0.0.1:8080 - وضع المصادقة: بدون مفتاح (سلوك
auth: none)
يستدعي اكتشاف وقت التشغيل GET models على llama.cpp ويقوم بتركيب إدخالات النموذج مع الافتراضيات المحلية.
اكتشاف LM Studio الضمني
Section titled “اكتشاف LM Studio الضمني”إذا لم يتم تكوين lm-studio بشكل صريح، يضيف السجل مزود خدمة اكتشاف ضمني:
- مزود الخدمة:
lm-studio - واجهة برمجة التطبيقات:
openai-completions - عنوان URL الأساسي:
LM_STUDIO_BASE_URLأوhttp://127.0.0.1:1234/v1 - وضع المصادقة: بدون مفتاح (سلوك
auth: none)
يجلب اكتشاف وقت التشغيل النماذج (GET /models) ويقوم بتركيب إدخالات النموذج مع الافتراضيات المحلية.
الاكتشاف الصريح لمزود الخدمة
Section titled “الاكتشاف الصريح لمزود الخدمة”يمكنك تكوين الاكتشاف بنفسك:
providers: ollama: baseUrl: http://127.0.0.1:11434 api: openai-completions auth: none discovery: type: ollama
llama.cpp: baseUrl: http://127.0.0.1:8080 api: openai-responses auth: none discovery: type: llama.cppتسجيل مزود الامتداد
Section titled “تسجيل مزود الامتداد”يمكن للامتدادات تسجيل مزودي الخدمة في وقت التشغيل (pi.registerProvider(...))، بما في ذلك:
- استبدال/إلحاق النموذج لمزود الخدمة
- تسجيل معالج الدفق المخصص لمعرفات API الجديدة
- تسجيل مزود خدمة OAuth المخصص
ترتيب حل مفتاح API والمصادقة
Section titled “ترتيب حل مفتاح API والمصادقة”عند طلب مفتاح لمزود الخدمة، الترتيب الفعلي هو:
- تجاوز وقت التشغيل (CLI
--api-key) - بيانات اعتماد مفتاح API المخزنة في
agent.db - بيانات اعتماد OAuth المخزنة في
agent.db(مع التحديث) - تعيين متغير البيئة (
OPENAI_API_KEY،ANTHROPIC_API_KEY، إلخ) - محلل احتياطي ModelRegistry (
apiKeyلمزود الخدمة منmodels.yml، دلالات اسم البيئة أو الحرفية)
سلوك apiKey لـ models.yml:
- يتم التعامل مع القيمة أولاً كاسم متغير بيئة.
- إذا لم يكن هناك متغير بيئة موجود، يتم استخدام السلسلة الحرفية كرمز مميز.
إذا كان authHeader: true وتم تعيين apiKey لمزود الخدمة، تحصل النماذج على:
- حقن رأس
Authorization: Bearer <resolved-key>.
مزودو الخدمة بدون مفتاح:
- يتم التعامل مع مزودي الخدمة المحددين
auth: noneعلى أنهم متاحون بدون بيانات اعتماد. - ترجع
getApiKey*kNoAuthلهم.
توفر النموذج مقابل جميع النماذج
Section titled “توفر النموذج مقابل جميع النماذج”- تُرجع
getAll()سجل النموذج المحمل (المدمج + المخصص المدمج + المكتشف). - تقوم
getAvailable()بالتصفية للنماذج التي ليس لها مفتاح أو لديها مصادقة قابلة للحل.
لذلك يمكن أن يوجد نموذج في السجل ولكن لا يمكن تحديده حتى تتوفر المصادقة.
دقة النموذج في وقت التشغيل
Section titled “دقة النموذج في وقت التشغيل”CLI وتحليل الأنماط
Section titled “CLI وتحليل الأنماط”يدعم model-resolver.ts:
- دقيق
provider/modelId - معرف النموذج الأساسي الدقيق
- معرف النموذج الدقيق (استدلال مزود الخدمة)
- مطابقة ضبابية/سلسلة فرعية
- أنماط نطاق الكرة الأرضية في
--models(على سبيل المثالopenai/*،*sonnet*) - لاحقة
:thinkingLevelالاختيارية (off|minimal|low|medium|high|xhigh)
--provider قديم؛ يفضل --model.
أولوية الحل للمحددات الدقيقة:
- يتجاوز
provider/modelIdالدقيق التجميع - يحل المعرف الأساسي الدقيق من خلال الفهرس الأساسي
- المعرف الملموس المجرد الدقيق لا يزال يعمل
- تعمل المطابقة الضبابية والأنماط بعد المسارات الدقيقة
أولوية اختيار النموذج الأولي
Section titled “أولوية اختيار النموذج الأولي”تستخدم findInitialModel(...) هذا الترتيب:
- مزود خدمة+نموذج CLI صريح
- أول نموذج محدد النطاق (إذا لم يتم الاستئناف)
- مزود الخدمة/النموذج الافتراضي المحفوظ
- افتراضيات مزود الخدمة المعروفة (على سبيل المثال OpenAI/Anthropic/إلخ) من بين النماذج المتاحة
- أول نموذج متاح
الأسماء المستعارة للأدوار والإعدادات
Section titled “الأسماء المستعارة للأدوار والإعدادات”أدوار النموذج المدعومة:
default،smol،slow،plan،commit
تتوسع الأسماء المستعارة للأدوار مثل pi/smol عبر settings.modelRoles. يمكن أن تلحق كل قيمة دور أيضًا محدد التفكير مثل :minimal، :low، :medium، أو :high.
إذا أشار أحد الأدوار إلى دور آخر، فإن النموذج الهدف لا يزال يرث بشكل طبيعي وتفوز أي لاحقة صريحة على الدور المشير لهذا الاستخدام الخاص بالدور.
الإعدادات ذات الصلة:
modelRoles(سجل)enabledModels(قائمة أنماط محددة النطاق)modelProviderOrder(أولوية مزود الخدمة الأساسي العالمي)providers.kimiApiFormat(تنسيق طلبopenaiأوanthropic)providers.openaiWebsockets(auto|off|onتفضيل مأخذ التوصيل لـ OpenAI Codex)
قد تخزن modelRoles إما:
provider/modelIdلتثبيت متغير مزود الخدمة الملموس- معرف أساسي مثل
gpt-5.3-codexللسماح بتجميع مزود الخدمة
بالنسبة لـ enabledModels و CLI --models:
- تتوسع المعرفات الأساسية الدقيقة لتشمل جميع المتغيرات الملموسة في تلك المجموعة الأساسية
- تظل إدخالات
provider/modelIdالصريحة دقيقة - لا تزال الأنماط الكروية والمطابقات الضبابية تعمل على النماذج الملموسة
/model و --list-models
Section titled “/model و --list-models”كلا السطحين يحافظان على النماذج المسبوقة بمزود الخدمة مرئية وقابلة للتحديد.
كما أنها تعرض الآن نماذج أساسية/مجمعة:
- يتضمن
/modelعرضًا أساسيًا جنبًا إلى جنب مع علامات تبويب مزود الخدمة - تطبع
--list-modelsقسمًا أساسيًا بالإضافة إلى صفوف مزود الخدمة الملموسة
يؤدي تحديد إدخال أساسي إلى تخزين المحدد الأساسي. يؤدي تحديد صف مزود الخدمة إلى تخزين provider/modelId الصريح.
ترقية السياق (سلاسل التراجع على مستوى النموذج)
Section titled “ترقية السياق (سلاسل التراجع على مستوى النموذج)”ترقية السياق هي آلية استرداد التدفق للمتغيرات ذات السياق الصغير (على سبيل المثال *-spark) والتي يتم ترقيتها تلقائيًا إلى شقيق ذي سياق أكبر عندما ترفض واجهة برمجة التطبيقات طلبًا يعاني من خطأ في طول السياق.
المشغل والترتيب
Section titled “المشغل والترتيب”عندما يفشل الدور بخطأ تجاوز السياق (على سبيل المثال context_length_exceeded)، تحاول AgentSession الترقية قبل التراجع إلى الضغط:
- إذا كان
contextPromotion.enabledصحيحًا، قم بحل هدف الترقية (انظر أدناه). - إذا تم العثور على هدف، فقم بالتبديل إليه وأعد المحاولة — لا حاجة للضغط.
- إذا لم يتوفر هدف، تراجع للضغط التلقائي على النموذج الحالي.
اختيار الهدف
Section titled “اختيار الهدف”يكون الاختيار مدفوعًا بالنموذج، وليس بالدور:
currentModel.contextPromotionTarget(إذا تم تكوينه)- أصغر نموذج سياق أكبر على نفس مزود الخدمة + واجهة برمجة التطبيقات
يتم تجاهل المر المرشحين ما لم يتم حل بيانات الاعتماد (ModelRegistry.getApiKey(...)).
تسليم مأخذ توصيل OpenAI Codex
Section titled “تسليم مأخذ توصيل OpenAI Codex”إذا تم التبديل من/إلى openai-codex-responses، يتم إغلاق مفتاح حالة مزود جلسة العمل openai-codex-responses قبل تبديل النموذج. يؤدي هذا إلى إسقاط حالة النقل عبر مأخذ التوصيل بحيث يبدأ الدور التالي نظيفًا على النموذج المُرقى.
سلوك الاستمرار
Section titled “سلوك الاستمرار”تستخدم الترقية التبديل المؤقت (setModelTemporary):
- مُسجل كـ
model_changeمؤقت في محفوظات الجلسة - لا يعيد كتابة تعيين الدور المحفوظ
تكوين سلاسل التراجع الصريحة
Section titled “تكوين سلاسل التراجع الصريحة”تكوين التراجع مباشرة في بيانات تعريف النموذج عبر contextPromotionTarget.
يقبل contextPromotionTarget إما:
provider/model-id(صريح)model-id(محلول داخل مزود الخدمة الحالي)
مثال (models.yml) لـ Spark -> غير Spark على نفس مزود الخدمة:
providers: openai-codex: modelOverrides: gpt-5.3-codex-spark: contextPromotionTarget: openai-codex/gpt-5.3-codexيقوم مُنشئ النموذج المدمج أيضًا بتعيين هذا تلقائيًا لنماذج *-spark عندما يوجد نموذج أساسي من نفس المزود.
حقول التوافق والتوجيه
Section titled “حقول التوافق والتوجيه”يدعم models.yml هذه المجموعة الفرعية compat:
supportsStoresupportsDeveloperRolesupportsReasoningEffortmaxTokensField(max_completion_tokensأوmax_tokens)openRouterRouting.only/openRouterRouting.ordervercelGatewayRouting.only/vercelGatewayRouting.order
يتم استهلاكها بواسطة منطق النقل الخاص بإكمال OpenAI ودمجها مع الاكتشاف التلقائي المستند إلى عنوان URL.
أمثلة عملية
Section titled “أمثلة عملية”نقطة نهاية محلية متوافقة مع OpenAI (بدون مصادقة)
Section titled “نقطة نهاية محلية متوافقة مع OpenAI (بدون مصادقة)”providers: local-openai: baseUrl: http://127.0.0.1:8000/v1 auth: none api: openai-completions models: - id: Qwen/Qwen2.5-Coder-32B-Instruct name: Qwen 2.5 Coder 32B (local)وكيل مستضاف بمفتاح مستند إلى البيئة
Section titled “وكيل مستضاف بمفتاح مستند إلى البيئة”providers: anthropic-proxy: baseUrl: https://proxy.example.com/anthropic apiKey: ANTHROPIC_PROXY_API_KEY api: anthropic-messages authHeader: true models: - id: claude-sonnet-4-20250514 name: Claude Sonnet 4 (Proxy) reasoning: true input: [text, image]تجاوز توجيه المزود المدمج + بيانات تعريف النموذج
Section titled “تجاوز توجيه المزود المدمج + بيانات تعريف النموذج”providers: openrouter: baseUrl: https://my-proxy.example.com/v1 headers: X-Team: platform modelOverrides: anthropic/claude-sonnet-4: name: Sonnet 4 (Corp) compat: openRouterRouting: only: [anthropic]التكوين التلقائي لوكيل LiteLLM
Section titled “التكوين التلقائي لوكيل LiteLLM”عند تعيين كل من متغيري البيئة LITELLM_BASE_URL و LITELLM_API_KEY، يدير xcsh تلقائيًا تكوين models.yml لوكيل LiteLLM.
الإنشاء التلقائي في التشغيل الأول
Section titled “الإنشاء التلقائي في التشغيل الأول”إذا لم يكن models.yml موجودًا وتم اكتشاف متغيرات بيئة LiteLLM، فإن xcsh ينشئه تلقائيًا:
# Auto-generated by xcsh for LiteLLM proxy# API key resolved from LITELLM_API_KEY env var at runtimeconfigVersion: 1providers: anthropic: baseUrl: "https://your-litellm-proxy.example.com/anthropic" apiKey: LITELLM_API_KEYكما يتم إنشاء ملف config.yml افتراضي بإعدادات معقولة لمزود الصورة.
الإصلاح الذاتي عند بدء التشغيل
Section titled “الإصلاح الذاتي عند بدء التشغيل”عند كل بدء تشغيل، يقوم startupHealthCheck() في سجل النموذج بتشغيل الفحوصات التالية:
| الحالة | الإجراء |
|---|---|
models.yml مفقود | إنشاء تلقائي من متغيرات البيئة |
models.yml تالف أو غير قابل للتحليل | نسخ احتياطي إلى .bak، وإعادة إنشاء |
baseUrl لا يتطابق مع LITELLM_BASE_URL | نسخ احتياطي إلى .bak، وإعادة إنشاء باستخدام عنوان URL الجديد |
configVersion مفقود أو قديم | نسخ احتياطي إلى .bak، وإعادة إنشاء باستخدام الإصدار الحالي |
| التكوين سليم | لا يوجد إجراء |
تقوم جميع الإصلاحات بإنشاء نسخ احتياطية .bak قبل الاستبدال. جميع العمليات متكافئة.
أمر CLI
Section titled “أمر CLI”xcsh setup litellm # Generate or fix LiteLLM configxcsh setup litellm --check # Validate without writingxcsh setup litellm --check --json # Machine-readable validation outputمتغيرات البيئة المطلوبة
Section titled “متغيرات البيئة المطلوبة”| المتغير | الغرض |
|---|---|
LITELLM_BASE_URL | عنوان URL لوكيل LiteLLM (على سبيل المثال https://your-proxy.example.com). يجب أن يبدأ بـ http:// أو https://. |
LITELLM_API_KEY | مفتاح API للوكيل. مشار إليه بالاسم في التكوين المُنشأ، ويتم حله في وقت التشغيل. |
إذا كان أي من المتغيرين غير معين، يتم تخطي التكوين التلقائي بصمت.
تعيين إصدار التكوين
Section titled “تعيين إصدار التكوين”تتضمن التكوينات المُنشأة حقلاً configVersion. عندما يتغير التنسيق المُنشأ في الإصدارات المستقبلية، يكتشف xcsh التكوينات القديمة ويرقيها تلقائيًا (مع نسخة احتياطية).
تحذير المستهلك القديم
Section titled “تحذير المستهلك القديم”يتدفق معظم تكوين النموذج الآن عبر models.yml عبر ModelRegistry.
يتبقى مسار قديم واحد بارز: لا يزال حل مصادقة بحث الويب الخاص بـ Anthropic يقرأ ~/.xcsh/agent/models.json مباشرة في src/web/search/auth.ts.
إذا كنت تعتمد على هذا المسار المحدد، فضع التوافق مع JSON في الاعتبار حتى يتم ترحيل هذه الوحدة.
وضع الفشل
Section titled “وضع الفشل”إذا فشل models.yml في المخطط أو فحوصات التحقق:
- إذا تم تعيين
LITELLM_BASE_URLوLITELLM_API_KEY، يحاول الفحص الصحي لبدء التشغيل الإصلاح التلقائي (نسخ الملف التالف احتياطيًا، وإعادة الإنشاء من متغيرات البيئة). إذا نجح الإصلاح، يعيد السجل تحميل التكوين الثابت. - إذا لم يكن الإصلاح التلقائي ممكنًا (لم يتم تعيين متغيرات البيئة، فشل الكتابة)، يستمر السجل في العمل باستخدام النماذج المدمجة.
- يتم كشف الخطأ عبر
ModelRegistry.getError()ويظهر في واجهة المستخدم/الإشعارات.