use saya_config::{AiProvider, ResolvedAi};
use thiserror::Error;
#[derive(Debug, Error)]
pub(crate) enum AgentRuntimeError {
#[error("{0}")]
Provider(String),
#[error("{0}")]
Database(String),
#[error("{0}")]
Agent(String),
#[error("{0}")]
Configuration(String),
}
#[derive(Debug, Clone, Default, PartialEq)]
pub(crate) struct PromptOverrides {
pub(crate) provider: Option<AiProvider>,
pub(crate) model: Option<String>,
pub(crate) allow_data_sharing: Option<bool>,
pub(crate) profile: Option<String>,
pub(crate) included_profiles: Vec<String>,
}
pub(crate) fn query_data_allowed(provider: AiProvider, allow_data_sharing: bool) -> bool {
match provider {
AiProvider::Openai
| AiProvider::OpenaiCompatible
| AiProvider::Anthropic
| AiProvider::Gemini => allow_data_sharing,
AiProvider::Ollama => true,
}
}
pub(crate) fn effective_ai(base: &ResolvedAi, overrides: &PromptOverrides) -> ResolvedAi {
let mut ai = base.clone();
if let Some(provider) = overrides.provider {
if ai.provider != provider {
ai.base_url = None;
}
ai.provider = provider;
}
if let Some(model) = overrides.model.as_ref() {
ai.model = model.clone();
}
if let Some(value) = overrides.allow_data_sharing {
ai.allow_data_sharing = value;
}
ai
}