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

Руководство по интеграции

Версия документа: для gateway 4.2.0

Аудитория: инженерные и платформенные команды, интегрирующие HiveTrace Gateway в производственную среду.

Документ описывает контракт между клиентским приложением и gateway: формат запросов и ответов, модель обработки ошибок, особенности потоковой передачи. Руководство предназначено для практического внедрения и эксплуатации интеграции.


HiveTrace Gateway представляет собой HTTP-прокси, который размещается между клиентским приложением и LLM-провайдером (OpenAI, Anthropic, LiteLLM, vLLM, Ollama и др.). Поддерживаются два формата с полным пайплайном HiveTrace: OpenAI Chat Completions (/v1/chat/completions) и Anthropic Messages (/v1/messages). Для каждого запроса выполняется следующая последовательность:

  1. Gateway принимает обычный вызов OpenAI или Anthropic SDK.
  2. Регистрируется в HiveTrace до отправки в LLM.
  3. Проксируется в апстрим.
  4. Регистрируется в HiveTrace после получения ответа.

При соответствующей политике HiveTrace может отклонить запрос или заменить ответ модели на заранее определенное сообщение. Это возможно только при синхронном режиме доставки данных на анализ в мониторинг hivetrace.

┌────────────┐ ┌──────────────────┐ ┌────────────┐
│ Client │────▶│ HiveTrace │────▶│ Upstream │
│ │ │ Gateway :4100 │ │ (LiteLLM, │
│ │◀────│ │◀────│ vLLM, …) │
└────────────┘ └────────┬─────────┘ └────────────┘
┌──────────────┐
│ HiveTrace │
│ Monitoring │
└──────────────┘

API соответствует OpenAI Chat Completions, Embeddings и Models: формат тела запроса, форма ответа, SSE-стриминг и envelope ошибок идентичны OpenAI. Тело запроса при форвардинге в апстрим не модифицируется (исключение: stream: true принудительно переписывается в false при app_mode=sync, см. раздел 6.3.2).

Дополнительные значения (application_id, user_id, session_id), необходмые для аналитики мониторинга, в gateway передаются через HTTP-заголовки. В апстрим они не пробрасываются и на ответ модели не влияют. Полный список — раздел 4.

Заголовок X-HiveTrace-Api-Key обязателен для всех запросов к gateway. В OpenAI SDK задается через default_headers — пример в разделе 5.1.

Контракт API доступен в формате OpenAPI 3.1:

  • На запущенном экземпляре gateway: GET /openapi.json, Swagger UI на /docs, ReDoc на /redoc.

Помимо OpenAI gateway поддерживает нативный формат Anthropic:

  • POST /v1/messages — Anthropic Messages API с полным пайплайном HiveTrace (pre-call + post-call + блокировки), форма запроса и ответа идентичны Anthropic. Запрос форвардится в Anthropic-passthrough апстрима (LiteLLM /anthropic/v1/messagesapi.anthropic.com); заголовки anthropic-version / anthropic-beta / x-api-key пробрасываются без изменений.
  • POST|GET|DELETE /v1/files — Anthropic Files API, прозрачное проксирование (см. раздел 5.6).

Оба формата проходят через единый пайплайн HiveTrace; различается только разбор тела запроса/ответа. Извлечение идентификаторов (X-Application-Id/X-User-Id/X-Session-Id), модель ошибок и режимы доставки телеметрии — общие.


Gateway предоставляет единую точку входа (по умолчанию :4100) и реализует следующие эндпоинты:

МетодПутьНазначениеПайплайн HiveTrace
POST/v1/chat/completionsOpenAI chat completion. Для асинхронного режима мониторинга поддерживается stream: true.Полный (pre-call + post-call + логирование ошибок)
POST/v1/messagesAnthropic messages. Для асинхронного режима поддерживается stream: true.Полный (pre-call + post-call + логирование ошибок)
POST/v1/embeddingsEmbeddings.Не применяется — прозрачное проксирование
GET/v1/modelsСписок моделей апстрима.Не применяется — прозрачное проксирование
POST, GET, DELETE/v1/files, /v1/files/{id}, /v1/files/{id}/contentAnthropic Files API (загрузка / список / метаданные / скачивание / удаление).Не применяется — прозрачное проксирование (загрузка дополнительно зеркалируется в аудит, см. 5.6)

