Spaces:
Sleeping
Sleeping
File size: 1,931 Bytes
5bbbd7a ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 d671e56 ebbae50 d671e56 ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 5bbbd7a ebbae50 |
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 |
import gradio as gr
from sentence_transformers import SentenceTransformer, util
# Load model once at startup
model = SentenceTransformer("sentence-transformers/paraphrase-mpnet-base-v2")
def find_matching_issues(newIssue, nearbyIssues, threshold=0.75):
"""
Finds similar issues for a new complaint.
"""
if not nearbyIssues:
return []
# Encode new issue
new_emb = model.encode(newIssue, convert_to_tensor=True)
# Encode all nearby issues
issue_texts = [item["issue"] for item in nearbyIssues]
issue_embs = model.encode(issue_texts, convert_to_tensor=True)
# Compute cosine similarity
cosine_scores = util.pytorch_cos_sim(new_emb, issue_embs)[0]
matches = []
for i, score in enumerate(cosine_scores):
if score.item() >= threshold:
matches.append({
"ID": nearbyIssues[i]["ID"],
"issue": nearbyIssues[i]["issue"],
"similarity": round(score.item(), 3)
})
return matches
# Wrapper for Gradio interface
def match_api(newIssue, issues_text, threshold):
"""
issues_text: input like '123: electricity problem; 124: water problem'
"""
# Parse nearby issues (simple format: ID: text)
nearbyIssues = []
for part in issues_text.split(";"):
if ":" in part:
ID, issue = part.split(":", 1)
nearbyIssues.append({"ID": ID.strip(), "issue": issue.strip()})
matches = find_matching_issues(newIssue, nearbyIssues, threshold)
return matches
# Gradio interface
iface = gr.Interface(
fn=match_api,
inputs=[
gr.Textbox(label="New Issue"),
gr.Textbox(label="Nearby Issues (format: ID: issue; ID: issue)"),
gr.Slider(0, 1, value=0.7, step=0.05, label="Threshold")
],
outputs="json",
title="Issue Matcher API",
description="Finds similar issues based on semantic similarity."
)
iface.launch()
|