#!/usr/bin/env python3 """Simple test script for OpenAI Agent service.""" import asyncio import os from unittest.mock import MagicMock, patch # Mock the OpenAI API key for testing os.environ["OPENAI_API_KEY"] = "test-key-for-testing" from pipecat.frames.frames import TextFrame from pipecat.processors.frame_processor import FrameDirection from pipecat.services.openai_agent import OpenAIAgentService async def test_basic_functionality(): """Test basic OpenAI Agent service functionality.""" print("๐Ÿงช Testing OpenAI Agent Service...") # Create a simple weather tool for testing def get_weather(location: str) -> str: """Get weather for a location.""" return f"The weather in {location} is sunny and 22ยฐC." try: # Create the service print("๐Ÿ“‹ Creating OpenAI Agent service...") service = OpenAIAgentService( name="Test Assistant", instructions="You are a helpful test assistant.", tools=[get_weather], api_key="test-key", streaming=True, ) print(f"โœ… Service created successfully!") print(f" - Agent name: {service.agent.name}") print(f" - Model name: {service.model_name}") print(f" - Streaming enabled: {service._streaming}") # Test basic configuration print("โš™๏ธ Testing configuration updates...") service.update_agent_config( instructions="Updated test instructions", model_config={"model": "gpt-4o", "temperature": 0.5}, ) print(f"โœ… Configuration updated!") print(f" - New instructions: {service.agent.instructions}") print(f" - New model: {service.model_name}") # Test session context print("๐Ÿ’พ Testing session context...") service.update_session_context({"user_id": "test-user", "session": "test-session"}) context = service.get_session_context() print(f"โœ… Session context managed!") print(f" - Context keys: {list(context.keys())}") # Test adding tools print("๐Ÿ”ง Testing tool management...") def get_time() -> str: """Get current time.""" return "The current time is 3:00 PM." await service.add_tool(get_time) print(f"โœ… Tool added successfully!") print("\n๐ŸŽ‰ All basic functionality tests passed!") return True except Exception as e: print(f"โŒ Test failed with error: {e}") return False async def test_frame_processing(): """Test frame processing with mocked responses.""" print("\n๐Ÿ”„ Testing frame processing...") try: # Mock the Runner to avoid actual API calls with patch("pipecat.services.openai_agent.agent_service.Runner") as mock_runner: # Set up mock responses mock_stream_result = MagicMock() # Mock stream events async def mock_stream_events(): # Simulate streaming response yield MagicMock(type="raw_response_event", data=MagicMock(delta="Hello ")) yield MagicMock(type="raw_response_event", data=MagicMock(delta="from ")) yield MagicMock(type="raw_response_event", data=MagicMock(delta="agent!")) # Simulate completed message mock_item = MagicMock() mock_item.type = "message_output_item" mock_item.content = "Hello from agent!" yield MagicMock(type="run_item_stream_event", item=mock_item) mock_stream_result.stream_events.return_value = mock_stream_events() mock_runner.run_streamed.return_value = mock_stream_result # Create service with mocked runner service = OpenAIAgentService( name="Test Assistant", instructions="You are a helpful test assistant.", api_key="test-key", streaming=True, ) # Collect output frames output_frames = [] async def mock_push_frame(frame, direction=FrameDirection.DOWNSTREAM): output_frames.append(frame) print(f" ๐Ÿ“ค Frame: {type(frame).__name__}") if hasattr(frame, "text"): print(f" Text: '{frame.text}'") service.push_frame = mock_push_frame # Process a text frame print("๐Ÿ“ Processing text frame...") text_frame = TextFrame("Hello, how are you?") await service.process_frame(text_frame, FrameDirection.DOWNSTREAM) # Wait for async processing await asyncio.sleep(0.2) print(f"โœ… Frame processing completed!") print(f" - Generated {len(output_frames)} output frames") # Check if we got expected frame types frame_types = [type(frame).__name__ for frame in output_frames] print(f" - Frame types: {frame_types}") return True except Exception as e: print(f"โŒ Frame processing test failed: {e}") return False async def main(): """Run all tests.""" print("๐Ÿš€ Starting OpenAI Agent Service Tests\n") try: # Run basic functionality tests basic_test = await test_basic_functionality() # Run frame processing tests frame_test = await test_frame_processing() # Summary print(f"\n๐Ÿ“Š Test Results:") print(f" - Basic functionality: {'โœ… PASS' if basic_test else 'โŒ FAIL'}") print(f" - Frame processing: {'โœ… PASS' if frame_test else 'โŒ FAIL'}") if basic_test and frame_test: print(f"\n๐ŸŽ‰ All tests passed! The OpenAI Agent service is working correctly.") else: print(f"\nโš ๏ธ Some tests failed. Please check the output above.") except Exception as e: print(f"โŒ Test suite failed with error: {e}") if __name__ == "__main__": asyncio.run(main())