mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-12 08:46:02 +00:00
Feat/monitor (#1928)
* feat: add monitor * feat: fix tab * feat: work * feat: not reliable monitor * feat: enhance monitoring page layout with integrated filters and refresh button * feat: add support for runner recording * feat: add jump button & alignment * feat: new * fix: not show query variables in local agent * fix: pnpm lint and python ruff check * fix: ruff fromat * chore: remove unnecessary migration * style: optimize monitoring page layout and fix sticky filter issues - Enhanced metric cards with gradient backgrounds and hover effects - Increased traffic chart height from 200px to 300px - Adjusted grid layout and spacing for better visual appeal - Fixed sticky filter area to properly cover parent padding without transparent gaps - Used negative margins and positioning to eliminate scrolling artifacts - Matched padding/margins with other pages (pipelines, bots) for consistency - Removed duplicate title/subtitle from page content - Added cursor-pointer styling to tab triggers - Removed border between tab list and tab content Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: apply prettier formatting to monitoring components - Fixed indentation and spacing in MetricCard.tsx - Fixed formatting in TrafficChart.tsx - Applied prettier formatting to page.tsx Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: update HomeSidebar to trigger action on child selection and localize monitoring titles * refactor: streamline LLM and embedding invocation methods * feat: add embedding model monitor * fix: database version * chore: simplify pnpm-lock.yaml formatting --------- Co-authored-by: Junyan Qin <rockchinq@gmail.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -276,6 +276,10 @@ const enUS = {
|
||||
allLevels: 'All Levels',
|
||||
selectLevel: 'Select Level',
|
||||
levelsSelected: 'levels selected',
|
||||
viewDetailedLogs: 'View Detailed Logs',
|
||||
viewDetails: 'Details',
|
||||
collapse: 'Collapse',
|
||||
imagesAttached: 'image(s) attached',
|
||||
},
|
||||
plugins: {
|
||||
title: 'Extensions',
|
||||
@@ -802,6 +806,140 @@ const enUS = {
|
||||
spaceEmailMismatch:
|
||||
'Space login email does not match the local account email',
|
||||
},
|
||||
monitoring: {
|
||||
title: 'Monitoring',
|
||||
description: 'Monitor bot activities, LLM calls, and system performance',
|
||||
overview: 'Overview',
|
||||
totalMessages: 'Total Messages',
|
||||
llmCallsCount: 'LLM Calls',
|
||||
modelCallsCount: 'Model Calls',
|
||||
successRate: 'Success Rate',
|
||||
activeSessions: 'Active Sessions',
|
||||
last24Hours: 'Last 24 hours',
|
||||
filters: {
|
||||
title: 'Filters',
|
||||
bot: 'Bot',
|
||||
pipeline: 'Pipeline',
|
||||
allBots: 'All Bots',
|
||||
selectBot: 'Select Bot',
|
||||
allPipelines: 'All Pipelines',
|
||||
selectPipeline: 'Select Pipeline',
|
||||
loading: 'Loading...',
|
||||
timeRange: 'Time Range',
|
||||
customRange: 'Custom Range',
|
||||
from: 'From',
|
||||
to: 'To',
|
||||
apply: 'Apply',
|
||||
reset: 'Reset Filters',
|
||||
lastHour: 'Last 1 hour',
|
||||
last6Hours: 'Last 6 hours',
|
||||
last24Hours: 'Last 24 hours',
|
||||
last7Days: 'Last 7 days',
|
||||
last30Days: 'Last 30 days',
|
||||
},
|
||||
tabs: {
|
||||
messages: 'Message Records',
|
||||
llmCalls: 'LLM Calls',
|
||||
embeddingCalls: 'Embedding Calls',
|
||||
modelCalls: 'Model Calls',
|
||||
sessions: 'Session Analysis',
|
||||
errors: 'Error Logs',
|
||||
},
|
||||
messageList: {
|
||||
timestamp: 'Timestamp',
|
||||
bot: 'Bot',
|
||||
pipeline: 'Pipeline',
|
||||
message: 'Message',
|
||||
sessionId: 'Session ID',
|
||||
status: 'Status',
|
||||
actions: 'Actions',
|
||||
viewDetails: 'View Details',
|
||||
copyId: 'Copy ID',
|
||||
noMessages: 'No messages found',
|
||||
noMessagesDescription: 'Try adjusting your filters or check back later',
|
||||
loading: 'Loading messages...',
|
||||
loadMore: 'Load More',
|
||||
autoRefresh: 'Auto Refresh',
|
||||
platform: 'Role',
|
||||
user: 'User',
|
||||
level: 'Level',
|
||||
runner: 'Runner',
|
||||
viewConversation: 'View Conversation',
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'LLM Calls',
|
||||
model: 'Model',
|
||||
tokens: 'Tokens',
|
||||
duration: 'Duration',
|
||||
cost: 'Cost',
|
||||
noData: 'No LLM calls found',
|
||||
inputTokens: 'Input Tokens',
|
||||
outputTokens: 'Output Tokens',
|
||||
totalTokens: 'Total Tokens',
|
||||
avgDuration: 'Avg Duration',
|
||||
calls: 'Calls',
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding Calls',
|
||||
model: 'Model',
|
||||
tokens: 'Tokens',
|
||||
duration: 'Duration',
|
||||
noData: 'No embedding calls found',
|
||||
promptTokens: 'Prompt Tokens',
|
||||
totalTokens: 'Total Tokens',
|
||||
inputCount: 'Input Count',
|
||||
knowledgeBase: 'Knowledge Base',
|
||||
queryText: 'Query',
|
||||
},
|
||||
modelCalls: {
|
||||
title: 'Model Calls',
|
||||
llmModel: 'LLM',
|
||||
embeddingModel: 'Embedding',
|
||||
embeddingCall: 'Embedding',
|
||||
retrieveCall: 'Retrieve',
|
||||
noData: 'No model calls found',
|
||||
},
|
||||
sessions: {
|
||||
sessionId: 'Session ID',
|
||||
messageCount: 'Messages',
|
||||
duration: 'Duration',
|
||||
lastActivity: 'Last Activity',
|
||||
noSessions: 'No sessions found',
|
||||
startTime: 'Start Time',
|
||||
messageStats: 'Message Statistics',
|
||||
totalMessages: 'Total Messages',
|
||||
successMessages: 'Successful',
|
||||
errorMessages: 'Failed',
|
||||
llmStats: 'LLM Statistics',
|
||||
noData: 'Session not found',
|
||||
},
|
||||
errors: {
|
||||
title: 'Errors',
|
||||
errorType: 'Error Type',
|
||||
errorMessage: 'Error Message',
|
||||
occurredAt: 'Occurred At',
|
||||
noErrors: 'No errors found',
|
||||
stackTrace: 'Stack Trace',
|
||||
},
|
||||
queries: {
|
||||
title: 'Queries',
|
||||
},
|
||||
messageDetails: {
|
||||
noData: 'No LLM calls or errors for this query',
|
||||
},
|
||||
queryVariables: {
|
||||
title: 'Query Variables',
|
||||
},
|
||||
trafficChart: {
|
||||
title: 'Traffic Overview',
|
||||
messages: 'Messages',
|
||||
llmCalls: 'LLM Calls',
|
||||
noData: 'No traffic data available',
|
||||
},
|
||||
viewMonitoring: 'View Monitoring',
|
||||
refreshData: 'Refresh Data',
|
||||
exportData: 'Export Data',
|
||||
},
|
||||
};
|
||||
|
||||
export default enUS;
|
||||
|
||||
@@ -811,6 +811,123 @@ const jaJP = {
|
||||
spaceEmailMismatch:
|
||||
'Spaceログインのメールアドレスがローカルアカウントのメールアドレスと一致しません',
|
||||
},
|
||||
monitoring: {
|
||||
title: 'モニタリング',
|
||||
description:
|
||||
'ボットアクティビティ、LLM呼び出し、システムパフォーマンスを監視',
|
||||
overview: '概要',
|
||||
totalMessages: '総メッセージ数',
|
||||
llmCallsCount: 'LLM呼び出し',
|
||||
modelCallsCount: 'モデル呼び出し',
|
||||
successRate: '成功率',
|
||||
activeSessions: 'アクティブセッション',
|
||||
last24Hours: '過去24時間',
|
||||
filters: {
|
||||
title: 'フィルター',
|
||||
bot: 'ボット',
|
||||
pipeline: 'パイプライン',
|
||||
allBots: 'すべてのボット',
|
||||
selectBot: 'ボットを選択',
|
||||
allPipelines: 'すべてのパイプライン',
|
||||
selectPipeline: 'パイプラインを選択',
|
||||
loading: '読み込み中...',
|
||||
timeRange: '時間範囲',
|
||||
customRange: 'カスタム範囲',
|
||||
from: '開始',
|
||||
to: '終了',
|
||||
apply: '適用',
|
||||
reset: 'フィルターをリセット',
|
||||
lastHour: '過去1時間',
|
||||
last6Hours: '過去6時間',
|
||||
last24Hours: '過去24時間',
|
||||
last7Days: '過去7日間',
|
||||
last30Days: '過去30日間',
|
||||
},
|
||||
tabs: {
|
||||
messages: 'メッセージ記録',
|
||||
llmCalls: 'LLM呼び出し',
|
||||
embeddingCalls: 'Embedding呼び出し',
|
||||
modelCalls: 'モデル呼び出し',
|
||||
sessions: 'セッション分析',
|
||||
errors: 'エラーログ',
|
||||
},
|
||||
messageList: {
|
||||
timestamp: 'タイムスタンプ',
|
||||
bot: 'ボット',
|
||||
pipeline: 'パイプライン',
|
||||
message: 'メッセージ',
|
||||
sessionId: 'セッションID',
|
||||
status: 'ステータス',
|
||||
actions: 'アクション',
|
||||
viewDetails: '詳細を表示',
|
||||
copyId: 'IDをコピー',
|
||||
noMessages: 'メッセージが見つかりません',
|
||||
noMessagesDescription: 'フィルターを調整するか、後で確認してください',
|
||||
loading: 'メッセージを読み込んでいます...',
|
||||
loadMore: 'もっと読み込む',
|
||||
autoRefresh: '自動更新',
|
||||
platform: 'プラットフォーム',
|
||||
user: 'ユーザー',
|
||||
level: 'レベル',
|
||||
runner: 'ランナー',
|
||||
viewConversation: '会話詳細を表示',
|
||||
},
|
||||
llmCalls: {
|
||||
model: 'モデル',
|
||||
tokens: 'トークン数',
|
||||
duration: '期間',
|
||||
cost: 'コスト',
|
||||
noData: 'LLM呼び出し記録が見つかりません',
|
||||
inputTokens: '入力トークン',
|
||||
outputTokens: '出力トークン',
|
||||
totalTokens: '合計トークン数',
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding呼び出し',
|
||||
model: 'モデル',
|
||||
tokens: 'トークン数',
|
||||
duration: '期間',
|
||||
noData: 'Embedding呼び出し記録が見つかりません',
|
||||
promptTokens: '入力トークン',
|
||||
totalTokens: '合計トークン数',
|
||||
inputCount: '入力数',
|
||||
knowledgeBase: 'ナレッジベース',
|
||||
queryText: 'クエリ',
|
||||
},
|
||||
modelCalls: {
|
||||
title: 'モデル呼び出し',
|
||||
llmModel: '対話モデル',
|
||||
embeddingModel: '埋め込みモデル',
|
||||
embeddingCall: '埋め込み呼び出し',
|
||||
retrieveCall: '検索呼び出し',
|
||||
noData: 'モデル呼び出し記録が見つかりません',
|
||||
},
|
||||
sessions: {
|
||||
sessionId: 'セッションID',
|
||||
messageCount: 'メッセージ数',
|
||||
duration: '期間',
|
||||
lastActivity: '最終アクティビティ',
|
||||
noSessions: 'セッションが見つかりません',
|
||||
startTime: '開始時刻',
|
||||
},
|
||||
errors: {
|
||||
errorType: 'エラータイプ',
|
||||
errorMessage: 'エラーメッセージ',
|
||||
occurredAt: '発生時刻',
|
||||
noErrors: 'エラーが見つかりません',
|
||||
stackTrace: 'スタックトレース',
|
||||
title: 'エラー',
|
||||
},
|
||||
messageDetails: {
|
||||
noData: 'このクエリにはLLM呼び出しやエラーがありません',
|
||||
},
|
||||
queryVariables: {
|
||||
title: 'クエリ変数',
|
||||
},
|
||||
viewMonitoring: 'モニタリングを表示',
|
||||
refreshData: 'データを更新',
|
||||
exportData: 'データをエクスポート',
|
||||
},
|
||||
};
|
||||
|
||||
export default jaJP;
|
||||
|
||||
@@ -265,6 +265,10 @@ const zhHans = {
|
||||
allLevels: '全部级别',
|
||||
selectLevel: '选择级别',
|
||||
levelsSelected: '个级别已选',
|
||||
viewDetailedLogs: '查看详细日志',
|
||||
viewDetails: '详情',
|
||||
collapse: '收起',
|
||||
imagesAttached: '张图片',
|
||||
},
|
||||
plugins: {
|
||||
title: '插件扩展',
|
||||
@@ -729,7 +733,7 @@ const zhHans = {
|
||||
},
|
||||
llm: {
|
||||
llmModels: '对话模型',
|
||||
description: '管理 LLM 模型,用于对话消息生成',
|
||||
description: '管理 LLM 模型,用于对话消息生成',
|
||||
extraParametersDescription:
|
||||
'将在请求时附加到请求体中,如 max_tokens, temperature, top_p 等',
|
||||
},
|
||||
@@ -763,6 +767,140 @@ const zhHans = {
|
||||
setPasswordHint: '设置密码后可使用邮箱密码登录',
|
||||
spaceEmailMismatch: 'Space登录账号邮箱与本实例账号邮箱不匹配',
|
||||
},
|
||||
monitoring: {
|
||||
title: '日志监控',
|
||||
description: '查看机器人活动、LLM调用和系统性能',
|
||||
overview: '概览',
|
||||
totalMessages: '总消息数',
|
||||
llmCallsCount: 'LLM调用',
|
||||
modelCallsCount: '模型调用',
|
||||
successRate: '成功率',
|
||||
activeSessions: '活跃会话',
|
||||
last24Hours: '最近24小时',
|
||||
filters: {
|
||||
title: '筛选',
|
||||
bot: '机器人',
|
||||
pipeline: '流水线',
|
||||
allBots: '全部机器人',
|
||||
selectBot: '选择机器人',
|
||||
allPipelines: '全部流水线',
|
||||
selectPipeline: '选择流水线',
|
||||
loading: '加载中...',
|
||||
timeRange: '时间范围',
|
||||
customRange: '自定义范围',
|
||||
from: '从',
|
||||
to: '到',
|
||||
apply: '应用',
|
||||
reset: '重置筛选',
|
||||
lastHour: '最近1小时',
|
||||
last6Hours: '最近6小时',
|
||||
last24Hours: '最近24小时',
|
||||
last7Days: '最近7天',
|
||||
last30Days: '最近30天',
|
||||
},
|
||||
tabs: {
|
||||
messages: '消息记录',
|
||||
llmCalls: 'LLM调用',
|
||||
embeddingCalls: 'Embedding调用',
|
||||
modelCalls: '模型调用',
|
||||
sessions: '会话分析',
|
||||
errors: '错误日志',
|
||||
},
|
||||
messageList: {
|
||||
timestamp: '时间戳',
|
||||
bot: '机器人',
|
||||
pipeline: '流水线',
|
||||
message: '消息',
|
||||
sessionId: '会话ID',
|
||||
status: '状态',
|
||||
actions: '操作',
|
||||
viewDetails: '查看详情',
|
||||
copyId: '复制ID',
|
||||
noMessages: '未找到消息',
|
||||
noMessagesDescription: '尝试调整筛选条件或稍后查看',
|
||||
loading: '加载消息中...',
|
||||
loadMore: '加载更多',
|
||||
autoRefresh: '自动刷新',
|
||||
platform: '角色',
|
||||
user: '用户',
|
||||
level: '级别',
|
||||
runner: '执行器',
|
||||
viewConversation: '显示对话详情',
|
||||
},
|
||||
llmCalls: {
|
||||
title: 'LLM调用',
|
||||
model: '模型',
|
||||
tokens: 'Token数',
|
||||
duration: '持续时间',
|
||||
cost: '成本',
|
||||
noData: '未找到LLM调用记录',
|
||||
inputTokens: '输入Token',
|
||||
outputTokens: '输出Token',
|
||||
totalTokens: '总Token数',
|
||||
avgDuration: '平均耗时',
|
||||
calls: '调用次数',
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding调用',
|
||||
model: '模型',
|
||||
tokens: 'Token数',
|
||||
duration: '持续时间',
|
||||
noData: '未找到Embedding调用记录',
|
||||
promptTokens: '输入Token',
|
||||
totalTokens: '总Token数',
|
||||
inputCount: '输入数量',
|
||||
knowledgeBase: '知识库',
|
||||
queryText: '查询文本',
|
||||
},
|
||||
modelCalls: {
|
||||
title: '模型调用',
|
||||
llmModel: '对话模型',
|
||||
embeddingModel: '嵌入模型',
|
||||
embeddingCall: '嵌入调用',
|
||||
retrieveCall: '检索调用',
|
||||
noData: '未找到模型调用记录',
|
||||
},
|
||||
sessions: {
|
||||
sessionId: '会话ID',
|
||||
messageCount: '消息数',
|
||||
duration: '持续时间',
|
||||
lastActivity: '最后活动',
|
||||
noSessions: '未找到会话',
|
||||
startTime: '开始时间',
|
||||
messageStats: '消息统计',
|
||||
totalMessages: '总消息数',
|
||||
successMessages: '成功',
|
||||
errorMessages: '失败',
|
||||
llmStats: 'LLM统计',
|
||||
noData: '会话未找到',
|
||||
},
|
||||
errors: {
|
||||
title: '错误',
|
||||
errorType: '错误类型',
|
||||
errorMessage: '错误消息',
|
||||
occurredAt: '发生时间',
|
||||
noErrors: '未找到错误',
|
||||
stackTrace: '堆栈追踪',
|
||||
},
|
||||
queries: {
|
||||
title: '查询记录',
|
||||
},
|
||||
messageDetails: {
|
||||
noData: '此查询没有LLM调用或错误记录',
|
||||
},
|
||||
queryVariables: {
|
||||
title: '查询变量',
|
||||
},
|
||||
trafficChart: {
|
||||
title: '流量概览',
|
||||
messages: '消息数',
|
||||
llmCalls: 'LLM调用',
|
||||
noData: '暂无流量数据',
|
||||
},
|
||||
viewMonitoring: '查看日志监控',
|
||||
refreshData: '刷新数据',
|
||||
exportData: '导出数据',
|
||||
},
|
||||
};
|
||||
|
||||
export default zhHans;
|
||||
|
||||
@@ -760,6 +760,122 @@ const zhHant = {
|
||||
setPasswordHint: '設定密碼後可使用電子郵件密碼登入',
|
||||
spaceEmailMismatch: 'Space登入帳號電子郵件與本實例帳號電子郵件不匹配',
|
||||
},
|
||||
monitoring: {
|
||||
title: '日誌監控',
|
||||
description: '監控機器人活動、LLM調用和系統效能',
|
||||
overview: '概覽',
|
||||
totalMessages: '總訊息數',
|
||||
llmCallsCount: 'LLM調用',
|
||||
modelCallsCount: '模型調用',
|
||||
successRate: '成功率',
|
||||
activeSessions: '活躍會話',
|
||||
last24Hours: '最近24小時',
|
||||
filters: {
|
||||
title: '篩選',
|
||||
bot: '機器人',
|
||||
pipeline: '流水線',
|
||||
allBots: '全部機器人',
|
||||
selectBot: '選擇機器人',
|
||||
allPipelines: '全部流水線',
|
||||
selectPipeline: '選擇流水線',
|
||||
loading: '載入中...',
|
||||
timeRange: '時間範圍',
|
||||
customRange: '自訂範圍',
|
||||
from: '從',
|
||||
to: '到',
|
||||
apply: '套用',
|
||||
reset: '重置篩選',
|
||||
lastHour: '最近1小時',
|
||||
last6Hours: '最近6小時',
|
||||
last24Hours: '最近24小時',
|
||||
last7Days: '最近7天',
|
||||
last30Days: '最近30天',
|
||||
},
|
||||
tabs: {
|
||||
messages: '訊息記錄',
|
||||
llmCalls: 'LLM調用',
|
||||
embeddingCalls: 'Embedding調用',
|
||||
modelCalls: '模型調用',
|
||||
sessions: '會話分析',
|
||||
errors: '錯誤日誌',
|
||||
},
|
||||
messageList: {
|
||||
timestamp: '時間戳記',
|
||||
bot: '機器人',
|
||||
pipeline: '流水線',
|
||||
message: '訊息',
|
||||
sessionId: '會話ID',
|
||||
status: '狀態',
|
||||
actions: '操作',
|
||||
viewDetails: '查看詳情',
|
||||
copyId: '複製ID',
|
||||
noMessages: '未找到訊息',
|
||||
noMessagesDescription: '嘗試調整篩選條件或稍後查看',
|
||||
loading: '載入訊息中...',
|
||||
loadMore: '載入更多',
|
||||
autoRefresh: '自動重新整理',
|
||||
platform: '平台',
|
||||
user: '使用者',
|
||||
level: '級別',
|
||||
runner: '執行器',
|
||||
viewConversation: '顯示對話詳情',
|
||||
},
|
||||
llmCalls: {
|
||||
model: '模型',
|
||||
tokens: '代幣數',
|
||||
duration: '持續時間',
|
||||
cost: '成本',
|
||||
noData: '未找到LLM調用記錄',
|
||||
inputTokens: '輸入代幣',
|
||||
outputTokens: '輸出代幣',
|
||||
totalTokens: '總代幣數',
|
||||
},
|
||||
embeddingCalls: {
|
||||
title: 'Embedding調用',
|
||||
model: '模型',
|
||||
tokens: '代幣數',
|
||||
duration: '持續時間',
|
||||
noData: '未找到Embedding調用記錄',
|
||||
promptTokens: '輸入代幣',
|
||||
totalTokens: '總代幣數',
|
||||
inputCount: '輸入數量',
|
||||
knowledgeBase: '知識庫',
|
||||
queryText: '查詢文字',
|
||||
},
|
||||
modelCalls: {
|
||||
title: '模型調用',
|
||||
llmModel: '對話模型',
|
||||
embeddingModel: '嵌入模型',
|
||||
embeddingCall: '嵌入調用',
|
||||
retrieveCall: '檢索調用',
|
||||
noData: '未找到模型調用記錄',
|
||||
},
|
||||
sessions: {
|
||||
sessionId: '會話ID',
|
||||
messageCount: '訊息數',
|
||||
duration: '持續時間',
|
||||
lastActivity: '最後活動',
|
||||
noSessions: '未找到會話',
|
||||
startTime: '開始時間',
|
||||
},
|
||||
errors: {
|
||||
errorType: '錯誤類型',
|
||||
errorMessage: '錯誤訊息',
|
||||
occurredAt: '發生時間',
|
||||
noErrors: '未找到錯誤',
|
||||
stackTrace: '堆疊追蹤',
|
||||
title: '錯誤',
|
||||
},
|
||||
messageDetails: {
|
||||
noData: '此查詢沒有LLM調用或錯誤記錄',
|
||||
},
|
||||
queryVariables: {
|
||||
title: '查詢變數',
|
||||
},
|
||||
viewMonitoring: '查看日誌監控',
|
||||
refreshData: '重新整理資料',
|
||||
exportData: '匯出資料',
|
||||
},
|
||||
};
|
||||
|
||||
export default zhHant;
|
||||
|
||||
Reference in New Issue
Block a user