This commit is contained in:
@@ -124,6 +124,43 @@ pub struct Settings {
|
||||
/// Purge sessions finished more than N days ago (issue #53, default 90).
|
||||
#[serde(default)]
|
||||
pub sessions_retention_days: Option<u64>,
|
||||
/// Token price models used to estimate session costs (issue #49).
|
||||
#[serde(default)]
|
||||
pub cost_models: Option<BTreeMap<String, CostModel>>,
|
||||
/// CPU/memory thresholds for 'am monitor' alerts (issue #50).
|
||||
#[serde(default)]
|
||||
pub monitor_thresholds: Option<MonitorThresholds>,
|
||||
}
|
||||
|
||||
/// Token price model: USD per million tokens (issue #49).
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct CostModel {
|
||||
pub input_per_mtok: f64,
|
||||
pub output_per_mtok: f64,
|
||||
}
|
||||
|
||||
/// Default price sheet (USD / MTok) used when settings.cost_models is absent.
|
||||
pub fn default_cost_models() -> BTreeMap<String, CostModel> {
|
||||
let mut m = BTreeMap::new();
|
||||
m.insert("claude-sonnet-4".into(), CostModel { input_per_mtok: 3.0, output_per_mtok: 15.0 });
|
||||
m.insert("claude-opus-4".into(), CostModel { input_per_mtok: 15.0, output_per_mtok: 75.0 });
|
||||
m.insert("claude-haiku-3.5".into(), CostModel { input_per_mtok: 0.8, output_per_mtok: 4.0 });
|
||||
m.insert("gpt-4o".into(), CostModel { input_per_mtok: 2.5, output_per_mtok: 10.0 });
|
||||
m.insert("gpt-4o-mini".into(), CostModel { input_per_mtok: 0.15, output_per_mtok: 0.6 });
|
||||
m.insert("deepseek-chat".into(), CostModel { input_per_mtok: 0.27, output_per_mtok: 1.10 });
|
||||
m.insert("llama-3.1-8b".into(), CostModel { input_per_mtok: 0.05, output_per_mtok: 0.05 });
|
||||
m
|
||||
}
|
||||
|
||||
/// Alert thresholds for 'am monitor' (issue #50).
|
||||
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
|
||||
pub struct MonitorThresholds {
|
||||
/// Alert when a managed process exceeds this CPU % (0 = disabled).
|
||||
#[serde(default)]
|
||||
pub cpu_pct: Option<f64>,
|
||||
/// Alert when a managed process exceeds this RSS in MB (0 = disabled).
|
||||
#[serde(default)]
|
||||
pub mem_mb: Option<u64>,
|
||||
}
|
||||
|
||||
/// Policy controlling how aggressively 'am update' upgrades installed agents.
|
||||
@@ -250,6 +287,10 @@ pub struct AgentDef {
|
||||
/// Container profile used by 'am run --container' (issue #58).
|
||||
#[serde(default)]
|
||||
pub container: Option<ContainerSpec>,
|
||||
/// Price model key (settings.cost_models) used to estimate session costs
|
||||
/// (issue #49; defaults to the first model of the price sheet).
|
||||
#[serde(default)]
|
||||
pub cost_model: Option<String>,
|
||||
}
|
||||
|
||||
/// Health check for group orchestration (issue #57): a command that must
|
||||
|
||||
Reference in New Issue
Block a user