(t *testing.T)
| 6541 | } |
| 6542 | |
| 6543 | func TestSendMessageQueuesEffectiveModelConfigID(t *testing.T) { |
| 6544 | t.Parallel() |
| 6545 | |
| 6546 | ctx := testutil.Context(t, testutil.WaitLong) |
| 6547 | client, db := newChatClientWithDatabase(t) |
| 6548 | user := coderdtest.CreateFirstUser(t, client.Client) |
| 6549 | modelConfigA := createChatModelConfig(t, client) |
| 6550 | modelConfigB := createAdditionalChatModelConfig(t, client, modelConfigA.Provider, "gpt-4o-mini-queued-"+uuid.NewString()) |
| 6551 | |
| 6552 | chat := dbgen.Chat(t, db, database.Chat{ |
| 6553 | OrganizationID: user.OrganizationID, |
| 6554 | OwnerID: user.UserID, |
| 6555 | LastModelConfigID: modelConfigA.ID, |
| 6556 | Title: "mid-chat model switch queued send", |
| 6557 | }) |
| 6558 | |
| 6559 | _, err := db.UpdateChatStatus(dbauthz.AsSystemRestricted(ctx), database.UpdateChatStatusParams{ |
| 6560 | ID: chat.ID, |
| 6561 | Status: database.ChatStatusRunning, |
| 6562 | WorkerID: uuid.NullUUID{UUID: uuid.New(), Valid: true}, |
| 6563 | StartedAt: sql.NullTime{Time: time.Now(), Valid: true}, |
| 6564 | HeartbeatAt: sql.NullTime{Time: time.Now(), Valid: true}, |
| 6565 | LastError: pqtype.NullRawMessage{}, |
| 6566 | }) |
| 6567 | require.NoError(t, err) |
| 6568 | |
| 6569 | resp, err := client.CreateChatMessage(ctx, chat.ID, codersdk.CreateChatMessageRequest{ |
| 6570 | Content: []codersdk.ChatInputPart{{ |
| 6571 | Type: codersdk.ChatInputPartTypeText, |
| 6572 | Text: "queue this with model b", |
| 6573 | }}, |
| 6574 | ModelConfigID: ptr.Ref(modelConfigB.ID), |
| 6575 | BusyBehavior: codersdk.ChatBusyBehaviorQueue, |
| 6576 | }) |
| 6577 | require.NoError(t, err) |
| 6578 | require.True(t, resp.Queued) |
| 6579 | require.NotNil(t, resp.QueuedMessage) |
| 6580 | require.NotNil(t, resp.QueuedMessage.ModelConfigID) |
| 6581 | require.Equal(t, modelConfigB.ID, *resp.QueuedMessage.ModelConfigID) |
| 6582 | |
| 6583 | queuedMessages, err := db.GetChatQueuedMessages(dbauthz.AsSystemRestricted(ctx), chat.ID) |
| 6584 | require.NoError(t, err) |
| 6585 | require.Len(t, queuedMessages, 1) |
| 6586 | require.True(t, queuedMessages[0].ModelConfigID.Valid) |
| 6587 | require.Equal(t, modelConfigB.ID, queuedMessages[0].ModelConfigID.UUID) |
| 6588 | |
| 6589 | storedChat, err := db.GetChatByID(dbauthz.AsSystemRestricted(ctx), chat.ID) |
| 6590 | require.NoError(t, err) |
| 6591 | require.Equal(t, modelConfigA.ID, storedChat.LastModelConfigID) |
| 6592 | } |
| 6593 | |
| 6594 | func TestQueuedMessageWithoutOverrideCapturesEnqueueTimeModel(t *testing.T) { |
| 6595 | t.Parallel() |
nothing calls this directly
no test coverage detected