fix(provider): honor NANOBOT_STREAM_IDLE_TIMEOUT_S in Codex provider

Every other streaming provider (anthropic, bedrock, openai_compat,
litellm) reads NANOBOT_STREAM_IDLE_TIMEOUT_S with a 90s default. The
Codex provider hardcoded 60s in _request_codex, so it could not be
tuned the same way and aborted streams sooner than its peers.

Read the same env var with the same default and pass it as the httpx
client timeout. The variable name and int parsing match anthropic /
openai_compat / bedrock verbatim.

#4009 normalized the error response when the timeout fires; this PR
fixes the timeout knob itself.
This commit is contained in:
yeounhyeok
2026-05-28 02:17:15 +08:00
committed by Xubin Ren
parent 1cfc3ef165
commit ac8bef76f6
2 changed files with 26 additions and 3 deletions
+3 -1
View File
@@ -5,6 +5,7 @@ from __future__ import annotations
import asyncio
import hashlib
import json
import os
from collections.abc import Awaitable, Callable
from typing import Any
@@ -177,7 +178,8 @@ async def _request_codex(
on_content_delta: Callable[[str], Awaitable[None]] | None = None,
on_tool_call_delta: Callable[[dict[str, Any]], Awaitable[None]] | None = None,
) -> tuple[str, list[ToolCallRequest], str]:
async with httpx.AsyncClient(timeout=60.0, verify=verify) as client:
idle_timeout_s = int(os.environ.get("NANOBOT_STREAM_IDLE_TIMEOUT_S", "90"))
async with httpx.AsyncClient(timeout=idle_timeout_s, verify=verify) as client:
async with client.stream("POST", url, headers=headers, json=body) as response:
if response.status_code != 200:
text = await response.aread()