from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.core.constants import ActorValue from app.core.database import get_db from app.core.security import require_api_key from app.modules.ai_agent.schemas import ( AIAskRequest, AIAskResponse, DraftPolicyRequest, InvestmentResearchRequest, OpenClawToolInvokeRequest, ) from app.modules.ai_agent.service import AIService router = APIRouter(dependencies=[Depends(require_api_key)]) @router.post("/ask", response_model=AIAskResponse) def ask(payload: AIAskRequest, db: Session = Depends(get_db)) -> dict: return AIService(db).ask(payload.prompt, payload.context, payload.actor, payload.source) @router.get("/provider-health") def provider_health(actor: str = ActorValue.API, db: Session = Depends(get_db)) -> dict: return AIService(db).provider_health(actor=actor) @router.post("/openclaw/tools/invoke") def invoke_openclaw_tool( payload: OpenClawToolInvokeRequest, db: Session = Depends(get_db), ) -> dict: return AIService(db).invoke_openclaw_tool( tool=payload.tool, action=payload.action, args=payload.args, session_key=payload.session_key, actor=payload.actor, ) @router.post("/draft-policy", response_model=AIAskResponse) def draft_policy(payload: DraftPolicyRequest, db: Session = Depends(get_db)) -> dict: return AIService(db).draft_policy( title=payload.title, policy_type=payload.policy_type, requirements=payload.requirements, actor=payload.actor, ) @router.post("/investment-research", response_model=AIAskResponse) def investment_research(payload: InvestmentResearchRequest, db: Session = Depends(get_db)) -> dict: return AIService(db).draft_investment_research( symbol_or_topic=payload.symbol_or_topic, risk_preference=payload.risk_preference, actor=payload.actor, )