MCP_CO2 / app.py
Qdonnars's picture
Update app.py
ae3b0a8 verified
"""MCP Server ADEME Environnement v2 - Architecture simplifiée.
3 outils avec niveaux de détail progressifs :
1. search - Exploration large (id + nom)
2. compare - Éléments différenciants (valeur, incertitude, date, source)
3. details - Méthodologie complète
"""
import gradio as gr
from src.tools import search, compare, details
# Interface Gradio avec MCP
with gr.Blocks(title="MCP Server ADEME Environnement v2") as demo:
gr.Markdown("""
# 🌱 MCP Server ADEME Environnement v2
**3 outils avec niveaux de détail progressifs :**
| Étape | Outil | Retour | Usage |
|-------|-------|--------|-------|
| 1 | `search` | id + nom | Explorer, identifier les FE pertinents |
| 2 | `compare` | valeur, incertitude, date, source | Choisir entre les candidats |
| 3 | `details` | méthodologie complète | Comprendre un FE spécifique |
**Sources** : [AGRIBALYSE](https://agribalyse.ademe.fr/) (alimentation) | [Base Carbone](https://base-empreinte.ademe.fr/) (transport, énergie, déchets, équipements)
---
**MCP URL** : `https://ekimetrics-mcp-indicators.hf.space/gradio_api/mcp/sse`
""")
# Onglet 1 : Search
with gr.Tab("🔍 Search"):
gr.Markdown("### Étape 1 : Explorer et identifier les FE pertinents")
search_query = gr.Textbox(
label="Recherche",
placeholder="Ex: camion livraison, boeuf, gaz naturel...",
info="Terme de recherche libre"
)
with gr.Row():
search_source = gr.Dropdown(
choices=["all", "agribalyse", "base_carbone"],
value="all",
label="Source",
info="all = cherche partout, agribalyse = alimentation, base_carbone = transport/énergie/déchets"
)
search_size = gr.Number(value=20, label="Résultats max", minimum=1, maximum=50)
search_btn = gr.Button("Rechercher", variant="primary")
search_out = gr.JSON(label="Résultats (id + nom)")
search_btn.click(search, [search_query, search_source, search_size], search_out, api_name="search")
# Onglet 2 : Compare
with gr.Tab("⚖️ Compare"):
gr.Markdown("""### Étape 2 : Comparer les FE candidats
Entrez les IDs trouvés avec search, séparés par des virgules.
Format : `bc_XXXXX` (Base Carbone) ou `agri_XXXXX` (AGRIBALYSE)
""")
compare_ids = gr.Textbox(
label="IDs à comparer",
placeholder="Ex: bc_28022,bc_28023,bc_28024",
info="Copiez les IDs depuis les résultats de search"
)
compare_btn = gr.Button("Comparer", variant="primary")
compare_out = gr.JSON(label="Comparaison (valeur, incertitude, date, source)")
compare_btn.click(compare, [compare_ids], compare_out, api_name="compare")
# Onglet 3 : Details
with gr.Tab("📋 Details"):
gr.Markdown("""### Étape 3 : Détails méthodologiques complets
Pour creuser un FE spécifique : méthodologie, décomposition par gaz,
commentaires, réglementations, etc.
""")
details_ids = gr.Textbox(
label="IDs",
placeholder="Ex: bc_28022",
info="1 à 5 IDs maximum"
)
details_btn = gr.Button("Obtenir détails", variant="primary")
details_out = gr.JSON(label="Détails complets")
details_btn.click(details, [details_ids], details_out, api_name="details")
if __name__ == "__main__":
demo.launch(mcp_server=True)