use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ArithmeticRecursionOp {
Multiplication,
Addition,
Accumulation,
Subtraction,
Power,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrainingExample {
pub input: i64,
pub output: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LearnPatternConfigDto {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_recursion_depth: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_examples: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LearnPatternRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub config: Option<LearnPatternConfigDto>,
pub examples: Vec<TrainingExample>,
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LearnedPatternDto {
#[serde(default)]
pub base_case_inputs: Vec<i64>,
pub confidence: f64,
pub description: String,
pub input_feature: String,
pub operation: ArithmeticRecursionOp,
pub output_feature: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LearnPatternResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
pub examples_used: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pattern: Option<LearnedPatternDto>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub pattern_id: Option<String>,
pub processing_time_ms: u128,
pub success: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EvaluatePatternRequest {
pub inputs: Vec<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_depth: Option<u32>,
pub pattern_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EvaluationResult {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
pub input: i64,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub output: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EvaluatePatternResponse {
pub processing_time_ms: u128,
#[serde(default)]
pub results: Vec<EvaluationResult>,
pub success: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GFlowNetSampleRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_body_size: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub num_trajectories: Option<u32>,
pub target_sort: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub temperature: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SampledHypothesisDto {
#[serde(default)]
pub body_sorts: Vec<String>,
pub from_joining: bool,
pub log_probability: f64,
pub trajectory_index: u32,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GFlowNetSampleResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
#[serde(default)]
pub hypotheses: Vec<SampledHypothesisDto>,
pub joined_count: u32,
pub masked_count: u32,
pub neural_guide_available: bool,
pub processing_time_ms: u128,
pub success: bool,
pub total_sampled: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SynthesizeRequest {
pub examples: Vec<TrainingExample>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_proposals: Option<u32>,
pub target_sort: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub use_gflownet: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SynthesizeResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub found_by: Option<String>,
pub gflownet_hypotheses_sampled: u32,
pub neural_guide_available: bool,
pub processing_time_ms: u128,
pub proposals_tried: u32,
pub success: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PatternSummaryDto {
#[serde(default)]
pub base_case_inputs: Vec<i64>,
pub confidence: f64,
pub operation: ArithmeticRecursionOp,
pub pattern_id: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListPatternsResponse {
pub count: u64,
#[serde(default)]
pub patterns: Vec<PatternSummaryDto>,
}