GetAPI.ONE
Потоковая передача Responses из GetAPI.ONE
Обрабатывайте поток событий, отправляемых сервером, добавляйте только текстовые дельты и считайте completed, failed и incomplete различными конечными исходами.
Выберите совместимый путь
- Используйте актуальную модель каталога с заявленной конечной точкой Responses.
- Храните API-ключ в доверенном серверном или локальном процессе.
- Определите, как вызывающая сторона будет отображать частичный текст и восстанавливаться после прерывания потока.
POST https://www.getapi.one/v1/responses
Accept: text/event-stream
Authorization: Bearer $GETAPI_ONE_API_KEYИзучите жизненный цикл событий
- Отправьте stream=true через серверный SDK или HTTP-клиент с отключёнными автоматическими повторами для первого контролируемого запроса.
- Добавляйте в видимый текст только содержимое response.output_text.delta.
- Остановитесь на response.completed и сохраните итоговые метаданные ответа, необходимые приложению.
- Показывайте response.failed и response.incomplete как неуспешные исходы; не помечайте частичный текст завершённым.
- Считайте событие ошибки, транспортное исключение, EOF до завершения или локальную отмену неуспешным исходом и закрывайте поток.
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 с необработанными событиями.
- Повторяйте запрос только до видимых побочных эффектов или при идемпотентности на уровне приложения; разрыв соединения не доказывает, что вышестоящий запрос ничего не сделал.
Оставьте потоковую передачу на сервере
Browser → your authenticated backend → GetAPI.ONE
server-held key only