| 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} |