File size: 2,691 Bytes
19a7edd 8d7a904 19a7edd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | import gradio as gr
import requests
import os
HF_TOKEN = os.getenv("HF_TOKEN")
API_URL = "https://router.huggingface.co/hf-inference/models/joeddav/xlm-roberta-large-xnli"
def classify(payload):
try:
# Gradio JSON input bazen list içinde gelir
if isinstance(payload, list):
payload = payload[0]
invoice_text = payload.get("invoice_text", "")
categories = payload.get("categories", [])
if not invoice_text or not categories:
return "NO_INPUT"
# Metni kırp ama Türkçe karakterleri bozmadan
invoice_text = invoice_text.strip()[:3000]
candidate_labels = [c["cat_name"].strip() for c in categories]
if not candidate_labels:
return "NO_CATEGORIES"
response = requests.post(
API_URL,
headers={
"Authorization": f"Bearer {HF_TOKEN}",
"Content-Type": "application/json"
},
json={
"inputs": invoice_text,
"parameters": {
"candidate_labels": candidate_labels,
"multi_label": False
}
},
timeout=120
)
print("STATUS:", response.status_code)
print("RESPONSE:", response.text[:500])
if response.status_code != 200:
return f"HTTP_ERROR_{response.status_code}"
result = response.json()
# xlm-roberta ve deberta her ikisi de dict döner:
# {"sequence": "...", "labels": [...], "scores": [...]}
# Ama HF bazen list of dict döner, ikisini de handle ediyoruz.
if isinstance(result, list):
# list of {"label": ..., "score": ...} formatı
if not result:
return "NO_RESULT"
result.sort(key=lambda x: x.get("score", 0), reverse=True)
return result[0].get("label", "NO_LABEL")
elif isinstance(result, dict):
labels = result.get("labels", [])
scores = result.get("scores", [])
if not labels:
return "NO_LABEL"
# En yüksek skorlu kategoriyi direkt döndür
# (random veya penalty yok — model kararına güven)
best_index = scores.index(max(scores)) if scores else 0
return labels[best_index]
else:
return "UNEXPECTED_RESPONSE"
except requests.exceptions.Timeout:
return "TIMEOUT"
except Exception as e:
import traceback
traceback.print_exc()
return f"ERROR: {str(e)}"
gr.Interface(
fn=classify,
inputs="json",
outputs="text"
).launch(ssr_mode=False) |