Skip to content
This repository was archived by the owner on Feb 11, 2025. It is now read-only.

Commit 58e4a53

Browse files
authored
Merge pull request #7 from edeandrea/add-organizationId
Add organizationId
2 parents ee31924 + 315072e commit 58e4a53

File tree

7 files changed

+67
-48
lines changed

7 files changed

+67
-48
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,8 @@
2222
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
2323
hs_err_pid*
2424
replay_pid*
25+
26+
**/target/**
27+
28+
.idea
29+
*.iml

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ String apiKey = System.getenv("OPENAI_API_KEY");
6565
6666
OpenAiClient client = OpenAiClient.builder()
6767
.openAiApiKey(apiKey)
68+
.organizationId(orgId)
6869
.callTimeout(ofSeconds(60))
6970
.connectTimeout(ofSeconds(60))
7071
.readTimeout(ofSeconds(60))
Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,10 @@
11
package dev.ai4j.openai4j;
22

3-
import okhttp3.Interceptor;
4-
import okhttp3.Request;
5-
import okhttp3.Response;
3+
import java.util.Collections;
64

7-
import java.io.IOException;
8-
9-
class ApiKeyHeaderInjector implements Interceptor {
10-
11-
private final String apiKey;
5+
class ApiKeyHeaderInjector extends GenericHeaderInjector {
126

137
ApiKeyHeaderInjector(String apiKey) {
14-
this.apiKey = apiKey;
15-
}
16-
17-
@Override
18-
public Response intercept(Chain chain) throws IOException {
19-
20-
Request request = chain.request()
21-
.newBuilder()
22-
.addHeader("api-key", apiKey)
23-
.build();
24-
25-
return chain.proceed(request);
8+
super(Collections.singletonMap("api-key", apiKey));
269
}
2710
}
Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,10 @@
11
package dev.ai4j.openai4j;
22

3-
import okhttp3.Interceptor;
4-
import okhttp3.Request;
5-
import okhttp3.Response;
3+
import java.util.Collections;
64

7-
import java.io.IOException;
8-
9-
class AuthorizationHeaderInjector implements Interceptor {
10-
11-
private final String apiKey;
5+
class AuthorizationHeaderInjector extends GenericHeaderInjector {
126

137
AuthorizationHeaderInjector(String apiKey) {
14-
this.apiKey = apiKey;
15-
}
16-
17-
@Override
18-
public Response intercept(Chain chain) throws IOException {
19-
20-
Request request = chain.request()
21-
.newBuilder()
22-
.addHeader("Authorization", "Bearer " + apiKey)
23-
.build();
24-
25-
return chain.proceed(request);
8+
super(Collections.singletonMap("Authorization", "Bearer " + apiKey));
269
}
2710
}

src/main/java/dev/ai4j/openai4j/DefaultOpenAiClient.java

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

33
import static dev.ai4j.openai4j.Json.GSON;
44

5+
import org.slf4j.Logger;
6+
import org.slf4j.LoggerFactory;
7+
58
import dev.ai4j.openai4j.chat.ChatCompletionRequest;
69
import dev.ai4j.openai4j.chat.ChatCompletionResponse;
710
import dev.ai4j.openai4j.completion.CompletionRequest;
@@ -14,11 +17,10 @@
1417
import dev.ai4j.openai4j.moderation.ModerationResponse;
1518
import dev.ai4j.openai4j.moderation.ModerationResult;
1619
import java.io.IOException;
20+
import java.util.Collections;
1721
import java.util.List;
1822
import okhttp3.Cache;
1923
import okhttp3.OkHttpClient;
20-
import org.slf4j.Logger;
21-
import org.slf4j.LoggerFactory;
2224
import retrofit2.Retrofit;
2325
import retrofit2.converter.gson.GsonConverterFactory;
2426

@@ -58,6 +60,10 @@ private DefaultOpenAiClient(Builder serviceBuilder) {
5860
okHttpClientBuilder.addInterceptor(new ApiKeyHeaderInjector(serviceBuilder.azureApiKey));
5961
}
6062

63+
if (serviceBuilder.organizationId != null) {
64+
okHttpClientBuilder.addInterceptor(new GenericHeaderInjector(Collections.singletonMap("OpenAI-Organization", serviceBuilder.organizationId)));
65+
}
66+
6167
if (serviceBuilder.proxy != null) {
6268
okHttpClientBuilder.proxy(serviceBuilder.proxy);
6369
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.ai4j.openai4j;
2+
3+
import java.io.IOException;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
import java.util.Optional;
7+
8+
import okhttp3.Interceptor;
9+
import okhttp3.Request.Builder;
10+
import okhttp3.Response;
11+
12+
class GenericHeaderInjector implements Interceptor {
13+
private final Map<String, String> headers = new HashMap<>();
14+
15+
GenericHeaderInjector(Map<String, String> headers) {
16+
Optional.ofNullable(headers)
17+
.ifPresent(this.headers::putAll);
18+
}
19+
20+
@Override
21+
public Response intercept(Chain chain) throws IOException {
22+
Builder builder = chain.request().newBuilder();
23+
24+
// Add headers
25+
this.headers.forEach(builder::addHeader);
26+
27+
return chain.proceed(builder.build());
28+
}
29+
}

src/main/java/dev/ai4j/openai4j/OpenAiClient.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package dev.ai4j.openai4j;
22

3+
import java.net.InetSocketAddress;
4+
import java.net.Proxy;
5+
import java.nio.file.Path;
6+
import java.nio.file.Paths;
7+
import java.time.Duration;
8+
import java.util.List;
9+
310
import dev.ai4j.openai4j.chat.ChatCompletionRequest;
411
import dev.ai4j.openai4j.chat.ChatCompletionResponse;
512
import dev.ai4j.openai4j.completion.CompletionRequest;
@@ -13,12 +20,6 @@
1320
import dev.ai4j.openai4j.moderation.ModerationResult;
1421
import dev.ai4j.openai4j.spi.OpenAiClientBuilderFactory;
1522
import dev.ai4j.openai4j.spi.ServiceHelper;
16-
import java.net.InetSocketAddress;
17-
import java.net.Proxy;
18-
import java.nio.file.Path;
19-
import java.nio.file.Paths;
20-
import java.time.Duration;
21-
import java.util.List;
2223

2324
public abstract class OpenAiClient {
2425

@@ -55,6 +56,7 @@ public static OpenAiClient.Builder builder() {
5556
public abstract static class Builder<T extends OpenAiClient, B extends Builder<T, B>> {
5657

5758
public String baseUrl = "https://api.openai.com/v1/";
59+
public String organizationId;
5860
public String apiVersion;
5961
public String openAiApiKey;
6062
public String azureApiKey;
@@ -84,6 +86,16 @@ public B baseUrl(String baseUrl) {
8486
return (B) this;
8587
}
8688

89+
/**
90+
*
91+
* @param organizationId The organizationId for OpenAI: https://platform.openai.com/docs/api-reference/organization-optional
92+
* @return builder
93+
*/
94+
public B organizationId(String organizationId) {
95+
this.organizationId = organizationId;
96+
return (B) this;
97+
}
98+
8799
/**
88100
* @param apiVersion Version of the API in the YYYY-MM-DD format. Applicable only for Azure OpenAI.
89101
* @return builder

0 commit comments

Comments
 (0)