from fastapi import FastAPI from fastapi.exceptions import RequestValidationError from pydantic import BaseModel, HttpUrl from typing import Optional, Dict from starlette.middleware.cors import CORSMiddleware from starlette.requests import Request from starlette.responses import JSONResponse from main import main app = FastAPI() # Define the request model class CreateRequest(BaseModel): executor_name: str executor_description: str input_modality: str input_doc_field: str output_modality: str output_doc_field: str test_in: str test_out: str # Define the response model class CreateResponse(BaseModel): result: Dict[str, str] success: bool message: Optional[str] @app.post("/create", response_model=CreateResponse) def create_endpoint(request: CreateRequest): result = main( executor_name=request.executor_name, executor_description=request.executor_description, input_modality=request.input_modality, input_doc_field=request.input_doc_field, output_modality=request.output_modality, output_doc_field=request.output_doc_field, test_in=request.test_in, test_out=request.test_out, do_validation=False ) return CreateResponse(result=result, success=True, message=None) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Add a custom exception handler for RequestValidationError @app.exception_handler(RequestValidationError) def validation_exception_handler(request: Request, exc: RequestValidationError): return JSONResponse( status_code=422, content={"detail": exc.errors()}, ) if __name__ == "__main__": import uvicorn uvicorn.run("server:app", host="0.0.0.0", port=8000, log_level="info")