feat(app): Add response time to model stats.

This commit is contained in:
Willie Zutz 2025-04-30 23:23:01 -06:00
parent 86a3c59acd
commit e79ea35449
3 changed files with 26 additions and 2 deletions

View file

@ -54,12 +54,18 @@ type Body = {
systemInstructions: string; systemInstructions: string;
}; };
type ModelStats = {
modelName: string;
responseTime?: number;
};
const handleEmitterEvents = async ( const handleEmitterEvents = async (
stream: EventEmitter, stream: EventEmitter,
writer: WritableStreamDefaultWriter, writer: WritableStreamDefaultWriter,
encoder: TextEncoder, encoder: TextEncoder,
aiMessageId: string, aiMessageId: string,
chatId: string, chatId: string,
startTime: number,
) => { ) => {
let recievedMessage = ''; let recievedMessage = '';
let sources: any[] = []; let sources: any[] = [];
@ -92,7 +98,7 @@ const handleEmitterEvents = async (
sources = parsedData.data; sources = parsedData.data;
} }
}); });
let modelStats = { let modelStats: ModelStats = {
modelName: '', modelName: '',
}; };
@ -104,6 +110,14 @@ const handleEmitterEvents = async (
}); });
stream.on('end', () => { stream.on('end', () => {
const endTime = Date.now();
const duration = endTime - startTime;
modelStats = {
...modelStats,
responseTime: duration,
};
writer.write( writer.write(
encoder.encode( encoder.encode(
JSON.stringify({ JSON.stringify({
@ -196,6 +210,7 @@ const handleHistorySave = async (
export const POST = async (req: Request) => { export const POST = async (req: Request) => {
try { try {
const startTime = Date.now();
const body = (await req.json()) as Body; const body = (await req.json()) as Body;
const { message } = body; const { message } = body;
@ -304,7 +319,7 @@ export const POST = async (req: Request) => {
const writer = responseStream.writable.getWriter(); const writer = responseStream.writable.getWriter();
const encoder = new TextEncoder(); 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); handleHistorySave(message, humanMessageId, body.focusMode, body.files);
return new Response(responseStream.readable, { return new Response(responseStream.readable, {

View file

@ -15,6 +15,7 @@ import NextError from 'next/error';
export type ModelStats = { export type ModelStats = {
modelName: string; modelName: string;
responseTime?: number;
}; };
export type MessageMetadata = { export type MessageMetadata = {

View file

@ -61,6 +61,14 @@ const ModelInfoButton: React.FC<ModelInfoButtonProps> = ({ modelStats }) => {
{modelName} {modelName}
</span> </span>
</div> </div>
{modelStats?.responseTime && (
<div className="flex justify-between">
<span className="text-black/70 dark:text-white/70">Response time:</span>
<span className="text-black dark:text-white font-medium">
{(modelStats.responseTime / 1000).toFixed(2)}s
</span>
</div>
)}
</div> </div>
</div> </div>
</div> </div>