Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
11 changes: 7 additions & 4 deletions crates/goose-server/src/routes/reply.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,11 @@ fn track_tool_telemetry(content: &MessageContent, all_messages: &[Message]) {
#[derive(Debug, Deserialize, Serialize, utoipa::ToSchema)]
pub struct ChatRequest {
user_message: Message,
/// Override the server's conversation history. Only use this when you need absolute control
/// over the conversation state (e.g., administrative tools). For normal operations, the server
/// is the source of truth - use truncate/fork endpoints to modify conversation history instead.
#[serde(default)]
conversation_so_far: Option<Vec<Message>>,
override_conversation: Option<Vec<Message>>,
session_id: String,
recipe_name: Option<String>,
recipe_version: Option<String>,
Expand Down Expand Up @@ -240,7 +243,7 @@ pub async fn reply(
let cancel_token = CancellationToken::new();

let user_message = request.user_message;
let conversation_so_far = request.conversation_so_far;
let override_conversation = request.override_conversation;

let task_cancel = cancel_token.clone();
let task_tx = tx.clone();
Expand Down Expand Up @@ -285,7 +288,7 @@ pub async fn reply(
retry_config: None,
};

let mut all_messages = match conversation_so_far {
let mut all_messages = match override_conversation {
Some(history) => {
let conv = Conversation::new_unvalidated(history);
if let Err(e) = state
Expand Down Expand Up @@ -489,7 +492,7 @@ mod tests {
.body(Body::from(
serde_json::to_string(&ChatRequest {
user_message: Message::user().with_text("test message"),
conversation_so_far: None,
override_conversation: None,
session_id: "test-session".to_string(),
recipe_name: None,
recipe_version: None,
Expand Down
3 changes: 2 additions & 1 deletion ui/desktop/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -3898,11 +3898,12 @@
"session_id"
],
"properties": {
"conversation_so_far": {
"override_conversation": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Message"
},
"description": "Override the server's conversation history. Only use this when you need absolute control\nover the conversation state (e.g., administrative tools). For normal operations, the server\nis the source of truth - use truncate/fork endpoints to modify conversation history instead.",
"nullable": true
},
"recipe_name": {
Expand Down
7 changes: 6 additions & 1 deletion ui/desktop/src/api/types.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,12 @@ export type CallToolResponse = {
};

export type ChatRequest = {
conversation_so_far?: Array<Message> | null;
/**
* Override the server's conversation history. Only use this when you need absolute control
* over the conversation state (e.g., administrative tools). For normal operations, the server
* is the source of truth - use truncate/fork endpoints to modify conversation history instead.
*/
override_conversation?: Array<Message> | null;
recipe_name?: string | null;
recipe_version?: string | null;
session_id: string;
Expand Down
2 changes: 0 additions & 2 deletions ui/desktop/src/hooks/useChatStream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,6 @@ export function useChatStream({
body: {
session_id: sessionId,
user_message: newMessage,
...(hasExistingMessages && { conversation_so_far: currentState.messages }),
},
throwOnError: true,
signal: abortControllerRef.current.signal,
Expand Down Expand Up @@ -771,7 +770,6 @@ export function useChatStream({
body: {
session_id: targetSessionId,
user_message: updatedUserMessage,
conversation_so_far: truncatedMessages,
},
throwOnError: true,
signal: abortControllerRef.current.signal,
Expand Down
Loading