Final_Assignment_Template / tools /spreadsheet_tools.py
benfls's picture
Ajout tools de recherche et structuration agent
9333f04
import pandas as pd
from typing import List, Dict, Any
from langchain.tools import BaseTool
class SpreadsheetParserTool(BaseTool):
name = "spreadsheet_parser"
description = "Analyse un fichier Excel et extrait des informations spécifiques"
def _run(self, file_path: str, query: str) -> str:
"""Analyse un fichier Excel et répond à une requête spécifique"""
try:
# Lire le fichier Excel
df = pd.read_excel(file_path)
# Analyser la requête pour déterminer l'action à effectuer
if "somme" in query.lower() or "total" in query.lower():
# Trouver les colonnes numériques
numeric_cols = df.select_dtypes(include=['number']).columns
if len(numeric_cols) > 0:
return f"Somme des colonnes numériques:\n{df[numeric_cols].sum().to_string()}"
else:
return "Aucune colonne numérique trouvée dans le fichier"
elif "moyenne" in query.lower() or "average" in query.lower():
numeric_cols = df.select_dtypes(include=['number']).columns
if len(numeric_cols) > 0:
return f"Moyenne des colonnes numériques:\n{df[numeric_cols].mean().to_string()}"
else:
return "Aucune colonne numérique trouvée dans le fichier"
elif "premières lignes" in query.lower() or "first rows" in query.lower():
return f"Premières lignes du fichier:\n{df.head().to_string()}"
else:
# Par défaut, retourner un résumé du fichier
return f"Résumé du fichier:\nNombre de lignes: {len(df)}\nColonnes: {', '.join(df.columns)}\nTypes de données:\n{df.dtypes.to_string()}"
except Exception as e:
return f"Erreur lors de l'analyse du fichier Excel: {str(e)}"
async def _arun(self, file_path: str, query: str) -> str:
"""Version asynchrone de l'outil"""
return self._run(file_path, query)