Files
iAs/service/src/core/context.rs
T

41 lines
1.3 KiB
Rust

use std::sync::OnceLock;
use tokio::sync::Mutex;
use common::model::ai::{ChatCompletionRequestMessage, ChatCompletionToolCall};
static CHAT_CONTEXT: OnceLock<Mutex<Vec<ChatCompletionRequestMessage>>> = OnceLock::new();
fn chat_context() -> &'static Mutex<Vec<ChatCompletionRequestMessage>> {
CHAT_CONTEXT.get_or_init(|| Mutex::new(Vec::new()))
}
pub async fn push_context_message(msg: ChatCompletionRequestMessage) {
let mut context = chat_context().lock().await;
context.push(msg);
}
pub async fn snapshot_context() -> Vec<ChatCompletionRequestMessage> {
let context = chat_context().lock().await;
context.clone()
}
pub async fn add_assistant_message(
content: String,
tool_calls: Option<Vec<ChatCompletionToolCall>>,
) {
let message =
ChatCompletionRequestMessage::assistant("assistant".to_string(), content, tool_calls);
push_context_message(message).await;
}
pub async fn add_user_message(content: String) {
let message = ChatCompletionRequestMessage::new("user".to_string(), content);
push_context_message(message).await;
}
pub async fn add_tool_message(call_id: String, result: String) {
let message = ChatCompletionRequestMessage::tool("tool".to_string(), result, call_id);
push_context_message(message).await;
}