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())