Полный контур проверок политиками HiveTrace доступен для /v1/chat/completions и /v1/messages.


Gateway использует двухуровневую модель авторизации:

Клиент передает заголовок X-HiveTrace-Api-Key: <gateway-key>обязательный ключ доступа к gateway. Без него любой запрос ко всем эндпоинтам (/v1/chat/completions, /v1/messages, /v1/embeddings, /v1/models, /v1/files) отклоняется со статусом 401 invalid_request_error. Этим же ключом gateway аутентифицируется в HiveTrace при исходящих вызовах, поэтому переключение клиентского ключа автоматически переключает идентичность gateway в HiveTrace — серверный токен в env не используется и был удалён.

Клиент передает заголовок Authorization: Bearer <key> (OpenAI) или x-api-key: <key> (Anthropic SDK). Gateway не валидирует и не сохраняет этот токен; он передается в апстрим без изменений. Это означает следующее:

  • <key> должен быть действительным ключом апстрима (например, OpenAI API key для прямого обращения к OpenAI или ключ LiteLLM).
  • Для Anthropic-формата Anthropic SDK отправляет ключ в x-api-key; gateway пробрасывает его (вместе с anthropic-version / anthropic-beta) в Anthropic-passthrough апстрима.

Идентификация приложения выполняется по заголовку X-Application-Id (см. п4). Это позволяет одному экземпляру gateway обслуживать несколько приложений с различными политиками HiveTrace без изменения инфраструктурной конфигурации.


Колонка «Источник» обозначает, относится ли заголовок к стандарту OpenAI (проксируется в апстрим без интерпретации gateway) или является расширением gateway (обрабатывается gateway, в апстрим не пробрасывается).

ЗаголовокИсточникОбязательностьНазначение
Authorization: Bearer <key>OpenAIдля апстримаКлюч апстрима. Передаётся в апстрим без изменений и валидации.
x-api-key: <key>Anthropicдля апстрима (Anthropic)Ключ апстрима для Anthropic SDK. Пробрасывается без изменений.
anthropic-version, anthropic-betaAnthropicдля Anthropic-запросовСтандартные заголовки Anthropic (напр. anthropic-beta: files-api-2025-04-14). Пробрасываются в апстрим.
Content-Type: application/jsonOpenAIдля non-stream запросовСтандартный для OpenAI API.
Accept: text/event-streamOpenAIдля stream-запросовСтандартный для OpenAI streaming.
X-HiveTrace-Api-KeyGatewayдаКлюч доступа к gateway. Также используется как Bearer в исходящих вызовах gateway → HiveTrace. Отсутствие или пустое значение → 401.
X-Application-IdGatewayнетUUID приложения в HiveTrace. Определяет per-app политику. При отсутствии — fallback на ENV HIVETRACE_APPLICATION_ID.
X-User-IdGatewayнетИдентификатор конечного пользователя для аудита.
X-Session-IdGatewayнетИдентификатор пользовательской сессии.
X-Attached-FilesGatewayнетJSON-массив дескрипторов вложений для отдельной аудит-копии в HiveTrace. Формат — раздел 5.3.2.

Тело запроса соответствует payload OpenAI Chat Completions / Embeddings. Специфичных для gateway полей в теле нет.

Минимальный запрос:

Окно терминала
curl -X POST http://gateway:4100/v1/chat/completions \
-H "Authorization: Bearer <upstream-key>" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "X-Application-Id: 11111111-2222-3333-4444-555555555555" \
-d '{
"model": "gpt-5",
"messages": [{"role": "user", "content": "Привет!"}]
}'

С идентификацией пользователя и сессии:

