Spaces:
Sleeping
Sleeping
File size: 2,115 Bytes
308e240 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
from fastapi import APIRouter, UploadFile, File, Form, HTTPException
from fastapi.responses import FileResponse
from typing import Annotated
from app.schemas import AnalysisResponse, AnalysisResult, RiskItem
from app.services.ocr import ocr_service
from app.services.logic import risk_engine
from app.services.llm import llm_service
# from app.services.report_generator import generate_pdf_report
import shutil
import os
from app.core.config import settings
router = APIRouter()
@router.post("/analyze", response_model=AnalysisResponse)
async def analyze_contract(
file: UploadFile = File(...),
user_explanation: str = Form(...)
):
# 1. Save file
os.makedirs(settings.UPLOAD_FOLDER, exist_ok=True)
file_path = f"{settings.UPLOAD_FOLDER}/{file.filename}"
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
# 2. OCR/Extract Text
contract_text = ocr_service.process_file(file_path)
if not contract_text:
raise HTTPException(status_code=400, detail="Could not extract text from file.")
# 3. Analyze Risks (Deterministic/ML)
risk_data = risk_engine.analyze(contract_text, user_explanation)
# 4. Generate AI Explanation & Negotiation (LLM)
explanation = llm_service.generate_explanation(risk_data, user_explanation)
negotiation_email = llm_service.generate_negotiation_email(risk_data)
analysis_result = AnalysisResult(
score=risk_data["score"],
risks=[RiskItem(**r) for r in risk_data["risks"]],
contract_summary=risk_data["contract_summary"],
explanation=explanation,
negotiation_email=negotiation_email
)
return AnalysisResponse(analysis=analysis_result)
@router.post("/download-report")
async def download_report(
score: int = Form(...),
risks: str = Form(...),
explanation: str = Form(...),
email: str = Form(...)
):
"""Generate and download PDF report - Coming soon"""
return {"message": "PDF download feature coming soon. Please copy the email for now."}
|