Implementación del cliente Ollama y su credencial, integración de logging en base de datos, y mejoras en la gestión de herramientas MCP.

This commit is contained in:
2025-05-19 22:57:01 +02:00
parent 9db2f70009
commit 6b491a9a41
10 changed files with 544 additions and 167 deletions
+51 -30
View File
@@ -11,29 +11,43 @@ from fastmcp.client.transports import StreamableHttpTransport
from fastmcp.client import Client
from src.Llms.MCPs.McpClient import MCPClient # ya tienes esta clase
from src.Llms.MCPs.McpClient_Registry import ClientRegistry # o ajusta según tu estructura
from src.Credenciales.ollama_credencial import OllamaCredencial
from src.ConexionApis.Ollama_cliente import OllamaCliente
from src.Llms.Modelos.Ollama_model import ModeloOllama
import asyncio
async def main():
# Usar Credencial openai
# # Usar Credencial openai
conexion_admin = PostgresConexion(db_credencial)
repo = OpenAICredencialRepo(conexion_admin)
credencial_openai = repo.get_by_id("OPAK20250513-61b29978b7604031014")
cliente = OpenAICliente(credencial_openai)
# conexion_admin = PostgresConexion(db_credencial)
# repo = OpenAICredencialRepo(conexion_admin)
# credencial_openai = repo.get_by_id("OPAK20250513-61b29978b7604031014")
# if credencial_openai is None:
# raise ValueError("No se encontró la credencial OpenAI con el ID proporcionado.")
# cliente = OpenAICliente(credencial_openai)
# Usar Credencial ollama
credencial_ollama = OllamaCredencial(titulo="Ollama")
# crea el modelo (openai)
cliente = OllamaCliente(credencial_ollama)
modelo = ModeloOpenAI(
modelo = ModeloOllama(
cliente=cliente,
model="gpt-4o",
temperature=1,
top_p=1.0
)
model="llama3.1:8b")
# # crea el modelo (openai)
# modelo = ModeloOpenAI(
# cliente=cliente,
# model="gpt-4o",
# temperature=1
# )
# Le otorga memoria
@@ -70,20 +84,20 @@ async def main():
agente2 = AgenteAI(
modelo=modelo,
nombre="Asistente Inteligente",
descripcion="Un asistente conversacional versátil, capaz de resolver problemas, acceder a herramientas y proporcionar respuestas útiles.",
system_prompt=(
"Eres un asistente inteligente que ayuda al usuario a resolver tareas, responder preguntas y usar herramientas disponibles si es necesario. "
"Debes razonar paso a paso, y si se detecta que una herramienta MCP es útil, actúa generando el bloque MCP apropiado sin dar más explicaciones. "
"Siempre estructura tus respuestas con claridad, y termina con <END> cuando creas haber completado la tarea."
),
descripcion="",
system_prompt="",
# system_prompt = """
# Eres un asistente general. No tienes acceso a herramientas externas ni herramientas MCP. No debes mencionar herramientas MCP, servidores ni bloques de código.
# Responde de forma clara y amigable a cualquier pregunta general del usuario.
# """.strip(),
rol="asistente",
objetivos=[
"Resolver tareas del usuario",
"Usar herramientas MCP si es útil",
"Responder de forma clara y útil"
# "Resolver tareas del usuario",
# "Usar herramientas MCP si es útil",
# "Responder de forma clara y útil"
],
# max_iterations=3,
max_iterations=0,
# memoria=memoria,
mcp=registry # ← ✅ Integración del cliente MCP
@@ -92,22 +106,29 @@ async def main():
# --- FUNCIÓN DE EJECUCIÓN ---
async def probar_interaccion_stream():
# # 🔌 Conectar a los servidores MCP registrados
# await mcp_client.connect_all()
print("🧠 Agente iniciado. Escribe 'salir' para terminar.\n")
print("Respuesta en streaming:\n")
respuesta_gen = await agente2.interactuar_en_bucle(
"¿Cuál es mi nombre de usuario en este sistema?",
stream=True
)
while True:
prompt = input("\n📝 Escribe tu pregunta: ")
if prompt.strip().lower() in ("salir", "exit", "quit"):
print("\n👋 Hasta pronto.")
break
async for token in respuesta_gen:
print(token, end="", flush=True)
print("\n💬 Respuesta en streaming:\n")
respuesta_gen = await agente2.interactuar_en_bucle(
prompt=prompt,
stream=True
)
async for token in respuesta_gen:
print(token, end="", flush=True)
await probar_interaccion_stream()
# Ejecutar
if __name__ == "__main__":
asyncio.run(main())