Skip to content

Commit

Permalink
Source prompt & IA answer in impactscore
Browse files Browse the repository at this point in the history
  • Loading branch information
goulven authored and goulven committed Dec 17, 2024
1 parent f620bd3 commit 7ca1132
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -626,28 +626,35 @@ public String generateEcoscoreYamlConfig (VerticalConfig vConf) {
try {
Map<String, Object> context = new HashMap<String, Object>();


context.put("AVAILABLE_CRITERIAS", getCriterias(vConf));
context.put("VERTICAL_NAME", vConf.getI18n().get("fr").getVerticalHomeTitle());


// Prompt
GenAiResponse<Map<String, Object>> response = genAiService.jsonPrompt("impactscore-generation", context);

String rawRet = serialisationService.toYaml(response);

String rawRet = serialisationService.toYaml(response.getBody());
ImpactScoreConfig impactScoreConfig = serialisationService.fromYaml(rawRet, ImpactScoreConfig.class);

// Completing
impactScoreConfig.setYamlPrompt(serialisationService.toYaml(response.getPrompt()));
impactScoreConfig.setAiJsonResponse(serialisationService.toJson(response.getBody()));


// Setting prompt and response

rawRet = rawRet.replace("---", "");
StringBuilder buffer = new StringBuilder("impactScoreConfig:\n");
buffer.append("# Generated with AI on " ).append(new Date().toLocaleString()).append("\n");
Arrays.asList(rawRet.split("\n")).forEach(line -> {
buffer.append(" ").append(line).append("\n");

});

ret = buffer.toString();
Map<String, Object> map = new HashMap<String, Object>();
map.put("impactScoreConfig", impactScoreConfig);

// StringBuilder buffer = new StringBuilder("impactScoreConfig:\n");
// buffer.append("# Generated with AI on " ).append(new Date().toLocaleString()).append("\n");
// Arrays.asList(rawRet.split("\n")).forEach(line -> {
// buffer.append(" ").append(line).append("\n");
//
// });

ret = serialisationService.toYaml(map.replace("---", ""));


} catch (ResourceNotFoundException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.HashMap;
import java.util.Map;

import org.checkerframework.checker.units.qual.K;
import org.open4goods.commons.model.Localisable;

public class ImpactScoreConfig {
Expand All @@ -19,6 +18,9 @@ public class ImpactScoreConfig {

private Localisable<String, ImpactScoreTexts> texts = new Localisable<>();

// For auditability. Strange in config file, but to be marbered with with criterias generation
private String yamlPrompt;
private String aiJsonResponse;

// TODO : The validate method (check sums is 1)
public Map<String, Double> getCriteriasPonderation() {
Expand All @@ -33,6 +35,18 @@ public Localisable<String, ImpactScoreTexts> getTexts() {
public void setTexts(Localisable<String, ImpactScoreTexts> texts) {
this.texts = texts;
}
public String getYamlPrompt() {
return yamlPrompt;
}
public void setYamlPrompt(String yamlPrompt) {
this.yamlPrompt = yamlPrompt;
}
public String getAiJsonResponse() {
return aiJsonResponse;
}
public void setAiJsonResponse(String aiJsonResponse) {
this.aiJsonResponse = aiJsonResponse;
}


}
27 changes: 11 additions & 16 deletions ui/src/main/resources/templates/themes/v2/ecoscore-vertical.html
Original file line number Diff line number Diff line change
Expand Up @@ -305,25 +305,15 @@ <h2 class="h1 fw-light">Audit
</div>
<div class="tab-pane fade" id="tabs-icons-text-2" role="tabpanel"
aria-labelledby="tabs-icons-text-2-tab">
<p>Photo booth stumptown tote bag Banksy, elit small batch
freegan sed. Craft beer elit seitan exercitation, photo booth
et 8-bit kale chips proident chillwave deep v laborum. Aliquip
veniam delectus, Marfa eiusmod Pinterest in do umami readymade
swag.</p>
<p>Day handsome addition horrible sensible goodness two
contempt. Evening for married his account removal. Estimable me
disposing of be moonlight cordially curiosity.</p>
<pre>
<code class="yaml" th:utext="${impactscore.aiJsonResponse}"></code>
</pre>
</div>
<div class="tab-pane fade" id="tabs-icons-text-3" role="tabpanel"
aria-labelledby="tabs-icons-text-3-tab">
<p>Exercitation photo booth stumptown tote bag Banksy, elit
small batch freegan sed. Craft beer elit seitan exercitation,
photo booth et 8-bit kale chips proident chillwave deep v
laborum. Aliquip veniam delectus, Marfa eiusmod Pinterest in do
umami readymade swag.</p>
<p>Day handsome addition horrible sensible goodness two
contempt. Evening for married his account removal. Estimable me
disposing of be moonlight cordially curiosity.</p>
<pre>
<code class="yaml" th:utext="${impactscore.yamlPrompt}"></code>
</pre>
</div>
</div>
</div>
Expand Down Expand Up @@ -368,6 +358,11 @@ <h2 class="h1 fw-light">Audit
<script src="../../assets/js/pixel.js"></script>
<!-- custom sources -->
<script src="../../assets/js/pixel-custom.js"></script>

<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.5.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>


</body>

</html>
33 changes: 16 additions & 17 deletions verticals/src/main/resources/verticals/tv.yml
Original file line number Diff line number Diff line change
Expand Up @@ -261,24 +261,23 @@ matchingCategories:
#- "TV - VIDEO - SON | TV - VIDEO - SON > ACCESSOIRES TV - VIDEO - SON > FIXATION TV - SUPPORT TV - SUPPORT MURAL POUR TV | ACCESSOIRES TV - VIDEO - SON | FIXATION TV - SUPPORT TV - SUPPORT MURAL POUR TV"
#- "ACCESSOIRES DE TV"
#- "TV, VIDEO, HOME CINEMA | TV, VIDEO, HOME CINEMA>TELEVISEUR>SUPPORT MURAL POUR ECRAN PLAT | TELEVISEUR | TV, VIDEO, HOME CINEMA"

impactScoreConfig:
# Generated with AI on 16 déc. 2024, 14:28:30

criteriasPonderation:
REPAIRABILITY_INDEX: 0.25
WEIGHT: 0.15
POWER_CONSUMPTION_OFF: 0.2
BRAND_SUSTAINABILITY: 0.2
CLASSE_ENERGY: 0.2
texts:
fr:
purpose: "L'objectif de cette démarche est de créer un score d'impact environnemental pour les téléviseurs, en prenant en compte divers facteurs écologiques et sociétaux. Ce score permet de comparer les produits sur une base environnementale et d'encourager les choix plus durables."
availlableDatas: "Les données disponibles incluent l'indice de réparabilité, le poids, la consommation électrique en veille, la durabilité de la marque et la classe énergétique. Ces données sont pertinentes car elles couvrent des aspects clés de l'impact environnemental des téléviseurs, tels que la consommation d'énergie, la facilité de réparation, et l'engagement de la marque envers la durabilité."
criticalReview: "La méthodologie est robuste mais pourrait être améliorée par l'ajout de facteurs tels que l'impact des matériaux utilisés et la durée de vie prévue du produit. L'absence de certains facteurs peut être compensée par l'utilisation de valeurs moyennes, mais cela peut réduire la précision du score pour certains produits."
criteriasAnalysis:
REPAIRABILITY_INDEX: "L'indice de réparabilité est crucial car il influence directement la durée de vie du produit et sa capacité à être réparé plutôt que remplacé. Une bonne réparabilité réduit les déchets électroniques. La pondération retenue pour cet indice est élevée pour encourager les produits facilement réparables."
WEIGHT: "Le poids est un indicateur indirect de l'impact environnemental, car un poids plus élevé peut signifier plus de matériaux utilisés et des émissions accrues lors du transport. Cependant, son impact est moindre comparé à d'autres facteurs, donc sa pondération est modérée."
POWER_CONSUMPTION_OFF: "La consommation électrique en veille est importante car elle représente une consommation continue d'énergie. Réduire cette consommation est essentiel pour diminuer l'empreinte carbone globale du produit. La pondération est significative pour encourager les produits à faible consommation en veille."
BRAND_SUSTAINABILITY: "La durabilité de la marque reflète l'engagement global de l'entreprise envers des pratiques durables. Cela inclut des aspects sociaux et environnementaux, ce qui en fait un facteur important. La pondération est modérée pour refléter son importance sans surévaluer l'impact d'une seule entreprise."
CLASSE_ENERGY: "La classe énergétique est un indicateur direct de l'efficacité énergétique du produit en fonctionnement. C'est un facteur clé pour réduire l'impact environnemental à long terme, donc sa pondération est élevée."
criteriasPonderation:
REPAIRABILITY_INDEX: 0.25
WEIGHT: 0.15
POWER_CONSUMPTION_OFF: 0.2
BRAND_SUSTAINABILITY: 0.2
CLASSE_ENERGY: 0.2
REPAIRABILITY_INDEX: "L'indice de réparabilité est crucial car il détermine la facilité avec laquelle un téléviseur peut être réparé et donc sa durée de vie. Une meilleure réparabilité réduit les déchets électroniques. La pondération de 0.25 reflète son importance."
WEIGHT: "Le poids est un indicateur de l'impact environnemental lié au transport et aux matériaux utilisés. Un poids plus élevé peut indiquer une empreinte carbone plus importante. La pondération de 0.15 est justifiée par son impact modéré."
POWER_CONSUMPTION_OFF: "La consommation électrique en veille est un facteur important car elle représente une utilisation d'énergie continue. Réduire cette consommation peut significativement diminuer l'empreinte énergétique. La pondération de 0.2 reflète son importance."
BRAND_SUSTAINABILITY: "La durabilité de la marque, évaluée par le score ESG, indique l'engagement de l'entreprise envers des pratiques durables. Cela influence indirectement l'impact environnemental du produit. La pondération de 0.2 est justifiée par son impact indirect mais significatif."
CLASSE_ENERGY: "La classe énergétique est un indicateur direct de l'efficacité énergétique du téléviseur en fonctionnement. Une meilleure classe énergétique signifie une consommation réduite. La pondération de 0.2 reflète son importance directe."
purpose: "Description de la démarche"
criticalReview: "La démarche prend en compte les facteurs clés influençant l'impact environnemental des téléviseurs. Cependant, l'absence de données sur certains facteurs pour certains produits peut affecter la précision du score. L'utilisation de valeurs moyennes pour les données manquantes permet de minimiser cet impact. Les facteurs inutiles ou redondants ont été écartés pour se concentrer sur les plus pertinents."
availlableDatas: "Les données disponibles pour les téléviseurs incluent des informations sur la réparabilité, le poids, la consommation électrique en veille, la durabilité de la marque et la classe énergétique. Ces facteurs sont pertinents pour évaluer l'impact environnemental global des téléviseurs."
yamlPrompt: "---\nkey: \"impactscore-generation\"\naiService: \"OPEN_AI\"\nsystemPrompt: \"Tu es un agent expert en évaluation environnementale des produits électriques et electroniques.\\nAdopte une démarche d’expert en analyse du cycle de vie des produits. \\nNous allons travailler sur des Téléviseurs\\nNe fournir en réponse que du JSON, conformément à la structure indiquée, sans commentaire, ni texte supplémentaire\\n\"\nuserPrompt: \"### Création d'un eco-score pour les Téléviseurs \\n\\nTu vas créer un score d'impact environnemental, qui prend en compte les impacts écologiques et sociétaux pour les Téléviseurs.\\n\\nCet Impact Score est une composition de différents facteurs coefficientés. Les facteurs disponibles sont : \\n REPAIRABILITY_INDEX : L&#39;indice de réparabilité de l&#39;objet\\n WEIGHT : Le poids de l&#39;objet\\n POWER_CONSUMPTION_OFF : La consommation électrique à l&#39;arrêt, ou en veille\\n BRAND_SUSTAINABILITY : L&#39;évaluation ESG de l&#39;entreprise (filiale ou société mère, suivant la finesse des données) qui fabrique le produit, d&#39;après le score de performance ESG de Sustainalytics\\n CLASSE_ENERGY : La classe énergétique\\n\\n\\n### Principe de fonctionnement de l'eco-score\\n \\nLes principes de fonctionnement que tu dois prendre en compte\\n principe de relativisation des facteurs : Chacun des facteurs est représenté de manière relative, sous forme de classement. Le produit de la catégorie ayant le meilleur facteur pour l'environnement obtient 100/100, le produit ayant le moins bon score obtient 0/100' \\n principe de virtualisation des scores manquants : si un des facteurs est absent, nous appliquons pour ce facteur la valeur moyenne de ce facteur pour l'ensemble des produits. Cet indicateur DATA_QUALITY est permet donc d'avantager les produits pour lequel toute l'info est disponible, sans pour autant pénaliser outre mesure les produits pour lesquels l'information est absente.\\n la somme des différents facteurs coefficientés doit être égale à 1\\n \\nTu vas travailler à partir des facteurs disponibles, pour élaborer un score d'impact environnemental pertinent pour des Téléviseurs.\\n\\n### Format de réponse attendu : JSON \\n \\n Tout écart par rapport à la structure JSON fournie est inacceptable.\\n Aucune information supplémentaire ne doit être fournie en dehors du JSON (pas de phrases avant ou après).\\n Conserve l’ordre des clés et leur orthographe. Les clés doivent correspondre exactement à celles indiquées. Si un champ est nul ou non applicable, omets-le de la réponse.\\n Fournis une réponse JSON respectant strictement la structure suivante :\\n\\n {\\n criteriasPonderation : {\\n \\\"FACTEUR_1\\\" : PONDERATION_1,\\n \\\"FACTEUR_2\\\" : PONDERATION_2,\\n ... \\n },\\n texts: {\\n fr: {\\n \\\"purpose\\\": \\\"Description de la démarche\\\",\\n \\\"availlableDatas\\\": \\\"Analyse de façon générale les données disponibles et leur pertinence pour la réalisation de cet eco-score\\\",\\n \\\"criticalReview\\\": \\\"Revue critique et retour constructif sur la démarche et la méthodologie, en évaluant les facteurs absents ou inutiles\\\",\\n \\\"criteriasAnalysis\\\": {\\n \\\"FACTEUR_1\\\" : \\\"Détail et analyse de l'importance du FACTEUR_1 dans l'analyse environnemental des Téléviseurs. Explique et justifie la pondération retenue pour le FACTEUR_1\\\",\\n \\\"FACTEUR_2\\\" : \\\"Détail et analyse de l'importance du FACTEUR_2 dans l'analyse environnemental des Téléviseurs. Explique et justifie la pondération retenue pour le FACTEUR_2\\\",\\n ... \\n }\\n } \\n }\\n }\\n\"\noptions:\n streamUsage: false\n model: \"gpt-4o\"\n temperature: 0.2\n"
aiJsonResponse: "{\"criteriasPonderation\":{\"REPAIRABILITY_INDEX\":0.25,\"WEIGHT\":0.15,\"POWER_CONSUMPTION_OFF\":0.2,\"BRAND_SUSTAINABILITY\":0.2,\"CLASSE_ENERGY\":0.2},\"texts\":{\"fr\":{\"purpose\":\"Description de la démarche\",\"availlableDatas\":\"Les données disponibles pour les téléviseurs incluent des informations sur la réparabilité, le poids, la consommation électrique en veille, la durabilité de la marque et la classe énergétique. Ces facteurs sont pertinents pour évaluer l'impact environnemental global des téléviseurs.\",\"criticalReview\":\"La démarche prend en compte les facteurs clés influençant l'impact environnemental des téléviseurs. Cependant, l'absence de données sur certains facteurs pour certains produits peut affecter la précision du score. L'utilisation de valeurs moyennes pour les données manquantes permet de minimiser cet impact. Les facteurs inutiles ou redondants ont été écartés pour se concentrer sur les plus pertinents.\",\"criteriasAnalysis\":{\"REPAIRABILITY_INDEX\":\"L'indice de réparabilité est crucial car il détermine la facilité avec laquelle un téléviseur peut être réparé et donc sa durée de vie. Une meilleure réparabilité réduit les déchets électroniques. La pondération de 0.25 reflète son importance.\",\"WEIGHT\":\"Le poids est un indicateur de l'impact environnemental lié au transport et aux matériaux utilisés. Un poids plus élevé peut indiquer une empreinte carbone plus importante. La pondération de 0.15 est justifiée par son impact modéré.\",\"POWER_CONSUMPTION_OFF\":\"La consommation électrique en veille est un facteur important car elle représente une utilisation d'énergie continue. Réduire cette consommation peut significativement diminuer l'empreinte énergétique. La pondération de 0.2 reflète son importance.\",\"BRAND_SUSTAINABILITY\":\"La durabilité de la marque, évaluée par le score ESG, indique l'engagement de l'entreprise envers des pratiques durables. Cela influence indirectement l'impact environnemental du produit. La pondération de 0.2 est justifiée par son impact indirect mais significatif.\",\"CLASSE_ENERGY\":\"La classe énergétique est un indicateur direct de l'efficacité énergétique du téléviseur en fonctionnement. Une meilleure classe énergétique signifie une consommation réduite. La pondération de 0.2 reflète son importance directe.\"}}}}"

0 comments on commit 7ca1132

Please sign in to comment.