use serde::{Deserialize, Serialize};
pub use crate::core::config::{CallMode, MergeMode};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
#[serde(rename_all = "snake_case")]
pub enum PresetCategory {
Finance,
Identity,
Legal,
Logistics,
Medical,
Hr,
Other,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct PresetSample {
pub input_path: String,
pub output_path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct Preset {
pub id: String,
pub version: String,
pub schema_name: String,
pub description: String,
pub category: PresetCategory,
#[serde(default)]
pub tags: Vec<String>,
pub schema: serde_json::Value,
pub system_prompt: String,
#[serde(default)]
pub context_template: Option<String>,
pub merge_mode: MergeMode,
pub preferred_call_mode: CallMode,
pub emit_citations: bool,
#[serde(default)]
pub sample: Option<PresetSample>,
#[serde(default, skip_deserializing)]
pub fingerprint: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct PresetSummary {
pub id: String,
pub version: String,
pub schema_name: String,
pub description: String,
pub category: PresetCategory,
pub tags: Vec<String>,
pub preferred_call_mode: CallMode,
pub emit_citations: bool,
pub fingerprint: String,
}
impl From<&Preset> for PresetSummary {
fn from(p: &Preset) -> Self {
Self {
id: p.id.clone(),
version: p.version.clone(),
schema_name: p.schema_name.clone(),
description: p.description.clone(),
category: p.category,
tags: p.tags.clone(),
preferred_call_mode: p.preferred_call_mode,
emit_citations: p.emit_citations,
fingerprint: p.fingerprint.clone(),
}
}
}