feat(app): Add response time to model stats.
This commit is contained in:
parent
86a3c59acd
commit
e79ea35449
3 changed files with 26 additions and 2 deletions
|
|
@ -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, {
|
||||||
|
|
|
||||||
|
|
@ -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 = {
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue