From 1624a7cfcb8c46b80afd12b76421809076b3f8d3 Mon Sep 17 00:00:00 2001 From: benolt Date: Fri, 25 Oct 2024 13:06:04 +0200 Subject: [PATCH] feat: delete ollama model command --- .../src-tauri/capabilities/main.json | 3 ++- .../capabilities/shinkai-node-manager.json | 5 +++-- .../commands/shinkai_node_manager_commands.rs | 12 +++++++++++ .../ollama_api/ollama_api_client.rs | 21 ++++++++++++++++++- .../ollama_api/ollama_api_types.rs | 5 +++++ .../shinkai_node_manager.rs | 7 +++++++ apps/shinkai-desktop/src-tauri/src/main.rs | 9 ++++---- 7 files changed, 54 insertions(+), 8 deletions(-) diff --git a/apps/shinkai-desktop/src-tauri/capabilities/main.json b/apps/shinkai-desktop/src-tauri/capabilities/main.json index 667d79496..a022d00b8 100644 --- a/apps/shinkai-desktop/src-tauri/capabilities/main.json +++ b/apps/shinkai-desktop/src-tauri/capabilities/main.json @@ -30,7 +30,8 @@ "shinkai_node_set_default_options", "shinkai_node_get_ollama_api_url", "shinkai_node_get_default_model", + "shinkai_node_delete_ollama_model", "hardware_get_summary", "galxe_generate_proof" ] -} +} \ No newline at end of file diff --git a/apps/shinkai-desktop/src-tauri/capabilities/shinkai-node-manager.json b/apps/shinkai-desktop/src-tauri/capabilities/shinkai-node-manager.json index 1ac1662b4..d230f9b28 100644 --- a/apps/shinkai-desktop/src-tauri/capabilities/shinkai-node-manager.json +++ b/apps/shinkai-desktop/src-tauri/capabilities/shinkai-node-manager.json @@ -20,6 +20,7 @@ "shinkai_node_remove_storage", "shinkai_node_set_default_options", "shinkai_node_get_ollama_api_url", - "shinkai_node_get_default_model" + "shinkai_node_get_default_model", + "shinkai_node_delete_ollama_model" ] -} +} \ No newline at end of file diff --git a/apps/shinkai-desktop/src-tauri/src/commands/shinkai_node_manager_commands.rs b/apps/shinkai-desktop/src-tauri/src/commands/shinkai_node_manager_commands.rs index 16e5d223f..f3b0cc0a4 100644 --- a/apps/shinkai-desktop/src-tauri/src/commands/shinkai_node_manager_commands.rs +++ b/apps/shinkai-desktop/src-tauri/src/commands/shinkai_node_manager_commands.rs @@ -91,3 +91,15 @@ pub async fn shinkai_node_get_default_model() -> Result { let model = ShinkaiNodeOptions::default_initial_model(); Ok(model) } + +#[tauri::command] +pub async fn shinkai_node_delete_ollama_model(model_name: String) -> Result<(), String> { + let shinkai_node_manager_guard = SHINKAI_NODE_MANAGER_INSTANCE.get().unwrap().lock().await; + match shinkai_node_manager_guard + .delete_ollama_model(&model_name) + .await + { + Ok(_) => Ok(()), + Err(message) => Err(message), + } +} diff --git a/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_client.rs b/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_client.rs index 5f7491588..c85443d0c 100644 --- a/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_client.rs +++ b/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_client.rs @@ -1,7 +1,9 @@ use futures_util::{Stream, StreamExt}; use reqwest; -use super::ollama_api_types::{OllamaApiPullRequest, OllamaApiPullResponse, OllamaApiTagsResponse}; +use super::ollama_api_types::{ + OllamaApiDeleteRequest, OllamaApiPullRequest, OllamaApiPullResponse, OllamaApiTagsResponse, +}; pub struct OllamaApiClient { base_url: String, @@ -120,4 +122,21 @@ impl OllamaApiClient { as Box> + Send + Unpin>; Ok(result) } + + pub async fn delete_model(&self, model_name: &str) -> Result<(), String> { + let url = format!("{}/api/delete", self.base_url); + let client = reqwest::Client::new(); + let body = OllamaApiDeleteRequest { + model: model_name.to_string(), + }; + let response = client + .delete(&url) + .send() + .await + .map_err(|e| e.to_string())?; + if response.status() != 200 { + return Err(format!("failed to delete model: {}", response.status())); + } + Ok(()) + } } diff --git a/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_types.rs b/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_types.rs index 363647dbf..63bbda931 100644 --- a/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_types.rs +++ b/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/ollama_api/ollama_api_types.rs @@ -55,3 +55,8 @@ pub enum OllamaApiPullResponse { status: String, }, } + +#[derive(Serialize, Deserialize, Clone)] +pub struct OllamaApiDeleteRequest { + pub model: String, +} diff --git a/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/shinkai_node_manager.rs b/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/shinkai_node_manager.rs index 4a359e0c4..84a3daad5 100644 --- a/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/shinkai_node_manager.rs +++ b/apps/shinkai-desktop/src-tauri/src/local_shinkai_node/shinkai_node_manager.rs @@ -276,4 +276,11 @@ impl ShinkaiNodeManager { pub fn get_ollama_api_url(&self) -> String { self.ollama_process.get_ollama_api_base_url() } + + pub async fn delete_ollama_model(&self, model_name: &str) -> Result<(), String> { + let ollama_api_url = self.ollama_process.get_ollama_api_base_url(); + let ollama_api = OllamaApiClient::new(ollama_api_url); + + ollama_api.delete_model(model_name).await + } } diff --git a/apps/shinkai-desktop/src-tauri/src/main.rs b/apps/shinkai-desktop/src-tauri/src/main.rs index bbb4f5229..e19ae2096 100644 --- a/apps/shinkai-desktop/src-tauri/src/main.rs +++ b/apps/shinkai-desktop/src-tauri/src/main.rs @@ -7,10 +7,10 @@ use crate::commands::fetch::{get_request, post_request}; use crate::commands::galxe::galxe_generate_proof; use crate::commands::hardware::hardware_get_summary; use crate::commands::shinkai_node_manager_commands::{ - shinkai_node_get_default_model, shinkai_node_get_last_n_logs, shinkai_node_get_ollama_api_url, - shinkai_node_get_options, shinkai_node_is_running, shinkai_node_kill, - shinkai_node_remove_storage, shinkai_node_set_default_options, shinkai_node_set_options, - shinkai_node_spawn, show_shinkai_node_manager_window, + shinkai_node_delete_ollama_model, shinkai_node_get_default_model, shinkai_node_get_last_n_logs, + shinkai_node_get_ollama_api_url, shinkai_node_get_options, shinkai_node_is_running, + shinkai_node_kill, shinkai_node_remove_storage, shinkai_node_set_default_options, + shinkai_node_set_options, shinkai_node_spawn, show_shinkai_node_manager_window, }; use commands::spotlight_commands::hide_spotlight_window_app; @@ -89,6 +89,7 @@ fn main() { shinkai_node_set_default_options, shinkai_node_get_ollama_api_url, shinkai_node_get_default_model, + shinkai_node_delete_ollama_model, hardware_get_summary, galxe_generate_proof, get_request,