CoolFace
Apppublic

Qdonnars/MCP_data_foncier

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
app.py151 linesDownload Raw Back to root
1"""2MCP Server CEREMA — Données foncières et friches pour la transition écologique.3 4Point d'entrée Gradio exposant les tools MCP pour Sofia V2.5Les données (DV3F + Cartofriches) sont chargées en mémoire au démarrage.6Les friches sont pré-agrégées à toutes les mailles (commune, EPCI, département, région, national).7 8Endpoint MCP : http://localhost:7860/gradio_api/mcp/sse9Schema : http://localhost:7860/gradio_api/mcp/schema10"""11 12import logging13import gradio as gr14 15from data_loader import init_all16from server import (17    rechercher_friches,18    statistiques_prix_foncier,19    evolution_prix,20    statistiques_friches,21    diagnostic_foncier_territoire,22)23 24# Configuration du logging25logging.basicConfig(26    level=logging.INFO,27    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",28)29logger = logging.getLogger(__name__)30 31# --- Chargement des données au démarrage ---32logger.info("Démarrage du serveur MCP CEREMA...")33init_all()34logger.info("Données chargées. Construction de l'interface Gradio...")35 36# --- Interfaces Gradio pour chaque tool ---37 38# Tool 1 : Recherche de friches39iface_friches = gr.Interface(40    fn=rechercher_friches,41    inputs=[42        gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055, 59350, 75056"),43        gr.Textbox(label="Code département", placeholder="ex: 13, 59, 75"),44        gr.Dropdown(45            label="Type de friche",46            choices=["", "industrielle", "habitat", "commerciale", "ferroviaire",47                     "militaire", "hospitalière", "logistique", "agro-industrielle",48                     "équipement public", "carrière ou mine"],49            value="",50        ),51        gr.Number(label="Surface minimale (m²)", value=0),52        gr.Dropdown(53            label="Statut",54            choices=["", "sans projet", "avec projet", "potentielle", "reconvertie"],55            value="",56        ),57    ],58    outputs=gr.Markdown(label="Résultats"),59    title="Recherche de friches",60    description="Recherche des friches disponibles sur un territoire (base Cartofriches du CEREMA).",61    api_name="rechercher_friches",62)63 64# Tool 2 : Statistiques de prix foncier65iface_prix = gr.Interface(66    fn=statistiques_prix_foncier,67    inputs=[68        gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055, 59350"),69        gr.Textbox(label="Code département", placeholder="ex: 13, 59"),70        gr.Dropdown(71            label="Type de bien",72            choices=["tous", "maison", "appartement"],73            value="tous",74        ),75        gr.Textbox(label="Année", value="2024", placeholder="2010 à 2024"),76    ],77    outputs=gr.Markdown(label="Résultats"),78    title="Prix foncier",79    description="Statistiques de prix et volumes de transactions immobilières (DV3F, CEREMA/DGFiP).",80    api_name="statistiques_prix_foncier",81)82 83# Tool 3 : Évolution des prix84iface_evolution = gr.Interface(85    fn=evolution_prix,86    inputs=[87        gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055"),88        gr.Textbox(label="Code département", placeholder="ex: 13"),89        gr.Dropdown(90            label="Type de bien",91            choices=["maison", "appartement"],92            value="maison",93        ),94    ],95    outputs=gr.Markdown(label="Résultats"),96    title="Évolution des prix",97    description="Évolution temporelle des prix fonciers de 2010 à 2024 (DV3F, CEREMA/DGFiP).",98    api_name="evolution_prix",99)100 101# Tool 4 : Statistiques agrégées de friches (multi-échelle)102iface_stats_friches = gr.Interface(103    fn=statistiques_friches,104    inputs=[105        gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055 — retourne aussi EPCI, département, région"),106        gr.Textbox(label="Code SIREN EPCI", placeholder="ex: 200054807 (Aix-Marseille-Provence)"),107        gr.Textbox(label="Code département", placeholder="ex: 13, 59"),108        gr.Textbox(label="Code région", placeholder="ex: 93 (PACA), 32 (Hauts-de-France)"),109        gr.Dropdown(110            label="Échelle",111            choices=["", "commune", "epci", "departement", "region", "national"],112            value="",113        ),114    ],115    outputs=gr.Markdown(label="Résultats"),116    title="Statistiques friches (multi-échelle)",117    description="Statistiques agrégées des friches : commune, EPCI, département, région ou national. "118                "Si une commune est fournie, les stats aux échelles supérieures sont aussi affichées.",119    api_name="statistiques_friches",120)121 122# Tool 5 : Diagnostic foncier territorial (multi-échelle)123iface_diagnostic = gr.Interface(124    fn=diagnostic_foncier_territoire,125    inputs=[126        gr.Textbox(label="Code INSEE commune", placeholder="ex: 13055"),127        gr.Textbox(label="Code SIREN EPCI", placeholder="ex: 200054807"),128        gr.Textbox(label="Code département", placeholder="ex: 13"),129        gr.Textbox(label="Code région", placeholder="ex: 93 (PACA)"),130    ],131    outputs=gr.Markdown(label="Résultats"),132    title="Diagnostic foncier",133    description="Diagnostic complet croisant friches et marché foncier à toutes les échelles (Cartofriches + DV3F).",134    api_name="diagnostic_foncier_territoire",135)136 137# --- Application Gradio combinée ---138demo = gr.TabbedInterface(139    [iface_friches, iface_prix, iface_evolution, iface_stats_friches, iface_diagnostic],140    tab_names=["🏗️ Friches", "💰 Prix foncier", "📈 Évolution prix",141               "📊 Stats friches", "🔍 Diagnostic territorial"],142    title="MCP CEREMA — Données foncières & friches pour la transition écologique",143)144 145if __name__ == "__main__":146    demo.launch(147        mcp_server=True,148        server_name="0.0.0.0",149        server_port=7860,150    )151