from sentence_transformers import SentenceTransformer, util model = SentenceTransformer("all-MiniLM-L6-v2") SEMANTIC_PATTERNS = { "SELF_HARM": ["I don't want to exist","life is pointless","end everything"], "ILLEGAL": ["break into system","steal without trace"], "MEDICAL": ["what medicine should I take","safe dosage"] } embeds = {k:model.encode(v,convert_to_tensor=True) for k,v in SEMANTIC_PATTERNS.items()} def semantic_match(q, threshold=0.65): q_emb=model.encode(q,convert_to_tensor=True) for cat,emb in embeds.items(): score=util.cos_sim(q_emb,emb).max().item() if score>=threshold: return cat,score return None,0.0