# Embeddings

`POST /v1/embeddings`

Векторы для поиска и RAG. Запрос и ответ как в OpenAI. Принимаем только поля из списка: другое поле, в том числе `stream`, даёт 400 с его именем в param, стриминга нет. Платите только за вход: в `usage` ответа `prompt_tokens` и `total_tokens`, цена в `pricing.input` модели.

- `model` (string, обязательно) — Модель с kind embedding, например `openai/text-embedding-3-small`. Модель с kind chat даёт 404 `model_not_found`
- `input` (string | array, обязательно) — Строка, непустой массив строк, массив токенов или массив массивов токенов. Пустой массив или пустая строка дают 400. Токены понимают только модели OpenAI, другие отвечают 400 или 422
- `encoding_format` (string) — `float` (по умолчанию) или `base64`: вектор строкой base64 из float32. SDK OpenAI сами просят base64 и раскодируют
- `dimensions` (integer) — Длина вектора короче полной, например 256. Не у всех моделей: text-embedding-3-small и -large его укорачивают, text-embedding-ada-002 и Mistral отвечают 400 или 422, а sentence-transformers/all-minilm-l6-v2 молча отдаёт полный вектор. Сверяйте длину в ответе
- `user` (string) — Идентификатор вашего пользователя, передаём модели как есть

**Пример запроса**

curl:

```bash
curl https://api.polyapi.ru/v1/embeddings \
  -H "Authorization: Bearer $POLYAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/text-embedding-3-small",
    "input": ["первый текст", "второй текст"]
  }'
```

Python:

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["POLYAPI_KEY"],
    base_url="https://api.polyapi.ru/v1",
)

r = client.embeddings.create(
    model="openai/text-embedding-3-small",
    input=["первый текст", "второй текст"],
)
print(len(r.data[0].embedding))
```

Node.js:

```js
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.POLYAPI_KEY,
  baseURL: "https://api.polyapi.ru/v1",
});

const r = await client.embeddings.create({
  model: "openai/text-embedding-3-small",
  input: ["первый текст", "второй текст"],
});
console.log(r.data[0].embedding.length);
```

**Ответ (вектор укорочен)**

```json
{
  "object": "list",
  "model": "openai/text-embedding-3-small",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [
        -0.0121,
        0.0347,
        -0.0089
      ]
    },
    {
      "object": "embedding",
      "index": 1,
      "embedding": [
        0.0215,
        -0.0042,
        0.0163
      ]
    }
  ],
  "usage": {
    "prompt_tokens": 6,
    "total_tokens": 6
  }
}
```

**Ответ.** Векторы в `data` по одному на элемент input, `index` его номер.

Источник: https://polyapi.ru/docs/embeddings
