Skip to content

Commit 73f57dd

Browse files
aallamkdman98
andauthored
feat(assistants): update API to v2 (#354)
Co-authored-by: SF93 <kdman98@naver.com>
1 parent 33e6e3d commit 73f57dd

File tree

22 files changed

+297
-346
lines changed

22 files changed

+297
-346
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
## Unreleased
22

3+
### Added
4+
- **assistant**: added feature for assistant beta-v2, and option for version selection (thanks @kdman98)
5+
36
### Added
47
- **vector-stores**: add vector stores APIs (#324)
58
- **batch**: add batch APIs (#334)

openai-client/src/commonMain/kotlin/com.aallam.openai.client/Assistants.kt

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.aallam.openai.client
22

33
import com.aallam.openai.api.BetaOpenAI
44
import com.aallam.openai.api.assistant.Assistant
5-
import com.aallam.openai.api.assistant.AssistantFile
65
import com.aallam.openai.api.assistant.AssistantId
76
import com.aallam.openai.api.assistant.AssistantRequest
87
import com.aallam.openai.api.core.RequestOptions
@@ -72,66 +71,4 @@ public interface Assistants {
7271
before: AssistantId? = null,
7372
requestOptions: RequestOptions? = null
7473
): List<Assistant>
75-
76-
/**
77-
* Create an assistant file by attaching a File to an assistant.
78-
*
79-
* @param assistantId the ID of the assistant for which to create a File.
80-
* @param fileId a File ID (with purpose="assistants") that the assistant should use.
81-
* Useful for tools like retrieval and code interpreter that can access files.
82-
*/
83-
@BetaOpenAI
84-
public suspend fun createFile(
85-
assistantId: AssistantId,
86-
fileId: FileId,
87-
requestOptions: RequestOptions? = null
88-
): AssistantFile
89-
90-
/**
91-
* Retrieves an [AssistantFile].
92-
*
93-
* @param assistantId the ID of the assistant who the file belongs to.
94-
* @param fileId the ID of the file we're getting.
95-
*/
96-
@BetaOpenAI
97-
public suspend fun file(
98-
assistantId: AssistantId,
99-
fileId: FileId,
100-
requestOptions: RequestOptions? = null
101-
): AssistantFile
102-
103-
/**
104-
* Delete an assistant file.
105-
*
106-
* @param assistantId the ID of the assistant that the file belongs to.
107-
* @param fileId the ID of the file to delete.
108-
* @param requestOptions request options.
109-
*/
110-
@BetaOpenAI
111-
public suspend fun delete(assistantId: AssistantId, fileId: FileId, requestOptions: RequestOptions? = null): Boolean
112-
113-
/**
114-
* Returns a list of assistant files.
115-
*
116-
* @param id the ID of the assistant the file belongs to.
117-
* @param limit a limit on the number of objects to be returned. The Limit can range between 1 and 100, and the default is 20.
118-
* @param order sort order by the `createdAt` timestamp of the objects. [SortOrder.Ascending] for ascending order
119-
* and [SortOrder.Descending] for descending order.
120-
* @param after a cursor for use in pagination. `after` is an object ID that defines your place in the list.
121-
* For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can
122-
* include `after = FileId("obj_foo")` in order to fetch the next page of the list.
123-
* @param before a cursor for use in pagination. Before is an object ID that defines your place in the list.
124-
* For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call can
125-
* include `before = FileId("obj_foo")` in order to fetch the previous page of the list.
126-
* @param requestOptions request options.
127-
*/
128-
@BetaOpenAI
129-
public suspend fun files(
130-
id: AssistantId,
131-
limit: Int? = null,
132-
order: SortOrder? = null,
133-
after: FileId? = null,
134-
before: FileId? = null,
135-
requestOptions: RequestOptions? = null
136-
): List<AssistantFile>
13774
}

openai-client/src/commonMain/kotlin/com.aallam.openai.client/Messages.kt

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.aallam.openai.api.core.RequestOptions
55
import com.aallam.openai.api.core.SortOrder
66
import com.aallam.openai.api.file.FileId
77
import com.aallam.openai.api.message.Message
8-
import com.aallam.openai.api.message.MessageFile
98
import com.aallam.openai.api.message.MessageId
109
import com.aallam.openai.api.message.MessageRequest
1110
import com.aallam.openai.api.thread.ThreadId
@@ -86,46 +85,4 @@ public interface Messages {
8685
before: MessageId? = null,
8786
requestOptions: RequestOptions? = null
8887
): List<Message>
89-
90-
/**
91-
* Retrieves a message file.
92-
*
93-
* @param threadId the ID of the thread to which the message and File belong
94-
* @param messageId the ID of the message the file belongs to
95-
* @param fileId the ID of the file being retrieved
96-
* @param requestOptions request options.
97-
*/
98-
@BetaOpenAI
99-
public suspend fun messageFile(
100-
threadId: ThreadId,
101-
messageId: MessageId,
102-
fileId: FileId,
103-
requestOptions: RequestOptions? = null
104-
): MessageFile
105-
106-
/**
107-
* Returns a list of message files.
108-
*
109-
* @param threadId the ID of the thread to which the message and File belong to
110-
* @param messageId the ID of the message the file belongs to
111-
* @param limit a limit on the number of objects to be returned
112-
* @param order sort order by the `created_at` timestamp of the objects
113-
* @param after a cursor for use in pagination. [after] is an object ID that defines your place in the list.
114-
* For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call
115-
* can include `after = FileId("obj_foo")` in order to fetch the next page of the list.
116-
* @param before a cursor for use in pagination. [before] is an object ID that defines your place in the list.
117-
* For instance, if you make a list request and receive 100 objects, ending with `obj_foo`, your subsequent call
118-
* can include `before = FileId("obj_foo")` in order to fetch the previous page of the list.
119-
* @param requestOptions request options.
120-
*/
121-
@BetaOpenAI
122-
public suspend fun messageFiles(
123-
threadId: ThreadId,
124-
messageId: MessageId,
125-
limit: Int? = null,
126-
order: SortOrder? = null,
127-
after: FileId? = null,
128-
before: FileId? = null,
129-
requestOptions: RequestOptions? = null
130-
): List<MessageFile>
13188
}

openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/AssistantsApi.kt

Lines changed: 6 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,9 @@ package com.aallam.openai.client.internal.api
22

33
import com.aallam.openai.api.BetaOpenAI
44
import com.aallam.openai.api.assistant.Assistant
5-
import com.aallam.openai.api.assistant.AssistantFile
65
import com.aallam.openai.api.assistant.AssistantId
76
import com.aallam.openai.api.assistant.AssistantRequest
8-
import com.aallam.openai.api.core.DeleteResponse
9-
import com.aallam.openai.api.core.ListResponse
10-
import com.aallam.openai.api.core.RequestOptions
11-
import com.aallam.openai.api.core.SortOrder
7+
import com.aallam.openai.api.core.*
128
import com.aallam.openai.api.exception.OpenAIAPIException
139
import com.aallam.openai.api.file.FileId
1410
import com.aallam.openai.client.Assistants
@@ -31,7 +27,7 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants {
3127
url(path = ApiPath.Assistants)
3228
setBody(request)
3329
contentType(ContentType.Application.Json)
34-
beta("assistants", 1)
30+
beta("assistants", 2)
3531
requestOptions(requestOptions)
3632
}.body()
3733
}
@@ -43,7 +39,7 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants {
4339
return requester.perform<HttpResponse> {
4440
it.get {
4541
url(path = "${ApiPath.Assistants}/${id.id}")
46-
beta("assistants", 1)
42+
beta("assistants", 2)
4743
requestOptions(requestOptions)
4844
}
4945
}.body()
@@ -64,7 +60,7 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants {
6460
url(path = "${ApiPath.Assistants}/${id.id}")
6561
setBody(request)
6662
contentType(ContentType.Application.Json)
67-
beta("assistants", 1)
63+
beta("assistants", 2)
6864
requestOptions(requestOptions)
6965
}.body()
7066
}
@@ -75,7 +71,7 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants {
7571
val response = requester.perform<HttpResponse> {
7672
it.delete {
7773
url(path = "${ApiPath.Assistants}/${id.id}")
78-
beta("assistants", 1)
74+
beta("assistants", 2)
7975
requestOptions(requestOptions)
8076
}
8177
}
@@ -85,22 +81,6 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants {
8581
}
8682
}
8783