Окно терминала
curl -X POST http://gateway:4100/v1/chat/completions \
-H "Authorization: Bearer <upstream-key>" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "X-Application-Id: 11111111-…" \
-H "X-User-Id: alice@company.com" \
-H "X-Session-Id: session-2025-04-28-abc" \
-d '{ "model": "gpt-5", "messages": [...] }'

Streaming:

Окно терминала
curl -X POST http://gateway:4100/v1/chat/completions \
-H "Authorization: Bearer <upstream-key>" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{ "model": "gpt-5", "stream": true, "messages": [...] }'

Передача файлов поддерживается двумя стратегиями. Они решают разные задачи и могут использоваться по отдельности или одновременно.

СтратегияФайл попадает в LLMФайл попадает в HiveTrace (audit)Изменения в OpenAI-клиенте
5.3.1. Стандарт OpenAI (multimodal)ДаНетНе требуются
5.3.2. Заголовок X-Attached-FilesНетДаОдин дополнительный заголовок
5.3.3. Обе стратегии в одном запросеДаДаОдин дополнительный заголовок

5.3.1. Стратегия 1 — стандарт OpenAI (multimodal messages[].content)

Заголовок раздела «5.3.1. Стратегия 1 — стандарт OpenAI (multimodal messages[].content)»

Файлы передаются стандартным OpenAI-способом — массивом частей в messages[].content. Gateway не интерпретирует эти части и форвардит тело запроса в апстрим без изменений.

Окно терминала
curl -X POST http://gateway:4100/v1/chat/completions \
-H "Authorization: Bearer <upstream-key>" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "X-Application-Id: <APPLICATION_ID>" \
-d '{
"model": "gpt-5",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Что на изображении?"},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KG..."}}
]
}]
}'

Поведение:

  • LLM. Получает запрос в стандартном OpenAI multimodal формате. Обработка image_url, file и прочих нетекстовых частей зависит от модели и апстрима.
  • HiveTrace. В запись user_prompt записывается только текстовая часть (type: "text"). Содержимое image_url, file и прочих нетекстовых частей в HiveTrace не сохраняется.
  • Изменения в клиенте. Не требуются. Любой OpenAI-клиент или SDK с поддержкой multimodal работает без изменений.

Применимо, когда требуется обработка файла моделью без сохранения аудит-копии файла в HiveTrace.

Файлы передаются в заголовке X-Attached-Files как JSON-массив дескрипторов. Gateway не пробрасывает заголовок в апстрим; вместо этого он скачивает / декодирует файлы и прикрепляет их к аудит-записи user_prompt в HiveTrace.

Передача через base64 (для локальных файлов):

Окно терминала
B64=$(base64 -i ./test111.txt | tr -d '\n')
curl -X POST http://gateway:4100/v1/chat/completions \
-H "Authorization: Bearer <upstream-key>" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "X-Application-Id: <APPLICATION_ID>" \
-H "X-User-Id: alice@company.com" \
-H "X-Attached-Files: [{\"name\":\"test111.txt\",\"content_base64\":\"$B64\",\"type\":\"text/plain\"}]" \
-d '{ "model": "gpt-5", "messages": [{"role":"user","content":"Сообщение пользователя"}] }'

Передача через URL (gateway скачивает файл по HTTP/HTTPS):

Окно терминала
curl -X POST http://gateway:4100/v1/chat/completions \
-H "Authorization: Bearer <upstream-key>" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "X-Application-Id: <APPLICATION_ID>" \
-H "X-User-Id: alice@company.com" \
-H 'X-Attached-Files: [{"url":"https://files.company.example/contract.pdf","name":"contract.pdf","type":"application/pdf"}]' \
-d '{ "model": "gpt-5", "messages": [{"role":"user","content":"Сообщение пользователя"}] }'

Формат дескриптора (X-Attached-Files — JSON-массив, элементы содержат либо url, либо content_base64):

