重构并拆分项目
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
use crate::{
|
||||
AppState,
|
||||
core::context::{add_assistant_message, add_tool_message, add_user_message, snapshot_context},
|
||||
};
|
||||
use ai::core::send_message;
|
||||
use axum::Json;
|
||||
use axum::extract::State;
|
||||
use common::queue::{ChannelMessage, QueueMessage};
|
||||
use serde_json::error;
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::{mpsc, mpsc::Sender};
|
||||
|
||||
pub async fn create_queue() -> Result<Sender<QueueMessage>, error::Error> {
|
||||
let (sender, mut receiver) = mpsc::channel::<QueueMessage>(100);
|
||||
let result_sender = sender.clone();
|
||||
tokio::spawn(async move {
|
||||
while let Some(msg) = receiver.recv().await {
|
||||
let queue_sender = sender.clone();
|
||||
match msg {
|
||||
QueueMessage::Aissitant(reasoning, content) => {
|
||||
println!("\n\n收到llm回复:\n{}\n-------\n{}", reasoning, content);
|
||||
add_assistant_message(content).await;
|
||||
}
|
||||
QueueMessage::Channel(name, text) => {
|
||||
println!("\n\n收到来自{}消息:\n{}", name, text);
|
||||
add_user_message(text).await;
|
||||
send_message(queue_sender, snapshot_context().await)
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
QueueMessage::Tool(tool_call_id, name, result) => {
|
||||
println!("\n\n调用{}工具的结果:\n{}", name, result);
|
||||
add_tool_message(tool_call_id, result).await;
|
||||
send_message(queue_sender, snapshot_context().await)
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
Ok(result_sender)
|
||||
}
|
||||
|
||||
pub async fn send_to_queue(
|
||||
State(state): State<Arc<AppState>>,
|
||||
Json(body): Json<ChannelMessage>,
|
||||
) -> Json<serde_json::Value> {
|
||||
match state
|
||||
.sender
|
||||
.send(QueueMessage::Channel(body.channel, body.content))
|
||||
.await
|
||||
{
|
||||
Ok(_) => Json(serde_json::json!({
|
||||
"success":true,
|
||||
"message":"queued"
|
||||
})),
|
||||
Err(_) => Json(serde_json::json!({
|
||||
"success":true,
|
||||
"message":"queue closed"
|
||||
})),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user