Формат ответа

Структура turn

Поле turn задачи — это результат от Aist Core. Три ключевых части: output (ответ ассистента), messages (контекст LLM) и metadata (стоимость и модель).

Для завершённой задачи GET /api/tasks/{uuid} возвращает объект turn в исходном формате Aist Core:

{
  "input":    [/* входные данные (эхо из запроса) */],
  "output":   [/* ответ ассистента — см. «Типы output» */],
  "messages": [/* сырые LLM-сообщения — реальный контекст */],
  "metadata": {
    "cost": {                              // всегда нули — поле для совместимости
      "total": 0,
      "details": { "llm": 0, "tools": 0, "transcription": 0 }
    },
    "model": "claude-sonnet-4-6"       // фактически использованная модель
  }
}

Поля

ПолеТипОписание
inputarrayВходные элементы (эхо из запроса).
outputarrayОтвет ассистента для показа пользователю. См. Типы output.
messagesarrayПолная история LLM. Нужна для продолжения диалога. См. Поле messages.
metadataobjectИдентификатор фактически использованной модели (model). cost оставлен для совместимости и всегда содержит нули.
Стоимость хода
Agent не раскрывает стоимость: все денежные поля хода — metadata.cost, tool_call.cost, messages[].usage.provider_cost и подобные — приходят с нулями. Форма ответа не меняется, так что код, который их читает, продолжит работать.

output vs messages

Это разные вещи. output — «чистый» результат для отображения (текст, файлы, вызовы инструментов в порядке действий ассистента). messages — низкоуровневый протокол role/content с ID вызовов, результатами инструментов и thinking-блоками; именно он передаётся модели для восстановления контекста в следующем ходе.

metadata.model
Если у ассистента настроена fallback-цепочка моделей, в metadata.model будет та модель, которая фактически ответила, — она может отличаться от первой в цепочке.