MCPcopy Index your code
hub / github.com/coder/coder / TestDebugModel_Generate

Function TestDebugModel_Generate

coderd/x/chatd/chatdebug/model_internal_test.go:195–270  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

193}
194
195func TestDebugModel_Generate(t *testing.T) {
196 t.Parallel()
197
198 ctrl := gomock.NewController(t)
199 db := dbmock.NewMockStore(ctrl)
200 chatID := uuid.New()
201 ownerID := uuid.New()
202 runID := uuid.New()
203 call := fantasy.Call{
204 Prompt: fantasy.Prompt{fantasy.NewUserMessage("hello")},
205 MaxOutputTokens: int64Ptr(128),
206 Temperature: float64Ptr(0.25),
207 }
208 respWant := &fantasy.Response{
209 Content: fantasy.ResponseContent{
210 fantasy.TextContent{Text: "hello"},
211 fantasy.ToolCallContent{ToolCallID: "tool-1", ToolName: "tool", Input: `{}`},
212 fantasy.SourceContent{ID: "source-1", Title: "docs", URL: "https://example.com"},
213 },
214 FinishReason: fantasy.FinishReasonStop,
215 Usage: fantasy.Usage{InputTokens: 10, OutputTokens: 4, TotalTokens: 14},
216 Warnings: []fantasy.CallWarning{{Message: "warning"}},
217 }
218
219 expectDebugLoggingEnabled(t, db, ownerID)
220 stepID := expectCreateStep(t, db, runID, chatID, OperationGenerate)
221 expectUpdateStep(t, db, stepID, chatID, StatusCompleted, func(params database.UpdateChatDebugStepParams) {
222 require.True(t, params.NormalizedResponse.Valid)
223 require.True(t, params.Usage.Valid)
224 require.True(t, params.Attempts.Valid)
225 // Clean successes (no prior error) leave the error column
226 // as SQL NULL rather than sending jsonClear.
227 require.False(t, params.Error.Valid)
228 require.False(t, params.Metadata.Valid)
229
230 // Verify actual JSON content so a broken tag or field
231 // rename is caught rather than only checking .Valid.
232 var usage fantasy.Usage
233 require.NoError(t, json.Unmarshal(params.Usage.RawMessage, &usage))
234 require.EqualValues(t, 10, usage.InputTokens)
235 require.EqualValues(t, 4, usage.OutputTokens)
236 require.EqualValues(t, 14, usage.TotalTokens)
237
238 var resp map[string]any
239 require.NoError(t, json.Unmarshal(params.NormalizedResponse.RawMessage, &resp))
240 require.Equal(t, "stop", resp["finish_reason"])
241 })
242
243 svc := NewService(db, testutil.Logger(t), nil)
244 inner := &chattest.FakeModel{
245 GenerateFn: func(ctx context.Context, got fantasy.Call) (*fantasy.Response, error) {
246 require.Equal(t, call, got)
247 stepCtx, ok := StepFromContext(ctx)
248 require.True(t, ok)
249 require.Equal(t, runID, stepCtx.RunID)
250 require.Equal(t, chatID, stepCtx.ChatID)
251 require.Equal(t, int32(1), stepCtx.StepNumber)
252 require.Equal(t, OperationGenerate, stepCtx.Operation)

Callers

nothing calls this directly

Calls 15

GenerateMethod · 0.95
NewMockStoreFunction · 0.92
LoggerFunction · 0.92
float64PtrFunction · 0.85
expectCreateStepFunction · 0.85
expectUpdateStepFunction · 0.85
NewServiceFunction · 0.85
StepFromContextFunction · 0.85
attemptSinkFromContextFunction · 0.85
CleanupStepCounterFunction · 0.85
ContextWithRunFunction · 0.85

Tested by

no test coverage detected