Spaces:
Sleeping
Sleeping
| import time | |
| from langchain.memory import ConversationBufferMemory | |
| from langchain.agents import AgentExecutor, Tool | |
| from langchain.chat_models import ChatGoogleGenerativeAI | |
| import genai | |
| from gemini import GeminiAgent | |
| from smolagent_tools import WikipediaSearchTool, WebSearchTool, SmolagentToolWrapper | |
| # Función para configuración de llm | |
| def setup_llm(api_key: str, model_name: str = "gemini-2.0-flash"): | |
| """Configuración del modelo de lenguaje con Gemini.""" | |
| genai.configure(api_key=api_key) | |
| return ChatGoogleGenerativeAI(model_name=model_name) | |
| # Herramientas adicionales | |
| class EnhancedAgent: | |
| def __init__(self, api_key: str, model_name: str = "gemini-2.0-flash"): | |
| self.api_key = api_key | |
| self.model_name = model_name | |
| self.llm = setup_llm(api_key, model_name) | |
| self.memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) | |
| self.tools = [ | |
| SmolagentToolWrapper(WikipediaSearchTool()), | |
| Tool(name="web_search", func=self._web_search, description="Realizar búsqueda web avanzada") | |
| ] | |
| self.agent = GeminiAgent( | |
| tools=self.tools, | |
| llm=self.llm, | |
| memory=self.memory, | |
| ) | |
| def _web_search(self, query: str, domain: Optional[str] = None) -> str: | |
| """Realiza una búsqueda en la web usando DuckDuckGo con limitación de tasa y reintentos.""" | |
| try: | |
| search_tool = WebSearchTool() | |
| results = search_tool.search(query, domain) | |
| return results | |
| except Exception as e: | |
| return f"Error al realizar la búsqueda: {str(e)}" | |
| def run(self, query: str) -> str: | |
| """Procesa las consultas del usuario con reintentos y manejo de errores.""" | |
| max_retries = 3 | |
| base_sleep = 1 | |
| for attempt in range(max_retries): | |
| try: | |
| response = self.agent.run(query) | |
| return response | |
| except Exception as e: | |
| sleep_time = base_sleep * (attempt + 1) | |
| if attempt < max_retries - 1: | |
| print(f"Intento {attempt + 1} fallido. Reintentando en {sleep_time} segundos...") | |
| time.sleep(sleep_time) | |
| continue | |
| return f"Error procesando la consulta: {str(e)}" | |