use super::ollama_client::LlmResponse;
use crate::state::app_state::AppState;
use std::sync::Arc;
use tracing::info;
pub struct ProcessedResponse {
pub output: Option<String>,
pub close_connection: bool,
pub wait_for_more: bool,
pub shutdown_server: bool,
}
pub async fn handle_llm_response(
response: LlmResponse,
app_state: &Arc<AppState>,
) -> ProcessedResponse {
let server_id = app_state.get_first_server_id().await;
if let Some(set_mem) = response.set_memory {
if let Some(sid) = server_id {
app_state.set_memory(sid, set_mem).await;
}
}
if let Some(append_mem) = response.append_memory {
if let Some(sid) = server_id {
let current = app_state.get_memory(sid).await.unwrap_or_default();
let new_memory = if current.is_empty() {
append_mem
} else {
format!("{}\n{}", current, append_mem)
};
app_state.set_memory(sid, new_memory).await;
}
}
if let Some(log_msg) = response.log_message {
info!("{}", log_msg);
}
ProcessedResponse {
output: response.output,
close_connection: response.close_connection,
wait_for_more: response.wait_for_more,
shutdown_server: response.shutdown_server,
}
}