1111
1212load_dotenv ()
1313
14- # Track missing dependencies so we don't call sys.exit at import time.
15- MISSING_OPENAI_API_KEY = False
16- MISSING_PILLOW = False
17-
18- # Check environment
19- openai_key = os .getenv ("OPENAI_API_KEY" )
20- if not openai_key :
21- print ("❌ OPENAI_API_KEY not found in environment" )
22- print (" Set it in .env or export OPENAI_API_KEY=your_key" )
23- MISSING_OPENAI_API_KEY = True
24- else :
25- print ("✅ OPENAI_API_KEY found" )
26- print ()
27-
2814# Import pydantic-ai components (matching agent.py pattern)
2915from pydantic_ai import Agent
3016from pydantic_ai .models .openai import OpenAIChatModel
@@ -41,62 +27,92 @@ class VisionTestResponse(BaseModel):
4127 confidence : int # 0-100 how confident you saw an image
4228
4329
44- # Create minimal 1x1 red pixel PNG using PIL
45- print ("🔄 Creating test image (1x1 red pixel PNG)..." )
46- try :
47- from PIL import Image
48- import io
30+ def main () -> int :
31+ """Run gpt-4o vision smoke test when executed as a script.
32+
33+ This function performs environment checks, creates a test image,
34+ initializes the OpenAI client/agent, and runs basic tests.
35+ It is intentionally not executed at import time so pytest can
36+ safely collect this module without side effects.
37+ """
38+ missing_openai_api_key = False
39+ missing_pillow = False
4940
50- # Create 1x1 red pixel image
51- img = Image .new ("RGB" , (1 , 1 ), color = "red" )
41+ # Check environment
42+ openai_key = os .getenv ("OPENAI_API_KEY" )
43+ if not openai_key :
44+ print ("❌ OPENAI_API_KEY not found in environment" )
45+ print (" Set it in .env or export OPENAI_API_KEY=your_key" )
46+ missing_openai_api_key = True
47+ else :
48+ print ("✅ OPENAI_API_KEY found" )
49+ print ()
5250
53- # Save to bytes
54- img_bytes = io .BytesIO ()
55- img .save (img_bytes , format = "PNG" )
56- PNG_1x1_RED = img_bytes .getvalue ()
51+ # Create minimal 1x1 red pixel PNG using PIL
52+ print ("🔄 Creating test image (1x1 red pixel PNG)..." )
53+ try :
54+ from PIL import Image
55+ import io
5756
58- # Also save to file
59- test_image_path = Path ("test_pixel.png" )
60- test_image_path .write_bytes (PNG_1x1_RED )
57+ # Create 1x1 red pixel image
58+ img = Image .new ("RGB" , (1 , 1 ), color = "red" )
6159
62- print ( f"✅ Test image created: { test_image_path } ( { len ( PNG_1x1_RED ) } bytes)" )
63- except ImportError :
64- print ( "❌ PIL/Pillow not installed. Install with: pip install Pillow " )
65- MISSING_PILLOW = True
60+ # Save to bytes
61+ img_bytes = io . BytesIO ()
62+ img . save ( img_bytes , format = "PNG " )
63+ png_1x1_red = img_bytes . getvalue ()
6664
67- print ()
65+ # Also save to file
66+ test_image_path = Path ("test_pixel.png" )
67+ test_image_path .write_bytes (png_1x1_red )
68+
69+ print (f"✅ Test image created: { test_image_path } ({ len (png_1x1_red )} bytes)" )
70+ except ImportError :
71+ print ("❌ PIL/Pillow not installed. Install with: pip install Pillow" )
72+ missing_pillow = True
73+
74+ print ()
6875
69- if __name__ == "__main__" :
7076 # When run as a script, exit with a non-zero status if required dependencies are missing.
71- if MISSING_OPENAI_API_KEY or MISSING_PILLOW :
72- sys .exit (1 )
73-
74- # Create OpenAI provider and model (matching agent.py)
75- print ("🔄 Creating OpenAI gpt-4o model client..." )
76- provider = OpenAIProvider (api_key = openai_key )
77-
78- model = OpenAIChatModel (
79- model_name = "gpt-4o" ,
80- provider = provider ,
81- )
82-
83- agent = Agent (
84- model = model ,
85- system_prompt = (
86- "You are testing vision capabilities. "
87- "If you receive an image, describe what you see in detail. "
88- "Set image_received=True and confidence=100. "
89- "If no image, set image_received=False and confidence=0."
90- ),
91- )
92-
93- print ("✅ OpenAI gpt-4o agent created" )
94- print ()
77+ if missing_openai_api_key or missing_pillow :
78+ return 1
9579
96- # Test 1: Text-only (baseline)
97- print ("=" * 70 )
98- print ("📝 Test 1: Text-only request (baseline)" )
99- print ("=" * 70 )
80+ # Create OpenAI provider and model (matching agent.py)
81+ print ("🔄 Creating OpenAI gpt-4o model client..." )
82+ provider = OpenAIProvider (api_key = openai_key )
83+
84+ model = OpenAIChatModel (
85+ model_name = "gpt-4o" ,
86+ provider = provider ,
87+ )
88+
89+ agent = Agent (
90+ model = model ,
91+ system_prompt = (
92+ "You are testing vision capabilities. "
93+ "If you receive an image, describe what you see in detail. "
94+ "Set image_received=True and confidence=100. "
95+ "If no image, set image_received=False and confidence=0."
96+ ),
97+ )
98+
99+ print ("✅ OpenAI gpt-4o agent created" )
100+ print ()
101+
102+ # Test 1: Text-only (baseline)
103+ print ("=" * 70 )
104+ print ("📝 Test 1: Text-only request (baseline)" )
105+ print ("=" * 70 )
106+
107+ # NOTE: Additional test logic (not shown here) should also be placed
108+ # inside this function to avoid side effects at import time.
109+
110+ return 0
111+
112+
113+ if __name__ == "__main__" :
114+ # Execute the smoke test only when run as a script, not on import.
115+ sys .exit (main ())
100116try :
101117 result = agent .run_sync (
102118 "What is 2+2? (No image expected)" ,
0 commit comments