import argparse import asyncio import json from dotenv import load_dotenv from src.agent_runner import run_agent from src.observability import init_phoenix_tracing from src.workflow_runner import run_news_source_workflow def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( description="Run base chat agent.", ) parser.add_argument( "--message", help="Single message mode. If omitted, starts interactive chat.", ) parser.add_argument( "--workflow-input-url", help="Run workflow mode for a news URL and print run result as JSON.", ) parser.add_argument( "--scenario-id", default="news_source_discovery_v1", help="Scenario id for workflow mode.", ) return parser async def _main() -> None: load_dotenv() init_phoenix_tracing() args = build_parser().parse_args() if args.workflow_input_url: run_result = await run_news_source_workflow( input_url=args.workflow_input_url, scenario_id=args.scenario_id, ) print(json.dumps(run_result, ensure_ascii=False, indent=2)) return if args.message: result = await run_agent(args.message) print(result) return print("Chat mode started. Type 'exit' or 'quit' to stop.") while True: user_message = input("you> ").strip() if not user_message: continue if user_message.lower() in {"exit", "quit"}: print("Bye.") break result = await run_agent(user_message) print(f"agent> {result}") if __name__ == "__main__": asyncio.run(_main())