diff --git a/README.md b/README.md index 7185771..3d2868b 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,23 @@ public class ChatPost { } ``` +If you need custom HTTP settings, provide your own `OkHttpClient`: + +```java +import java.util.concurrent.TimeUnit; +import okhttp3.OkHttpClient; + +OkHttpClient customClient = new OkHttpClient.Builder() + .callTimeout(30, TimeUnit.SECONDS) + .build(); + +Cohere cohere = Cohere.builder() + .token("<>") + .clientName("snippet") + .httpClient(customClient) + .build(); +``` + ### Handling Errors When the API returns a non-success status code (4xx or 5xx response), a subclass of [ApiError](src/main/java/com/Cohere/api/core/ApiError.java) diff --git a/src/main/java/com/cohere/api/CohereBuilder.java b/src/main/java/com/cohere/api/CohereBuilder.java index 133039f..1d3e7ff 100644 --- a/src/main/java/com/cohere/api/CohereBuilder.java +++ b/src/main/java/com/cohere/api/CohereBuilder.java @@ -5,6 +5,7 @@ import com.cohere.api.core.ClientOptions; import com.cohere.api.core.Environment; +import okhttp3.OkHttpClient; public final class CohereBuilder { private ClientOptions.Builder clientOptionsBuilder = ClientOptions.builder(); @@ -42,6 +43,11 @@ public CohereBuilder url(String url) { return this; } + public CohereBuilder httpClient(OkHttpClient httpClient) { + this.clientOptionsBuilder.httpClient(httpClient); + return this; + } + public Cohere build() { if (token == null) { throw new RuntimeException("Please provide token or set the CO_API_KEY environment variable."); diff --git a/src/main/java/com/cohere/api/core/ClientOptions.java b/src/main/java/com/cohere/api/core/ClientOptions.java index ae643d5..7f7976b 100644 --- a/src/main/java/com/cohere/api/core/ClientOptions.java +++ b/src/main/java/com/cohere/api/core/ClientOptions.java @@ -80,6 +80,8 @@ public static final class Builder { private final Map> headerSuppliers = new HashMap<>(); + private OkHttpClient httpClient; + public Builder environment(Environment environment) { this.environment = environment; return this; @@ -95,10 +97,18 @@ public Builder addHeader(String key, Supplier value) { return this; } + public Builder httpClient(OkHttpClient httpClient) { + this.httpClient = httpClient; + return this; + } + public ClientOptions build() { - OkHttpClient okhttpClient = new OkHttpClient.Builder() - .addInterceptor(new RetryInterceptor(3)) - .build(); + OkHttpClient okhttpClient = this.httpClient; + if (okhttpClient == null) { + okhttpClient = new OkHttpClient.Builder() + .addInterceptor(new RetryInterceptor(3)) + .build(); + } return new ClientOptions(environment, headers, headerSuppliers, okhttpClient); } }