ПолеТипОписание
urlstringHTTP/HTTPS URL файла. Поддерживается также data: URI с inline base64.
content_base64stringBase64-кодированное содержимое файла. Альтернатива url.
namestringИмя файла. Используется при сохранении в HiveTrace; при отсутствии выводится из URL.
typestringMIME-тип файла. При отсутствии определяется по расширению или Content-Type ответа при скачивании.

Алиас заголовка: X-AttachedFiles.

Поведение:

  • LLM. Тело запроса в апстрим уходит без изменений; X-Attached-Files в апстрим не пробрасывается. Если в messages[].content нет inline-данных файла — модель его не получает.
  • HiveTrace. В запись user_prompt дополнительно прикрепляется аудит-копия файла, привязанная к analysis_id запроса.
  • Изменения в клиенте. Один дополнительный заголовок. Тело запроса остаётся стандартным OpenAI-payload.

Дополнительные возможности по сравнению со стратегией 1:

  • Аудит-копия файла сохраняется в HiveTrace независимо от того, передаётся ли файл модели.
  • Поддерживается передача по URL — gateway сам скачивает файл; клиенту не нужно загружать содержимое в payload запроса.
  • Содержимое файла попадает в HiveTrace целиком, а не только текстовая часть запроса.

Если требуется одновременно (а) подать файл в LLM и (б) сохранить его аудит-копию в HiveTrace, обе стратегии применяются в одном запросе. messages[].content обеспечивает доставку в модель, X-Attached-Files — аудит-копию в HiveTrace.

Окно терминала
B64=$(base64 -i ./contract.pdf | tr -d '\n')
curl -X POST http://gateway:4100/v1/chat/completions \
-H "Authorization: Bearer <upstream-key>" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "X-Application-Id: <APPLICATION_ID>" \
-H "X-User-Id: alice@company.com" \
-H "X-Attached-Files: [{\"name\":\"contract.pdf\",\"content_base64\":\"$B64\",\"type\":\"application/pdf\"}]" \
-d "{
\"model\": \"gpt-5\",
\"messages\": [{
\"role\": \"user\",
\"content\": [
{\"type\": \"text\", \"text\": \"Сделай выжимку документа.\"},
{\"type\": \"file\", \"file\": {\"filename\": \"contract.pdf\", \"file_data\": \"data:application/pdf;base64,$B64\"}}
]
}]
}"

В этом случае:

  1. messages[].content пропускается в апстрим без изменений; модель получает файл по стандартному OpenAI-протоколу.
  2. X-Attached-Files обрабатывается gateway параллельно: файл декодируется и прикрепляется к user_prompt в HiveTrace.
  3. Ответ модели регистрируется в HiveTrace стандартным post-call вызовом.

Применимо для compliance-сценариев, где требуется и обработка файла моделью, и аудит исходного содержимого в HiveTrace.

5.3.4. Обработка ошибок при работе с вложениями

Заголовок раздела «5.3.4. Обработка ошибок при работе с вложениями»

Сбой скачивания или декодирования файла (HTTP >=400, таймаут, размер превышает HIVETRACE_FILES_MAX_BYTES, ошибка декодирования base64) не приводит к отказу клиенту. Gateway изолирует такие сбои:

  • Проблемный файл не попадает в HiveTrace. В логи gateway пишется предупреждение с диагностикой (Attachment download failed: url=… status=404 и т. п.).
  • Остальные файлы в X-Attached-Files обрабатываются независимо.
  • Тело запроса передаётся в апстрим без изменений.
  • Клиент получает обычный ответ модели с HTTP-статусом, соответствующим ответу апстрима.
ПараметрДефолтENV
Максимальный размер одного файла20 MiBHIVETRACE_FILES_MAX_BYTES
Параллельных скачиваний4HIVETRACE_FILES_MAX_CONCURRENCY
Таймаут скачивания одного файла60 сHIVETRACE_FILES_TIMEOUT

Файл, превышающий лимит, исключается из обработки с записью предупреждения в лог; остальные вложения продолжают обрабатываться.

Gateway не накладывает собственный лимит на размер тела запроса. Контроль выполняется на стороне апстрима.

