| 109 | } |
| 110 | |
| 111 | func ChatMessage(t testing.TB, db database.Store, seed database.ChatMessage) database.ChatMessage { |
| 112 | t.Helper() |
| 113 | |
| 114 | content := "[]" |
| 115 | if seed.Content.Valid { |
| 116 | content = string(seed.Content.RawMessage) |
| 117 | } |
| 118 | |
| 119 | msgs, err := db.InsertChatMessages(genCtx, database.InsertChatMessagesParams{ |
| 120 | ChatID: seed.ChatID, |
| 121 | CreatedBy: []uuid.UUID{seed.CreatedBy.UUID}, |
| 122 | APIKeyID: []string{seed.APIKeyID.String}, |
| 123 | ModelConfigID: []uuid.UUID{seed.ModelConfigID.UUID}, |
| 124 | Role: []database.ChatMessageRole{takeFirst(seed.Role, database.ChatMessageRoleUser)}, |
| 125 | Content: []string{content}, |
| 126 | ContentVersion: []int16{takeFirst(seed.ContentVersion, chatprompt.CurrentContentVersion)}, |
| 127 | Visibility: []database.ChatMessageVisibility{takeFirst(seed.Visibility, database.ChatMessageVisibilityBoth)}, |
| 128 | InputTokens: []int64{seed.InputTokens.Int64}, |
| 129 | OutputTokens: []int64{seed.OutputTokens.Int64}, |
| 130 | TotalTokens: []int64{seed.TotalTokens.Int64}, |
| 131 | ReasoningTokens: []int64{seed.ReasoningTokens.Int64}, |
| 132 | CacheCreationTokens: []int64{seed.CacheCreationTokens.Int64}, |
| 133 | CacheReadTokens: []int64{seed.CacheReadTokens.Int64}, |
| 134 | ContextLimit: []int64{seed.ContextLimit.Int64}, |
| 135 | Compressed: []bool{seed.Compressed}, |
| 136 | TotalCostMicros: []int64{seed.TotalCostMicros.Int64}, |
| 137 | RuntimeMs: []int64{seed.RuntimeMs.Int64}, |
| 138 | ProviderResponseID: []string{seed.ProviderResponseID.String}, |
| 139 | }) |
| 140 | require.NoError(t, err, "insert chat message") |
| 141 | require.Len(t, msgs, 1) |
| 142 | return msgs[0] |
| 143 | } |
| 144 | |
| 145 | const ( |
| 146 | // Match the default OpenAI test model's effective context settings. |