88-
@BetaOpenAI
89-
override suspend fun delete(assistantId: AssistantId, fileId: FileId, requestOptions: RequestOptions?): Boolean {
90-
val response = requester.perform<HttpResponse> {
91-
it.delete {
92-
url(path = "${ApiPath.Assistants}/${assistantId.id}/files/${fileId.id}")
93-
beta("assistants", 1)
94-
requestOptions(requestOptions)
95-
}
96-
}
97-
return when (response.status) {
98-
HttpStatusCode.NotFound -> false
99-
else -> response.body<DeleteResponse>().deleted
100-
}
101-
}
102-
103-
10484
@BetaOpenAI
10585
override suspend fun assistants(
10686
limit: Int?,
@@ -118,64 +98,7 @@ internal class AssistantsApi(val requester: HttpRequester) : Assistants {
11898
after?.let { parameter("after", it.id) }
11999
before?.let { parameter("before", it.id) }
120100
}
121-
beta("assistants", 1)
122-
requestOptions(requestOptions)
123-
}.body()
124-
}
125-
}
126-
127-
@BetaOpenAI
128-
override suspend fun createFile(
129-
assistantId: AssistantId,
130-
fileId: FileId,
131-
requestOptions: RequestOptions?
132-
): AssistantFile {
133-
val request = buildJsonObject { put("file", fileId.id) }
134-
return requester.perform {
135-
it.post {
136-
url(path = "${ApiPath.Assistants}/${assistantId.id}/files")
137-
setBody(request)
138-
contentType(ContentType.Application.Json)
139-
beta("assistants", 1)
140-
requestOptions(requestOptions)
141-
}.body()
142-
}
143-
}
144-
145-
@BetaOpenAI
146-
override suspend fun file(
147-
assistantId: AssistantId,
148-
fileId: FileId,
149-
requestOptions: RequestOptions?
150-
): AssistantFile {
151-
return requester.perform {
152-
it.get {
153-
url(path = "${ApiPath.Assistants}/${assistantId.id}/files/${fileId.id}")
154-
beta("assistants", 1)
155-
requestOptions(requestOptions)
156-
}
157-
}
158-
}
159-
160-
@BetaOpenAI
161-
override suspend fun files(
162-
id: AssistantId,
163-
limit: Int?,
164-
order: SortOrder?,
165-
after: FileId?,
166-
before: FileId?,
167-
requestOptions: RequestOptions?
168-
): List<AssistantFile> {
169-
return requester.perform<ListResponse<AssistantFile>> { client ->
170-
client.get {
171-
url {
172-
path("${ApiPath.Assistants}/${id.id}/files")
173-
limit?.let { parameter("limit", it) }
174-
order?.let { parameter("order", it.order) }
175-
after?.let { parameter("after", it.id) }
176-
before?.let { parameter("before", it.id) }
177-
}
178-
beta("assistants", 1)
101+
beta("assistants", 2)
179102
requestOptions(requestOptions)
180103
}.body()
181104
}

openai-client/src/commonMain/kotlin/com.aallam.openai.client/internal/api/MessagesApi.kt

Lines changed: 10 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ package com.aallam.openai.client.internal.api
33
import com.aallam.openai.api.core.PaginatedList
44
import com.aallam.openai.api.core.RequestOptions
55
import com.aallam.openai.api.core.SortOrder
6-
import com.aallam.openai.api.file.FileId
76
import com.aallam.openai.api.message.Message
8-
import com.aallam.openai.api.message.MessageFile
97
import com.aallam.openai.api.message.MessageId
108
import com.aallam.openai.api.message.MessageRequest
119
import com.aallam.openai.api.thread.ThreadId
@@ -29,8 +27,10 @@ internal class MessagesApi(val requester: HttpRequester) : Messages {
2927
url(path = "${ApiPath.Threads}/${threadId.id}/messages")
3028
setBody(request)
3129
contentType(ContentType.Application.Json)
32-
beta("assistants", 1)
33-
requestOptions(requestOptions)
30+
beta("assistants", 2)
31+
requestOptions(
32+
requestOptions
33+
)
3434
}.body()
3535
}
3636
}
@@ -39,8 +39,10 @@ internal class MessagesApi(val requester: HttpRequester) : Messages {
3939
return requester.perform {
4040
it.get {
4141
url(path = "${ApiPath.Threads}/${threadId.id}/messages/${messageId.id}")
42-
beta("assistants", 1)
43-
requestOptions(requestOptions)
42+
beta("assistants", 2)
43+
requestOptions(
44+
requestOptions
45+
)
4446
}.body()
4547
}
4648
}
@@ -58,7 +60,7 @@ internal class MessagesApi(val requester: HttpRequester) : Messages {
5860
setBody(mapOf("metadata" to meta))
5961
contentType(ContentType.Application.Json)
6062
}
61-
beta("assistants", 1)
63+
beta("assistants", 2)
6264
requestOptions(requestOptions)
6365
}.body()
6466
}
@@ -80,45 +82,7 @@ internal class MessagesApi(val requester: HttpRequester) : Messages {
8082
before?.let { value -> parameter("before", value.id) }
8183
after?.let { value -> parameter("after", value.id) }
8284
}
83-
beta("assistants", 1)
84-
requestOptions(requestOptions)
85-
}.body()
86-
}
87-
}
88-
89-
override suspend fun messageFile(
90-
threadId: ThreadId,
91-
messageId: MessageId,
92-
fileId: FileId,
93-
requestOptions: RequestOptions?
94-
): MessageFile {
95-
return requester.perform {
96-
it.get {
97-
url(path = "${ApiPath.Threads}/${threadId.id}/messages/${messageId.id}/files/${fileId.id}")
98-
beta("assistants", 1)
99-
requestOptions(requestOptions)
100-
}.body()
101-
}
102-
}
103-
104-
override suspend fun messageFiles(
105-
threadId: ThreadId,
106-
messageId: MessageId,
107-
limit: Int?,
108-
order: SortOrder?,
109-
after: FileId?,
110-
before: FileId?,
111-
requestOptions: RequestOptions?
112-
): PaginatedList<MessageFile> {
113-
return requester.perform {
114-
it.get {
115-
url(path = "${ApiPath.Threads}/${threadId.id}/messages/${messageId.id}/files") {
116-
limit?.let { value -> parameter("limit", value) }
117-
order?.let { value -> parameter("order", value.order) }
118-
before?.let { value -> parameter("before", value.id) }
119-
after?.let { value -> parameter("after", value.id) }
120-
}
121-
beta("assistants", 1)
85+
beta("assistants", 2)
12286
requestOptions(requestOptions)
12387
}.body()
12488
}

0 commit comments

Comments
 (0)