Skip to content

Commit 9951dc7

Browse files
Algorithm5838github-actions[bot]
authored andcommitted
fix: correct token usage accounting
1 parent e6ff531 commit 9951dc7

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

backend/open_webui/models/chat_messages.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from sqlalchemy import select, delete, func, cast, Integer, distinct
77
from sqlalchemy.ext.asyncio import AsyncSession
88
from open_webui.internal.db import Base, get_async_db_context
9-
from open_webui.utils.response import merge_usage, normalize_usage
9+
from open_webui.utils.response import normalize_usage
1010
from pydantic import BaseModel, ConfigDict
1111
from sqlalchemy import (
1212
JSON,
@@ -200,11 +200,10 @@ async def upsert_message(
200200
existing.error = data.get('error')
201201
if 'context_summary' in data or 'contextSummary' in data:
202202
existing.context_summary = data.get('context_summary') or data.get('contextSummary')
203-
# Extract and normalize usage
203+
# Full snapshot from the middleware (sole accumulator); overwrite, don't merge.
204204
usage = get_usage(data)
205205
if usage:
206-
existing_usage = normalize_usage(existing.usage or {}) if existing.usage else {}
207-
existing.usage = existing_usage if usage == existing_usage else merge_usage(existing_usage, usage)
206+
existing.usage = usage
208207
existing.updated_at = now
209208
await db.commit()
210209
await db.refresh(existing)

backend/open_webui/utils/middleware.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3895,7 +3895,12 @@ def set_last_text(out, text):
38953895
else:
38963896
output = []
38973897

3898-
usage = None
3898+
# Continue re-sends prior context as prompt; input_tokens is cumulative across calls, not a double-count.
3899+
usage = (
3900+
normalize_usage(message['usage'])
3901+
if existing_output and message and message.get('usage')
3902+
else None
3903+
)
38993904
prior_output = []
39003905
last_response_id = None
39013906

0 commit comments

Comments
 (0)