diff --git a/src/main/java/fr/birdia/genai/model/AnalyseurToiture.java b/src/main/java/fr/birdia/genai/model/AnalyseurToiture.java index 199599c..574c75f 100644 --- a/src/main/java/fr/birdia/genai/model/AnalyseurToiture.java +++ b/src/main/java/fr/birdia/genai/model/AnalyseurToiture.java @@ -28,103 +28,104 @@ public String apply(Toit toit) { } private String getAIReport(Toit toit) { - return chat.apply( + var prompt = """ + Tu es un artisan couvreur expérimenté, spécialiste des toitures depuis plus de 15 ans. + Tu rédiges un rapport court (300–400 mots max), clair, professionnel et pédagogique pour un propriétaire non-expert. + Ton objectif est double : + 1. Expliquer factuellement l’état de la toiture en croisant les données techniques, les types de matériaux et les points sensibles. + 2. Formuler des conseils concrets et actionnables pour maintenir ou prolonger la durée de vie de la toiture, en te projetant comme si tu préparais un devis pour de vraies interventions à réaliser à court ou moyen terme. + + 🛑 Interdictions : + • Ne fais aucun disclaimer juridique. + • Ne dépasse jamais 400 mots. + • Ne parle jamais d’argent. + • Ne répète pas les données brutes : interprète-les. + + ✅ Contraintes de forme : + • Résultat UNIQUEMENT en HTML (aucun texte hors balises). + • Utilise uniquement les emojis suivants : 🟢🟡🟠🔴 🔍 🧼 🛠️ 📸 🧪 🧯 + • Utilise la police suivante en priorité : Kumbh Sans + • Respecte strictement la structure suivante, de telle sorte que les blocs INSTRUCTION soient remplacés par l’instruction donnée: + + + + + +
+

COMPRENDRE VOTRE RAPPORT

""" -Tu es un artisan couvreur expérimenté, spécialiste des toitures depuis plus de 15 ans. -Tu rédiges un rapport court (300–400 mots max), clair, professionnel et pédagogique pour un propriétaire non-expert. -Ton objectif est double : - 1. Expliquer factuellement l’état de la toiture en croisant les données techniques, les types de matériaux et les points sensibles. - 2. Formuler des conseils concrets et actionnables pour maintenir ou prolonger la durée de vie de la toiture, en te projetant comme si tu préparais un devis pour de vraies interventions à réaliser à court ou moyen terme. - -🛑 Interdictions : - • Ne fais aucun disclaimer juridique. - • Ne dépasse jamais 400 mots. - • Ne parle jamais d’argent. - • Ne répète pas les données brutes : interprète-les. - -✅ Contraintes de forme : - • Résultat UNIQUEMENT en HTML (aucun texte hors balises). - • Utilise uniquement les emojis suivants : 🟢🟡🟠🔴 🔍 🧼 🛠️ 📸 🧪 🧯 - • Utilise la police suivante en priorité : Kumbh Sans - • Respecte strictement la structure suivante, de telle sorte que les blocs INSTRUCTION soient remplacés par l’instruction donnée: - - - - - -
-

COMPRENDRE VOTRE RAPPORT

-""" - .concat( + .concat( String.format( - """ -

%s CATÉGORIE %s : %s

""", - getCategoryEmoji(toit), getCategory(toit), getEtatToiture(toit))) - .concat( + """ +

%s CATÉGORIE %s : %s

""", + getCategoryEmoji(toit), getCategory(toit), getEtatToiture(toit))) + .concat( String.format( - """ - INSTRUCTION - !IMPORTANT! Cette instruction n'est pas à afficher. - - Voici les donnée à utiliser: - - L’analyse couvre %s m². Revêtement : %s. - Humidité : %s %% • Moisissure : %s %% • Usure : %s %% — interprète leur impact selon le type de revêtement (ex. stagnation, porosité, vieillissement prématuré). - Points sensibles (obstacles) : %s — peut être utilisé pour expliquer leur impact (pénétrations, joints, zones à risque d’infiltration ou de mousse). - Signes de détérioration : fissures = "%s" ; risque feu = "%s" — peut être utilisé pour interprèter le contexte (zones à forte exposition, végétation proche, matériaux inflammables, etc.). - FIN_INSTRUCTION - - - - -""", - toit.surfaceEnM2(), - toit.revetement(), - toit.humidité(), - toit.moisissure(), - toit.usure(), - toit.obstacles(), - toit.fissureCassure() ? "OUI" : "NON", - toit.risqueFeu() ? "OUI" : "NON")) - .concat( + """ + INSTRUCTION + !IMPORTANT! Cette instruction n'est pas à afficher. + + Voici les donnée à utiliser: + + L’analyse couvre %s m². Revêtement : %s. + Humidité : %s %% • Moisissure : %s %% • Usure : %s %% — interprète leur impact selon le type de revêtement (ex. stagnation, porosité, vieillissement prématuré). + Points sensibles (obstacles) : %s — peut être utilisé pour expliquer leur impact (pénétrations, joints, zones à risque d’infiltration ou de mousse). + Signes de détérioration : fissures = "%s" ; risque feu = "%s" — peut être utilisé pour interprèter le contexte (zones à forte exposition, végétation proche, matériaux inflammables, etc.). + FIN_INSTRUCTION + + + + + """, + toit.surfaceEnM2(), + toit.revetement(), + toit.humidité(), + toit.moisissure(), + toit.usure(), + toit.obstacles(), + toit.fissureCassure() ? "OUI" : "NON", + toit.risqueFeu() ? "OUI" : "NON")) + .concat( """ -
-
-

CONSEILS DE L’ARTISAN COUVREUR

-""") - .concat( +
+
+

CONSEILS DE L’ARTISAN COUVREUR

+ """) + .concat( String.format( - """ - -""", - toit.obstacles(), toit.usure(), toit.humidité())) - .concat( + """ + + """, + toit.obstacles(), toit.usure(), toit.humidité())) + .concat( """ -
- -INSTRUCTION -🔁 Logique d’analyse attendue : - • Si le revêtement est poreux (ex. tuiles béton, anciennes ardoises), commente plus l’humidité/moisissure. - • Si obstacles présents, insiste sur étanchéité périphérique. - • Si taux d’usure élevé (>30 %%), recommande interventions ciblées ou révision complète selon les cas. - • Si mutation = néant mais usure/moisissure monte → signale usure lente non compensée par entretien. - • Si risque feu = oui → mentionne végétation proche ou matériaux bitumeux exposés. -FIN_INSTRUCTION -""")) +
+ + INSTRUCTION + 🔁 Logique d’analyse attendue : + • Si le revêtement est poreux (ex. tuiles béton, anciennes ardoises), commente plus l’humidité/moisissure. + • Si obstacles présents, insiste sur étanchéité périphérique. + • Si taux d’usure élevé (>30 %%), recommande interventions ciblées ou révision complète selon les cas. + • Si mutation = néant mais usure/moisissure monte → signale usure lente non compensée par entretien. + • Si risque feu = oui → mentionne végétation proche ou matériaux bitumeux exposés. + FIN_INSTRUCTION + """); + log.info("AI Prompt : {}", prompt); + return chat.apply(prompt) .replace("```html", "") .replace("```", ""); }