langfuse

Форк
0
/
metrics-api.servertest.ts 
94 строки · 3.1 Кб
1
import { makeAPICall, pruneDatabase } from "@/src/__tests__/test-utils";
2
import { v4 as uuidv4 } from "uuid";
3

4
describe("/api/public/metrics/daily API Endpoint", () => {
5
  beforeEach(async () => await pruneDatabase());
6
  afterEach(async () => await pruneDatabase());
7

8
  it("should handle daily metrics correctly", async () => {
9
    await pruneDatabase();
10

11
    // Create traces with observations on different days
12
    const traceId1 = uuidv4();
13
    const traceId2 = uuidv4();
14
    await makeAPICall("POST", "/api/public/traces", {
15
      id: traceId1,
16
      timestamp: "2021-01-01T00:00:00.000Z",
17
      name: "trace-day-1",
18
      userId: "user-daily-metrics",
19
      projectId: "project-daily-metrics",
20
    });
21
    await makeAPICall("POST", "/api/public/traces", {
22
      id: traceId2,
23
      timestamp: "2021-01-02T00:00:00.000Z",
24
      name: "trace-day-2",
25
      userId: "user-daily-metrics",
26
      projectId: "project-daily-metrics",
27
    });
28

29
    // Simulate observations with usage metrics on different days
30
    await makeAPICall("POST", "/api/public/generations", {
31
      traceId: traceId1,
32
      model: "modelA",
33
      usage: { input: 100, output: 200, total: 300 },
34
      startTime: "2021-01-01T00:00:00.000Z",
35
      endTime: "2021-01-01T00:01:00.000Z",
36
    });
37
    await makeAPICall("POST", "/api/public/generations", {
38
      traceId: traceId2,
39
      model: "modelB",
40
      usage: { input: 333 },
41
      startTime: "2021-01-02T00:00:00.000Z",
42
      endTime: "2021-01-02T00:02:00.000Z",
43
    });
44
    await makeAPICall("POST", "/api/public/generations", {
45
      traceId: traceId2,
46
      model: "modelC",
47
      usage: { input: 666, output: 777, totalCost: 1024.22 },
48
      startTime: "2021-01-02T00:00:00.000Z",
49
      endTime: "2021-01-02T00:04:00.000Z",
50
    });
51

52
    // Retrieve the daily metrics
53
    const dailyMetricsResponse = await makeAPICall<{
54
      data: Array<Record<string, unknown>>;
55
    }>("GET", `/api/public/metrics/daily`);
56
    const dailyMetricsData = dailyMetricsResponse.body.data;
57

58
    // Check if the daily metrics are calculated correctly
59
    expect(dailyMetricsData).toHaveLength(2); // Two days of data
60
    if (!dailyMetricsData[0])
61
      throw new Error("dailyMetricsData[0] is undefined");
62
    expect(dailyMetricsData[0].date).toBe("2021-01-02"); // Latest date first
63
    expect(dailyMetricsData[0].countTraces).toBe(1);
64
    expect(dailyMetricsData[0].totalCost).toEqual(1024.22);
65
    expect(dailyMetricsData[0].usage).toEqual([
66
      {
67
        model: "modelB",
68
        inputUsage: 333,
69
        outputUsage: 0,
70
        totalUsage: 333,
71
      },
72
      {
73
        model: "modelC",
74
        inputUsage: 666,
75
        outputUsage: 777,
76
        totalUsage: 1443,
77
      },
78
    ]);
79

80
    if (!dailyMetricsData[1])
81
      throw new Error("dailyMetricsData[1] is undefined");
82
    expect(dailyMetricsData[1].date).toBe("2021-01-01");
83
    expect(dailyMetricsData[1].countTraces).toBe(1);
84
    expect(dailyMetricsData[1].totalCost).toEqual(0);
85
    expect(dailyMetricsData[1].usage).toEqual([
86
      {
87
        model: "modelA",
88
        inputUsage: 100,
89
        outputUsage: 200,
90
        totalUsage: 300,
91
      },
92
    ]);
93
  });
94
});
95

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.