From f2595d42648f58ebfcd5cd92f88a4a6f16c11f4e Mon Sep 17 00:00:00 2001 From: Sergey Vakhreev Date: Thu, 12 Dec 2024 21:22:50 +1030 Subject: [PATCH] mysql integration (#487) * add mysql and reorder integrations * Add common settings and confirmation info to MySQL integration Enhance the `ToolMysql` struct and `IntegrationTrait` implementation to include common settings and confirmation information. Introduce `integr_common` and `confirmation_info` functions to handle these features. Adjust the schema to incorporate confirmation details, ensuring better configurability and integration consistency across tools. * Refactor integr_upgrade_to_tool to use &str instead of &String for parameter type --------- Co-authored-by: Nick Frolov --- assets/integrations/mysql.png | Bin 0 -> 86410 bytes src/integrations/integr_mysql.rs | 246 ++++++++++++++++++++++++++++ src/integrations/integr_postgres.rs | 2 - src/integrations/mod.rs | 7 +- 4 files changed, 251 insertions(+), 4 deletions(-) create mode 100644 assets/integrations/mysql.png create mode 100644 src/integrations/integr_mysql.rs diff --git a/assets/integrations/mysql.png b/assets/integrations/mysql.png new file mode 100644 index 0000000000000000000000000000000000000000..ba7538fd9369b0b8e6e6512c8394a6c50cba1ddd GIT binary patch literal 86410 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�GdP`bAd@LT6aS4gJXZdIzS+z@OR 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 z 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 D36FSH literal 0 HcmV?d00001 diff --git a/src/integrations/integr_mysql.rs b/src/integrations/integr_mysql.rs new file mode 100644 index 000000000..912e46328 --- /dev/null +++ b/src/integrations/integr_mysql.rs @@ -0,0 +1,246 @@ +use crate::at_commands::at_commands::AtCommandsContext; +use crate::call_validation::ContextEnum; +use crate::call_validation::{ChatContent, ChatMessage, ChatUsage}; +use crate::integrations::go_to_configuration_message; +use crate::tools::tools_description::Tool; +use async_trait::async_trait; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use std::collections::HashMap; +use std::sync::Arc; +use tokio::process::Command; +use tokio::sync::Mutex as AMutex; +use crate::integrations::integr_abstract::{IntegrationCommon, IntegrationConfirmation, IntegrationTrait}; + + +#[derive(Clone, Serialize, Deserialize, Debug, Default)] +pub struct SettingsMysql { + #[serde(default)] + pub mysql_binary_path: String, + pub host: String, + pub port: String, + pub user: String, + pub password: String, + pub database: String, +} + +#[derive(Default)] +pub struct ToolMysql { + pub common: IntegrationCommon, + pub settings_mysql: SettingsMysql, +} + +impl IntegrationTrait for ToolMysql { + fn as_any(&self) -> &dyn std::any::Any { self } + + fn integr_settings_apply(&mut self, value: &Value) -> Result<(), String> { + match serde_json::from_value::(value.clone()) { + Ok(settings_mysql) => self.settings_mysql = settings_mysql, + Err(e) => { + tracing::error!("Failed to apply settings: {}\n{:?}", e, value); + return Err(e.to_string()); + } + } + match serde_json::from_value::(value.clone()) { + Ok(x) => self.common = x, + Err(e) => { + tracing::error!("Failed to apply common settings: {}\n{:?}", e, value); + return Err(e.to_string()); + } + } + Ok(()) + } + + fn integr_settings_as_json(&self) -> Value { + serde_json::to_value(&self.settings_mysql).unwrap() + } + + fn integr_common(&self) -> IntegrationCommon { + self.common.clone() + } + + fn integr_upgrade_to_tool(&self, _integr_name: &str) -> Box { + Box::new(ToolMysql { + common: self.common.clone(), + settings_mysql: self.settings_mysql.clone() + }) as Box + } + + fn integr_schema(&self) -> &str + { + MYSQL_INTEGRATION_SCHEMA + } +} + +impl ToolMysql { + async fn run_mysql_command(&self, query: &str) -> Result { + let mut mysql_command = self.settings_mysql.mysql_binary_path.clone(); + if mysql_command.is_empty() { + mysql_command = "mysql".to_string(); + } + let output_future = Command::new(mysql_command) + .arg("-h") + .arg(&self.settings_mysql.host) + .arg("-P") + .arg(&self.settings_mysql.port) + .arg("-u") + .arg(&self.settings_mysql.user) + .arg(format!("-p{}", &self.settings_mysql.password)) + .arg(&self.settings_mysql.database) + .arg("-e") + .arg(query) + .output(); + if let Ok(output) = tokio::time::timeout(tokio::time::Duration::from_millis(10_000), output_future).await { + if output.is_err() { + let err_text = format!("{}", output.unwrap_err()); + tracing::error!("mysql didn't work:\n{}\n{}", query, err_text); + return Err(format!("{}, mysql failed:\n{}", go_to_configuration_message("mysql"), err_text)); + } + let output = output.unwrap(); + if output.status.success() { + Ok(String::from_utf8_lossy(&output.stdout).to_string()) + } else { + // XXX: limit stderr, can be infinite + let stderr_string = String::from_utf8_lossy(&output.stderr); + tracing::error!("mysql didn't work:\n{}\n{}", query, stderr_string); + Err(format!("{}, mysql failed:\n{}", go_to_configuration_message("mysql"), stderr_string)) + } + } else { + tracing::error!("mysql timed out:\n{}", query); + Err("mysql command timed out".to_string()) + } + } +} + +#[async_trait] +impl Tool for ToolMysql { + fn as_any(&self) -> &dyn std::any::Any { self } + + async fn tool_execute( + &mut self, + _ccx: Arc>, + tool_call_id: &String, + args: &HashMap, + ) -> Result<(bool, Vec), String> { + let query = match args.get("query") { + Some(Value::String(v)) => v.clone(), + Some(v) => return Err(format!("argument `query` is not a string: {:?}", v)), + None => return Err("no `query` argument found".to_string()), + }; + + let result = self.run_mysql_command(&query).await?; + + let mut results = vec![]; + results.push(ContextEnum::ChatMessage(ChatMessage { + role: "tool".to_string(), + content: ChatContent::SimpleText(serde_json::to_string(&result).unwrap()), + tool_calls: None, + tool_call_id: tool_call_id.clone(), + ..Default::default() + })); + Ok((true, results)) + } + + fn command_to_match_against_confirm_deny( + &self, + args: &HashMap, + ) -> Result { + let query = match args.get("query") { + Some(Value::String(v)) => v.clone(), + Some(v) => return Err(format!("argument `query` is not a string: {:?}", v)), + None => return Err("no `query` argument found".to_string()), + }; + Ok(format!("mysql {}", query)) + } + + fn tool_depends_on(&self) -> Vec { + vec![] + } + + fn usage(&mut self) -> &mut Option { + static mut DEFAULT_USAGE: Option = None; + #[allow(static_mut_refs)] + unsafe { &mut DEFAULT_USAGE } + } + + fn confirmation_info(&self) -> Option { + Some(self.integr_common().confirmation) + } +} + +pub const MYSQL_INTEGRATION_SCHEMA: &str = r#" +fields: + host: + f_type: string_long + f_desc: "Connect to this host, for example 127.0.0.1 or docker container name." + f_placeholder: marketing_db_container + port: + f_type: string_short + f_desc: "Which port to use." + f_default: "5432" + user: + f_type: string_short + f_placeholder: john_doe + password: + f_type: string_short + f_default: "$MYSQL_PASSWORD" + smartlinks: + - sl_label: "Open passwords.yaml" + sl_goto: "EDITOR:passwords.yaml" + database: + f_type: string_short + f_placeholder: marketing_db + mysql_binary_path: + f_type: string_long + f_desc: "If it can't find a path to `mysql` you can provide it here, leave blank if not sure." + f_placeholder: "mysql" + f_label: "MYSQL Binary Path" + f_extra: true +description: | + The Mysql tool is for the AI model to call, when it wants to look at data inside your database, or make any changes. + On this page you can also see Docker containers with Mysql servers. + You can ask model to create a new container with a new database for you, + or ask model to configure the tool to use an existing container with existing database. +smartlinks: + - sl_label: "Test" + sl_chat: + - role: "user" + content: | + 🔧 The mysql tool should be visible now. To test the tool, list the tables available, briefly describe the tables and express + happiness, and change nothing. If it doesn't work or the tool isn't available, go through the usual plan in the system prompt. + The current config file is %CURRENT_CONFIG%. + - sl_label: "Look at the project, fill in automatically" + sl_chat: + - role: "user" + content: | + 🔧 Your goal is to set up mysql client. Look at the project, especially files like "docker-compose.yaml" or ".env". Call tree() to see what files the project has. + After that is completed, go through the usual plan in the system prompt. + The current config file is %CURRENT_CONFIG%. +docker: + filter_label: "" + filter_image: "mysql" + new_container_default: + image: "mysql:8.4" + environment: + MYSQL_DATABASE: db_name + MYSQL_USER: $MYSQL_USER + MYSQL_PASSWORD: $MYSQL_PASSWORD + smartlinks: + - sl_label: "Add Database Container" + sl_chat: + - role: "user" + content: | + 🔧 Your job is to create a mysql container, using the image and environment from new_container_default section in the current config file: %CURRENT_CONFIG%. Follow the system prompt. + smartlinks_for_each_container: + - sl_label: "Use for integration" + sl_chat: + - role: "user" + content: | + 🔧 Your job is to modify mysql connection config in the current file to match the variables from the container, use docker tool to inspect the container if needed. Current config file: %CURRENT_CONFIG%. +available: + on_your_laptop_possible: true + when_isolated_possible: true +confirmation: + ask_user_default: [] + deny_default: [] +"#; diff --git a/src/integrations/integr_postgres.rs b/src/integrations/integr_postgres.rs index b207e50ec..d84e8700d 100644 --- a/src/integrations/integr_postgres.rs +++ b/src/integrations/integr_postgres.rs @@ -70,8 +70,6 @@ impl IntegrationTrait for ToolPostgres { { POSTGRES_INTEGRATION_SCHEMA } - - // fn icon_link(&self) -> String { "https://cdn-icons-png.flaticon.com/512/5968/5968342.png".to_string() } } impl ToolPostgres { diff --git a/src/integrations/mod.rs b/src/integrations/mod.rs index 333a8661e..7adfcfc2a 100644 --- a/src/integrations/mod.rs +++ b/src/integrations/mod.rs @@ -14,6 +14,7 @@ pub mod integr_gitlab; pub mod integr_pdb; pub mod integr_chrome; pub mod integr_postgres; +pub mod integr_mysql; pub mod integr_cmdline; pub mod integr_cmdline_service; @@ -36,8 +37,9 @@ pub fn integration_from_name(n: &str) -> Result Ok(Box::new(integr_github::ToolGithub { ..Default::default() }) as Box), "gitlab" => Ok(Box::new(integr_gitlab::ToolGitlab { ..Default::default() }) as Box), "pdb" => Ok(Box::new(integr_pdb::ToolPdb { ..Default::default() }) as Box), - "postgres" => Ok(Box::new(integr_postgres::ToolPostgres { ..Default::default() }) as Box), "chrome" => Ok(Box::new(integr_chrome::ToolChrome { ..Default::default() }) as Box), + "postgres" => Ok(Box::new(integr_postgres::ToolPostgres { ..Default::default() }) as Box), + "mysql" => Ok(Box::new(integr_mysql::ToolMysql { ..Default::default() }) as Box), "docker" => Ok(Box::new(docker::integr_docker::ToolDocker {..Default::default() }) as Box), cmdline if cmdline.starts_with("cmdline_") => { // let tool_name = cmdline.strip_prefix("cmdline_").unwrap(); @@ -57,8 +59,9 @@ pub fn integrations_list(allow_experimental: bool) -> Vec<&'static str> { "github", "gitlab", "pdb", - "postgres", "chrome", + "postgres", + "mysql", "cmdline_TEMPLATE", "service_TEMPLATE", "docker",