diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b627ba0..ea4b6b38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 3.3.3 +> Published 30 Jul 2023 + +### Added +1. **onClientCreated** parameter to set request interceptors for httpClient. +2. **onConfigClient** parameter to configure HttpClient, such as adding a cookie manager. + # 3.3.2 > Published 21 Jul 2023 diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAI.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAI.kt index ea0a51ae..33f50c41 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAI.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAI.kt @@ -4,6 +4,7 @@ import com.aallam.openai.api.http.Timeout import com.aallam.openai.client.internal.OpenAIApi import com.aallam.openai.client.internal.createHttpClient import com.aallam.openai.client.internal.http.HttpTransport +import io.ktor.client.* import kotlin.time.Duration.Companion.seconds /** @@ -34,6 +35,8 @@ public fun OpenAI( host: OpenAIHost = OpenAIHost.OpenAI, proxy: ProxyConfig? = null, retry: RetryStrategy = RetryStrategy(), + onConfigClient: (HttpClientConfig<*>.() -> Unit)? = null, + onClientCreated: ((client: HttpClient) -> Unit)? = null, ): OpenAI = OpenAI( config = OpenAIConfig( token = token, @@ -44,6 +47,8 @@ public fun OpenAI( host = host, proxy = proxy, retry = retry, + onConfigClient = onConfigClient, + onClientCreated = onClientCreated ) ) @@ -54,6 +59,7 @@ public fun OpenAI( */ public fun OpenAI(config: OpenAIConfig): OpenAI { val httpClient = createHttpClient(config) + config.onClientCreated?.invoke(httpClient) val transport = HttpTransport(httpClient) return OpenAIApi(transport) } diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAIConfig.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAIConfig.kt index c80aba7f..93b90c76 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAIConfig.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/OpenAIConfig.kt @@ -3,6 +3,7 @@ package com.aallam.openai.client import com.aallam.openai.api.http.Timeout import com.aallam.openai.api.logging.LogLevel import com.aallam.openai.api.logging.Logger +import io.ktor.client.* import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds @@ -28,6 +29,8 @@ public class OpenAIConfig( public val host: OpenAIHost = OpenAIHost.OpenAI, public val proxy: ProxyConfig? = null, public val retry: RetryStrategy = RetryStrategy(), + public val onConfigClient: (HttpClientConfig<*>.() -> Unit)? = null, + public val onClientCreated: ((client: HttpClient) -> Unit)? = null, ) { @Deprecated( diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/HttpClient.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/HttpClient.kt index f107292d..5b625009 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/HttpClient.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/HttpClient.kt @@ -71,6 +71,8 @@ internal fun createHttpClient(config: OpenAIConfig): HttpClient { exponentialDelay(config.retry.base, config.retry.maxDelay.inWholeMilliseconds) } + config.onConfigClient?.invoke(this) + defaultRequest { url(config.host.baseUrl) config.host.queryParams.onEach { (key, value) -> url.parameters.appendIfNameAbsent(key, value) }