# Constantes ########################################################################## PROMPT = "Busca en Wikipedia información sobre la inflación en Argentina y dame un resumen." # Librerias de Agno ################################################################ from agno.agent import Agent from agno.models.openai import OpenAIChat from agno.tools.yfinance import YFinanceTools from agno.tools.wikipedia import WikipediaTools # Prefect imports ################################################################## from prefect import task, flow from prefect.logging import get_run_logger from prefect.filesystems import LocalFileSystem local_file_system_block = LocalFileSystem.load("localfile") # Cargar variables de entorno ###################################################### import os from dotenv import load_dotenv load_dotenv() openai_api_key = os.getenv("OPENAI_API_KEY") # Imports adicionales ######################################################### import traceback from uuid import uuid4 # 01. Averiguar el prompt que se envía a OpenAI ################################################ @task(name="averiguar_el_prompt_que_seenvia_a_openai", log_prints=True) def averiguar_el_prompt_que_seenvia_a_openai(prompt_de_usuario: str): prefect_logger = get_run_logger() try: prefect_logger.debug("Creando el agente con OpenAI") agente = Agent( model=OpenAIChat(id="gpt-4o-mini", api_key=openai_api_key), name="analista_financiero", description="Agente especializado en análisis financiero y económico", debug_mode=True, tools=[YFinanceTools(), WikipediaTools()], ) prefect_logger.debug("Preparando los mensajes que se enviarán al modelo...") try: # 🚀 Este método interno construye los mensajes igual que antes, # pero no requiere crear un RunOutput ni AgentSession manualmente. run_messages = agente._get_run_messages( run_response=None, input=prompt_de_usuario, session=None, session_state={}, user_id=None, audio=None, images=None, videos=None, files=None, knowledge_filters=None, add_history_to_context=False, dependencies=None, add_dependencies_to_context=False, add_session_state_to_context=False, metadata=None, ) except Exception as e: prefect_logger.error("❌ Error al generar los mensajes con _get_run_messages()") prefect_logger.error(f"Tipo de error: {type(e).__name__}") prefect_logger.error(f"Detalle: {str(e)}") prefect_logger.error(traceback.format_exc()) raise mensajes_enviados = [] try: for msg in run_messages.messages: mensajes_enviados.append({ "role": msg.role, "content": msg.content }) except Exception as e: prefect_logger.error("❌ Error al procesar los mensajes construidos.") prefect_logger.error(f"Tipo de error: {type(e).__name__}") prefect_logger.error(f"Detalle: {str(e)}") prefect_logger.error(traceback.format_exc()) raise prefect_logger.info("✅ Mensajes construidos por el agente:") for m in mensajes_enviados: prefect_logger.info(f"ROLE: {m['role']}\nCONTENT:\n{m['content']}\n{'-'*40}") resultado = agente.run(prompt_de_usuario) prefect_logger.info("✅ Resultado de la ejecución:") prefect_logger.info(f"{resultado}") prefect_logger.debug("Función completada correctamente ✅") return mensajes_enviados except Exception as e: prefect_logger.error("💥 Error inesperado en la tarea averiguar_el_prompt_que_seenvia_a_openai") prefect_logger.error(f"Tipo de error: {type(e).__name__}") prefect_logger.error(f"Mensaje: {str(e)}") prefect_logger.error(traceback.format_exc()) raise # Definir el flujo principal ######################################### @flow(name="Flujo financiero", result_storage=local_file_system_block, log_prints=True) # type: ignore def flujo_principal(): resultado_analisis = averiguar_el_prompt_que_seenvia_a_openai.submit(PROMPT).result() return resultado_analisis # Ejecutar el flujo principal ############################# if __name__ == "__main__": flujo_principal()