آلية العمل
Markdownما الذي يحدث للطلب بين تطبيقك والنموذج.
الدليل الكامل
ترسل الطلب إلى Ailoot API بالطريقة نفسها التي ترسله بها مباشرةً إلى OpenAI أوAnthropic أوGoogle. يتحقق Ailoot من المفتاح والرصيد، ويمرّر الطلب إلى النموذج، ويعيد الرد بالصيغة نفسها، ويخصم بحسب الاستخدام الفعلي.
مفتاح واحد — ثلاث صيغ
تُحدد الصيغة بمسار الطلب، لا بالنموذج. يمكن استدعاء نموذج Claude نفسه عبر OpenAI Chat أوOpenAI Responses أوAnthropic Messages؛ ويأتي الرد بصيغة المسار الذي استدعيته.
| الصيغة | المسار | من يستخدمه |
|---|---|---|
| OpenAI Chat Completions | /v1/chat/completions | OpenAI SDK ومعظم تطبيقات الدردشة والمحررات وn8n وLangChain |
| OpenAI Responses | /v1/responses | Codex CLI وOpenAI Agents SDK والإصدارات الجديدة من SDK |
| Anthropic Messages | /v1/messages | Claude Code, Anthropic SDK, Zed, Cline |
| Gemini | /v1beta/models/{model}:generateContent | Gemini CLI, Google GenAI SDK |
المال: حجز وخصم واحد
- قبل إرسال طلب نصي جديد، يحجز Ailoot مبلغًا تقديريًا لتكلفة الإدخال ورد نموذجي، مع مراعاة الحد (
max_tokens) وشروط النموذج المحدد. إذا تجاوز المبلغ المحجوز الرصيد الحر أو حد المفتاح، فلا يجوز خفض الحد المرسل إلا لنموذج وطريقة يلتزمان به فعليًا، ودون النزول عن 256 توكن ولا عن الحد الأدنى المقرر للرد. أما الصور والفيديو والصوت في المخرجات، فتظل تكلفة النتيجة كاملة محجوزة. - بعد الرد، يُخصم مرة واحدة بحسب الاستخدام الفعلي. يُعاد المبلغ المحجوز غير المستخدم إلى الرصيد فوراً.
- إذا كانت تكلفة الرد أعلى من المبلغ المحجوز، يُغطى الفرق من الرصيد المتاح. لا يصبح الرصيد سالباً أبداً.
- إذا لم يكفِ المال حتى للحد الأدنى من الحجز، فلا يُرسل الطلب؛ وتتلقى خطأ 402 مفهوماً دون خصم أي مبلغ.
- لا تُحسب تكلفة خطأ لا ينتج عنه نتيجة.
التفاصيل والمثال الحسابي موجودان في صفحة حجز الرصيد والخصم.
أخطاء مع Request ID
يحصل كل رد على معرّف طلب في الترويسة X-Request-ID وفي نص الخطأ. تأتي الأخطاء بصيغة JSON للواجهة التي استدعيتها، ولذلك تتعرف حزم SDK عليها بصورة صحيحة. إذا حدثت مشكلة، فأرسل Request ID إلى الدعم — وسنتمكن من العثور على الطلب خلال دقيقة.
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}التدفق والمهلات
تصل الردود المتدفقة (stream: true) بصيغة Server-Sent Events. يعيد Ailoot الرد النصي المدفوع بعد احتساب التكلفة. لذلك عند استخدام stream: true تبقى الصيغة متدفقة (SSE)، لكن النص يأتي دفعة واحدة عند اكتمال النموذج، ولا يصل كلمة بكلمة. إذا استغرق إعداد الرد أكثر من نحو 15 ثانية، تبدأ تدفقات Chat Completions وResponses وMessages بأسطر خدمية : ping (كل 10 ثوانٍ تقريباً)، ثم السطر : ailoot-charged-usd … بمبلغ الخصم، ثم البيانات نفسها. تتجاهل حزم SDK هذه الأسطر.
لا توجد أسطر خدمية في صيغة Gemini؛ ويصل الرد :streamGenerateContent كاملاً بعد الحساب. اضبط مهلة العميل بهامش كافٍ لنماذج الاستدلال؛ عدة دقائق أمر طبيعي.
ترويسات الرد
X-Request-ID يأتي في كل رد. يضيف Ailoot بقية الترويسات إلى الردود النصية المدفوعة:
| الترويسة | محتواها |
|---|---|
X-Request-ID | معرّف الطلب الذي يحتاجه الدعم |
X-Ailoot-Charged-USD | المبلغ المخصوم لهذا الطلب بالدولار |
X-Ailoot-Output-Tokens | عدد توكنات الرد التي احتُسبت تكلفتها |
X-Ailoot-Max-Tokens-Capped | حد الرد الذي خُفض إليه بسبب عدم كفاية الرصيد للحجز الكامل |
X-Ailoot-Notice-Code, X-Ailoot-Notice | توضيح إذا توقف الرد عند حد الطول |
إذا بدأ التدفق بأسطر خدمية بالفعل، فتأتي هذه المعلومات كسطر تعليق قبل البيانات بدلاً من ترويسة.
التخزين المؤقت للموجّهات
إذا دعم النموذج التخزين المؤقت، فقد تقل تكلفة إعادة إرسال بادئة طويلة (تعليمات النظام والمستندات). تظهر أسعار قراءة الذاكرة المؤقتة والكتابة فيها في بطاقة النموذج في الكتالوج. يحدد مطوّر النموذج الاستفادة من التخزين المؤقت، ولا يضمنها Ailoot.