use serde::{Deserialize, Serialize};
use crate::format::FormatId;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum UnknownFieldPolicy {
Preserve,
DropWithWarning,
Reject,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum LossyConversionPolicy {
AllowWithDiagnostics,
Reject,
}
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum DeterministicIdPolicy {
Preserve,
GenerateStable { prefix: String },
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub enum PreservationPolicy {
InMemory,
Embed,
Disabled,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
pub struct TargetCapabilities {
pub supports_tools: Option<bool>,
pub supports_images: Option<bool>,
pub supports_audio: Option<bool>,
pub supports_video: Option<bool>,
pub supports_files: Option<bool>,
pub supports_reasoning_effort: Option<bool>,
pub supports_json_schema_response_format: Option<bool>,
pub supports_parallel_tool_calls: Option<bool>,
pub supports_code_execution: Option<bool>,
pub supports_safety_settings: Option<bool>,
pub openai_compatible: Option<bool>,
}
#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
pub struct ProviderProfile {
pub format: Option<FormatId>,
pub provider: Option<String>,
pub capabilities: TargetCapabilities,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct TranslationPolicy {
pub unknown_field_policy: UnknownFieldPolicy,
pub lossy_conversion_policy: LossyConversionPolicy,
pub deterministic_ids: DeterministicIdPolicy,
pub preservation: PreservationPolicy,
pub target_capabilities: TargetCapabilities,
}
impl Default for TranslationPolicy {
fn default() -> Self {
Self {
unknown_field_policy: UnknownFieldPolicy::Preserve,
lossy_conversion_policy: LossyConversionPolicy::AllowWithDiagnostics,
deterministic_ids: DeterministicIdPolicy::GenerateStable {
prefix: "sw".to_string(),
},
preservation: PreservationPolicy::InMemory,
target_capabilities: TargetCapabilities::default(),
}
}
}