from abc import ABC, abstractmethod from typing import Dict, Any, Optional class AIProvider(ABC): @abstractmethod async def translate( self, text: str, source_lang: Optional[str], target_lang: str, context: Optional[str] = None, ) -> Dict[str, Any]: pass @abstractmethod async def reply( self, inquiry: str, context: Optional[Dict[str, Any]] = None, tone: str = "professional", preference_context: Optional[str] = None, ) -> Dict[str, Any]: pass @abstractmethod async def generate_marketing( self, product_info: Dict[str, Any], target: str, style: str = "professional", language: str = "en", preference_context: Optional[str] = None, ) -> Dict[str, Any]: pass @abstractmethod async def extract_info( self, text: str, schema: Dict[str, Any], ) -> Dict[str, Any]: pass @property @abstractmethod def name(self) -> str: pass @property @abstractmethod def cost_per_1k_tokens(self) -> float: pass @property def supports_streaming(self) -> bool: return False