Submit an embedding request

درخواستی برای تولید بردارهای جاسازی (embedding) از متن ارسال می‌کند؛ به‌صورت کاملاً سازگار با فرمت OpenAI.

نقطهٔ پایانی /embeddings ورودی متنیِ شما را به یک بردار عددی (آرایه‌ای از اعداد اعشاری) تبدیل می‌کند؛ بردارهایی که فاصله و جهت نزدیک‌بودنشان بازنماییِ معناییِ متن است. خروجی مطابق فرمت list استاندارد OpenAI برمی‌گردد تا SDKها و کدهای موجود بدون تغییر کار کنند — فقط کافیست Base URL و کلید API آشا را تنظیم کنید.

ورودی می‌تواند یک رشته یا آرایه‌ای از رشته‌ها (برای پردازش دسته‌ای) باشد. جاسازی‌ها از استریم پشتیبانی نمی‌کنند.

Endpoint

POST /embeddings
https://app.asha-ai.ir/v1/embeddings

احراز هویت

با کلید API آشا از طریق هدر Authorization: Bearer <ASHA_API_KEY> احراز هویت کنید و هدر Content-Type: application/json را بفرستید.

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

به‌جز input و model که الزامی‌اند، بقیهٔ موارد اختیاری هستند:

پارامترنوعالزامیتوضیح
model string بله شناسهٔ مدل جاسازی؛ مثلاً openai/text-embedding-3-small.
input string | string[] | number[] | number[][] | object[] بله متن ورودی برای جاسازی؛ یک رشته یا آرایه‌ای از رشته‌ها، توکن‌ها، یا محتوای چندوجهی.
dimensions integer خیر تعداد ابعاد بردار خروجی (حداقل ۱)؛ فقط در مدل‌هایی که از پارامتر پشتیبانی می‌کنند.
encoding_format enum خیر فرمت بردار خروجی: float (پیش‌فرض) یا base64.
input_type string خیر نوع ورودی برای مدل‌هایی که به آن نیاز دارند؛ مانند search_query یا search_document.
user string خیر شناسهٔ یکتایی برای کاربر پایانی (پایانه)؛ مثلاً آیدی جلسه.

مثال درخواست

curl https://app.asha-ai.ir/v1/embeddings 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer $ASHA_API_KEY" 
  -d '{
    "model": "openai/text-embedding-3-small",
    "input": "The quick brown fox jumps over the lazy dog",
    "dimensions": 1536
  }'
import requests

response = requests.post(
    'https://app.asha-ai.ir/v1/embeddings',
    headers={
        'Authorization': 'Bearer <ASHA_API_KEY>',
        'Content-Type': 'application/json',
    },
    json={
        'model': 'openai/text-embedding-3-small',
        'input': [
            'ماشین‌لرنینگ زیرمجموعه‌ای از هوش مصنوعی است',
            'یادگیری عمیق از شبکه‌های عصبی چندلایه استفاده می‌کند',
        ],
    },
)

data = response.json()
for item in data['data']:
    print(f"index={item['index']} dims={len(item['embedding'])}")
const response = await fetch('https://app.asha-ai.ir/v1/embeddings', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer <ASHA_API_KEY>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'openai/text-embedding-3-small',
    input: 'The quick brown fox jumps over the lazy dog',
  }),
});

const data = await response.json();
console.log(data.data.map((d) => d.embedding.length));

پاسخ موفق

در صورت موفقیت، پاسخ با کد 200 برمی‌گردد:

JSON 200 OK
{
  "object": "list",
  "id": "embd-1234567890",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [0.0023064255, -0.009327292, 0.015797347]
    }
  ],
  "model": "openai/text-embedding-3-small",
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 8,
    "cost": 0.0001
  }
}

فیلدهای پاسخ

فیلدتوضیح
objectهمیشه list برای پاسخ جاسازی.
idشناسهٔ یکتای پاسخ جاسازی.
dataآرایه‌ای از اشیای جاسازی؛ هر کدام دارای object، index و embedding.
modelمدلی که برای تولید بردارها استفاده شد.
usage.prompt_tokensتعداد توکن‌های ورودی.
usage.total_tokensمجموع توکن‌های مصرف‌شده (در جاسازی برابر prompt_tokens است).
usage.costهزینهٔ درخواست به دلار (credit).

خطاها

این نقطهٔ پایانی مجموعهٔ مشترکی از وضعیت‌های خطا را برمی‌گرداند:

کدتوضیح
400پارامترهای درخواست نامعتبر یا ورودی ناقص؛ مثلاً input یا model خالی.
401هدر احراز هویت وجود ندارد یا کلید نامعتبر است.
402موجودی (credit) حساب کافی نیست یا سهمیه تمام شده است.
404مدل پیدا نشد یا منبع وجود ندارد.
429محدودیت نرخ رد شده است.
500خطای داخلی سرور.
502ارائه‌دهندهٔ بالا‌دستی خطا برگرداند.
503سرویس به‌طور موقت در دسترس نیست.
524درخواست در شبکهٔ لبه زمان‌بندی شد (تایم‌اوت).
529ارائه‌دهنده به‌طور موقت در فشار است.

جاسازی‌ها استریم نمی‌شوند؛ پاسخ همیشه یکجا با کد ۲۰۰ می‌آید.