ricecoder_storage/config/
mod.rs1pub mod documents;
7pub mod env;
8pub mod loader;
9pub mod merge;
10pub mod modes;
11
12pub use documents::{Document, DocumentLoader};
14pub use env::EnvOverrides;
15pub use loader::ConfigLoader;
16pub use merge::ConfigMerger;
17pub use modes::StorageModeHandler;
18
19use serde::{Deserialize, Serialize};
20use std::collections::HashMap;
21
22#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
24pub struct Config {
25 pub providers: ProvidersConfig,
27 pub defaults: DefaultsConfig,
29 #[serde(default)]
31 pub steering: Vec<SteeringRule>,
32 #[serde(default)]
34 pub custom: HashMap<String, serde_json::Value>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
39pub struct ProvidersConfig {
40 #[serde(default)]
42 pub api_keys: HashMap<String, String>,
43 #[serde(default)]
45 pub endpoints: HashMap<String, String>,
46 pub default_provider: Option<String>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
52pub struct DefaultsConfig {
53 pub model: Option<String>,
55 pub temperature: Option<f32>,
57 pub max_tokens: Option<u32>,
59}
60
61#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
63pub struct SteeringRule {
64 pub name: String,
66 pub content: String,
68 pub format: crate::types::DocumentFormat,
70}
71
72impl Default for Config {
73 fn default() -> Self {
74 Config {
75 providers: ProvidersConfig {
76 api_keys: HashMap::new(),
77 endpoints: HashMap::new(),
78 default_provider: None,
79 },
80 defaults: DefaultsConfig {
81 model: None,
82 temperature: None,
83 max_tokens: None,
84 },
85 steering: Vec::new(),
86 custom: HashMap::new(),
87 }
88 }
89}
90
91#[cfg(test)]
92mod tests {
93 use super::*;
94
95 #[test]
96 fn test_config_default() {
97 let config = Config::default();
98 assert!(config.providers.api_keys.is_empty());
99 assert!(config.defaults.model.is_none());
100 assert!(config.steering.is_empty());
101 }
102}