Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
7e42edb
feat: persist queued chat message model config
ibetitsmike Apr 23, 2026
35724e2
test(coderd): cover mid-chat model switching
ibetitsmike Apr 23, 2026
9837446
fix(site/src): merge last_model_config_id on chat watch updates
ibetitsmike Apr 23, 2026
3f483d8
fix(coderd/x/chatd): address review feedback
ibetitsmike Apr 23, 2026
57d273a
fix(site/src/api/queries): address review feedback
ibetitsmike Apr 23, 2026
f7bd80c
test: close review coverage gaps
ibetitsmike Apr 23, 2026
4cbd818
test: tighten review coverage gaps
ibetitsmike Apr 23, 2026
1e1048f
test(site/src/api/queries): pin equal-timestamp merge boundary
ibetitsmike Apr 23, 2026
f94164b
fix(coderd/x/chatd): validate queued model configs
ibetitsmike Apr 24, 2026
d58d795
fix(site/src/api/queries): merge diff status events by event freshness
ibetitsmike Apr 24, 2026
8b2a485
fix(coderd/x/chatd): use chatd auth for model config validation
ibetitsmike Apr 24, 2026
36e0c44
fix(site/src/api/queries): compare chat timestamps as instants
ibetitsmike Apr 24, 2026
4b52d2e
Merge remote-tracking branch 'origin/main' into agent_exec_bd9a1c199f
ibetitsmike Apr 24, 2026
4937ad5
fix(coderd/database/migrations): renumber chat queued model migration
ibetitsmike Apr 24, 2026
51b177f
refactor(coderd): simplify chat message option types
ibetitsmike Apr 24, 2026
028bfe3
chore: retrigger CI after workflow_dispatch
ibetitsmike Apr 24, 2026
6d3726a
chore: retrigger ci via pull_request event
ibetitsmike Apr 24, 2026
f74b942
Merge origin/main into mike/model-switcher-nc3f
ibetitsmike Apr 24, 2026
f4b42a5
fix(site/src/api/queries): merge title events regardless of chat upda…
ibetitsmike Apr 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions coderd/database/db2sdk/db2sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -1517,10 +1517,11 @@ func ChatQueuedMessage(message database.ChatQueuedMessage) codersdk.ChatQueuedMe
}

return codersdk.ChatQueuedMessage{
ID: message.ID,
ChatID: message.ChatID,
Content: parts,
CreatedAt: message.CreatedAt,
ID: message.ID,
ChatID: message.ChatID,
ModelConfigID: nullUUIDPtr(message.ModelConfigID),
Content: parts,
CreatedAt: message.CreatedAt,
}
}

Expand Down
3 changes: 2 additions & 1 deletion coderd/database/dump.sql

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE chat_queued_messages
DROP COLUMN model_config_id;
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
ALTER TABLE chat_queued_messages
ADD COLUMN model_config_id uuid;

UPDATE chat_queued_messages AS cqm
SET model_config_id = chats.last_model_config_id
FROM chats
WHERE chats.id = cqm.chat_id
AND cqm.model_config_id IS NULL;
9 changes: 5 additions & 4 deletions coderd/database/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 16 additions & 8 deletions coderd/database/queries.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 6 additions & 2 deletions coderd/database/queries/chats.sql
Original file line number Diff line number Diff line change
Expand Up @@ -882,8 +882,12 @@ RETURNING
*;

-- name: InsertChatQueuedMessage :one
INSERT INTO chat_queued_messages (chat_id, content)
VALUES (@chat_id, @content)
INSERT INTO chat_queued_messages (chat_id, content, model_config_id)
VALUES (
@chat_id,
@content,
sqlc.narg('model_config_id')::uuid
)
RETURNING *;

-- name: GetChatQueuedMessages :many
Expand Down
13 changes: 12 additions & 1 deletion coderd/exp_chats.go
Original file line number Diff line number Diff line change
Expand Up @@ -2531,13 +2531,18 @@ func (api *API) postChatMessages(rw http.ResponseWriter, r *http.Request) {
return
}

modelConfigID := uuid.Nil
if req.ModelConfigID != nil {
modelConfigID = *req.ModelConfigID
}

sendResult, sendErr := api.chatDaemon.SendMessage(
ctx,
chatd.SendMessageOptions{
ChatID: chatID,
CreatedBy: apiKey.UserID,
Content: contentBlocks,
ModelConfigID: req.ModelConfigID,
ModelConfigID: modelConfigID,
BusyBehavior: busyBehavior,
PlanMode: sendPlanMode,
MCPServerIDs: req.MCPServerIDs,
Expand All @@ -2560,6 +2565,12 @@ func (api *API) postChatMessages(rw http.ResponseWriter, r *http.Request) {
})
return
}
if xerrors.Is(sendErr, chatd.ErrInvalidModelConfigID) {
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
Message: "Invalid model config ID.",
})
return
}
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
Message: "Failed to create chat message.",
Detail: sendErr.Error(),
Expand Down
Loading
Loading