merithalle-ai / graphs /tools /indicators.py
Cyril Dupland
Add Merithalle API integration with new service and tools for fetching site indicators. Update settings to include Merithalle API keys and base URL. Enhance A2 payload with site identifier and update prompts to utilize new indicators tool. Introduce example request JSON for A3 analysis.
533bf4d
"""Tool for fetching site indicators from the Merithalle API."""
from typing import Literal
from langchain_core.tools import tool
from services.merithalle_api_service import (
merithalle_api_service,
VALID_ENJEUX_SLUGS,
)
# Type alias for valid enjeux slugs
EnjeuxSlug = Literal[
"presentation",
"biodiversite",
"dechets_effluents",
"eau",
"energie",
"zonessensibles",
"formation",
"ressourceshumaines",
"santesecurite",
"contexte_environnemental",
"nonconformite",
"parties_prenantes_environnementales",
"systeme_environnemental",
"systeme_securite_travail",
"fertilisation",
"herbicide",
"protectionvignoble",
"travail_sol",
]
@tool
def get_site_indicators(id_site: int, enjeux: str) -> str:
"""
Récupère les indicateurs d'un site pour un enjeu spécifique depuis l'API Mérithalle.
Utilisez cet outil UNIQUEMENT pour :
- Comparer les données actuelles avec celles d'un AUTRE enjeu du même site
- Obtenir des données de contexte supplémentaires sur le site
- Répondre à une demande explicite d'informations sur un enjeu spécifique
NE PAS utiliser cet outil pour :
- L'enjeu en cours d'analyse (les données sont déjà fournies dans le contexte)
- De manière systématique (uniquement sur demande ou besoin de comparaison)
Args:
id_site: Identifiant numérique du site Mérithalle
enjeux: Slug de l'enjeu. Valeurs possibles :
- presentation : Présentation et Contexte
- biodiversite : Biodiversité
- dechets_effluents : Déchets et Effluents
- eau : Eau
- energie : Énergie
- zonessensibles : Sensibilité du milieu
- formation : Formation
- ressourceshumaines : Ressources humaines
- santesecurite : Santé Sécurité
- contexte_environnemental : Contexte Environnemental
- nonconformite : Non conformité
- parties_prenantes_environnementales : Parties prenantes environnementales
- systeme_environnemental : Système environnemental
- systeme_securite_travail : Système de gestion de la sécurité au travail
- fertilisation : Fertilisation
- herbicide : Traitements herbicides
- protectionvignoble : Protection du vignoble
- travail_sol : Gestion de l'enherbement et travail du sol
Returns:
Texte formaté contenant les indicateurs avec valeurs N, N-1 et variations.
Format :
```
Sous-enjeu : NOM_SOUS_ENJEU
GROUP
- [LABEL_CHAMP] : [VALEUR] [UNIT] (N-1 : [VALEUR_N1] [UNIT] | Var. : [VARIATION]%)
```
En cas d'erreur, retourne un message d'erreur lisible.
"""
# Validate enjeux parameter
if enjeux not in VALID_ENJEUX_SLUGS:
valid_slugs = ", ".join(sorted(VALID_ENJEUX_SLUGS))
return (
f"Erreur : Le slug d'enjeu '{enjeux}' n'est pas valide. "
f"Valeurs acceptées : {valid_slugs}"
)
# Validate id_site
if not isinstance(id_site, int) or id_site <= 0:
return f"Erreur : L'identifiant de site doit être un entier positif. Reçu : {id_site}"
# Fetch and format indicators
return merithalle_api_service.get_indicators_text(id_site, enjeux)