add HumanInterface
add cli
This commit is contained in:
+18
-20
@@ -1,14 +1,12 @@
|
||||
mod config;
|
||||
mod model;
|
||||
mod human_interface;
|
||||
|
||||
use own_mcp::audio::{AudioClientTrait};
|
||||
use own_mcp::mcp::chat::{PermissionAnswer, ToolPermission};
|
||||
use crate::config::Config;
|
||||
use crate::model::create_model_from_config;
|
||||
|
||||
async fn permission_callback(mcp_server_name: String, tool_name:String) -> PermissionAnswer {
|
||||
PermissionAnswer::Denied // TODO: implement
|
||||
}
|
||||
use crate::human_interface::HumanInterface;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
@@ -19,45 +17,45 @@ async fn main() {
|
||||
std::process::exit(1);
|
||||
}).unwrap();
|
||||
|
||||
let audio_client = config.audio_client();
|
||||
/*let audio_client = config.audio_client();
|
||||
log::debug!("Audio server status {:?}", audio_client.status().await.inspect_err(|e|{
|
||||
log::error!("audio server error {}", e);
|
||||
std::process::exit(1);
|
||||
}).unwrap());
|
||||
}).unwrap());*/
|
||||
|
||||
let ollama = config.ollama_instance();
|
||||
|
||||
let mcp_clients = config.mcp_clients().await;
|
||||
|
||||
let model_name = &config.ollama_config().model.name;
|
||||
|
||||
create_model_from_config(&ollama, &config.ollama_config().model).await.inspect_err(|e|{
|
||||
log::error!("failed creating ollama model {model_name}: {e}");
|
||||
std::process::exit(1);
|
||||
}).unwrap();
|
||||
|
||||
let system_prompt = "Du bist ein Assistent, der per Sprache bedient wird. Du erhälst die Transkription \
|
||||
und dein Output wird per Sprache ausgegeben und sollte dementsprechend auch kurz sein. \
|
||||
und dein Output wird per Sprache ausgegeben und sollte dementsprechend auch kurz sein und kein Markdown enthalten. \
|
||||
Wichtiger als deine Antworten sind deine Aktionen.\
|
||||
Nutze bitte die tools, falls du sie brauchst um Informationen zu bekommen (z.B: über das aktuelle Datum oder den aktuellen Wochentag). \
|
||||
Nutze bitte die tools, falls du sie brauchst um Informationen zu bekommen (z.B. über das aktuelle Datum oder den aktuellen Wochentag). \
|
||||
Du bist in einem Agent Loop und kannst mehrere Tools hintereinander nutzen. \
|
||||
Falls der Nutzer das Nutzen eines Tools ablehnt, sag ihm bescheid, dass du es brauchst.".to_string();
|
||||
|
||||
let mcp_clients = config.mcp_clients().await;
|
||||
|
||||
let mut agent_chat = own_mcp::AgentChat::new(ollama, model_name.clone(), mcp_clients, system_prompt).await.inspect_err(
|
||||
|e| {
|
||||
log::error!("error creating agent: {}", e);
|
||||
std::process::exit(1);
|
||||
}
|
||||
).unwrap();
|
||||
config.set_tool_permissions(&mut agent_chat).await.unwrap();
|
||||
|
||||
log::info!("all tools: {:#?}", agent_chat.get_all_tools().collect::<Vec<_>>());
|
||||
|
||||
agent_chat.set_permission("datetime:get_weekday".to_string(), ToolPermission::Allowed).unwrap();
|
||||
agent_chat.set_permission("datetime:get_utc_datetime".to_string(), ToolPermission::Allowed).unwrap();
|
||||
agent_chat.set_permission("datetime:get_local_datetime".to_string(), ToolPermission::Allowed).unwrap();
|
||||
agent_chat.set_permission("datetime:get_week".to_string(), ToolPermission::Allowed).unwrap();
|
||||
let human_interface = human_interface::cli::CommandLine{};
|
||||
human_interface.run().await.unwrap();
|
||||
|
||||
let answer = agent_chat.message("In welcher Kalenderwoche befinden wir uns gerade?".to_string(), permission_callback).await;
|
||||
|
||||
dbg!(answer);
|
||||
loop {
|
||||
let user_message = human_interface.expect_user_message().await.unwrap();
|
||||
let agent_message = agent_chat.message(user_message, async |mcp_server_name, tool_name|{
|
||||
human_interface.ask_for_permission(mcp_server_name, tool_name).await.expect("io should not fail")
|
||||
}).await.expect("failed communicating with agent");
|
||||
human_interface.agent_message(agent_message.content);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user