add token speed block

This commit is contained in:
musistudio
2025-12-31 22:44:16 +08:00
parent e7073790b3
commit 10c69a586b
14 changed files with 900 additions and 369 deletions

View File

@@ -69,6 +69,12 @@ async function registerPluginsFromConfig(serverInstance: any, config: any): Prom
case 'token-speed':
pluginManager.registerPlugin(tokenSpeedPlugin, {
enabled,
outputHandlers: [
{
type: 'temp-file',
enabled: true
}
],
...options
});
break;

View File

@@ -4,7 +4,8 @@ export const apiKeyAuth =
(config: any) =>
async (req: FastifyRequest, reply: FastifyReply, done: () => void) => {
// Public endpoints that don't require authentication
if (["/", "/health"].includes(req.url) || req.url.startsWith("/ui")) {
const publicPaths = ["/", "/health"];
if (publicPaths.includes(req.url) || req.url.startsWith("/ui")) {
return done();
}

View File

@@ -118,4 +118,46 @@ declare module "@musistudio/llms" {
clearCache(): void;
dispose(): void;
}
// Token speed statistics types
export interface TokenStats {
requestId: string;
startTime: number;
firstTokenTime?: number;
lastTokenTime: number;
tokenCount: number;
tokensPerSecond: number;
timeToFirstToken?: number;
contentBlocks: {
index: number;
tokenCount: number;
speed: number;
}[];
}
export function getTokenSpeedStats(): {
current: TokenStats | null;
global: {
totalRequests: number;
totalTokens: number;
totalTime: number;
avgTokensPerSecond: number;
minTokensPerSecond: number;
maxTokensPerSecond: number;
avgTimeToFirstToken: number;
allSpeeds: number[];
};
lastUpdate: number;
};
export function getGlobalTokenSpeedStats(): {
totalRequests: number;
totalTokens: number;
totalTime: number;
avgTokensPerSecond: number;
minTokensPerSecond: number;
maxTokensPerSecond: number;
avgTimeToFirstToken: number;
allSpeeds: number[];
};
}