use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use utoipa::ToSchema;
pub use audio::*;
pub use cluster::*;
pub use embedding::*;
pub use interpretation::*;
pub use vector::*;
mod audio;
mod cluster;
mod embedding;
mod interpretation;
mod vector;
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct SpeciesInfo {
pub common_name: String,
pub scientific_name: Option<String>,
pub confidence: f32,
}
#[derive(Debug, Clone)]
pub struct Segment {
pub id: Uuid,
pub recording_id: Uuid,
pub start_time: f64,
pub end_time: f64,
pub samples: Vec<f32>,
pub sample_rate: u32,
pub species: Option<SpeciesInfo>,
pub quality_score: f32,
}
#[derive(Debug, Clone)]
pub struct AudioMetadata {
pub duration_secs: f64,
pub sample_rate: u32,
pub channels: u16,
}
#[derive(Debug, Clone)]
pub struct Audio {
pub samples: Vec<f32>,
pub sample_rate: u32,
pub duration_secs: f64,
}
#[derive(Debug, Clone)]
pub struct SegmentEmbedding {
pub id: Uuid,
pub recording_id: Uuid,
pub embedding: Vec<f32>,
pub start_time: f64,
pub end_time: f64,
pub species: Option<SpeciesInfo>,
}
#[derive(Debug, Clone)]
pub struct SearchResult {
pub id: Uuid,
pub recording_id: Uuid,
pub distance: f32,
pub start_time: f64,
pub end_time: f64,
pub species: Option<SpeciesInfo>,
}
#[derive(Debug, Clone)]
pub struct ClusterData {
pub id: Uuid,
pub label: Option<String>,
pub size: usize,
pub centroid: Vec<f32>,
pub density: f32,
pub exemplar_ids: Vec<Uuid>,
pub species_distribution: Vec<(String, usize, f64)>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone)]
pub struct EvidencePackData {
pub query_id: Uuid,
pub query_segment: EvidenceSegment,
pub neighbors: Vec<NeighborEvidenceData>,
pub shared_features: Vec<SharedFeature>,
pub visualizations: VisualizationUrls,
pub generated_at: DateTime<Utc>,
}
#[derive(Debug, Clone)]
pub struct EvidenceSegment {
pub id: Uuid,
pub recording_id: Uuid,
pub start_time: f64,
pub end_time: f64,
pub species: Option<SpeciesInfo>,
}
#[derive(Debug, Clone)]
pub struct NeighborEvidenceData {
pub segment: EvidenceSegment,
pub similarity: f32,
pub contributing_features: Vec<FeatureContributionData>,
pub spectrogram_comparison_url: Option<String>,
}
#[derive(Debug, Clone)]
pub struct FeatureContributionData {
pub name: String,
pub weight: f32,
pub query_value: f64,
pub neighbor_value: f64,
}
#[derive(Debug, Clone)]
pub struct SharedFeature {
pub name: String,
pub description: String,
pub confidence: f32,
}
#[derive(Debug, Clone)]
pub struct VisualizationUrls {
pub umap_url: Option<String>,
pub spectrogram_grid_url: Option<String>,
pub feature_importance_url: Option<String>,
}