letta-client 1.0.0a10__py3-none-any.whl → 1.0.0a11__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of letta-client might be problematic. Click here for more details.

Files changed (51) hide show
  1. letta_client/_client.py +5 -1
  2. letta_client/_streaming.py +40 -2
  3. letta_client/_version.py +1 -1
  4. letta_client/resources/agents/blocks.py +15 -17
  5. letta_client/resources/agents/files.py +10 -13
  6. letta_client/resources/agents/folders.py +10 -13
  7. letta_client/resources/agents/messages.py +14 -4
  8. letta_client/resources/agents/tools.py +10 -13
  9. letta_client/resources/archives.py +10 -12
  10. letta_client/resources/batches/batches.py +10 -12
  11. letta_client/resources/batches/messages.py +11 -14
  12. letta_client/resources/blocks/blocks.py +19 -22
  13. letta_client/resources/folders/agents.py +10 -13
  14. letta_client/resources/folders/files.py +9 -12
  15. letta_client/resources/folders/folders.py +10 -12
  16. letta_client/resources/identities/blocks.py +7 -7
  17. letta_client/resources/identities/identities.py +10 -12
  18. letta_client/resources/runs/runs.py +11 -13
  19. letta_client/resources/tags.py +10 -13
  20. letta_client/resources/tools.py +10 -12
  21. letta_client/types/__init__.py +7 -4
  22. letta_client/types/agents/__init__.py +2 -3
  23. letta_client/types/agents/file_list_response.py +14 -3
  24. letta_client/types/agents/folder_list_response.py +7 -3
  25. letta_client/types/agents/letta_streaming_response.py +70 -0
  26. letta_client/types/agents/tool_list_response.py +10 -0
  27. letta_client/types/archive_list_response.py +10 -0
  28. letta_client/types/batch_list_response.py +10 -0
  29. letta_client/types/batches/__init__.py +1 -0
  30. letta_client/types/batches/message_list_response.py +12 -0
  31. letta_client/types/{block_list_response.py → block_response.py} +5 -5
  32. letta_client/types/folder_list_response.py +10 -0
  33. letta_client/types/folders/agent_list_response.py +2 -1
  34. letta_client/types/folders/file_list_response.py +7 -4
  35. letta_client/types/identities/__init__.py +0 -1
  36. letta_client/types/identity_list_response.py +10 -0
  37. letta_client/types/run_list_response.py +10 -0
  38. letta_client/types/tag_list_response.py +2 -1
  39. letta_client/types/tool.py +25 -25
  40. letta_client/types/tool_list_response.py +10 -0
  41. {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a11.dist-info}/METADATA +1 -1
  42. {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a11.dist-info}/RECORD +44 -42
  43. letta_client/types/agents/block_list_response.py +0 -63
  44. letta_client/types/agents/block_modify_response.py +0 -63
  45. letta_client/types/agents/block_retrieve_response.py +0 -63
  46. letta_client/types/block_create_response.py +0 -63
  47. letta_client/types/block_modify_response.py +0 -63
  48. letta_client/types/block_retrieve_response.py +0 -63
  49. letta_client/types/identities/block_list_response.py +0 -63
  50. {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a11.dist-info}/WHEEL +0 -0
  51. {letta_client-1.0.0a10.dist-info → letta_client-1.0.0a11.dist-info}/licenses/LICENSE +0 -0
letta_client/_client.py CHANGED
@@ -64,7 +64,7 @@ __all__ = [
64
64
  ]
65
65
 
66
66
  ENVIRONMENTS: Dict[str, str] = {
67
- "cloud": "https://app.letta.com",
67
+ "cloud": "https://api.letta.com",
68
68
  "local": "http://localhost:8283",
69
69
  }
70
70
 
@@ -164,6 +164,8 @@ class Letta(SyncAPIClient):
164
164
  _strict_response_validation=_strict_response_validation,
165
165
  )
166
166
 
167
+ self._default_stream_cls = Stream
168
+
167
169
  self.archives = archives.ArchivesResource(self)
168
170
  self.tools = tools.ToolsResource(self)
169
171
  self.folders = folders.FoldersResource(self)
@@ -401,6 +403,8 @@ class AsyncLetta(AsyncAPIClient):
401
403
  _strict_response_validation=_strict_response_validation,
402
404
  )
403
405
 
