from fastapi import APIRouter, HTTPException from typing import Optional, Dict, Any from pydantic import BaseModel from app.services.translation import TranslationService from app.core.security import decode_token router = APIRouter() class TranslateRequest(BaseModel): text: str target_lang: str source_lang: Optional[str] = "auto" context: Optional[str] = None class ReplyRequest(BaseModel): inquiry: str tone: str = "professional" count: int = 3 context: Optional[Dict[str, Any]] = None class ExtractRequest(BaseModel): text: str extract_type: str = "auto" @router.post("") async def translate_text(data: TranslateRequest, authorization: str = None): if not authorization or not authorization.startswith("Bearer "): raise HTTPException(status_code=401, detail="Missing token") payload = decode_token(authorization[7:]) user_id = payload.get("sub") if payload else None service = TranslationService() result = await service.translate( text=data.text, target_lang=data.target_lang, source_lang=data.source_lang, context=data.context, user_id=user_id, ) return result @router.post("/reply") async def generate_reply(data: ReplyRequest, authorization: str = None): if not authorization or not authorization.startswith("Bearer "): raise HTTPException(status_code=401, detail="Missing token") service = TranslationService() results = await service.generate_reply( inquiry=data.inquiry, context=data.context, tone=data.tone, count=data.count, ) return {"suggestions": results, "inquiry": data.inquiry, "count": len(results)} @router.post("/extract") async def extract_info(data: ExtractRequest, authorization: str = None): if not authorization or not authorization.startswith("Bearer "): raise HTTPException(status_code=401, detail="Missing token") service = TranslationService() result = await service.extract_info(data.text, data.extract_type) return {"extracted": result, "type": data.extract_type} @router.post("/feedback") async def feedback(data: dict, authorization: str = None): if not authorization: raise HTTPException(status_code=401, detail="Missing token") from app.ai.trade_corpus import TradeCorpus corpus = TradeCorpus() entry_id = data.get("entry_id") rating = data.get("rating") if entry_id and rating: await corpus.rate_entry(entry_id, rating) return {"status": "ok"}