# API моделей

> Список моделей вашего API-ключа OpenCheese через GET /v1/models: все поля с пояснениями, от модальностей и уровней рассуждений до лимитов контекста и вывода.
>
> Веб-страница: https://opencheese.dev/ru/docs/models/ · Все страницы документации: https://opencheese.dev/ru/docs.md

`GET https://api.opencheese.dev/v1/models` возвращает модели, которые ваш API-ключ может
использовать прямо сейчас, в формате списка OpenAI. Состав списка зависит от вашего тарифа,
ограничений ключа по моделям и моделей, которые вы отключили на странице **Цены**, поэтому берите
ID моделей из него, а не копируйте из примеров.

## Запрос

```bash
curl https://api.opencheese.dev/v1/models \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY"
```

`x-api-key` тоже подходит. На недействительный ключ приходит `401` с ошибкой в JSON.

## Ответ

Текстовая модель (значения приведены для примера):

```json
{
  "object": "list",
  "data": [
    {
      "id": "MODEL_ID",
      "object": "model",
      "created": 0,
      "owned_by": "opencheese",
      "displayName": "Example Model",
      "name": "Example Model",
      "capabilities": { "streaming": true, "tools": true },
      "pricing": { "inputRate": 0.5, "outputRate": 2, "cacheReadRate": 0.05, "cacheWriteRate": 0.6 },
      "modalities": { "input": ["text", "image"], "output": ["text"] },
      "reasoning": true,
      "reasoningEfforts": { "max": "max", "medium": "medium", "low": "low" },
      "supported_reasoning_levels": ["max", "medium", "low"],
      "efforts": ["max", "medium", "low"],
      "default_reasoning_level": "max",
      "context_window": 1000000,
      "contextWindow": 1000000,
      "max_output_tokens": 131000,
      "maxTokens": 131000,
      "maxOutputTokens": 131000
    }
  ]
}
```

## Поля

| Поле | Значение |
| --- | --- |
| `id` | ID, который передаётся в `model`. |
| `displayName`, `name` | Название модели в том виде, в каком его показывает панель. |
| `capabilities` | Поддерживает ли модель потоковые ответы и вызовы инструментов. |
| `pricing` | Ваши ставки в кредитах (USD) за миллион токенов: вход, выход, чтение кешированного входа и запись в кеш. У бесплатных моделей здесь нули. |
| `modalities` | Что модель принимает (`input`) и что выдаёт (`output`): `text`, `image`, `video`, `audio`, `pdf`. |
| `supported_reasoning_levels` | Уровни рассуждений, которые можно передавать, начиная с самого сильного. `efforts` и ключи `reasoningEfforts` повторяют их для клиентов, которые читают поля с такими именами. |
| `default_reasoning_level` | Первый, самый сильный уровень из этого списка. |
| `context_window` | Наибольшее число токенов, которое модель читает за один запрос, включая промпт. `contextWindow` содержит то же число. |
| `max_output_tokens` | Максимальная длина ответа модели. `maxTokens` и `maxOutputTokens` содержат то же число. |

Поле отсутствует, если к модели оно не относится: у модели без выбора уровня нет полей уровней, а
у модели без известного лимита нет полей лимитов. Передавайте уровень рассуждений только со
значением из `supported_reasoning_levels`; куда его передавать, показано на страницах
[Chat Completions](https://opencheese.dev/ru/docs/chat-completions.md), [Responses](https://opencheese.dev/ru/docs/responses.md) и
[Messages](https://opencheese.dev/ru/docs/messages.md).

## Модели изображений

Модели, у которых `modalities.output` равно `["image"]`, генерируют изображения. У них есть только
базовые поля из таблицы выше, а их параметры (размеры, соотношения сторон, качество, сколько
изображений может вернуть один запрос) возвращает `GET /v1/images/capabilities` — он описан на
странице [API изображений](https://opencheese.dev/ru/docs/images.md).

## Фильтрация списка

Все текстовые модели с помощью `jq`:

```bash
curl -s https://api.opencheese.dev/v1/models \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" \
  | jq -r '.data[] | select(.modalities.output | index("text")) | .id'
```

Бесплатные модели:

```bash
curl -s https://api.opencheese.dev/v1/models \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" \
  | jq -r '.data[] | select(.pricing.inputRate == 0 and .pricing.outputRate == 0) | .id'
```

Бесплатным моделям всё равно нужен небольшой минимальный баланс на аккаунте; подробнее в
[FAQ](https://opencheese.dev/ru/faq/#free-models).

## Через SDK

```python
from openai import OpenAI

client = OpenAI(base_url="https://api.opencheese.dev/v1", api_key="YOUR_OPENCHEESE_API_KEY")
for model in client.models.list():
    print(model.id)
```

Отдельного `GET /v1/models/{id}` нет: берите модель из списка.
