Skip to content

Commit 33f03ae

Browse files
authored
Supports custom OkHttpClient (#9)
2 parents 2648cde + a608fa5 commit 33f03ae

File tree

6 files changed

+52
-8
lines changed

6 files changed

+52
-8
lines changed

.github/workflows/checker.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ jobs:
7070
17
7171
distribution: 'temurin'
7272
- run: chmod 755 ./mvnw
73-
- run: ./mvnw clean install test -Dfindbugs.skip -Dcheckstyle.skip -Dgpg.skip -Dskip.yarn -Dopenai.token=${{ secrets.OPENAI_TOKEN }}
73+
- run: ./mvnw clean install test -Dfindbugs.skip -Dcheckstyle.skip -Dgpg.skip -Dskip.yarn -Dopenai.token=${{ secrets.OPENAI_TOKEN }} -Dproxy.token=${{ secrets.PROXY_TOKEN }} -Dproxy.host=${{ secrets.PROXY_HOST }}
7474

7575
before_checker_package:
7676
runs-on: ubuntu-latest

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>org.devlive.sdk</groupId>
77
<artifactId>openai-java-sdk</artifactId>
8-
<version>1.1.0</version>
8+
<version>1.2.0-SNAPSHOT</version>
99

1010
<name>openai-java-sdk</name>
1111
<description>

src/main/java/org/devlive/sdk/openai/OpenAiClient.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import okhttp3.OkHttpClient;
99
import org.apache.commons.lang3.ObjectUtils;
1010
import org.apache.commons.lang3.StringUtils;
11+
import org.devlive.sdk.openai.exception.ParamException;
1112
import org.devlive.sdk.openai.interceptor.DefaultInterceptor;
1213
import retrofit2.Retrofit;
1314
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
@@ -36,16 +37,16 @@ private OpenAiClient(OpenAiClientBuilder builder)
3637
}
3738
Preconditions.checkState(hasApiKey, "Invalid OpenAi token");
3839

39-
if (ObjectUtils.isEmpty(apiHost)) {
40+
if (ObjectUtils.isEmpty(builder.apiHost)) {
4041
builder.apiHost(null);
4142
}
42-
if (ObjectUtils.isEmpty(timeout)) {
43+
if (ObjectUtils.isEmpty(builder.timeout)) {
4344
builder.timeout(null);
4445
}
45-
if (ObjectUtils.isEmpty(unit)) {
46+
if (ObjectUtils.isEmpty(builder.unit)) {
4647
builder.unit(null);
4748
}
48-
if (ObjectUtils.isEmpty(client)) {
49+
if (ObjectUtils.isEmpty(builder.client)) {
4950
builder.client(null);
5051
}
5152

@@ -101,10 +102,10 @@ public OpenAiClientBuilder unit(TimeUnit unit)
101102

102103
public OpenAiClientBuilder client(OkHttpClient client)
103104
{
105+
DefaultInterceptor interceptor = new DefaultInterceptor();
106+
interceptor.setApiKey(this.apiKey);
104107
if (ObjectUtils.isEmpty(client)) {
105108
log.warn("No client, creating default client");
106-
DefaultInterceptor interceptor = new DefaultInterceptor();
107-
interceptor.setApiKey(this.apiKey);
108109
client = new OkHttpClient.Builder()
109110
.addInterceptor(interceptor)
110111
.connectTimeout(this.timeout, this.unit)
@@ -113,6 +114,18 @@ public OpenAiClientBuilder client(OkHttpClient client)
113114
.callTimeout(this.timeout, this.unit)
114115
.build();
115116
}
117+
118+
if (client.interceptors().size() <= 0) {
119+
throw new ParamException("No interceptors available");
120+
}
121+
122+
long count = client.interceptors()
123+
.stream()
124+
.filter(inter -> inter instanceof DefaultInterceptor)
125+
.count();
126+
if (count <= 0) {
127+
throw new ParamException("Must inject DefaultInterceptor");
128+
}
116129
this.client = client;
117130
return this;
118131
}

src/main/java/org/devlive/sdk/openai/exception/DefaultException.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.devlive.sdk.openai.exception;
22

3+
import lombok.Getter;
4+
35
public class DefaultException
46
extends RuntimeException
57
{
8+
@Getter
69
private final String message;
710

811
public DefaultException(String message)

src/main/java/org/devlive/sdk/openai/interceptor/DefaultInterceptor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import okhttp3.Response;
1010
import okhttp3.ResponseBody;
1111
import org.apache.commons.lang3.ObjectUtils;
12+
import org.apache.commons.lang3.StringUtils;
1213
import org.devlive.sdk.openai.exception.AuthorizedException;
14+
import org.devlive.sdk.openai.exception.ParamException;
1315
import org.devlive.sdk.openai.exception.RequestException;
1416
import org.devlive.sdk.openai.response.DefaultResponse;
1517
import org.devlive.sdk.openai.utils.JsonUtils;
@@ -31,6 +33,9 @@ public DefaultInterceptor()
3133

3234
public Request headers(Request original)
3335
{
36+
if (StringUtils.isEmpty(this.apiKey)) {
37+
throw new ParamException("Invalid OpenAi token, must be non-empty");
38+
}
3439
return original.newBuilder()
3540
.header("Authorization", String.format("Bearer %s", this.apiKey))
3641
.header("Content-Type", "application/json")

src/test/java/org/devlive/sdk/openai/OpenAiClientTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
11
package org.devlive.sdk.openai;
22

33
import com.google.common.collect.Lists;
4+
import okhttp3.OkHttpClient;
45
import org.devlive.sdk.openai.entity.CompletionChatEntity;
56
import org.devlive.sdk.openai.entity.CompletionEntity;
67
import org.devlive.sdk.openai.entity.CompletionMessageEntity;
78
import org.devlive.sdk.openai.exception.AuthorizedException;
9+
import org.devlive.sdk.openai.interceptor.DefaultInterceptor;
810
import org.devlive.sdk.openai.model.CompletionModel;
911
import org.junit.Assert;
1012
import org.junit.Before;
1113
import org.junit.Test;
1214

1315
import java.util.List;
16+
import java.util.concurrent.TimeUnit;
1417
import java.util.stream.Collectors;
1518

1619
public class OpenAiClientTest
1720
{
1821
private OpenAiClient client;
1922
private String invalidApiKey = "sk-rh";
23+
private long openApiTimeout = 10;
2024

2125
@Before
2226
public void before()
@@ -32,6 +36,25 @@ public void testBuilder()
3236
Assert.assertNotNull(client);
3337
}
3438

39+
@Test
40+
public void testClient()
41+
{
42+
DefaultInterceptor interceptor = new DefaultInterceptor();
43+
interceptor.setApiKey(System.getProperty("proxy.token"));
44+
OkHttpClient okHttpClient = new OkHttpClient.Builder()
45+
.addInterceptor(interceptor)
46+
.connectTimeout(openApiTimeout, TimeUnit.SECONDS)
47+
.writeTimeout(openApiTimeout, TimeUnit.SECONDS)
48+
.readTimeout(openApiTimeout, TimeUnit.SECONDS)
49+
.build();
50+
client = OpenAiClient.builder()
51+
.apiHost(System.getProperty("proxy.host"))
52+
.apiKey(invalidApiKey)
53+
.client(okHttpClient)
54+
.build();
55+
Assert.assertTrue(client.getModels().getModels().size() > 0);
56+
}
57+
3558
@Test
3659
public void testNoAuthorized()
3760
{

0 commit comments

Comments
 (0)