تشغيل OpenCode على SovereignEG

الهدف: تشغيل OpenCode، وهو مساعد برمجة مفتوح المصدر يعمل من الطرفية (Terminal)، باستخدام نماذج SovereignEG.

الوقت: 10 دقائق.

English: OpenCode

يتصل OpenCode بـ SovereignEG عن طريق المزوّد @ai-sdk/openai-compatible، لأن SovereignEG يعمل بصيغة OpenAI (/v1/chat/completions).

تنبيه: Claude Code لا يتصل مباشرة. SovereignEG يدعم صيغة OpenAI فقط، وليس صيغة Anthropic (/v1/messages)، لذلك يحصل Claude Code ومكتبات Anthropic على الخطأ 404 route_not_found. استخدم OpenCode كما في هذا الدليل، أو أي أداة متوافقة مع OpenAI.

الخطوة 1: التثبيت

# Linux / macOS / WSL
curl -fsSL https://opencode.ai/install | bash
 
# or with npm (all platforms)
npm install -g opencode-ai
 
# Windows
scoop install opencode      # or: choco install opencode

للتأكد من التثبيت: opencode --version

الخطوة 2: ضع المفتاح في متغير بيئة

أنشئ مفتاح API من لوحة التحكم، ثم ضعه في متغير بيئة في نفس الطرفية التي ستشغّل منها OpenCode:

export SOVEREIGNEG_API_KEY="sk-..."          # Linux / macOS
$env:SOVEREIGNEG_API_KEY = "sk-..."          # Windows PowerShell

لا تكتب المفتاح داخل ملفات المشروع.

الخطوة 3: ملف الإعداد

أنشئ الملف opencode.json داخل مجلد مشروعك، وضع فيه:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "sovereigneg": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "SovereignEG",
      "options": {
        "baseURL": "https://backend.sovereigneg.com/v1",
        "apiKey": "{env:SOVEREIGNEG_API_KEY}"
      },
      "models": {
        "SovereignEG/Qwen3.8-27B-FP8": {
          "name": "SovereignEG/Qwen3.8-27B-FP8 (SovereignEG)",
          "limit": { "context": 30000, "output": 8192 }
        }
      }
    }
  },
  "model": "sovereigneg/SovereignEG/Qwen3.8-27B-FP8"
}

أهم نقطتين في الملف:

  • العنوان baseURL يجب أن يكون بالضبط https://backend.sovereigneg.com/v1، أي أنه ينتهي بـ /v1. لا تكتب /v1/v1، ولا تكتب /v1/chat/completions، لأن OpenCode يضيف باقي المسار بنفسه.
  • حد السياق limit.context: القيمة 30000 مناسبة لخطة الطلاب و Developer Pack (انظر «حدود الخطط التي فيها رصيد يومي مجاني» بالأسفل). إذا لم تكن على إحداهما، يمكنك رفعها حتى 131072.

الخطوة 4: التشغيل

cd your-project
opencode

داخل OpenCode:

  • /models: تأكد أن SovereignEG ظاهر في القائمة، ثم اختر الموديل.
  • /init: ينشئ ملف AGENTS.md يصف مشروعك.
  • اكتب المهمة التي تريدها، مثلًا: «أضف تحققًا من المدخلات في نموذج التسجيل، واكتب له اختبارًا.»
  • /undo و /redo: للتراجع عن تعديلات الملفات أو إعادتها.

حدود الخطط التي فيها رصيد يومي مجاني

في خطة الطلاب و Developer Pack رصيد يومي مجاني يعمل على خوادمنا (GPU) في مصر، لذلك لهما حدود خاصة على موديلات الخطة. هذه حدود الخطة، وليست حدود الموديل، وكل رسالة رفض تقول ذلك:

  • حجم الطلب: الرصيد المجاني له حد أقصى لحجم الطلب على SovereignEG/Qwen3.8-27B-FP8: 32,768 توكن (token) في خطة الطلاب حاليًا، ورسالة الرفض تذكر الحد الحالي لخطتك دائمًا. يرسل OpenCode المحادثة كلها مع كل خطوة، فالجلسة الطويلة تتخطى الحد ويظهر الخطأ 400 prompt_too_long_for_plan. عندما يكون limit.context أقل من الحد قليلًا (مثل 30000)، يلخّص OpenCode المحادثة بنفسه قبل أن يصل إليه.
  • عدد الطلبات في الدقيقة وفي الوقت نفسه: يرسل المساعد البرمجي طلبًا جديدًا بعد كل أداة يستخدمها، فالجلسة المزدحمة قد تصل إلى حد الطلبات في الدقيقة (وهو مشترك بين كل مفاتيحك) أو حد الطلبات في الوقت نفسه، فيظهر 429 rate_limit_exceeded أو 429 concurrency_limit_exceeded. انتظر المدة المكتوبة في Retry-After ثم تابع.

للجلسات الطويلة أو المزدحمة، اختر موديلًا بالدفع حسب الاستخدام: يُخصم من رصيدك، ولا تنطبق عليه حدود الخطة. صفحتا Rate Limits و Student plan تشرحان كيف تعمل هذه الحدود.

عندما ينتهي الرصيد

عندما يصل رصيدك إلى الصفر تتوقف الطلبات على الموديلات المدفوعة. السحب على المكشوف الصغير الظاهر في لوحة التحكم متاح فقط للحسابات التي شحنت رصيدًا مدفوعًا مرة واحدة على الأقل؛ أما الرصيد المجاني وحده (هدية الترحيب أو الكوبون) فيتوقف عند الصفر. يمكنك الشحن من لوحة التحكم في أي وقت.

حل المشكلات الشائعة

المشكلةالحل
SovereignEG لا يظهر في /modelsملف JSON فيه خطأ، أو الملف في مجلد آخر. شغّل opencode من المجلد الذي فيه opencode.json
401المتغير SOVEREIGNEG_API_KEY غير موجود في الطرفية التي شغّلت منها opencode
400 model_not_foundاسم الموديل داخل models يجب أن يطابق الاسم في /v1/models بالضبط
404 route_not_foundالعنوان baseURL خطأ: يجب أن يكون بالضبط https://backend.sovereigneg.com/v1. وفي الأخطاء الشائعة (تكرار /v1، أو نسيانها، أو عنوان ينتهي بـ /chat/completions) تذكر رسالة الخطأ الحل
404 يذكر Anthropic Messages APIالأداة تستخدم صيغة Anthropic (مثل Claude Code). استخدم المزوّد @ai-sdk/openai-compatible كما في الخطوة 3
400 prompt_too_long_for_planحد حجم الطلب في خطتك (خطة الطلاب أو Developer Pack): اجعل limit.context أقل منه قليلًا، مثل 30000
429 rate_limit_exceeded أو concurrency_limit_exceededحدود الطلبات في خطة الطلاب أو Developer Pack: انتظر Retry-After، أو استخدم موديلًا بالدفع حسب الاستخدام
الموديل يرد بالكلام ولا يستخدم الأدواتاختر موديلًا يدعم الأدوات (supports_tools: true في /v1/models)
الرد ينقطع قبل أن يكتملارفع قيمة limit.output
OpenCode بالعربي | SovereignEG Docs