Усі теми

SHVYDKO / API

POST /v1/systemone

Контракт запиту та відповіді для Choice, Score і Noul через один HTTP endpoint.

HTTP і заголовки

Передавайте Bearer API-ключ організації та JSON у UTF-8. Відповідь успішного запиту має HTTP 200. Endpoint повертає повну JSON-відповідь; потокова генерація тексту не підтримується.

POST · application/json
curl --fail-with-body "$SHVYDKO_BASE_URL/v1/systemone" \
  -H "Authorization: Bearer $SHVYDKO_API_KEY" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

Поля запиту

ПолеТипПравило
stateJSONОбов’язковий спільний контекст
questionsobjectВід 1 до 32 питань; ID має 1–100 символів
questions[id].typestringchoice, score або noul
questions[id].instructionsJSON, необов’язковоРекомендовано ясне текстове формулювання задачі
questions[id].criteriaobject / arrayФорма залежить від типу питання
modelstring, необов’язковоІм’я з GET /v1/models; без поля обирається налаштована модель

Додаткові поля верхнього рівня та невідомі поля всередині питання відхиляються. Параметри temperature, messages, stream і tools не входять до цього контракту.

Поля відповіді

ПолеЗначення
answersОб’єкт із тими самими ID, що у questions
modelПублічне ім’я налаштованої моделі
request_idID запиту для зіставлення з Usage
service_modepreview або paid
usage.input_tokens / output_tokensФактичний облік токенів від сервісу моделі
usage.cost_microusdВартість у цілих мікродоларах; 1 USD = 1 000 000 microUSD
usage.cost_usdТа сама вартість десятковим рядком у USD
usage.price_per_million_input_usdЗастосований тариф; null у безкоштовному preview
gateway_latency_msЧас обробки запиту шлюзом у мілісекундах
Ілюстрація структури preview-відповіді; не вимірювання
{
  "answers": {
    "team": {
      "type": "choice",
      "choice": "engineering",
      "probabilities": {
        "engineering": 0.88,
        "logistics": 0.04,
        "other": 0.08
      },
      "confidence": 0.82
    },
    "urgency": {
      "type": "score",
      "score": 1.1,
      "probabilities": {
        "0": 0.05,
        "1": 0.8,
        "2": 0.15
      },
      "legend": {
        "0": "Інформаційне питання; нічого не заблоковано",
        "1": "Є незручність, але доступний інший спосіб завершити дію",
        "2": "Дію повністю заблоковано; потрібна оперативна допомога"
      },
      "confidence": 0.7
    },
    "alternative": {
      "type": "noul",
      "noul": 0.94
    }
  },
  "model": "shvydko-latest",
  "request_id": "req_example",
  "service_mode": "preview",
  "usage": {
    "input_tokens": 120,
    "output_tokens": 20,
    "cost_microusd": 0,
    "cost_usd": "0.000000",
    "price_per_million_input_usd": null
  },
  "gateway_latency_ms": 245
}

Зіставлення та повторні запити

Успішна відповідь також містить заголовки x-shvydko-request-id та x-typesafe-request-id. Вони відповідають request_id у JSON. Зберігайте ID разом із власним ID задачі, щоб знайти запис у Usage.

API не надає контракту ідемпотентності для inference. Повторний POST — новий запит. Якщо зв’язок обірвався після обробки, сліпе повторення може створити друге списання у paid-режимі. Обмежуйте повтори і перевіряйте історію перед повторною бізнес-дією.