From c4364bc9a34ef90a38076eded4c38b279fe44583 Mon Sep 17 00:00:00 2001 From: antoniora Date: Mon, 13 May 2024 15:37:40 +0200 Subject: [PATCH 1/2] Add custom metrics for messages and conversations --- src/lib/server/metrics.ts | 27 ++++++++++++++++++++++++- src/routes/conversation/+server.ts | 4 ++++ src/routes/conversation/[id]/+server.ts | 4 ++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/lib/server/metrics.ts b/src/lib/server/metrics.ts index a4728cc78ba..3d4f22c5a7a 100644 --- a/src/lib/server/metrics.ts +++ b/src/lib/server/metrics.ts @@ -1,10 +1,12 @@ -import { collectDefaultMetrics, Registry } from "prom-client"; +import { collectDefaultMetrics, Registry, Counter} from "prom-client"; import express from "express"; import { logger } from "$lib/server/logger"; import { env } from "$env/dynamic/private"; export class MetricsServer { private static instance: MetricsServer; + private conversationsTotal: Counter; + private messagesTotal: Counter; private constructor() { const app = express(); @@ -17,6 +19,20 @@ export class MetricsServer { const register = new Registry(); collectDefaultMetrics({ register }); + this.conversationsTotal = new Counter({ + name: "conversations_total", + help: "Total number of conversations", + labelNames: ["model"], + registers: [register] + }); + + this.messagesTotal = new Counter({ + name: "messages_total", + help: "Total number of messages", + labelNames: ["model"], + registers: [register] + }); + app.get("/metrics", (req, res) => { register.metrics().then((metrics) => { res.set("Content-Type", "text/plain"); @@ -40,4 +56,13 @@ export class MetricsServer { return MetricsServer.instance; } + + public incrementConversationsTotal(model: string) { + this.conversationsTotal.labels(model).inc(); + } + + public incrementMessagesTotal(model: string) { + this.messagesTotal.labels(model).inc(); + } + } diff --git a/src/routes/conversation/+server.ts b/src/routes/conversation/+server.ts index ed48cfaa093..d7a2e221229 100644 --- a/src/routes/conversation/+server.ts +++ b/src/routes/conversation/+server.ts @@ -10,6 +10,7 @@ import { defaultEmbeddingModel } from "$lib/server/embeddingModels"; import { v4 } from "uuid"; import { authCondition } from "$lib/server/auth"; import { usageLimits } from "$lib/server/usageLimits"; +import { MetricsServer } from "$lib/server/metrics" export const POST: RequestHandler = async ({ locals, request }) => { const body = await request.text(); @@ -115,6 +116,9 @@ export const POST: RequestHandler = async ({ locals, request }) => { ...(values.fromShare ? { meta: { fromShareId: values.fromShare } } : {}), }); + const metricsServer = MetricsServer.getInstance(); + metricsServer.incrementConversationsTotal(values.model); + return new Response( JSON.stringify({ conversationId: res.insertedId.toString(), diff --git a/src/routes/conversation/[id]/+server.ts b/src/routes/conversation/[id]/+server.ts index ebbedb945f9..bd336288081 100644 --- a/src/routes/conversation/[id]/+server.ts +++ b/src/routes/conversation/[id]/+server.ts @@ -24,6 +24,7 @@ import { preprocessMessages } from "$lib/server/preprocessMessages.js"; import { usageLimits } from "$lib/server/usageLimits"; import { isURLLocal } from "$lib/server/isURLLocal.js"; import { logger } from "$lib/server/logger.js"; +import { MetricsServer } from "$lib/server/metrics" export async function POST({ request, locals, params, getClientAddress }) { const id = z.string().parse(params.id); @@ -550,6 +551,9 @@ export async function POST({ request, locals, params, getClientAddress }) { ); } + const metricsServer = MetricsServer.getInstance(); + metricsServer.incrementMessagesTotal(conv.model); + // Todo: maybe we should wait for the message to be saved before ending the response - in case of errors return new Response(stream, { headers: { From a08d3ff699327b233202875903d96452d5710955 Mon Sep 17 00:00:00 2001 From: Nathan Sarrazin Date: Mon, 27 May 2024 15:49:39 +0200 Subject: [PATCH 2/2] lint --- src/lib/server/metrics.ts | 7 +++---- src/routes/conversation/+server.ts | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/lib/server/metrics.ts b/src/lib/server/metrics.ts index 3d4f22c5a7a..1e1e7f0acec 100644 --- a/src/lib/server/metrics.ts +++ b/src/lib/server/metrics.ts @@ -1,4 +1,4 @@ -import { collectDefaultMetrics, Registry, Counter} from "prom-client"; +import { collectDefaultMetrics, Registry, Counter } from "prom-client"; import express from "express"; import { logger } from "$lib/server/logger"; import { env } from "$env/dynamic/private"; @@ -23,14 +23,14 @@ export class MetricsServer { name: "conversations_total", help: "Total number of conversations", labelNames: ["model"], - registers: [register] + registers: [register], }); this.messagesTotal = new Counter({ name: "messages_total", help: "Total number of messages", labelNames: ["model"], - registers: [register] + registers: [register], }); app.get("/metrics", (req, res) => { @@ -64,5 +64,4 @@ export class MetricsServer { public incrementMessagesTotal(model: string) { this.messagesTotal.labels(model).inc(); } - } diff --git a/src/routes/conversation/+server.ts b/src/routes/conversation/+server.ts index d7a2e221229..3ca5c46f122 100644 --- a/src/routes/conversation/+server.ts +++ b/src/routes/conversation/+server.ts @@ -10,7 +10,7 @@ import { defaultEmbeddingModel } from "$lib/server/embeddingModels"; import { v4 } from "uuid"; import { authCondition } from "$lib/server/auth"; import { usageLimits } from "$lib/server/usageLimits"; -import { MetricsServer } from "$lib/server/metrics" +import { MetricsServer } from "$lib/server/metrics"; export const POST: RequestHandler = async ({ locals, request }) => { const body = await request.text();