6ioAPI

Фоновые задания

POST /v1/jobs запускает операцию в фоне. Вы сразу получаете ответ 202 и номер задания, потом сами спрашиваете состояние и забираете готовый результат. Это удобно, когда запрос долгий или соединение не хочется держать открытым.

Сейчас доступна одна операция — chat.completions (чат моделей групп op и vn). Картинки и видео через fal и sixio и так работают заданиями: см. модели fal и модели Sixio.

Пример целиком

import time
import requests

API = "https://api.6io.io/v1"
H = {"Authorization": "Bearer sixio_sk_..."}

job = requests.post(f"{API}/jobs", headers=H, json={
    "model": "op/openai/gpt-4o-mini",
    "operation": "chat.completions",
    "input": {"messages": [{"role": "user", "content": "Привет!"}], "max_tokens": 200},
}).json()

while True:
    state = requests.get(job["status_url"], headers=H).json()
    if state["status"] != "running":
        break
    time.sleep(2)

if state["status"] == "succeeded":
    result = requests.get(job["result_url"], headers=H).json()
    print(result["choices"][0]["message"]["content"])
else:
    print(state["status"], state.get("error"))

Создать задание

input — тело обычного запроса чата без поля model (модель указывается рядом с operation). Потоковый режим (stream) в заданиях не поддерживается: для него используйте POST /v1/chat/completions. Платные инструменты и нетекстовый ввод отвергаются так же, как в обычном чате. Заголовок Idempotency-Key работает как везде. Чтобы не опрашивать состояние, добавьте webhook_url: когда задание закончится, мы отправим уведомление на этот адрес (вебхуки).

Ответ 202, заголовок Location ведёт на состояние:

{
  "id": "req_8fK2xQ1mZpVwT9sJdL4nAg",
  "object": "job",
  "operation": "chat.completions",
  "model": "op/openai/gpt-4o-mini",
  "status": "running",
  "status_url": "https://api.6io.io/v1/jobs/req_8fK2xQ1mZpVwT9sJdL4nAg",
  "result_url": "https://api.6io.io/v1/jobs/req_8fK2xQ1mZpVwT9sJdL4nAg/result"
}

Номер задания совпадает с X-Sixio-Request-Id, поэтому деньги по нему видны и в GET /v1/requests/{id}. Если свободных мест нет, ответ приходит сразу (429): задание не ждёт в очереди. Пока сервис перезапускается, новые задания получают 503 с Retry-After.

Состояние

GET /v1/jobs/{id} возвращает status:

status Что значит
running задание идёт
succeeded готово, результат можно забрать
failed не выполнено, причина в поле error, деньги не списаны
unknown поставщик не подтвердил исход (обрыв, перегрузка): результата нет, деньги проверяются и закрываются позже

В поле billing указаны состояние денег и списанная сумма в кредитах.

Результат

GET /v1/jobs/{id}/result возвращает обычный ответ чата. Чтение ничего не запускает и ничего не списывает.

  • Пока задание идёт, ответ 202 со ссылкой на состояние и Retry-After.
  • Результат хранится ограниченное время (по умолчанию сутки). Заберите его за это время: потом 410 result_expired.
  • Для failed и unknown ответ 409 с кодом job_failed или job_outcome_unknown.
  • Бывает, что исход был неизвестен, а проверка показала: поставщик работу выполнил. Задание станет succeeded и будет оплачено, но ответа у нас нет: 409 result_unavailable.
  • Ответ больше 4 МБ тоже оплачен, но не сохраняется: 409 result_too_large. Такие запросы отправляйте обычным POST /v1/chat/completions.
  • Если результат временно нельзя прочитать, ответ 503 с Retry-After: повторите чтение.

Отмена

Отмены заданий нет: чат нельзя отменить после отправки поставщику, обрыв соединения его не останавливает.

Деньги

Как у обычного чата: резерв перед запуском, списание по факту после ответа.

  • Поставщик отказал по вашему запросу — резерв возвращается.
  • Поставщик отказал из-за частоты запросов (429) или до него не достучались — работы не было, резерв возвращается, задание заканчивается ошибкой upstream_busy. Его можно отправить снова.
  • Исход неизвестен (таймаут, 5xx, обрыв после отправки) — резерв остаётся, пока мы проверяем расход. Платный запрос повторно не отправляется. То же происходит с заданием, которое не закончилось за таймаут поставщика, например при перезапуске сервиса.

Что делать при сбоях — в разделе Повторы и сбои.