# app/main.py import uvicorn from fastapi import FastAPI, HTTPException, File, UploadFile from pydantic import BaseModel from app import models, openai_integration app = FastAPI(title="Materials AI Extraction API") # Pydantic models for request/response bodies class ExtractionRequest(BaseModel): text: str class QueryRequest(BaseModel): query: str class SummarizeRequest(BaseModel): text: str @app.post("/extract") async def extract_data(request: ExtractionRequest): try: # Use our domain-specific model (e.g. MatSciBERT or BatteryBERT) for token classification extracted = models.extract_entities(request.text) return {"entities": extracted} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/query") async def query_data(request: QueryRequest): try: # This endpoint performs a Q&A on the provided query using the domain models answer = models.answer_question(request.query) return {"answer": answer} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @app.post("/summarize") async def summarize(request: SummarizeRequest): try: summary = openai_integration.generate_summary(request.text) return {"summary": summary} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000)