diff --git a/arch/src/stream_context.rs b/arch/src/stream_context.rs index 567fb186..9ca8e5fd 100644 --- a/arch/src/stream_context.rs +++ b/arch/src/stream_context.rs @@ -622,7 +622,7 @@ impl StreamContext { fn function_call_response_handler( &mut self, body: Vec, - callout_context: StreamCallContext, + mut callout_context: StreamCallContext, ) { if let Some(http_status) = self.get_http_call_response_header(":status") { if http_status != StatusCode::OK.as_str() { @@ -651,7 +651,28 @@ impl StreamContext { .unwrap() .clone(); - let mut messages: Vec = callout_context.request_body.messages.clone(); + let mut messages: Vec = Vec::new(); + + // add system prompt + let system_prompt = match prompt_target.system_prompt.as_ref() { + None => match self.system_prompt.as_ref() { + None => None, + Some(system_prompt) => Some(system_prompt.clone()), + }, + Some(system_prompt) => Some(system_prompt.clone()), + }; + if system_prompt.is_some() { + let system_prompt_message = Message { + role: SYSTEM_ROLE.to_string(), + content: system_prompt, + model: None, + tool_calls: None, + }; + messages.push(system_prompt_message); + } + + messages.append(callout_context.request_body.messages.as_mut()); + let user_message = match messages.pop() { Some(user_message) => user_message, None => { @@ -664,25 +685,6 @@ impl StreamContext { } }; - // add system prompt - let system_prompt = match prompt_target.system_prompt.as_ref() { - None => match self.system_prompt.as_ref() { - None => None, - Some(system_prompt) => Some(system_prompt.clone()), - }, - Some(system_prompt) => Some(system_prompt.clone()), - }; - - if system_prompt.is_some() { - let system_prompt_message = Message { - role: SYSTEM_ROLE.to_string(), - content: system_prompt, - model: None, - tool_calls: None, - }; - messages.push(system_prompt_message); - } - let final_prompt = format!( "{}\nhere is context: {}", user_message.content.unwrap(),