Skip to content

Commit 43a802c

Browse files
authored
.Net: Add Optional version parameter for Azure OpenAI API's. (#9155)
### Motivation and Context Adding Optional `apiVersion` parameter support to all Azure OpenAI Services and Extensions in a non-breaking fashion. - Fixes #9144
1 parent 7c44a79 commit 43a802c

16 files changed

+723
-70
lines changed

dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIKernelBuilderExtensionsTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public sealed class AzureOpenAIKernelBuilderExtensionsTests
2828
[InlineData(InitializationType.TokenCredential)]
2929
[InlineData(InitializationType.ClientInline)]
3030
[InlineData(InitializationType.ClientInServiceProvider)]
31+
[InlineData(InitializationType.ApiVersion)]
3132
public void KernelBuilderAddAzureOpenAIChatCompletionAddsValidService(InitializationType type)
3233
{
3334
// Arrange
@@ -44,6 +45,7 @@ public void KernelBuilderAddAzureOpenAIChatCompletionAddsValidService(Initializa
4445
InitializationType.TokenCredential => builder.AddAzureOpenAIChatCompletion("deployment-name", "https://endpoint", credentials),
4546
InitializationType.ClientInline => builder.AddAzureOpenAIChatCompletion("deployment-name", client),
4647
InitializationType.ClientInServiceProvider => builder.AddAzureOpenAIChatCompletion("deployment-name"),
48+
InitializationType.ApiVersion => builder.AddAzureOpenAIChatCompletion("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
4749
_ => builder
4850
};
4951

@@ -64,6 +66,7 @@ public void KernelBuilderAddAzureOpenAIChatCompletionAddsValidService(Initializa
6466
[InlineData(InitializationType.TokenCredential)]
6567
[InlineData(InitializationType.ClientInline)]
6668
[InlineData(InitializationType.ClientInServiceProvider)]
69+
[InlineData(InitializationType.ApiVersion)]
6770
public void KernelBuilderAddAzureOpenAITextEmbeddingGenerationAddsValidService(InitializationType type)
6871
{
6972
// Arrange
@@ -80,6 +83,7 @@ public void KernelBuilderAddAzureOpenAITextEmbeddingGenerationAddsValidService(I
8083
InitializationType.TokenCredential => builder.AddAzureOpenAITextEmbeddingGeneration("deployment-name", "https://endpoint", credentials),
8184
InitializationType.ClientInline => builder.AddAzureOpenAITextEmbeddingGeneration("deployment-name", client),
8285
InitializationType.ClientInServiceProvider => builder.AddAzureOpenAITextEmbeddingGeneration("deployment-name"),
86+
InitializationType.ApiVersion => builder.AddAzureOpenAITextEmbeddingGeneration("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
8387
_ => builder
8488
};
8589

@@ -101,7 +105,7 @@ public void KernelBuilderAddAzureOpenAITextToAudioAddsValidService()
101105
var sut = Kernel.CreateBuilder();
102106

103107
// Act
104-
var service = sut.AddAzureOpenAITextToAudio("deployment-name", "https://endpoint", "api-key")
108+
var service = sut.AddAzureOpenAITextToAudio("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview")
105109
.Build()
106110
.GetRequiredService<ITextToAudioService>();
107111

@@ -118,6 +122,7 @@ public void KernelBuilderAddAzureOpenAITextToAudioAddsValidService()
118122
[InlineData(InitializationType.TokenCredential)]
119123
[InlineData(InitializationType.ClientInline)]
120124
[InlineData(InitializationType.ClientInServiceProvider)]
125+
[InlineData(InitializationType.ApiVersion)]
121126
public void KernelBuilderExtensionsAddAzureOpenAITextToImageService(InitializationType type)
122127
{
123128
// Arrange
@@ -134,6 +139,7 @@ public void KernelBuilderExtensionsAddAzureOpenAITextToImageService(Initializati
134139
InitializationType.TokenCredential => builder.AddAzureOpenAITextToImage("deployment-name", "https://endpoint", credentials),
135140
InitializationType.ClientInline => builder.AddAzureOpenAITextToImage("deployment-name", client),
136141
InitializationType.ClientInServiceProvider => builder.AddAzureOpenAITextToImage("deployment-name"),
142+
InitializationType.ApiVersion => builder.AddAzureOpenAITextToImage("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
137143
_ => builder
138144
};
139145

@@ -152,6 +158,7 @@ public void KernelBuilderExtensionsAddAzureOpenAITextToImageService(Initializati
152158
[InlineData(InitializationType.TokenCredential)]
153159
[InlineData(InitializationType.ClientInline)]
154160
[InlineData(InitializationType.ClientInServiceProvider)]
161+
[InlineData(InitializationType.ApiVersion)]
155162
public void KernelBuilderAddAzureOpenAIAudioToTextAddsValidService(InitializationType type)
156163
{
157164
// Arrange
@@ -168,6 +175,7 @@ public void KernelBuilderAddAzureOpenAIAudioToTextAddsValidService(Initializatio
168175
InitializationType.TokenCredential => builder.AddAzureOpenAIAudioToText("deployment-name", "https://endpoint", credentials),
169176
InitializationType.ClientInline => builder.AddAzureOpenAIAudioToText("deployment-name", client),
170177
InitializationType.ClientInServiceProvider => builder.AddAzureOpenAIAudioToText("deployment-name"),
178+
InitializationType.ApiVersion => builder.AddAzureOpenAIAudioToText("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
171179
_ => builder
172180
};
173181

@@ -186,5 +194,6 @@ public enum InitializationType
186194
ClientInline,
187195
ClientInServiceProvider,
188196
ClientEndpoint,
197+
ApiVersion
189198
}
190199
}

dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Extensions/AzureOpenAIServiceCollectionExtensionsTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public sealed class AzureOpenAIServiceCollectionExtensionsTests
2828
[InlineData(InitializationType.TokenCredential)]
2929
[InlineData(InitializationType.ClientInline)]
3030
[InlineData(InitializationType.ClientInServiceProvider)]
31+
[InlineData(InitializationType.ApiVersion)]
3132
public void ServiceCollectionAddAzureOpenAIChatCompletionAddsValidService(InitializationType type)
3233
{
3334
// Arrange
@@ -44,6 +45,7 @@ public void ServiceCollectionAddAzureOpenAIChatCompletionAddsValidService(Initia
4445
InitializationType.TokenCredential => builder.Services.AddAzureOpenAIChatCompletion("deployment-name", "https://endpoint", credentials),
4546
InitializationType.ClientInline => builder.Services.AddAzureOpenAIChatCompletion("deployment-name", client),
4647
InitializationType.ClientInServiceProvider => builder.Services.AddAzureOpenAIChatCompletion("deployment-name"),
48+
InitializationType.ApiVersion => builder.Services.AddAzureOpenAIChatCompletion("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
4749
_ => builder.Services
4850
};
4951

@@ -64,6 +66,7 @@ public void ServiceCollectionAddAzureOpenAIChatCompletionAddsValidService(Initia
6466
[InlineData(InitializationType.TokenCredential)]
6567
[InlineData(InitializationType.ClientInline)]
6668
[InlineData(InitializationType.ClientInServiceProvider)]
69+
[InlineData(InitializationType.ApiVersion)]
6770
public void ServiceCollectionAddAzureOpenAITextEmbeddingGenerationAddsValidService(InitializationType type)
6871
{
6972
// Arrange
@@ -80,6 +83,7 @@ public void ServiceCollectionAddAzureOpenAITextEmbeddingGenerationAddsValidServi
8083
InitializationType.TokenCredential => builder.Services.AddAzureOpenAITextEmbeddingGeneration("deployment-name", "https://endpoint", credentials),
8184
InitializationType.ClientInline => builder.Services.AddAzureOpenAITextEmbeddingGeneration("deployment-name", client),
8285
InitializationType.ClientInServiceProvider => builder.Services.AddAzureOpenAITextEmbeddingGeneration("deployment-name"),
86+
InitializationType.ApiVersion => builder.Services.AddAzureOpenAITextEmbeddingGeneration("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
8387
_ => builder.Services
8488
};
8589

@@ -101,7 +105,7 @@ public void ServiceCollectionAddAzureOpenAITextToAudioAddsValidService()
101105
var sut = new ServiceCollection();
102106

103107
// Act
104-
var service = sut.AddAzureOpenAITextToAudio("deployment-name", "https://endpoint", "api-key")
108+
var service = sut.AddAzureOpenAITextToAudio("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview")
105109
.BuildServiceProvider()
106110
.GetRequiredService<ITextToAudioService>();
107111

@@ -118,6 +122,7 @@ public void ServiceCollectionAddAzureOpenAITextToAudioAddsValidService()
118122
[InlineData(InitializationType.TokenCredential)]
119123
[InlineData(InitializationType.ClientInline)]
120124
[InlineData(InitializationType.ClientInServiceProvider)]
125+
[InlineData(InitializationType.ApiVersion)]
121126
public void ServiceCollectionExtensionsAddAzureOpenAITextToImageService(InitializationType type)
122127
{
123128
// Arrange
@@ -134,6 +139,7 @@ public void ServiceCollectionExtensionsAddAzureOpenAITextToImageService(Initiali
134139
InitializationType.TokenCredential => builder.Services.AddAzureOpenAITextToImage("deployment-name", "https://endpoint", credentials),
135140
InitializationType.ClientInline => builder.Services.AddAzureOpenAITextToImage("deployment-name", client),
136141
InitializationType.ClientInServiceProvider => builder.Services.AddAzureOpenAITextToImage("deployment-name"),
142+
InitializationType.ApiVersion => builder.Services.AddAzureOpenAITextToImage("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
137143
_ => builder.Services
138144
};
139145

@@ -152,6 +158,7 @@ public void ServiceCollectionExtensionsAddAzureOpenAITextToImageService(Initiali
152158
[InlineData(InitializationType.TokenCredential)]
153159
[InlineData(InitializationType.ClientInline)]
154160
[InlineData(InitializationType.ClientInServiceProvider)]
161+
[InlineData(InitializationType.ApiVersion)]
155162
public void ServiceCollectionAddAzureOpenAIAudioToTextAddsValidService(InitializationType type)
156163
{
157164
// Arrange
@@ -168,6 +175,7 @@ public void ServiceCollectionAddAzureOpenAIAudioToTextAddsValidService(Initializ
168175
InitializationType.TokenCredential => builder.Services.AddAzureOpenAIAudioToText("deployment-name", "https://endpoint", credentials),
169176
InitializationType.ClientInline => builder.Services.AddAzureOpenAIAudioToText("deployment-name", client),
170177
InitializationType.ClientInServiceProvider => builder.Services.AddAzureOpenAIAudioToText("deployment-name"),
178+
InitializationType.ApiVersion => builder.Services.AddAzureOpenAIAudioToText("deployment-name", "https://endpoint", "api-key", apiVersion: "2024-10-01-preview"),
171179
_ => builder.Services
172180
};
173181

@@ -186,5 +194,6 @@ public enum InitializationType
186194
ClientInline,
187195
ClientInServiceProvider,
188196
ClientEndpoint,
197+
ApiVersion
189198
}
190199
}

dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Services/AzureOpenAIAudioToTextServiceTests.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,47 @@ public async Task GetTextContentByDefaultWorksCorrectlyAsync()
156156
Assert.Equal("Test audio-to-text response", result[0].Text);
157157
}
158158

159+
[Theory]
160+
[MemberData(nameof(Versions))]
161+
public async Task ItTargetsApiVersionAsExpected(string? apiVersion, string? expectedVersion = null)
162+
{
163+
// Arrange
164+
var service = new AzureOpenAIAudioToTextService("deployment", "https://endpoint", "api-key", httpClient: this._httpClient, apiVersion: apiVersion);
165+
this._messageHandlerStub.ResponseToReturn = new HttpResponseMessage(System.Net.HttpStatusCode.OK)
166+
{
167+
Content = new StringContent("Test audio-to-text response")
168+
};
169+
170+
// Act
171+
var settings = new OpenAIAudioToTextExecutionSettings("file.mp3");
172+
var result = await service.GetTextContentsAsync(new AudioContent(new BinaryData("data"), mimeType: null), settings);
173+
174+
// Assert
175+
Assert.NotNull(this._messageHandlerStub.RequestContent);
176+
Assert.NotNull(result);
177+
178+
Assert.Contains($"api-version={expectedVersion}", this._messageHandlerStub.RequestUri!.ToString());
179+
}
180+
181+
public static TheoryData<string?, string?> Versions => new()
182+
{
183+
{ null, "2024-08-01-preview" },
184+
{ "V2024_10_01_preview", "2024-10-01-preview" },
185+
{ "V2024_10_01_PREVIEW", "2024-10-01-preview" },
186+
{ "2024_10_01_Preview", "2024-10-01-preview" },
187+
{ "2024-10-01-preview", "2024-10-01-preview" },
188+
{ "V2024_08_01_preview", "2024-08-01-preview" },
189+
{ "V2024_08_01_PREVIEW", "2024-08-01-preview" },
190+
{ "2024_08_01_Preview", "2024-08-01-preview" },
191+
{ "2024-08-01-preview", "2024-08-01-preview" },
192+
{ "V2024_06_01", "2024-06-01" },
193+
{ "2024_06_01", "2024-06-01" },
194+
{ "2024-06-01", "2024-06-01" },
195+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_10_01_Preview.ToString(), null },
196+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_08_01_Preview.ToString(), null },
197+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_06_01.ToString(), null }
198+
};
199+
159200
public void Dispose()
160201
{
161202
this._httpClient.Dispose();

dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Services/AzureOpenAIChatCompletionServiceTests.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,6 +1418,49 @@ public async Task ItSendsEmptyStringWhenAssistantMessageContentIsNull()
14181418
Assert.Equal(string.Empty, assistantMessageContent);
14191419
}
14201420

1421+
[Theory]
1422+
[MemberData(nameof(Versions))]
1423+
public async Task ItTargetsApiVersionAsExpected(string? apiVersion, string? expectedVersion = null)
1424+
{
1425+
// Arrange
1426+
var sut = new AzureOpenAIChatCompletionService("deployment", "https://endpoint", "api-key", httpClient: this._httpClient, apiVersion: apiVersion);
1427+
using var responseMessage = new HttpResponseMessage(HttpStatusCode.OK)
1428+
{
1429+
Content = new StringContent(AzureOpenAITestHelper.GetTestResponse("chat_completion_test_response.json"))
1430+
};
1431+
this._messageHandlerStub.ResponsesToReturn.Add(responseMessage);
1432+
var chatHistory = new ChatHistory();
1433+
chatHistory.AddUserMessage("Fake prompt");
1434+
1435+
// Act
1436+
1437+
await sut.GetChatMessageContentsAsync(chatHistory);
1438+
1439+
// Assert
1440+
Assert.NotNull(this._messageHandlerStub.RequestContents[0]);
1441+
1442+
Assert.Contains($"api-version={expectedVersion}", this._messageHandlerStub.RequestUris[0]!.ToString());
1443+
}
1444+
1445+
public static TheoryData<string?, string?> Versions => new()
1446+
{
1447+
{ null, "2024-08-01-preview" },
1448+
{ "V2024_10_01_preview", "2024-10-01-preview" },
1449+
{ "V2024_10_01_PREVIEW", "2024-10-01-preview" },
1450+
{ "2024_10_01_Preview", "2024-10-01-preview" },
1451+
{ "2024-10-01-preview", "2024-10-01-preview" },
1452+
{ "V2024_08_01_preview", "2024-08-01-preview" },
1453+
{ "V2024_08_01_PREVIEW", "2024-08-01-preview" },
1454+
{ "2024_08_01_Preview", "2024-08-01-preview" },
1455+
{ "2024-08-01-preview", "2024-08-01-preview" },
1456+
{ "V2024_06_01", "2024-06-01" },
1457+
{ "2024_06_01", "2024-06-01" },
1458+
{ "2024-06-01", "2024-06-01" },
1459+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_10_01_Preview.ToString(), null },
1460+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_08_01_Preview.ToString(), null },
1461+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_06_01.ToString(), null }
1462+
};
1463+
14211464
public void Dispose()
14221465
{
14231466
this._httpClient.Dispose();

dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Services/AzureOpenAITextEmbeddingGenerationServiceTests.cs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@ namespace SemanticKernel.Connectors.AzureOpenAI.UnitTests.Services;
1919
/// <summary>
2020
/// Unit tests for <see cref="AzureOpenAITextEmbeddingGenerationService"/> class.
2121
/// </summary>
22-
public class AzureOpenAITextEmbeddingGenerationServiceTests
22+
public sealed class AzureOpenAITextEmbeddingGenerationServiceTests : IDisposable
2323
{
24+
private readonly HttpMessageHandlerStub _messageHandlerStub;
25+
private readonly HttpClient _httpClient;
2426
private readonly Mock<ILoggerFactory> _mockLoggerFactory;
2527

2628
public AzureOpenAITextEmbeddingGenerationServiceTests()
2729
{
30+
this._messageHandlerStub = new HttpMessageHandlerStub();
31+
this._httpClient = new HttpClient(this._messageHandlerStub, false);
2832
this._mockLoggerFactory = new Mock<ILoggerFactory>();
2933
}
3034

@@ -100,4 +104,49 @@ public async Task ItThrowsIfNumberOfResultsDiffersFromInputsAsync()
100104
// Act & Assert
101105
await Assert.ThrowsAsync<KernelException>(async () => await sut.GenerateEmbeddingsAsync(["test"], null, CancellationToken.None));
102106
}
107+
108+
[Theory]
109+
[MemberData(nameof(Versions))]
110+
public async Task ItTargetsApiVersionAsExpected(string? apiVersion, string? expectedVersion = null)
111+
{
112+
// Arrange
113+
var sut = new AzureOpenAITextEmbeddingGenerationService("deployment-name", "https://endpoint", "api-key", httpClient: this._httpClient, apiVersion: apiVersion);
114+
this._messageHandlerStub.ResponseToReturn = new HttpResponseMessage(HttpStatusCode.OK)
115+
{
116+
Content = new StringContent(File.ReadAllText("./TestData/text-embeddings-response.txt"))
117+
};
118+
119+
// Act
120+
await sut.GenerateEmbeddingsAsync(["test"], null, CancellationToken.None);
121+
122+
// Assert
123+
Assert.NotNull(this._messageHandlerStub.RequestContent);
124+
125+
Assert.Contains($"api-version={expectedVersion}", this._messageHandlerStub.RequestUri!.ToString());
126+
}
127+
128+
public static TheoryData<string?, string?> Versions => new()
129+
{
130+
{ null, "2024-08-01-preview" },
131+
{ "V2024_10_01_preview", "2024-10-01-preview" },
132+
{ "V2024_10_01_PREVIEW", "2024-10-01-preview" },
133+
{ "2024_10_01_Preview", "2024-10-01-preview" },
134+
{ "2024-10-01-preview", "2024-10-01-preview" },
135+
{ "V2024_08_01_preview", "2024-08-01-preview" },
136+
{ "V2024_08_01_PREVIEW", "2024-08-01-preview" },
137+
{ "2024_08_01_Preview", "2024-08-01-preview" },
138+
{ "2024-08-01-preview", "2024-08-01-preview" },
139+
{ "V2024_06_01", "2024-06-01" },
140+
{ "2024_06_01", "2024-06-01" },
141+
{ "2024-06-01", "2024-06-01" },
142+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_10_01_Preview.ToString(), null },
143+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_08_01_Preview.ToString(), null },
144+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_06_01.ToString(), null }
145+
};
146+
147+
public void Dispose()
148+
{
149+
this._httpClient.Dispose();
150+
this._messageHandlerStub.Dispose();
151+
}
103152
}

dotnet/src/Connectors/Connectors.AzureOpenAI.UnitTests/Services/AzureOpenAITextToAudioServiceTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Text.Json;
99
using System.Text.Json.Nodes;
1010
using System.Threading.Tasks;
11+
using Azure.AI.OpenAI;
1112
using Microsoft.Extensions.Logging;
1213
using Microsoft.SemanticKernel.Connectors.AzureOpenAI;
1314
using Microsoft.SemanticKernel.Connectors.OpenAI;
@@ -207,6 +208,49 @@ public async Task GetAudioContentPrioritizesModelIdOverDeploymentNameAsync(strin
207208
Assert.Equal(expectedModel, requestBody?["model"]?.ToString());
208209
}
209210

211+
[Theory]
212+
[MemberData(nameof(Versions))]
213+
public async Task ItTargetsApiVersionAsExpected(string? apiVersion, string? expectedVersion = null)
214+
{
215+
// Arrange
216+
var expectedByteArray = new byte[] { 0x00, 0x00, 0xFF, 0x7F };
217+
218+
var service = new AzureOpenAITextToAudioService("deploymentName", "https://endpoint", "api-key", "model", this._httpClient, apiVersion: apiVersion);
219+
await using var stream = new MemoryStream(expectedByteArray);
220+
221+
this._messageHandlerStub.ResponseToReturn = new HttpResponseMessage(HttpStatusCode.OK)
222+
{
223+
Content = new StreamContent(stream)
224+
};
225+
226+
// Act
227+
var result = await service.GetAudioContentsAsync("Some text");
228+
229+
// Assert
230+
Assert.NotNull(this._messageHandlerStub.RequestContent);
231+
232+
Assert.Contains($"api-version={expectedVersion}", this._messageHandlerStub.RequestUri!.ToString());
233+
}
234+
235+
public static TheoryData<string?, string?> Versions => new()
236+
{
237+
{ null, "2024-08-01-preview" },
238+
{ "V2024_10_01_preview", "2024-10-01-preview" },
239+
{ "V2024_10_01_PREVIEW", "2024-10-01-preview" },
240+
{ "2024_10_01_Preview", "2024-10-01-preview" },
241+
{ "2024-10-01-preview", "2024-10-01-preview" },
242+
{ "V2024_08_01_preview", "2024-08-01-preview" },
243+
{ "V2024_08_01_PREVIEW", "2024-08-01-preview" },
244+
{ "2024_08_01_Preview", "2024-08-01-preview" },
245+
{ "2024-08-01-preview", "2024-08-01-preview" },
246+
{ "V2024_06_01", "2024-06-01" },
247+
{ "2024_06_01", "2024-06-01" },
248+
{ "2024-06-01", "2024-06-01" },
249+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_10_01_Preview.ToString(), null },
250+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_08_01_Preview.ToString(), null },
251+
{ AzureOpenAIClientOptions.ServiceVersion.V2024_06_01.ToString(), null }
252+
};
253+
210254
public void Dispose()
211255
{
212256
this._httpClient.Dispose();

0 commit comments

Comments
 (0)