406
+ self._default_stream_cls = AsyncStream
407
+
404
408
  self.archives = archives.AsyncArchivesResource(self)
405
409
  self.tools = tools.AsyncToolsResource(self)
406
410
  self.folders = folders.AsyncFoldersResource(self)
@@ -55,7 +55,26 @@ class Stream(Generic[_T]):
55
55
  iterator = self._iter_events()
56
56
 
57
57
  for sse in iterator:
58
- yield process_data(data=sse.json(), cast_to=cast_to, response=response)
58
+ if sse.data.startswith("[DONE]"):
59
+ break
60
+
61
+ if sse.event == "error":
62
+ body = sse.data
63
+
64
+ try:
65
+ body = sse.json()
66
+ err_msg = f"{body}"
67
+ except Exception:
68
+ err_msg = sse.data or f"Error code: {response.status_code}"
69
+
70
+ raise self._client._make_status_error(
71
+ err_msg,
72
+ body=body,
73
+ response=self.response,
74
+ )
75
+
76
+ if sse.event is None:
77
+ yield process_data(data=sse.json(), cast_to=cast_to, response=response)
59
78
 
60
79
  # Ensure the entire stream is consumed
61
80
  for _sse in iterator:
@@ -119,7 +138,26 @@ class AsyncStream(Generic[_T]):
119
138
  iterator = self._iter_events()
120
139
 
121
140
  async for sse in iterator:
122
- yield process_data(data=sse.json(), cast_to=cast_to, response=response)
141
+ if sse.data.startswith("[DONE]"):
142
+ break
143
+
144
+ if sse.event == "error":
145
+ body = sse.data
146
+
147
+ try:
148
+ body = sse.json()
149
+ err_msg = f"{body}"
150
+ except Exception:
151
+ err_msg = sse.data or f"Error code: {response.status_code}"
152
+
153
+ raise self._client._make_status_error(
154
+ err_msg,
155
+ body=body,
156
+ response=self.response,
157
+ )
158
+
159
+ if sse.event is None:
160
+ yield process_data(data=sse.json(), cast_to=cast_to, response=response)
123
161
 
124
162
  # Ensure the entire stream is consumed
125
163
  async for _sse in iterator:
letta_client/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "letta_client"
4
- __version__ = "1.0.0-alpha.10" # x-release-please-version
4
+ __version__ = "1.0.0-alpha.11" # x-release-please-version
@@ -21,9 +21,7 @@ from ...pagination import SyncArrayPage, AsyncArrayPage
21
21
  from ..._base_client import AsyncPaginator, make_request_options
22
22
  from ...types.agents import block_list_params, block_modify_params
23
23
  from ...types.agent_state import AgentState
24
- from ...types.agents.block_list_response import BlockListResponse
25
- from ...types.agents.block_modify_response import BlockModifyResponse
26
- from ...types.agents.block_retrieve_response import BlockRetrieveResponse
24
+ from ...types.block_response import BlockResponse
27
25
 
28
26
  __all__ = ["BlocksResource", "AsyncBlocksResource"]
29
27
 
@@ -59,7 +57,7 @@ class BlocksResource(SyncAPIResource):
59
57
  extra_query: Query | None = None,
60
58
  extra_body: Body | None = None,
61
59
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
62
- ) -> BlockRetrieveResponse:
60
+ ) -> BlockResponse:
63
61
  """
64
62
  Retrieve a core memory block from an agent.
65
63
 
@@ -83,7 +81,7 @@ class BlocksResource(SyncAPIResource):
83
81
  options=make_request_options(
84
82
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
85
83
  ),
86
- cast_to=BlockRetrieveResponse,
84
+ cast_to=BlockResponse,
87
85
  )
88
86
 
89
87
  def list(
@@ -101,7 +99,7 @@ class BlocksResource(SyncAPIResource):
101
99
  extra_query: Query | None = None,
102
100
  extra_body: Body | None = None,
103
101
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
104
- ) -> SyncArrayPage[BlockListResponse]:
102
+ ) -> SyncArrayPage[BlockResponse]:
105
103
  """
106
104
  Retrieve the core memory blocks of a specific agent.
107
105
 
