From 33e6e3da6e4d0d68fd5845467331e28dc441f501 Mon Sep 17 00:00:00 2001 From: Mouaad Aallam Date: Sat, 15 Jun 2024 17:51:01 +0200 Subject: [PATCH 1/4] fix(requestOptions): request options headers override previous values (#353) --- CHANGELOG.md | 1 + .../internal/extension/HttpRequestBuilder.kt | 5 +++- .../openai/client/misc/TestRequestOptions.kt | 27 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aecdfa4c..436fd7e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ### Fixed - **chat**: enhance flow cancel capability (#333) +- **config**: request options headers override previous values (#353) ## 3.7.2 > Published 28 Apr 2024 diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/extension/HttpRequestBuilder.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/extension/HttpRequestBuilder.kt index 03bec304..bf771273 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/extension/HttpRequestBuilder.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/extension/HttpRequestBuilder.kt @@ -9,7 +9,10 @@ import io.ktor.client.request.* */ internal fun HttpRequestBuilder.requestOptions(requestOptions: RequestOptions? = null) { if (requestOptions == null) return - requestOptions.headers.forEach { (key, value) -> headers.append(key, value) } + requestOptions.headers.forEach { (key, value) -> + if (headers.contains(key)) headers.remove(key) + headers[key] = value + } requestOptions.urlParameters.forEach { (key, value) -> url.parameters.append(key, value) } requestOptions.timeout?.let { timeout -> timeout { diff --git a/openai-client/src/commonTest/kotlin/com/aallam/openai/client/misc/TestRequestOptions.kt b/openai-client/src/commonTest/kotlin/com/aallam/openai/client/misc/TestRequestOptions.kt index 429bb1d9..677b34ab 100644 --- a/openai-client/src/commonTest/kotlin/com/aallam/openai/client/misc/TestRequestOptions.kt +++ b/openai-client/src/commonTest/kotlin/com/aallam/openai/client/misc/TestRequestOptions.kt @@ -32,4 +32,31 @@ class TestRequestOptions { client.models(requestOptions = requestOptions) assertEquals(requestHeaders?.get(key), requestOptions.headers[key]) } + + @Test + fun testOverride() = runTest { + val key = "OpenAI-Beta" + val requestOptions = RequestOptions( + headers = mapOf(key to "assistants=v0"), + ) + var requestHeaders: Map? = null + val client = OpenAI( + token = token, + headers = mapOf(key to "assistants=v3"), + httpClientConfig = { + install("RequestInterceptor") { + requestPipeline.intercept(HttpRequestPipeline.Before) { + requestHeaders = context.headers.entries().associate { it.key to it.value.first() } + } + } + } + ) + + try { + client.assistants(requestOptions = requestOptions) + } catch (e: Exception) { + // skip + } + assertEquals(requestHeaders?.get(key), requestOptions.headers[key]) + } } From a40ae2e2f4cce090238ae2dc60c57e9f8b927d3b Mon Sep 17 00:00:00 2001 From: SF93 Date: Sun, 16 Jun 2024 14:06:23 +0900 Subject: [PATCH 2/4] changed assistants v2 beta header adding process --- .../internal/api/AssistantsApi.kt | 30 ++++++------ .../internal/api/MessagesApi.kt | 18 +++++-- .../internal/api/ThreadsApi.kt | 22 +++++---- .../aallam/openai/client/TestAssistants.kt | 49 +------------------ .../com/aallam/openai/client/TestThreads.kt | 28 ----------- .../core/RequestOptions.kt | 7 ++- 6 files changed, 49 insertions(+), 105 deletions(-) diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt index 67454081..662d3d85 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt @@ -4,10 +4,7 @@ import com.aallam.openai.api.BetaOpenAI import com.aallam.openai.api.assistant.Assistant import com.aallam.openai.api.assistant.AssistantId import com.aallam.openai.api.assistant.AssistantRequest -import com.aallam.openai.api.core.DeleteResponse -import com.aallam.openai.api.core.ListResponse -import com.aallam.openai.api.core.RequestOptions -import com.aallam.openai.api.core.SortOrder +import com.aallam.openai.api.core.* import com.aallam.openai.api.exception.OpenAIAPIException import com.aallam.openai.api.file.FileId import com.aallam.openai.client.Assistants @@ -30,8 +27,9 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { url(path = ApiPath.Assistants) setBody(request) contentType(ContentType.Application.Json) - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } @@ -42,8 +40,9 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { return requester.perform { it.get { url(path = "${ApiPath.Assistants}/${id.id}") - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) } }.body() } catch (e: OpenAIAPIException) { @@ -63,8 +62,9 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { url(path = "${ApiPath.Assistants}/${id.id}") setBody(request) contentType(ContentType.Application.Json) - beta("assistants", 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } @@ -74,8 +74,9 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { val response = requester.perform { it.delete { url(path = "${ApiPath.Assistants}/${id.id}") - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) } } return when (response.status) { @@ -101,8 +102,9 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { after?.let { parameter("after", it.id) } before?.let { parameter("before", it.id) } } - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt index 44c0fedf..865dfd9a 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt @@ -3,6 +3,7 @@ package com.aallam.openai.client.internal.api import com.aallam.openai.api.core.PaginatedList import com.aallam.openai.api.core.RequestOptions import com.aallam.openai.api.core.SortOrder +import com.aallam.openai.api.core.addAssistantsBeta import com.aallam.openai.api.file.FileId import com.aallam.openai.api.message.Message import com.aallam.openai.api.message.MessageId @@ -28,8 +29,9 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { url(path = "${ApiPath.Threads}/${threadId.id}/messages") setBody(request) contentType(ContentType.Application.Json) - beta("assistants", 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } @@ -39,7 +41,9 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { it.get { url(path = "${ApiPath.Threads}/${threadId.id}/messages/${messageId.id}") beta("assistants", 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } @@ -58,7 +62,9 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { contentType(ContentType.Application.Json) } beta("assistants", 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } @@ -80,7 +86,9 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { after?.let { value -> parameter("after", value.id) } } beta("assistants", 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt index 4b56764d..13e2e0ce 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt @@ -3,12 +3,12 @@ package com.aallam.openai.client.internal.api import com.aallam.openai.api.BetaOpenAI import com.aallam.openai.api.core.DeleteResponse import com.aallam.openai.api.core.RequestOptions +import com.aallam.openai.api.core.addAssistantsBeta import com.aallam.openai.api.exception.OpenAIAPIException import com.aallam.openai.api.thread.Thread import com.aallam.openai.api.thread.ThreadId import com.aallam.openai.api.thread.ThreadRequest import com.aallam.openai.client.Threads -import com.aallam.openai.client.internal.extension.beta import com.aallam.openai.client.internal.extension.requestOptions import com.aallam.openai.client.internal.http.HttpRequester import com.aallam.openai.client.internal.http.perform @@ -31,8 +31,9 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { setBody(req) contentType(ContentType.Application.Json) } - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } @@ -43,8 +44,9 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { return requester.perform { it.get { url(path = "${ApiPath.Threads}/${id.id}") - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) } }.body() } catch (e: OpenAIAPIException) { @@ -67,8 +69,9 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { url(path = "${ApiPath.Threads}/${id.id}") setBody(request) contentType(ContentType.Application.Json) - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) }.body() } } @@ -78,8 +81,9 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { val response = requester.perform { it.delete { url(path = "${ApiPath.Threads}/${id.id}") - beta("assistants", requestOptions?.betaVersion ?: 1) - requestOptions(requestOptions) + requestOptions( + requestOptions.addAssistantsBeta() + ) } } return when (response.status) { diff --git a/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestAssistants.kt b/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestAssistants.kt index 2f7c5896..671e09f5 100644 --- a/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestAssistants.kt +++ b/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestAssistants.kt @@ -15,34 +15,6 @@ class TestAssistants : TestOpenAI() { @Test fun codeInterpreter() = test { - val request = assistantRequest { - name = "Math Tutor" - tools = listOf(AssistantTool.CodeInterpreter) - model = ModelId("gpt-4") - } - val assistant = openAI.assistant(request) - assertEquals(request.name, assistant.name) - assertEquals(request.tools, assistant.tools) - assertEquals(request.model, assistant.model) - - val getAssistant = openAI.assistant(assistant.id) - assertEquals(getAssistant, assistant) - - val assistants = openAI.assistants() - assertTrue { assistants.isNotEmpty() } - - val updated = assistantRequest { name = "Super Math Tutor" } - val updatedAssistant = openAI.assistant(assistant.id, updated) - assertEquals(updated.name, updatedAssistant.name) - - openAI.delete(updatedAssistant.id) - - val fileGetAfterDelete = openAI.assistant(updatedAssistant.id) - assertNull(fileGetAfterDelete) - } - - @Test - fun codeInterpreterV2() = test { val request = assistantRequest { name = "Math Tutor" tools = listOf(AssistantTool.CodeInterpreter) @@ -51,9 +23,6 @@ class TestAssistants : TestOpenAI() { } val assistant = openAI.assistant( request = request, - requestOptions = RequestOptions( - betaVersion = 2, - ) ) assertEquals(request.name, assistant.name) assertEquals(request.tools, assistant.tools) @@ -62,17 +31,10 @@ class TestAssistants : TestOpenAI() { val getAssistant = openAI.assistant( assistant.id, - requestOptions = RequestOptions( - betaVersion = 2, - ) ) assertEquals(getAssistant, assistant) - val assistants = openAI.assistants( - requestOptions = RequestOptions( - betaVersion = 2, - ) - ) + val assistants = openAI.assistants() assertTrue { assistants.isNotEmpty() } val updated = assistantRequest { @@ -82,25 +44,16 @@ class TestAssistants : TestOpenAI() { val updatedAssistant = openAI.assistant( assistant.id, updated, - requestOptions = RequestOptions( - betaVersion = 2, - ) ) assertEquals(updated.name, updatedAssistant.name) assertEquals(request.responseFormat, assistant.responseFormat) openAI.delete( updatedAssistant.id, - requestOptions = RequestOptions( - betaVersion = 2, - ), ) val fileGetAfterDelete = openAI.assistant( updatedAssistant.id, - requestOptions = RequestOptions( - betaVersion = 2, - ) ) assertNull(fileGetAfterDelete) } diff --git a/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestThreads.kt b/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestThreads.kt index 168cc286..5a0b9531 100644 --- a/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestThreads.kt +++ b/openai-client/src/commonTest/kotlin/com/aallam/openai/client/TestThreads.kt @@ -15,30 +15,8 @@ class TestThreads : TestOpenAI() { fun threads() = test { val thread = openAI.thread() - val retrieved = openAI.thread(thread.id) - assertEquals(thread, retrieved) - - val metadata = mapOf("modified" to "true", "user" to "aallam") - val updated = openAI.thread(id = thread.id, metadata = metadata) - assertEquals(metadata, updated.metadata) - - val deleted = openAI.delete(thread.id) - assertEquals(true, deleted) - } - - @Test - fun threadsV2() = test { - val thread = openAI.thread( - requestOptions = RequestOptions( - betaVersion = 2 - ) - ) - val retrieved = openAI.thread( thread.id, - requestOptions = RequestOptions( - betaVersion = 2 - ) ) // thread creating request receives null tool_resource, // but retrieved one always has code interpreter with empty file_ids @@ -50,17 +28,11 @@ class TestThreads : TestOpenAI() { val updated = openAI.thread( id = thread.id, metadata = metadata, - requestOptions = RequestOptions( - betaVersion = 2 - ) ) assertEquals(metadata, updated.metadata) val deleted = openAI.delete( thread.id, - requestOptions = RequestOptions( - betaVersion = 2 - ) ) assertEquals(true, deleted) } diff --git a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt index db2d36d2..97cc8203 100644 --- a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt +++ b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt @@ -14,5 +14,10 @@ public data class RequestOptions( public val headers: Map = emptyMap(), public val urlParameters: Map = emptyMap(), public val timeout: Timeout? = null, - public val betaVersion: Int? = null, ) + +public fun RequestOptions?.addAssistantsBeta(): RequestOptions { + val betaVersionHeaderPair = Pair("OpenAI-Beta", "assistants=v2") + return this?.copy(headers = this.headers.plus(betaVersionHeaderPair)) + ?: RequestOptions(headers = mapOf(betaVersionHeaderPair)) +} \ No newline at end of file From 61879be1ef0ffe584ee36e87160c3255fdc3f4b4 Mon Sep 17 00:00:00 2001 From: SF93 Date: Sun, 16 Jun 2024 14:15:03 +0900 Subject: [PATCH 3/4] reverted misunderstood requestOption works and set beta to v2 --- .../internal/api/AssistantsApi.kt | 25 ++++++++----------- .../internal/api/MessagesApi.kt | 21 ++++++---------- .../internal/api/ThreadsApi.kt | 22 +++++++--------- .../core/RequestOptions.kt | 6 ----- 4 files changed, 27 insertions(+), 47 deletions(-) diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt index 662d3d85..131eae0a 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt @@ -27,9 +27,8 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { url(path = ApiPath.Assistants) setBody(request) contentType(ContentType.Application.Json) - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) }.body() } } @@ -40,9 +39,8 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { return requester.perform { it.get { url(path = "${ApiPath.Assistants}/${id.id}") - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) } }.body() } catch (e: OpenAIAPIException) { @@ -62,9 +60,8 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { url(path = "${ApiPath.Assistants}/${id.id}") setBody(request) contentType(ContentType.Application.Json) - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) }.body() } } @@ -74,9 +71,8 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { val response = requester.perform { it.delete { url(path = "${ApiPath.Assistants}/${id.id}") - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) } } return when (response.status) { @@ -102,9 +98,8 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants { after?.let { parameter("after", it.id) } before?.let { parameter("before", it.id) } } - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) }.body() } } diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt index 865dfd9a..65f95487 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt @@ -3,8 +3,6 @@ package com.aallam.openai.client.internal.api import com.aallam.openai.api.core.PaginatedList import com.aallam.openai.api.core.RequestOptions import com.aallam.openai.api.core.SortOrder -import com.aallam.openai.api.core.addAssistantsBeta -import com.aallam.openai.api.file.FileId import com.aallam.openai.api.message.Message import com.aallam.openai.api.message.MessageId import com.aallam.openai.api.message.MessageRequest @@ -29,8 +27,9 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { url(path = "${ApiPath.Threads}/${threadId.id}/messages") setBody(request) contentType(ContentType.Application.Json) + beta("assistants", 2) requestOptions( - requestOptions.addAssistantsBeta() + requestOptions ) }.body() } @@ -40,9 +39,9 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { return requester.perform { it.get { url(path = "${ApiPath.Threads}/${threadId.id}/messages/${messageId.id}") - beta("assistants", 1) + beta("assistants", 2) requestOptions( - requestOptions.addAssistantsBeta() + requestOptions ) }.body() } @@ -61,10 +60,8 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { setBody(mapOf("metadata" to meta)) contentType(ContentType.Application.Json) } - beta("assistants", 1) - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) }.body() } } @@ -85,10 +82,8 @@ internal class MessagesApi(val requester: HttpRequester) : Messages { before?.let { value -> parameter("before", value.id) } after?.let { value -> parameter("after", value.id) } } - beta("assistants", 1) - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) }.body() } } diff --git a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt index 13e2e0ce..0a2568f0 100644 --- a/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt +++ b/openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/ThreadsApi.kt @@ -3,12 +3,12 @@ package com.aallam.openai.client.internal.api import com.aallam.openai.api.BetaOpenAI import com.aallam.openai.api.core.DeleteResponse import com.aallam.openai.api.core.RequestOptions -import com.aallam.openai.api.core.addAssistantsBeta import com.aallam.openai.api.exception.OpenAIAPIException import com.aallam.openai.api.thread.Thread import com.aallam.openai.api.thread.ThreadId import com.aallam.openai.api.thread.ThreadRequest import com.aallam.openai.client.Threads +import com.aallam.openai.client.internal.extension.beta import com.aallam.openai.client.internal.extension.requestOptions import com.aallam.openai.client.internal.http.HttpRequester import com.aallam.openai.client.internal.http.perform @@ -31,9 +31,8 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { setBody(req) contentType(ContentType.Application.Json) } - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) }.body() } } @@ -44,9 +43,8 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { return requester.perform { it.get { url(path = "${ApiPath.Threads}/${id.id}") - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) } }.body() } catch (e: OpenAIAPIException) { @@ -69,9 +67,8 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { url(path = "${ApiPath.Threads}/${id.id}") setBody(request) contentType(ContentType.Application.Json) - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) }.body() } } @@ -81,9 +78,8 @@ internal class ThreadsApi(val requester: HttpRequester) : Threads { val response = requester.perform { it.delete { url(path = "${ApiPath.Threads}/${id.id}") - requestOptions( - requestOptions.addAssistantsBeta() - ) + beta("assistants", 2) + requestOptions(requestOptions) } } return when (response.status) { diff --git a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt index 97cc8203..fbd56276 100644 --- a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt +++ b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/core/RequestOptions.kt @@ -15,9 +15,3 @@ public data class RequestOptions( public val urlParameters: Map = emptyMap(), public val timeout: Timeout? = null, ) - -public fun RequestOptions?.addAssistantsBeta(): RequestOptions { - val betaVersionHeaderPair = Pair("OpenAI-Beta", "assistants=v2") - return this?.copy(headers = this.headers.plus(betaVersionHeaderPair)) - ?: RequestOptions(headers = mapOf(betaVersionHeaderPair)) -} \ No newline at end of file From c1c6972cbb13ec65b6dcbb1bf1c7e010bd007a0b Mon Sep 17 00:00:00 2001 From: SF93 Date: Sun, 16 Jun 2024 14:24:28 +0900 Subject: [PATCH 4/4] forgotten removal of file_ids from message --- .../com.aallam.openai.api/message/Message.kt | 6 ------ .../message/MessageRequest.kt | 15 --------------- 2 files changed, 21 deletions(-) diff --git a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/Message.kt b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/Message.kt index df52d6fa..0b146f09 100644 --- a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/Message.kt +++ b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/Message.kt @@ -52,12 +52,6 @@ public data class Message( */ @SerialName("run_id") val runId: RunId? = null, - /** - * A list of file IDs that the assistant should use. Useful for tools like retrieval - * and code_interpreter that can access files. A maximum of 10 files can be attached to a message. - */ - @SerialName("file_ids") val fileIds: List, - /** * Set of 16 key-value pairs that can be attached to an object. This can be useful for storing * additional information about the object in a structured format. Keys can be a maximum of 64 characters diff --git a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/MessageRequest.kt b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/MessageRequest.kt index aa57c948..09f2e48d 100644 --- a/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/MessageRequest.kt +++ b/openai-core/src/commonMain/kotlin/com.aallam.openai.api/message/MessageRequest.kt @@ -22,13 +22,6 @@ public class MessageRequest( */ @SerialName("content") public val content: String, - /** - * A list of File IDs that the message should use. - * There can be a maximum of 10 files attached to a message. - * Useful for tools like retrieval and code interpreter that can access and use files. - */ - @SerialName("file_ids") public val fileIds: List? = null, - /** * Set of 16 key-value pairs that can be attached to an object. * This can be useful for storing additional information about the object in a structured format. @@ -59,13 +52,6 @@ public class MessageRequestBuilder { */ public var content: String? = null - /** - * A list of File IDs that the message should use. - * There can be a maximum of 10 files attached to a message. - * Useful for tools like retrieval and code interpreter that can access and use files. - */ - public var fileIds: List? = null - /** * Set of 16 key-value pairs that can be attached to an object. * This can be useful for storing additional information about the object in a structured format. @@ -76,7 +62,6 @@ public class MessageRequestBuilder { public fun build(): MessageRequest = MessageRequest( role = requireNotNull(role) { "role is required" }, content = requireNotNull(content) { "content is required" }, - fileIds = fileIds, metadata = metadata ) }