from siop_ai.embeddings import DIMENSIONS, EmbeddeurDeterministe def test_dimensions_et_normalisation(): [vecteur] = EmbeddeurDeterministe().encoder(["couple de serrage des guides"]) assert len(vecteur) == DIMENSIONS assert abs(sum(v * v for v in vecteur) - 1.0) < 1e-6 def test_stable_et_discriminant(): embeddeur = EmbeddeurDeterministe() a1 = embeddeur.encoder(["couple de serrage des coulisseaux de guides"])[0] a2 = embeddeur.encoder(["couple de serrage des coulisseaux de guides"])[0] b = embeddeur.encoder(["planning des congés du personnel administratif"])[0] cosinus = lambda x, y: sum(p * q for p, q in zip(x, y)) # noqa: E731 — vecteurs normés assert a1 == a2 assert cosinus(a1, b) < 0.35 < cosinus(a1, a1) def test_textes_proches_plus_similaires_que_textes_eloignes(): embeddeur = EmbeddeurDeterministe() question = embeddeur.encoder(["quel couple de serrage pour les guides ?"])[0] notice = embeddeur.encoder(["serrer les coulisseaux de guides au couple de 25 N·m"])[0] horsujet = embeddeur.encoder(["le syndic organise une assemblée générale annuelle"])[0] cosinus = lambda x, y: sum(p * q for p, q in zip(x, y)) # noqa: E731 assert cosinus(question, notice) > cosinus(question, horsujet)