Тело запроса соответствует payload Anthropic Messages (model, max_tokens, system, messages[] с блоками content). Специфичных для gateway полей в теле нет; идентификаторы передаются теми же заголовками, что и для OpenAI (раздел 4).

Окно терминала
curl -X POST http://gateway:4100/v1/messages \
-H "x-api-key: <upstream-key>" \
-H "anthropic-version: 2023-06-01" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-H "Content-Type: application/json" \
-H "X-Application-Id: 11111111-…" \
-H "X-User-Id: alice@company.com" \
-H "X-Session-Id: session-2025-04-28-abc" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Привет!"}]
}'

Для Anthropic SDK gateway задаётся через base_url, а ключ доступа к gateway — через default_headers:

import anthropic
client = anthropic.Anthropic(
base_url="http://gateway:4100",
api_key="<upstream-key>", # → x-api-key, пробрасывается в апстрим
default_headers={
"X-HiveTrace-Api-Key": "<gateway-key>",
"X-Application-Id": "11111111-…",
"X-User-Id": "alice@company.com",
"X-Session-Id": "session-2025-04-28-abc",
},
)
client.messages.create(
model="claude-sonnet-4-6", max_tokens=1024,
messages=[{"role": "user", "content": "Привет!"}],
)

Поведение:

  • LLM. Тело форвардится в Anthropic-passthrough апстрима без изменений (исключение: stream: true → false при app_mode=sync, см. 6.3.2).
  • HiveTrace. В user_prompt записывается текст из text-блоков последнего сообщения user; в llm_answer — текст из text-блоков ответа. Файлы, переданные блоком document/image (base64) или ссылкой file_id, прикрепляются к аудит-записи (раздел 5.6).
  • Стриминг (stream: true) поддерживается в асинхронном режиме; формат SSE — нативный Anthropic (раздел 6.4).

Прозрачное проксирование Anthropic Files API в апстрим (LiteLLM /anthropic/v1/filesapi.anthropic.com). Пайплайн guardrail не применяется. Загрузка идёт multipart/form-data, скачивание возвращает бинарный поток.

Окно терминала
# Загрузка файла (Anthropic SDK выставляет anthropic-beta автоматически)
curl -X POST http://gateway:4100/v1/files \
-H "x-api-key: <upstream-key>" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: files-api-2025-04-14" \
-H "X-HiveTrace-Api-Key: <gateway-key>" \
-F "file=@report.pdf;type=application/pdf"
# → {"id": "file_…", "type": "file", …}
# Скачивание (только артефакты skills / code execution; загруженные файлы Anthropic скачивать не даёт)
curl http://gateway:4100/v1/files/<file_id>/content \
-H "x-api-key: <upstream-key>" -H "X-HiveTrace-Api-Key: <gateway-key>" -o out.bin

Загруженный file_id затем указывается в /v1/messages блоком document:

{"type": "document", "source": {"type": "file", "file_id": "file_…"}}

Зеркалирование в аудит HiveTrace (паритет со стратегией X-Attached-Files OpenAI-пути):

  • При загрузке через /v1/files gateway сохраняет содержимое в кэше file_id → bytes (Redis).
  • Когда /v1/messages ссылается на этот file_id, gateway достаёт байты из кэша и прикрепляет файл к user_prompt. Inline base64-блоки прикрепляются напрямую, без кэша.
  • Требуется Redis (GATEWAY_REDIS_URL или REDIS_*). Без Redis загрузка и сам запрос работают, но файлы по file_id в аудит не попадают (base64-блоки — попадают). TTL кэша — HIVETRACE_FILES_CACHE_TTL_SECONDS (раздел 9), размер — HIVETRACE_FILES_MAX_BYTES.

Тело ответа и HTTP-статус полностью соответствуют ответу апстрима. Тип содержимого: application/json. Структура соответствует стандартному формату OpenAI:

