Skip to content

Commit 96153b7

Browse files
committed
fix async tests
1 parent 7c1b414 commit 96153b7

File tree

4 files changed

+28
-33
lines changed

4 files changed

+28
-33
lines changed

sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/AgentsClientBuilder.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,8 @@ private HttpPipeline createHttpPipeline() {
328328
* @return an instance of ConversationsAsyncClient.
329329
*/
330330
public ConversationsAsyncClient buildConversationsAsyncClient() {
331-
HttpClient decoratedHttpClient = getOpenAIHttpClient();
332331
return new ConversationsAsyncClient(getOpenAIAsyncClientBuilder().build().withOptions(optionBuilder ->
333-
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(decoratedHttpClient))));
332+
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(createHttpPipeline()))));
334333
}
335334

336335
/**
@@ -339,9 +338,8 @@ public ConversationsAsyncClient buildConversationsAsyncClient() {
339338
* @return an instance of ConversationsClient.
340339
*/
341340
public ConversationsClient buildConversationsClient() {
342-
HttpClient decoratedHttpClient = getOpenAIHttpClient();
343341
return new ConversationsClient(getOpenAIClientBuilder().build().withOptions(optionBuilder ->
344-
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(decoratedHttpClient))));
342+
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(createHttpPipeline()))));
345343
}
346344

347345
/**
@@ -350,9 +348,8 @@ public ConversationsClient buildConversationsClient() {
350348
* @return an instance of ResponsesClient
351349
*/
352350
public ResponsesClient buildResponsesClient() {
353-
HttpClient decoratedHttpClient = getOpenAIHttpClient();
354351
return new ResponsesClient(getOpenAIClientBuilder().build().withOptions(optionBuilder ->
355-
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(decoratedHttpClient))));
352+
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(createHttpPipeline()))));
356353
}
357354

358355
/**
@@ -361,9 +358,8 @@ public ResponsesClient buildResponsesClient() {
361358
* @return an instance of ResponsesAsyncClient
362359
*/
363360
public ResponsesAsyncClient buildResponsesAsyncClient() {
364-
HttpClient decoratedHttpClient = getOpenAIHttpClient();
365361
return new ResponsesAsyncClient(getOpenAIAsyncClientBuilder().build().withOptions(optionBuilder ->
366-
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(decoratedHttpClient))));
362+
optionBuilder.httpClient(HttpClientHelper.mapToOpenAIHttpClient(createHttpPipeline()))));
367363
}
368364