@@ -133,7 +131,7 @@ class BlocksResource(SyncAPIResource):
133
131
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
134
132
  return self._get_api_list(
135
133
  f"/v1/agents/{agent_id}/core-memory/blocks",
136
- page=SyncArrayPage[BlockListResponse],
134
+ page=SyncArrayPage[BlockResponse],
137
135
  options=make_request_options(
138
136
  extra_headers=extra_headers,
139
137
  extra_query=extra_query,
@@ -150,7 +148,7 @@ class BlocksResource(SyncAPIResource):
150
148
  block_list_params.BlockListParams,
151
149
  ),
152
150
  ),
153
- model=BlockListResponse,
151
+ model=BlockResponse,
154
152
  )
155
153
 
156
154
  def attach(
@@ -259,7 +257,7 @@ class BlocksResource(SyncAPIResource):
259
257
  extra_query: Query | None = None,
260
258
  extra_body: Body | None = None,
261
259
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
262
- ) -> BlockModifyResponse:
260
+ ) -> BlockResponse:
263
261
  """
264
262
  Updates a core memory block of an agent.
265
263
 
@@ -333,7 +331,7 @@ class BlocksResource(SyncAPIResource):
333
331
  options=make_request_options(
334
332
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
335
333
  ),
336
- cast_to=BlockModifyResponse,
334
+ cast_to=BlockResponse,
337
335
  )
338
336
 
339
337
 
@@ -368,7 +366,7 @@ class AsyncBlocksResource(AsyncAPIResource):
368
366
  extra_query: Query | None = None,
369
367
  extra_body: Body | None = None,
370
368
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
371
- ) -> BlockRetrieveResponse:
369
+ ) -> BlockResponse:
372
370
  """
373
371
  Retrieve a core memory block from an agent.
374
372
 
@@ -392,7 +390,7 @@ class AsyncBlocksResource(AsyncAPIResource):
392
390
  options=make_request_options(
393
391
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
394
392
  ),
395
- cast_to=BlockRetrieveResponse,
393
+ cast_to=BlockResponse,
396
394
  )
397
395
 
398
396
  def list(
@@ -410,7 +408,7 @@ class AsyncBlocksResource(AsyncAPIResource):
410
408
  extra_query: Query | None = None,
411
409
  extra_body: Body | None = None,
412
410
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
413
- ) -> AsyncPaginator[BlockListResponse, AsyncArrayPage[BlockListResponse]]:
411
+ ) -> AsyncPaginator[BlockResponse, AsyncArrayPage[BlockResponse]]:
414
412
  """
415
413
  Retrieve the core memory blocks of a specific agent.
416
414
 
@@ -442,7 +440,7 @@ class AsyncBlocksResource(AsyncAPIResource):
442
440
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
443
441
  return self._get_api_list(
444
442
  f"/v1/agents/{agent_id}/core-memory/blocks",
445
- page=AsyncArrayPage[BlockListResponse],
443
+ page=AsyncArrayPage[BlockResponse],
446
444
  options=make_request_options(
447
445
  extra_headers=extra_headers,
448
446
  extra_query=extra_query,
@@ -459,7 +457,7 @@ class AsyncBlocksResource(AsyncAPIResource):
459
457
  block_list_params.BlockListParams,
460
458
  ),
461
459
  ),
462
- model=BlockListResponse,
460
+ model=BlockResponse,
463
461
  )
464
462
 
465
463
  async def attach(
@@ -568,7 +566,7 @@ class AsyncBlocksResource(AsyncAPIResource):
568
566
  extra_query: Query | None = None,
569
567
  extra_body: Body | None = None,
570
568
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
571
- ) -> BlockModifyResponse:
569
+ ) -> BlockResponse:
572
570
  """
573
571
  Updates a core memory block of an agent.
574
572
 
@@ -642,7 +640,7 @@ class AsyncBlocksResource(AsyncAPIResource):
642
640
  options=make_request_options(
643
641
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
644
642
  ),
645
- cast_to=BlockModifyResponse,
643
+ cast_to=BlockResponse,
646
644
  )
647
645
 
648
646
 
@@ -8,7 +8,7 @@ from typing_extensions import Literal
8
8
  import httpx
9
9
 
10
10
  from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
11
- from ..._utils import maybe_transform
11
+ from ..._utils import maybe_transform, async_maybe_transform
12
12
  from ..._compat import cached_property
13
13
  from ..._resource import SyncAPIResource, AsyncAPIResource
