|
|
""" |
|
|
This is the main entry point for the FastAPI application. |
|
|
The app handles the request to predict toxicity for a list of SMILES strings. |
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
import os |
|
|
from typing import List, Dict, Optional |
|
|
from fastapi import FastAPI, Header, HTTPException |
|
|
from pydantic import BaseModel, Field |
|
|
|
|
|
from predict import predict as predict_func |
|
|
|
|
|
API_KEY = os.getenv("API_KEY") |
|
|
|
|
|
|
|
|
class Request(BaseModel): |
|
|
smiles: List[str] = Field(min_items=1, max_items=1000) |
|
|
|
|
|
class Response(BaseModel): |
|
|
predictions: dict |
|
|
model_info: Dict[str, str] = {} |
|
|
|
|
|
app = FastAPI(title="toxicity-api") |
|
|
|
|
|
@app.get("/") |
|
|
def root(): |
|
|
return { |
|
|
"message": "Toxicity Prediction API", |
|
|
"endpoints": { |
|
|
"/metadata": "GET - API metadata and capabilities", |
|
|
"/healthz": "GET - Health check", |
|
|
"/predict": "POST - Predict toxicity for SMILES" |
|
|
}, |
|
|
"usage": "Send POST to /predict with {'smiles': ['your_smiles_here']} and Authorization header" |
|
|
} |
|
|
|
|
|
@app.get("/metadata") |
|
|
def metadata(): |
|
|
return { |
|
|
"name": "AwesomeTox", |
|
|
"version": "1.0.0", |
|
|
"max_batch_size": 256, |
|
|
"tox_endpoints": ["NR-AR", "NR-AR-LBD", "NR-AhR", "NR-Aromatase", "NR-ER", "NR-ER-LBD", "NR-PPAR-gamma", "SR-ARE", "SR-ATAD5", "SR-HSE", "SR-MMP", "SR-p53"], |
|
|
} |
|
|
|
|
|
@app.get("/healthz") |
|
|
def healthz(): |
|
|
return {"ok": True} |
|
|
|
|
|
@app.post("/predict", response_model=Response) |
|
|
def predict(request: Request): |
|
|
predictions = predict_func(request.smiles) |
|
|
return {"predictions": predictions, "model_info": {"name":"random_clf", "version":"1.0.0"}} |
|
|
|
|
|
|