التوثيق
كل ما تحتاجه للبناء مع واجهة قِرناس
واجهة قِرناس البرمجية
ابنِ تجارب محادثة عربية أولاً بنفس النماذج التي تشغّل قِرناس — واجهة REST بصيغة chat completions القياسية مع بث مباشر عبر SSE.
عنوان القاعدة والمصادقة
https://api.mindlabsa.com/v1HTTPSأرسل مفتاحك في ترويسةAuthorizationمع كل طلب.
curl https://api.mindlabsa.com/v1/chat/completions \ -H "Authorization: Bearer $QIRNAS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qirnas", "stream": true, "messages": [ { "role": "system", "content": "أنت مساعد عربي أولاً." }, { "role": "user", "content": "لخّص لي مبيعات الربع الرابع." } ] }'البداية السريعة
// Node 18+ — no packages neededconst res = await fetch("https://api.mindlabsa.com/v1/chat/completions", { method: "POST", headers: { Authorization: `Bearer ${process.env.QIRNAS_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ model: "qirnas", messages: [{ role: "user", content: "اشرح مفهوم رؤية 2030." }], }),});const data = await res.json();console.log(data.choices[0].message.content);# pip install requestsimport os, requestsresp = requests.post( "https://api.mindlabsa.com/v1/chat/completions", headers={"Authorization": f"Bearer {os.environ['QIRNAS_API_KEY']}"}, json={ "model": "qirnas", "messages": [ {"role": "system", "content": "أجب باللغة العربية."}, {"role": "user", "content": "قارن بين قطاعي السياحة والصناعة في السعودية."}, ], },)print(resp.json()["choices"][0]["message"]["content"])الاتصال المباشر عبر HTTP يعمل بدون أي حزمة كما في الأمثلة أعلاه. وإن كنت تفضّل مكتبة عميل، فالواجهة تدعم مكتبات SDK المتوافقة مع الصيغة القياسية (صفحة SDKs) — وحزمة @qirnas/sdk الرسمية قادمة قريباً.
مرجع الواجهة
إكمال المحادثة
رد واحد بصيغة JSON، أو بث عبر SSE. الطلب الناجح يعود بالحالة 201 (وأي حالة 2xx نجاح).
/v1/chat/completions| المعامل | النوع | الوصف |
|---|---|---|
model | string | معرّف نموذج من GET /v1/models، أو qirnas للنموذج الافتراضي. إن حُذف: النموذج الافتراضي. والمعرّف الذي لا تعرفه البوابة يجيب عنه النموذج الافتراضي كذلك، لكن ذلك مُهمَل وسيتوقف (انظر ترويسة Deprecation في الرد). |
messagesمطلوب | array · ≥ 1 item | المحادثة حتى الآن، بالأدوار system وuser وassistant وtool. إن لم ترسل رسالة system يُستخدم موجّه النظام الخاص بالنموذج. |
temperature | number · 0–2 | درجة حرارة أخذ العينات. |
top_p | number · 0–1 | أخذ العينات النووي: كتلة الاحتمال التي يُختار منها. القيمة 0: الرمز الأرجح وحده. |
max_tokens | integer · ≥ 1 | أقصى عدد من الرموز يُولَّد. إن حُذف: default_max_tokens للنموذج. وإن تجاوز max_output_tokens: يُخفَّض إليه. |
presence_penalty | number · −2–2 | يعاقب الرموز التي ظهرت من قبل، فيشجّع على موضوعات جديدة. |
frequency_penalty | number · −2–2 | يعاقب الرموز بحسب عدد مرات ظهورها. إن حُذف: القيمة الافتراضية للنموذج. |
seed | integer | يجعل أخذ العينات قابلاً للتكرار للطلب والنموذج نفسيهما، بقدر ما يتيحه خادم النموذج. |
stop | string | string[] · ≤ 4 items · 1–256 chars | حتى 4 سلاسل (كل منها حتى 256 حرفاً) يتوقف عندها التوليد، ولا تُضمَّن في الرد. |
stream | boolean | بث الرد عبر أحداث SSE (انظر «البث»). |
stream_options | object | القيمة { "include_usage": true } تضيف مقطعاً أخيراً يحمل الاستهلاك. مع stream: true فقط. |
tools | array | دوال يمكن للنموذج استدعاؤها (انظر «استدعاء الأدوات»). |
tool_choice | "auto" | "none" | "required" | object | auto (يقرر النموذج) أو none أو required، أو دالة واحدة محددة بالاسم. |
user | string · ≤ 256 chars | معرّف مُعتِم للمستخدم النهائي لديك، لتُنسب إساءة الاستخدام إلى أحد مستخدميك دون معرفة هويته. أرسل قيمة تجزئة ثابتة، لا بريداً إلكترونياً ولا اسماً. لا يُرسل إلى النموذج، ولا يُسجَّل إلا بتجزئة مفتاحية. |
reasoning | boolean · default false | يتطلب صلاحية: نطاق reasoning القيمة true: يفكّر النموذج قبل أن يجيب (إجابات أفضل للأسئلة الصعبة، مع زمن ورموز أكثر؛ ولا يُعاد نص التفكير نفسه). |
think | boolean · default false | يتطلب صلاحية: نطاق think القيمة true: وضع التفكير المعمّق. يجيب النموذج عدة مرات وتُعاد الإجابة التي تتفق عليها المحاولات، ويُحتسب الاستهلاك لكل المحاولات. لا يجتمع مع tools. |
reasoning وthink جزء من المخطط، لكن القيمة true تتطلب مفتاحاً يملك النطاق الذي يحمل الاسم نفسه، وإلا يعود الطلب 403 بالرمز scope_required. المفاتيح التي تُنشأ من هذه البوابة تبدأ دون هذين النطاقين. أما القيمة false، أو حذف الحقل، فمقبولة دائماً. ولا يقبل الحقلان إلا true أو false أو null: أي قيمة أخرى، مثل الكائن {"effort": "low"}، تعود 400 بالرمز invalid_request.curl https://api.mindlabsa.com/v1/chat/completions \ -H "Authorization: Bearer $QIRNAS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qirnas", "messages": [{ "role": "user", "content": "اقترح ثلاثة أسماء لمقهى في جدة." }], "temperature": 0.7, "top_p": 0.9, "max_tokens": 512, "stop": ["###"], "seed": 7, "user": "u_8f14e45fceea167a" }'- القيمة
nullللحقولtop_pوpresence_penaltyوfrequency_penaltyوseedوstopوstream_optionsوuserوreasoningوthinkتعادل عدم إرسالها، وكذلكstopأوuserالفارغان. - الحقول غير المدرجة هنا تُتجاهل (ومنها
reasoning_effortمن OpenAI). أما الحقل المدرج بقيمة غير صالحة، أي من نوع آخر أو خارج حدوده، فيعود 400 بالرمزinvalid_request، ويسمّيهparam. - الحقل
modelفي الرد يكون دائماًqirnas. وإن لم تتسع الرسائل معmax_tokens(أوdefault_max_tokensللنموذج إن لم ترسله) في نافذة السياق يعود 400 بالرمزcontext_length_exceeded. - جسم الطلب 256 كيلوبايت على الأكثر، وإلا يعود 413 بالرمز
request_too_large. وقيمةmax_tokensتبقى ضمن سقف مخرجات مفتاحك (انظر «صلاحيات المفتاح»).
البث
مع stream: true يصل الرد أحداثاً من نوع SSE، كل حدث data: يحمل مقطع chat.completion.chunk، وينتهي بـ data: [DONE].
- أثناء تشغيل النموذج (قد يستغرق تشغيل وحدة GPU من السكون دقائق) ترسل البوابة سطر تعليق
: keep-aliveكل 15 ثانية — تجاهل كل سطر يبدأ بـ:. - أرسل
stream_options: { "include_usage": true }ليحمل آخر مقطع قبل[DONE]الاستهلاك، بقائمةchoicesفارغة. - الفشل قبل بدء البث خطأ HTTP عادي. أما بعده فيصل حدث خطأ واحد يحمل كائن
errorنفسه (معrequest_id)، ثمdata: [DONE]— انظر رموز الأخطاء.
: keep-alivedata: {"id":"chatcmpl-5b2d…","object":"chat.completion.chunk","model":"qirnas","choices":[{"index":0,"delta":{"content":"أهلاً"},"finish_reason":null}]}data: {"id":"chatcmpl-5b2d…","object":"chat.completion.chunk","model":"qirnas","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}data: {"id":"chatcmpl-5b2d…","object":"chat.completion.chunk","model":"qirnas","choices":[],"usage":{"prompt_tokens":21,"completion_tokens":4,"total_tokens":25}}data: [DONE]// Node 18+ — read the stream, skip keep-alive comments, surface in-band errors.async function streamChat(body) { const res = await fetch("https://api.mindlabsa.com/v1/chat/completions", { method: "POST", headers: { Authorization: `Bearer ${process.env.QIRNAS_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ ...body, stream: true, stream_options: { include_usage: true } }), }); if (!res.ok) throw new Error((await res.json()).error.code); // failed before streaming const reader = res.body.pipeThrough(new TextDecoderStream()).getReader(); let buffer = ""; for (;;) { const { value, done } = await reader.read(); if (done) return; buffer += value; let end; while ((end = buffer.indexOf("\n\n")) >= 0) { const event = buffer.slice(0, end); buffer = buffer.slice(end + 2); if (event.startsWith(":")) continue; // ": keep-alive" while the model starts const data = event.slice("data: ".length); if (data === "[DONE]") return; const chunk = JSON.parse(data); if (chunk.error) throw new Error(`${chunk.error.code}: ${chunk.error.message}`); if (chunk.usage) console.log("\n", chunk.usage); process.stdout.write(chunk.choices[0]?.delta?.content ?? ""); } }}استدعاء الأدوات
النماذج التي تذكر tools ضمن capabilities في GET /v1/models تستطيع استدعاء دوالك.
- اعرض الدوال في
tools(واختيارياًtool_choice). - حين يستدعي النموذج دالة يكون
finish_reasonهوtool_calls، وتحملmessage.tool_callsاسم الدالة ومعاملاتها بصيغة JSON نصية. - نفّذ الدوال، ثم أضف رسالة المساعد ورسالة
role: "tool"لكل استدعاء (معtool_call_id)، واطلب من جديد.
في البث تصل الاستدعاءات أجزاءً في delta.tool_calls — اجمع الأجزاء التي تشترك في index.
// 1. Offer a tool{ "model": "qirnas", "messages": [{ "role": "user", "content": "كم درجة الحرارة في الرياض الآن؟" }], "tools": [{ "type": "function", "function": { "name": "get_weather", "description": "Current weather for a city", "parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] } } }]}// 2. The model calls it: finish_reason is "tool_calls""message": { "role": "assistant", "content": null, "tool_calls": [{ "id": "call_abc123", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"الرياض\"}" } }]}// 3. Run it, append both messages, and call again with the same tools"messages": [ { "role": "user", "content": "كم درجة الحرارة في الرياض الآن؟" }, { "role": "assistant", "content": null, "tool_calls": [/* as received */] }, { "role": "tool", "tool_call_id": "call_abc123", "content": "{\"temp_c\":41}" }]النماذج
النماذج التي يستطيع مفتاحك استدعاءها بالاسم الآن، بنافذة السياق وحدود المخرجات والقدرات والحالة.
/v1/modelsالقائمة لكل مفتاح على حدة: تسرد بالضبط النماذج التي يحق لهذا المفتاح استدعاؤها، مع خفض max_output_tokens وdefault_max_tokens إلى سقف مخرجات المفتاح إن كان له سقف. qirnas اسم مستعار دائم للنموذج الافتراضي، ويتصدّر القائمة بحقول ذلك النموذج حين يحق لمفتاحك استدعاؤه. أرسله في model، أو احذف model، ليجيب النموذج الافتراضي. يُحتسب هذا الطلب ضمن حد معدل حسابك.
المعرّفات غير المعروفة مُهمَلة. المعرّف الذي لا تعرفه البوابة ما زال يجيب عنه النموذج الافتراضي، لكن الرد يحمل ترويسة Deprecation ورابطاً إلى سجل التغييرات في ترويسة Link. أرسل qirnas أو معرّفاً من GET /v1/models: بعد 60 يوماً على الأقل من إشعار سجل التغييرات ستعود هذه المعرّفات بالخطأ 404 model_not_found، ويُعلن الموعد الدقيق في سجل التغييرات.
Deprecation: @1790467200Link: <https://developer.mindlabsa.com/changelog>; rel="deprecation"; type="text/html"curl https://api.mindlabsa.com/v1/models \ -H "Authorization: Bearer $QIRNAS_API_KEY"{ "object": "list", "data": [ { "id": "qirnas", "object": "model", "created": 1782982800, "owned_by": "mindlab", "provider": "mindlab", "self_hosted": true, "upstream_revision": null, "context_window": 16384, "max_output_tokens": 8192, "default_max_tokens": 3072, "capabilities": ["tools", "streaming"], "status": "on" }, // the default model under its own id, with the same fields { "id": "qirnas-v0", "object": "model", /* … */ "status": "on" } ]}| الحقل | النوع | الوصف |
|---|---|---|
id | string | المعرّف الذي ترسله في model. |
object | "model" | دائماً model. |
created | integer | وقت إضافة النموذج بثواني Unix (0 إن كان غير معروف). |
owned_by | string | مطابق لقيمة provider. |
provider | string | الجهة التي تشغّل النموذج؛ unknown إلى أن يُراجَع. |
self_hosted | boolean | القيمة true: أوزان نتحكم بها، يخدمها خادم نشغّله أو نستأجره. يكون النموذج نموذجنا فقط حين تكون هذه القيمة true وقيمة provider هي mindlab. ولا تدل على مكان معالجة البيانات. |
upstream_revision | string | null | القيمة null للنموذج المستضاف ذاتياً. وإلا فبصمة (64 حرفاً ست عشرياً) للجهة التي تُرسل إليها طلباته، تتغير حين يُوجَّه النموذج إلى جهة أخرى. |
context_window | integer | null | عدد الرموز التي يجب أن تتسع فيها الرسائل والرد معاً؛ null إن لم يُسجَّل. تجاوزه يعيد 400 context_length_exceeded. |
max_output_tokens | integer | أكبر max_tokens يُعطى للنموذج مع مفتاحك: سقف النموذج نفسه، مخفّضاً إلى سقف مخرجات مفتاحك إن كان له سقف. الطلب الأكبر يُخفَّض إليه. |
default_max_tokens | integer | قيمة max_tokens للطلب الذي لا يرسلها، ضمن سقف مخرجات مفتاحك كذلك. |
capabilities | string[] | ما يدعمه النموذج، مثل tools وstreaming. |
status | "on" | "offline" | offline: متوقف حالياً. الاستدعاء بهذا المعرّف يعيد 503 model_offline، وبالاسم qirnas (أو دون model) يعيد 503 no_model_available. |
صلاحيات المفتاح
ما يحق لكل مفتاح استدعاؤه. تضبطها المنصة لكل مفتاح على حدة؛ والمفتاح الذي يُنشأ من هذه البوابة لا يملك نطاقات ولا قائمة نماذج ولا سقف مخرجات.
| الصلاحية | ما تفعله | الرد عند الرفض |
|---|---|---|
| النطاقات | تفعّل معاملاً أو مساراً: reasoning وthink للمعاملين بالاسم نفسه (ولنموذج يعمل بوضع التفكير المعمّق)، وembeddings لـ POST /v1/embeddings، وsearch لـ POST /v1/search. | 403 scope_required |
| قائمة النماذج | المفتاح ذو القائمة يستدعي النماذج المدرجة فيها فقط، ولا تسرد له GET /v1/models غيرها. وإن لم تضم القائمة النموذج الافتراضي رُفض qirnas والطلب الذي لا يرسل model. | 403 model_not_permitted، وparam هو model |
| نماذج المزوّدين الخارجيين | النموذج الذي قيمة self_hosted فيه false يحتاج إذناً لذلك النموذج بعينه، ولا يُمنح أي إذن افتراضياً. | 403 model_not_permitted، وparam هو model |
| ظهور النماذج | النموذج الذي لا يحق لمفتاحك رؤيته (نموذج داخلي، أو نموذج خاص دون إذن) لا يُسرد، ويعود كأنه غير موجود. | 404 model_not_found |
| سقف المخرجات | يُعطى النموذج أصغر هذه القيم: max_tokens في طلبك (أو default_max_tokens للنموذج)، وmax_output_tokens للنموذج، وسقف المفتاح، و8192. وتعرض GET /v1/models القيمتين بعد التخفيض. | لا رفض: تُخفَّض القيمة |
| حد المعدل | كل مفاتيح حسابك في المستوى القياسي وتتشارك عدّاداً واحداً لكل مسار: 120 طلباً في أي 60 ثانية. | 429 rate_limit_exceeded مع Retry-After |
بالنسبة للنموذج: الرد 403 model_not_permitted يعني أن النموذج ظاهر لمفتاحك لكن المفتاح لا يملك الإذن به، أما 404 model_not_found فيعني أنه لا يحق لمفتاحك معرفته أصلاً. انظر رموز الأخطاء وحدود المعدل.
المتجهات
متجهات للبحث والتجميع وRAG، بصيغة المتجهات القياسية المتوافقة مع OpenAI.
/v1/embeddingsembeddings، وإلا يعود كل طلب 403 بالرمز scope_required أياً كانت نطاقات المفتاح الأخرى. المفاتيح التي تُنشأ من هذه البوابة تبدأ دون هذا النطاق.| المعامل | النوع | الوصف |
|---|---|---|
inputمطلوب | string | string[] · ≥ 1 item · ≤ 64 items · ≥ 1 chars | النص المراد تحويله: سلسلة واحدة، أو قائمة من 1 إلى 64 سلسلة، كل منها غير فارغة، وبحد أقصى 32,000 حرف للطلب كله. لا تُقبل قوائم الرموز. المدخل الأطول من 4096 رمزاً يُقتطع ولا يُرفض. ويسمّي param العنصر المرفوض (input.3). |
model | "bge-m3" | اختياري: النموذج الوحيد الذي يخدمه هذا المسار. أي قيمة أخرى تعود 400 invalid_request. |
encoding_format | "float" | "base64" · default "float" | القيمة float: كل متجه قائمة أعداد. والقيمة base64: ترميز base64 لأعداده العشرية بطول 32 بت وبترتيب little-endian (ما تطلبه مكتبات OpenAI وتفكّه). |
dimensions | 1024 | اختياري: البُعد الوحيد للنموذج. أي قيمة أخرى تعود 400. |
user | string · ≤ 256 chars | يُقبل للتوافق مع OpenAI ويُتجاهل: لا يُمرَّر ولا يُخزَّن. |
curl https://api.mindlabsa.com/v1/embeddings \ -H "Authorization: Bearer $QIRNAS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "input": ["مقهى هادئ في جدة", "a quiet café in Jeddah"] }'{ "object": "list", "data": [ { "object": "embedding", "index": 0, "embedding": [0.0213, -0.0087, /* … 1024 numbers */] }, { "object": "embedding", "index": 1, "embedding": [/* … */] } ], "model": "bge-m3", "usage": { "prompt_tokens": 14, "total_tokens": 14 }}- النموذج
bge-m3بـ 1024 بُعداً، وكل متجه مُطبَّع إلى طول الوحدة. يحمل الرد (200) متجهاً لكل مدخل بالترتيب نفسه، ويحتسبusage.prompt_tokensالرموز التي حُوّلت. - حتى 64 مدخلاً و32,000 حرف في الطلب، في جسم لا يتجاوز 256 كيلوبايت (وإلا 413
request_too_large). الحقول غير المدرجة تُتجاهل (فعملاء OpenAI يرسلون حقولاً إضافية)، أما الحقل المدرج بقيمة غير صالحة فيعود 400invalid_requestويسمّيهparam. - يستطيع حسابك إرسال 20 طلباً في الدقيقة هنا، فوق الحد العام (وإلا 429
rate_limit_exceeded). والسعة خلفه مشتركة بين كل المستخدمين: في لحظة الانشغال يعود 429capacity_exceededمعRetry-After، وحين لا تستطيع الخدمة قبول الطلبات يعود 503service_unavailable، معRetry-Afterحين تُعرف مدة الانتظار. - الرد 502 أو 504 يحمل
x-should-retry: false: فقد استُهلك العمل، فأعد إرسال الطلب لاحقاً، أو أصغر، لا فوراً.
البحث
نتائج بحث الويب: عنوان ورابط ومقتطف لكل نتيجة، ولا شيء غيرها.
/v1/searchsearch، وإلا يعود كل طلب 403 بالرمز scope_required أياً كانت نطاقات المفتاح الأخرى. المفاتيح التي تُنشأ من هذه البوابة تبدأ دون هذا النطاق.| المعامل | النوع | الوصف |
|---|---|---|
queryمطلوب | string · 1–512 chars | ما تبحث عنه: من 1 إلى 512 حرفاً بعد حذف المسافات الطرفية، دون محارف تحكّم. الكلمة التي تبدأ بـ ! أو : أو < (أوامر محرك البحث) تعود 400؛ ضعها بين علامتي تنصيص ("!x") لتبحث عنها. |
limit | integer · default 5 · 1–10 | أكبر عدد من النتائج يُعاد؛ ويعود أقل حين يكون لدى المصادر أقل. |
safesearch | "moderate" | "strict" · default "moderate" | مدى صرامة تصفية المحتوى غير اللائق. لا يمكن إيقافها. |
language | string | لغة النتائج: رمز من حرفين، مع المنطقة اختيارياً (ar أو en أو ar-SA). إن حُذف: اللغة الافتراضية لخدمة البحث. |
curl https://api.mindlabsa.com/v1/search \ -H "Authorization: Bearer $QIRNAS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "query": "رؤية السعودية 2030", "limit": 3, "language": "ar" }'{ "object": "list", "data": [ { "title": "…", "url": "https://…", "snippet": "…" } ]}- لكل نتيجة
titleوurl(دائماً http أو https) وsnippet(قد يكون فارغاً)، الأفضل أولاً: حتىlimitنتيجة، وقائمةdataفارغة إن لم يُعثر على شيء. النتائج نصوص من أطراف خارجية: تعامل معها كبيانات غير موثوقة. - الجسم صارم: أي حقل غير
queryوlimitوsafesearchوlanguageيعود 400invalid_requestويُسمّى. والجسم 100 كيلوبايت على الأكثر. - الطلب نفسه من حسابك خلال 5 دقائق قد يُجاب من ذاكرة مؤقتة.
- يستطيع حسابك إرسال 10 طلبات في الدقيقة هنا، فوق الحد العام (وإلا 429
rate_limit_exceeded). والسعة مشتركة بين كل المستخدمين: في لحظة الانشغال يعود 429capacity_exceededمعRetry-After، وحين ترفض مصادر البحث الطلبات يعود المسار 503service_unavailableمعRetry-After(وx-should-retry: falseحين يزيد الانتظار على دقيقة).
معرّفات الطلبات
كل رد يحمل ترويسة x-request-id، بما فيها الأخطاء والبث.
- أرسل معرّفك في
x-request-idلتتطابق سجلاتك مع سجلاتنا: من 1 إلى 128 حرفاً منA-Z a-z 0-9 . _ : -(النمط^[A-Za-z0-9._:-]{1,128}$). أي قيمة أخرى تُستبدل بمعرّف مولَّد. - يكرّره غلاف الخطأ وحدث الخطأ أثناء البث في الحقل
request_id. - أرفقه عند التواصل مع الدعم لنتتبّع الطلب في سجلاتنا.
curl -si https://api.mindlabsa.com/v1/models \ -H "Authorization: Bearer $QIRNAS_API_KEY" \ -H "x-request-id: checkout-7f3a" | grep -i x-request-id# x-request-id: checkout-7f3aترويسات الرد
كل ترويسة يعد بها عقد الواجهة والردود التي تحملها، ولا شيء غيرها.
| الترويسة | متى تُرسل | الوصف |
|---|---|---|
x-request-id | كل رد، بما فيه الأخطاء والبث.POST /v1/chat/completions · 201 400 401 403 404 413 429 500 502 503 504GET /v1/models · 200 401 429 500POST /v1/embeddings · 200 400 401 403 413 429 500 502 503 504POST /v1/search · 200 400 401 403 413 429 500 502 503 504 | معرّف هذا الطلب: معرّفك إن أرسلت معرّفاً صالحاً، وإلا فمعرّف مولَّد. أرفقه عند التواصل مع الدعم. |
Retry-After | الرد 429 بالرمز rate_limit_exceeded أو capacity_exceeded، والرد 503 service_unavailable من POST /v1/embeddings أو POST /v1/search (وقد يأتي ذلك الرد دونها). لا يُرسل مع upstream_rate_limited.POST /v1/chat/completions · 429GET /v1/models · 429POST /v1/embeddings · 429 503POST /v1/search · 429 503 | عدد الثواني (عدد صحيح، 1 على الأقل) قبل أن تعيد المحاولة: حتى يسمح الحد الذي رفض الطلب بطلب آخر (حد حسابك على المسار، أو حصة حسابك من المتجهات أو البحث)، أو حتى تتسع السعة المشتركة. |
Deprecation | طلب إكمال محادثة يسمّي في model معرّفاً لا تعرفه البوابة (الاسم qirnas معروف)، والأخطاء التي يتلقاها بعد التحقق من مفتاحه وحقوله. لا تحملها ردود 401 و413 و429 rate_limit_exceeded، ولا رد 400 لحقل فشل في التحقق.POST /v1/chat/completions · 201 400 403 429 500 502 503 504 | هذا الاستخدام مُهمَل (RFC 9745). القيمة تاريخ الإهمال: @1790467200، أي 27 سبتمبر 2026. يجيب النموذج الافتراضي كالمعتاد؛ أرسل qirnas أو معرّفاً من GET /v1/models. |
Link | مع Deprecation.POST /v1/chat/completions · 201 400 403 429 500 502 503 504 | رابط سجل التغييرات، حيث يُعلن موعد توقف المعرّفات غير المعروفة قبل 60 يوماً على الأقل. |
x-should-retry | الرد 502 أو 504 من POST /v1/embeddings، والرد 503 service_unavailable من POST /v1/search حين يزيد الانتظار على دقيقة.POST /v1/embeddings · 502 504POST /v1/search · 503 | القيمة دائماً false: لا تُعد هذا الطلب فوراً (فقد استُهلك العمل وراءه، أو أن الانتظار طويل)، ومكتبات OpenAI تحترمها. أعد إرساله لاحقاً، أو أصغر. |