revert /reply to previous behavior (replacing session history) when full conversation provided (#6058)

This commit is contained in:
tlongwell-block
2025-12-18 12:55:30 -05:00
committed by GitHub
parent 1b059af169
commit d629fecc23
4 changed files with 36 additions and 27 deletions
+21 -18
View File
@@ -75,7 +75,9 @@ fn track_tool_telemetry(content: &MessageContent, all_messages: &[Message]) {
#[derive(Debug, Deserialize, Serialize, utoipa::ToSchema)]
pub struct ChatRequest {
messages: Vec<Message>,
user_message: Message,
#[serde(default)]
conversation_so_far: Option<Vec<Message>>,
session_id: String,
recipe_name: Option<String>,
recipe_version: Option<String>,
@@ -233,7 +235,8 @@ pub async fn reply(
let stream = ReceiverStream::new(rx);
let cancel_token = CancellationToken::new();
let messages = Conversation::new_unvalidated(request.messages);
let user_message = request.user_message;
let conversation_so_far = request.conversation_so_far;
let task_cancel = cancel_token.clone();
let task_tx = tx.clone();
@@ -255,7 +258,7 @@ pub async fn reply(
}
};
let session = match SessionManager::get_session(&session_id, false).await {
let session = match SessionManager::get_session(&session_id, true).await {
Ok(metadata) => metadata,
Err(e) => {
tracing::error!("Failed to read session for {}: {}", session_id, e);
@@ -278,20 +281,21 @@ pub async fn reply(
retry_config: None,
};
let user_message = match messages.last() {
Some(msg) => msg,
_ => {
let _ = stream_event(
MessageEvent::Error {
error: "Reply started with empty messages".to_string(),
},
&task_tx,
&task_cancel,
)
.await;
return;
let mut all_messages = match conversation_so_far {
Some(history) => {
let conv = Conversation::new_unvalidated(history);
if let Err(e) = SessionManager::replace_conversation(&session_id, &conv).await {
tracing::warn!(
"Failed to replace session conversation for {}: {}",
session_id,
e
);
}
conv
}
None => session.conversation.unwrap_or_default(),
};
all_messages.push(user_message.clone());
let mut stream = match agent
.reply(
@@ -316,8 +320,6 @@ pub async fn reply(
}
};
let mut all_messages = messages.clone();
let mut heartbeat_interval = tokio::time::interval(Duration::from_millis(500));
loop {
tokio::select! {
@@ -478,7 +480,8 @@ mod tests {
.header("x-secret-key", "test-secret")
.body(Body::from(
serde_json::to_string(&ChatRequest {
messages: vec![Message::user().with_text("test message")],
user_message: Message::user().with_text("test message"),
conversation_so_far: None,
session_id: "test-session".to_string(),
recipe_name: None,
recipe_version: None,