This commit is contained in:
lila 2026-07-06 15:21:52 +02:00
parent 1c4dcdd108
commit e89e3b7a70
6 changed files with 137 additions and 30 deletions

View file

@ -2,8 +2,9 @@ interface LlmMetrics {
promptTokens: number;
completionTokens: number;
totalTokens: number;
promptTimeMs: number;
completionTimeMs: number;
promptTimeMs: number | null;
completionTimeMs: number | null;
totalTimeMs: number;
}
interface PipelineMetrics {
@ -18,6 +19,7 @@ interface PipelineMetrics {
totalTokens: number;
totalPromptTimeMs: number;
totalCompletionTimeMs: number;
totalTimeMs: number;
currentWordStartTime?: Date;
}
@ -40,6 +42,7 @@ export class PipelineTimer {
totalTokens: 0,
totalPromptTimeMs: 0,
totalCompletionTimeMs: 0,
totalTimeMs: 0,
};
}
@ -59,8 +62,13 @@ export class PipelineTimer {
this.metrics.totalPromptTokens += llmMetrics.promptTokens;
this.metrics.totalCompletionTokens += llmMetrics.completionTokens;
this.metrics.totalTokens += llmMetrics.totalTokens;
this.metrics.totalPromptTimeMs += llmMetrics.promptTimeMs;
this.metrics.totalCompletionTimeMs += llmMetrics.completionTimeMs;
if (llmMetrics.promptTimeMs !== null) {
this.metrics.totalPromptTimeMs += llmMetrics.promptTimeMs;
}
if (llmMetrics.completionTimeMs !== null) {
this.metrics.totalCompletionTimeMs += llmMetrics.completionTimeMs;
}
this.metrics.totalTimeMs += llmMetrics.totalTimeMs;
}
}
@ -125,22 +133,40 @@ export class PipelineTimer {
0,
)
: "0";
const avgTotalTimeMs =
this.metrics.llmCalls > 0
? (this.metrics.totalTimeMs / this.metrics.llmCalls).toFixed(0)
: "0";
const unifiedThroughput =
this.metrics.totalTimeMs > 0
? (
this.metrics.totalTokens /
(this.metrics.totalTimeMs / 1000)
).toFixed(1)
: "N/A";
const hasDetailedTimings =
this.metrics.totalPromptTimeMs > 0 ||
this.metrics.totalCompletionTimeMs > 0;
const avgPromptSpeed =
this.metrics.totalPromptTimeMs > 0
? (
this.metrics.totalPromptTokens /
(this.metrics.totalPromptTimeMs / 1000)
).toFixed(1)
: "0";
: "N/A";
const avgCompletionSpeed =
this.metrics.totalCompletionTimeMs > 0
? (
this.metrics.totalCompletionTokens /
(this.metrics.totalCompletionTimeMs / 1000)
).toFixed(1)
: "0";
: "N/A";
return [
const lines = [
`⏱️ Pipeline Summary`,
` Duration: ${durationSec}s`,
` Processed: ${this.metrics.wordsProcessed}`,
@ -153,8 +179,20 @@ export class PipelineTimer {
` Calls: ${this.metrics.llmCalls}`,
` Avg prompt tokens: ${avgPromptTokens}`,
` Avg completion tokens: ${avgCompletionTokens}`,
` Avg prompt speed: ${avgPromptSpeed} tok/s`,
` Avg completion speed: ${avgCompletionSpeed} tok/s`,
].join("\n");
` Avg total tokens: ${avgPromptTokens + avgCompletionTokens}`,
` Avg total request time: ${avgTotalTimeMs}ms`,
` Avg throughput: ${unifiedThroughput} tok/s`,
];
if (hasDetailedTimings) {
lines.push(
``,
` [Local breakdown]`,
` Avg prompt speed: ${avgPromptSpeed} tok/s`,
` Avg completion speed: ${avgCompletionSpeed} tok/s`,
);
}
return lines.join("\n");
}
}