DOCS/outputs/mnaha/seed/step5_assistant.py
Thomas Fransolet d14f151517 Livrables de presentation, seed de demo MNAHA et wireframes
- outputs/platform, outputs/prospect : scripts de construction des decks
  commerciaux + captures sources et .pptx generes.
- outputs/mnaha : seed complet de l'instance de demo luxembourgeoise
  (scripts par etape, contenus, images generees), le deck en version
  marque blanche et en version brandee, le PDF de presentation.
- outputs/Wireframes : maquettes app mobile, app web et manager.
- interview clients : notes de l'entretien Fourneau St Michel.

state.json et les __pycache__ sont ignores : le premier porte les cles
d'API de l'instance seedee, les scripts le regenerent.
2026-09-11 15:47:57 +02:00

60 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
"""Étape 5 — conversations de visiteurs avec l'assistant.
Deux tiers de questions auxquelles le contenu répond, un tiers auxquelles il ne
répond pas : c'est ce dernier tiers qui remplit l'onglet « questions sans réponse »
du Guide IA, celui qui vaut la démonstration.
"""
import json
from pathlib import Path
from api import Api
STATE = Path(__file__).resolve().parent / "state.json"
ANSWERABLE = [
("FR", "Que représente la mosaïque de Vichten ?"),
("FR", "Qu'a-t-on trouvé dans les tombes de Goeblange-Nospelt ?"),
("DE", "Warum heißt das Fort Thüngen „Dräi Eechelen“?"),
("EN", "What is a hypocaust and where can I see one?"),
("FR", "Pourquoi la forteresse de Luxembourg a-t-elle été démantelée ?"),
("NL", "Wanneer werd de Romeinse villa van Echternach opgegraven?"),
("DE", "Was zeigt die Sammlung Villeroy & Boch?"),
]
# Volontairement hors périmètre du contenu : horaires, accès, tarifs, services.
UNANSWERABLE = [
("FR", "Est-ce que le musée est accessible en fauteuil roulant ?"),
("FR", "Combien coûte l'entrée pour une famille de quatre personnes ?"),
("DE", "Gibt es einen Parkplatz in der Nähe des Museums?"),
("EN", "Is there a cloakroom for luggage?"),
("FR", "À quelle heure ferme le musée le dimanche ?"),
("EN", "Do you have a café on site?"),
]
def main():
api = Api()
state = json.loads(STATE.read_text(encoding="utf-8"))
instance_id = state["instanceId"]
for label, questions in (("répondues", ANSWERABLE),
("sans réponse", UNANSWERABLE)):
for language, question in questions:
result = api.post("/api/Ai/chat", {
"instanceId": instance_id,
"message": question,
"language": language,
})
sources = result.get("sources") or []
print(f" [{language}] {question[:52]:<52} "
f"{len(sources)} source(s), {result.get('tokensUsed')} jetons")
insights = api.get(f"/api/Ai/insights/{instance_id}")
print("\ninsights :", json.dumps(insights, ensure_ascii=False)[:400])
if __name__ == "__main__":
main()