백엔드 전체 구현 완료: 내부 서비스(Auth, Client, Realtime), API 엔드포인트 및 스케줄러 구현
This commit is contained in:
55
backend/app/services/ai_orchestrator.py
Normal file
55
backend/app/services/ai_orchestrator.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from sqlalchemy import select
|
||||
from app.db.database import SessionLocal
|
||||
from app.db.models import AiConfig, ApiSettings
|
||||
from app.services.ai_factory import AIFactory, BaseAIProvider
|
||||
|
||||
class AIOrchestrator:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
async def _get_provider_by_id(self, config_id: str) -> BaseAIProvider:
|
||||
async with SessionLocal() as session:
|
||||
stmt = select(AiConfig).where(AiConfig.id == config_id)
|
||||
result = await session.execute(stmt)
|
||||
config = result.scalar_one_or_none()
|
||||
|
||||
if not config:
|
||||
raise ValueError("AI Config not found")
|
||||
|
||||
# Note: API Keys might need to be stored securely or passed from ENV/Settings.
|
||||
# For now assuming API Key is managed externally or stored in config (not implemented in DB schema for security).
|
||||
# Or we look up ApiSettings or a secure vault.
|
||||
# Simplified: Use a placeholder or ENV.
|
||||
api_key = "place_holder"
|
||||
|
||||
return AIFactory.get_provider(config.providerType, api_key, config.modelName, config.baseUrl)
|
||||
|
||||
async def get_preferred_provider(self, purpose: str) -> BaseAIProvider:
|
||||
"""
|
||||
purpose: 'news', 'stock', 'judgement', 'buy', 'sell'
|
||||
"""
|
||||
async with SessionLocal() as session:
|
||||
stmt = select(ApiSettings).where(ApiSettings.id == 1)
|
||||
result = await session.execute(stmt)
|
||||
settings = result.scalar_one_or_none()
|
||||
|
||||
if not settings:
|
||||
raise ValueError("Settings not initialized")
|
||||
|
||||
config_id = None
|
||||
if purpose == 'news': config_id = settings.preferredNewsAiId
|
||||
elif purpose == 'stock': config_id = settings.preferredStockAiId
|
||||
elif purpose == 'judgement': config_id = settings.preferredNewsJudgementAiId
|
||||
elif purpose == 'buy': config_id = settings.preferredAutoBuyAiId
|
||||
elif purpose == 'sell': config_id = settings.preferredAutoSellAiId
|
||||
|
||||
if not config_id:
|
||||
raise ValueError(f"No preferred AI configured for {purpose}")
|
||||
|
||||
return await self._get_provider_by_id(config_id)
|
||||
|
||||
async def analyze_text(self, text: str, purpose="news") -> str:
|
||||
provider = await self.get_preferred_provider(purpose)
|
||||
return await provider.generate_content(text)
|
||||
|
||||
ai_orchestrator = AIOrchestrator()
|
||||
Reference in New Issue
Block a user