1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct RlmConfig {
18 #[serde(default = "config_defaults::default_mode")]
20 pub mode: String,
21 #[serde(default = "config_defaults::default_threshold")]
23 pub threshold: f64,
24 #[serde(default = "config_defaults::default_max_iterations")]
26 pub max_iterations: usize,
27 #[serde(default = "config_defaults::default_max_subcalls")]
29 pub max_subcalls: usize,
30 #[serde(default = "config_defaults::default_runtime")]
32 pub runtime: String,
33 pub root_model: Option<String>,
35 pub subcall_model: Option<String>,
37 #[serde(default = "config_defaults::default_history_trigger_messages")]
39 pub history_trigger_messages: usize,
40}
41
42mod config_defaults {
43 pub fn default_mode() -> String {
44 "auto".into()
45 }
46 pub fn default_threshold() -> f64 {
47 0.35
48 }
49 pub fn default_max_iterations() -> usize {
50 15
51 }
52 pub fn default_max_subcalls() -> usize {
53 50
54 }
55 pub fn default_runtime() -> String {
56 "rust".into()
57 }
58 pub fn default_history_trigger_messages() -> usize {
59 0
60 }
61}
62
63impl Default for RlmConfig {
64 fn default() -> Self {
65 use config_defaults::*;
66 Self {
67 mode: default_mode(),
68 threshold: default_threshold(),
69 max_iterations: default_max_iterations(),
70 max_subcalls: default_max_subcalls(),
71 runtime: default_runtime(),
72 root_model: None,
73 subcall_model: None,
74 history_trigger_messages: default_history_trigger_messages(),
75 }
76 }
77}
78
79#[cfg(test)]
80mod tests {
81 use super::RlmConfig;
82
83 #[test]
84 fn default_history_trigger_is_disabled() {
85 assert_eq!(RlmConfig::default().history_trigger_messages, 0);
86 }
87}