TL;DR
قم بتهيئة CometAPI مرة واحدة في OpenCode، ثم اختر Claude أو GPT أو DeepSeek لمهمتك البرمجية. يوسّع هذا الدليل دليل تكامل OpenCode الرسمي من CometAPI ليصبح إعداد مشروع متكامل: مفتاح API واحد لـ CometAPI، وملف تهيئة يحتوي ثلاثة أمثلة للنماذج، وأوامر للتبديل بين النماذج، ومهمة JavaScript صغيرة مع تحقق قابل للتكرار.
Key Takeaways
- يتطلب إعداد OpenCode مع CometAPI: معرّف مزوّد، وعنوان أساس API، وبيانات اعتماد، ومعرّف نموذج.
- استخدم {env:COMETAPI_KEY} لإبقاء مفتاح API الفعلي خارج opencode.json.
- سجّل أمثلة Claude وGPT وDeepSeek في ملف opencode.json واحد؛ تستخدم الإدخالات الثلاثة المفتاح ونقطة الدخول نفسها في CometAPI.
- بدّل المزوّد/النموذج المحدد في OpenCode دون الحاجة للحصول على مفاتيح منفصلة لـ Anthropic وOpenAI وDeepSeek.
- انتبه لمتغيرات البيئة المفقودة، ومسارات API غير المتطابقة، ومطالبات الموافقة التي قد تبدو كطلبات معلّقة.
What Is OpenCode and Why Use It with CometAPI?
OpenCode وكيل برمجة مفتوح المصدر بواجهة طرفية وتطبيق سطح مكتب وإضافة IDE. داخل مشروع، يمكنه شرح الشيفرة الموجودة، وتخطيط التغيير، وتحرير الملفات، وتشغيل الأوامر ضمن أذونات مضبوطة. يستخدم هذا الشرح سير عمل الطرفية: امنح الوكيل مهمة برمجية صغيرة، راجع الإجراءات المقترحة، وتحقق من الملفات الناتجة باختبار محلي. راجع الوثائق الرسمية لـ OpenCode للتثبيت والاستخدام.
يوفّر CometAPI طبقة الوصول إلى النماذج. عادةً يتطلب سير عمل متعدد النماذج إدارة بيانات اعتماد وفوترة وإعدادات اتصال عبر مزوّدين. عبر تمرير النماذج المدعومة من خلال حساب CometAPI واحد تحصل على مفتاح مشترك وعنوان أساس واحد للمشروع، بينما يحتفظ OpenCode بالمستودع وتعليمات المهمة. هذا مفيد عند مقارنة النماذج على المهمة نفسها أو تبديل النموذج المختار دون إعادة تنظيم المشروع. بوابة التجميع اختيارية: قد يلائم الوصول المباشر للمزوّد سير عمل مزوّد واحد أو متطلبات تعاقدية محددة. الفائدة هنا هي تبسيط الوصول متعدد المزوّدين؛ أما تنسيقات API وسلوك النماذج وتوافق الأدوات فلا بد من التحقق منها بشكل منفصل.
يدعم CometAPI واجهة Chat Completions المتوافقة مع OpenAI ويعرض أيضًا تنسيقات API أخرى. يختار التكامل الرسمي مكيّفًا لكل تنسيق. هنا، يستخدم Claude Sonnet 5 تنسيق Messages، ويستخدم GPT-6.1 Sol تنسيق Responses، ويستخدم DeepSeek V4.1 Flash تنسيق Chat Completions، وفقًا للأمثلة المرتبطة أدناه. لا تزال جميع الطلبات تذهب إلى CometAPI باستخدام المفتاح نفسه. يشير اسم المزوّد وتنسيق API إلى أمرين مختلفين؛ لا ينبغي افتراض أن النموذج الواحد يقبل كل التنسيقات.
| Configuration | Claude Sonnet 5 API in CometAPI | GPT-6.1 Sol API in CometAPI | DeepSeek V4.1 Flash API in CometAPI |
|---|---|---|---|
| Model supplier | Anthropic | OpenAI | DeepSeek |
| Model ID | claude-sonnet-5 | gpt-6.1-sol | deepseek-v4.1-flash |
| OpenCode provider ID | cometapi-messages | cometapi-responses | cometapi-chat |
| API format used here | Messages | Responses/ chat | Chat Completions |
| Adapter | @ai-sdk/anthropic | @ai-sdk/openai | @ai-sdk/openai-compatible |
What Do You Need Before Configuring CometAPI in OpenCode?
استخدم طرفية، وNode.js مع npm، وحساب CometAPI مع وصول API ورصيد متاح، ودليل مشروع مؤقت. أمثلة Bash تنطبق على macOS وLinux وWSL؛ أمثلة PowerShell الموسومة تستخدم صياغة Windows. يجب أن يتوفر Node.js في الجلسة نفسها للتحقق من JavaScript لاحقًا.
يستخدم هذا الشرح أسلوب تهيئة OpenCode 1. تميّز الوثائق الرسمية بين OpenCode 1 وOpenCode 2؛ كلاهما يستخدم الأمر opencode. سجّل ناتج opencode --version قبل البدء واستخدم وثائق التهيئة لإصدارك الرئيسي. سير العمل ذو النماذج الثلاثة أدناه هو شرح تكامل مع نتائج متوقعة، وليس ادعاء باختبار مكتمل من الطرف إلى الطرف.
سجّل إصدارات CLI وNode.js وnpm ونظام التشغيل وتاريخ الاختبار عند تشغيل الأمثلة. تُحتسب استخدامات API على حساب CometAPI الخاص بك. الأوامر أدناه تجربة عملية مع نتائج متوقعة؛ لا تُدّعى مخرجات مولّدة من نموذج أو تشغيل تكامل ناجح للنماذج الثلاثة.
node --versionnpm --versionopencode --version
How to Configure CometAPI in OpenCode Step by Step?
Step 1: Install OpenCode
ثبّت حزمة npm الرسمية إذا لم يكن OpenCode متاحًا بالفعل. يعتمد التثبيت غير المثبّت على إصدار الحزمة الحالي؛ سجّل الإصدار قبل استخدام التهيئة. إذا احتجت إلى استنساخ بيئة الدليل الأصلي، فإصدار CLI المذكور هو 1.18.16.
ثبّت أداة OpenCode CLI واعرض إصدارها.
npm install -g opencode-aiopencode --version
افتح طرفية جديدة إذا لم يُعثر على التنفيذية بعد التثبيت. تابع داخل دليل مشروع مؤقت بحيث تكون مهمة الوكيل الأولى ذات نطاق واضح.
أنشئ وادخل إلى دليل مشروع.
mkdir cometapi-opencode-democd cometapi-opencode-demo
Step 2: Create a CometAPI API Key
أنشئ مفتاح API من حساب CometAPI واضبطه في الطرفية نفسها التي ستبدأ منها OpenCode. استبدل البديل محليًا. لا تقم بارتكاب المفتاح، أو لصقه في المطالبات، أو تضمينه في السجلات المشتركة.
ينطبق المتغير على صدفة التشغيل الحالية والعمليات المنبثقة منها. لا تلتقط لقطة شاشة لرمز حقيقي. تتحقق الفحوصات التالية من وجود المتغير دون طباعة قيمته.
اضبط مفتاح CometAPI لجلسة Bash الحالية.
export COMETAPI_KEY="YOUR_COMETAPI_KEY"
اضبط مفتاح CometAPI لجلسة PowerShell الحالية.
$env:COMETAPI_KEY = "YOUR_COMETAPI_KEY"test -n "$COMETAPI_KEY" && printf "COMETAPI_KEY is set\n" || printf "COMETAPI_KEY is missing\n"if ([string]::IsNullOrWhiteSpace($env:COMETAPI_KEY)) { "COMETAPI_KEY is missing"} else { "COMETAPI_KEY is set"}
Step 3: Create opencode.json
أنشئ ملف opencode.json في جذر المشروع، أو استخدم ~/.config/opencode/opencode.json لجعل الإدخالات متاحة عبر المشاريع. يحافظ ملف المشروع على استقلالية هذا الشرح. استخدم كائن provider واحدًا يحتوي الإدخالات الثلاثة أدناه؛ إذا كان كائن provider موجودًا بالفعل، فادمج إدخالاته بدل إنشاء مفتاح JSON مكرر.
للعناصر المتعارضة، تتفوّق تهيئة المشروع على التهيئة العالمية؛ أما الحقول غير المتعارضة فتبقى محفوظة. يُحمّل ملف OPENCODE_CONFIG المخصص بين التهيئة العالمية وتهيئة المشروع. راجع سلسلة الأسبقية الموثّقة إذا كانت هناك إعدادات مُدارة أو مضمنة أيضًا.
احفظ التهيئة الكاملة التالية باسم opencode.json. يقرأ كل مزوّد COMETAPI_KEY من البيئة. تم حذف النموذج الافتراضي عمدًا بحيث تختار واحدًا من الأمثلة الثلاثة صراحة.
يجعل إصدار Flash مثال DeepSeek V4.1 المطلوب صريحًا. أبقِ GPT على مكيّف Responses لاستخدام الأدوات؛ تُوثّق إرشادات CometAPI لDeepSeek مسار Chat Completions المستخدم هنا. أعد التحقق من توفر النماذج والأذونات في حسابك قبل تشغيل الأمثلة.
{ "$schema": "https://opencode.ai/config.json", "provider": { "cometapi-messages": { "npm": "@ai-sdk/anthropic", "name": "CometAPI Claude", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "claude-sonnet-5": { "name": "Claude Sonnet 5" } } }, "cometapi-responses": { "npm": "@ai-sdk/openai", "name": "CometAPI GPT", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "gpt-6.1-sol": { "name": "GPT-6.1 Sol" } } }, "cometapi-chat": { "npm": "@ai-sdk/openai-compatible", "name": "CometAPI DeepSeek", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash" } } } }, "permission": { "edit": "ask", "shell": "ask" }}
عنوان baseURL الصحيح: https://api.cometapi.com/v1. عنوان baseURL غير الصحيح: https://api.cometapi.com/v1/chat/completions. يضيف المكيّف مسار نقطة النهاية. ادمج المثال في opencode.json موجود دون إزالة الإعدادات غير ذات الصلة.
تطلب إعدادات edit وshell موافقة على تغييرات الملفات والأوامر وفق قواعد أذونات OpenCode الحالية. شغّل أمثلة الترميز تفاعليًا وافحص تلك الطلبات. يرث OpenCode أيضًا صلاحيات نظام التشغيل من العملية التي تُطلقه؛ استخدم دليلًا مؤقتًا لهذا التمرين.
Step 4: Check the Gateway Connection
إعداد Gemini الاختياري والتحقق يأتيان بعد فحوص الاتصال للنماذج الثلاثة أدناه.
يفحص مثال HTTP أدناه إدخال DeepSeek Chat Completions مباشرة. إنه مفيد لعزل اتصال البوابة عن OpenCode. يستخدم Claude وGPT مسارات المكيّف المختارة في الخطوة التالية؛ تغيير معرّف النموذج داخل طلب HTTP هذا لا يغيّر بروتوكوله تلقائيًا.
أرسل طلب Chat Completions بسيطًا من Bash.
curl --silent --show-error \ --output response.json \ --write-out "HTTP %{http_code}\n" \ https://api.cometapi.com/v1/chat/completions \ -H "Authorization: Bearer $COMETAPI_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Reply with a short greeting."}]}'
يستخدم هذا الأمر خيارات الكتابة والإخراج في curl لفصل حالة HTTP عن response.json. قد يحتوي النقل الناجح على خطأ HTTP، لذا افحص الحالة المطبوعة وهيكل JSON. هذا يتجنب الاعتماد على --fail-with-body الذي يتطلب curl 7.76.0 أو أحدث.
أرسل الطلب نفسه من PowerShell دون اقتباس JSON الخاص بالصدفة.
$body = @{ model = "deepseek-v4.1-flash" messages = @(@{ role = "user"; content = "Reply with a short greeting." })} | ConvertTo-Json -Depth 4$response = Invoke-WebRequest -UseBasicParsing -Method Post ` -Uri "https://api.cometapi.com/v1/chat/completions" ` -Headers @{ Authorization = "Bearer $env:COMETAPI_KEY" } ` -ContentType "application/json" ` -Body $body$response.Content | Set-Content -Encoding UTF8 response.json"HTTP $($response.StatusCode)"
عند خطأ HTTP، قد يطلق PowerShell استثناءً قبل أن تعمل السطران الأخيران. التقط الحالة وتفاصيل الخطأ المنقّحة من ذلك الفشل؛ لا تسجله كاستجابة ناجحة.
النتيجة المتوقعة لطلب DeepSeek: HTTP 200 ونص غير فارغ في choices[0].message.content. افحص response.json المحفوظ ولا تكتفِ بـ HTTP 200. الإضافات التالية تُظهر شكل الاستجابة وكيفية فحص المسارات الثلاثة المهيأة. الأمثلة توضيحية؛ لا يدّعي هذا الإصدار نتائج اختبار CometAPI حية. الطلب النصي فقط لا يثبت البث أو استدعاءات الأدوات.
شكل استجابة DeepSeek التوضيحي: التحية وقيم الاستخدام والحقول الأخرى تعتمد على الطلب الفعلي. JSON التالي مثال مختصر عمدًا، وليس استجابة API ملتقطة.
{"choices":[{"message":{"role":"assistant","content":"Hello!"}}]}
بعد طلب HTTP ناجح فعليًا، يجب أن تقرأ سطر الحالة HTTP 200 وأن يحتوي response.json نص مساعد غير فارغ. احتفظ بالحالة والناتج الفعليين لتشغيلك؛ لا تنسخ المثال كدليل اختبار.
Step 5: Switch Between Claude, GPT, and DeepSeek
يجب أن تعيد الأوامر في هذه الخطوة العلامات المطلوبة من المساعد. نص مساعد توضيحي، مع حذف عناوين الطرفية والتوقيت والبيانات الوصفية:
Claude: CLAUDE_READYGPT: GPT_READYDeepSeek: DEEPSEEK_READY
تُظهر هذه السطور المحتوى المتوقع فقط. إنها ليست تفريغ طرفية. سجّل المخرجات الفعلية وحالة الخروج لكل مزوّد؛ علامة مفقودة أو فشل الطلب يتطلبان تحقيقًا.
ابدأ في الدليل الذي يحتوي opencode.json. اسرد النماذج لكل مزوّد مهيأ، ثم أرسل طلب نص قصير إلى كل إدخال. تغيّر هذه الأوامر النموذج والمكيّف المختارين؛ يظل مفتاح CometAPI وعنوان الأساس نفسهما.
استخدم هذه الأوامر للتحقق من أن الإدخالات الثلاثة مرئية ويمكنها إرجاع نص.
opencode models cometapi-messagesopencode models cometapi-responsesopencode models cometapi-chatopencode run --model cometapi-messages/claude-sonnet-5 "Reply exactly with: CLAUDE_READY"opencode run --model cometapi-responses/gpt-6.1-sol "Reply exactly with: GPT_READY"opencode run --model cometapi-chat/deepseek-v4.1-flash "Reply exactly with: DEEPSEEK_READY"
للتبديل التفاعلي، ابدأ opencode، أدخل /models، واختر CometAPI Claude أو CometAPI GPT أو CometAPI DeepSeek. يستخدم OpenCode زوج المزوّد/النموذج لذلك الإدخال. لا تحتاج إلى ثلاثة حسابات مزوّد أو ثلاثة مفاتيح API. مع هذه التهيئة المعتمدة على البيئة، لا تستخدم /connect لتزويد اعتماد ثانٍ؛ يجب إصلاح COMETAPI_KEY المفقود في صدفة الإطلاق.
النتيجة المتوقعة: يعيد كل طلب قصير العلامة المطلوبة. سجّل النتيجة الفعلية لكل نموذج. إن ظهور إدخال نموذج يؤكد التسجيل؛ والاستجابة النصية الناجحة تؤكد مسار الطلب. ولا يثبت أيهما وحده أن أدوات الملفات تعمل.
يستخدم Gemini مزوّدًا وبروتوكولًا منفصلين. احتفظ بإدخالات Claude وGPT وDeepSeek أعلاه؛ ادمج الإدخال التالي في كائن provider الموجود. يتبع عنوان الأساس أدناه تهيئة CometAPI المزوّدة من المراجع. أكد المسار الحالي والوصول إلى النموذج في حساب CometAPI قبل الاستخدام.
يدعم مكيّف Google عنوان baseURL مخصصًا ويرسل apiKey عبر x-goog-api-key. راجع مرجع مزوّد Google في AI SDK. هذا يؤكد إعدادات المكيّف؛ لا يثبت تمكين نموذج Gemini معيّن على بوابة CometAPI.
{ "provider": { "cometapi-gemini": { "npm": "@ai-sdk/google", "name": "CometAPI Gemini", "options": { "baseURL": "https://api.cometapi.com/v1beta", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "YOUR_GEMINI_MODEL_ID": { "name": "CometAPI Gemini (account-selected model)" } } } }}
استبدل YOUR_GEMINI_MODEL_ID في كل من مفتاح JSON والأمر أدناه بمعرّف نموذج Gemini الدقيق الممكّن لحساب CometAPI الخاص بك. إنه عنصر نائب، وليس معرّف نموذج حقيقي. ادمج إدخال المزوّد هذا دون تكرار مفتاح provider العلوي، وابدأ OpenCode من الصدفة نفسها حيث تم ضبط COMETAPI_KEY.
opencode models cometapi-geminiopencode run --model cometapi-gemini/YOUR_GEMINI_MODEL_ID "Reply exactly with: GEMINI_READY"
نص المساعد المتوقع: GEMINI_READY. يؤكد إدراج النموذج التسجيل المحلي؛ واستلام العلامة يؤكد طلب النص. احفظ الاستجابة الفعلية وحالة الخروج. للتحقق من أدوات الترميز، شغّل opencode --model cometapi-gemini/YOUR_GEMINI_MODEL_ID في دليل مؤقت جديد وكرر مهمة greet.cjs/check.cjs أدناه. النجاح النصي وحده لا يتحقق من البث أو التحرير أو استدعاءات الأدوات.
How Do You Run a Coding Task with Claude, GPT, and DeepSeek?
استخدم المهمة الصغيرة نفسها لكل نموذج: أنشئ دالة تحية، أضف تأكيدًا، وشغّلها. احتفظ بثلاثة أدلة جديدة بحيث لا يستطيع النموذج الثاني ببساطة إعادة استخدام ملفات أنشأها الأول. هذا يفحص سير عمل التكامل دون تحويل المقال إلى ترتيب للأداء.
احفظ prepare-runs.cjs بجانب opencode.json وشغّله مرة واحدة. ينشئ ثلاثة أدلة جديدة ويُنسخ التهيئة المشتركة فقط. يتوقف إذا كان أي دليل هدف موجودًا بالفعل، لذا لن تُستبدل الأعمال السابقة.
const fs = require("node:fs");const path = require("node:path");const root = __dirname;const names = ["claude-demo", "gpt-demo", "deepseek-demo"];const config = path.join(root, "opencode.json");if (!fs.existsSync(config)) throw new Error("Missing opencode.json");for (const name of names) { if (fs.existsSync(path.join(root, name))) { throw new Error(`Directory already exists: ${name}`); }}for (const name of names) { const dir = path.join(root, name); fs.mkdirSync(dir); fs.copyFileSync(config, path.join(dir, "opencode.json"));}node prepare-runs.cjscd claude-demoopencode --model cometapi-messages/claude-sonnet-5# After exiting OpenCode:cd ..cd gpt-demoopencode --model cometapi-responses/gpt-6.1-sol# After exiting OpenCode:cd ..cd deepseek-demoopencode --model cometapi-chat/deepseek-v4.1-flash# After exiting OpenCode:cd ..
شغّل إحدى الجلسات التالية في كل مرة، بدءًا من دليل المشروع الأعلى. اخرج من الجلسة قبل الانتقال إلى المثال التالي. في كل جلسة، أرسل المهمة نفسها أدناه وراجع التعديلات والأوامر المقترحة. يجب أن يكون Node.js متاحًا للعملية التي تُطلق OpenCode.
اطلب من الوكيل إنشاء دالة صغيرة في JavaScript والتحقق منها.
Create greet.cjs in this directory.Export a function named greet(name) that returns "Hello, " + name + "!".Create check.cjs using node:assert/strict.Assert that greet("Ada") equals "Hello, Ada!".Run node check.cjs and report its actual exit status.Do not modify opencode.json or unrelated files.
النتيجة المتوقعة: يطلب الوكيل الموافقات المهيأة، وينشئ كلا الملفين، ويُكمل node check.cjs بحالة خروج 0. سجّل ما حدث فعليًا. افحص الملفات وأعد تشغيل التحقق بنفسك؛ الادعاء النصي بالنجاح غير كافٍ. إذا رُفض استدعاء أداة أو جاء غير صحيح، فحقّق في توافق المسار بشكل منفصل عن طلب الموافقة المعلّق.
Reference Files and Local Verification
الملفات التالية تنفيذ مرجعي للمهمة المطلوبة. كُتبت مباشرة لهذا الدليل؛ ولا تُعرض كقطع مولّدة من نموذج. مطابقة سلوكها الملحوظ هو شرط القبول لتشغيل وكيلك.
function greet(name) { return "Hello, " + name + "!";}module.exports = { greet };const assert = require("node:assert/strict");const { greet } = require("./greet.cjs");assert.equal(greet("Ada"), "Hello, Ada!");node check.cjsprintf "exit=%s\n" "$?"node check.cjs"exit=$LASTEXITCODE"
التحقق المرجعي المحلي: Windows، Node.js v24.19.0، 22 أكتوبر 2026؛ أعاد node check.cjs حالة خروج 0 دون خرج قياسي. هذا يتحقق فقط من الملفين المرجعيين. ولا يتحقق من تثبيت OpenCode أو الوصول إلى CometAPI أو مطالبات الموافقة أو استدعاءات أدوات النماذج.
| Run | Selected model entry | What to record |
|---|---|---|
| Claude | cometapi-messages/claude-sonnet-5 | الاستجابة، الملفات المولّدة، الموافقات، رمز خروج الاختبار |
| GPT | cometapi-responses/gpt-6.1-sol | الاستجابة، الملفات المولّدة، الموافقات، رمز خروج الاختبار |
| DeepSeek | cometapi-chat/deepseek-v4.1-flash | الاستجابة، الملفات المولّدة، الموافقات، رمز خروج الاختبار |
احتفظ بسجل نتيجة واحد لكل نموذج: مزوّد/نموذج مختار، وما إذا وصلت استجابة، وما إذا تم إنشاء greet.cjs وcheck.cjs، وما إذا ظهرت الموافقات، ورمز خروج node check.cjs. سجّل الإخفاقات كإخفاقات؛ لا تستدل على نجاح من التنفيذ المرجعي.
Protect Credentials and Verify Reliability
خزّن COMETAPI_KEY في متغير بيئة بدلًا من ملفات التهيئة أو السجلات المشتركة. أبقِ موافقات تحرير الملفات وأوامر الصدفة مفعّلة، واختبر التهيئات الجديدة في مشروع مؤقت.
تحقق بشكل منفصل من طلب API المباشر، واستجابة OpenCode، وسير عمل تحرير الملفات. سجّل الأخطاء ونتائج الاختبارات، وأعد المحاولة فقط في حالات الفشل المؤقتة، وافحص مساحة العمل قبل تكرار المهام المتقطّعة.
يبسط CometAPI التبديل بين النماذج، لكن OpenCode لا يوفّر تلقائيًا تجاوز فشل عبر النماذج من خلال هذه التهيئة. إذا أصبح نموذج غير متاح، اختر يدويًا نموذجًا آخر تم التحقق منه وكرر فحص القبول.
How much does it cost to use Opencode with CometAPI?
Prices for CometAPI, and how is billing structured
يقدّم CometAPI تسعيرًا حسب الاستخدام دون رسوم اشتراك شهرية، ويحاسب فقط على استخدام API الفعلي. أسعار نماذجه الرسمية عمومًا أقل بنسبة 20% من الأسعار القياسية للمزوّدين، مع حسومات حجم إضافية متاحة. يمكن للمطورين الوصول إلى Claude وGPT وDeepSeek ونماذج أخرى عبر حساب واحد، والدفع بناءً على استهلاك الرموز لكل نموذج مختار. راجع صفحة تسعير CometAPI للأسعار الحالية.
للطلبات دون تخزين مؤقت أو رسوم إضافية:
التكلفة = (رموز الإدخال × سعر الإدخال + رموز الإخراج × سعر الإخراج) / 1,000,000
على سبيل المثال، بأسعار افتراضية 1$ لكل مليون رمز إدخال و4$ لكل مليون رمز إخراج، فإن استخدام 20,000 رمز إدخال و2,000 رمز إخراج يكلّف 0.028$. هذه أسعار توضيحية، وليست أسعار النماذج الفعلية.
سجّل استخدام الرموز، وإجمالي رسوم API، ووقت التنفيذ، ونتائج الاختبار لكل مهمة. لتقليل التكلفة، حدّ من السياق غير الضروري، واستخدم مطالبات موجزة، وتجنّب تكرار الطلبات الفاشلة، واختر نماذج أقل تكلفة عندما تلبّي المتطلبات بالجودة نفسها.
OpenCode API Cost Optimization Strategies
لتقليل تكاليف OpenCode دون الإخلال بجودة الترميز، ركّز على اختيار النموذج وكفاءة الرموز والطلبات غير الضرورية.
- اختر النموذج المناسب: استخدم نماذج أقل تكلفة مثل DeepSeek لمهام الترميز الروتينية، واحتفظ بـ Claude أو GPT لإصلاحات الأخطاء المعقّدة وإعادة الهيكلة والاستدلال.
- خفّض استهلاك الرموز: اجعل المطالبات موجزة، وقدّم فقط الملفات ذات الصلة بالمشروع، وتجنّب إرسال كميات كبيرة من سياق المستودع بشكل متكرر.
- استخدم تخزين المطالبات المؤقت: استفد من ميزات التخزين المؤقت المدعومة للسياقات المتكررة، مثل تعليمات المشروع ومرجع الشيفرة، لتقليل تكلفة الإدخال.
- تجنّب إعادة المحاولة غير الضرورية: أصلح أخطاء التهيئة والمصادقة قبل إعادة المحاولة، وراجع المخرجات السابقة لتجنّب العمل المكرر.
- راقب الإنفاق الفعلي: تتبّع استخدام الرموز، ورسوم API، وإتمام المهام بنجاح عبر CometAPI. قارن التكلفة لكل مهمة ناجحة بدلًا من أسعار الرموز فقط.
بالاقتران مع تسعير CometAPI المخفّض والدفع حسب الاستخدام، تساعد هذه الممارسات المطورين على التحكم في الإنفاق مع الحفاظ على أداء ترميز موثوق.
How Can You Extend the CometAPI Configuration?
لإضافة نموذج آخر، ضع معرّف نموذجه تحت المزوّد الذي يدعم تنسيق API الخاص به، أو أضف إدخال مزوّد جديدًا مع المكيّف المطلوب. ثم اختر هذا المزوّد/النموذج عبر /models. احتفظ ببيانات الاعتماد في COMETAPI_KEY واحتفظ بالإدخالات الموجودة بحيث يبقى التبديل عملية اختيار.
يغطي الدليل الرسمي أربعة تنسيقات API، بما فيها Gemini. يستخدم هذا المقال الإدخالات الثلاثة اللازمة لـ Claude وGPT وDeepSeek. إذا كانت عدة نماذج مختارة تدعم Chat Completions، فيمكنها مشاركة خريطة models واحدة لـ cometapi-chat. لا تنقل مسارًا خاصًا بـ Responses فقط أو Messages فقط إلى تلك الخريطة لمجرد تقليل عدد الإدخالات.
اختر المكيّف بناءً على المسار الذي تنوي استدعاءه، واختر النموذج بناءً على مهمة البرمجة. تغيير المزوّد لا يتطلب مفتاح CometAPI جديدًا؛ أما تغيير تنسيق API فيتطلب المكيّف المطابق.
How to Troubleshoot CometAPI in OpenCode?
اتّبع أول مرحلة تفشل: طلب HTTP → مزوّد OpenCode → أدوات الملفات. إذا فشل HTTP، افحص بيانات الاعتماد والوصول إلى النموذج وتفاصيل نقطة النهاية. إذا نجح HTTP وفشل OpenCode، افحص التهيئة وبيئة الإطلاق. إذا نجحت الفحوصات النصية وفشلت إجراءات الملفات، افحص الأذونات وتوافق استدعاءات الأدوات.
| Symptom | First check | Next action | Diagnostic command / evidence |
|---|---|---|---|
| 401 response | قيمة المفتاح وترويسة Authorization | اضبط المفتاح في الطرفية الحالية؛ تحقق من المسافات البيضاء غير المقصودة. | تحقق من وجود المتغير دون طباعة المفتاح؛ احتفظ بحالة HTTP والخطأ المنقّح. |
| 403 or account restriction | نص خطأ الاستجابة وأذونات الحساب | أكد الوصول إلى النموذج وحالة الحساب في CometAPI. | احفظ خطأ الاستجابة المنقّح وأكد الوصول إلى الحساب. |
| 404 response | المضيف ومسار نقطة النهاية ومعرّف النموذج | قارن الطلب مع وثائق API للنموذج المختار. | قارن response.json مع النموذج المطلوب ونقطة النهاية. |
| Model missing in OpenCode | دليل المشروع وتهيئة المزوّد | تحقق من صحة JSON وتطابق أسماء المزوّد/النموذج؛ أعد التشغيل بعد التحرير. | شغّل opencode models cometapi-chat وopencode models cometapi-messages وopencode models cometapi-responses؛ سجّل opencode --version. |
| Text works, tools fail | استجابة استدعاء الأدوات وتوافق المكيّف | تحقق من دعم المسار؛ ميّز بين استدعاء أداة مرفوض ومطالبة موافقة. | قارن الطلب النصي القصير مع فعل الأداة الفاشل؛ احتفظ بالخطأ. |
| Command waits for approval | جلسة تفاعلية وإعدادات الأذونات | راجع ووافق على الإجراء المقصود؛ لا تعتبر طلب الموافقة المعلق انقطاعًا في API. | استخدم الجلسة التفاعلية؛ سجّل الإجراء المطلوب ونتيجة الموافقة. |
| 429 or transient server error | تفاصيل الخطأ وحدود الاستخدام | خفّض توازي الطلبات؛ اتبع أي توجيهات إعادة المحاولة بدل إعادة المحاولة المستمرة. | احتفظ بحالة HTTP وتوجيهات إعادة المحاولة؛ خفّض التوازي. |
عند مشاركة مشكلة، أدرج إصدار OpenCode ونظام التشغيل ومعرّف النموذج ومسار نقطة النهاية ونص الخطأ المنقّح. استبعد مفاتيح API ومحتوى المستودعات الخاصة. احتفظ بأصغر طلب يعيد إنتاج الفشل بحيث يمكن التحقيق في فشل التهيئة والأدوات بشكل منفصل.
FAQ
Why does OpenCode lose my CometAPI key in a new terminal?
تضبط أوامر التصدير وPowerShell أعلاه متغير بيئة للجلسة الحالية وعملياتها الابنة. قد لا ترث طرفية منفصلة مفتوحة أو محرّر يعمل بالفعل هذا المتغير. اضبط المفتاح في البيئة التي تُطلق OpenCode وأعد تشغيل تلك العملية. للإعداد الدائم، استخدم إدارة بيانات الاعتماد في بيئتك بدل تضمين السر في ملف مستودع.
Does OpenCode load COMETAPI_KEY from a .env file automatically?
تقرأ {env:COMETAPI_KEY} بيئة العملية. إنشاء ملف .env وحده لا يضمن تحميل المتغير. استخدم الصدفة أو محمّل بيئة مضبوطًا صراحة قبل بدء OpenCode. شخّص القيمة الفارغة في عملية الإطلاق بدل افتراض عدم توفر المزوّد.
Can a global OpenCode configuration change this project setup?
يدمج OpenCode التهيئات بدل استبدال كل ملف سابق. يتفوّق ملف المشروع على الحقول المتداخلة في الملف العالمي، بينما تبقى الإعدادات العالمية غير ذات الصلة محفوظة. يُحمّل ملف OPENCODE_CONFIG المخصص بينهما. إذا اختلف السلوك عبر المستودعات، فقارن هذه المصادر وأي إعدادات مُدارة أو مضمنة بدل افتراض أن الملف المحلي هو الإدخال الوحيد.
Does refreshing the OpenCode model list enable CometAPI access?
لا. خيار تحديث النماذج يحدّث ذاكرة models.dev المؤقتة؛ لا يمنح وصول حساب ولا يثبت أن نقطة النهاية تقبل معرّف نموذج. قد يكون الإدخال المكوّن يدويًا مرئيًا قبل أي طلب ناجح. استخدم طلبًا فعليًا للتحقق من المسار واستشر إعدادات حساب CometAPI لقيود الوصول.
Why does curl work while OpenCode cannot call CometAPI?
قد تحمّل العمليتان بيانات اعتماد مختلفة، أو تستخدمان معرفات نماذج مختلفة، أو ترسلان أشكال طلب مختلفة. أولًا أعد تشغيل المطالبة النصية القصيرة من الصدفة نفسها التي نجح فيها طلب HTTP. ثم قارن عنوان الأساس للمزوّد والمكيّف والنموذج المختار. إذا نجح النص البسيط وفشلت مهمة الوكيل، فاحفظ الخطأ المرتبط بالأدوات بشكل منفصل؛ فالاتصال بـ HTTP وحده لا يثبت توافق الأدوات.
Conclusion
لديك الآن ملف opencode.json واحد يحتوي على أمثلة Claude وGPT وDeepSeek، وبيانات اعتماد مشتركة لـ CometAPI، وأوامر لتبديل النموذج النشط. استخدم الطلبات النصية القصيرة للتحقق من الوصول، ثم شغّل مهمة إنشاء الملفات نفسها في أدلة منفصلة للتحقق من سير عمل الترميز. احتفظ بالنتائج المرصودة مع تفاصيل بيئتك قبل تطبيق الإعداد على مستودع أكبر.
