TestEditMessageWithModelConfigOverride verifies that callers can change the model when editing a previous user message. The replacement message must persist with the new model and the chat's LastModelConfigID must be advanced so the assistant turn that follows runs against the new selection.
(t *testing.T)
| 8943 | // LastModelConfigID must be advanced so the assistant turn that follows |
| 8944 | // runs against the new selection. |
| 8945 | func TestEditMessageWithModelConfigOverride(t *testing.T) { |
| 8946 | t.Parallel() |
| 8947 | |
| 8948 | db, ps := dbtestutil.NewDB(t) |
| 8949 | replica := newTestServer(t, db, ps, uuid.New()) |
| 8950 | |
| 8951 | ctx := testutil.Context(t, testutil.WaitLong) |
| 8952 | user, org, modelA := seedChatDependencies(t, db) |
| 8953 | modelB := insertChatModelConfigWithCallConfig( |
| 8954 | t, |
| 8955 | db, |
| 8956 | user.ID, |
| 8957 | "openai", |
| 8958 | "gpt-4o-mini-edit-"+uuid.NewString(), |
| 8959 | codersdk.ChatModelCallConfig{}, |
| 8960 | ) |
| 8961 | |
| 8962 | chat, err := replica.CreateChat(ctx, chatd.CreateOptions{ |
| 8963 | OwnerID: user.ID, |
| 8964 | OrganizationID: org.ID, |
| 8965 | Title: "edit-with-model-override", |
| 8966 | ModelConfigID: modelA.ID, |
| 8967 | InitialUserContent: []codersdk.ChatMessagePart{codersdk.ChatMessageText("original")}, |
| 8968 | }) |
| 8969 | require.NoError(t, err) |
| 8970 | |
| 8971 | initial, err := db.GetChatMessagesByChatID(ctx, database.GetChatMessagesByChatIDParams{ |
| 8972 | ChatID: chat.ID, |
| 8973 | AfterID: 0, |
| 8974 | }) |
| 8975 | require.NoError(t, err) |
| 8976 | require.Len(t, initial, 1) |
| 8977 | require.Equal(t, modelA.ID, initial[0].ModelConfigID.UUID) |
| 8978 | |
| 8979 | result, err := replica.EditMessage(ctx, chatd.EditMessageOptions{ |
| 8980 | ChatID: chat.ID, |
| 8981 | EditedMessageID: initial[0].ID, |
| 8982 | Content: []codersdk.ChatMessagePart{codersdk.ChatMessageText("edited")}, |
| 8983 | ModelConfigID: modelB.ID, |
| 8984 | }) |
| 8985 | require.NoError(t, err) |
| 8986 | require.True(t, result.Message.ModelConfigID.Valid) |
| 8987 | require.Equal(t, modelB.ID, result.Message.ModelConfigID.UUID) |
| 8988 | |
| 8989 | storedChat, err := db.GetChatByID(ctx, chat.ID) |
| 8990 | require.NoError(t, err) |
| 8991 | require.Equal(t, modelB.ID, storedChat.LastModelConfigID, |
| 8992 | "edit must update last_model_config_id so the assistant turn picks up the new model") |
| 8993 | } |
| 8994 | |
| 8995 | // TestEditMessagePreservesModelConfigByDefault verifies that omitting |
| 8996 | // ModelConfigID on edit keeps the original message's model. This is the |
nothing calls this directly
no test coverage detected