youtube-summarizer/backend/services/ai_service.py

62 lines
1.7 KiB
Python

"""Base AI Service Interface for summarization."""
from abc import ABC, abstractmethod
from typing import Dict, List, Optional, Union
from dataclasses import dataclass
from enum import Enum
class SummaryLength(Enum):
"""Summary length options."""
BRIEF = "brief" # ~100-200 words
STANDARD = "standard" # ~300-500 words
DETAILED = "detailed" # ~500-800 words
@dataclass
class SummaryRequest:
"""Request model for summary generation."""
transcript: str
length: SummaryLength = SummaryLength.STANDARD
focus_areas: Optional[List[str]] = None # e.g., ["technical", "business", "educational"]
language: str = "en"
include_timestamps: bool = False
@dataclass
class ModelUsage:
"""Model usage tracking."""
input_tokens: int
output_tokens: int
total_tokens: int
estimated_cost: float
@dataclass
class SummaryResult:
"""Result model for generated summary."""
summary: str
key_points: List[str]
main_themes: List[str]
actionable_insights: List[str]
confidence_score: float
processing_metadata: Dict[str, Union[str, int, float]]
cost_data: Dict[str, Union[float, int]]
class AIService(ABC):
"""Base class for AI summarization services."""
@abstractmethod
async def generate_summary(self, request: SummaryRequest) -> SummaryResult:
"""Generate summary from transcript."""
pass
@abstractmethod
def estimate_cost(self, transcript: str, length: SummaryLength) -> float:
"""Estimate processing cost in USD."""
pass
@abstractmethod
def get_token_count(self, text: str) -> int:
"""Get token count for text."""
pass