API Responses
API Responses هي الصيغة الأحدث من OpenAI، المتوقَعة افتراضيًا من طرف بعض الأدوات؛ خصوصًا Codex CLI. تعرضها CloudZIR : نفس النماذج، نفس الأسعار، نفس الحدود مثل Chat Completions.
نقطة النهاية#
POST https://api.cloudzir.com/v1/responses
from openai import OpenAI
client = OpenAI(api_key="zir_ai_...", base_url="https://api.cloudzir.com/v1")
reponse = client.responses.create(
model="mina-low",
instructions="Tu es un assistant concis, en français.",
input="Explique le DNS en trois phrases.",
max_output_tokens=300,
)
print(reponse.output_text)curl https://api.cloudzir.com/v1/responses \
-H "Authorization: Bearer $CLOUDZIR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "mina-low",
"instructions": "Tu es un assistant concis, en français.",
"input": "Explique le DNS en trois phrases.",
"max_output_tokens": 300
}'الاستجابة#
{
"id": "resp_4334a6f158894999",
"object": "response",
"created_at": 1766400000,
"status": "completed",
"model": "mina-low",
"output": [{
"type": "message",
"id": "msg_4334a6f158894999",
"status": "completed",
"role": "assistant",
"content": [{"type": "output_text", "text": "Le DNS traduit…", "annotations": []}]
}],
"output_text": "Le DNS traduit…",
"incomplete_details": null,
"usage": {
"input_tokens": 28, "output_tokens": 96, "total_tokens": 124,
"input_tokens_details": {"cached_tokens": 0},
"output_tokens_details": {"reasoning_tokens": 0}
}
}
الحقول المدعومة#
| الحقل | الوصف |
|---|---|
model إلزامي | mina-flash، mina-low، mina-full. |
input إلزامي | سلسلة نصية، أو قائمة رسائل بأجزاء input_text / input_image. |
instructions | مكافئ لرسالة نظام. |
max_cost_micro_dzd | سقف إنفاق بالميكرو دينار جزائري، متاح فقط مع mina-auto. يفشل الطلب إذا تجاوزه. |
max_output_tokens | محدود بسقف النموذج. |
temperature، top_p، user | كما في Chat Completions. |
reasoning.effort | minimal / low / medium / high، أو none لإيقاف التفكير؛ وضع التفكير. |
text.format | {"type": "json_object"}؛ إخراج JSON. |
tools، tool_choice | دوالكم الخاصة (صيغة مسطّحة من Responses أو صيغة متداخلة). |
stream | أحداث response.output_text.delta، ثم response.completed. |
ما هو مرفوض (ولماذا)#
يُرفَض previous_response_id وstore: true بالرمز
400 صراحةً. لا تحتفظ CloudZIR باستجاباتكم : قبولهما بصمت
كان سينتج نموذجًا فاقدًا للذاكرة؛ سيجيب دون السياق الذي تظنون أنكم أرسلتموه.
أعيدوا إرسال التاريخ الكامل في input، كما في
Chat Completions.
الأدوات المدمجة (web_search، code_interpreter،
file_search) غير متاحة : عرّفوا دوالكم الخاصة
(استدعاء الأدوات). تُرفَض صراحةً بدل
تجاهلها.
في input تُعالَج العناصر message وfunction_call
وfunction_call_output. أما العنصر reasoning (الذي قد تتضمنه الاستجابة في
output، وتعيد أداة بلا حالة مثل Codex إرساله في الدور التالي) فيُقبَل ثم يُهمَل : فهو
يصف استدلال دورٍ سابق ولا يُمرَّر إلى النموذج. ويُرفَض العنصر من أي نوع آخر بالرمز
400 ويكون معامله input[i].type.
الصور#
reponse = client.responses.create(
model="mina-low",
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": "Que montre cette image ?"},
{"type": "input_image", "image_url": f"data:image/png;base64,{image}"},
],
}],
)
نفس القواعد كما في Chat Completions : انظروا الرؤية.
البث المباشر#
event: response.created
data: {"type":"response.created","response":{"id":"resp_…","status":"in_progress",…}}
event: response.output_text.delta
data: {"type":"response.output_text.delta","delta":"Le ","output_index":0,…}
event: response.output_text.done
data: {"type":"response.output_text.done","text":"Le DNS traduit…",…}
event: response.completed
data: {"type":"response.completed","response":{…,"status":"completed","usage":{…}}}
المقابلة مع Chat Completions#
| Responses | Chat Completions |
|---|---|
input | messages |
instructions | رسالة system |
max_output_tokens | max_tokens |
output_text | choices[0].message.content |
usage.input_tokens | usage.prompt_tokens |
status: "incomplete" | finish_reason: "length" |
تؤدي الواجهتان إلى نفس المحرك، بنفس السعر. اختاروا Responses إن كانت أداتكم تتوقعها (Codex)، وإلا يبقى Chat Completions الصيغة الأوسع دعمًا.