Обработка поиска в клиенте
Разбор итоговых ответов и поисковых событий с учётом фактического формата передачи.
Поиск может выполнить несколько вызовов инструментов до составления итогового ответа моделью. Клиенту следует показывать прогресс, различая завершённое поисковое действие и завершённый ответ.
Настройка запроса
{"model":"gpt-5.4","input":[{"role":"user","content":[{"type":"input_text","text":"Check the publisher's release notes and cite the source."}]}],"tools":[{"type":"web_search"}],"tool_choice":"required","include":["web_search_call.action.sources"],"stream":true}
Отправьте этот объект на https://api.b2b-llm.com/v1/responses. Не переносите необязательные параметры выборки или фонового режима из примера другого поставщика. Дополнительные настройки вывода добавляйте только при поддержке выбранной моделью.
Разбор ответа
Для JSON изучайте завершённый массив output, отдельно собирая блоки ассистента output_text и источники web_search_call. Для SSE читайте полные события и используйте конечный объект ответа, если он передан. Если совместимый поставщик присылает поток вопреки предпочтению обычного ответа, обработчик только JSON может ошибочно отклонить пригодный результат; учитывайте фактический тип содержимого и структуру событий.
event: response.output_text.delta
data: {"type":"response.output_text.delta","delta":"Release notes"}
event: response.completed
data: {"type":"response.completed","response":{"status":"completed","output":[]}}
Укороченная последовательность показывает оформление событий, а не полный ответ. Не считайте ошибку или неполный итог успешными только потому, что раньше пришёл текст. Сохраните безопасное тело HTTP-ошибки и ID запроса. Длительный поисковый вызов может тарифицироваться и после закрытия вкладки, поэтому слепые повторы транспорта не подходят как способ восстановления.
Интерактивная проверка B2B LLM выполняет оценку в открытом браузере и не сохраняет исходный ответ для фонового оценщика. Обычная SDK-интеграция сама отвечает за жизненный цикл соединения.