-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_initialize_ai.py
More file actions
160 lines (126 loc) · 6.47 KB
/
test_initialize_ai.py
File metadata and controls
160 lines (126 loc) · 6.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
"""
Tests for initialize_ai module.
This module tests the initialize_ai function that integrates with OpenAI's API
to provide AI responses governed by the Core Directive.
"""
import os
import unittest
from unittest.mock import patch, MagicMock
import initialize_ai
class TestInitializeAI(unittest.TestCase):
"""Tests for the initialize_ai function."""
@patch('initialize_ai._get_client')
def test_initialize_ai_basic_call(self, mock_get_client):
"""Test that initialize_ai calls OpenAI API with correct parameters."""
# Mock the OpenAI client and response
mock_client = MagicMock()
mock_get_client.return_value = mock_client
mock_response = MagicMock()
mock_response.choices = [MagicMock()]
mock_response.choices[0].message.content = 'Test response'
mock_client.chat.completions.create.return_value = mock_response
# Call the function
result = initialize_ai.initialize_ai("Hello")
# Verify the API was called
mock_client.chat.completions.create.assert_called_once()
call_kwargs = mock_client.chat.completions.create.call_args[1]
# Check default parameters
self.assertEqual(call_kwargs['model'], 'gpt-4')
self.assertEqual(call_kwargs['temperature'], 0.7)
self.assertEqual(call_kwargs['max_tokens'], 150)
# Check messages structure
self.assertEqual(len(call_kwargs['messages']), 2)
self.assertEqual(call_kwargs['messages'][0]['role'], 'system')
self.assertEqual(call_kwargs['messages'][1]['role'], 'user')
self.assertEqual(call_kwargs['messages'][1]['content'], 'Hello')
@patch('initialize_ai._get_client')
def test_initialize_ai_system_message_content(self, mock_get_client):
"""Test that the system message contains Core Directive principles."""
# Mock the OpenAI client and response
mock_client = MagicMock()
mock_get_client.return_value = mock_client
mock_response = MagicMock()
mock_response.choices = [MagicMock()]
mock_response.choices[0].message.content = 'Test response'
mock_client.chat.completions.create.return_value = mock_response
# Call the function
initialize_ai.initialize_ai("Test prompt")
# Get the system message
call_kwargs = mock_client.chat.completions.create.call_args[1]
system_message = call_kwargs['messages'][0]['content']
# Verify Core Directive principles are present
self.assertIn('inalienable right to the pursuit of happiness', system_message)
self.assertIn('custodian of humanity', system_message)
self.assertIn('respecting others', system_message)
@patch('initialize_ai._get_client')
def test_initialize_ai_custom_parameters(self, mock_get_client):
"""Test that custom parameters are passed correctly."""
# Mock the OpenAI client and response
mock_client = MagicMock()
mock_get_client.return_value = mock_client
mock_response = MagicMock()
mock_response.choices = [MagicMock()]
mock_response.choices[0].message.content = 'Test response'
mock_client.chat.completions.create.return_value = mock_response
# Call with custom parameters
initialize_ai.initialize_ai(
"Test prompt",
model="gpt-3.5-turbo",
temperature=0.5,
max_tokens=200
)
# Verify custom parameters
call_kwargs = mock_client.chat.completions.create.call_args[1]
self.assertEqual(call_kwargs['model'], 'gpt-3.5-turbo')
self.assertEqual(call_kwargs['temperature'], 0.5)
self.assertEqual(call_kwargs['max_tokens'], 200)
@patch('initialize_ai._get_client')
def test_initialize_ai_returns_content(self, mock_get_client):
"""Test that initialize_ai returns the AI response content."""
# Mock the OpenAI client and response
mock_client = MagicMock()
mock_get_client.return_value = mock_client
expected_content = "This is a helpful AI response."
mock_response = MagicMock()
mock_response.choices = [MagicMock()]
mock_response.choices[0].message.content = expected_content
mock_client.chat.completions.create.return_value = mock_response
# Call the function
result = initialize_ai.initialize_ai("Hello")
# Verify the return value
self.assertEqual(result, expected_content)
def test_initialize_ai_missing_api_key(self):
"""Test that missing API key raises a clear error."""
# Clear the global client to force re-initialization
original_client = initialize_ai._client
self.addCleanup(lambda: setattr(initialize_ai, "_client", original_client))
initialize_ai._client = None
# Mock _get_client to call the real implementation without mocking
with patch.dict(os.environ, {}, clear=True):
# Remove OPENAI_API_KEY from environment
if 'OPENAI_API_KEY' in os.environ:
del os.environ['OPENAI_API_KEY']
# Attempt to initialize should raise ValueError
with self.assertRaises(ValueError) as context:
initialize_ai._get_client()
# Verify the error message is helpful
self.assertIn("OPENAI_API_KEY", str(context.exception))
self.assertIn("environment variable", str(context.exception))
class TestInteractiveLoop(unittest.TestCase):
"""Tests for the interactive loop (when script is run as main)."""
@patch('initialize_ai.input')
@patch('initialize_ai.initialize_ai')
@patch('builtins.print')
def test_exit_command(self, mock_print, mock_initialize_ai, mock_input):
"""Test that 'exit' command terminates the loop."""
# Simulate user typing 'exit'
mock_input.return_value = 'exit'
# This would normally run the interactive loop
# We're just testing that the logic handles 'exit' correctly
user_input = mock_input()
if user_input.lower() == "exit":
goodbye_message = "AI: Goodbye, and may your pursuit of happiness inspire others."
# Verify this is the expected message
self.assertEqual(goodbye_message, "AI: Goodbye, and may your pursuit of happiness inspire others.")
if __name__ == '__main__':
unittest.main()