@@ -74,6 +74,8 @@ internal class ModelConfigTest {
7474 val modelConfig = ModelConfig .ofVertexModelConfigObject(vertexModelConfigObject)
7575
7676 assertThat(modelConfig.vertexModelConfigObject()).contains(vertexModelConfigObject)
77+ assertThat(modelConfig.azureEntraModelConfigObject()).isEmpty
78+ assertThat(modelConfig.azureApiKeyModelConfigObject()).isEmpty
7779 assertThat(modelConfig.genericModelConfigObject()).isEmpty
7880 }
7981
@@ -146,6 +148,183 @@ internal class ModelConfigTest {
146148 assertThat(roundtrippedModelConfig).isEqualTo(modelConfig)
147149 }
148150
151+ @Test
152+ fun ofAzureEntraModelConfigObject () {
153+ val azureEntraModelConfigObject =
154+ ModelConfig .AzureEntraModelConfigObject .builder()
155+ .auth(ModelConfig .AzureEntraModelConfigObject .Auth .builder().token(" x" ).build())
156+ .modelName(" openai/gpt-5.4-mini" )
157+ .providerOptions(
158+ ModelConfig .AzureEntraModelConfigObject .ProviderOptions .builder()
159+ .azure(
160+ ModelConfig .AzureEntraModelConfigObject .ProviderOptions .Azure .builder()
161+ .apiVersion(" 2024-10-01-preview" )
162+ .baseUrl(" https://example.com" )
163+ .headers(
164+ ModelConfig .AzureEntraModelConfigObject .ProviderOptions .Azure
165+ .Headers
166+ .builder()
167+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
168+ .build()
169+ )
170+ .resourceName(" my-azure-openai-resource" )
171+ .useDeploymentBasedUrls(true )
172+ .build()
173+ )
174+ .build()
175+ )
176+ .baseUrl(" https://api.openai.com/v1" )
177+ .headers(
178+ ModelConfig .AzureEntraModelConfigObject .Headers .builder()
179+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
180+ .build()
181+ )
182+ .build()
183+
184+ val modelConfig = ModelConfig .ofAzureEntraModelConfigObject(azureEntraModelConfigObject)
185+
186+ assertThat(modelConfig.vertexModelConfigObject()).isEmpty
187+ assertThat(modelConfig.azureEntraModelConfigObject()).contains(azureEntraModelConfigObject)
188+ assertThat(modelConfig.azureApiKeyModelConfigObject()).isEmpty
189+ assertThat(modelConfig.genericModelConfigObject()).isEmpty
190+ }
191+
192+ @Test
193+ fun ofAzureEntraModelConfigObjectRoundtrip () {
194+ val jsonMapper = jsonMapper()
195+ val modelConfig =
196+ ModelConfig .ofAzureEntraModelConfigObject(
197+ ModelConfig .AzureEntraModelConfigObject .builder()
198+ .auth(ModelConfig .AzureEntraModelConfigObject .Auth .builder().token(" x" ).build())
199+ .modelName(" openai/gpt-5.4-mini" )
200+ .providerOptions(
201+ ModelConfig .AzureEntraModelConfigObject .ProviderOptions .builder()
202+ .azure(
203+ ModelConfig .AzureEntraModelConfigObject .ProviderOptions .Azure
204+ .builder()
205+ .apiVersion(" 2024-10-01-preview" )
206+ .baseUrl(" https://example.com" )
207+ .headers(
208+ ModelConfig .AzureEntraModelConfigObject .ProviderOptions
209+ .Azure
210+ .Headers
211+ .builder()
212+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
213+ .build()
214+ )
215+ .resourceName(" my-azure-openai-resource" )
216+ .useDeploymentBasedUrls(true )
217+ .build()
218+ )
219+ .build()
220+ )
221+ .baseUrl(" https://api.openai.com/v1" )
222+ .headers(
223+ ModelConfig .AzureEntraModelConfigObject .Headers .builder()
224+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
225+ .build()
226+ )
227+ .build()
228+ )
229+
230+ val roundtrippedModelConfig =
231+ jsonMapper.readValue(
232+ jsonMapper.writeValueAsString(modelConfig),
233+ jacksonTypeRef<ModelConfig >(),
234+ )
235+
236+ assertThat(roundtrippedModelConfig).isEqualTo(modelConfig)
237+ }
238+
239+ @Test
240+ fun ofAzureApiKeyModelConfigObject () {
241+ val azureApiKeyModelConfigObject =
242+ ModelConfig .AzureApiKeyModelConfigObject .builder()
243+ .modelName(" openai/gpt-5.4-mini" )
244+ .providerOptions(
245+ ModelConfig .AzureApiKeyModelConfigObject .ProviderOptions .builder()
246+ .azure(
247+ ModelConfig .AzureApiKeyModelConfigObject .ProviderOptions .Azure .builder()
248+ .apiVersion(" 2024-10-01-preview" )
249+ .baseUrl(" https://example.com" )
250+ .headers(
251+ ModelConfig .AzureApiKeyModelConfigObject .ProviderOptions .Azure
252+ .Headers
253+ .builder()
254+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
255+ .build()
256+ )
257+ .resourceName(" my-azure-openai-resource" )
258+ .useDeploymentBasedUrls(true )
259+ .build()
260+ )
261+ .build()
262+ )
263+ .apiKey(" sk-some-openai-api-key" )
264+ .baseUrl(" https://api.openai.com/v1" )
265+ .headers(
266+ ModelConfig .AzureApiKeyModelConfigObject .Headers .builder()
267+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
268+ .build()
269+ )
270+ .build()
271+
272+ val modelConfig = ModelConfig .ofAzureApiKeyModelConfigObject(azureApiKeyModelConfigObject)
273+
274+ assertThat(modelConfig.vertexModelConfigObject()).isEmpty
275+ assertThat(modelConfig.azureEntraModelConfigObject()).isEmpty
276+ assertThat(modelConfig.azureApiKeyModelConfigObject())
277+ .contains(azureApiKeyModelConfigObject)
278+ assertThat(modelConfig.genericModelConfigObject()).isEmpty
279+ }
280+
281+ @Test
282+ fun ofAzureApiKeyModelConfigObjectRoundtrip () {
283+ val jsonMapper = jsonMapper()
284+ val modelConfig =
285+ ModelConfig .ofAzureApiKeyModelConfigObject(
286+ ModelConfig .AzureApiKeyModelConfigObject .builder()
287+ .modelName(" openai/gpt-5.4-mini" )
288+ .providerOptions(
289+ ModelConfig .AzureApiKeyModelConfigObject .ProviderOptions .builder()
290+ .azure(
291+ ModelConfig .AzureApiKeyModelConfigObject .ProviderOptions .Azure
292+ .builder()
293+ .apiVersion(" 2024-10-01-preview" )
294+ .baseUrl(" https://example.com" )
295+ .headers(
296+ ModelConfig .AzureApiKeyModelConfigObject .ProviderOptions
297+ .Azure
298+ .Headers
299+ .builder()
300+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
301+ .build()
302+ )
303+ .resourceName(" my-azure-openai-resource" )
304+ .useDeploymentBasedUrls(true )
305+ .build()
306+ )
307+ .build()
308+ )
309+ .apiKey(" sk-some-openai-api-key" )
310+ .baseUrl(" https://api.openai.com/v1" )
311+ .headers(
312+ ModelConfig .AzureApiKeyModelConfigObject .Headers .builder()
313+ .putAdditionalProperty(" foo" , JsonValue .from(" string" ))
314+ .build()
315+ )
316+ .build()
317+ )
318+
319+ val roundtrippedModelConfig =
320+ jsonMapper.readValue(
321+ jsonMapper.writeValueAsString(modelConfig),
322+ jacksonTypeRef<ModelConfig >(),
323+ )
324+
325+ assertThat(roundtrippedModelConfig).isEqualTo(modelConfig)
326+ }
327+
149328 @Test
150329 fun ofGenericModelConfigObject () {
151330 val genericModelConfigObject =
@@ -164,6 +343,8 @@ internal class ModelConfigTest {
164343 val modelConfig = ModelConfig .ofGenericModelConfigObject(genericModelConfigObject)
165344
166345 assertThat(modelConfig.vertexModelConfigObject()).isEmpty
346+ assertThat(modelConfig.azureEntraModelConfigObject()).isEmpty
347+ assertThat(modelConfig.azureApiKeyModelConfigObject()).isEmpty
167348 assertThat(modelConfig.genericModelConfigObject()).contains(genericModelConfigObject)
168349 }
169350
0 commit comments