From e79ea35449680391a85cc7cbfce935367a48f5f6 Mon Sep 17 00:00:00 2001 From: Willie Zutz Date: Wed, 30 Apr 2025 23:23:01 -0600 Subject: [PATCH] feat(app): Add response time to model stats. --- src/app/api/chat/route.ts | 19 +++++++++++++++++-- src/components/ChatWindow.tsx | 1 + src/components/MessageActions/ModelInfo.tsx | 8 ++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/app/api/chat/route.ts b/src/app/api/chat/route.ts index 4b8ce79..9705dc9 100644 --- a/src/app/api/chat/route.ts +++ b/src/app/api/chat/route.ts @@ -54,12 +54,18 @@ type Body = { systemInstructions: string; }; +type ModelStats = { + modelName: string; + responseTime?: number; +}; + const handleEmitterEvents = async ( stream: EventEmitter, writer: WritableStreamDefaultWriter, encoder: TextEncoder, aiMessageId: string, chatId: string, + startTime: number, ) => { let recievedMessage = ''; let sources: any[] = []; @@ -92,7 +98,7 @@ const handleEmitterEvents = async ( sources = parsedData.data; } }); - let modelStats = { + let modelStats: ModelStats = { modelName: '', }; @@ -104,6 +110,14 @@ const handleEmitterEvents = async ( }); stream.on('end', () => { + const endTime = Date.now(); + const duration = endTime - startTime; + + modelStats = { + ...modelStats, + responseTime: duration, + }; + writer.write( encoder.encode( JSON.stringify({ @@ -196,6 +210,7 @@ const handleHistorySave = async ( export const POST = async (req: Request) => { try { + const startTime = Date.now(); const body = (await req.json()) as Body; const { message } = body; @@ -304,7 +319,7 @@ export const POST = async (req: Request) => { const writer = responseStream.writable.getWriter(); const encoder = new TextEncoder(); - handleEmitterEvents(stream, writer, encoder, aiMessageId, message.chatId); + handleEmitterEvents(stream, writer, encoder, aiMessageId, message.chatId, startTime); handleHistorySave(message, humanMessageId, body.focusMode, body.files); return new Response(responseStream.readable, { diff --git a/src/components/ChatWindow.tsx b/src/components/ChatWindow.tsx index 306bb70..35e9164 100644 --- a/src/components/ChatWindow.tsx +++ b/src/components/ChatWindow.tsx @@ -15,6 +15,7 @@ import NextError from 'next/error'; export type ModelStats = { modelName: string; + responseTime?: number; }; export type MessageMetadata = { diff --git a/src/components/MessageActions/ModelInfo.tsx b/src/components/MessageActions/ModelInfo.tsx index 8299497..fec80f2 100644 --- a/src/components/MessageActions/ModelInfo.tsx +++ b/src/components/MessageActions/ModelInfo.tsx @@ -61,6 +61,14 @@ const ModelInfoButton: React.FC = ({ modelStats }) => { {modelName} + {modelStats?.responseTime && ( +
+ Response time: + + {(modelStats.responseTime / 1000).toFixed(2)}s + +
+ )}