handshake / scripts /seed.py
khattab273's picture
Handshake AI layer
c31f4d7 verified
Raw History Blame Contribute Delete
1.25 kB
"""Precompute E5 embeddings for the seed profiles.
Run after editing data/seed_profiles.json:
.venv/bin/python scripts/seed.py
"""
from __future__ import annotations
import sys
from pathlib import Path
import numpy as np
from dotenv import load_dotenv
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
load_dotenv()
from core import matching, storage # noqa: E402
def main() -> None:
profiles = storage.seed_profiles()
queries = matching.embed([matching.query_text(p) for p in profiles])
passages = matching.embed([matching.passage_text(p) for p in profiles])
np.savez_compressed(
matching.EMBED_FILE,
ids=np.array([p.id for p in profiles]),
query=queries.astype(np.float32),
passage=passages.astype(np.float32),
)
print(f"Saved {len(profiles)} profiles x {queries.shape[1]} dims to {matching.EMBED_FILE}")
matching._seed_vectors.cache_clear()
for pid in ("f-layla", "i-omar", "t-sara"):
viewer = storage.get_profile(pid)
ranked = matching.rank(viewer, k=5)
print(f"\n{viewer.display_name}:")
for p, s in ranked:
print(f" {s:3d} {p.display_name:22s} {p.headline[:60]}")
if __name__ == "__main__":
main()