70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
"""
|
|
AI Service - Unified interface for AI providers
|
|
"""
|
|
import logging
|
|
from typing import Optional, Dict, Any
|
|
|
|
from .config import settings
|
|
from .core import AIProcessingError
|
|
from .services.ai.provider_factory import AIProviderFactory, ai_provider_factory
|
|
|
|
|
|
class AIService:
|
|
"""Unified service for AI operations with provider fallback"""
|
|
|
|
def __init__(self):
|
|
self.logger = logging.getLogger(__name__)
|
|
self._factory: Optional[AIProviderFactory] = None
|
|
|
|
@property
|
|
def factory(self) -> AIProviderFactory:
|
|
"""Lazy initialization of provider factory"""
|
|
if self._factory is None:
|
|
self._factory = ai_provider_factory
|
|
return self._factory
|
|
|
|
def generate_text(
|
|
self,
|
|
prompt: str,
|
|
provider: Optional[str] = None,
|
|
max_tokens: int = 4096
|
|
) -> str:
|
|
"""Generate text using AI provider"""
|
|
try:
|
|
ai_provider = self.factory.get_provider(provider or 'gemini')
|
|
return ai_provider.generate(prompt, max_tokens=max_tokens)
|
|
except AIProcessingError as e:
|
|
self.logger.error(f"AI generation failed: {e}")
|
|
return f"Error: {str(e)}"
|
|
|
|
def summarize(self, text: str, **kwargs) -> str:
|
|
"""Generate summary of text"""
|
|
try:
|
|
provider = self.factory.get_best_provider()
|
|
return provider.summarize(text, **kwargs)
|
|
except AIProcessingError as e:
|
|
self.logger.error(f"Summarization failed: {e}")
|
|
return f"Error: {str(e)}"
|
|
|
|
def correct_text(self, text: str, **kwargs) -> str:
|
|
"""Correct grammar and spelling in text"""
|
|
try:
|
|
provider = self.factory.get_best_provider()
|
|
return provider.correct_text(text, **kwargs)
|
|
except AIProcessingError as e:
|
|
self.logger.error(f"Text correction failed: {e}")
|
|
return text # Return original on error
|
|
|
|
def classify_content(self, text: str, **kwargs) -> Dict[str, Any]:
|
|
"""Classify content into categories"""
|
|
try:
|
|
provider = self.factory.get_best_provider()
|
|
return provider.classify_content(text, **kwargs)
|
|
except AIProcessingError as e:
|
|
self.logger.error(f"Classification failed: {e}")
|
|
return {"category": "otras_clases", "confidence": 0.0}
|
|
|
|
|
|
# Global instance
|
|
ai_service = AIService()
|