1use serde::{Deserialize, Serialize};
2use crate::agent::DistriBrowserConfig;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(default, deny_unknown_fields)]
7pub struct BrowsrConfiguration {
8 pub name: String,
9 pub version: String,
10 #[serde(default, skip_serializing_if = "Option::is_none")]
12 pub browser: Option<DistriBrowserConfig>,
13 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub structured_model_settings: Option<serde_json::Value>,
16 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub default_model_settings: Option<serde_json::Value>,
19}
20
21impl Default for BrowsrConfiguration {
22 fn default() -> Self {
23 Self {
24 name: "browsr".to_string(),
25 version: "0.1.0".to_string(),
26 browser: None,
27 structured_model_settings: None,
28 default_model_settings: None,
29 }
30 }
31}
32
33impl BrowsrConfiguration {
34 pub async fn load_from_path<P: AsRef<std::path::Path>>(
36 path: P,
37 ) -> anyhow::Result<Self> {
38 let content = tokio::fs::read_to_string(path).await?;
39 let config: BrowsrConfiguration = toml::from_str(&content)?;
40 Ok(config)
41 }
42}
43