feat(chatd): add user-level custom prompt for agent chats (#22896)

Adds a user-level custom prompt to the database.

I'll be doing a follow-up for the UI, as we currently do not have
user-level settings (it's just admin). I'll also make it very obvious
for chats where there is a user-level prompt, but I don't know how yet.
This commit is contained in:
Kyle Carberry
2026-03-10 11:17:52 -04:00
committed by GitHub
parent 6489d6f714
commit b6d1a11c58
12 changed files with 301 additions and 2 deletions
+40
View File
@@ -211,6 +211,18 @@ type UpdateChatSystemPromptRequest struct {
SystemPrompt string `json:"system_prompt"`
}
// UserChatCustomPromptResponse is the response for getting a user's
// custom chat prompt.
type UserChatCustomPromptResponse struct {
CustomPrompt string `json:"custom_prompt"`
}
// UpdateUserChatCustomPromptRequest is the request to update a user's
// custom chat prompt.
type UpdateUserChatCustomPromptRequest struct {
CustomPrompt string `json:"custom_prompt"`
}
// ChatProviderConfigSource describes how a provider entry is sourced.
type ChatProviderConfigSource string
@@ -725,6 +737,34 @@ func (c *Client) UpdateChatSystemPrompt(ctx context.Context, req UpdateChatSyste
return nil
}
// GetUserChatCustomPrompt fetches the user's custom chat prompt.
func (c *Client) GetUserChatCustomPrompt(ctx context.Context) (UserChatCustomPromptResponse, error) {
res, err := c.Request(ctx, http.MethodGet, "/api/experimental/chats/config/user-prompt", nil)
if err != nil {
return UserChatCustomPromptResponse{}, err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return UserChatCustomPromptResponse{}, ReadBodyAsError(res)
}
var resp UserChatCustomPromptResponse
return resp, json.NewDecoder(res.Body).Decode(&resp)
}
// UpdateUserChatCustomPrompt updates the user's custom chat prompt.
func (c *Client) UpdateUserChatCustomPrompt(ctx context.Context, req UpdateUserChatCustomPromptRequest) (UserChatCustomPromptResponse, error) {
res, err := c.Request(ctx, http.MethodPut, "/api/experimental/chats/config/user-prompt", req)
if err != nil {
return UserChatCustomPromptResponse{}, err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return UserChatCustomPromptResponse{}, ReadBodyAsError(res)
}
var resp UserChatCustomPromptResponse
return resp, json.NewDecoder(res.Body).Decode(&resp)
}
// CreateChat creates a new chat.
func (c *Client) CreateChat(ctx context.Context, req CreateChatRequest) (Chat, error) {
res, err := c.Request(ctx, http.MethodPost, "/api/experimental/chats", req)