use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageExtractedEntityDto {
pub confidence: f64,
#[serde(default)]
pub features: BTreeMap<String, serde_json::Value>,
pub local_id: String,
#[serde(default)]
pub mentions: Vec<String>,
pub sort: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageExtractedRelationDto {
pub confidence: f64,
pub relation: String,
pub source: String,
pub target: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ImageExtractionStatsDto {
pub entities_extracted: u64,
pub processing_time_ms: u64,
pub relations_extracted: u64,
pub sorts_created: u64,
pub sorts_reused: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImageSuggestedSortDto {
#[serde(default)]
pub features: Vec<String>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rationale: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExtractImageRequest {
pub filename: String,
pub image: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub instruction: Option<String>,
pub owner_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub persist: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ExtractImageResponse {
#[serde(default)]
pub entities: Vec<ImageExtractedEntityDto>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
#[serde(default)]
pub relations: Vec<ImageExtractedRelationDto>,
#[serde(default)]
pub stats: ImageExtractionStatsDto,
pub success: bool,
#[serde(default)]
pub suggested_sorts: Vec<ImageSuggestedSortDto>,
#[serde(default)]
pub term_ids: Vec<String>,
}