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)}" | |