""" Service layer specific data models """ from dataclasses import dataclass, field from typing import Dict, Any, List, Optional, Union from enum import Enum import numpy as np from .base import BaseRequest, BaseResponse, OperationStatus class AudioProcessingTask(Enum): """Audio processing task types""" TRANSCRIPTION = "transcription" SPEAKER_IDENTIFICATION = "speaker_identification" AUDIO_SEGMENTATION = "audio_segmentation" COMPLETE_PROCESSING = "complete_processing" class FileOperationType(Enum): """File operation types""" SCAN = "scan" READ = "read" WRITE = "write" ORGANIZE = "organize" CONVERT = "convert" @dataclass class AudioProcessingRequest(BaseRequest): """Request for audio processing operations""" audio_path: str task: AudioProcessingTask model_name: str = "turbo" language: Optional[str] = None enable_speaker_diarization: bool = False min_segment_length: float = 30.0 output_path: Optional[str] = None @dataclass class AudioProcessingResult: """Result of audio processing operations""" audio_path: str task: AudioProcessingTask text: str segments: List[Dict[str, Any]] audio_duration: float segment_count: int language_detected: str model_used: str speaker_diarization_enabled: bool status: OperationStatus = OperationStatus.SUCCESS processing_time: Optional[float] = None speakers_detected: Optional[int] = None message: Optional[str] = None error_code: Optional[str] = None error_details: Optional[Dict[str, Any]] = None @dataclass class PodcastDownloadRequest(BaseRequest): """Request for podcast download operations""" url: str output_folder: str = "downloads" convert_to_mp3: bool = False keep_original: bool = False extract_info_only: bool = False @dataclass class PodcastDownloadResult: """Result of podcast download operations""" url: str title: str episode_id: str platform: str status: OperationStatus = OperationStatus.SUCCESS file_path: Optional[str] = None download_time: Optional[float] = None file_size: Optional[int] = None message: Optional[str] = None error_code: Optional[str] = None error_details: Optional[Dict[str, Any]] = None @dataclass class SpeakerEmbeddingRequest(BaseRequest): """Request for speaker embedding operations""" audio_path: str speaker_segments: List[Dict[str, Any]] source_file: str update_global_speakers: bool = True @dataclass class SpeakerEmbeddingResult: """Result of speaker embedding operations""" audio_path: str speaker_embeddings: Dict[str, np.ndarray] speaker_mapping: Dict[str, str] # local_id -> global_id speakers_created: int speakers_updated: int status: OperationStatus = OperationStatus.SUCCESS message: Optional[str] = None error_code: Optional[str] = None error_details: Optional[Dict[str, Any]] = None @dataclass class FileManagementRequest(BaseRequest): """Request for file management operations""" operation: FileOperationType file_path: Optional[str] = None directory_path: Optional[str] = None content: Optional[str] = None options: Optional[Dict[str, Any]] = None @dataclass class FileManagementResult: """Result of file management operations""" operation: FileOperationType status: OperationStatus = OperationStatus.SUCCESS file_path: Optional[str] = None directory_path: Optional[str] = None files_processed: int = 0 total_files: int = 0 content_length: int = 0 file_size: int = 0 message: Optional[str] = None error_code: Optional[str] = None error_details: Optional[Dict[str, Any]] = None @dataclass class ServiceError: """Service error information""" service_name: str error_code: str error_message: str error_details: Optional[Dict[str, Any]] = None timestamp: Optional[str] = None @dataclass class ServiceHealthCheck: """Service health check result""" service_name: str is_healthy: bool dependencies: Dict[str, bool] version: str uptime: float last_check: str status: OperationStatus = OperationStatus.SUCCESS message: Optional[str] = None error_code: Optional[str] = None error_details: Optional[Dict[str, Any]] = None