@linxiraos/pi-stats 1.1.27 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -7
- package/build.ts +4 -0
- package/dist/client/favicon.ico +0 -0
- package/dist/client/index.css +1 -1
- package/dist/client/index.html +1 -0
- package/dist/client/index.js +96 -96
- package/dist/types/aggregator.d.ts +4 -1
- package/dist/types/client/api.d.ts +5 -1
- package/dist/types/client/app/nav.d.ts +5 -2
- package/dist/types/client/data/formatters.d.ts +5 -2
- package/dist/types/client/data/live.d.ts +16 -11
- package/dist/types/client/data/query-store.d.ts +39 -0
- package/dist/types/client/data/query.d.ts +10 -5
- package/dist/types/client/data/range.d.ts +4 -3
- package/dist/types/client/i18n/format.d.ts +9 -0
- package/dist/types/client/i18n/index.d.ts +18 -0
- package/dist/types/client/i18n/messages/charts.d.ts +8 -0
- package/dist/types/client/i18n/messages/common.d.ts +153 -0
- package/dist/types/client/i18n/messages/costs.d.ts +92 -0
- package/dist/types/client/i18n/messages/en.d.ts +1255 -0
- package/dist/types/client/i18n/messages/errors.d.ts +78 -0
- package/dist/types/client/i18n/messages/frustration.d.ts +191 -0
- package/dist/types/client/i18n/messages/gain.d.ts +54 -0
- package/dist/types/client/i18n/messages/models.d.ts +94 -0
- package/dist/types/client/i18n/messages/nav.d.ts +46 -0
- package/dist/types/client/i18n/messages/overview.d.ts +80 -0
- package/dist/types/client/i18n/messages/projects.d.ts +84 -0
- package/dist/types/client/i18n/messages/providers.d.ts +142 -0
- package/dist/types/client/i18n/messages/requests.d.ts +72 -0
- package/dist/types/client/i18n/messages/tools.d.ts +119 -0
- package/dist/types/client/i18n/messages/traces.d.ts +144 -0
- package/dist/types/client/i18n/messages/ui.d.ts +44 -0
- package/dist/types/client/i18n/messages/zh-CN.d.ts +13 -0
- package/dist/types/client/i18n/types.d.ts +15 -0
- package/dist/types/client/traces/Minimap.d.ts +2 -0
- package/dist/types/client/traces/TimelineCanvas.d.ts +29 -8
- package/dist/types/client/traces/TranscriptList.d.ts +3 -1
- package/dist/types/db.d.ts +14 -21
- package/dist/types/embedded-client.d.ts +5 -0
- package/dist/types/frustration.d.ts +18 -9
- package/dist/types/live.d.ts +5 -3
- package/dist/types/locale.d.ts +16 -0
- package/dist/types/parser.d.ts +0 -17
- package/dist/types/rollup.d.ts +9 -1
- package/dist/types/server.d.ts +6 -0
- package/dist/types/shared-types.d.ts +7 -0
- package/dist/types/trace.d.ts +18 -6
- package/dist/types/types.d.ts +12 -0
- package/dist/types/user-metrics.d.ts +23 -1
- package/package.json +4 -4
- package/src/aggregator.ts +28 -11
- package/src/client/api.ts +40 -5
- package/src/client/app/LiveChip.tsx +14 -13
- package/src/client/app/Shell.tsx +19 -13
- package/src/client/app/ThemeToggle.tsx +4 -3
- package/src/client/app/nav.ts +19 -16
- package/src/client/data/formatters.ts +73 -13
- package/src/client/data/live.tsx +85 -45
- package/src/client/data/query-store.ts +108 -0
- package/src/client/data/query.ts +47 -56
- package/src/client/data/range.ts +34 -14
- package/src/client/data/series.ts +7 -1
- package/src/client/favicon.ico +0 -0
- package/src/client/i18n/format.ts +28 -0
- package/src/client/i18n/index.ts +53 -0
- package/src/client/i18n/messages/charts.ts +8 -0
- package/src/client/i18n/messages/common.ts +157 -0
- package/src/client/i18n/messages/costs.ts +104 -0
- package/src/client/i18n/messages/en.ts +40 -0
- package/src/client/i18n/messages/errors.ts +80 -0
- package/src/client/i18n/messages/frustration.ts +198 -0
- package/src/client/i18n/messages/gain.ts +54 -0
- package/src/client/i18n/messages/models.ts +94 -0
- package/src/client/i18n/messages/nav.ts +46 -0
- package/src/client/i18n/messages/overview.ts +90 -0
- package/src/client/i18n/messages/projects.ts +84 -0
- package/src/client/i18n/messages/providers.ts +165 -0
- package/src/client/i18n/messages/requests.ts +73 -0
- package/src/client/i18n/messages/tools.ts +120 -0
- package/src/client/i18n/messages/traces.ts +160 -0
- package/src/client/i18n/messages/ui.ts +46 -0
- package/src/client/i18n/messages/zh-CN.ts +43 -0
- package/src/client/i18n/types.ts +19 -0
- package/src/client/index.tsx +4 -0
- package/src/client/routes/CostsRoute.tsx +61 -48
- package/src/client/routes/ErrorsRoute.tsx +71 -47
- package/src/client/routes/FrustrationRoute.tsx +131 -116
- package/src/client/routes/GainRoute.tsx +42 -30
- package/src/client/routes/ModelsRoute.tsx +87 -71
- package/src/client/routes/OverviewRoute.tsx +107 -62
- package/src/client/routes/ProjectsRoute.tsx +71 -45
- package/src/client/routes/ProvidersRoute.tsx +149 -113
- package/src/client/routes/RequestsRoute.tsx +68 -45
- package/src/client/routes/ToolsRoute.tsx +105 -92
- package/src/client/routes/TracesRoute.tsx +25 -23
- package/src/client/styles.css +4 -2
- package/src/client/traces/AggregatesPanel.tsx +19 -8
- package/src/client/traces/Minimap.tsx +65 -27
- package/src/client/traces/SpanDrawer.tsx +46 -21
- package/src/client/traces/SummaryStrip.tsx +27 -11
- package/src/client/traces/TimelineCanvas.tsx +245 -116
- package/src/client/traces/TraceView.tsx +51 -36
- package/src/client/traces/TranscriptList.tsx +20 -11
- package/src/client/traces/traces.css +26 -0
- package/src/client/ui/JsonBlock.tsx +3 -2
- package/src/client/ui/Modal.tsx +3 -2
- package/src/client/ui/RequestDrawer.tsx +33 -30
- package/src/client/ui/SearchInput.tsx +2 -1
- package/src/client/ui/States.tsx +3 -2
- package/src/client/ui/Table.tsx +7 -3
- package/src/db.ts +150 -135
- package/src/embedded-client.ts +9 -0
- package/src/frustration.ts +9 -30
- package/src/live.ts +36 -11
- package/src/locale.ts +29 -0
- package/src/parser.ts +37 -72
- package/src/port-conflict.ts +1 -1
- package/src/prompts/judge/frustration.json +19 -0
- package/src/rollup.ts +41 -20
- package/src/server.ts +67 -27
- package/src/shared-types.ts +7 -0
- package/src/trace.ts +54 -40
- package/src/types.ts +12 -0
- package/src/user-metrics.ts +220 -6
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Errors copy. Keys are slugs (`errors.<name>`); the English string is the
|
|
3
|
+
* source of truth and `zh-CN` overrides it.
|
|
4
|
+
*/
|
|
5
|
+
export declare const errors: {
|
|
6
|
+
readonly en: {
|
|
7
|
+
readonly "errors.title": "Errors";
|
|
8
|
+
readonly "errors.description": "Failed model requests in {window}, grouped by error signature. Open a failure for its full payload.";
|
|
9
|
+
readonly "errors.footer": "Showing the latest {count} failures in {window}; older ones are not loaded.";
|
|
10
|
+
readonly "errors.loading": "Loading…";
|
|
11
|
+
readonly "errors.load-latest": "Load latest {count}";
|
|
12
|
+
readonly "errors.failures": "Failures";
|
|
13
|
+
readonly "errors.hint-in-window": "in {window}";
|
|
14
|
+
readonly "errors.hint-latest-loaded": "latest {count} loaded";
|
|
15
|
+
readonly "errors.signatures": "Signatures";
|
|
16
|
+
readonly "errors.signatures-hint": "Distinct error messages after normalizing ids and numbers";
|
|
17
|
+
readonly "errors.signatures-top": "top: {count} failures";
|
|
18
|
+
readonly "errors.affected-models": "Affected models";
|
|
19
|
+
readonly "errors.last-failure": "Last failure";
|
|
20
|
+
readonly "errors.none-in-window": "none in {window}";
|
|
21
|
+
readonly "errors.error-signatures": "Error signatures";
|
|
22
|
+
readonly "errors.signatures-card-description": "Same message with ids and counters normalized. Select one to filter the failures below.";
|
|
23
|
+
readonly "errors.empty-no-failures": "No failures in {window}";
|
|
24
|
+
readonly "errors.empty-all-succeeded": "Every request succeeded or was aborted.";
|
|
25
|
+
readonly "errors.by-model": "By model";
|
|
26
|
+
readonly "errors.by-model-description": "Failures per model. Select one to filter.";
|
|
27
|
+
readonly "errors.empty-no-affected-models": "No affected models";
|
|
28
|
+
readonly "errors.loading-failures": "Loading failures…";
|
|
29
|
+
readonly "errors.filtered-of-total": "{shown} of {total} failures, newest first";
|
|
30
|
+
readonly "errors.search-placeholder": "Message, model or project";
|
|
31
|
+
readonly "errors.no-match": "No failures match";
|
|
32
|
+
readonly "errors.no-match-hint": "Clear the search or the selected filters.";
|
|
33
|
+
readonly "errors.signature": "Signature";
|
|
34
|
+
readonly "errors.more-models": "+{count} more";
|
|
35
|
+
readonly "errors.last-seen": "Last seen";
|
|
36
|
+
readonly "errors.unknown-error": "Unknown error";
|
|
37
|
+
readonly "errors.group-meta": "{count} failures · first {first} · last {last}";
|
|
38
|
+
readonly "errors.open-latest": "Open latest";
|
|
39
|
+
readonly "errors.when": "When";
|
|
40
|
+
readonly "errors.cost-hint": "API-equivalent estimate";
|
|
41
|
+
};
|
|
42
|
+
readonly "zh-CN": {
|
|
43
|
+
readonly "errors.title": "错误";
|
|
44
|
+
readonly "errors.description": "在 {window} 内失败的模型请求,按错误签名分组。打开某条失败可查看完整载荷。";
|
|
45
|
+
readonly "errors.footer": "显示 {window} 内最新的 {count} 个失败;更早的未加载。";
|
|
46
|
+
readonly "errors.loading": "加载中…";
|
|
47
|
+
readonly "errors.load-latest": "加载最新 {count} 条";
|
|
48
|
+
readonly "errors.failures": "失败";
|
|
49
|
+
readonly "errors.hint-in-window": "{window} 内";
|
|
50
|
+
readonly "errors.hint-latest-loaded": "已加载最新 {count} 条";
|
|
51
|
+
readonly "errors.signatures": "签名";
|
|
52
|
+
readonly "errors.signatures-hint": "对 ID 和数字归一化后不同的错误消息";
|
|
53
|
+
readonly "errors.signatures-top": "最多:{count} 个失败";
|
|
54
|
+
readonly "errors.affected-models": "受影响的模型";
|
|
55
|
+
readonly "errors.last-failure": "最近一次失败";
|
|
56
|
+
readonly "errors.none-in-window": "{window} 内没有失败";
|
|
57
|
+
readonly "errors.error-signatures": "错误签名";
|
|
58
|
+
readonly "errors.signatures-card-description": "同一消息在归一化 ID 和计数后归为一组。选择一项可筛选下方的失败。";
|
|
59
|
+
readonly "errors.empty-no-failures": "{window} 内没有失败";
|
|
60
|
+
readonly "errors.empty-all-succeeded": "所有请求均已成功或被中止。";
|
|
61
|
+
readonly "errors.by-model": "按模型";
|
|
62
|
+
readonly "errors.by-model-description": "各模型的失败数。选择一项可筛选。";
|
|
63
|
+
readonly "errors.empty-no-affected-models": "没有受影响的模型";
|
|
64
|
+
readonly "errors.loading-failures": "正在加载失败…";
|
|
65
|
+
readonly "errors.filtered-of-total": "共 {total} 个失败,显示 {shown} 个,最新在前";
|
|
66
|
+
readonly "errors.search-placeholder": "消息、模型或项目";
|
|
67
|
+
readonly "errors.no-match": "没有匹配的失败";
|
|
68
|
+
readonly "errors.no-match-hint": "清除搜索内容或已选筛选条件。";
|
|
69
|
+
readonly "errors.signature": "签名";
|
|
70
|
+
readonly "errors.more-models": "另有 {count} 个";
|
|
71
|
+
readonly "errors.last-seen": "最近出现";
|
|
72
|
+
readonly "errors.unknown-error": "未知错误";
|
|
73
|
+
readonly "errors.group-meta": "{count} 个失败 · 首次 {first} · 最近 {last}";
|
|
74
|
+
readonly "errors.open-latest": "打开最新";
|
|
75
|
+
readonly "errors.when": "时间";
|
|
76
|
+
readonly "errors.cost-hint": "按 API 价格估算";
|
|
77
|
+
};
|
|
78
|
+
};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frustration page copy. Keys are slugs (`frustration.<name>`); the English
|
|
3
|
+
* string is the source of truth and `zh-CN` overrides it.
|
|
4
|
+
*
|
|
5
|
+
* Vocabulary fixed by the page's own model: announced frustration is
|
|
6
|
+
* 不耐烦 (Annoyed), the assistant-aimed subset is 针对助手 (At assistant), and
|
|
7
|
+
* its hostile part is 发怒 (Angry). "Unscored" (未评分) is deliberately not a
|
|
8
|
+
* weaker "not annoyed": it means no lexicon covers that message's language.
|
|
9
|
+
*/
|
|
10
|
+
export declare const frustration: {
|
|
11
|
+
readonly en: {
|
|
12
|
+
readonly "frustration.estimate-note": "Identical messages share one verdict, and verdicts are cached, so later runs only pay for new messages. Nothing is spent until you proceed.";
|
|
13
|
+
readonly "frustration.column-model-ids": "Model IDs";
|
|
14
|
+
readonly "frustration.column-messages": "Messages";
|
|
15
|
+
readonly "frustration.column-judged": "Judged";
|
|
16
|
+
readonly "frustration.model-versions": "Model versions";
|
|
17
|
+
readonly "frustration.no-model-match": "No model versions match the filters";
|
|
18
|
+
readonly "frustration.small-models-title": "Models with fewer than {count} messages have noisy rates";
|
|
19
|
+
readonly "frustration.hide-regex-title": "Hide models with under {share}% judged messages (rates from regex signals)";
|
|
20
|
+
readonly "frustration.hatch-title": "Under {share}% of these messages are judged; their rates come from regex signals";
|
|
21
|
+
readonly "frustration.regex-badge": "regex";
|
|
22
|
+
readonly "frustration.legend-annoyed-any": "Annoyed, any target";
|
|
23
|
+
readonly "frustration.table-description": "Rates are shares of user messages; rows follow the chart filters.";
|
|
24
|
+
readonly "frustration.running": "Running";
|
|
25
|
+
readonly "frustration.estimating": "Estimating cost…";
|
|
26
|
+
readonly "frustration.failed-n": "{count} failed";
|
|
27
|
+
readonly "frustration.cost-so-far": "cost so far";
|
|
28
|
+
readonly "frustration.elapsed": "elapsed {time}";
|
|
29
|
+
readonly "frustration.in-flight": "{count} in flight";
|
|
30
|
+
readonly "frustration.messages-progress": "{done}/{total} messages";
|
|
31
|
+
readonly "frustration.failed-suffix": ", {count} failed";
|
|
32
|
+
readonly "frustration.judge-with": " with {judge}";
|
|
33
|
+
readonly "frustration.in-time": " in {time}";
|
|
34
|
+
readonly "frustration.run-done-line": "Last run judged {progress}{failed}{judge}{elapsed} for {cost}.";
|
|
35
|
+
readonly "frustration.run-cancelled-line": "Last run cancelled after {progress}{failed}; spent {cost}.";
|
|
36
|
+
readonly "frustration.run-failed-line": "Last run failed after {progress}{failed}: {error}. Spent {cost}.";
|
|
37
|
+
readonly "frustration.title": "Frustration";
|
|
38
|
+
readonly "frustration.description": "How often your messages sound annoyed, per model version, in {window}.";
|
|
39
|
+
readonly "frustration.user-messages": "User messages";
|
|
40
|
+
readonly "frustration.user-messages-title": "User messages with prose in range";
|
|
41
|
+
readonly "frustration.judge-coverage": "Judge coverage";
|
|
42
|
+
readonly "frustration.judge-coverage-title": "Messages with a cached judge verdict; the rest use the regex lexicons";
|
|
43
|
+
readonly "frustration.coverage-hint": "{judged} judged · {regex} regex";
|
|
44
|
+
readonly "frustration.coverage-unscored": " · {count} unscored (no lexicon)";
|
|
45
|
+
readonly "frustration.unscored-line": "Messages in a language without a lexicon: {count} — unscored, not calm.";
|
|
46
|
+
readonly "frustration.annoyed": "Annoyed";
|
|
47
|
+
readonly "frustration.annoyed-title": "Messages annoyed at any target";
|
|
48
|
+
readonly "frustration.at-assistant": "At assistant";
|
|
49
|
+
readonly "frustration.at-assistant-title": "Messages annoyed at the assistant";
|
|
50
|
+
readonly "frustration.angry": "Angry";
|
|
51
|
+
readonly "frustration.angry-title": "Messages angry or hostile toward the assistant";
|
|
52
|
+
readonly "frustration.messages-n": "{count} messages";
|
|
53
|
+
readonly "frustration.judge-panel": "Judge classification";
|
|
54
|
+
readonly "frustration.judge-description": "Cached LLM verdicts replace the regex lexicons; unjudged messages fall back to regex signals. Messages in a language no lexicon covers are reported as unscored rather than counted as calm.";
|
|
55
|
+
readonly "frustration.classify": "Classify with judge";
|
|
56
|
+
readonly "frustration.proceed": "Proceed";
|
|
57
|
+
readonly "frustration.starting": "Starting…";
|
|
58
|
+
readonly "frustration.judge-running": "A judge run is in progress";
|
|
59
|
+
readonly "frustration.quote-title": "Quote the cost of judging every unjudged message in range";
|
|
60
|
+
readonly "frustration.estimated-cost": "Estimated cost";
|
|
61
|
+
readonly "frustration.unjudged-messages": "Unjudged unique messages";
|
|
62
|
+
readonly "frustration.prose-chars": "Prose characters";
|
|
63
|
+
readonly "frustration.input-tokens": "Estimated input tokens";
|
|
64
|
+
readonly "frustration.judge-model": "Judge";
|
|
65
|
+
readonly "frustration.all-judged": "Everything in this range is already judged. There is nothing left to classify.";
|
|
66
|
+
readonly "frustration.no-run-yet": "No judge run yet. Classify the unjudged messages to replace regex estimates with verdicts.";
|
|
67
|
+
readonly "frustration.last-run-done": "Last run done";
|
|
68
|
+
readonly "frustration.last-run-cancelled": "Last run cancelled";
|
|
69
|
+
readonly "frustration.last-run-failed": "Last run failed";
|
|
70
|
+
readonly "frustration.not-run-yet": "Not run yet";
|
|
71
|
+
readonly "frustration.regex-only": "Regex only";
|
|
72
|
+
readonly "frustration.cancel-run": "Cancel run";
|
|
73
|
+
readonly "frustration.cancelling": "Cancelling…";
|
|
74
|
+
readonly "frustration.run-judged": "Last run judged {progress}";
|
|
75
|
+
readonly "frustration.run-cancelled-after": "Last run cancelled after {progress}";
|
|
76
|
+
readonly "frustration.run-failed-after": "Last run failed after {progress}";
|
|
77
|
+
readonly "frustration.by-model": "Frustration by model version";
|
|
78
|
+
readonly "frustration.by-model-description": "Share of user messages per model version. Each bar reaches the annoyed rate; the subsets aimed at the assistant stack inside it.";
|
|
79
|
+
readonly "frustration.all-classes": "All";
|
|
80
|
+
readonly "frustration.every-model-class": "Every model class";
|
|
81
|
+
readonly "frustration.model-class": "Model class";
|
|
82
|
+
readonly "frustration.include-small": "Include < {count} messages";
|
|
83
|
+
readonly "frustration.unclassified": "unclassified";
|
|
84
|
+
readonly "frustration.legend-angry": "Angry at assistant";
|
|
85
|
+
readonly "frustration.legend-assistant": "At assistant, not angry";
|
|
86
|
+
readonly "frustration.legend-other": "Annoyed at other targets";
|
|
87
|
+
readonly "frustration.legend-trend": "At assistant trend";
|
|
88
|
+
readonly "frustration.legend-hatched": "Hatched: mostly regex fallback";
|
|
89
|
+
readonly "frustration.legend-hatched-run": "Hatched: mostly regex fallback (run the judge)";
|
|
90
|
+
readonly "frustration.legend-hue": "Hue = model family";
|
|
91
|
+
readonly "frustration.no-messages": "No user messages in this range";
|
|
92
|
+
readonly "frustration.try-longer-range": "Try a longer range.";
|
|
93
|
+
readonly "frustration.mostly-regex": "Mostly regex fallback: run the judge for accurate rates";
|
|
94
|
+
readonly "frustration.row-mostly-regex": " · mostly regex fallback";
|
|
95
|
+
readonly "frustration.stack-relation": "annoyed ⊇ atAssistant ⊇ angry";
|
|
96
|
+
readonly "frustration.unknown-error": "unknown error";
|
|
97
|
+
readonly "frustration.cancelled": "Cancelled";
|
|
98
|
+
readonly "frustration.failed": "Failed";
|
|
99
|
+
readonly "frustration.done": "Done";
|
|
100
|
+
};
|
|
101
|
+
readonly "zh-CN": {
|
|
102
|
+
readonly "frustration.estimate-note": "内容相同的消息共用一份结论,且结论会被缓存,因此后续运行只为新消息付费。在你开始之前不会产生任何费用。";
|
|
103
|
+
readonly "frustration.column-model-ids": "模型 ID";
|
|
104
|
+
readonly "frustration.column-messages": "消息数";
|
|
105
|
+
readonly "frustration.column-judged": "已评判";
|
|
106
|
+
readonly "frustration.model-versions": "模型版本";
|
|
107
|
+
readonly "frustration.no-model-match": "没有符合筛选条件的模型版本";
|
|
108
|
+
readonly "frustration.small-models-title": "消息少于 {count} 条的模型比例噪声较大";
|
|
109
|
+
readonly "frustration.hide-regex-title": "隐藏已评判比例低于 {share}% 的模型(其比例来自正则信号)";
|
|
110
|
+
readonly "frustration.hatch-title": "这些消息中已评判比例低于 {share}%,其比例来自正则信号";
|
|
111
|
+
readonly "frustration.regex-badge": "正则";
|
|
112
|
+
readonly "frustration.legend-annoyed-any": "不耐烦(任意对象)";
|
|
113
|
+
readonly "frustration.table-description": "比例为占用户消息的百分比;行跟随图表筛选。";
|
|
114
|
+
readonly "frustration.running": "运行中";
|
|
115
|
+
readonly "frustration.estimating": "正在估算费用…";
|
|
116
|
+
readonly "frustration.failed-n": "{count} 条失败";
|
|
117
|
+
readonly "frustration.cost-so-far": "当前费用";
|
|
118
|
+
readonly "frustration.elapsed": "已用时 {time}";
|
|
119
|
+
readonly "frustration.in-flight": "并发 {count}";
|
|
120
|
+
readonly "frustration.messages-progress": "{done}/{total} 条消息";
|
|
121
|
+
readonly "frustration.failed-suffix": ",{count} 条失败";
|
|
122
|
+
readonly "frustration.judge-with": ",评判模型 {judge}";
|
|
123
|
+
readonly "frustration.in-time": ",用时 {time}";
|
|
124
|
+
readonly "frustration.run-done-line": "上次运行评判了 {progress}{failed}{judge}{elapsed},花费 {cost}。";
|
|
125
|
+
readonly "frustration.run-cancelled-line": "上次运行在 {progress}{failed} 后取消,花费 {cost}。";
|
|
126
|
+
readonly "frustration.run-failed-line": "上次运行在 {progress}{failed} 后失败:{error}。花费 {cost}。";
|
|
127
|
+
readonly "frustration.title": "情绪压力";
|
|
128
|
+
readonly "frustration.description": "按模型版本统计你的消息有多不耐烦({window})。";
|
|
129
|
+
readonly "frustration.user-messages": "用户消息";
|
|
130
|
+
readonly "frustration.user-messages-title": "该时间范围内的用户消息(含正文)";
|
|
131
|
+
readonly "frustration.judge-coverage": "判据覆盖率";
|
|
132
|
+
readonly "frustration.judge-coverage-title": "已有缓存的评判模型结论的消息;其余使用正则词典";
|
|
133
|
+
readonly "frustration.coverage-hint": "{judged} 条已评判 · {regex} 条正则";
|
|
134
|
+
readonly "frustration.coverage-unscored": " · {count} 条未评分(无词典)";
|
|
135
|
+
readonly "frustration.unscored-line": "缺少对应词典的语言:{count} 条 —— 未评分,不代表平静。";
|
|
136
|
+
readonly "frustration.annoyed": "不耐烦";
|
|
137
|
+
readonly "frustration.annoyed-title": "对任何对象不耐烦的消息";
|
|
138
|
+
readonly "frustration.at-assistant": "针对助手";
|
|
139
|
+
readonly "frustration.at-assistant-title": "对助手不耐烦的消息";
|
|
140
|
+
readonly "frustration.angry": "发怒";
|
|
141
|
+
readonly "frustration.angry-title": "对助手发怒或带有敌意的消息";
|
|
142
|
+
readonly "frustration.messages-n": "{count} 条消息";
|
|
143
|
+
readonly "frustration.judge-panel": "评判模型分类";
|
|
144
|
+
readonly "frustration.judge-description": "缓存的模型结论会取代正则词典;未评判的消息回退到正则信号。缺少词典的语言显示为未评分,而不是判定为平静。";
|
|
145
|
+
readonly "frustration.classify": "用评判模型分类";
|
|
146
|
+
readonly "frustration.proceed": "开始";
|
|
147
|
+
readonly "frustration.starting": "正在开始…";
|
|
148
|
+
readonly "frustration.judge-running": "评判任务正在进行";
|
|
149
|
+
readonly "frustration.quote-title": "估算对该范围内所有未评判消息进行判定的成本";
|
|
150
|
+
readonly "frustration.estimated-cost": "预估费用";
|
|
151
|
+
readonly "frustration.unjudged-messages": "未评判的唯一消息";
|
|
152
|
+
readonly "frustration.prose-chars": "正文字符数";
|
|
153
|
+
readonly "frustration.input-tokens": "预估输入 Token";
|
|
154
|
+
readonly "frustration.judge-model": "评判模型";
|
|
155
|
+
readonly "frustration.all-judged": "该范围内已全部评判,没有需要分类的消息。";
|
|
156
|
+
readonly "frustration.no-run-yet": "尚未运行评判。对未评判的消息分类,即可用结论取代正则估算。";
|
|
157
|
+
readonly "frustration.last-run-done": "上次运行完成";
|
|
158
|
+
readonly "frustration.last-run-cancelled": "上次运行已取消";
|
|
159
|
+
readonly "frustration.last-run-failed": "上次运行失败";
|
|
160
|
+
readonly "frustration.not-run-yet": "尚未运行";
|
|
161
|
+
readonly "frustration.regex-only": "仅正则";
|
|
162
|
+
readonly "frustration.cancel-run": "取消运行";
|
|
163
|
+
readonly "frustration.cancelling": "正在取消…";
|
|
164
|
+
readonly "frustration.run-judged": "上次运行已评判 {progress}";
|
|
165
|
+
readonly "frustration.run-cancelled-after": "上次运行在 {progress} 后取消";
|
|
166
|
+
readonly "frustration.run-failed-after": "上次运行在 {progress} 后失败";
|
|
167
|
+
readonly "frustration.by-model": "按模型版本的情绪压力";
|
|
168
|
+
readonly "frustration.by-model-description": "各模型版本中用户消息的占比。每根柱子到达不耐烦比例,其中针对助手的子集叠在其内部。";
|
|
169
|
+
readonly "frustration.all-classes": "全部";
|
|
170
|
+
readonly "frustration.every-model-class": "所有模型类别";
|
|
171
|
+
readonly "frustration.model-class": "模型类别";
|
|
172
|
+
readonly "frustration.include-small": "包含少于 {count} 条消息";
|
|
173
|
+
readonly "frustration.unclassified": "未分类";
|
|
174
|
+
readonly "frustration.legend-angry": "对助手发怒";
|
|
175
|
+
readonly "frustration.legend-assistant": "针对助手但未发怒";
|
|
176
|
+
readonly "frustration.legend-other": "对其他对象不耐烦";
|
|
177
|
+
readonly "frustration.legend-trend": "针对助手趋势";
|
|
178
|
+
readonly "frustration.legend-hatched": "斜线:多为正则回退";
|
|
179
|
+
readonly "frustration.legend-hatched-run": "斜线:多为正则回退(运行评判)";
|
|
180
|
+
readonly "frustration.legend-hue": "色相 = 模型家族";
|
|
181
|
+
readonly "frustration.no-messages": "该时间范围内没有用户消息";
|
|
182
|
+
readonly "frustration.try-longer-range": "试试更长的时间范围。";
|
|
183
|
+
readonly "frustration.mostly-regex": "多为正则回退:运行评判以获得准确比例";
|
|
184
|
+
readonly "frustration.row-mostly-regex": " · 多为正则回退";
|
|
185
|
+
readonly "frustration.stack-relation": "不耐烦 ⊇ 针对助手 ⊇ 发怒";
|
|
186
|
+
readonly "frustration.unknown-error": "未知错误";
|
|
187
|
+
readonly "frustration.cancelled": "已取消";
|
|
188
|
+
readonly "frustration.failed": "失败";
|
|
189
|
+
readonly "frustration.done": "完成";
|
|
190
|
+
};
|
|
191
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gain copy. Keys are slugs (`gain.<name>`); the English string is the
|
|
3
|
+
* source of truth and `zh-CN` overrides it.
|
|
4
|
+
*/
|
|
5
|
+
export declare const gain: {
|
|
6
|
+
readonly en: {
|
|
7
|
+
readonly "gain.title": "Gain";
|
|
8
|
+
readonly "gain.description": "Tokens snapcompact kept out of context in {window}.";
|
|
9
|
+
readonly "gain.description-scoped": "Tokens snapcompact kept out of context for {project} in {window}.";
|
|
10
|
+
readonly "gain.all-projects": "All projects";
|
|
11
|
+
readonly "gain.empty-title": "No savings recorded in {window}";
|
|
12
|
+
readonly "gain.empty-title-scoped": "No savings recorded for {project} in {window}";
|
|
13
|
+
readonly "gain.empty-hint-all": "Savings appear here once snapcompact compacts tool output.";
|
|
14
|
+
readonly "gain.empty-hint-longer-range": "Try a longer range.";
|
|
15
|
+
readonly "gain.saved-tokens": "Saved tokens";
|
|
16
|
+
readonly "gain.saved-bytes": "Saved bytes";
|
|
17
|
+
readonly "gain.reduction": "Reduction";
|
|
18
|
+
readonly "gain.reduction-title": "Saved bytes ÷ original bytes, when the original size is known";
|
|
19
|
+
readonly "gain.reduction-unknown": "original size not recorded";
|
|
20
|
+
readonly "gain.hits": "Hits";
|
|
21
|
+
readonly "gain.saved-per-hit": "Saved per hit";
|
|
22
|
+
readonly "gain.savings-over-time": "Savings over time";
|
|
23
|
+
readonly "gain.savings-over-time-description": "Tokens saved per UTC day, with the running total";
|
|
24
|
+
readonly "gain.saved-per-day": "Saved per day";
|
|
25
|
+
readonly "gain.cumulative": "Cumulative";
|
|
26
|
+
readonly "gain.by-source": "By source";
|
|
27
|
+
readonly "gain.by-source-description": "Savings per subsystem";
|
|
28
|
+
readonly "gain.source": "Source";
|
|
29
|
+
};
|
|
30
|
+
readonly "zh-CN": {
|
|
31
|
+
readonly "gain.title": "收益";
|
|
32
|
+
readonly "gain.description": "在{window}内被 snapcompact 挡在上下文之外的 Token。";
|
|
33
|
+
readonly "gain.description-scoped": "在{window}内被 snapcompact 为 {project} 挡在上下文之外的 Token。";
|
|
34
|
+
readonly "gain.all-projects": "全部项目";
|
|
35
|
+
readonly "gain.empty-title": "在{window}内没有节省记录";
|
|
36
|
+
readonly "gain.empty-title-scoped": "在{window}内没有 {project} 的节省记录";
|
|
37
|
+
readonly "gain.empty-hint-all": "snapcompact 压缩工具输出后,节省量会显示在这里。";
|
|
38
|
+
readonly "gain.empty-hint-longer-range": "请尝试更长的时间范围。";
|
|
39
|
+
readonly "gain.saved-tokens": "节省的 Token";
|
|
40
|
+
readonly "gain.saved-bytes": "节省的字节";
|
|
41
|
+
readonly "gain.reduction": "节省比例";
|
|
42
|
+
readonly "gain.reduction-title": "原始大小已知时,节省字节 ÷ 原始字节";
|
|
43
|
+
readonly "gain.reduction-unknown": "未记录原始大小";
|
|
44
|
+
readonly "gain.hits": "命中次数";
|
|
45
|
+
readonly "gain.saved-per-hit": "每次命中节省";
|
|
46
|
+
readonly "gain.savings-over-time": "节省趋势";
|
|
47
|
+
readonly "gain.savings-over-time-description": "每个 UTC 日节省的 Token,以及累计总量";
|
|
48
|
+
readonly "gain.saved-per-day": "每日节省";
|
|
49
|
+
readonly "gain.cumulative": "累计";
|
|
50
|
+
readonly "gain.by-source": "按来源";
|
|
51
|
+
readonly "gain.by-source-description": "各子系统节省量";
|
|
52
|
+
readonly "gain.source": "来源";
|
|
53
|
+
};
|
|
54
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Models copy. Keys are slugs (`models.<name>`); the English string is the
|
|
3
|
+
* source of truth and `zh-CN` overrides it.
|
|
4
|
+
*/
|
|
5
|
+
export declare const models: {
|
|
6
|
+
readonly en: {
|
|
7
|
+
readonly "models.subtitle": "Which models did the work in {window}, and how fast they answered.";
|
|
8
|
+
readonly "models.empty-title": "No model usage in this range";
|
|
9
|
+
readonly "models.empty-hint": "Pick a wider range in the top bar.";
|
|
10
|
+
readonly "models.used": "Models used";
|
|
11
|
+
readonly "models.across-providers-one": "across {count} provider";
|
|
12
|
+
readonly "models.across-providers": "across {count} providers";
|
|
13
|
+
readonly "models.most-used": "Most used";
|
|
14
|
+
readonly "models.most-used-hint": "{share} of requests · {provider}";
|
|
15
|
+
readonly "models.failed-n": "{count} failed";
|
|
16
|
+
readonly "models.api-cost": "API-equivalent cost";
|
|
17
|
+
readonly "models.api-cost-title": "What this usage would cost at public API rates";
|
|
18
|
+
readonly "models.unpriced-n": "{count} unpriced";
|
|
19
|
+
readonly "models.request-share": "Request share";
|
|
20
|
+
readonly "models.share-desc": "Each model's share of requests per {bucket}";
|
|
21
|
+
readonly "models.count-desc": "Requests per {bucket}, stacked by model";
|
|
22
|
+
readonly "models.share-mode-aria": "Share chart mode";
|
|
23
|
+
readonly "models.all-models": "All models";
|
|
24
|
+
readonly "models.table-desc": "Click a row for latency and throughput over time";
|
|
25
|
+
readonly "models.cost-title": "API-equivalent estimate at public rates";
|
|
26
|
+
readonly "models.tokens-title": "Uncached input + cache reads + cache writes + output";
|
|
27
|
+
readonly "models.cache-rate": "Cache rate";
|
|
28
|
+
readonly "models.cache-title": "Cache reads ÷ (uncached input + cache reads)";
|
|
29
|
+
readonly "models.errors": "Errors";
|
|
30
|
+
readonly "models.tps-title": "Average output tokens per second";
|
|
31
|
+
readonly "models.ttft": "TTFT";
|
|
32
|
+
readonly "models.ttft-title": "Average time to first token";
|
|
33
|
+
readonly "models.trend": "Trend";
|
|
34
|
+
readonly "models.trend-title": "Requests per {bucket}";
|
|
35
|
+
readonly "models.efficiency": "Efficiency";
|
|
36
|
+
readonly "models.latency": "Latency";
|
|
37
|
+
readonly "models.cache-savings": "Cache savings";
|
|
38
|
+
readonly "models.avg-duration": "Avg duration";
|
|
39
|
+
readonly "models.avg-ttft": "Avg TTFT";
|
|
40
|
+
readonly "models.uncached-input": "Uncached input";
|
|
41
|
+
readonly "models.first-last-seen": "First seen {first} · last seen {last}";
|
|
42
|
+
readonly "models.performance-per-bucket": "Performance per active {bucket}";
|
|
43
|
+
readonly "models.no-samples-title": "No performance samples";
|
|
44
|
+
readonly "models.no-samples-hint": "Timing is recorded for streamed responses.";
|
|
45
|
+
readonly "models.tok-per-second": "{value} tok/s";
|
|
46
|
+
readonly "models.bucket-5m": "5 minutes";
|
|
47
|
+
readonly "models.bucket-hour": "hour";
|
|
48
|
+
readonly "models.bucket-day": "day";
|
|
49
|
+
};
|
|
50
|
+
readonly "zh-CN": {
|
|
51
|
+
readonly "models.subtitle": "在{window}内哪些模型完成了工作,以及它们的响应速度如何。";
|
|
52
|
+
readonly "models.empty-title": "该时间范围内没有模型用量";
|
|
53
|
+
readonly "models.empty-hint": "请在顶部栏选择更宽的时间范围。";
|
|
54
|
+
readonly "models.used": "使用模型数";
|
|
55
|
+
readonly "models.across-providers-one": "覆盖 {count} 个服务商";
|
|
56
|
+
readonly "models.across-providers": "覆盖 {count} 个服务商";
|
|
57
|
+
readonly "models.most-used": "使用最多";
|
|
58
|
+
readonly "models.most-used-hint": "{share} 请求占比 · {provider}";
|
|
59
|
+
readonly "models.failed-n": "{count} 个失败";
|
|
60
|
+
readonly "models.api-cost": "API 等价费用";
|
|
61
|
+
readonly "models.api-cost-title": "按公开 API 价格计算这笔用量的费用";
|
|
62
|
+
readonly "models.unpriced-n": "{count} 个未定价";
|
|
63
|
+
readonly "models.request-share": "请求占比";
|
|
64
|
+
readonly "models.share-desc": "每个{bucket}中各模型的请求占比";
|
|
65
|
+
readonly "models.count-desc": "每个{bucket}的请求数,按模型堆叠";
|
|
66
|
+
readonly "models.share-mode-aria": "占比图表模式";
|
|
67
|
+
readonly "models.all-models": "所有模型";
|
|
68
|
+
readonly "models.table-desc": "点击某行可查看延迟与吞吐随时间的变化";
|
|
69
|
+
readonly "models.cost-title": "按公开价格估算的 API 等价费用";
|
|
70
|
+
readonly "models.tokens-title": "未缓存输入 + 缓存读取 + 缓存写入 + 输出";
|
|
71
|
+
readonly "models.cache-rate": "缓存命中率";
|
|
72
|
+
readonly "models.cache-title": "缓存读取 ÷(未缓存输入 + 缓存读取)";
|
|
73
|
+
readonly "models.errors": "错误";
|
|
74
|
+
readonly "models.tps-title": "平均每秒输出 Token 数";
|
|
75
|
+
readonly "models.ttft": "首 Token 延迟";
|
|
76
|
+
readonly "models.ttft-title": "平均首 Token 延迟";
|
|
77
|
+
readonly "models.trend": "趋势";
|
|
78
|
+
readonly "models.trend-title": "每个{bucket}的请求数";
|
|
79
|
+
readonly "models.efficiency": "效率";
|
|
80
|
+
readonly "models.latency": "延迟";
|
|
81
|
+
readonly "models.cache-savings": "缓存节省";
|
|
82
|
+
readonly "models.avg-duration": "平均耗时";
|
|
83
|
+
readonly "models.avg-ttft": "平均首 Token 延迟";
|
|
84
|
+
readonly "models.uncached-input": "未缓存输入";
|
|
85
|
+
readonly "models.first-last-seen": "首次出现 {first} · 最近出现 {last}";
|
|
86
|
+
readonly "models.performance-per-bucket": "每个活跃{bucket}的性能";
|
|
87
|
+
readonly "models.no-samples-title": "没有性能样本";
|
|
88
|
+
readonly "models.no-samples-hint": "只有流式响应会记录耗时。";
|
|
89
|
+
readonly "models.tok-per-second": "{value} Token/秒";
|
|
90
|
+
readonly "models.bucket-5m": "5 分钟";
|
|
91
|
+
readonly "models.bucket-hour": "小时";
|
|
92
|
+
readonly "models.bucket-day": "天";
|
|
93
|
+
};
|
|
94
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar labels and group headings. Keys are slugs (`nav.<route>`); the
|
|
3
|
+
* English text is the source of truth and every locale overrides it.
|
|
4
|
+
*/
|
|
5
|
+
export declare const nav: {
|
|
6
|
+
readonly en: {
|
|
7
|
+
readonly "nav.usage": "Usage";
|
|
8
|
+
readonly "nav.activity": "Activity";
|
|
9
|
+
readonly "nav.insights": "Insights";
|
|
10
|
+
readonly "nav.overview": "Overview";
|
|
11
|
+
readonly "nav.models": "Models";
|
|
12
|
+
readonly "nav.providers": "Providers";
|
|
13
|
+
readonly "nav.costs": "Costs";
|
|
14
|
+
readonly "nav.requests": "Requests";
|
|
15
|
+
readonly "nav.errors": "Errors";
|
|
16
|
+
readonly "nav.traces": "Traces";
|
|
17
|
+
readonly "nav.tools": "Tools";
|
|
18
|
+
readonly "nav.frustration": "Frustration";
|
|
19
|
+
readonly "nav.projects": "Projects";
|
|
20
|
+
readonly "nav.gain": "Gain";
|
|
21
|
+
readonly "nav.dashboard": "zetacode stats";
|
|
22
|
+
readonly "nav.breadcrumb-stats": "stats";
|
|
23
|
+
readonly "nav.pages": "Pages";
|
|
24
|
+
readonly "nav.open-navigation": "Open navigation";
|
|
25
|
+
};
|
|
26
|
+
readonly "zh-CN": {
|
|
27
|
+
readonly "nav.usage": "用量";
|
|
28
|
+
readonly "nav.activity": "活动";
|
|
29
|
+
readonly "nav.insights": "洞察";
|
|
30
|
+
readonly "nav.overview": "总览";
|
|
31
|
+
readonly "nav.models": "模型";
|
|
32
|
+
readonly "nav.providers": "服务商";
|
|
33
|
+
readonly "nav.costs": "费用";
|
|
34
|
+
readonly "nav.requests": "请求";
|
|
35
|
+
readonly "nav.errors": "错误";
|
|
36
|
+
readonly "nav.traces": "调用链";
|
|
37
|
+
readonly "nav.tools": "工具";
|
|
38
|
+
readonly "nav.frustration": "情绪压力";
|
|
39
|
+
readonly "nav.projects": "项目";
|
|
40
|
+
readonly "nav.gain": "收益";
|
|
41
|
+
readonly "nav.dashboard": "zeta 统计";
|
|
42
|
+
readonly "nav.breadcrumb-stats": "统计";
|
|
43
|
+
readonly "nav.pages": "导航";
|
|
44
|
+
readonly "nav.open-navigation": "打开导航";
|
|
45
|
+
};
|
|
46
|
+
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overview copy. Keys are slugs (`overview.<name>`); the English string is the
|
|
3
|
+
* source of truth and `zh-CN` overrides it.
|
|
4
|
+
*/
|
|
5
|
+
export declare const overview: {
|
|
6
|
+
readonly en: {
|
|
7
|
+
readonly "overview.title": "Overview";
|
|
8
|
+
readonly "overview.description": "Everything zeta did across your sessions in {window}.";
|
|
9
|
+
readonly "overview.api-equivalent-cost": "API-equivalent cost";
|
|
10
|
+
readonly "overview.api-cost-title": "What this usage would cost at public API rates";
|
|
11
|
+
readonly "overview.unpriced-n": "{count} unpriced";
|
|
12
|
+
readonly "overview.failed-n": "{count} failed";
|
|
13
|
+
readonly "overview.conversation-tokens": "Conversation tokens";
|
|
14
|
+
readonly "overview.tokens-title": "Uncached input + cache reads + cache writes + output";
|
|
15
|
+
readonly "overview.output-n": "{count} output";
|
|
16
|
+
readonly "overview.cache-rate": "Cache rate";
|
|
17
|
+
readonly "overview.cache-rate-title": "Cache reads ÷ (uncached input + cache reads)";
|
|
18
|
+
readonly "overview.cache-saved": "{value} saved";
|
|
19
|
+
readonly "overview.succeeded-n": "{count} succeeded";
|
|
20
|
+
readonly "overview.uncached-input": "Uncached input";
|
|
21
|
+
readonly "overview.avg-latency": "Avg latency";
|
|
22
|
+
readonly "overview.avg-ttft": "Avg TTFT";
|
|
23
|
+
readonly "overview.activity": "Activity";
|
|
24
|
+
readonly "overview.per-5m": "Per 5 minutes";
|
|
25
|
+
readonly "overview.per-hour": "Per hour";
|
|
26
|
+
readonly "overview.per-day": "Per day";
|
|
27
|
+
readonly "overview.succeeded": "Succeeded";
|
|
28
|
+
readonly "overview.api-equivalent": "API-equivalent";
|
|
29
|
+
readonly "overview.token-mix": "Token mix";
|
|
30
|
+
readonly "overview.token-mix-description": "Where conversation tokens went";
|
|
31
|
+
readonly "overview.by-agent": "By agent";
|
|
32
|
+
readonly "overview.requests-short": "{count} req";
|
|
33
|
+
readonly "overview.main-agent": "Main agent";
|
|
34
|
+
readonly "overview.subagents": "Subagents";
|
|
35
|
+
readonly "overview.advisor": "Advisor";
|
|
36
|
+
readonly "overview.latest-requests": "Latest requests";
|
|
37
|
+
readonly "overview.latest-requests-description": "Most recent model calls across every session";
|
|
38
|
+
readonly "overview.all-requests": "All requests";
|
|
39
|
+
readonly "overview.when": "When";
|
|
40
|
+
readonly "overview.status": "Status";
|
|
41
|
+
readonly "overview.ok": "OK";
|
|
42
|
+
};
|
|
43
|
+
readonly "zh-CN": {
|
|
44
|
+
readonly "overview.title": "概览";
|
|
45
|
+
readonly "overview.description": "在{window}内,zeta 在你的所有会话中完成的一切。";
|
|
46
|
+
readonly "overview.api-equivalent-cost": "API 等效费用";
|
|
47
|
+
readonly "overview.api-cost-title": "这些用量按公开 API 费率计算所需的费用";
|
|
48
|
+
readonly "overview.unpriced-n": "{count} 个未定价";
|
|
49
|
+
readonly "overview.failed-n": "{count} 个失败";
|
|
50
|
+
readonly "overview.conversation-tokens": "对话 Token";
|
|
51
|
+
readonly "overview.tokens-title": "未缓存输入 + 缓存读取 + 缓存写入 + 输出";
|
|
52
|
+
readonly "overview.output-n": "{count} 输出";
|
|
53
|
+
readonly "overview.cache-rate": "缓存命中率";
|
|
54
|
+
readonly "overview.cache-rate-title": "缓存读取 ÷(未缓存输入 + 缓存读取)";
|
|
55
|
+
readonly "overview.cache-saved": "节省 {value}";
|
|
56
|
+
readonly "overview.succeeded-n": "{count} 个成功";
|
|
57
|
+
readonly "overview.uncached-input": "未缓存输入";
|
|
58
|
+
readonly "overview.avg-latency": "平均延迟";
|
|
59
|
+
readonly "overview.avg-ttft": "平均 TTFT";
|
|
60
|
+
readonly "overview.activity": "活动";
|
|
61
|
+
readonly "overview.per-5m": "每 5 分钟";
|
|
62
|
+
readonly "overview.per-hour": "每小时";
|
|
63
|
+
readonly "overview.per-day": "每天";
|
|
64
|
+
readonly "overview.succeeded": "成功";
|
|
65
|
+
readonly "overview.api-equivalent": "API 等效";
|
|
66
|
+
readonly "overview.token-mix": "Token 构成";
|
|
67
|
+
readonly "overview.token-mix-description": "对话 Token 的去向";
|
|
68
|
+
readonly "overview.by-agent": "按代理";
|
|
69
|
+
readonly "overview.requests-short": "{count} 次请求";
|
|
70
|
+
readonly "overview.main-agent": "主代理";
|
|
71
|
+
readonly "overview.subagents": "子代理";
|
|
72
|
+
readonly "overview.advisor": "顾问";
|
|
73
|
+
readonly "overview.latest-requests": "最新请求";
|
|
74
|
+
readonly "overview.latest-requests-description": "所有会话中最近的模型调用";
|
|
75
|
+
readonly "overview.all-requests": "全部请求";
|
|
76
|
+
readonly "overview.when": "时间";
|
|
77
|
+
readonly "overview.status": "状态";
|
|
78
|
+
readonly "overview.ok": "正常";
|
|
79
|
+
};
|
|
80
|
+
};
|