Skip to content

Commit 62c89d2

Browse files
authored
[OpenAI] Replace NonAzureOpenAIKeyCredential by KeyCredential (Azure#35754)
1 parent 80df56b commit 62c89d2

File tree

10 files changed

+53
-227
lines changed

10 files changed

+53
-227
lines changed

sdk/openai/azure-ai-openai/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
### Breaking Changes
1010

11+
- Replaced usage of class `NonAzureOpenAIKeyCredential` by Azure Core class `KeyCredential`.
12+
1113
### Bugs Fixed
1214

1315
### Other Changes

sdk/openai/azure-ai-openai/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ If you want to see the full code for these snippets check out our [samples folde
3535

3636
### Adding the package to your product
3737

38-
[//]: # ({x-version-update-start;com.azure:azure-ai-openai;current})
38+
[//]: # ({x-version-update-start;com.azure:azure-ai-openai;dependency})
3939
```xml
4040
<dependency>
4141
<groupId>com.azure</groupId>
4242
<artifactId>azure-ai-openai</artifactId>
43-
<version>1.0.0-beta.2</version>
43+
<version>1.0.0-beta.3</version>
4444
</dependency>
4545
```
4646
[//]: # ({x-version-update-end})
@@ -77,14 +77,14 @@ The SDK also supports operating against the public non-Azure OpenAI. The respons
7777

7878
```java readme-sample-createNonAzureOpenAISyncClientApiKey
7979
OpenAIClient client = new OpenAIClientBuilder()
80-
.credential(new NonAzureOpenAIKeyCredential("{openai-secret-key}"))
80+
.credential(new KeyCredential("{openai-secret-key}"))
8181
.buildClient();
8282
```
8383
or
8484

8585
```java readme-sample-createNonAzureOpenAIAsyncClientApiKey
8686
OpenAIAsyncClient client = new OpenAIClientBuilder()
87-
.credential(new NonAzureOpenAIKeyCredential("{openai-secret-key}"))
87+
.credential(new KeyCredential("{openai-secret-key}"))
8888
.buildAsyncClient();
8989
```
9090

sdk/openai/azure-ai-openai/src/main/java/com/azure/ai/openai/OpenAIClientBuilder.java

Lines changed: 32 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
// Code generated by Microsoft (R) AutoRest Code Generator.
44
package com.azure.ai.openai;
55

6+
import static com.azure.ai.openai.implementation.NonAzureOpenAIClientImpl.OPEN_AI_ENDPOINT;
7+
68
import com.azure.ai.openai.implementation.NonAzureOpenAIClientImpl;
7-
import com.azure.ai.openai.implementation.NonAzureOpenAIKeyCredentialPolicy;
89
import com.azure.ai.openai.implementation.OpenAIClientImpl;
9-
import com.azure.ai.openai.models.NonAzureOpenAIKeyCredential;
1010
import com.azure.core.annotation.Generated;
1111
import com.azure.core.annotation.ServiceClientBuilder;
1212
import com.azure.core.client.traits.AzureKeyCredentialTrait;
@@ -15,6 +15,7 @@
1515
import com.azure.core.client.traits.HttpTrait;
1616
import com.azure.core.client.traits.TokenCredentialTrait;
1717
import com.azure.core.credential.AzureKeyCredential;
18+
import com.azure.core.credential.KeyCredential;
1819
import com.azure.core.credential.TokenCredential;
1920
import com.azure.core.http.HttpClient;
2021
import com.azure.core.http.HttpHeaders;
@@ -24,13 +25,13 @@
2425
import com.azure.core.http.policy.AddDatePolicy;
2526
import com.azure.core.http.policy.AddHeadersFromContextPolicy;
2627
import com.azure.core.http.policy.AddHeadersPolicy;
27-
import com.azure.core.http.policy.AzureKeyCredentialPolicy;
2828
import com.azure.core.http.policy.BearerTokenAuthenticationPolicy;
2929
import com.azure.core.http.policy.CookiePolicy;
3030
import com.azure.core.http.policy.HttpLogOptions;
3131
import com.azure.core.http.policy.HttpLoggingPolicy;
3232
import com.azure.core.http.policy.HttpPipelinePolicy;
3333
import com.azure.core.http.policy.HttpPolicyProviders;
34+
import com.azure.core.http.policy.KeyCredentialPolicy;
3435
import com.azure.core.http.policy.RequestIdPolicy;
3536
import com.azure.core.http.policy.RetryOptions;
3637
import com.azure.core.http.policy.RetryPolicy;
@@ -182,23 +183,22 @@ public OpenAIClientBuilder credential(TokenCredential tokenCredential) {
182183
@Generated private AzureKeyCredential azureKeyCredential;
183184

184185
/** {@inheritDoc}. */
185-
@Generated
186186
@Override
187187
public OpenAIClientBuilder credential(AzureKeyCredential azureKeyCredential) {
188-
this.azureKeyCredential = azureKeyCredential;
189-
return this;
188+
return this.credential((KeyCredential) azureKeyCredential);
190189
}
191190

192-
private NonAzureOpenAIKeyCredential nonAzureOpenAIKeyCredential;
191+
/** The KeyCredential used for OpenAi authentication. It could be either of Azure or Non-Azure OpenAI API key. */
192+
private KeyCredential keyCredential;
193193

194194
/**
195-
* The NonAzureOpenAiKeyCredential used for public OpenAi authentication.
195+
* The KeyCredential used for OpenAi authentication. It could be either of Azure or Non-Azure OpenAI API key.
196196
*
197-
* @param nonAzureOpenAIKeyCredential The credential for non-azure public OpenAI authenticaton.
197+
* @param keyCredential The credential for OpenAI authentication.
198198
* @return the object itself.
199199
*/
200-
public OpenAIClientBuilder credential(NonAzureOpenAIKeyCredential nonAzureOpenAIKeyCredential) {
201-
this.nonAzureOpenAIKeyCredential = nonAzureOpenAIKeyCredential;
200+
public OpenAIClientBuilder credential(KeyCredential keyCredential) {
201+
this.keyCredential = keyCredential;
202202
return this;
203203
}
204204

@@ -268,7 +268,6 @@ private OpenAIClientImpl buildInnerClient() {
268268
return client;
269269
}
270270

271-
@Generated
272271
private HttpPipeline createHttpPipeline() {
273272
Configuration buildConfiguration =
274273
(configuration == null) ? Configuration.getGlobalConfiguration() : configuration;
@@ -292,8 +291,12 @@ private HttpPipeline createHttpPipeline() {
292291
HttpPolicyProviders.addBeforeRetryPolicies(policies);
293292
policies.add(ClientBuilderUtil.validateAndGetRetryPolicy(retryPolicy, retryOptions, new RetryPolicy()));
294293
policies.add(new AddDatePolicy());
295-
if (azureKeyCredential != null) {
296-
policies.add(new AzureKeyCredentialPolicy("api-key", azureKeyCredential));
294+
policies.add(new CookiePolicy());
295+
if (keyCredential != null) {
296+
policies.add(
297+
useNonAzureOpenAIService()
298+
? new KeyCredentialPolicy("Authorization", keyCredential, "Bearer")
299+
: new KeyCredentialPolicy("api-key", keyCredential));
297300
}
298301
if (tokenCredential != null) {
299302
policies.add(new BearerTokenAuthenticationPolicy(tokenCredential, DEFAULT_SCOPES));
@@ -313,63 +316,21 @@ private HttpPipeline createHttpPipeline() {
313316
}
314317

315318
private NonAzureOpenAIClientImpl buildInnerNonAzureOpenAIClient() {
316-
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipelineNonAzureOpenAI();
319+
HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline();
317320
NonAzureOpenAIClientImpl client =
318321
new NonAzureOpenAIClientImpl(localPipeline, JacksonAdapter.createDefaultSerializerAdapter());
319322
return client;
320323
}
321324

322-
private HttpPipeline createHttpPipelineNonAzureOpenAI() {
323-
Configuration buildConfiguration =
324-
(configuration == null) ? Configuration.getGlobalConfiguration() : configuration;
325-
HttpLogOptions localHttpLogOptions = this.httpLogOptions == null ? new HttpLogOptions() : this.httpLogOptions;
326-
ClientOptions localClientOptions = this.clientOptions == null ? new ClientOptions() : this.clientOptions;
327-
List<HttpPipelinePolicy> policies = new ArrayList<>();
328-
String clientName = PROPERTIES.getOrDefault(SDK_NAME, "UnknownName");
329-
String clientVersion = PROPERTIES.getOrDefault(SDK_VERSION, "UnknownVersion");
330-
String applicationId = CoreUtils.getApplicationId(localClientOptions, localHttpLogOptions);
331-
policies.add(new UserAgentPolicy(applicationId, clientName, clientVersion, buildConfiguration));
332-
policies.add(new RequestIdPolicy());
333-
policies.add(new AddHeadersFromContextPolicy());
334-
HttpHeaders headers = new HttpHeaders();
335-
localClientOptions.getHeaders().forEach(header -> headers.set(header.getName(), header.getValue()));
336-
if (headers.getSize() > 0) {
337-
policies.add(new AddHeadersPolicy(headers));
338-
}
339-
this.pipelinePolicies.stream()
340-
.filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_CALL)
341-
.forEach(p -> policies.add(p));
342-
HttpPolicyProviders.addBeforeRetryPolicies(policies);
343-
policies.add(ClientBuilderUtil.validateAndGetRetryPolicy(retryPolicy, retryOptions, new RetryPolicy()));
344-
policies.add(new AddDatePolicy());
345-
policies.add(new CookiePolicy());
346-
if (nonAzureOpenAIKeyCredential != null) {
347-
policies.add(new NonAzureOpenAIKeyCredentialPolicy("Authorization", nonAzureOpenAIKeyCredential, "Bearer"));
348-
}
349-
this.pipelinePolicies.stream()
350-
.filter(p -> p.getPipelinePosition() == HttpPipelinePosition.PER_RETRY)
351-
.forEach(p -> policies.add(p));
352-
HttpPolicyProviders.addAfterRetryPolicies(policies);
353-
policies.add(new HttpLoggingPolicy(httpLogOptions));
354-
HttpPipeline httpPipeline =
355-
new HttpPipelineBuilder()
356-
.policies(policies.toArray(new HttpPipelinePolicy[0]))
357-
.httpClient(httpClient)
358-
.clientOptions(localClientOptions)
359-
.build();
360-
return httpPipeline;
361-
}
362-
363325
/**
364326
* Builds an instance of OpenAIAsyncClient class.
365327
*
366328
* @return an instance of OpenAIAsyncClient.
367329
*/
368330
public OpenAIAsyncClient buildAsyncClient() {
369-
if (nonAzureOpenAIKeyCredential != null) {
370-
return new OpenAIAsyncClient(buildInnerNonAzureOpenAIClient());
371-
}
372-
return new OpenAIAsyncClient(buildInnerClient());
331+
return useNonAzureOpenAIService()
332+
? new OpenAIAsyncClient(buildInnerNonAzureOpenAIClient())
333+
: new OpenAIAsyncClient(buildInnerClient());
373334
}
374335

375336
/**
@@ -378,11 +339,18 @@ public OpenAIAsyncClient buildAsyncClient() {
378339
* @return an instance of OpenAIClient.
379340
*/
380341
public OpenAIClient buildClient() {
381-
if (nonAzureOpenAIKeyCredential != null) {
382-
return new OpenAIClient(buildInnerNonAzureOpenAIClient());
383-
}
384-
return new OpenAIClient(buildInnerClient());
342+
return useNonAzureOpenAIService()
343+
? new OpenAIClient(buildInnerNonAzureOpenAIClient())
344+
: new OpenAIClient(buildInnerClient());
385345
}
386346

387347
private static final ClientLogger LOGGER = new ClientLogger(OpenAIClientBuilder.class);
348+
349+
/**
350+
* OpenAI service can be used by either not setting the endpoint or by setting the endpoint to start with
351+
* "https://api.openai.com/"
352+
*/
353+
private boolean useNonAzureOpenAIService() {
354+
return endpoint == null || endpoint.startsWith(OPEN_AI_ENDPOINT);
355+
}
388356
}

sdk/openai/azure-ai-openai/src/main/java/com/azure/ai/openai/implementation/NonAzureOpenAIKeyCredentialPolicy.java

Lines changed: 0 additions & 87 deletions
This file was deleted.

sdk/openai/azure-ai-openai/src/main/java/com/azure/ai/openai/models/NonAzureOpenAIKeyCredential.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

sdk/openai/azure-ai-openai/src/samples/java/com/azure/ai/openai/auth/ClientCreationWithNonAzureOpenAIKeyCredentialSample.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.azure.ai.openai.OpenAIClientBuilder;
88
import com.azure.ai.openai.models.Completions;
99
import com.azure.ai.openai.models.CompletionsOptions;
10-
import com.azure.ai.openai.models.NonAzureOpenAIKeyCredential;
10+
import com.azure.core.credential.KeyCredential;
1111

1212
import java.util.ArrayList;
1313
import java.util.List;
@@ -25,7 +25,7 @@ public static void main(String[] args) {
2525
String apiKey = "{non-azure-open-ai-api-key}";
2626

2727
OpenAIClientBuilder builder = new OpenAIClientBuilder()
28-
.credential(new NonAzureOpenAIKeyCredential(apiKey));
28+
.credential(new KeyCredential(apiKey));
2929

3030
OpenAIClient client = builder.buildClient();
3131

0 commit comments

Comments
 (0)