Fix fastgpt client tool 3 rounds bugs
This commit is contained in:
@@ -30,6 +30,18 @@ from runtime.events import get_event_bus, reset_event_bus
|
||||
_HEARTBEAT_CHECK_INTERVAL_SEC = 5
|
||||
|
||||
|
||||
def _inactivity_deadline(
|
||||
*,
|
||||
last_received_at: float,
|
||||
inactivity_timeout_sec: int,
|
||||
pending_client_tool_deadline: Optional[float] = None,
|
||||
) -> float:
|
||||
deadline = float(last_received_at) + float(inactivity_timeout_sec)
|
||||
if pending_client_tool_deadline is not None:
|
||||
deadline = max(deadline, float(pending_client_tool_deadline))
|
||||
return deadline
|
||||
|
||||
|
||||
async def heartbeat_and_timeout_task(
|
||||
transport: BaseTransport,
|
||||
session: Session,
|
||||
@@ -48,8 +60,22 @@ async def heartbeat_and_timeout_task(
|
||||
if transport.is_closed:
|
||||
break
|
||||
now = time.monotonic()
|
||||
if now - last_received_at[0] > inactivity_timeout_sec:
|
||||
logger.info(f"Session {session_id}: {inactivity_timeout_sec}s no message, closing")
|
||||
pending_client_tool_deadline = session.pipeline.pending_client_tool_deadline()
|
||||
idle_deadline = _inactivity_deadline(
|
||||
last_received_at=last_received_at[0],
|
||||
inactivity_timeout_sec=inactivity_timeout_sec,
|
||||
pending_client_tool_deadline=pending_client_tool_deadline,
|
||||
)
|
||||
if now > idle_deadline:
|
||||
if pending_client_tool_deadline is not None and pending_client_tool_deadline >= (
|
||||
last_received_at[0] + inactivity_timeout_sec
|
||||
):
|
||||
logger.info(
|
||||
"Session {}: no message before pending client tool deadline, closing",
|
||||
session_id,
|
||||
)
|
||||
else:
|
||||
logger.info(f"Session {session_id}: {inactivity_timeout_sec}s no message, closing")
|
||||
await session.cleanup()
|
||||
break
|
||||
if now - last_heartbeat_at[0] >= heartbeat_interval_sec:
|
||||
|
||||
Reference in New Issue
Block a user