(t *testing.T)
| 10425 | } |
| 10426 | |
| 10427 | func TestChatCostSummary_UnpricedMessages(t *testing.T) { |
| 10428 | t.Parallel() |
| 10429 | |
| 10430 | ctx := testutil.Context(t, testutil.WaitLong) |
| 10431 | client, db := newChatClientWithDatabase(t) |
| 10432 | firstUser := coderdtest.CreateFirstUser(t, client.Client) |
| 10433 | modelConfig := createChatModelConfig(t, client) |
| 10434 | |
| 10435 | chat := dbgen.Chat(t, db, database.Chat{ |
| 10436 | OrganizationID: firstUser.OrganizationID, |
| 10437 | OwnerID: firstUser.UserID, |
| 10438 | LastModelConfigID: modelConfig.ID, |
| 10439 | Title: "unpriced test", |
| 10440 | }) |
| 10441 | |
| 10442 | pricedMessage := dbgen.ChatMessage(t, db, database.ChatMessage{ |
| 10443 | ChatID: chat.ID, |
| 10444 | ModelConfigID: uuid.NullUUID{UUID: modelConfig.ID, Valid: true}, |
| 10445 | Role: database.ChatMessageRoleAssistant, |
| 10446 | InputTokens: sql.NullInt64{Int64: 100, Valid: true}, |
| 10447 | OutputTokens: sql.NullInt64{Int64: 50, Valid: true}, |
| 10448 | TotalCostMicros: sql.NullInt64{Int64: 500, Valid: true}, |
| 10449 | }) |
| 10450 | |
| 10451 | unpricedMessage := dbgen.ChatMessage(t, db, database.ChatMessage{ |
| 10452 | ChatID: chat.ID, |
| 10453 | ModelConfigID: uuid.NullUUID{UUID: modelConfig.ID, Valid: true}, |
| 10454 | Role: database.ChatMessageRoleAssistant, |
| 10455 | InputTokens: sql.NullInt64{Int64: 200, Valid: true}, |
| 10456 | OutputTokens: sql.NullInt64{Int64: 75, Valid: true}, |
| 10457 | }) |
| 10458 | |
| 10459 | earliestCreatedAt := pricedMessage.CreatedAt |
| 10460 | latestCreatedAt := pricedMessage.CreatedAt |
| 10461 | if unpricedMessage.CreatedAt.Before(earliestCreatedAt) { |
| 10462 | earliestCreatedAt = unpricedMessage.CreatedAt |
| 10463 | } |
| 10464 | if unpricedMessage.CreatedAt.After(latestCreatedAt) { |
| 10465 | latestCreatedAt = unpricedMessage.CreatedAt |
| 10466 | } |
| 10467 | options := codersdk.ChatCostSummaryOptions{ |
| 10468 | // Pad the DB-assigned timestamps to avoid time boundary flakes. |
| 10469 | StartDate: earliestCreatedAt.Add(-time.Minute), |
| 10470 | EndDate: latestCreatedAt.Add(time.Minute), |
| 10471 | } |
| 10472 | |
| 10473 | summary, err := client.GetChatCostSummary(ctx, "me", options) |
| 10474 | require.NoError(t, err) |
| 10475 | |
| 10476 | require.Equal(t, int64(500), summary.TotalCostMicros) |
| 10477 | require.Equal(t, int64(1), summary.PricedMessageCount) |
| 10478 | require.Equal(t, int64(1), summary.UnpricedMessageCount) |
| 10479 | require.Equal(t, int64(300), summary.TotalInputTokens) |
| 10480 | require.Equal(t, int64(125), summary.TotalOutputTokens) |
| 10481 | } |
| 10482 | |
| 10483 | func requireChatModelPricing( |
| 10484 | t *testing.T, |
nothing calls this directly
no test coverage detected