Sandeep120205's picture
Update app.py
e54fa9d verified
Raw
History Blame Contribute Delete
1.68 kB
from fastapi import FastAPI
from pydantic import BaseModel
import onnxruntime as ort
import onnxruntime
print(f"ORT version: {onnxruntime.__version__}")
import numpy as np
from transformers import AutoTokenizer
from huggingface_hub import hf_hub_download
import os
import shutil
app = FastAPI()
MODEL_REPO = "Sandeep120205/agent-shield-mdeberta"
THRESHOLD = 0.85
MAX_LEN = 128
print("Loading tokenizer...")
tokenizer = AutoTokenizer.from_pretrained("microsoft/mdeberta-v3-base")
print("Loading model...")
cache_dir = os.path.expanduser("~/.cache/huggingface/hub")
if os.path.exists(cache_dir):
shutil.rmtree(cache_dir)
print("Cache cleared.")
model_path = hf_hub_download(repo_id=MODEL_REPO, filename="model_fp32.onnx", force_download=True)
session = ort.InferenceSession(model_path)
print(f"ONNX path: {model_path}")
print(f"ONNX size: {os.path.getsize(model_path)}")
expected_inputs = [inp.name for inp in session.get_inputs()]
print(f"Model loaded. Inputs: {expected_inputs}")
class PredictRequest(BaseModel):
prompt: str
@app.get("/health")
def health():
return {"status": "ok"}
@app.post("/predict")
def predict(req: PredictRequest):
inputs = tokenizer(
req.prompt,
return_tensors="np",
truncation=True,
max_length=MAX_LEN,
padding="max_length"
)
filtered = {k: v for k, v in inputs.items() if k in expected_inputs}
outputs = session.run(None, filtered)
logits = outputs[0][0]
exp = np.exp(logits - np.max(logits))
probs = exp / exp.sum()
confidence = float(probs[1])
is_injection = confidence > THRESHOLD
return {"is_injection": is_injection, "confidence": confidence}