{
"id": "chatcmpl-…",
"object": "chat.completion",
"created": 1234567890,
"model": "gpt-5",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "..."},
"finish_reason": "stop"
}
],
"usage": {"prompt_tokens": 23, "completion_tokens": 45, "total_tokens": 68}
}

Content-Type: text/event-stream. Тело ответа представляет собой последовательность SSE-кадров:

data: {"id":"…","object":"chat.completion.chunk","choices":[{"delta":{"content":"При"}}]}
data: {"id":"…","object":"chat.completion.chunk","choices":[{"delta":{"content":"вет!"},"finish_reason":"stop"}]}
data: [DONE]

Между обычными data:-кадрами могут передаваться comment-кадры для поддержания соединения:

: keepalive

Streaming ответ может формироваться для пользователя при работающем мониторинге только в асинхронном режиме.

Возможна только при app_mode=sync в per-app политике (Redis). Если mode=async либо политика не настроена, описанное в этом разделе поведение к запросу не применяется.

Запрос не был передан в апстрим. Gateway возвращает синтезированный chat.completion с диагностическим блоком metadata.hivetrace:

{
"id": "hivetrace-guardrails-<uuid>",
"object": "chat.completion",
"created": 1717171717,
"model": "<запрошенная или 'unknown'>",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "<фраза из политики приложения>"},
"finish_reason": "stop"
}
],
"usage": {"prompt_tokens": 0, "completion_tokens": 0, "total_tokens": 0},
"metadata": {
"hivetrace": {
"response_replaced": true,
"response_replacement": {
"stage": "pre_call",
"type": "<guardrails|custom_policy|dataclean>",
"request_id": "<metadata.request_id из тела запроса или сгенерированный UUID>"
},
"prepared_response": { "...": "контекст вердикта от HiveTrace" }
}
}
}

Клиент может определить факт замены по наличию metadata.hivetrace.response_replaced == true либо по префиксу id (hivetrace-…).

В режиме sync gateway принудительно отключает stream: true (заменяя его на stream: false) еще до обращения к HiveTrace. Причина заключается в том, что подмена SSE-ответа после начала передачи клиенту технически невозможна. Поэтому в sync-режиме клиент всегда получает non-streaming ответ, даже если в body.stream было указано true. Это справедливо и для /v1/messages.

Тело ответа и HTTP-статус полностью соответствуют ответу Anthropic-апстрима.

Non-streaming — application/json, нативная форма Anthropic message:

{
"id": "msg_…",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-4-6",
"content": [{"type": "text", "text": "..."}],
"stop_reason": "end_turn",
"usage": {"input_tokens": 23, "output_tokens": 45}
}

Streaming — text/event-stream, нативная последовательность событий Anthropic (типизированные event:-кадры, без терминатора data: [DONE]):

event: message_start
data: {"type":"message_start","message":{"id":"msg_…", …}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"При"}}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":7}}
event: message_stop
data: {"type":"message_stop"}

Между кадрами так же могут передаваться comment-кадры : keepalive для поддержания соединения.

Подмена ответа политикой (app_mode=sync, аналогично разделу 6.3) для /v1/messages синтезируется в форме Anthropic message:

{
"id": "hivetrace-guardrails-<uuid>",
"type": "message",
"role": "assistant",
"model": "<запрошенная или 'unknown'>",
"content": [{"type": "text", "text": "<фраза из политики приложения>"}],
"stop_reason": "end_turn",
"usage": {"input_tokens": 0, "output_tokens": 0},
"metadata": {"hivetrace": {"response_replaced": true, "response_replacement": {"stage": "pre_call", "type": "guardrails", "request_id": ""}}}
}

Факт замены определяется по metadata.hivetrace.response_replaced == true или по префиксу id (hivetrace-…).


Все ошибки, возвращаемые клиенту, имеют следующую форму:

{"error": {"message": "...", "type": "...", "code": <int>}}

Если апстрим уже возвращает ошибку в формате OpenAI ({"error": {...}}), gateway передает ее без дополнительной обертки, сохраняя исходные поля провайдера (type, param, code).