14
14
  from ..._response import (
@@ -17,8 +17,7 @@ from ..._response import (
17
17
  async_to_raw_response_wrapper,
18
18
  async_to_streamed_response_wrapper,
19
19
  )
20
- from ...pagination import SyncNextFilesPage, AsyncNextFilesPage
21
- from ..._base_client import AsyncPaginator, make_request_options
20
+ from ..._base_client import make_request_options
22
21
  from ...types.agents import file_list_params
23
22
  from ...types.agents.file_list_response import FileListResponse
24
23
  from ...types.agents.file_open_response import FileOpenResponse
@@ -64,7 +63,7 @@ class FilesResource(SyncAPIResource):
64
63
  extra_query: Query | None = None,
65
64
  extra_body: Body | None = None,
66
65
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
67
- ) -> SyncNextFilesPage[FileListResponse]:
66
+ ) -> FileListResponse:
68
67
  """
69
68
  Get the files attached to an agent with their open/closed status.
70
69
 
@@ -98,9 +97,8 @@ class FilesResource(SyncAPIResource):
98
97
  """
99
98
  if not agent_id:
100
99
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
101
- return self._get_api_list(
100
+ return self._get(
102
101
  f"/v1/agents/{agent_id}/files",
103
- page=SyncNextFilesPage[FileListResponse],
104
102
  options=make_request_options(
105
103
  extra_headers=extra_headers,
106
104
  extra_query=extra_query,
@@ -119,7 +117,7 @@ class FilesResource(SyncAPIResource):
119
117
  file_list_params.FileListParams,
120
118
  ),
121
119
  ),
122
- model=FileListResponse,
120
+ cast_to=FileListResponse,
123
121
  )
124
122
 
