Перейти к основному содержимому

API Responses

/ Документация API

← Быстрый старт с APIОткрыть как Markdown

POST https://api.opencheese.dev/v1/responses — это OpenAI Responses API. Его использует Codex, а также методы responses в SDK OpenAI.

Первый запрос

bash
curl https://api.opencheese.dev/v1/responses \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "MODEL_ID", "instructions": "Answer in one sentence.", "input": "What is a gateway?"}'

Поле model обязательно; input — это строка или список входных элементов, а instructions становится системным промптом. Текст ответа находится в элементах output[].content[] с типом output_text:

json
{
  "id": "resp_abc123",
  "object": "response",
  "status": "completed",
  "model": "MODEL_ID",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [{ "type": "output_text", "text": "A gateway passes your requests on to the models behind it." }]
    }
  ],
  "usage": { "input_tokens": 24, "output_tokens": 13, "total_tokens": 37 }
}

Параметры

Поле Примечания
model Обязательное. Значение id из /v1/models.
input Строка или элементы message, function_call и function_call_output.
instructions Системный промпт.
stream true, чтобы получить ответ в виде server-sent events.
tools, tool_choice Инструменты-функции, если модель поддерживает инструменты.
reasoning.effort Один из уровней в supported_reasoning_levels модели.
temperature, top_p, max_output_tokens Необязательные. Если их не задать, используются значения модели по умолчанию.

Разговор отправляется целиком

Каждый запрос передаёт в input весь разговор: прежние реплики отправляйте заново как элементы message (реплики ассистента — с role: "assistant"). previous_response_id, store и text.format здесь не поддерживаются; для структурированного вывода используйте Chat Completions с response_format.

json
{
  "model": "MODEL_ID",
  "input": [
    { "type": "message", "role": "user", "content": "Name three cheeses." },
    { "type": "message", "role": "assistant", "content": "Brie, Gouda and Comté." },
    { "type": "message", "role": "user", "content": "Which one melts best?" }
  ]
}

Потоковый ответ

bash
curl -N https://api.opencheese.dev/v1/responses \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "MODEL_ID", "stream": true, "input": "Count to three."}'

Поток передаёт события Responses API: response.created и response.in_progress, затем response.output_item.added, response.output_text.delta с текстом, соответствующие события .done и в конце response.completed с полным ответом и его usage. Если запрос завершается ошибкой уже после начала потока, поток заканчивается событием response.failed, в котором response.error содержит code и message.

text
event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"One, two"}

event: response.completed
data: {"type":"response.completed","response":{"status":"completed","usage":{"input_tokens":12,"output_tokens":6,"total_tokens":18}}}

Инструменты

json
{
  "model": "MODEL_ID",
  "input": "What is the weather in Paris?",
  "tools": [
    {
      "type": "function",
      "name": "get_weather",
      "description": "Current weather for a city",
      "parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] }
    }
  ]
}

Вызов инструмента приходит как выходной элемент function_call с полями call_id, name и arguments. Результат отправьте в следующем запросе как элемент function_call_output с тем же call_id, после самого элемента function_call.

Уровень рассуждений

bash
curl https://api.opencheese.dev/v1/responses \
  -H "Authorization: Bearer $OPENCHEESE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "MODEL_ID", "reasoning": {"effort": "high"}, "input": "Plan a three-day trip to Lyon."}'

Если уровень не задан, используется уровень модели по умолчанию. Уровень, которого у модели нет, отклоняется с ошибкой unsupported_reasoning_effort, где перечислены уровни, которые модель поддерживает. Краткие сводки рассуждений, если модель их возвращает, приходят как выходные элементы reasoning.

Расход токенов

usage сообщает input_tokens (с input_tokens_details.cached_tokens), output_tokens (с output_tokens_details.reasoning_tokens) и total_tokens.

Python

python
from openai import OpenAI

client = OpenAI(base_url="https://api.opencheese.dev/v1", api_key="YOUR_OPENCHEESE_API_KEY")
response = client.responses.create(model="MODEL_ID", input="Write a haiku about cheese.")
print(response.output_text)

Ошибки этого эндпоинта всегда приходят как HTTP-статус с телом в JSON и никогда — как ответ ассистента, в отличие от Chat Completions; если поток уже начался, приходит response.failed. Подробнее — на странице Ошибки и лимиты запросов. Добавьте заголовок opencheese-session-uuid, чтобы объединить запросы одного разговора.

В сыре есть дырки. В вашей инфраструктуре их быть не должно.