62 lines
1.7 KiB
Python
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 |