use crate::types::{AgentId, PolicyId};
use serde::{Deserialize, Serialize};
use std::time::{Duration, SystemTime};
use uuid::Uuid;
#[derive(Debug, thiserror::Error)]
pub enum RAGError {
#[error("Query analysis failed: {0}")]
QueryAnalysisFailed(String),
#[error("Document retrieval failed: {0}")]
DocumentRetrievalFailed(String),
#[error("Ranking failed: {0}")]
RankingFailed(String),
#[error("Context augmentation failed: {0}")]
ContextAugmentationFailed(String),
#[error("Response generation failed: {0}")]
ResponseGenerationFailed(String),
#[error("Validation failed: {0}")]
ValidationFailed(String),
#[error("Configuration error: {0}")]
ConfigurationError(String),
#[error("Vector database error: {0}")]
VectorDatabaseError(String),
#[error("Context manager error: {0}")]
ContextManagerError(String),
#[error("Policy violation: {0}")]
PolicyViolation(String),
#[error("Insufficient permissions: {0}")]
InsufficientPermissions(String),
#[error("Timeout error: {0}")]
Timeout(String),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct DocumentId(pub Uuid);
impl Default for DocumentId {
fn default() -> Self {
Self::new()
}
}
impl DocumentId {
pub fn new() -> Self {
Self(Uuid::new_v4())
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RAGRequest {
pub agent_id: AgentId,
pub query: String,
pub preferences: QueryPreferences,
pub constraints: QueryConstraints,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryPreferences {
pub response_length: ResponseLength,
pub include_citations: bool,
pub preferred_sources: Vec<String>,
pub response_format: ResponseFormat,
pub language: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ResponseLength {
Brief,
Standard,
Detailed,
Comprehensive,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ResponseFormat {
Text,
Markdown,
Structured,
Code,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct QueryConstraints {
pub max_documents: usize,
pub time_limit: Duration,
pub security_level: AccessLevel,
pub allowed_sources: Vec<String>,
pub excluded_sources: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AccessLevel {
Public,
Restricted,
Confidential,
Secret,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalyzedQuery {
pub original_query: String,
pub expanded_terms: Vec<String>,
pub intent: QueryIntent,
pub entities: Vec<Entity>,
pub keywords: Vec<String>,
pub embeddings: Vec<f32>,
pub context_keywords: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum QueryIntent {
Factual,
Procedural,
Analytical,
Creative,
Comparative,
Troubleshooting,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Entity {
pub text: String,
pub entity_type: EntityType,
pub confidence: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EntityType {
Person,
Organization,
Location,
Technology,
Concept,
Date,
Number,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Document {
pub id: DocumentId,
pub title: String,
pub content: String,
pub metadata: DocumentMetadata,
pub embeddings: Vec<f32>,
pub chunks: Vec<DocumentChunk>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentMetadata {
pub document_type: DocumentType,
pub author: Option<String>,
pub created_at: SystemTime,
pub updated_at: SystemTime,
pub language: String,
pub domain: String,
pub access_level: AccessLevel,
pub tags: Vec<String>,
pub source_url: Option<String>,
pub file_path: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DocumentType {
Text,
Code,
Structured,
Manual,
API,
Research,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentChunk {
pub chunk_id: String,
pub content: String,
pub start_index: usize,
pub end_index: usize,
pub embeddings: Vec<f32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RankedDocument {
pub document: Document,
pub relevance_score: f32,
pub ranking_factors: RankingFactors,
pub selected_chunks: Vec<DocumentChunk>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RankingFactors {
pub semantic_similarity: f32,
pub keyword_match: f32,
pub recency_score: f32,
pub authority_score: f32,
pub diversity_score: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AugmentedContext {
pub original_query: String,
pub analyzed_query: AnalyzedQuery,
pub retrieved_documents: Vec<RankedDocument>,
pub context_summary: String,
pub citations: Vec<Citation>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Citation {
pub document_id: DocumentId,
pub title: String,
pub author: Option<String>,
pub url: Option<String>,
pub relevance_score: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GeneratedResponse {
pub content: String,
pub confidence: f32,
pub citations: Vec<Citation>,
pub metadata: ResponseMetadata,
pub validation_status: ValidationStatus,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResponseMetadata {
pub generation_time: Duration,
pub tokens_used: usize,
pub sources_consulted: usize,
pub model_version: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum ValidationStatus {
Pending,
Approved,
Rejected(String),
RequiresReview,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationResult {
pub is_valid: bool,
pub policy_violations: Vec<PolicyViolation>,
pub content_issues: Vec<ContentIssue>,
pub confidence_score: f32,
pub recommendations: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PolicyViolation {
pub policy_id: PolicyId,
pub violation_type: ViolationType,
pub description: String,
pub severity: Severity,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ViolationType {
AccessControl,
DataClassification,
ContentFilter,
SecurityLevel,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Severity {
Low,
Medium,
High,
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ContentIssue {
pub issue_type: ContentIssueType,
pub description: String,
pub confidence: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ContentIssueType {
Factual,
Bias,
Toxicity,
Misinformation,
Inconsistency,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RAGResponse {
pub response: GeneratedResponse,
pub processing_time: Duration,
pub sources_used: Vec<Citation>,
pub confidence_score: f32,
pub follow_up_suggestions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentInput {
pub title: String,
pub content: String,
pub metadata: DocumentMetadata,
pub chunking_strategy: ChunkingStrategy,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ChunkingStrategy {
FixedSize { size: usize, overlap: usize },
Semantic { min_size: usize, max_size: usize },
Paragraph,
Sentence,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RAGStats {
pub total_documents: usize,
pub total_queries: usize,
pub avg_response_time: Duration,
pub cache_hit_rate: f32,
pub validation_pass_rate: f32,
pub top_query_types: Vec<(QueryIntent, usize)>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RAGConfig {
pub embedding_model: EmbeddingModelConfig,
pub retrieval_config: RetrievalConfig,
pub ranking_config: RankingConfig,
pub generation_config: GenerationConfig,
pub validation_config: ValidationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EmbeddingModelConfig {
pub model_name: String,
pub model_type: EmbeddingModelType,
pub dimension: usize,
pub max_tokens: usize,
pub batch_size: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EmbeddingModelType {
OpenAI,
HuggingFace,
Local,
Custom,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetrievalConfig {
pub max_documents: usize,
pub similarity_threshold: f32,
pub context_window: usize,
pub enable_hybrid_search: bool,
pub reranking_enabled: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RankingConfig {
pub ranking_algorithm: RankingAlgorithm,
pub relevance_weight: f32,
pub recency_weight: f32,
pub authority_weight: f32,
pub diversity_weight: f32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RankingAlgorithm {
CosineSimilarity,
BM25,
Hybrid,
LearningToRank,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GenerationConfig {
pub max_response_length: usize,
pub temperature: f32,
pub top_p: f32,
pub enable_citations: bool,
pub response_format: ResponseFormat,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationConfig {
pub enable_policy_check: bool,
pub enable_content_filter: bool,
pub enable_fact_check: bool,
pub confidence_threshold: f32,
}