run_single_test.py•3.75 kB
#!/usr/bin/env python3
"""Run a single test with simple input/output logging"""
import asyncio
import logging
from datetime import datetime
from agents.action_generation import action_agent, input_agent, task_agent, State
from agents.browser_loop import browser_loop
# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(message)s',
    handlers=[
        logging.FileHandler('single_test.log', mode='w'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)
async def main():
    logger.info("="*80)
    logger.info("TEST: GitHub Repository Search")
    logger.info("="*80)
    logger.info("")
    # Create initial state
    state = State(
        action_description="search for repositories on GitHub",
        website_url="https://github.com"
    )
    # STEP 1: Action Agent
    logger.info("STEP 1: ACTION AGENT")
    logger.info("")
    logger.info("INPUT (state):")
    logger.info(f"  action_description: {state.action_description}")
    logger.info(f"  website_url: {state.website_url}")
    logger.info("")
    state = await action_agent(state)
    logger.info("OUTPUT (state):")
    logger.info(f"  action_description: {state.action_description}")
    logger.info(f"  website_url: {state.website_url}")
    logger.info(f"  function_metadata:")
    logger.info(f"    function_name: {state.function_metadata.function_name}")
    logger.info(f"    parameters: {[{p.name: p.type} for p in state.function_metadata.parameters]}")
    logger.info(f"    returns: {[{r.name: r.type} for r in state.function_metadata.returns]}")
    logger.info("")
    logger.info("")
    # STEP 2: Task Agent
    logger.info("STEP 2: TASK AGENT")
    logger.info("")
    logger.info("INPUT (state):")
    logger.info(f"  action_description: {state.action_description}")
    logger.info(f"  website_url: {state.website_url}")
    logger.info(f"  function_metadata.function_name: {state.function_metadata.function_name}")
    logger.info("")
    state = await task_agent(state)
    logger.info("OUTPUT (state):")
    logger.info(f"  action_description: {state.action_description}")
    logger.info(f"  website_url: {state.website_url}")
    logger.info(f"  function_metadata.function_name: {state.function_metadata.function_name}")
    logger.info(f"  task_description: {state.task_description}")
    logger.info("")
    logger.info("")
    # STEP 3: Input Agent
    logger.info("STEP 3: INPUT AGENT")
    logger.info("")
    logger.info("INPUT (state):")
    logger.info(f"  function_metadata.function_name: {state.function_metadata.function_name}")
    logger.info(f"  function_metadata.parameters: {[{p.name: p.type} for p in state.function_metadata.parameters]}")
    logger.info("")
    state = await input_agent(state)
    logger.info("OUTPUT (state):")
    logger.info(f"  action_description: {state.action_description}")
    logger.info(f"  website_url: {state.website_url}")
    logger.info(f"  function_metadata.function_name: {state.function_metadata.function_name}")
    logger.info(f"  task_description: {state.task_description}")
    logger.info(f"  test_inputs: {state.test_inputs}")
    logger.info("")
    logger.info("")
    # STEP 4: Browser Loop Agent
    logger.info("STEP 4: BROWSER LOOP AGENT")
    logger.info("")
    logger.info("Running browser automation with feedback loop...")
    logger.info("")
    state = await browser_loop(state)
    logger.info("")
    logger.info("OUTPUT (state):")
    logger.info(f"  test_results: {state.test_results}")
    logger.info("")
    logger.info("="*80)
    logger.info("")
    logger.info("FULL STATE AFTER BROWSER_LOOP:")
    logger.info(state.model_dump_json(indent=2))
if __name__ == "__main__":
    asyncio.run(main())