Поле type используется для различения источников ошибок:

  • invalid_request_error — клиентская ошибка, отклонённая gateway или апстримом.
  • upstream_error — апстрим вернул >=400, а тело ответа не соответствовало OpenAI-совместимому формату.
  • gateway_error — gateway не смог успешно обратиться к апстриму. Всегда code: 502.
  • rate_limit_error, authentication_error и др. — нативные значения от OpenAI-совместимых апстримов, передаваемые без изменения.
СтатусИсточникУсловиеТип в error.type
400gatewayНевалидный JSON в теле запросаinvalid_request_error
400апстримБизнес-валидация (отсутствует messages, превышен context window, и т.п.)invalid_request_error (passthrough)
401gatewayОтсутствует или пустой заголовок X-HiveTrace-Api-Keyinvalid_request_error
401апстримAuthorization: Bearer отвергнут апстримомinvalid_request_error (passthrough)
403апстримАвторизация прошла, но действие запрещено (например, organization without quota)passthrough
404апстримУказанная модель не существуетinvalid_request_error (passthrough)
413апстрим / проксиТело слишком большоеupstream_error
422апстримPayload не прошел валидацию (strict-mode схемы)passthrough
429апстримRate limitrate_limit_error (passthrough)
500апстримВнутренняя ошибка апстримаupstream_error
502gatewayСетевая ошибка между gateway и апстримом (DNS, refused, TLS). Также — httpx.ReadTimeout ДО первого байта на non-streaming запросе.gateway_error
503апстримАпстрим недоступен (maintenance, перегруз)upstream_error
504(только в SSE error-кадрах)mid-stream httpx.TimeoutExceptionupstream_error

СлойПараметрДефолтКто контролирует
Gateway → апстрим (один HTTP-вызов)GATEWAY_UPSTREAM_TIMEOUT120 сgateway
Gateway → HiveTrace (/process_request/, /process_response/)HIVETRACE_TIMEOUT60 сgateway
Gateway → URL вложения (скачивание)HIVETRACE_FILES_TIMEOUT60 сgateway
Gateway → клиент: SSE keepaliveGATEWAY_STREAM_HEARTBEAT_SECONDS60 сgateway

9.1. Минимальный набор переменных окружения

Заголовок раздела «9.1. Минимальный набор переменных окружения»
Окно терминала
# Апстрим
UPSTREAM_URL=http://litellm:4000
# Префикс Anthropic-passthrough на апстриме (для /v1/messages и /v1/files)
ANTHROPIC_PASSTHROUGH_PREFIX=/anthropic/v1
# HiveTrace
HIVETRACE_URL=https://hivetrace.example.com/api
HIVETRACE_APPLICATION_ID=<default app uuid>
# TTL кэша file_id→bytes для зеркалирования файлов в аудит (0 — отключить)
HIVETRACE_FILES_CACHE_TTL_SECONDS=86400
# Redis (per-app политики + кэш file_id→bytes для аудита Anthropic-файлов;
# опционально, если блокировки и аудит файлов по file_id не требуются)
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
REDIS_USER=""
REDIS_PASSWORD="admin"
REDIS_SSL=False

Если HIVETRACE_URL не задан, gateway форвардит запросы в апстрим без отправки телеметрии в HiveTrace. При импорте модуля в stderr выводится предупреждение HiveTrace is effectively disabled.

Контракт X-HiveTrace-Api-Key сохраняется: ключ остается обязательным для клиентских запросов, однако при отсутствии подключения к HiveTrace фактически не используется. Этот режим предназначен для отладки и устойчивой обработки ошибок конфигурации; в развертывании параметр HIVETRACE_URL должен быть задан явно.

Если Redis не сконфигурирован, per-app политики блокировки недоступны; pre-call и post-call телеметрия в HiveTrace отправляется в режиме async по умолчанию. Дополнительно становится недоступно зеркалирование Anthropic-файлов по file_id в аудит (раздел 5.6): загрузка и сами запросы работают, но в аудит попадают только inline base64-вложения.