fix: only suppress gateway replies after confirmed final stream delivery

(cherry picked from commit 675249085b383fff305cc84b8aeacd6dd20c7b14)
This commit is contained in:
Dave Tist
2026-04-16 13:08:57 +02:00
committed by Teknium
parent 512c328815
commit d67e602cc8
2 changed files with 81 additions and 72 deletions

View File

@@ -9397,15 +9397,15 @@ class GatewayRunner:
except Exception as e:
logger.debug("Stream consumer wait before queued message failed: %s", e)
_already_streamed = bool(
_sc
and (
getattr(_sc, "final_response_sent", False)
or getattr(_sc, "already_sent", False)
)
_sc and getattr(_sc, "final_response_sent", False)
)
first_response = result.get("final_response", "")
if first_response and not _already_streamed:
try:
logger.info(
"Queued follow-up for session %s: final stream delivery not confirmed; sending first response before continuing.",
session_key[:20] if session_key else "?",
)
await adapter.send(
source.chat_id,
first_response,
@@ -9413,6 +9413,11 @@ class GatewayRunner:
)
except Exception as e:
logger.warning("Failed to send first response before queued message: %s", e)
elif first_response:
logger.info(
"Queued follow-up for session %s: skipping resend because final streamed delivery was confirmed.",
session_key[:20] if session_key else "?",
)
# Release deferred bg-review notifications now that the
# first response has been delivered. Pop from the
# adapter's callback dict (prevents double-fire in
@@ -9519,14 +9524,19 @@ class GatewayRunner:
if isinstance(response, dict) and not response.get("failed"):
_final = response.get("final_response") or ""
_is_empty_sentinel = not _final or _final == "(empty)"
_streamed = _sc and (
getattr(_sc, "final_response_sent", False)
or getattr(_sc, "already_sent", False)
_streamed = bool(
_sc and getattr(_sc, "final_response_sent", False)
)
# response_previewed means the interim_assistant_callback already
# sent the final text via the adapter (non-streaming path).
_previewed = bool(response.get("response_previewed"))
if not _is_empty_sentinel and (_streamed or _previewed):
logger.info(
"Suppressing normal final send for session %s: final delivery already confirmed (streamed=%s previewed=%s).",
session_key[:20] if session_key else "?",
_streamed,
_previewed,
)
response["already_sent"] = True
return response