125
123
  def close(
@@ -268,7 +266,7 @@ class AsyncFilesResource(AsyncAPIResource):
268
266
  """
269
267
  return AsyncFilesResourceWithStreamingResponse(self)
270
268
 
271
- def list(
269
+ async def list(
272
270
  self,
273
271
  agent_id: str,
274
272
  *,
@@ -285,7 +283,7 @@ class AsyncFilesResource(AsyncAPIResource):
285
283
  extra_query: Query | None = None,
286
284
  extra_body: Body | None = None,
287
285
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
288
- ) -> AsyncPaginator[FileListResponse, AsyncNextFilesPage[FileListResponse]]:
286
+ ) -> FileListResponse:
289
287
  """
290
288
  Get the files attached to an agent with their open/closed status.
291
289
 
@@ -319,15 +317,14 @@ class AsyncFilesResource(AsyncAPIResource):
319
317
  """
320
318
  if not agent_id:
321
319
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
322
- return self._get_api_list(
320
+ return await self._get(
323
321
  f"/v1/agents/{agent_id}/files",
324
- page=AsyncNextFilesPage[FileListResponse],
325
322
  options=make_request_options(
326
323
  extra_headers=extra_headers,
327
324
  extra_query=extra_query,
328
325
  extra_body=extra_body,
329
326
  timeout=timeout,
330
- query=maybe_transform(
327
+ query=await async_maybe_transform(
331
328
  {
332
329
  "after": after,
333
330
  "before": before,
@@ -340,7 +337,7 @@ class AsyncFilesResource(AsyncAPIResource):
340
337
  file_list_params.FileListParams,
341
338
  ),
342
339
  ),
343
- model=FileListResponse,
340
+ cast_to=FileListResponse,
344
341
  )
345
342
 
346
343
  async def close(
@@ -8,7 +8,7 @@ from typing_extensions import Literal
8
8
  import httpx
9
9
 
10
10
  from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
11
- from ..._utils import maybe_transform
11
+ from ..._utils import maybe_transform, async_maybe_transform
12
12
  from ..._compat import cached_property
13
13
  from ..._resource import SyncAPIResource, AsyncAPIResource
14
14
  from ..._response import (
@@ -17,8 +17,7 @@ from ..._response import (
17
17
  async_to_raw_response_wrapper,
18
18
  async_to_streamed_response_wrapper,
19
19
  )
20
- from ...pagination import SyncArrayPage, AsyncArrayPage
21
- from ..._base_client import AsyncPaginator, make_request_options
20
+ from ..._base_client import make_request_options
22
21
  from ...types.agents import folder_list_params
23
22
  from ...types.agent_state import AgentState
24
23
  from ...types.agents.folder_list_response import FolderListResponse
@@ -61,7 +60,7 @@ class FoldersResource(SyncAPIResource):
61
60
  extra_query: Query | None = None,
62
61
  extra_body: Body | None = None,
63
62
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
64
- ) -> SyncArrayPage[FolderListResponse]:
63
+ ) -> FolderListResponse:
65
64
  """
66
65
  Get the folders associated with an agent.
67
66
 
@@ -91,9 +90,8 @@ class FoldersResource(SyncAPIResource):
91
90
  """
92
91
  if not agent_id:
93
92
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
94
- return self._get_api_list(
93
+ return self._get(
95
94
  f"/v1/agents/{agent_id}/folders",
96
- page=SyncArrayPage[FolderListResponse],
97
95
  options=make_request_options(
98
96
  extra_headers=extra_headers,
99
97
  extra_query=extra_query,
@@ -110,7 +108,7 @@ class FoldersResource(SyncAPIResource):
110
108
  folder_list_params.FolderListParams,
111
109
  ),
112
110
  ),
113
- model=FolderListResponse,
111
+ cast_to=FolderListResponse,
114
112
  )
115
113
 
116
114
  def attach(
@@ -214,7 +212,7 @@ class AsyncFoldersResource(AsyncAPIResource):
214
212
  """
215
213
  return AsyncFoldersResourceWithStreamingResponse(self)
216
214
 
217
- def list(
215
+ async def list(
218
216
  self,
219
217
  agent_id: str,
220
218
  *,
@@ -229,7 +227,7 @@ class AsyncFoldersResource(AsyncAPIResource):
229
227
  extra_query: Query | None = None,
230
228
  extra_body: Body | None = None,
231
229
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
232
- ) -> AsyncPaginator[FolderListResponse, AsyncArrayPage[FolderListResponse]]:
230
+ ) -> FolderListResponse:
233
231
  """
234
232
  Get the folders associated with an agent.
235
233
 
@@ -259,15 +257,14 @@ class AsyncFoldersResource(AsyncAPIResource):
259
257
  """
260
258
  if not agent_id:
261
259
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
262
- return self._get_api_list(
260
+ return await self._get(
263
261
  f"/v1/agents/{agent_id}/folders",
264
- page=AsyncArrayPage[FolderListResponse],
265
262
  options=make_request_options(
266
263
  extra_headers=extra_headers,
267
264
  extra_query=extra_query,
268
265
  extra_body=extra_body,
269
266
  timeout=timeout,
270
- query=maybe_transform(
267
+ query=await async_maybe_transform(
271
268
  {
272
269
  "after": after,
273
270
  "before": before,
@@ -278,7 +275,7 @@ class AsyncFoldersResource(AsyncAPIResource):
278
275
  folder_list_params.FolderListParams,
279
276
  ),
280
277
  ),
281
- model=FolderListResponse,
278
+ cast_to=FolderListResponse,
282
279
  )
283
280
 
284
281
  async def attach(
@@ -17,6 +17,7 @@ from ..._response import (
17
17
  async_to_raw_response_wrapper,
18
18
  async_to_streamed_response_wrapper,
19
19
  )
20
+ from ..._streaming import Stream, AsyncStream
20
21
  from ...pagination import SyncArrayPage, AsyncArrayPage
21
22
  from ..._base_client import AsyncPaginator, make_request_options
22
23
  from ...types.agents import (
@@ -35,6 +36,7 @@ from ...types.agents.letta_response import LettaResponse
35
36
  from ...types.agents.letta_message_union import LettaMessageUnion
36
37
  from ...types.agents.message_cancel_response import MessageCancelResponse
37
38
  from ...types.agents.message_modify_response import MessageModifyResponse
39
+ from ...types.agents.letta_streaming_response import LettaStreamingResponse
38
40
  from ...types.agents.letta_user_message_content_union_param import LettaUserMessageContentUnionParam
39
41
  from ...types.agents.letta_assistant_message_content_union_param import LettaAssistantMessageContentUnionParam
40
42
 
@@ -597,7 +599,7 @@ class MessagesResource(SyncAPIResource):
597
599
  extra_query: Query | None = None,
598
600
  extra_body: Body | None = None,
599
601
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
600
- ) -> object:
602
+ ) -> Stream[LettaStreamingResponse]:
601
603
  """Process a user message and return the agent's response.
602
604
 
603
605
  This endpoint accepts a
@@ -664,7 +666,11 @@ class MessagesResource(SyncAPIResource):
664
666
  options=make_request_options(
665
667
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
666
668
  ),
667
- cast_to=object,
669
+ cast_to=cast(
670
+ Any, LettaStreamingResponse
671
+ ), # Union types cannot be passed in as arguments in the type system
672
+ stream=True,
673
+ stream_cls=Stream[LettaStreamingResponse],
668
674
  )
669
675
 
670
676
  def summarize(
@@ -1260,7 +1266,7 @@ class AsyncMessagesResource(AsyncAPIResource):
1260
1266
  extra_query: Query | None = None,
1261
1267
  extra_body: Body | None = None,
1262
1268
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
1263
- ) -> object:
1269
+ ) -> AsyncStream[LettaStreamingResponse]:
1264
1270
  """Process a user message and return the agent's response.
1265
1271
 
1266
1272
  This endpoint accepts a
@@ -1327,7 +1333,11 @@ class AsyncMessagesResource(AsyncAPIResource):
1327
1333
  options=make_request_options(
1328
1334
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1329
1335
  ),
1330
- cast_to=object,
1336
+ cast_to=cast(
1337
+ Any, LettaStreamingResponse
1338
+ ), # Union types cannot be passed in as arguments in the type system
1339
+ stream=True,
1340
+ stream_cls=AsyncStream[LettaStreamingResponse],
1331
1341
  )
1332
1342
 
1333
1343
  async def summarize(
@@ -17,11 +17,10 @@ from ..._response import (
17
17
  async_to_raw_response_wrapper,
18
18
  async_to_streamed_response_wrapper,
19
19
  )
20
- from ...pagination import SyncArrayPage, AsyncArrayPage
21
- from ...types.tool import Tool
22
- from ..._base_client import AsyncPaginator, make_request_options
20
+ from ..._base_client import make_request_options
23
21
  from ...types.agents import tool_list_params, tool_update_approval_params
24
22
  from ...types.agent_state import AgentState
23
+ from ...types.agents.tool_list_response import ToolListResponse
25
24
 
26
25
  __all__ = ["ToolsResource", "AsyncToolsResource"]
27
26
 
@@ -61,7 +60,7 @@ class ToolsResource(SyncAPIResource):
61
60
  extra_query: Query | None = None,
62
61
  extra_body: Body | None = None,
63
62
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
64
- ) -> SyncArrayPage[Tool]:
63
+ ) -> ToolListResponse:
65
64
  """
66
65
  Get tools from an existing agent.
67
66
 
@@ -91,9 +90,8 @@ class ToolsResource(SyncAPIResource):
91
90
  """
92
91
  if not agent_id:
93
92
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
94
- return self._get_api_list(
93
+ return self._get(
95
94
  f"/v1/agents/{agent_id}/tools",
96
- page=SyncArrayPage[Tool],
97
95
  options=make_request_options(
98
96
  extra_headers=extra_headers,
99
97
  extra_query=extra_query,
@@ -110,7 +108,7 @@ class ToolsResource(SyncAPIResource):
110
108
  tool_list_params.ToolListParams,
111
109
  ),
112
110
  ),
113
- model=Tool,
111
+ cast_to=ToolListResponse,
114
112
  )
115
113
 
116
114
  def attach(
@@ -271,7 +269,7 @@ class AsyncToolsResource(AsyncAPIResource):
271
269
  """
272
270
  return AsyncToolsResourceWithStreamingResponse(self)
273
271
 
274
- def list(
272
+ async def list(
275
273
  self,
276
274
  agent_id: str,
277
275
  *,
@@ -286,7 +284,7 @@ class AsyncToolsResource(AsyncAPIResource):
286
284
  extra_query: Query | None = None,
287
285
  extra_body: Body | None = None,
288
286
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
289
- ) -> AsyncPaginator[Tool, AsyncArrayPage[Tool]]:
287
+ ) -> ToolListResponse:
290
288
  """
291
289
  Get tools from an existing agent.
292
290
 
@@ -316,15 +314,14 @@ class AsyncToolsResource(AsyncAPIResource):
316
314
  """
317
315
  if not agent_id:
318
316
  raise ValueError(f"Expected a non-empty value for `agent_id` but received {agent_id!r}")
319
- return self._get_api_list(
317
+ return await self._get(
320
318
  f"/v1/agents/{agent_id}/tools",
321
- page=AsyncArrayPage[Tool],
322
319
  options=make_request_options(
323
320
  extra_headers=extra_headers,
324
321
  extra_query=extra_query,
325
322
  extra_body=extra_body,
326
323
  timeout=timeout,
327
- query=maybe_transform(
324
+ query=await async_maybe_transform(
328
325
  {
329
326
  "after": after,
330
327
  "before": before,
@@ -335,7 +332,7 @@ class AsyncToolsResource(AsyncAPIResource):
335
332
  tool_list_params.ToolListParams,
336
333
  ),
337
334
  ),
338
- model=Tool,
335
+ cast_to=ToolListResponse,
339
336
  )
340
337
 
341
338
  async def attach(
@@ -18,9 +18,9 @@ from .._response import (
18
18
  async_to_raw_response_wrapper,
19
19
  async_to_streamed_response_wrapper,
20
20
  )
21
- from ..pagination import SyncArrayPage, AsyncArrayPage
22
- from .._base_client import AsyncPaginator, make_request_options
21
+ from .._base_client import make_request_options
23
22
  from ..types.archive import Archive
23
+ from ..types.archive_list_response import ArchiveListResponse
24
24
  from ..types.embedding_config_param import EmbeddingConfigParam
25
25
 
26
26
  __all__ = ["ArchivesResource", "AsyncArchivesResource"]
@@ -140,7 +140,7 @@ class ArchivesResource(SyncAPIResource):
140
140
  extra_query: Query | None = None,
141
141
  extra_body: Body | None = None,
142
142
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
143
- ) -> SyncArrayPage[Archive]:
143
+ ) -> ArchiveListResponse:
144
144
  """
145
145
  Get a list of all archives for the current organization with optional filters
146
146
  and pagination.
@@ -171,9 +171,8 @@ class ArchivesResource(SyncAPIResource):
171
171
 
172
172
  timeout: Override the client-level default timeout for this request, in seconds
173
173
  """
174
- return self._get_api_list(
174
+ return self._get(
175
175
  "/v1/archives/",
176
- page=SyncArrayPage[Archive],
177
176
  options=make_request_options(
178
177
  extra_headers=extra_headers,
179
178
  extra_query=extra_query,
@@ -192,7 +191,7 @@ class ArchivesResource(SyncAPIResource):
192
191
  archive_list_params.ArchiveListParams,
193
192
  ),
194
193
  ),
195
- model=Archive,
194
+ cast_to=ArchiveListResponse,
196
195
  )
197
196
 
198
197
  def delete(
@@ -373,7 +372,7 @@ class AsyncArchivesResource(AsyncAPIResource):
373
372
  cast_to=Archive,
374
373
  )
375
374
 
376
- def list(
375
+ async def list(
377
376
  self,
378
377
  *,
379
378
  after: Optional[str] | Omit = omit,
@@ -389,7 +388,7 @@ class AsyncArchivesResource(AsyncAPIResource):
389
388
  extra_query: Query | None = None,
390
389
  extra_body: Body | None = None,
391
390
  timeout: float | httpx.Timeout | None | NotGiven = not_given,
392
- ) -> AsyncPaginator[Archive, AsyncArrayPage[Archive]]:
391
+ ) -> ArchiveListResponse:
393
392
  """
394
393
  Get a list of all archives for the current organization with optional filters
395
394
  and pagination.
@@ -420,15 +419,14 @@ class AsyncArchivesResource(AsyncAPIResource):
420
419
 
421
420
  timeout: Override the client-level default timeout for this request, in seconds
422
421
  """
423
- return self._get_api_list(
422
+ return await self._get(
424
423
  "/v1/archives/",
425
- page=AsyncArrayPage[Archive],
426
424
  options=make_request_options(
427
425
  extra_headers=extra_headers,
428
426
  extra_query=extra_query,
429
427
  extra_body=extra_body,
430
428
  timeout=timeout,
431
- query=maybe_transform(
429
+ query=await async_maybe_transform(
432
430
  {
433
431
  "after": after,
434
432
  "agent_id": agent_id,
@@ -441,7 +439,7 @@ class AsyncArchivesResource(AsyncAPIResource):
441
439
  archive_list_params.ArchiveListParams,
442
440
  ),
443
441
  ),
444
- model=Archive,
442
+ cast_to=ArchiveListResponse,
445
443
  )
446
444
 
447
445
  async def delete(