[Bug]: Session trace sidebar in Log Details drawer silently truncates to first 50 entries

该问题出现在 LiteLLM 的 UI 仪表盘中。当用户在 Logs 标签页中点击包含 session_id 的日志行时,右侧会打开 Log Details 抽屉。左侧的 Session 侧边栏会展示该 session_id 对应的所有消费日志。对于包含超过 50 条日志的长会话(例如大量的工具/

[Bug]: Session trace sidebar in Log Details drawer silently truncates to first 50 entries

[Bug]: Session trace sidebar in Log Details drawer silently truncates to first 50 entries

快速结论:该问题出现在 LiteLLM 仪表盘的 Logs 页面,当您通过 session_id 打开 Log Details 抽屉时,左侧的 Session trace 侧边栏仅显示前 50 条日志记录,其余日志被静默丢弃,且无任何分页提示或导航控件。优先检查前端代码 sessionSpendLogsCall 是否传递了分页参数,并确认 LogDetailsDrawer 组件是否处理了 total_pages 字段。

问题场景

该问题出现在 LiteLLM 的 UI 仪表盘中。当用户在 Logs 标签页中点击包含 session_id 的日志行时,右侧会打开 Log Details 抽屉。左侧的 Session 侧边栏会展示该 session_id 对应的所有消费日志。对于包含超过 50 条日志的长会话(例如大量的工具/ MCP 调用链或多轮对话),侧边栏仅显示最早产生的 50 条记录,无法加载后续条目。

报错原文

# DevTools → Network → /spend/logs/session/ui?session_id=
# Request URL has no page/page_size params.
# Response (truncated):
{
  "data": [ ... 50 items ordered by startTime ASC ... ],
  "total": 137,
  "page": 1,
  "page_size": 50,
  "total_pages": 3
}

原因分析

根本原因在前端,而非后端。后端接口 GET /spend/logs/session/ui 已支持分页(pagepage_size 参数,并返回 totaltotal_pages 字段),默认 page_size=50,最大 100,按 startTime ASC 排序。但是,前端辅助函数 sessionSpendLogsCall(位于 ui/litellm-dashboard/src/components/networking.tsx)在调用该接口时未传递任何分页参数,因此始终只获取第 1 页(即最早 50 条)。组件 LogDetailsDrawer 直接消费 response.data,未读取 total_pages 字段,因此无分页控件的展示。

环境排查

  • 确认 LiteLLM 版本 (该问题在 v1.86.0 及后续版本中出现,v1.88.0-rc.1 用户也报告了相同问题)。
  • 确认 store_prompts_in_spend_logs 是否启用(问题在启用时更明显,但非必需)。
  • 确认后端接口 /spend/logs/session/ui 是否能返回 total_pages 大于 1 的响应。

解决步骤

  1. 升级到修复版本: 该问题已在 litellm_internal_staging 分支(默认分支)中修复,合并于提交 3b40ac987f(通过 PR #30021)。建议升级至包含该修复的标签版本;如果使用固定版本(例如 v1.86.1),请等待官方发布。
  2. 如果无法升级,可尝试后端临时方案: 修改 spend_management_endpoints.py 中的 ui_view_session_spend_logs 端点,提高 page_size 的默认值(默认为 50,上限 le=100),将上限调高至 100,使单次请求即可返回整条会话的全部日志(注意这会增加一次 API 返回的数据量)。
  3. 前端代码修复(供参考):
    • 修改 sessionSpendLogsCall,使其接受 page/page_size 参数。
    • 修改 LogDetailsDrawer.tsx,在首次获取第 1 页后,读取 total_pages,并遍历获取后续所有页面,将结果累积(当前实现的上限为 SESSION_PAGE_SIZE=100 × MAX_SESSION_PAGES=50 = 5,000 条日志)。

验证方法

打开包含超过 50 条日志的会话的 Log Details 抽屉,确认左侧 Session 侧边栏能够完整显示所有日志条目(通过滚动或分页控件导航),且不再出现数据静默截断。同时检查 DevTools 网络请求,确认 /spend/logs/session/ui 请求中包含了正确的 page 参数,或响应中的 total_pages 被正确使用。

参考来源

BerriAI/litellm #28224

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 9017

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注