@linxiraos/pi-stats 1.1.13 → 1.1.15
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 -35
- package/dist/client/index.css +1 -1
- package/dist/client/index.js +56 -56
- package/dist/client/styles.css +46 -46
- package/dist/types/client/components/chart-shared.d.ts +21 -21
- package/dist/types/client/components/models-table-shared.d.ts +14 -14
- package/dist/types/client/data/formatters.d.ts +7 -2
- package/dist/types/client/traces/trace-colors.d.ts +1 -1
- package/dist/types/client/types.d.ts +2 -0
- package/dist/types/db.d.ts +24 -2
- package/dist/types/parser.d.ts +45 -2
- package/dist/types/shared-types.d.ts +4 -0
- package/dist/types/trace.d.ts +1 -1
- package/dist/types/types.d.ts +21 -0
- package/package.json +4 -4
- package/src/aggregator.ts +4 -0
- package/src/client/app/AppLayout.tsx +1 -1
- package/src/client/app/NavRail.tsx +1 -1
- package/src/client/components/AgentTokenShare.tsx +6 -6
- package/src/client/components/chart-shared.tsx +22 -22
- package/src/client/data/formatters.ts +15 -3
- package/src/client/routes/BehaviorRoute.tsx +10 -10
- package/src/client/routes/ModelsRoute.tsx +1 -1
- package/src/client/routes/OverviewRoute.tsx +4 -4
- package/src/client/routes/ProvidersRoute.tsx +3 -3
- package/src/client/routes/TracesRoute.tsx +10 -3
- package/src/client/styles.css +54 -52
- package/src/client/traces/SummaryStrip.tsx +2 -2
- package/src/client/traces/trace-colors.ts +13 -13
- package/src/client/types.ts +2 -0
- package/src/db.ts +242 -46
- package/src/parser.ts +131 -18
- package/src/server.ts +1 -1
- package/src/shared-types.ts +4 -0
- package/src/trace.ts +52 -8
- package/src/types.ts +20 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared chart primitives for the dashboard timeline charts: the
|
|
2
|
+
* Shared chart primitives for the dashboard timeline charts: the Zeta color
|
|
3
3
|
* palette, light/dark chart chrome, legend/tooltip + scale plumbing, dataset
|
|
4
4
|
* styling, and the top-N-by-model / aggregate bucketing used by the cost and
|
|
5
5
|
* behavior series.
|
|
@@ -7,17 +7,17 @@
|
|
|
7
7
|
|
|
8
8
|
import { format } from "@linxiraos/pi-utils/dates";
|
|
9
9
|
|
|
10
|
-
//
|
|
11
|
-
//
|
|
10
|
+
// Zeta palette (web-ui/lib/theme/themes/zeta-dark.json): neutral graphite lead
|
|
11
|
+
// plus the zeta categorical chart colors. Mid-tone series read on both themes.
|
|
12
12
|
export const MODEL_COLORS = [
|
|
13
|
-
"#
|
|
14
|
-
"#
|
|
15
|
-
"#
|
|
16
|
-
"#
|
|
17
|
-
"#
|
|
18
|
-
"#
|
|
19
|
-
"#
|
|
20
|
-
"#
|
|
13
|
+
"#9d9d9d", // zeta neutral (surface.mutedForeground)
|
|
14
|
+
"#f07178", // zeta red
|
|
15
|
+
"#e5c07b", // zeta amber
|
|
16
|
+
"#98c379", // zeta green
|
|
17
|
+
"#61afef", // zeta blue
|
|
18
|
+
"#c678dd", // zeta violet
|
|
19
|
+
"#d19a66", // zeta orange
|
|
20
|
+
"#56b6c2", // zeta cyan
|
|
21
21
|
];
|
|
22
22
|
|
|
23
23
|
export function buildModelColorLookup(
|
|
@@ -38,22 +38,22 @@ export function buildModelColorLookup(
|
|
|
38
38
|
|
|
39
39
|
export const CHART_THEMES = {
|
|
40
40
|
dark: {
|
|
41
|
-
legendLabel: "#
|
|
42
|
-
tooltipBackground: "#
|
|
43
|
-
tooltipTitle: "#
|
|
44
|
-
tooltipBody: "#
|
|
41
|
+
legendLabel: "#9d9d9d",
|
|
42
|
+
tooltipBackground: "#232323",
|
|
43
|
+
tooltipTitle: "#f5f5f5",
|
|
44
|
+
tooltipBody: "#9d9d9d",
|
|
45
45
|
tooltipBorder: "rgba(255, 255, 255, 0.12)",
|
|
46
46
|
grid: "rgba(255, 255, 255, 0.06)",
|
|
47
|
-
tick: "#
|
|
47
|
+
tick: "#7a7a7a",
|
|
48
48
|
},
|
|
49
49
|
light: {
|
|
50
|
-
legendLabel: "#
|
|
50
|
+
legendLabel: "#616161",
|
|
51
51
|
tooltipBackground: "#ffffff",
|
|
52
|
-
tooltipTitle: "#
|
|
53
|
-
tooltipBody: "#
|
|
54
|
-
tooltipBorder: "rgba(
|
|
55
|
-
grid: "rgba(
|
|
56
|
-
tick: "#
|
|
52
|
+
tooltipTitle: "#1f1f1f",
|
|
53
|
+
tooltipBody: "#616161",
|
|
54
|
+
tooltipBorder: "rgba(0, 0, 0, 0.15)",
|
|
55
|
+
grid: "rgba(0, 0, 0, 0.08)",
|
|
56
|
+
tick: "#8c8c8c",
|
|
57
57
|
},
|
|
58
58
|
} as const;
|
|
59
59
|
|
|
@@ -23,10 +23,22 @@ export function formatEstimatedCost(value: number, unpricedRequests: number, dig
|
|
|
23
23
|
return value === 0 && unpricedRequests > 0 ? "N/A" : formatCost(value, digits);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
/**
|
|
27
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Format one request's cost, distinguishing unpriced usage from free usage.
|
|
28
|
+
* Mirrors the server's `unpricedRequestSql`: `xai-oauth` is billed through a
|
|
29
|
+
* subscription, and `costUnpriced` marks a row the ingest path could not price
|
|
30
|
+
* (a scheduled card with no recoverable request timestamp).
|
|
31
|
+
*/
|
|
32
|
+
export function formatMessageCost(
|
|
33
|
+
message: Pick<MessageStats, "provider" | "usage" | "costUnpriced">,
|
|
34
|
+
digits?: number,
|
|
35
|
+
): string {
|
|
28
36
|
const unpricedRequests =
|
|
29
|
-
message.
|
|
37
|
+
message.usage.totalTokens > 0 &&
|
|
38
|
+
message.usage.cost.total === 0 &&
|
|
39
|
+
(message.provider === "xai-oauth" || message.costUnpriced === true)
|
|
40
|
+
? 1
|
|
41
|
+
: 0;
|
|
30
42
|
return formatEstimatedCost(message.usage.cost.total, unpricedRequests, digits);
|
|
31
43
|
}
|
|
32
44
|
|
|
@@ -416,37 +416,37 @@ function BehaviorModelsTable({
|
|
|
416
416
|
label="Yelling (CAPS)"
|
|
417
417
|
total={model.totalYelling}
|
|
418
418
|
messages={model.totalMessages}
|
|
419
|
-
valueClass="text-[#
|
|
419
|
+
valueClass="text-[#f07178]"
|
|
420
420
|
/>
|
|
421
421
|
<DetailRow
|
|
422
422
|
label="Profanity"
|
|
423
423
|
total={model.totalProfanity}
|
|
424
424
|
messages={model.totalMessages}
|
|
425
|
-
valueClass="text-[#
|
|
425
|
+
valueClass="text-[#d19a66]"
|
|
426
426
|
/>
|
|
427
427
|
<DetailRow
|
|
428
428
|
label="Anguish (!!!, nooo, dude, ..)"
|
|
429
429
|
total={model.totalAnguish}
|
|
430
430
|
messages={model.totalMessages}
|
|
431
|
-
valueClass="text-[#
|
|
431
|
+
valueClass="text-[#c678dd]"
|
|
432
432
|
/>
|
|
433
433
|
<DetailRow
|
|
434
434
|
label="Negation (no/nope/wrong)"
|
|
435
435
|
total={model.totalNegation}
|
|
436
436
|
messages={model.totalMessages}
|
|
437
|
-
valueClass="text-[#
|
|
437
|
+
valueClass="text-[#56b6c2]"
|
|
438
438
|
/>
|
|
439
439
|
<DetailRow
|
|
440
440
|
label="Repetition (i meant, still doesnt)"
|
|
441
441
|
total={model.totalRepetition}
|
|
442
442
|
messages={model.totalMessages}
|
|
443
|
-
valueClass="text-[#
|
|
443
|
+
valueClass="text-[#56b6c2]"
|
|
444
444
|
/>
|
|
445
445
|
<DetailRow
|
|
446
446
|
label="Blame (you didnt, stop X-ing)"
|
|
447
447
|
total={model.totalBlame}
|
|
448
448
|
messages={model.totalMessages}
|
|
449
|
-
valueClass="text-[#
|
|
449
|
+
valueClass="text-[#56b6c2]"
|
|
450
450
|
/>
|
|
451
451
|
<DetailRow
|
|
452
452
|
label="Avg chars / msg"
|
|
@@ -515,10 +515,10 @@ function DetailRow({
|
|
|
515
515
|
}
|
|
516
516
|
|
|
517
517
|
const SERIES_COLORS = {
|
|
518
|
-
yelling: "#
|
|
519
|
-
profanity: "#
|
|
520
|
-
anguish: "#
|
|
521
|
-
frustration: "#
|
|
518
|
+
yelling: "#f07178", // zeta red
|
|
519
|
+
profanity: "#d19a66", // zeta orange
|
|
520
|
+
anguish: "#c678dd", // zeta violet
|
|
521
|
+
frustration: "#56b6c2", // zeta cyan
|
|
522
522
|
} as const;
|
|
523
523
|
|
|
524
524
|
function BreakdownChart({ data, chartTheme }: { data: DailyPoint[]; chartTheme: TableChartTheme }) {
|
|
@@ -53,8 +53,8 @@ export function OverviewRoute({ active, range, refreshTrigger, onRequestClick }:
|
|
|
53
53
|
{
|
|
54
54
|
label: "Requests",
|
|
55
55
|
data: overview.timeSeries.map(pt => pt.requests),
|
|
56
|
-
borderColor: "#
|
|
57
|
-
backgroundColor: "rgba(
|
|
56
|
+
borderColor: "#61afef",
|
|
57
|
+
backgroundColor: "rgba(97, 175, 239, 0.12)",
|
|
58
58
|
tension: 0.2,
|
|
59
59
|
borderWidth: 2,
|
|
60
60
|
pointRadius,
|
|
@@ -64,8 +64,8 @@ export function OverviewRoute({ active, range, refreshTrigger, onRequestClick }:
|
|
|
64
64
|
{
|
|
65
65
|
label: "Errors",
|
|
66
66
|
data: overview.timeSeries.map(pt => pt.errors),
|
|
67
|
-
borderColor: "#
|
|
68
|
-
backgroundColor: "rgba(
|
|
67
|
+
borderColor: "#f07178",
|
|
68
|
+
backgroundColor: "rgba(240, 113, 120, 0.12)",
|
|
69
69
|
tension: 0.2,
|
|
70
70
|
borderWidth: 2,
|
|
71
71
|
pointRadius,
|
|
@@ -396,9 +396,9 @@ function WindowInsightsPanel({ insights }: { insights: ProviderWindowInsight[] }
|
|
|
396
396
|
// ---------------------------------------------------------------------------
|
|
397
397
|
|
|
398
398
|
const UTILIZATION_COLORS = {
|
|
399
|
-
ok: "#
|
|
400
|
-
warning: "#
|
|
401
|
-
exhausted: "#
|
|
399
|
+
ok: "#98c379",
|
|
400
|
+
warning: "#e5c07b",
|
|
401
|
+
exhausted: "#f07178",
|
|
402
402
|
} as const;
|
|
403
403
|
|
|
404
404
|
function WindowUtilizationPanel({ usageSeries }: { usageSeries: UsageWindowSeries[] }) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { useMemo, useState } from "react";
|
|
7
7
|
import { getSessions } from "../api";
|
|
8
|
-
import { formatCompact,
|
|
8
|
+
import { formatCompact, formatDurationMs, formatEstimatedCost, formatRelativeTime } from "../data/formatters";
|
|
9
9
|
import { useResource } from "../data/useResource";
|
|
10
10
|
import { TraceView } from "../traces/TraceView";
|
|
11
11
|
import type { SessionSummary } from "../types";
|
|
@@ -110,7 +110,12 @@ export function TracesRoute({ active, session, onOpenSession, refreshTrigger }:
|
|
|
110
110
|
numeric: true,
|
|
111
111
|
render: (item: SessionSummary) => formatCompact(item.totalTokens),
|
|
112
112
|
},
|
|
113
|
-
{
|
|
113
|
+
{
|
|
114
|
+
key: "cost",
|
|
115
|
+
header: "Cost",
|
|
116
|
+
numeric: true,
|
|
117
|
+
render: (item: SessionSummary) => formatEstimatedCost(item.costTotal, item.unpricedRequests),
|
|
118
|
+
},
|
|
114
119
|
{ key: "models", header: "Models", render: (item: SessionSummary) => <ModelChips models={item.models} /> },
|
|
115
120
|
],
|
|
116
121
|
[],
|
|
@@ -138,7 +143,9 @@ export function TracesRoute({ active, session, onOpenSession, refreshTrigger }:
|
|
|
138
143
|
</div>
|
|
139
144
|
<div>
|
|
140
145
|
<div className="stats-mobile-card-label">Cost</div>
|
|
141
|
-
<div className="stats-mobile-card-value">
|
|
146
|
+
<div className="stats-mobile-card-value">
|
|
147
|
+
{formatEstimatedCost(item.costTotal, item.unpricedRequests)}
|
|
148
|
+
</div>
|
|
142
149
|
</div>
|
|
143
150
|
</div>
|
|
144
151
|
</div>
|
package/src/client/styles.css
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
@import "tailwindcss/index.css";
|
|
2
2
|
|
|
3
3
|
/* ==========================================================================
|
|
4
|
-
|
|
4
|
+
Theme Variables & Color Scheme
|
|
5
5
|
========================================================================== */
|
|
6
6
|
:root {
|
|
7
7
|
color-scheme: dark;
|
|
8
|
-
/*
|
|
9
|
-
|
|
10
|
-
--page:
|
|
11
|
-
--surface:
|
|
12
|
-
--surface-2:
|
|
13
|
-
--border:
|
|
14
|
-
--border-strong:
|
|
15
|
-
--text:
|
|
16
|
-
--muted:
|
|
17
|
-
--dim:
|
|
18
|
-
--accent:
|
|
19
|
-
--accent-fg:
|
|
20
|
-
--accent-muted:
|
|
21
|
-
--link:
|
|
22
|
-
--success:
|
|
23
|
-
--danger:
|
|
24
|
-
--warning:
|
|
25
|
-
|
|
26
|
-
/* Bridge the view components' token vocabulary to the
|
|
8
|
+
/* Zeta dark palette — web-ui/lib/theme/themes/zeta-dark.json:
|
|
9
|
+
neutral graphite surfaces, #EAEAEA accent, no blue accent. */
|
|
10
|
+
--page: #161616;
|
|
11
|
+
--surface: #1e1e1e;
|
|
12
|
+
--surface-2: #232323;
|
|
13
|
+
--border: #2e2e2e;
|
|
14
|
+
--border-strong: #3c3c3c;
|
|
15
|
+
--text: #f5f5f5;
|
|
16
|
+
--muted: #9d9d9d;
|
|
17
|
+
--dim: #6e6e6e;
|
|
18
|
+
--accent: #eaeaea; /* primary.base */
|
|
19
|
+
--accent-fg: #161616; /* primary.foreground — ink on accent fills */
|
|
20
|
+
--accent-muted: rgb(234 234 234 / 0.18); /* primary.muted */
|
|
21
|
+
--link: #61afef; /* status.info */
|
|
22
|
+
--success: #98c379; /* status.success */
|
|
23
|
+
--danger: #f07178; /* status.error */
|
|
24
|
+
--warning: #e5c07b; /* status.warning */
|
|
25
|
+
|
|
26
|
+
/* Bridge the view components' token vocabulary to the Zeta base tokens so
|
|
27
27
|
muted/secondary text and semantic accents resolve instead of silently
|
|
28
28
|
falling back to inherited text color. Re-resolve per theme via var(). */
|
|
29
29
|
--text-primary: var(--text);
|
|
@@ -47,44 +47,46 @@
|
|
|
47
47
|
@media (prefers-color-scheme: light) {
|
|
48
48
|
:root:not([data-theme]) {
|
|
49
49
|
color-scheme: light;
|
|
50
|
-
|
|
51
|
-
--
|
|
52
|
-
--surface
|
|
53
|
-
--
|
|
54
|
-
--border
|
|
55
|
-
--
|
|
56
|
-
--
|
|
57
|
-
--
|
|
58
|
-
--
|
|
59
|
-
--accent
|
|
60
|
-
--accent-
|
|
61
|
-
--
|
|
62
|
-
--
|
|
63
|
-
--
|
|
50
|
+
/* Zeta light palette — web-ui/lib/theme/themes/zeta-light.json. */
|
|
51
|
+
--page: #fafafa;
|
|
52
|
+
--surface: #ffffff;
|
|
53
|
+
--surface-2: #f0f0f0;
|
|
54
|
+
--border: #e0e0e0;
|
|
55
|
+
--border-strong: #c8c8c8;
|
|
56
|
+
--text: #1f1f1f;
|
|
57
|
+
--muted: #616161;
|
|
58
|
+
--dim: #9e9e9e;
|
|
59
|
+
--accent: #1a1a1a;
|
|
60
|
+
--accent-fg: #fafafa;
|
|
61
|
+
--accent-muted: rgb(26 26 26 / 0.14);
|
|
62
|
+
--link: #4078c0;
|
|
63
|
+
--success: #50a14f;
|
|
64
|
+
--danger: #e45649;
|
|
64
65
|
--select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
|
|
65
|
-
--warning:
|
|
66
|
+
--warning: #986801;
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
/* Explicit theme override (toggle or persisted preference). */
|
|
70
71
|
[data-theme="light"] {
|
|
71
72
|
color-scheme: light;
|
|
72
|
-
|
|
73
|
-
--
|
|
74
|
-
--surface
|
|
75
|
-
--
|
|
76
|
-
--border
|
|
77
|
-
--
|
|
78
|
-
--
|
|
79
|
-
--
|
|
80
|
-
--
|
|
81
|
-
--accent
|
|
82
|
-
--accent-
|
|
83
|
-
--
|
|
84
|
-
--
|
|
85
|
-
--
|
|
73
|
+
/* Zeta light palette — web-ui/lib/theme/themes/zeta-light.json. */
|
|
74
|
+
--page: #fafafa;
|
|
75
|
+
--surface: #ffffff;
|
|
76
|
+
--surface-2: #f0f0f0;
|
|
77
|
+
--border: #e0e0e0;
|
|
78
|
+
--border-strong: #c8c8c8;
|
|
79
|
+
--text: #1f1f1f;
|
|
80
|
+
--muted: #616161;
|
|
81
|
+
--dim: #9e9e9e;
|
|
82
|
+
--accent: #1a1a1a;
|
|
83
|
+
--accent-fg: #fafafa;
|
|
84
|
+
--accent-muted: rgb(26 26 26 / 0.14);
|
|
85
|
+
--link: #4078c0;
|
|
86
|
+
--success: #50a14f;
|
|
87
|
+
--danger: #e45649;
|
|
86
88
|
--select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
|
|
87
|
-
--warning:
|
|
89
|
+
--warning: #986801;
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
/* ==========================================================================
|
|
@@ -1293,7 +1295,7 @@
|
|
|
1293
1295
|
}
|
|
1294
1296
|
|
|
1295
1297
|
/* ==========================================================================
|
|
1296
|
-
Brand mark on the
|
|
1298
|
+
Brand mark on the ZETA wordmark (both rail + mobile drawer headers)
|
|
1297
1299
|
========================================================================== */
|
|
1298
1300
|
.stats-logo-container {
|
|
1299
1301
|
display: grid;
|
|
@@ -1308,7 +1310,7 @@
|
|
|
1308
1310
|
width: 16px;
|
|
1309
1311
|
height: 16px;
|
|
1310
1312
|
border-radius: 4px;
|
|
1311
|
-
background: linear-gradient(135deg, #
|
|
1313
|
+
background: linear-gradient(135deg, #eaeaea 0%, #9d9d9d 50%, #3c3c3c 100%); /* Zeta graphite mark */
|
|
1312
1314
|
}
|
|
1313
1315
|
|
|
1314
1316
|
.stats-logo-text,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* tool calls, agents, tokens, cost.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { formatCompact,
|
|
6
|
+
import { formatCompact, formatDurationMs, formatEstimatedCost, formatInteger } from "../data/formatters";
|
|
7
7
|
import type { TraceSummary } from "../types";
|
|
8
8
|
|
|
9
9
|
export interface SummaryStripProps {
|
|
@@ -21,7 +21,7 @@ export function SummaryStrip({ summary }: SummaryStripProps) {
|
|
|
21
21
|
{ label: "Tool Calls", value: formatInteger(summary.toolCalls) },
|
|
22
22
|
{ label: "Agents", value: formatInteger(summary.subagents) },
|
|
23
23
|
{ label: "Tokens", value: formatCompact(summary.totalTokens) },
|
|
24
|
-
{ label: "Cost", value:
|
|
24
|
+
{ label: "Cost", value: formatEstimatedCost(summary.costTotal, summary.unpricedRequests) },
|
|
25
25
|
];
|
|
26
26
|
|
|
27
27
|
return (
|
|
@@ -23,7 +23,7 @@ export interface TraceTheme {
|
|
|
23
23
|
tick: string;
|
|
24
24
|
/** Span label text drawn inside blocks. */
|
|
25
25
|
spanText: string;
|
|
26
|
-
/** Selection outline (
|
|
26
|
+
/** Selection outline (theme focus accent). */
|
|
27
27
|
selection: string;
|
|
28
28
|
tooltipBackground: string;
|
|
29
29
|
tooltipTitle: string;
|
|
@@ -45,12 +45,12 @@ export const TRACE_THEMES: Record<"dark" | "light", TraceTheme> = {
|
|
|
45
45
|
turnBand: "rgba(255, 255, 255, 0.035)",
|
|
46
46
|
surface: "transparent",
|
|
47
47
|
grid: "rgba(255, 255, 255, 0.06)",
|
|
48
|
-
tick: "#
|
|
49
|
-
spanText: "#
|
|
50
|
-
selection: "#
|
|
51
|
-
tooltipBackground: "#
|
|
52
|
-
tooltipTitle: "#
|
|
53
|
-
tooltipBody: "#
|
|
48
|
+
tick: "#7a7a7a",
|
|
49
|
+
spanText: "#161616",
|
|
50
|
+
selection: "#eaeaea",
|
|
51
|
+
tooltipBackground: "#232323",
|
|
52
|
+
tooltipTitle: "#f5f5f5",
|
|
53
|
+
tooltipBody: "#9d9d9d",
|
|
54
54
|
tooltipBorder: "rgba(255, 255, 255, 0.12)",
|
|
55
55
|
},
|
|
56
56
|
light: {
|
|
@@ -65,13 +65,13 @@ export const TRACE_THEMES: Record<"dark" | "light", TraceTheme> = {
|
|
|
65
65
|
marker: "#ca8a04",
|
|
66
66
|
turnBand: "rgba(0, 0, 0, 0.04)",
|
|
67
67
|
surface: "transparent",
|
|
68
|
-
grid: "rgba(
|
|
69
|
-
tick: "#
|
|
68
|
+
grid: "rgba(0, 0, 0, 0.08)",
|
|
69
|
+
tick: "#8c8c8c",
|
|
70
70
|
spanText: "#ffffff",
|
|
71
|
-
selection: "#
|
|
71
|
+
selection: "#1a1a1a",
|
|
72
72
|
tooltipBackground: "#ffffff",
|
|
73
|
-
tooltipTitle: "#
|
|
74
|
-
tooltipBody: "#
|
|
75
|
-
tooltipBorder: "rgba(
|
|
73
|
+
tooltipTitle: "#1f1f1f",
|
|
74
|
+
tooltipBody: "#616161",
|
|
75
|
+
tooltipBorder: "rgba(0, 0, 0, 0.15)",
|
|
76
76
|
},
|
|
77
77
|
};
|
package/src/client/types.ts
CHANGED
|
@@ -54,6 +54,8 @@ export interface MessageStats {
|
|
|
54
54
|
stopReason: string;
|
|
55
55
|
errorMessage: string | null;
|
|
56
56
|
usage: Usage;
|
|
57
|
+
/** Ingest found no tariff to price this request from; its zero is unknown spend. */
|
|
58
|
+
costUnpriced?: boolean;
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
export interface RequestDetails extends MessageStats {
|