bugfixing #3
This commit is contained in:
parent
1c4dcdd108
commit
e89e3b7a70
6 changed files with 137 additions and 30 deletions
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue