11
11
import contextlib
12
12
import functools
13
13
import openai
14
- from devtools_testutils .sanitizers import add_header_regex_sanitizer , add_oauth_response_sanitizer
15
14
from azure .identity import DefaultAzureCredential , get_bearer_token_provider
16
15
from azure .identity .aio import (
17
16
DefaultAzureCredential as AsyncDefaultAzureCredential ,
20
19
21
20
22
21
# for pytest.parametrize
22
+ GA = "2024-02-01"
23
+ PREVIEW = "2024-03-01-preview"
24
+ LATEST = PREVIEW
25
+
23
26
AZURE = "azure"
24
27
OPENAI = "openai"
25
28
AZURE_AD = "azuread"
26
- ALL = [AZURE , AZURE_AD , OPENAI ]
27
29
WHISPER_AZURE = "whisper_azure"
28
30
WHISPER_AZURE_AD = "whisper_azuread"
29
- WHISPER_ALL = [WHISPER_AZURE , WHISPER_AZURE_AD , OPENAI ]
30
31
TTS_OPENAI = "tts_openai"
31
32
TTS_AZURE = "tts_azure"
32
33
TTS_AZURE_AD = "tts_azuread"
33
- TTS_ALL = [TTS_AZURE , TTS_AZURE_AD , TTS_OPENAI ]
34
34
DALLE_AZURE = "dalle_azure"
35
35
DALLE_AZURE_AD = "dalle_azuread"
36
- DALLE_ALL = [DALLE_AZURE , DALLE_AZURE_AD , OPENAI ]
37
36
GPT_4_AZURE = "gpt_4_azure"
38
37
GPT_4_AZURE_AD = "gpt_4_azuread"
39
38
GPT_4_OPENAI = "gpt_4_openai"
40
- GPT_4_ALL = [GPT_4_AZURE , GPT_4_AZURE_AD , GPT_4_OPENAI ]
41
39
ASST_AZURE = "asst_azure"
42
40
ASST_AZUREAD = "asst_azuread"
43
- ASST_ALL = [ASST_AZURE , ASST_AZUREAD , GPT_4_OPENAI ]
44
41
45
42
# Environment variable keys
46
43
ENV_AZURE_OPENAI_ENDPOINT = "AZ_OPENAI_ENDPOINT"
57
54
ENV_AZURE_OPENAI_SEARCH_KEY = "AZURE_OPENAI_SEARCH_KEY"
58
55
ENV_AZURE_OPENAI_SEARCH_INDEX = "AZURE_OPENAI_SEARCH_INDEX"
59
56
60
- ENV_AZURE_OPENAI_API_VERSION = "2024-02-15-preview"
61
57
ENV_AZURE_OPENAI_COMPLETIONS_NAME = "gpt-35-turbo-instruct"
62
- ENV_AZURE_OPENAI_CHAT_COMPLETIONS_NAME = "gpt-35-turbo-16k "
58
+ ENV_AZURE_OPENAI_CHAT_COMPLETIONS_NAME = "gpt-35-turbo"
63
59
ENV_AZURE_OPENAI_EMBEDDINGS_NAME = "text-embedding-ada-002"
64
60
ENV_AZURE_OPENAI_AUDIO_NAME = "whisper"
65
61
ENV_AZURE_OPENAI_DALLE_NAME = "dall-e-3"
75
71
ENV_OPENAI_CHAT_COMPLETIONS_GPT4_MODEL = "gpt-4-1106-preview"
76
72
ENV_OPENAI_TTS_MODEL = "tts-1"
77
73
78
- # Fake values
79
- TEST_ENDPOINT = "https://test-resource.openai.azure.com/"
80
- TEST_KEY = "0000000000000000"
81
- TEST_ID = "00000000-0000-0000-0000-000000000000"
82
-
83
-
84
- @pytest .fixture (scope = "session" , autouse = True )
85
- def add_sanitizers (test_proxy , environment_variables ):
86
- sanitization_mapping = {
87
- ENV_AZURE_OPENAI_ENDPOINT : TEST_ENDPOINT ,
88
- ENV_AZURE_OPENAI_KEY : TEST_KEY ,
89
- ENV_AZURE_OPENAI_NORTHCENTRALUS_ENDPOINT : TEST_ENDPOINT ,
90
- ENV_AZURE_OPENAI_NORTHCENTRALUS_KEY : TEST_KEY ,
91
- ENV_AZURE_OPENAI_SWEDENCENTRAL_ENDPOINT : TEST_ENDPOINT ,
92
- ENV_AZURE_OPENAI_SWEDENCENTRAL_KEY : TEST_KEY ,
93
- ENV_SUBSCRIPTION_ID : TEST_ID ,
94
- ENV_TENANT_ID : TEST_ID ,
95
- ENV_CLIENT_ID : TEST_ID ,
96
- ENV_CLIENT_SECRET : TEST_ID ,
97
- ENV_OPENAI_KEY : TEST_KEY ,
98
- ENV_AZURE_OPENAI_SEARCH_ENDPOINT : TEST_ENDPOINT ,
99
- ENV_AZURE_OPENAI_SEARCH_KEY : TEST_KEY ,
100
- }
101
- environment_variables .sanitize_batch (sanitization_mapping )
102
- add_oauth_response_sanitizer ()
103
- add_header_regex_sanitizer (key = "Set-Cookie" , value = "[set-cookie;]" )
104
-
105
-
106
- @pytest .fixture (scope = "session" )
107
- def azure_openai_creds ():
108
- yield {
109
- "completions_name" : ENV_AZURE_OPENAI_COMPLETIONS_NAME ,
110
- "chat_completions_name" : ENV_AZURE_OPENAI_CHAT_COMPLETIONS_NAME ,
111
- "embeddings_name" : ENV_AZURE_OPENAI_EMBEDDINGS_NAME ,
112
- "completions_model" : ENV_OPENAI_COMPLETIONS_MODEL ,
113
- "chat_completions_model" : ENV_OPENAI_CHAT_COMPLETIONS_MODEL ,
114
- "embeddings_model" : ENV_OPENAI_EMBEDDINGS_MODEL ,
115
- "search_endpoint" : os .getenv (ENV_AZURE_OPENAI_SEARCH_ENDPOINT ),
116
- "search_key" : os .getenv (ENV_AZURE_OPENAI_SEARCH_KEY ),
117
- "search_index" : os .getenv (ENV_AZURE_OPENAI_SEARCH_INDEX ),
118
- "audio_name" : ENV_AZURE_OPENAI_AUDIO_NAME ,
119
- "audio_model" : ENV_OPENAI_AUDIO_MODEL ,
120
- "dalle_name" : ENV_AZURE_OPENAI_DALLE_NAME ,
121
- "dalle_model" : ENV_OPENAI_DALLE_MODEL ,
122
- "chat_completion_gpt4_name" : ENV_AZURE_OPENAI_CHAT_COMPLETIONS_GPT4_NAME ,
123
- "chat_completion_gpt4_model" : ENV_OPENAI_CHAT_COMPLETIONS_GPT4_MODEL ,
124
- }
125
-
126
74
127
75
@pytest .fixture
128
- def client (api_type ):
76
+ def client (api_type , api_version ):
129
77
if api_type == "azure" :
130
78
client = openai .AzureOpenAI (
131
79
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_ENDPOINT ),
132
80
api_key = os .getenv (ENV_AZURE_OPENAI_KEY ),
133
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
81
+ api_version = api_version ,
134
82
)
135
83
elif api_type == "azuread" :
136
84
client = openai .AzureOpenAI (
137
85
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_ENDPOINT ),
138
86
azure_ad_token_provider = get_bearer_token_provider (DefaultAzureCredential (), "https://cognitiveservices.azure.com/.default" ),
139
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
87
+ api_version = api_version ,
140
88
)
141
89
elif api_type in ["openai" , "gpt_4_openai" , "tts_openai" ]:
142
90
client = openai .OpenAI (
@@ -146,42 +94,42 @@ def client(api_type):
146
94
client = openai .AzureOpenAI (
147
95
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_NORTHCENTRALUS_ENDPOINT ),
148
96
api_key = os .getenv (ENV_AZURE_OPENAI_NORTHCENTRALUS_KEY ),
149
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
97
+ api_version = api_version ,
150
98
)
151
99
elif api_type in ["whisper_azuread" , "tts_azuread" ]:
152
100
client = openai .AzureOpenAI (
153
101
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_NORTHCENTRALUS_ENDPOINT ),
154
102
azure_ad_token_provider = get_bearer_token_provider (DefaultAzureCredential (), "https://cognitiveservices.azure.com/.default" ),
155
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
103
+ api_version = api_version ,
156
104
)
157
105
elif api_type in ["dalle_azure" , "gpt_4_azure" , "asst_azure" ]:
158
106
client = openai .AzureOpenAI (
159
107
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_SWEDENCENTRAL_ENDPOINT ),
160
108
api_key = os .getenv (ENV_AZURE_OPENAI_SWEDENCENTRAL_KEY ),
161
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
109
+ api_version = api_version ,
162
110
)
163
111
elif api_type in ["dalle_azuread" , "gpt_4_azuread" , "asst_azuread" ]:
164
112
client = openai .AzureOpenAI (
165
113
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_SWEDENCENTRAL_ENDPOINT ),
166
114
azure_ad_token_provider = get_bearer_token_provider (DefaultAzureCredential (), "https://cognitiveservices.azure.com/.default" ),
167
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
115
+ api_version = api_version ,
168
116
)
169
117
return client
170
118
171
119
172
120
@pytest .fixture
173
- def client_async (api_type ):
121
+ def client_async (api_type , api_version ):
174
122
if api_type == "azure" :
175
123
client = openai .AsyncAzureOpenAI (
176
124
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_ENDPOINT ),
177
125
api_key = os .getenv (ENV_AZURE_OPENAI_KEY ),
178
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
126
+ api_version = api_version ,
179
127
)
180
128
elif api_type == "azuread" :
181
129
client = openai .AsyncAzureOpenAI (
182
130
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_ENDPOINT ),
183
131
azure_ad_token_provider = get_bearer_token_provider_async (AsyncDefaultAzureCredential (), "https://cognitiveservices.azure.com/.default" ),
184
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
132
+ api_version = api_version ,
185
133
)
186
134
elif api_type in ["openai" , "gpt_4_openai" , "tts_openai" ]:
187
135
client = openai .AsyncOpenAI (
@@ -191,25 +139,25 @@ def client_async(api_type):
191
139
client = openai .AsyncAzureOpenAI (
192
140
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_NORTHCENTRALUS_ENDPOINT ),
193
141
api_key = os .getenv (ENV_AZURE_OPENAI_NORTHCENTRALUS_KEY ),
194
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
142
+ api_version = api_version ,
195
143
)
196
144
elif api_type in ["whisper_azuread" , "tts_azuread" ]:
197
145
client = openai .AsyncAzureOpenAI (
198
146
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_NORTHCENTRALUS_ENDPOINT ),
199
147
azure_ad_token_provider = get_bearer_token_provider_async (AsyncDefaultAzureCredential (), "https://cognitiveservices.azure.com/.default" ),
200
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
148
+ api_version = api_version ,
201
149
)
202
150
elif api_type in ["dalle_azure" , "gpt_4_azure" , "asst_azure" ]:
203
151
client = openai .AsyncAzureOpenAI (
204
152
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_SWEDENCENTRAL_ENDPOINT ),
205
153
api_key = os .getenv (ENV_AZURE_OPENAI_SWEDENCENTRAL_KEY ),
206
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
154
+ api_version = api_version ,
207
155
)
208
156
elif api_type in ["dalle_azuread" , "gpt_4_azuread" , "asst_azuread" ]:
209
157
client = openai .AsyncAzureOpenAI (
210
158
azure_endpoint = os .getenv (ENV_AZURE_OPENAI_SWEDENCENTRAL_ENDPOINT ),
211
159
azure_ad_token_provider = get_bearer_token_provider_async (AsyncDefaultAzureCredential (), "https://cognitiveservices.azure.com/.default" ),
212
- api_version = ENV_AZURE_OPENAI_API_VERSION ,
160
+ api_version = api_version ,
213
161
)
214
162
return client
215
163
@@ -264,11 +212,11 @@ def configure_async(f):
264
212
@functools .wraps (f )
265
213
async def wrapper (* args , ** kwargs ):
266
214
api_type = kwargs .pop ("api_type" )
215
+ api_version = kwargs .pop ("api_version" )
267
216
client_async = kwargs .pop ("client_async" )
268
- azure_openai_creds = kwargs .pop ("azure_openai_creds" )
269
217
kwargs = build_kwargs (args , api_type )
270
218
try :
271
- return await f (* args , client_async = client_async , azure_openai_creds = azure_openai_creds , api_type = api_type , ** kwargs )
219
+ return await f (* args , client_async = client_async , api_type = api_type , api_version = api_version , ** kwargs )
272
220
except openai .RateLimitError :
273
221
pytest .skip (f"{ str (f ).split (' ' )[1 ]} [{ api_type } ]: Skipping - Rate limit reached." )
274
222
@@ -279,11 +227,11 @@ def configure(f):
279
227
@functools .wraps (f )
280
228
def wrapper (* args , ** kwargs ):
281
229
api_type = kwargs .pop ("api_type" )
230
+ api_version = kwargs .pop ("api_version" )
282
231
client = kwargs .pop ("client" )
283
- azure_openai_creds = kwargs .pop ("azure_openai_creds" )
284
232
kwargs = build_kwargs (args , api_type )
285
233
try :
286
- return f (* args , client = client , azure_openai_creds = azure_openai_creds , api_type = api_type , ** kwargs )
234
+ return f (* args , client = client , api_type = api_type , api_version = api_version , ** kwargs )
287
235
except openai .RateLimitError :
288
236
pytest .skip (f"{ str (f ).split (' ' )[1 ]} [{ api_type } ]: Skipping - Rate limit reached." )
289
237
0 commit comments