Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions changelog.d/activity-monitor-slowness.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
category: Fixes
---

**Fix admin dashboard slowness from response payload bloat**: the session-detail
API no longer re-sends the full cumulative conversation history inside every
turn (response payload is now O(total messages) instead of O(turns^2); the
dedup the activity-monitor frontend previously did client-side moved
server-side via `request_delta_start`), and the session-list queries fetch
preview/model payloads only for the page's sessions instead of probing every
stored request payload in the table. Markdown/JSONL exports also stop
repeating prior turns' history inside each turn.
11 changes: 11 additions & 0 deletions src/luthien_proxy/history/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,17 @@ class ConversationTurn(BaseModel):
original_response_messages: list[ConversationMessage] | None = None
# Request params (everything except messages/system, which are already parsed)
request_params: dict[str, Any] | None = None
# Index into request_messages where THIS turn's new messages begin.
# Agent clients (e.g. Claude Code) re-send the full conversation history on
# every request, so raw per-turn request payloads are cumulative. To keep
# the response payload O(total messages) instead of O(turns^2), the service
# strips the re-sent prefix from request_messages for unmodified turns
# (request_delta_start stays 0 and request_messages holds only the new
# messages). For policy-modified turns the full arrays are kept so
# original-vs-final diffs still line up, and request_delta_start marks
# where the new messages start. Clients should render
# request_messages[request_delta_start:].
request_delta_start: int = 0


class SessionSummary(BaseModel):
Expand Down
Loading
Loading