|
|
""" |
|
|
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] |
|
|
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 |