diff --git a/Cargo.lock b/Cargo.lock index a2f3255..158b1e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -304,7 +304,7 @@ dependencies = [ "regex", "serde", "serde_json", - "serde_yaml", + "serde_yaml_ng", "tempfile", "tiktoken-rs", "tokio", @@ -3892,10 +3892,10 @@ dependencies = [ ] [[package]] -name = "serde_yaml" -version = "0.9.34+deprecated" +name = "serde_yaml_ng" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +checksum = "7b4db627b98b36d4203a7b458cf3573730f2bb591b28871d916dfa9efabfd41f" dependencies = [ "indexmap", "itoa", diff --git a/Cargo.toml b/Cargo.toml index 305fc17..81917c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,7 @@ quick_cache = "0.6.*" regex = "1.12.*" serde = { version = "1.0.*", features = ["derive"], default-features = false } serde_json = "1.0.*" -serde_yaml = "0.9.*" +serde_yaml_ng = "0.10.*" tempfile = "3.25.*" tiktoken-rs = { version = "0.9.*", default-features = false } tokio = { version = "1.49.*", features = ["rt", "rt-multi-thread", "macros"] } diff --git a/src/agent/definition.rs b/src/agent/definition.rs index 4d391e1..7853016 100644 --- a/src/agent/definition.rs +++ b/src/agent/definition.rs @@ -33,11 +33,11 @@ pub struct AgentDefinition { )] pub provider: AgentProvider, - pub config: serde_yaml::Value, + pub config: serde_yaml_ng::Value, } impl AgentDefinition { - pub fn new(id: String, provider: AgentProvider, config: serde_yaml::Value) -> Self { + pub fn new(id: String, provider: AgentProvider, config: serde_yaml_ng::Value) -> Self { Self { id, provider, diff --git a/src/agent/instantiation.rs b/src/agent/instantiation.rs index 537395a..ed46560 100644 --- a/src/agent/instantiation.rs +++ b/src/agent/instantiation.rs @@ -15,7 +15,7 @@ pub enum Error { // Contains the error from the constructor function ConstructionFailed(anyhow::Error), // Contains the error from the YAML deserialization function - Yaml(serde_yaml::Error), + Yaml(serde_yaml_ng::Error), } pub type Result = std::result::Result; @@ -69,7 +69,7 @@ pub(super) fn create( pub fn create_from_provider_and_yaml_value_config( provider: &AgentProvider, identifier: &PublicIdentifier, - config: serde_yaml::Value, + config: serde_yaml_ng::Value, ) -> Result { let definition = AgentDefinition::new(identifier.prefixless(), provider.to_owned(), config); @@ -79,7 +79,7 @@ pub fn create_from_provider_and_yaml_value_config( fn create_controller_from_provider_and_json_value_config( agent_id: &str, provider: &AgentProvider, - config: serde_yaml::Value, + config: serde_yaml_ng::Value, ) -> Result { match provider { AgentProvider::Anthropic => { @@ -112,43 +112,43 @@ fn create_controller_from_provider_and_json_value_config( } } -pub fn default_config_for_provider(provider: &AgentProvider) -> serde_yaml::Value { +pub fn default_config_for_provider(provider: &AgentProvider) -> serde_yaml_ng::Value { match provider { AgentProvider::Anthropic => { let config = super::provider::anthropic::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::Groq => { let config = super::provider::groq::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::LocalAI => { let config = super::provider::localai::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::Mistral => { let config = super::provider::mistral::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::Ollama => { let config = super::provider::ollama::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::OpenAI => { let config = super::provider::openai::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::OpenAICompat => { let config = super::provider::openai_compat::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::OpenRouter => { let config = super::provider::openrouter::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } AgentProvider::TogetherAI => { let config = super::provider::togetherai::default_config(); - serde_yaml::to_value(config).expect("Failed to serialize config") + serde_yaml_ng::to_value(config).expect("Failed to serialize config") } } } diff --git a/src/agent/provider/anthropic/mod.rs b/src/agent/provider/anthropic/mod.rs index 59d4ee7..63b893c 100644 --- a/src/agent/provider/anthropic/mod.rs +++ b/src/agent/provider/anthropic/mod.rs @@ -12,12 +12,12 @@ use super::controller::ControllerType; pub fn create_controller_from_yaml_value_config( agent_id: &str, - config: serde_yaml::Value, + config: serde_yaml_ng::Value, ) -> AgentInstantiationResult { let config = match &config { - serde_yaml::Value::Mapping(_) => { + serde_yaml_ng::Value::Mapping(_) => { let config: Config = - serde_yaml::from_value(config).map_err(AgentInstantiationError::Yaml)?; + serde_yaml_ng::from_value(config).map_err(AgentInstantiationError::Yaml)?; config .validate() diff --git a/src/agent/provider/openai/mod.rs b/src/agent/provider/openai/mod.rs index 2ce7bcf..6b6637f 100644 --- a/src/agent/provider/openai/mod.rs +++ b/src/agent/provider/openai/mod.rs @@ -20,12 +20,12 @@ pub const OPENAI_IMAGE_MODEL_GPT_IMAGE_1_DOT_5: &str = "gpt-image-1.5"; pub fn create_controller_from_yaml_value_config( agent_id: &str, - config: serde_yaml::Value, + config: serde_yaml_ng::Value, ) -> AgentInstantiationResult { let config = match &config { - serde_yaml::Value::Mapping(_) => { + serde_yaml_ng::Value::Mapping(_) => { let config: Config = - serde_yaml::from_value(config).map_err(AgentInstantiationError::Yaml)?; + serde_yaml_ng::from_value(config).map_err(AgentInstantiationError::Yaml)?; config .validate() diff --git a/src/agent/provider/openai_compat/mod.rs b/src/agent/provider/openai_compat/mod.rs index 7c7eaf6..47e26ca 100644 --- a/src/agent/provider/openai_compat/mod.rs +++ b/src/agent/provider/openai_compat/mod.rs @@ -26,12 +26,12 @@ use super::controller::ControllerType; pub fn create_controller_from_yaml_value_config( agent_id: &str, - config: serde_yaml::Value, + config: serde_yaml_ng::Value, ) -> AgentInstantiationResult { let config = match &config { - serde_yaml::Value::Mapping(_) => { + serde_yaml_ng::Value::Mapping(_) => { let config: Config = - serde_yaml::from_value(config).map_err(AgentInstantiationError::Yaml)?; + serde_yaml_ng::from_value(config).map_err(AgentInstantiationError::Yaml)?; config .validate() diff --git a/src/bot/load_config.rs b/src/bot/load_config.rs index 58559d5..c43362e 100644 --- a/src/bot/load_config.rs +++ b/src/bot/load_config.rs @@ -21,7 +21,7 @@ pub fn load() -> anyhow::Result { } let config_str = std::fs::read_to_string(config_file_path)?; - let mut config: Config = serde_yaml::from_str(&config_str)?; + let mut config: Config = serde_yaml_ng::from_str(&config_str)?; // Allow environment variables to override some configuration keys for (key, value) in env::vars() { diff --git a/src/controller/agent/create/mod.rs b/src/controller/agent/create/mod.rs index fee1135..7300fd0 100644 --- a/src/controller/agent/create/mod.rs +++ b/src/controller/agent/create/mod.rs @@ -15,7 +15,7 @@ use crate::{Bot, entity::MessageContext}; struct ParsedAgentConfig { agent: AgentInstance, - config: serde_yaml::Value, + config: serde_yaml_ng::Value, } pub async fn handle_room_local( @@ -250,7 +250,7 @@ async fn send_guide( provider: &AgentProvider, ) -> anyhow::Result<()> { let sample_config = crate::agent::default_config_for_provider(provider); - let sample_config_pretty_yaml = serde_yaml::to_string(&sample_config)?; + let sample_config_pretty_yaml = serde_yaml_ng::to_string(&sample_config)?; bot.messaging() .send_text_markdown_no_fail( @@ -263,7 +263,7 @@ async fn send_guide( Ok(()) } -fn parse_from_message_to_yaml_value(text: &str) -> Result { +fn parse_from_message_to_yaml_value(text: &str) -> Result { let mut text = text.trim(); if text.starts_with("```") { @@ -274,10 +274,10 @@ fn parse_from_message_to_yaml_value(text: &str) -> Result {} + serde_yaml_ng::Value::Mapping(_) => {} _ => { return Err("Not a valid YAML hashmap".to_owned()); } diff --git a/src/controller/agent/create/tests.rs b/src/controller/agent/create/tests.rs index b8355bc..40cfc4c 100644 --- a/src/controller/agent/create/tests.rs +++ b/src/controller/agent/create/tests.rs @@ -2,12 +2,12 @@ fn agent_config_parsing_works() { struct TestCase { input: String, - expected: Option, + expected: Option, } let provider = crate::agent::AgentProvider::OpenAI; let sample_config = crate::agent::default_config_for_provider(&provider); - let sample_config_pretty_yaml = serde_yaml::to_string(&sample_config).unwrap(); + let sample_config_pretty_yaml = serde_yaml_ng::to_string(&sample_config).unwrap(); let test_cases = vec![ // Invalid input diff --git a/src/controller/agent/details/mod.rs b/src/controller/agent/details/mod.rs index d47a0fe..ba4a273 100644 --- a/src/controller/agent/details/mod.rs +++ b/src/controller/agent/details/mod.rs @@ -64,7 +64,7 @@ pub async fn handle( PublicIdentifier::Static(_) => {} }; - let config_yaml_pretty = serde_yaml::to_string(&agent.definition().config)?; + let config_yaml_pretty = serde_yaml_ng::to_string(&agent.definition().config)?; bot.messaging() .send_text_markdown_no_fail(