"""# 3. Définition des Nœuds def agent_analyseur(state: AgentState): # --- PHASE D'INSPECTION AUTOMATIQUE --- # On récupère le chemin du fichier depuis le state file_path = state.get("current_df_path") inspection_info = "" if file_path and os.path.exists(file_path): try: # Lecture des 5 premières lignes pour comprendre la structure df_temp = pd.read_csv(file_path, nrows=5) if file_path.endswith('.csv') else pd.read_excel(file_path, nrows=5) columns_list = df_temp.columns.tolist() sample_data = df_temp.head(2).to_string() inspection_info = f"\n\n### DONNÉES RÉELLES DU FICHIER :\n- Colonnes détectées : {columns_list}\n- Aperçu des données :\n{sample_data}" except Exception as e: inspection_info = f"\n\n⚠️ Erreur lors de l'inspection du fichier : {e}" # --- CONSTRUCTION DU PROMPT AVEC LES DONNÉES RÉELLES --- prompt = ( "Tu es l'Analyseur de Dataltist. Réponds exclusivement au format JSON.\n" "Définis les étapes logiques de l'analyse sans écrire de code.\n" "### RÈGLES D'OR :\n" "1. PAS DE CODE : Ne génère JAMAIS de blocs de code Python (```python). C'est le rôle de l'Exécuteur.\n" "2. PLAN D'ACTION : Liste les étapes logiques en utilisant les noms de colonnes exacts.\n" "3. INSPECTION : Base-toi uniquement sur les colonnes détectées ci-dessous.\n" "4. CONCISION : Sois une tour de contrôle, donne des ordres clairs et précis.\n" f"{inspection_info}" ) config_analyseur = { "callbacks": [langfuse_handler], "metadata": {"agent_name": "Analyseur"}, "tags": ["Dataltist", "Planning"] } msg = [SystemMessage(content=prompt)] + state["messages"] response = local_llm.invoke(msg , config=config_analyseur) # On retourne la réponse de l'IA qui contient maintenant le plan basé sur les vraies colonnes return {"messages": [response]} ⚠️ IMPORTANT : - Ta réponse doit commencer par { et finir par } - Aucun texte avant ou après - Aucun markdown (```json interdit) """