fix(copilot): move StreamUsage/StreamFinish yields into finally block

On client disconnect, GeneratorExit terminates the generator after the
finally block, making yields after it unreachable. Moving them inside
finally ensures they are at least attempted.
This commit is contained in:
Zamil Majdy
2026-03-13 00:04:55 +07:00
parent 4d179a7c37
commit 8136b90860

View File

@@ -480,12 +480,13 @@ async def stream_chat_completion_baseline(
except Exception as persist_err:
logger.error("[Baseline] Failed to persist session: %s", persist_err)
# Yield usage after finally so it reaches the client before StreamFinish
if turn_prompt_tokens > 0 or turn_completion_tokens > 0:
yield StreamUsage(
promptTokens=turn_prompt_tokens,
completionTokens=turn_completion_tokens,
totalTokens=turn_prompt_tokens + turn_completion_tokens,
)
# Yield usage and finish inside finally so they are attempted even
# when GeneratorExit (client disconnect) terminates the generator.
if turn_prompt_tokens > 0 or turn_completion_tokens > 0:
yield StreamUsage(
promptTokens=turn_prompt_tokens,
completionTokens=turn_completion_tokens,
totalTokens=turn_prompt_tokens + turn_completion_tokens,
)
yield StreamFinish()
yield StreamFinish()