AllerChef / embed_eval.py
MohamedBIqbal's picture
deploy Allergy-Safe Recipe Assistant
edbe91d verified
Raw
History Blame
1.64 kB
import ollama
import numpy as np
MODEL = "nomic-embed-text"
pairs = [
# Similar pairs
("Dairy-free pasta with chicken", "Creamy chicken pasta without milk", "similar"),
("Peanut butter cookies", "Sunflower butter cookies", "similar"),
("Replace milk with oat milk", "Use almond milk instead of regular milk", "similar"),
# Dissimilar pairs
("Dairy-free mac and cheese", "Cheesy mac and cheese with cream", "dissimilar"),
("Gluten-free banana bread", "Spicy shrimp stir fry", "dissimilar"),
("Allergy-safe chocolate cake", "Peanut chicken curry", "dissimilar"),
# Edge cases
("Vegan chocolate cake", "Vegan chocolate cake with almond milk and hazelnuts", "edge"),
("Use almond milk instead of regular milk", "Use oat milk instead of regular milk", "edge"),
("Gluten-free soy sauce chicken", "Gluten-free tamari chicken", "edge"),
]
def cosine_similarity(a, b):
a, b = np.array(a), np.array(b)
return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))
print(f"{'Type':<12} {'Score':>6} Pair")
print("-" * 80)
for text_a, text_b, pair_type in pairs:
emb_a = ollama.embeddings(model=MODEL, prompt=text_a).embedding
emb_b = ollama.embeddings(model=MODEL, prompt=text_b).embedding
score = cosine_similarity(emb_a, emb_b)
label = f"{text_a[:35]!r} vs {text_b[:35]!r}"
print(f"{pair_type:<12} {score:>6.2f} {label}")
print()
print("Key failure cases:")
print(" 'almond milk vs oat milk' scored ~0.58 — dangerously close for a nut allergy user")
print(" 'vegan cake vs vegan cake with hazelnuts' scored ~0.65 — hidden allergen not captured")