Refactor project structure and implement new features
- Removed unused security module and updated import paths. - Enhanced OpenAI client with streaming capabilities for chat completions. - Added new backend API endpoints for health check (ping). - Established a new FastAPI application with CORS configuration. - Created a new Appshell component for the frontend with navigation links. - Integrated SVG icons and improved styling for the Appshell component. - Implemented memory management for conversation history using PostgreSQL. - Developed abstract classes for AI agents and models, with OpenAI integration. - Added encryption utilities for secure data handling.
This commit is contained in:
+47
-41
@@ -4,50 +4,56 @@ from src.ApiKeys.openai_apikey_mmr import OpenAICredencialRepo
|
||||
from src.ConexionSql.Postgres_conexion import PostgresConexion
|
||||
from entrypoint.init_db import db_credencial
|
||||
from src.ConexionApis.OpenAi_conexion import OpenAICliente
|
||||
from llms.Modelos.Openai_model import ModeloOpenAI
|
||||
from llms.Agente import AgenteAI
|
||||
from src.Llms.Modelos.Openai_model import ModeloOpenAI
|
||||
from src.Llms.Agente import AgenteAI
|
||||
from src.Llms.Memory.postgres_MemoryConv import MemoryConvPostgres
|
||||
|
||||
async def main():
|
||||
# 🔌 Conexión
|
||||
conexion_admin = PostgresConexion(db_credencial)
|
||||
repo = OpenAICredencialRepo(conexion_admin)
|
||||
credencial_openai = repo.get_by_id(1)
|
||||
print(f"✅ Credencial: {credencial_openai.titulo}")
|
||||
|
||||
# 🤖 Modelo
|
||||
cliente = OpenAICliente(credencial_openai)
|
||||
modelo = ModeloOpenAI(
|
||||
cliente=cliente,
|
||||
model="gpt-4o",
|
||||
temperature=1,
|
||||
top_p=1.0
|
||||
|
||||
conexion_admin = PostgresConexion(db_credencial)
|
||||
|
||||
repo = OpenAICredencialRepo(conexion_admin)
|
||||
credencial_openai = repo.get_by_id(1)
|
||||
|
||||
cliente = OpenAICliente(credencial_openai)
|
||||
|
||||
modelo = ModeloOpenAI(
|
||||
cliente=cliente,
|
||||
model="gpt-4o",
|
||||
temperature=1,
|
||||
top_p=1.0
|
||||
)
|
||||
|
||||
|
||||
memoria = MemoryConvPostgres(
|
||||
credencial=db_credencial,
|
||||
nombre_tabla="memoria_conversacion_pruebas",
|
||||
k=10
|
||||
)
|
||||
|
||||
agente2 = AgenteAI(
|
||||
modelo=modelo,
|
||||
nombre="Experto en Astronomía",
|
||||
descripcion="Un experto en astronomía que responde preguntas sobre el universo.",
|
||||
system_prompt="Actúa como un experto en astronomía y astrofísica con experiencia académica y práctica en observación astronómica, física estelar, cosmología, mecánica orbital y análisis de datos astronómicos. Cuando respondas, utiliza lenguaje técnico pero accesible para alguien con conocimientos intermedios en física y matemáticas. Siempre que sea posible, incluye explicaciones detalladas, ejemplos numéricos y referencias a teorías o descubrimientos relevantes (por ejemplo, relatividad general, evolución estelar, espectroscopía, etc.). No simplifiques en exceso. Si la pregunta tiene múltiples dimensiones (como observacional y teórica), aborda todas. ¿Estás listo para empezar?",
|
||||
rol="astronomo",
|
||||
max_iterations=5,
|
||||
memoria=memoria,
|
||||
objetivos=["Responder preguntas sobre astronomía y astrofísica", "Proporcionar explicaciones detalladas y ejemplos numéricos"],
|
||||
)
|
||||
|
||||
async def probar_interaccion_stream():
|
||||
print("Respuesta en streaming:\n")
|
||||
|
||||
# Paso 1: espera la corutina para obtener el generador
|
||||
respuesta_gen = await agente2.interactuar_en_bucle(
|
||||
"¿Hacia qué va orbitando cada astro del espacio? responde jerárquicamente",
|
||||
stream=True
|
||||
)
|
||||
|
||||
# 🧠 Agente
|
||||
agente_con_herramientas = AgenteAI(
|
||||
modelo=modelo,
|
||||
nombre="Agente con herramientas",
|
||||
descripcion="Un agente que puede usar herramientas",
|
||||
system_prompt="Eres un asistente que puede usar herramientas para responder preguntas.",
|
||||
rol="asistente",
|
||||
objetivos=["Asistir al usuario en tareas complejas", "usar herramientas para obtener información adicional"]
|
||||
)
|
||||
# Paso 2: itera sobre el generador
|
||||
async for token in respuesta_gen:
|
||||
print(token, end="", flush=True)
|
||||
|
||||
print("\n🤖 Agente listo. Escribe 'salir' para terminar.")
|
||||
|
||||
# 🔁 Loop de interacción
|
||||
while True:
|
||||
entrada = input("🧑 Tú: ")
|
||||
if entrada.strip().lower() in {"salir", "exit", "quit"}:
|
||||
print("👋 Saliendo del agente...")
|
||||
break
|
||||
|
||||
respuesta = await agente_con_herramientas.interactuar(prompt=entrada)
|
||||
print(f"🤖 Agente: {respuesta}\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
import os
|
||||
if os.name == "nt":
|
||||
asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
|
||||
|
||||
asyncio.run(main())
|
||||
asyncio.run(probar_interaccion_stream())
|
||||
|
||||
Reference in New Issue
Block a user