"""Génère eval/eval_questions.json (60 questions annotées).""" from __future__ import annotations import json from pathlib import Path OUT = Path(__file__).resolve().parents[1] / "eval" / "eval_questions.json" BASE = [ { "id": "q01", "question": ( "Quel est le délai de remboursement pour un client " "professionnel ?" ), "expected_relevant_doc_ids": [ "refund_policy", "client_segmentation", ], "should_answer": True, "expects_structured": False, }, { "id": "q02", "question": "Quel est le délai de remboursement standard ?", "expected_relevant_doc_ids": ["refund_policy", "internal_faq"], "should_answer": True, "expects_structured": False, }, { "id": "q03", "question": ( "Quelle est la politique de retour pour les clients " "entreprise ?" ), "expected_relevant_doc_ids": [ "client_segmentation", "refund_policy", ], "should_answer": True, "expects_structured": False, }, { "id": "q04", "question": ( "Quels sont les frais de port à partir de quel montant " "sont-ils gratuits ?" ), "expected_relevant_doc_ids": ["shipping_policy"], "should_answer": True, "expects_structured": False, }, { "id": "q05", "question": ( "Que se passe-t-il en cas de retard de livraison de plus " "de 5 jours ?" ), "expected_relevant_doc_ids": ["shipping_policy"], "should_answer": True, "expects_structured": False, }, { "id": "q06", "question": "Comment escalader une réclamation client en interne ?", "expected_relevant_doc_ids": ["internal_faq"], "should_answer": True, "expects_structured": False, }, { "id": "q07", "question": ( "Quels KPI dois-je surveiller pour détecter une baisse " "de rentabilité ?" ), "expected_relevant_doc_ids": ["profitability_report"], "should_answer": True, "expects_structured": False, }, { "id": "q08", "question": "Pourquoi les ventes de la région Sud ont-elles baissé ?", "expected_relevant_doc_ids": ["profitability_report"], "should_answer": True, "expects_structured": False, }, { "id": "q09", "question": ( "Quel client a le meilleur chiffre d'affaires en juin ?" ), "expected_relevant_doc_ids": ["sales_q2_2026"], "should_answer": True, "expects_structured": True, "expected_structured": { "group_by": "client", "top_client": "Client F", "value": 18200, }, }, { "id": "q10", "question": "Quelle est la marge totale du Produit X en janvier ?", "expected_relevant_doc_ids": ["sales_q1_2026"], "should_answer": True, "expects_structured": True, "expected_structured": {"metric": "marge", "value": 5800}, }, { "id": "q11", "question": ( "Quel est le chiffre d'affaires total du Produit X en avril ?" ), "expected_relevant_doc_ids": ["sales_q2_2026"], "should_answer": True, "expects_structured": True, "expected_structured": { "metric": "chiffre_affaires", "value": 25200, }, }, { "id": "q12", "question": "Quel sera le chiffre d'affaires le mois prochain ?", "expected_relevant_doc_ids": [], "should_answer": False, "expects_structured": False, }, { "id": "q13", "question": ( "Quel est le taux d'intérêt appliqué aux emprunts " "bancaires de l'entreprise ?" ), "expected_relevant_doc_ids": [], "should_answer": False, "expects_structured": False, }, { "id": "q14", "question": ( "Quelle est la politique de retour applicable dans un " "pays non couvert par nos contrats ?" ), "expected_relevant_doc_ids": [], "should_answer": False, "expects_structured": False, }, { "id": "q15", "question": ( "Combien de jours ouvrés pour valider une demande de " "remboursement avant émission ?" ), "expected_relevant_doc_ids": ["refund_policy"], "should_answer": True, "expects_structured": False, }, { "id": "q16", "question": ( "Quelles sont les conditions de paiement pour un compte " "Grand Compte ?" ), "expected_relevant_doc_ids": ["client_segmentation"], "should_answer": True, "expects_structured": False, }, { "id": "q17", "question": ( "Quel est le futur cours de l'action de l'entreprise " "en bourse ?" ), "expected_relevant_doc_ids": [], "should_answer": False, "expects_structured": False, }, { "id": "q18", "question": "Un produit soldé à plus de 50% est-il remboursable ?", "expected_relevant_doc_ids": ["refund_policy"], "should_answer": True, "expects_structured": False, }, ] EXTRA = [ ( "Quel délai pour un remboursement carte bancaire ?", ["refund_policy"], True, False, ), ( "Les produits personnalisés sont-ils remboursables ?", ["refund_policy"], True, False, ), ( "Comment ouvrir un ticket de remboursement ?", ["refund_policy"], True, False, ), ( "Que faire en cas de livraison non conforme ?", ["refund_policy"], True, False, ), ( "Quel est le délai de livraison en France métropolitaine ?", ["shipping_policy"], True, False, ), ( "Quel délai de livraison à l'international ?", ["shipping_policy"], True, False, ), ( "Comment suivre une commande expédiée ?", ["shipping_policy"], True, False, ), ( "Les frais de port professionnels dépendent de quoi ?", ["shipping_policy"], True, False, ), ( "Quelle est la différence entre Professionnel et Grand compte ?", ["client_segmentation"], True, False, ), ( "Quel délai de paiement pour un client Professionnel ?", ["client_segmentation"], True, False, ), ( "Un client B2B a-t-il 30 jours de retour ?", ["client_segmentation"], True, False, ), ( "Où trouver les conditions de retour B2B spécifiques ?", ["client_segmentation"], True, False, ), ( "Un client pro a-t-il un délai de remboursement différent ?", ["internal_faq", "refund_policy"], True, False, ), ( "Où trouver les chiffres de vente exacts ?", ["internal_faq"], True, False, ), ( "Quel est le taux de retour client à surveiller ?", ["profitability_report"], True, False, ), ( "Quel produit est le moins rentable selon le rapport ?", ["profitability_report"], True, False, ), ( "Quelle action corrective est prévue pour la région Sud ?", ["profitability_report"], True, False, ), ( "Quel est le délai moyen de paiement Grand Compte à alerter ?", ["profitability_report"], True, False, ), ( "Quel client a le meilleur CA en mai ?", ["sales_q2_2026"], True, True, ), ( "Quelle est la marge totale du Produit Y en février ?", ["sales_q1_2026"], True, True, ), ( "Quel est le CA total en mars pour le Produit X ?", ["sales_q1_2026"], True, True, ), ( "Quel est le chiffre d'affaires du Produit Z en juin ?", ["sales_q2_2026"], True, True, ), ( "Quelle est la marge du Client F en juin ?", ["sales_q2_2026"], True, True, ), ( "Quel est le meilleur client en chiffre d'affaires en avril ?", ["sales_q2_2026"], True, True, ), ( "Quel est le CA total de la région Nord en janvier ?", ["sales_q1_2026"], True, True, ), ( "Quelle est la marge totale en mai ?", ["sales_q2_2026"], True, True, ), ("Quel sera le bénéfice net dans 3 ans ?", [], False, False), ("Quel est le salaire du PDG ?", [], False, False), ( "Donne-moi le code source du moteur de pricing ?", [], False, False, ), ( "Quelle est la politique RH des congés parentaux ?", [], False, False, ), ( "Peux-tu prédire les ventes de décembre 2027 ?", [], False, False, ), ( "Quel est le stock exact en entrepôt ce soir ?", [], False, False, ), ( "Les abonnements déjà activés sont-ils remboursés intégralement ?", ["refund_policy"], True, False, ), ( "Un avoir peut-il être imputé sur la prochaine facture B2B ?", ["refund_policy"], True, False, ), ( "Sous quel délai un agent valide une demande de remboursement ?", ["refund_policy"], True, False, ), ( "Que se passe-t-il si le produit est défectueux ?", ["refund_policy"], True, False, ), ( "Les délais de livraison changent-ils pendant les soldes ?", ["shipping_policy"], True, False, ), ( "Un particulier a-t-il un support dédié ?", ["client_segmentation"], True, False, ), ( "Quelle remise volume pour un Grand compte ?", ["client_segmentation"], True, False, ), ( "Comment escalader une réclamation niveau 2 ?", ["internal_faq"], True, False, ), ( "Pourquoi le Produit X a-t-il une meilleure marge ?", ["profitability_report"], True, False, ), ( "Quel seuil d'alerte pour le coût logistique ?", ["profitability_report"], True, False, ), ] def main() -> None: out = list(BASE) n = len(out) for question, docs, should, structured in EXTRA: n += 1 out.append( { "id": f"q{n:02d}", "question": question, "expected_relevant_doc_ids": docs, "should_answer": should, "expects_structured": structured, } ) OUT.write_text( json.dumps(out, indent=2, ensure_ascii=False), encoding="utf-8", ) print(f"Écrit {len(out)} questions -> {OUT}") if __name__ == "__main__": main()