add permission support

refactoring
This commit is contained in:
milan
2026-04-07 17:53:32 +02:00
parent ee17e74753
commit 94811c5a89
8 changed files with 566 additions and 63 deletions
+2 -3
View File
@@ -26,14 +26,13 @@ impl Config {
}
pub fn ollama_instance(&self) -> Ollama {
let ollama_default_url = Url::parse("http://127.0.0.1:11434").unwrap();
let mut ollama_headers = HeaderMap::new();
if let Some(authorization_header) = &self.ollama.authorization {
ollama_headers.append("Authorization", HeaderValue::from_str(&authorization_header).unwrap());
}
let ollama_default_url = Url::parse("http://127.0.0.1:11434").unwrap();
let mut ollama = Ollama::from_url(self.ollama.url.clone().unwrap_or(ollama_default_url));
ollama.set_headers(Some(ollama_headers));
@@ -64,7 +63,7 @@ impl Config {
pub struct OllamaConfig {
pub url: Option<Url>,
pub model: OllamaModelConfig,
pub authorization: Option<String>, // TODO: implement
pub authorization: Option<String>,
}
#[derive(Debug, Deserialize)]
+12 -4
View File
@@ -1,9 +1,14 @@
mod config;
mod model;
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
}
#[tokio::main]
async fn main() {
env_logger::init();
@@ -27,7 +32,8 @@ async fn main() {
let system_prompt = "Du bist ein Assistent, der per Sprache bedient wird. Du erhälst die Transkription. \
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). \
Du bist in einem Agent Loop und kannst mehrere Tools hintereinander nutzen.".to_string();
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 mut agent_chat = own_mcp::AgentChat::new(ollama, model_name.clone(), mcp_clients, system_prompt).await.inspect_err(
|e| {
@@ -36,10 +42,12 @@ async fn main() {
}
).unwrap();
log::info!("all tools: {:#?}", agent_chat.get_all_tools());
log::info!("all tools: {:#?}", agent_chat.get_all_tools().collect::<Vec<_>>());
let answer = agent_chat.message("Welche Tools kannst du benutzten?".to_string()).await;
let answer = agent_chat.message("Teste beide Server aus. Nutze bei fetch https://example.com/. Melde mir die Ergebnisse zurück.".to_string()).await;
agent_chat.set_permission("mcp-playground-echo-server::echo".to_string(), ToolPermission::Allowed).unwrap();
let answer = agent_chat.message("Welche Tools kannst du benutzten?".to_string(), permission_callback).await;
let answer = agent_chat.message("Teste beide Server aus. Nutze bei fetch https://example.com/. Melde mir die Ergebnisse zurück.".to_string(), permission_callback).await;
dbg!(answer);
}