Create a chat completion

درخواستی برای دریافت پاسخ مدل به گفتگوی داده‌شده می‌فرستد؛ هم حالت استریم و هم غیراستریم پشتیبانی می‌شود.

این نقطهٔ پایانی منتظر یک پاسخ مدل برای گفتگوی مشخصی است که در messages داده می‌شود و از هر دو حالت استریم و غیراستریم پشتیبانی می‌کند. پاسخ طبق فرمت chat.completion OpenAI برمی‌گردد تا SDKها و کدهای موجود بدون تغییر کار کنند — فقط کافیست Base URL و کلید API آشا را تنظیم کنید.

Endpoint

POST /chat/completions
https://app.asha-ai.ir/v1/chat/completions

احراز هویت

همهٔ درخواست‌ها به کلید API آشا نیاز دارند که از طریق هدر Authorization: Bearer <ASHA_API_KEY> ارسال می‌شود. کلید را از داشبورد آشا دریافت کنید.

مثال درخواست

پاسخی سادهٔ غیراستریم برای یک گفتگوی کوتاه:

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://app.asha-ai.ir/v1',
  apiKey: '<ASHA_API_KEY>',
});

const result = await client.chat.completions.create({
  model: 'openai/gpt-4',
  messages: [
    { role: 'system', content: 'You are a helpful assistant.' },
    { role: 'user', content: 'What is the capital of France?' },
  ],
  temperature: 0.7,
  max_tokens: 150,
});

console.log(result.choices[0].message.content);
import requests

response = requests.post(
    'https://app.asha-ai.ir/v1/chat/completions',
    headers={
        'Authorization': 'Bearer <ASHA_API_KEY>',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'openai/gpt-4',
        'messages': [
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            {'role': 'user', 'content': 'What is the capital of France?'},
        ],
        'temperature': 0.7,
        'max_tokens': 150,
    }
)

result = response.json()
print(result['choices'][0]['message']['content'])
curl -X POST https://app.asha-ai.ir/v1/chat/completions 
  -H "Authorization: Bearer $ASHA_API_KEY" 
  -H "Content-Type: application/json" 
  -d '{
    "model": "openai/gpt-4",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "What is the capital of France?"}
    ],
    "temperature": 0.7,
    "max_tokens": 150
  }'

پارامترهای بدنهٔ درخواست

پارامترهای کلیدی بدنهٔ JSON درخواست:

پارامترنوعتوضیح
modelstringالزامی. مدل مورد استفاده برای تکمیل گفتگو.
messagesarrayالزامی. فهرست پیام‌های گفتگو؛ دست‌کم یک پیام باید داشته باشد.
temperaturenumberدمای نمونه‌گیری (۰ تا ۲). مقدار پیش‌فرض معمول ۱ است.
top_pnumberنمونه‌گیری هسته‌ای (۰ تا ۱).
max_tokensintegerحداکثر توکن‌های تکمیل. برخی از ارائه‌دهندگان حداقل ۱۶ را اعمال می‌کنند.
max_completion_tokensintegerجایگزین مدرن‌تر max_tokens برای مدل‌های جدید.
streambooleanدر صورت true پاسخ به‌صورت رویدادهای SSE برگردانده می‌شود. پیش‌فرض false.
stopstring | arrayتوالی‌های توقف (تا ۴ مورد).
presence_penaltynumberجریمهٔ حضور (−۲ تا ۲).
frequency_penaltynumberجریمهٔ تکرار (−۲ تا ۲).
seedintegerدانهٔ تصادفی برای خروجی قطعی‌تر.
response_formatobjectقالب خروجی؛ مثلاً json_object یا json_schema.
toolsarrayابزارهای تعریف‌شده برای فراخوانی تابع.
tool_choicestring | objectکنترل انتخاب ابزار؛ auto، none، required یا ابزار نام‌دار.
userstringشناسهٔ پایدار کاربر نهایی برای ایزوله‌سازی سوءاستفاده.

پیام‌های گفتگو

نقش‌های پشتیبانی‌شده در آرایهٔ messages:

نقشتوضیح
systemرفتار کلی دستیار را تعیین می‌کند.
userپیام کاربر نهایی.
assistantپاسخ قبلی مدل؛ برای گفتگوهای چندمرحله‌ای.
toolنتیجهٔ اجرای یک فراخوانی ابزار.
developerمعادل system برای مدل‌های جدیدتر.

پاسخ

در صورت موفقیت، پاسخ با کد 200 و ساختار زیر برمی‌گردد (نمونه با مدل openai/gpt-4):

JSON chat.completion
{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "openai/gpt-4",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The capital of France is Paris."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 10,
    "total_tokens": 35
  }
}

مفهوم فیلدها

فیلدتوضیح
idشناسهٔ یکتای تکمیل.
choicesفهرست انتخاب‌های خروجی؛ معمولاً یک انتخاب.
choices[].messageپیام تولیدشده توسط مدل.
choices[].finish_reasonدلیل پایان؛ stop، length، tool_calls و…
usageآمار مصرف توکن برای صورت‌حساب.

استریم

با تنظیم stream: true، پاسخ به‌صورت رویدادهای text/event-stream (SSE) ارسال می‌شود؛ هر رویداد یک قطعهٔ chat.completion.chunk است:

SSE chat.completion.chunk
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-4","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-4","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-4","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

خطاها

خطاها با ساختار زیر برمی‌گردند:

JSON error response
{
  "error": {
    "code": 400,
    "message": "Invalid request parameters"
  }
}
کدتوضیح
400پارامترهای درخواست نامعتبر یا ورودی ناقص.
401هدر احراز هویت وجود ندارد یا کلید نامعتبر است.
402اعتبار کافی نیست.
429محدودیت نرخ رد شده است.
500خطای داخلی سرور.
502ارائه‌دهنده خطای بالادستی برگرداند.