diff --git a/src/lib/server/metrics.ts b/src/lib/server/metrics.ts index a4728cc78ba..1e1e7f0acec 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,12 @@ 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..3ca5c46f122 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 cd94f681b1e..a50ac00a93a 100644 --- a/src/routes/conversation/[id]/+server.ts +++ b/src/routes/conversation/[id]/+server.ts @@ -21,6 +21,7 @@ import { buildSubtree } from "$lib/utils/tree/buildSubtree.js"; import { addChildren } from "$lib/utils/tree/addChildren.js"; import { addSibling } from "$lib/utils/tree/addSibling.js"; import { usageLimits } from "$lib/server/usageLimits"; +import { MetricsServer } from "$lib/server/metrics"; import { textGeneration } from "$lib/server/textGeneration"; import type { TextGenerationContext } from "$lib/server/textGeneration/types"; @@ -428,6 +429,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: {