Перейти к содержимому
GetAPI
Русский
Меню

GetAPI.ONE

Потоковая передача Responses из GetAPI.ONE

Обрабатывайте поток событий, отправляемых сервером, добавляйте только текстовые дельты и считайте completed, failed и incomplete различными конечными исходами.

Выберите совместимый путь

  • Используйте актуальную модель каталога с заявленной конечной точкой Responses.
  • Храните API-ключ в доверенном серверном или локальном процессе.
  • Определите, как вызывающая сторона будет отображать частичный текст и восстанавливаться после прерывания потока.
text
POST https://www.getapi.one/v1/responses
Accept: text/event-stream
Authorization: Bearer $GETAPI_ONE_API_KEY

Изучите жизненный цикл событий

  1. Отправьте stream=true через серверный SDK или HTTP-клиент с отключёнными автоматическими повторами для первого контролируемого запроса.
  2. Добавляйте в видимый текст только содержимое response.output_text.delta.
  3. Остановитесь на response.completed и сохраните итоговые метаданные ответа, необходимые приложению.
  4. Показывайте response.failed и response.incomplete как неуспешные исходы; не помечайте частичный текст завершённым.
  5. Считайте событие ошибки, транспортное исключение, EOF до завершения или локальную отмену неуспешным исходом и закрывайте поток.
python
import os
from openai import OpenAI

terminal_event = None
try:
    with OpenAI(
        api_key=os.environ["GETAPI_ONE_API_KEY"],
        base_url="https://www.getapi.one/v1",
        timeout=30.0,
        max_retries=0,
    ) as client:
        with client.responses.create(
            model="<RESPONSES_MODEL_ID_FROM_CURRENT_CATALOG>",
            input="Give three concise deployment checks.",
            stream=True,
        ) as stream:
            for event in stream:
                if event.type == "response.output_text.delta":
                    print(event.delta, end="", flush=True)
                elif event.type == "response.completed":
                    terminal_event = event.type
                    print("\ncompleted")
                    break
                elif event.type in {"response.failed", "response.incomplete", "error"}:
                    terminal_event = event.type
                    raise RuntimeError(f"stream ended with {event.type}: {event}")
except KeyboardInterrupt:
    raise SystemExit("cancelled locally; the stream and client were closed")

if terminal_event != "response.completed":
    raise RuntimeError("stream ended before response.completed")

Сопоставьте события с состоянием интерфейса

СобытиеДействие приложения
response.output_text.deltaДобавляйте event.delta; не заменяйте уже отображённый текст.
response.completedОтметьте успех и закройте состояние загрузки.
response.failedПокажите структурированную ошибку и безопасное действие повтора.
response.incompleteСохраняйте частичный вывод явно незавершённым и изучите сведения incomplete.

Проверьте ожидаемый результат

  • Текст появляется постепенно без дублирования дельт.
  • Загрузка завершается только после конечного события или транспортной ошибки.
  • Прерванное соединение никогда не отображает ложное состояние успеха.

Обрабатывайте транспортные и протокольные ошибки

  • Если события не поступают, проверьте точный маршрут /v1/responses, stream=true, буферизацию прокси и заявление конечной точки модели.
  • Если вывод повторяется, добавляйте каждую дельту один раз и не объединяйте накопленный вывод SDK с необработанными событиями.
  • Повторяйте запрос только до видимых побочных эффектов или при идемпотентности на уровне приложения; разрыв соединения не доказывает, что вышестоящий запрос ничего не сделал.

Оставьте потоковую передачу на сервере

text
Browser → your authenticated backend → GetAPI.ONE
                 server-held key only

Дальнейшие действия