Skip to content

Commit 835c361

Browse files
authored
Merge pull request #406 from Mng-dev-ai/fix/context-usage-bridge-providers
Fix missing context usage for OpenAI/OpenRouter providers
2 parents 2fcfcb1 + bb0231c commit 835c361

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

backend/app/services/streaming/processor.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,22 @@ def emit_events_for_message(
9393
if isinstance(message, ResultMessage):
9494
if message.total_cost_usd is not None:
9595
self.total_cost_usd = message.total_cost_usd
96-
# Only use ResultMessage usage if we have no per-turn usage from
97-
# AssistantMessage. ResultMessage.usage contains cumulative totals
98-
# across all API calls, not the current context window size.
99-
if message.usage is not None and self.usage is None:
100-
self.usage = message.usage
96+
# Use ResultMessage usage when we have no per-turn usage from
97+
# AssistantMessage, or when AssistantMessage reported zero input
98+
# tokens (bridge providers like OpenAI/OpenRouter only include
99+
# real usage at stream end, not in per-turn messages).
100+
if message.usage is not None:
101+
existing_input = (
102+
(
103+
self.usage.get("input_tokens", 0)
104+
+ self.usage.get("cache_creation_input_tokens", 0)
105+
+ self.usage.get("cache_read_input_tokens", 0)
106+
)
107+
if self.usage
108+
else 0
109+
)
110+
if existing_input == 0:
111+
self.usage = message.usage
101112

102113
@staticmethod
103114
def _extract_command_stdout(content: str | list[Any]) -> str | None:

0 commit comments

Comments
 (0)