main
1# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
3from __future__ import annotations
4
5from typing import Any, cast
6from typing_extensions import Literal
7
8import httpx
9
10from .... import _legacy_response
11from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
12from ...._utils import maybe_transform
13from ...._compat import cached_property
14from ...._resource import SyncAPIResource, AsyncAPIResource
15from ...._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
16from ....pagination import SyncConversationCursorPage, AsyncConversationCursorPage
17from ...._base_client import AsyncPaginator, make_request_options
18from ....types.beta.chatkit import thread_list_params, thread_list_items_params
19from ....types.beta.chatkit.chatkit_thread import ChatKitThread
20from ....types.beta.chatkit.thread_delete_response import ThreadDeleteResponse
21from ....types.beta.chatkit.chatkit_thread_item_list import Data
22
23__all__ = ["Threads", "AsyncThreads"]
24
25
26class Threads(SyncAPIResource):
27 @cached_property
28 def with_raw_response(self) -> ThreadsWithRawResponse:
29 """
30 This property can be used as a prefix for any HTTP method call to return
31 the raw response object instead of the parsed content.
32
33 For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers
34 """
35 return ThreadsWithRawResponse(self)
36
37 @cached_property
38 def with_streaming_response(self) -> ThreadsWithStreamingResponse:
39 """
40 An alternative to `.with_raw_response` that doesn't eagerly read the response body.
41
42 For more information, see https://www.github.com/openai/openai-python#with_streaming_response
43 """
44 return ThreadsWithStreamingResponse(self)
45
46 def retrieve(
47 self,
48 thread_id: str,
49 *,
50 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
51 # The extra values given here take precedence over values defined on the client or passed to this method.
52 extra_headers: Headers | None = None,
53 extra_query: Query | None = None,
54 extra_body: Body | None = None,
55 timeout: float | httpx.Timeout | None | NotGiven = not_given,
56 ) -> ChatKitThread:
57 """
58 Retrieve a ChatKit thread
59
60 Args:
61 extra_headers: Send extra headers
62
63 extra_query: Add additional query parameters to the request
64
65 extra_body: Add additional JSON properties to the request
66
67 timeout: Override the client-level default timeout for this request, in seconds
68 """
69 if not thread_id:
70 raise ValueError(f"Expected a non-empty value for `thread_id` but received {thread_id!r}")
71 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
72 return self._get(
73 f"/chatkit/threads/{thread_id}",
74 options=make_request_options(
75 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
76 ),
77 cast_to=ChatKitThread,
78 )
79
80 def list(
81 self,
82 *,
83 after: str | Omit = omit,
84 before: str | Omit = omit,
85 limit: int | Omit = omit,
86 order: Literal["asc", "desc"] | Omit = omit,
87 user: str | Omit = omit,
88 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
89 # The extra values given here take precedence over values defined on the client or passed to this method.
90 extra_headers: Headers | None = None,
91 extra_query: Query | None = None,
92 extra_body: Body | None = None,
93 timeout: float | httpx.Timeout | None | NotGiven = not_given,
94 ) -> SyncConversationCursorPage[ChatKitThread]:
95 """
96 List ChatKit threads
97
98 Args:
99 after: List items created after this thread item ID. Defaults to null for the first
100 page.
101
102 before: List items created before this thread item ID. Defaults to null for the newest
103 results.
104
105 limit: Maximum number of thread items to return. Defaults to 20.
106
107 order: Sort order for results by creation time. Defaults to `desc`.
108
109 user: Filter threads that belong to this user identifier. Defaults to null to return
110 all users.
111
112 extra_headers: Send extra headers
113
114 extra_query: Add additional query parameters to the request
115
116 extra_body: Add additional JSON properties to the request
117
118 timeout: Override the client-level default timeout for this request, in seconds
119 """
120 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
121 return self._get_api_list(
122 "/chatkit/threads",
123 page=SyncConversationCursorPage[ChatKitThread],
124 options=make_request_options(
125 extra_headers=extra_headers,
126 extra_query=extra_query,
127 extra_body=extra_body,
128 timeout=timeout,
129 query=maybe_transform(
130 {
131 "after": after,
132 "before": before,
133 "limit": limit,
134 "order": order,
135 "user": user,
136 },
137 thread_list_params.ThreadListParams,
138 ),
139 ),
140 model=ChatKitThread,
141 )
142
143 def delete(
144 self,
145 thread_id: str,
146 *,
147 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
148 # The extra values given here take precedence over values defined on the client or passed to this method.
149 extra_headers: Headers | None = None,
150 extra_query: Query | None = None,
151 extra_body: Body | None = None,
152 timeout: float | httpx.Timeout | None | NotGiven = not_given,
153 ) -> ThreadDeleteResponse:
154 """
155 Delete a ChatKit thread
156
157 Args:
158 extra_headers: Send extra headers
159
160 extra_query: Add additional query parameters to the request
161
162 extra_body: Add additional JSON properties to the request
163
164 timeout: Override the client-level default timeout for this request, in seconds
165 """
166 if not thread_id:
167 raise ValueError(f"Expected a non-empty value for `thread_id` but received {thread_id!r}")
168 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
169 return self._delete(
170 f"/chatkit/threads/{thread_id}",
171 options=make_request_options(
172 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
173 ),
174 cast_to=ThreadDeleteResponse,
175 )
176
177 def list_items(
178 self,
179 thread_id: str,
180 *,
181 after: str | Omit = omit,
182 before: str | Omit = omit,
183 limit: int | Omit = omit,
184 order: Literal["asc", "desc"] | Omit = omit,
185 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
186 # The extra values given here take precedence over values defined on the client or passed to this method.
187 extra_headers: Headers | None = None,
188 extra_query: Query | None = None,
189 extra_body: Body | None = None,
190 timeout: float | httpx.Timeout | None | NotGiven = not_given,
191 ) -> SyncConversationCursorPage[Data]:
192 """
193 List ChatKit thread items
194
195 Args:
196 after: List items created after this thread item ID. Defaults to null for the first
197 page.
198
199 before: List items created before this thread item ID. Defaults to null for the newest
200 results.
201
202 limit: Maximum number of thread items to return. Defaults to 20.
203
204 order: Sort order for results by creation time. Defaults to `desc`.
205
206 extra_headers: Send extra headers
207
208 extra_query: Add additional query parameters to the request
209
210 extra_body: Add additional JSON properties to the request
211
212 timeout: Override the client-level default timeout for this request, in seconds
213 """
214 if not thread_id:
215 raise ValueError(f"Expected a non-empty value for `thread_id` but received {thread_id!r}")
216 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
217 return self._get_api_list(
218 f"/chatkit/threads/{thread_id}/items",
219 page=SyncConversationCursorPage[Data],
220 options=make_request_options(
221 extra_headers=extra_headers,
222 extra_query=extra_query,
223 extra_body=extra_body,
224 timeout=timeout,
225 query=maybe_transform(
226 {
227 "after": after,
228 "before": before,
229 "limit": limit,
230 "order": order,
231 },
232 thread_list_items_params.ThreadListItemsParams,
233 ),
234 ),
235 model=cast(Any, Data), # Union types cannot be passed in as arguments in the type system
236 )
237
238
239class AsyncThreads(AsyncAPIResource):
240 @cached_property
241 def with_raw_response(self) -> AsyncThreadsWithRawResponse:
242 """
243 This property can be used as a prefix for any HTTP method call to return
244 the raw response object instead of the parsed content.
245
246 For more information, see https://www.github.com/openai/openai-python#accessing-raw-response-data-eg-headers
247 """
248 return AsyncThreadsWithRawResponse(self)
249
250 @cached_property
251 def with_streaming_response(self) -> AsyncThreadsWithStreamingResponse:
252 """
253 An alternative to `.with_raw_response` that doesn't eagerly read the response body.
254
255 For more information, see https://www.github.com/openai/openai-python#with_streaming_response
256 """
257 return AsyncThreadsWithStreamingResponse(self)
258
259 async def retrieve(
260 self,
261 thread_id: str,
262 *,
263 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
264 # The extra values given here take precedence over values defined on the client or passed to this method.
265 extra_headers: Headers | None = None,
266 extra_query: Query | None = None,
267 extra_body: Body | None = None,
268 timeout: float | httpx.Timeout | None | NotGiven = not_given,
269 ) -> ChatKitThread:
270 """
271 Retrieve a ChatKit thread
272
273 Args:
274 extra_headers: Send extra headers
275
276 extra_query: Add additional query parameters to the request
277
278 extra_body: Add additional JSON properties to the request
279
280 timeout: Override the client-level default timeout for this request, in seconds
281 """
282 if not thread_id:
283 raise ValueError(f"Expected a non-empty value for `thread_id` but received {thread_id!r}")
284 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
285 return await self._get(
286 f"/chatkit/threads/{thread_id}",
287 options=make_request_options(
288 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
289 ),
290 cast_to=ChatKitThread,
291 )
292
293 def list(
294 self,
295 *,
296 after: str | Omit = omit,
297 before: str | Omit = omit,
298 limit: int | Omit = omit,
299 order: Literal["asc", "desc"] | Omit = omit,
300 user: str | Omit = omit,
301 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
302 # The extra values given here take precedence over values defined on the client or passed to this method.
303 extra_headers: Headers | None = None,
304 extra_query: Query | None = None,
305 extra_body: Body | None = None,
306 timeout: float | httpx.Timeout | None | NotGiven = not_given,
307 ) -> AsyncPaginator[ChatKitThread, AsyncConversationCursorPage[ChatKitThread]]:
308 """
309 List ChatKit threads
310
311 Args:
312 after: List items created after this thread item ID. Defaults to null for the first
313 page.
314
315 before: List items created before this thread item ID. Defaults to null for the newest
316 results.
317
318 limit: Maximum number of thread items to return. Defaults to 20.
319
320 order: Sort order for results by creation time. Defaults to `desc`.
321
322 user: Filter threads that belong to this user identifier. Defaults to null to return
323 all users.
324
325 extra_headers: Send extra headers
326
327 extra_query: Add additional query parameters to the request
328
329 extra_body: Add additional JSON properties to the request
330
331 timeout: Override the client-level default timeout for this request, in seconds
332 """
333 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
334 return self._get_api_list(
335 "/chatkit/threads",
336 page=AsyncConversationCursorPage[ChatKitThread],
337 options=make_request_options(
338 extra_headers=extra_headers,
339 extra_query=extra_query,
340 extra_body=extra_body,
341 timeout=timeout,
342 query=maybe_transform(
343 {
344 "after": after,
345 "before": before,
346 "limit": limit,
347 "order": order,
348 "user": user,
349 },
350 thread_list_params.ThreadListParams,
351 ),
352 ),
353 model=ChatKitThread,
354 )
355
356 async def delete(
357 self,
358 thread_id: str,
359 *,
360 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
361 # The extra values given here take precedence over values defined on the client or passed to this method.
362 extra_headers: Headers | None = None,
363 extra_query: Query | None = None,
364 extra_body: Body | None = None,
365 timeout: float | httpx.Timeout | None | NotGiven = not_given,
366 ) -> ThreadDeleteResponse:
367 """
368 Delete a ChatKit thread
369
370 Args:
371 extra_headers: Send extra headers
372
373 extra_query: Add additional query parameters to the request
374
375 extra_body: Add additional JSON properties to the request
376
377 timeout: Override the client-level default timeout for this request, in seconds
378 """
379 if not thread_id:
380 raise ValueError(f"Expected a non-empty value for `thread_id` but received {thread_id!r}")
381 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
382 return await self._delete(
383 f"/chatkit/threads/{thread_id}",
384 options=make_request_options(
385 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
386 ),
387 cast_to=ThreadDeleteResponse,
388 )
389
390 def list_items(
391 self,
392 thread_id: str,
393 *,
394 after: str | Omit = omit,
395 before: str | Omit = omit,
396 limit: int | Omit = omit,
397 order: Literal["asc", "desc"] | Omit = omit,
398 # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
399 # The extra values given here take precedence over values defined on the client or passed to this method.
400 extra_headers: Headers | None = None,
401 extra_query: Query | None = None,
402 extra_body: Body | None = None,
403 timeout: float | httpx.Timeout | None | NotGiven = not_given,
404 ) -> AsyncPaginator[Data, AsyncConversationCursorPage[Data]]:
405 """
406 List ChatKit thread items
407
408 Args:
409 after: List items created after this thread item ID. Defaults to null for the first
410 page.
411
412 before: List items created before this thread item ID. Defaults to null for the newest
413 results.
414
415 limit: Maximum number of thread items to return. Defaults to 20.
416
417 order: Sort order for results by creation time. Defaults to `desc`.
418
419 extra_headers: Send extra headers
420
421 extra_query: Add additional query parameters to the request
422
423 extra_body: Add additional JSON properties to the request
424
425 timeout: Override the client-level default timeout for this request, in seconds
426 """
427 if not thread_id:
428 raise ValueError(f"Expected a non-empty value for `thread_id` but received {thread_id!r}")
429 extra_headers = {"OpenAI-Beta": "chatkit_beta=v1", **(extra_headers or {})}
430 return self._get_api_list(
431 f"/chatkit/threads/{thread_id}/items",
432 page=AsyncConversationCursorPage[Data],
433 options=make_request_options(
434 extra_headers=extra_headers,
435 extra_query=extra_query,
436 extra_body=extra_body,
437 timeout=timeout,
438 query=maybe_transform(
439 {
440 "after": after,
441 "before": before,
442 "limit": limit,
443 "order": order,
444 },
445 thread_list_items_params.ThreadListItemsParams,
446 ),
447 ),
448 model=cast(Any, Data), # Union types cannot be passed in as arguments in the type system
449 )
450
451
452class ThreadsWithRawResponse:
453 def __init__(self, threads: Threads) -> None:
454 self._threads = threads
455
456 self.retrieve = _legacy_response.to_raw_response_wrapper(
457 threads.retrieve,
458 )
459 self.list = _legacy_response.to_raw_response_wrapper(
460 threads.list,
461 )
462 self.delete = _legacy_response.to_raw_response_wrapper(
463 threads.delete,
464 )
465 self.list_items = _legacy_response.to_raw_response_wrapper(
466 threads.list_items,
467 )
468
469
470class AsyncThreadsWithRawResponse:
471 def __init__(self, threads: AsyncThreads) -> None:
472 self._threads = threads
473
474 self.retrieve = _legacy_response.async_to_raw_response_wrapper(
475 threads.retrieve,
476 )
477 self.list = _legacy_response.async_to_raw_response_wrapper(
478 threads.list,
479 )
480 self.delete = _legacy_response.async_to_raw_response_wrapper(
481 threads.delete,
482 )
483 self.list_items = _legacy_response.async_to_raw_response_wrapper(
484 threads.list_items,
485 )
486
487
488class ThreadsWithStreamingResponse:
489 def __init__(self, threads: Threads) -> None:
490 self._threads = threads
491
492 self.retrieve = to_streamed_response_wrapper(
493 threads.retrieve,
494 )
495 self.list = to_streamed_response_wrapper(
496 threads.list,
497 )
498 self.delete = to_streamed_response_wrapper(
499 threads.delete,
500 )
501 self.list_items = to_streamed_response_wrapper(
502 threads.list_items,
503 )
504
505
506class AsyncThreadsWithStreamingResponse:
507 def __init__(self, threads: AsyncThreads) -> None:
508 self._threads = threads
509
510 self.retrieve = async_to_streamed_response_wrapper(
511 threads.retrieve,
512 )
513 self.list = async_to_streamed_response_wrapper(
514 threads.list,
515 )
516 self.delete = async_to_streamed_response_wrapper(
517 threads.delete,
518 )
519 self.list_items = async_to_streamed_response_wrapper(
520 threads.list_items,
521 )