|
|
import os |
|
|
from fastapi import FastAPI, HTTPException |
|
|
from pydantic import BaseModel , Extra |
|
|
from transformers import pipeline |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
os.environ["HF_HOME"] = "/tmp/huggingface" |
|
|
os.environ["TRANSFORMERS_CACHE"] = "/tmp/huggingface" |
|
|
os.environ["HF_DATASETS_CACHE"] = "/tmp/huggingface" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app = FastAPI(title="Routing Service - Space 2") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RoutingRequest(BaseModel): |
|
|
text: str |
|
|
|
|
|
class Config: |
|
|
extra = Extra.ignore |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DEPARTMENTS = ['Account', 'Software', 'Network', 'Security', 'Hardware', |
|
|
'Infrastructure', 'Licensing', 'Communication', 'RemoteWork', |
|
|
'Training', 'Performance'] |
|
|
|
|
|
classifier = pipeline( |
|
|
"zero-shot-classification", |
|
|
model="MoritzLaurer/DeBERTa-v3-base-mnli-fever-anli" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.post("/route") |
|
|
async def route_ticket(req: RoutingRequest): |
|
|
text = req.text |
|
|
if not text: |
|
|
raise HTTPException(status_code=400, detail="Text cannot be empty") |
|
|
|
|
|
result = classifier(text, DEPARTMENTS) |
|
|
department = result["labels"][0] |
|
|
|
|
|
return {"department": department} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.get("/health") |
|
|
async def health(): |
|
|
return {"status": "ok"} |
|
|
|