369365
private OpenAIOkHttpClient.Builder getOpenAIClientBuilder() {
@@ -392,10 +388,6 @@ private OpenAIOkHttpClientAsync.Builder getOpenAIAsyncClientBuilder() {
392388
return builder;
393389
}
394390

395-
private HttpClient getOpenAIHttpClient() {
396-
return createHttpPipeline()::send;
397-
}
398-
399391
private static final ClientLogger LOGGER = new ClientLogger(AgentsClientBuilder.class);
400392

401393
/**

sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/http/HttpClientHelper.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@
55

66
import com.azure.core.http.HttpHeaderName;
77
import com.azure.core.http.HttpHeaders;
8+
import com.azure.core.http.HttpMethod;
9+
import com.azure.core.http.HttpPipeline;
810
import com.azure.core.util.BinaryData;
911
import com.azure.core.util.Context;
1012
import com.azure.core.util.CoreUtils;
1113
import com.azure.core.util.logging.ClientLogger;
1214
import com.openai.core.RequestOptions;
1315
import com.openai.core.http.Headers;
16+
import com.openai.core.http.HttpClient;
1417
import com.openai.core.http.HttpRequest;
1518
import com.openai.core.http.HttpRequestBody;
1619
import com.openai.core.http.HttpResponse;
@@ -36,23 +39,22 @@ private HttpClientHelper() {
3639
}
3740

3841
/**
39-
* Wraps the given Azure {@link com.azure.core.http.HttpClient} with an implementation of the OpenAI
40-
* {@link com.openai.core.http.HttpClient} interface. All requests and responses are converted on the fly.
42+
* Implements the OpenAI {@link HttpClient} interface that sends the HTTP request through the Azure HTTP pipeline.
43+
* All requests and responses are converted on the fly.
4144
*
42-
* @param azureHttpClient The Azure HTTP client that should execute requests.
45+
* @param httpPipeline The Azure HTTP pipeline that will execute HTTP requests.
4346
* @return A bridge client that honors the OpenAI interface but delegates execution to the Azure pipeline.
4447
*/
45-
public static com.openai.core.http.HttpClient
46-
mapToOpenAIHttpClient(com.azure.core.http.HttpClient azureHttpClient) {
47-
return new HttpClientWrapper(azureHttpClient);
48+
public static HttpClient mapToOpenAIHttpClient(HttpPipeline httpPipeline) {
49+
return new HttpClientWrapper(httpPipeline);
4850
}
4951

50-
private static final class HttpClientWrapper implements com.openai.core.http.HttpClient {
52+
private static final class HttpClientWrapper implements HttpClient {
5153

52-
private final com.azure.core.http.HttpClient azureHttpClient;
54+
private final HttpPipeline httpPipeline;
5355

54-
private HttpClientWrapper(com.azure.core.http.HttpClient azureHttpClient) {
55-
this.azureHttpClient = Objects.requireNonNull(azureHttpClient, "'azureHttpClient' cannot be null.");
56+
private HttpClientWrapper(HttpPipeline httpPipeline) {
57+
this.httpPipeline = Objects.requireNonNull(httpPipeline, "'httpPipeline' cannot be null.");
5658
}
5759

5860
@Override
@@ -71,7 +73,7 @@ public HttpResponse execute(HttpRequest request, RequestOptions requestOptions)
7173
Objects.requireNonNull(requestOptions, "requestOptions");
7274

7375
com.azure.core.http.HttpRequest azureRequest = buildAzureRequest(request);
74-
com.azure.core.http.HttpResponse azureResponse = this.azureHttpClient.sendSync(azureRequest, Context.NONE);
76+
com.azure.core.http.HttpResponse azureResponse = this.httpPipeline.sendSync(azureRequest, Context.NONE);
7577
return new AzureHttpResponseAdapter(azureResponse);
7678
}
7779

@@ -92,7 +94,7 @@ public CompletableFuture<HttpResponse> executeAsync(HttpRequest request, Request
9294
return failedFuture(runtimeException);
9395
}
9496

95-
return this.azureHttpClient.send(azureRequest)
97+
return this.httpPipeline.send(azureRequest, new Context("azure-eagerly-read-response", true))
9698
.map(response -> (HttpResponse) new AzureHttpResponseAdapter(response))
9799
// .onErrorMap(t -> {
98100
// // 2 or 3 from Azure Errors, should be mapped to Stainless Error.
@@ -127,7 +129,7 @@ private static com.azure.core.http.HttpRequest buildAzureRequest(HttpRequest req
127129
}
128130

129131
com.azure.core.http.HttpRequest azureRequest
130-
= new com.azure.core.http.HttpRequest(com.azure.core.http.HttpMethod.valueOf(request.method().name()),
132+
= new com.azure.core.http.HttpRequest(HttpMethod.valueOf(request.method().name()),
131133
OpenAiRequestUrlBuilder.buildUrl(request), headers);
132134

133135
if (bodyData != null) {

sdk/ai/azure-ai-agents/src/main/java/com/azure/ai/agents/implementation/http/OpenAiRequestUrlBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* OpenAI request metadata. The builder keeps the low-level path/query handling isolated so that
2121
* {@link HttpClientHelper} can focus on the higher-level request mapping logic.
2222
*/
23-
final class OpenAiRequestUrlBuilder {
23+
public final class OpenAiRequestUrlBuilder {
2424

2525
private static final ClientLogger LOGGER = new ClientLogger(OpenAiRequestUrlBuilder.class);
2626

sdk/ai/azure-ai-agents/src/test/java/com/azure/ai/agents/implementation/http/HttpClientHelperTests.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.azure.core.http.HttpHeaderName;
88
import com.azure.core.http.HttpHeaders;
99
import com.azure.core.http.HttpMethod;
10+
import com.azure.core.http.HttpPipelineBuilder;
1011
import com.azure.core.http.HttpRequest;
1112
import com.azure.core.http.HttpResponse;
1213
import com.azure.core.test.http.MockHttpResponse;
@@ -43,7 +44,7 @@ class HttpClientHelperTests {
4344
void executeMapsRequestAndResponse() {
4445
RecordingHttpClient recordingClient = new RecordingHttpClient(request -> createMockResponse(request, 201,
4546
new HttpHeaders().set(REQUEST_ID_HEADER, "req-123").set(CUSTOM_HEADER_NAME, "custom-value"), "pong"));
46-
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(recordingClient);
47+
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(new HttpPipelineBuilder().httpClient(recordingClient).build());
4748

4849
com.openai.core.http.HttpRequest openAiRequest = createOpenAiRequest();
4950

@@ -70,7 +71,7 @@ void executeMapsRequestAndResponse() {
7071
void executeAsyncCompletesSuccessfully() {
7172
RecordingHttpClient recordingClient
7273
= new RecordingHttpClient(request -> createMockResponse(request, 204, new HttpHeaders(), ""));
73-
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(recordingClient);
74+
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(new HttpPipelineBuilder().httpClient(recordingClient).build());
7475

7576
com.openai.core.http.HttpRequest openAiRequest = createOpenAiRequest();
7677

@@ -93,7 +94,7 @@ void executeWithNullRequestBodySucceeds() throws Exception {
9394
}
9495
return createMockResponse(request, 200, new HttpHeaders(), "success");
9596
});
96-
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(recordingClient);
97+
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(new HttpPipelineBuilder().httpClient(recordingClient).build());
9798

9899
com.openai.core.http.HttpRequest openAiRequest = com.openai.core.http.HttpRequest.builder()
99100
.method(com.openai.core.http.HttpMethod.GET)
@@ -111,7 +112,7 @@ void executeWithNullRequestBodySucceeds() throws Exception {
111112
void executeThrowsUncheckedIOExceptionOnBodyBufferingFailure() {
112113
RecordingHttpClient recordingClient
113114
= new RecordingHttpClient(request -> createMockResponse(request, 200, new HttpHeaders(), ""));
114-
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(recordingClient);
115+
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(new HttpPipelineBuilder().httpClient(recordingClient).build());
115116

116117
com.openai.core.http.HttpRequest openAiRequest = com.openai.core.http.HttpRequest.builder()
117118
.method(com.openai.core.http.HttpMethod.POST)
@@ -132,7 +133,7 @@ void executeThrowsUncheckedIOExceptionOnBodyBufferingFailure() {
132133
void executeThrowsExceptionOnMalformedUrl() {
133134
RecordingHttpClient recordingClient
134135
= new RecordingHttpClient(request -> createMockResponse(request, 200, new HttpHeaders(), ""));
135-
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(recordingClient);
136+
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(new HttpPipelineBuilder().httpClient(recordingClient).build());
136137

137138
com.openai.core.http.HttpRequest openAiRequest = com.openai.core.http.HttpRequest.builder()
138139
.method(com.openai.core.http.HttpMethod.GET)
@@ -149,7 +150,7 @@ void executeThrowsExceptionOnMalformedUrl() {
149150
void executeAsyncPropagatesRequestBuildingErrors() {
150151
RecordingHttpClient recordingClient
151152
= new RecordingHttpClient(request -> createMockResponse(request, 200, new HttpHeaders(), ""));
152-
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(recordingClient);
153+
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(new HttpPipelineBuilder().httpClient(recordingClient).build());
153154

154155
com.openai.core.http.HttpRequest openAiRequest = com.openai.core.http.HttpRequest.builder()
155156
.method(com.openai.core.http.HttpMethod.POST)
@@ -169,7 +170,7 @@ void executeAsyncPropagatesRequestBuildingErrors() {
169170
@Test
170171
void executeAsyncPropagatesHttpClientFailures() {
171172
FailingHttpClient failingClient = new FailingHttpClient(new RuntimeException("Network error"));
172-
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(failingClient);
173+
com.openai.core.http.HttpClient openAiClient = HttpClientHelper.mapToOpenAIHttpClient(new HttpPipelineBuilder().httpClient(failingClient).build());
173174

174175
com.openai.core.http.HttpRequest openAiRequest = com.openai.core.http.HttpRequest.builder()
175176
.method(com.openai.core.http.HttpMethod.GET)

0 commit comments

Comments
 (0)