Skip to main content

orca_core/config/
ai.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct AiConfig {
5    /// LLM provider: "litellm", "ollama", "openai", "anthropic"
6    #[serde(default = "default_ai_provider")]
7    pub provider: String,
8    /// Endpoint URL (for litellm/ollama/compatible APIs).
9    pub endpoint: Option<String>,
10    /// Model identifier.
11    pub model: Option<String>,
12    /// API key (or use ${secrets.ai_api_key}).
13    pub api_key: Option<String>,
14    /// Conversational alerting configuration.
15    #[serde(default)]
16    pub alerts: Option<AiAlertConfig>,
17    /// Auto-remediation rules.
18    #[serde(default)]
19    pub auto_remediate: Option<AutoRemediateConfig>,
20}
21
22fn default_ai_provider() -> String {
23    "ollama".into()
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct AiAlertConfig {
28    /// Enable conversational alerts (default: true when [ai] is configured).
29    #[serde(default = "default_true")]
30    pub enabled: bool,
31    /// How often to analyze cluster health (seconds, default: 60).
32    #[serde(default = "default_analysis_interval")]
33    pub analysis_interval_secs: u64,
34    /// Channels to deliver conversation updates.
35    pub channels: Option<AlertDeliveryChannels>,
36}
37
38fn default_true() -> bool {
39    true
40}
41
42fn default_analysis_interval() -> u64 {
43    60
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize)]
47pub struct AlertDeliveryChannels {
48    /// Webhook URL for alert conversation updates.
49    pub webhook: Option<String>,
50    /// Slack webhook for threaded alert conversations.
51    pub slack: Option<String>,
52    /// Email for alert digests.
53    pub email: Option<String>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct AutoRemediateConfig {
58    /// Auto-restart crashed services (default: true).
59    #[serde(default = "default_true")]
60    pub restart_crashed: bool,
61    /// Auto-scale on resource pressure (default: false, suggest only).
62    #[serde(default)]
63    pub scale_on_pressure: bool,
64    /// Auto-rollback on deploy failure (default: false, suggest only).
65    #[serde(default)]
66    pub rollback_on_failure: bool,
67}