use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GenerateSyntheticDataRequest {
#[serde(default)]
pub target_sorts: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_terms_per_sort: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_solutions_per_goal: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seed: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_certainty: Option<f64>,
#[serde(default = "default_true")]
pub generate_negatives: bool,
#[serde(default = "default_true")]
pub enable_statistical_sampling: bool,
#[serde(default = "default_true")]
pub enable_forward_chaining: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_forward_chain_iterations: Option<u64>,
#[serde(default = "default_true")]
pub enable_format_diversity: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub real_ratio: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub verbalization_strategy: Option<String>,
#[serde(default = "default_true")]
pub enable_verbalization: bool,
#[serde(default = "default_true")]
pub enable_enhanced_negatives: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_negatives_per_sort: Option<u64>,
}
fn default_true() -> bool {
true
}
pub type TrainingExampleDto = serde_json::Value;
pub type GenerationReportDto = serde_json::Value;
pub type DataMixingStatsDto = serde_json::Value;
pub type VerbalizationResultDto = serde_json::Value;
pub type NegativeExampleDto = serde_json::Value;
pub type DatasetStatisticsDto = serde_json::Value;
pub type CalibrationReportDto = serde_json::Value;
pub type EntityVerificationDetailDto = serde_json::Value;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GenerateSyntheticDataResponse {
#[serde(default)]
pub examples: Vec<TrainingExampleDto>,
pub report: GenerationReportDto,
pub mixing_stats: DataMixingStatsDto,
pub synthetic_terms_count: u64,
pub training_pairs_count: u64,
#[serde(default)]
pub verbalizations: Vec<VerbalizationResultDto>,
#[serde(default)]
pub enhanced_negatives: Vec<NegativeExampleDto>,
pub enhanced_negatives_count: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub round_trip_result: Option<VerifyRoundTripResponse>,
pub diversity_filtered_count: u64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dataset_statistics: Option<DatasetStatisticsDto>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enhanced_dataset_jsonl: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub calibration_report: Option<CalibrationReportDto>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ExportJsonlResponse {
pub jsonl: String,
pub example_count: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerifyFaithfulnessRequest {
pub original: BTreeMap<String, String>,
pub extracted: BTreeMap<String, String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_score: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_recovery_rate: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerifyFaithfulnessResponse {
pub passed: bool,
pub score: f64,
pub entities_recovered: u64,
pub entities_expected: u64,
#[serde(default)]
pub mismatches: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerbalizeTermRequest {
pub term_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub strategy: Option<String>,
#[serde(default = "default_true")]
pub include_sort_description: bool,
#[serde(default = "default_true")]
pub include_parent_context: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_features: Option<u64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerbalizeTermResponse {
pub result: VerbalizationResultDto,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GenerationPromptRequest {
pub term_id: String,
#[serde(default)]
pub schema_sort_ids: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GenerationPromptResponse {
pub stable_prefix: String,
pub dynamic_content: String,
pub full_prompt: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GenerateNegativesRequest {
pub target_sorts: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_per_sort: Option<u64>,
#[serde(default = "default_true")]
pub enable_sort_incompatibility: bool,
#[serde(default = "default_true")]
pub enable_feature_perturbation: bool,
#[serde(default = "default_true")]
pub enable_cross_sort_confusion: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub seed: Option<u64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GenerateNegativesResponse {
#[serde(default)]
pub negatives: Vec<NegativeExampleDto>,
pub count: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EntityDto {
pub sort_id: String,
#[serde(default)]
pub features: BTreeMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerifyRoundTripRequest {
pub ground_truth: Vec<EntityDto>,
pub extracted: Vec<EntityDto>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_faithfulness_score: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_feature_recovery: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_sort_similarity: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sort_weight: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub feature_weight: Option<f64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VerifyRoundTripResponse {
pub faithfulness_score: f64,
pub passed: bool,
pub entities_matched: u64,
pub entities_expected: u64,
pub entities_extracted: u64,
#[serde(default)]
pub entity_details: Vec<EntityVerificationDetailDto>,
#[serde(default)]
pub unmatched_ground_truth: Vec<String>,
#[serde(default)]
pub unmatched_extracted: Vec<String>,
pub total_features_expected: u64,
pub total_features_recovered: u64,
#[serde(default)]
pub mismatches: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CheckDiversityRequest {
pub candidate: EntityDto,
pub existing_term_ids: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_diversity_score: Option<f64>,
}
pub type CheckDiversityResponse = serde_json::Value;