internal/server,ui: add new Acitivty page column - Drafted (#859)
Add draft metrics to activity log
This commit is contained in:
@@ -25,6 +25,8 @@ import (
|
|||||||
// TokenMetrics holds token usage and performance metrics.
|
// TokenMetrics holds token usage and performance metrics.
|
||||||
type TokenMetrics struct {
|
type TokenMetrics struct {
|
||||||
CachedTokens int `json:"cache_tokens"`
|
CachedTokens int `json:"cache_tokens"`
|
||||||
|
DraftTokens int `json:"draft_tokens"`
|
||||||
|
DraftAccTokens int `json:"draft_acc_tokens"`
|
||||||
InputTokens int `json:"input_tokens"`
|
InputTokens int `json:"input_tokens"`
|
||||||
OutputTokens int `json:"output_tokens"`
|
OutputTokens int `json:"output_tokens"`
|
||||||
PromptPerSecond float64 `json:"prompt_per_second"`
|
PromptPerSecond float64 `json:"prompt_per_second"`
|
||||||
@@ -345,6 +347,8 @@ func buildMetrics(modelID string, start time.Time, inputTokens, outputTokens, ca
|
|||||||
durationMs := wallDurationMs
|
durationMs := wallDurationMs
|
||||||
tokensPerSecond := -1.0
|
tokensPerSecond := -1.0
|
||||||
promptPerSecond := -1.0
|
promptPerSecond := -1.0
|
||||||
|
draftTokens := -1
|
||||||
|
draftAccTokens := -1
|
||||||
|
|
||||||
if timings.Exists() {
|
if timings.Exists() {
|
||||||
inputTokens = timings.Get("prompt_n").Int()
|
inputTokens = timings.Get("prompt_n").Int()
|
||||||
@@ -358,6 +362,10 @@ func buildMetrics(modelID string, start time.Time, inputTokens, outputTokens, ca
|
|||||||
if cachedValue := timings.Get("cache_n"); cachedValue.Exists() {
|
if cachedValue := timings.Get("cache_n"); cachedValue.Exists() {
|
||||||
cachedTokens = cachedValue.Int()
|
cachedTokens = cachedValue.Int()
|
||||||
}
|
}
|
||||||
|
if timings.Get("draft_n").Exists() && timings.Get("draft_n_accepted").Exists() {
|
||||||
|
draftTokens = int(timings.Get("draft_n").Int())
|
||||||
|
draftAccTokens = int(timings.Get("draft_n_accepted").Int())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ActivityLogEntry{
|
return ActivityLogEntry{
|
||||||
@@ -365,6 +373,8 @@ func buildMetrics(modelID string, start time.Time, inputTokens, outputTokens, ca
|
|||||||
Model: modelID,
|
Model: modelID,
|
||||||
Tokens: TokenMetrics{
|
Tokens: TokenMetrics{
|
||||||
CachedTokens: int(cachedTokens),
|
CachedTokens: int(cachedTokens),
|
||||||
|
DraftTokens: draftTokens,
|
||||||
|
DraftAccTokens: draftAccTokens,
|
||||||
InputTokens: int(inputTokens),
|
InputTokens: int(inputTokens),
|
||||||
OutputTokens: int(outputTokens),
|
OutputTokens: int(outputTokens),
|
||||||
PromptPerSecond: promptPerSecond,
|
PromptPerSecond: promptPerSecond,
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ export interface Model {
|
|||||||
|
|
||||||
export interface TokenMetrics {
|
export interface TokenMetrics {
|
||||||
cache_tokens: number;
|
cache_tokens: number;
|
||||||
|
draft_tokens: number;
|
||||||
|
draft_acc_tokens: number;
|
||||||
input_tokens: number;
|
input_tokens: number;
|
||||||
output_tokens: number;
|
output_tokens: number;
|
||||||
prompt_per_second: number;
|
prompt_per_second: number;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
{ key: "cached", label: "Cached", defaultVisible: true },
|
{ key: "cached", label: "Cached", defaultVisible: true },
|
||||||
{ key: "prompt", label: "Prompt", defaultVisible: true },
|
{ key: "prompt", label: "Prompt", defaultVisible: true },
|
||||||
{ key: "generated", label: "Generated", defaultVisible: true },
|
{ key: "generated", label: "Generated", defaultVisible: true },
|
||||||
|
{ key: "drafted", label: "Drafted", defaultVisible: false },
|
||||||
{ key: "prompt_speed", label: "Prompt Speed", defaultVisible: true },
|
{ key: "prompt_speed", label: "Prompt Speed", defaultVisible: true },
|
||||||
{ key: "gen_speed", label: "Gen Speed", defaultVisible: true },
|
{ key: "gen_speed", label: "Gen Speed", defaultVisible: true },
|
||||||
{ key: "duration", label: "Duration", defaultVisible: true },
|
{ key: "duration", label: "Duration", defaultVisible: true },
|
||||||
@@ -158,6 +159,10 @@
|
|||||||
return speed < 0 ? "unknown" : speed.toFixed(2) + " t/s";
|
return speed < 0 ? "unknown" : speed.toFixed(2) + " t/s";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatDrafted(drafted: number, accepted: number): string {
|
||||||
|
return drafted > 0 ? (accepted * 100 / drafted).toFixed(1) + "% (" + accepted + "/" + drafted + ")" : "-";
|
||||||
|
}
|
||||||
|
|
||||||
function formatDuration(ms: number): string {
|
function formatDuration(ms: number): string {
|
||||||
return (ms / 1000).toFixed(2) + "s";
|
return (ms / 1000).toFixed(2) + "s";
|
||||||
}
|
}
|
||||||
@@ -273,6 +278,8 @@
|
|||||||
Cached <Tooltip content="prompt tokens from cache" />
|
Cached <Tooltip content="prompt tokens from cache" />
|
||||||
{:else if key === "prompt"}
|
{:else if key === "prompt"}
|
||||||
Prompt <Tooltip content="new prompt tokens processed" />
|
Prompt <Tooltip content="new prompt tokens processed" />
|
||||||
|
{:else if key === "drafted"}
|
||||||
|
Drafted <Tooltip content="acceptance rate (accepted/drafted)" />
|
||||||
{:else}
|
{:else}
|
||||||
{columnLabelMap[key] ?? key}
|
{columnLabelMap[key] ?? key}
|
||||||
{/if}
|
{/if}
|
||||||
@@ -310,6 +317,8 @@
|
|||||||
{metric.tokens.input_tokens.toLocaleString()}
|
{metric.tokens.input_tokens.toLocaleString()}
|
||||||
{:else if key === "generated"}
|
{:else if key === "generated"}
|
||||||
{metric.tokens.output_tokens.toLocaleString()}
|
{metric.tokens.output_tokens.toLocaleString()}
|
||||||
|
{:else if key === "drafted"}
|
||||||
|
{formatDrafted(metric.tokens.draft_tokens, metric.tokens.draft_acc_tokens)}
|
||||||
{:else if key === "prompt_speed"}
|
{:else if key === "prompt_speed"}
|
||||||
{formatSpeed(metric.tokens.prompt_per_second)}
|
{formatSpeed(metric.tokens.prompt_per_second)}
|
||||||
{:else if key === "gen_speed"}
|
{:else if key === "gen_speed"}
|
||||||
|
|||||||
Reference in New Issue
Block a user