letta-client 0.1.319__py3-none-any.whl → 0.1.321__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 (211) hide show
  1. letta_client/__init__.py +51 -9
  2. letta_client/agents/__init__.py +6 -2
  3. letta_client/agents/client.py +50 -213
  4. letta_client/agents/files/client.py +51 -6
  5. letta_client/agents/files/raw_client.py +94 -9
  6. letta_client/agents/messages/__init__.py +2 -2
  7. letta_client/agents/messages/client.py +104 -24
  8. letta_client/agents/messages/raw_client.py +109 -17
  9. letta_client/agents/messages/types/__init__.py +2 -2
  10. letta_client/agents/messages/types/{messages_preview_raw_payload_request.py → messages_preview_request.py} +1 -1
  11. letta_client/agents/raw_client.py +50 -253
  12. letta_client/agents/types/__init__.py +4 -0
  13. letta_client/agents/types/agents_list_request_order.py +5 -0
  14. letta_client/agents/types/agents_list_request_order_by.py +5 -0
  15. letta_client/archives/__init__.py +7 -0
  16. letta_client/archives/client.py +362 -0
  17. letta_client/archives/raw_client.py +448 -0
  18. letta_client/archives/types/__init__.py +7 -0
  19. letta_client/archives/types/list_archives_request_order.py +5 -0
  20. letta_client/base_client.py +3 -6
  21. letta_client/batches/__init__.py +5 -0
  22. letta_client/batches/client.py +68 -8
  23. letta_client/batches/messages/__init__.py +7 -0
  24. letta_client/{messages → batches/messages}/client.py +50 -43
  25. letta_client/{messages → batches/messages}/raw_client.py +52 -45
  26. letta_client/batches/messages/types/__init__.py +7 -0
  27. letta_client/batches/messages/types/messages_list_request_order.py +5 -0
  28. letta_client/batches/raw_client.py +71 -6
  29. letta_client/batches/types/__init__.py +7 -0
  30. letta_client/batches/types/batches_list_request_order.py +5 -0
  31. letta_client/blocks/__init__.py +3 -1
  32. letta_client/blocks/agents/__init__.py +3 -0
  33. letta_client/blocks/agents/client.py +57 -2
  34. letta_client/blocks/agents/raw_client.py +51 -0
  35. letta_client/blocks/agents/types/__init__.py +7 -0
  36. letta_client/blocks/agents/types/agents_list_request_order.py +5 -0
  37. letta_client/blocks/client.py +25 -4
  38. letta_client/blocks/raw_client.py +25 -4
  39. letta_client/blocks/types/__init__.py +7 -0
  40. letta_client/blocks/types/blocks_list_request_order.py +5 -0
  41. letta_client/core/client_wrapper.py +2 -2
  42. letta_client/errors/__init__.py +9 -1
  43. letta_client/errors/internal_server_error.py +10 -0
  44. letta_client/folders/__init__.py +14 -2
  45. letta_client/folders/agents/__init__.py +7 -0
  46. letta_client/folders/agents/client.py +176 -0
  47. letta_client/folders/agents/raw_client.py +182 -0
  48. letta_client/folders/agents/types/__init__.py +7 -0
  49. letta_client/folders/agents/types/agents_list_request_order.py +5 -0
  50. letta_client/folders/client.py +96 -86
  51. letta_client/folders/files/__init__.py +3 -0
  52. letta_client/folders/files/client.py +49 -10
  53. letta_client/folders/files/raw_client.py +41 -10
  54. letta_client/folders/files/types/__init__.py +7 -0
  55. letta_client/folders/files/types/files_list_request_order.py +5 -0
  56. letta_client/folders/passages/__init__.py +3 -0
  57. letta_client/folders/passages/client.py +43 -14
  58. letta_client/folders/passages/raw_client.py +35 -14
  59. letta_client/folders/passages/types/__init__.py +7 -0
  60. letta_client/folders/passages/types/passages_list_request_order.py +5 -0
  61. letta_client/folders/raw_client.py +83 -104
  62. letta_client/folders/types/__init__.py +7 -0
  63. letta_client/folders/types/folders_list_request_order.py +5 -0
  64. letta_client/groups/__init__.py +4 -2
  65. letta_client/groups/client.py +27 -6
  66. letta_client/groups/messages/__init__.py +2 -2
  67. letta_client/groups/messages/client.py +39 -18
  68. letta_client/groups/messages/raw_client.py +35 -14
  69. letta_client/groups/messages/types/__init__.py +2 -1
  70. letta_client/groups/messages/types/messages_list_request_order.py +5 -0
  71. letta_client/groups/raw_client.py +27 -6
  72. letta_client/groups/types/__init__.py +2 -1
  73. letta_client/groups/types/groups_list_request_order.py +5 -0
  74. letta_client/identities/__init__.py +12 -2
  75. letta_client/identities/agents/__init__.py +7 -0
  76. letta_client/identities/agents/client.py +177 -0
  77. letta_client/identities/agents/raw_client.py +183 -0
  78. letta_client/identities/agents/types/__init__.py +7 -0
  79. letta_client/identities/agents/types/agents_list_request_order.py +5 -0
  80. letta_client/identities/blocks/__init__.py +7 -0
  81. letta_client/identities/blocks/client.py +177 -0
  82. letta_client/identities/blocks/raw_client.py +183 -0
  83. letta_client/identities/blocks/types/__init__.py +7 -0
  84. letta_client/identities/blocks/types/blocks_list_request_order.py +5 -0
  85. letta_client/identities/client.py +37 -0
  86. letta_client/identities/raw_client.py +27 -0
  87. letta_client/identities/types/__init__.py +7 -0
  88. letta_client/identities/types/identities_list_request_order.py +5 -0
  89. letta_client/jobs/client.py +10 -2
  90. letta_client/jobs/raw_client.py +10 -2
  91. letta_client/models/__init__.py +3 -0
  92. letta_client/models/client.py +3 -0
  93. letta_client/{embedding_models → models/embeddings}/client.py +14 -14
  94. letta_client/{embedding_models → models/embeddings}/raw_client.py +10 -10
  95. letta_client/providers/__init__.py +3 -0
  96. letta_client/providers/client.py +151 -82
  97. letta_client/providers/raw_client.py +165 -72
  98. letta_client/providers/types/__init__.py +7 -0
  99. letta_client/providers/types/providers_list_request_order.py +5 -0
  100. letta_client/runs/__init__.py +2 -1
  101. letta_client/runs/client.py +39 -8
  102. letta_client/runs/messages/__init__.py +3 -0
  103. letta_client/runs/messages/client.py +15 -49
  104. letta_client/runs/messages/raw_client.py +13 -49
  105. letta_client/runs/messages/types/__init__.py +7 -0
  106. letta_client/runs/messages/types/messages_list_request_order.py +5 -0
  107. letta_client/runs/raw_client.py +39 -8
  108. letta_client/steps/__init__.py +13 -3
  109. letta_client/steps/client.py +32 -83
  110. letta_client/steps/feedback/client.py +21 -6
  111. letta_client/steps/feedback/raw_client.py +29 -6
  112. letta_client/steps/messages/__init__.py +7 -0
  113. letta_client/steps/messages/client.py +177 -0
  114. letta_client/steps/messages/raw_client.py +183 -0
  115. letta_client/steps/messages/types/__init__.py +8 -0
  116. letta_client/steps/messages/types/messages_list_request_order.py +5 -0
  117. letta_client/steps/messages/types/messages_list_response_item.py +25 -0
  118. letta_client/steps/metrics/client.py +110 -0
  119. letta_client/steps/metrics/raw_client.py +122 -0
  120. letta_client/steps/raw_client.py +17 -107
  121. letta_client/steps/trace/__init__.py +4 -0
  122. letta_client/steps/trace/client.py +110 -0
  123. letta_client/steps/trace/raw_client.py +122 -0
  124. letta_client/steps/types/__init__.py +2 -1
  125. letta_client/steps/types/steps_list_request_order.py +5 -0
  126. letta_client/tags/__init__.py +3 -0
  127. letta_client/tags/client.py +57 -4
  128. letta_client/tags/raw_client.py +49 -2
  129. letta_client/tags/types/__init__.py +7 -0
  130. letta_client/tags/types/tags_list_request_order.py +5 -0
  131. letta_client/telemetry/client.py +8 -0
  132. letta_client/telemetry/raw_client.py +8 -0
  133. letta_client/templates/__init__.py +64 -0
  134. letta_client/templates/agents/__init__.py +58 -0
  135. letta_client/templates/agents/types/__init__.py +66 -0
  136. letta_client/templates/agents/types/agents_create_response.py +6 -0
  137. letta_client/templates/agents/types/agents_create_response_group.py +52 -0
  138. letta_client/templates/agents/types/agents_create_response_group_base_template_id.py +12 -0
  139. letta_client/templates/agents/types/agents_create_response_group_base_template_id_item.py +5 -0
  140. letta_client/templates/agents/types/agents_create_response_group_deployment_id.py +12 -0
  141. letta_client/templates/agents/types/agents_create_response_group_deployment_id_item.py +5 -0
  142. letta_client/templates/agents/types/agents_create_response_group_hidden.py +12 -0
  143. letta_client/templates/agents/types/agents_create_response_group_hidden_item.py +5 -0
  144. letta_client/templates/agents/types/agents_create_response_group_last_processed_message_id.py +14 -0
  145. letta_client/templates/agents/types/agents_create_response_group_last_processed_message_id_item.py +5 -0
  146. letta_client/templates/agents/types/agents_create_response_group_manager_agent_id.py +12 -0
  147. letta_client/templates/agents/types/agents_create_response_group_manager_agent_id_item.py +5 -0
  148. letta_client/templates/agents/types/agents_create_response_group_manager_type.py +7 -0
  149. letta_client/templates/agents/types/agents_create_response_group_max_message_buffer_length.py +14 -0
  150. letta_client/templates/agents/types/agents_create_response_group_max_message_buffer_length_item.py +5 -0
  151. letta_client/templates/agents/types/agents_create_response_group_max_turns.py +12 -0
  152. letta_client/templates/agents/types/agents_create_response_group_max_turns_item.py +5 -0
  153. letta_client/templates/agents/types/agents_create_response_group_min_message_buffer_length.py +14 -0
  154. letta_client/templates/agents/types/agents_create_response_group_min_message_buffer_length_item.py +5 -0
  155. letta_client/templates/agents/types/agents_create_response_group_project_id.py +12 -0
  156. letta_client/templates/agents/types/agents_create_response_group_project_id_item.py +5 -0
  157. letta_client/templates/agents/types/agents_create_response_group_shared_block_ids.py +5 -0
  158. letta_client/templates/agents/types/agents_create_response_group_sleeptime_agent_frequency.py +14 -0
  159. letta_client/templates/agents/types/agents_create_response_group_sleeptime_agent_frequency_item.py +5 -0
  160. letta_client/templates/agents/types/agents_create_response_group_template_id.py +12 -0
  161. letta_client/templates/agents/types/agents_create_response_group_template_id_item.py +5 -0
  162. letta_client/templates/agents/types/agents_create_response_group_termination_token.py +12 -0
  163. letta_client/templates/agents/types/agents_create_response_group_termination_token_item.py +5 -0
  164. letta_client/templates/agents/types/agents_create_response_group_turns_counter.py +12 -0
  165. letta_client/templates/agents/types/agents_create_response_group_turns_counter_item.py +5 -0
  166. letta_client/templates/client.py +260 -0
  167. letta_client/templates/raw_client.py +395 -0
  168. letta_client/templates/types/__init__.py +8 -0
  169. letta_client/templates/types/templates_get_template_snapshot_response.py +4 -0
  170. letta_client/templates/types/templates_get_template_snapshot_response_blocks_item.py +1 -0
  171. letta_client/templates/types/templates_get_template_snapshot_response_relationships_item.py +23 -0
  172. letta_client/templates/types/templates_migrate_deployment_response.py +21 -0
  173. letta_client/templates/types/templates_set_current_template_from_snapshot_response.py +21 -0
  174. letta_client/tools/__init__.py +2 -0
  175. letta_client/tools/client.py +47 -20
  176. letta_client/tools/raw_client.py +43 -26
  177. letta_client/tools/types/__init__.py +2 -0
  178. letta_client/tools/types/tools_list_request_order.py +5 -0
  179. letta_client/types/__init__.py +10 -2
  180. letta_client/types/agent_state.py +5 -0
  181. letta_client/types/archive.py +77 -0
  182. letta_client/types/batch_job.py +16 -0
  183. letta_client/types/{body_export_agent_serialized.py → body_export_agent.py} +1 -1
  184. letta_client/types/child_tool_rule.py +1 -1
  185. letta_client/types/conditional_tool_rule.py +1 -1
  186. letta_client/types/continue_tool_rule.py +1 -1
  187. letta_client/types/deployment_entity.py +2 -0
  188. letta_client/types/init_tool_rule.py +1 -1
  189. letta_client/types/internal_server_error_body.py +20 -0
  190. letta_client/types/internal_template_agent_create.py +5 -0
  191. letta_client/types/job.py +16 -0
  192. letta_client/types/letta_schemas_agent_file_agent_schema.py +5 -0
  193. letta_client/types/max_count_per_step_tool_rule.py +1 -1
  194. letta_client/types/memory.py +7 -1
  195. letta_client/types/memory_agent_type.py +7 -0
  196. letta_client/types/parent_tool_rule.py +1 -1
  197. letta_client/types/required_before_exit_tool_rule.py +1 -1
  198. letta_client/types/requires_approval_tool_rule.py +1 -1
  199. letta_client/types/run.py +16 -0
  200. letta_client/types/source.py +6 -0
  201. letta_client/types/step.py +1 -1
  202. letta_client/types/stop_reason_type.py +1 -0
  203. letta_client/types/terminal_tool_rule.py +1 -1
  204. letta_client/types/vector_db_provider.py +5 -0
  205. letta_client/voice/client.py +2 -8
  206. letta_client/voice/raw_client.py +0 -8
  207. {letta_client-0.1.319.dist-info → letta_client-0.1.321.dist-info}/METADATA +9 -9
  208. {letta_client-0.1.319.dist-info → letta_client-0.1.321.dist-info}/RECORD +211 -114
  209. /letta_client/{embedding_models → models/embeddings}/__init__.py +0 -0
  210. /letta_client/{messages → steps/metrics}/__init__.py +0 -0
  211. {letta_client-0.1.319.dist-info → letta_client-0.1.321.dist-info}/WHEEL +0 -0
@@ -11,6 +11,7 @@ from ...core.request_options import RequestOptions
11
11
  from ...core.unchecked_base_model import construct_type
12
12
  from ...errors.unprocessable_entity_error import UnprocessableEntityError
13
13
  from ...types.http_validation_error import HttpValidationError
14
+ from ...types.paginated_agent_files import PaginatedAgentFiles
14
15
 
15
16
 
16
17
  class RawFilesClient:
@@ -180,27 +181,70 @@ class RawFilesClient:
180
181
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
181
182
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
182
183
 
183
- def list(self, agent_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
184
+ def list(
185
+ self,
186
+ agent_id: str,
187
+ *,
188
+ cursor: typing.Optional[str] = None,
189
+ limit: typing.Optional[int] = None,
190
+ is_open: typing.Optional[bool] = None,
191
+ request_options: typing.Optional[RequestOptions] = None,
192
+ ) -> HttpResponse[PaginatedAgentFiles]:
184
193
  """
194
+ Get the files attached to an agent with their open/closed status (paginated).
195
+
185
196
  Parameters
186
197
  ----------
187
198
  agent_id : str
188
199
 
200
+ cursor : typing.Optional[str]
201
+ Pagination cursor from previous response
202
+
203
+ limit : typing.Optional[int]
204
+ Number of items to return (1-100)
205
+
206
+ is_open : typing.Optional[bool]
207
+ Filter by open status (true for open files, false for closed files)
208
+
189
209
  request_options : typing.Optional[RequestOptions]
190
210
  Request-specific configuration.
191
211
 
192
212
  Returns
193
213
  -------
194
- HttpResponse[None]
214
+ HttpResponse[PaginatedAgentFiles]
215
+ Successful Response
195
216
  """
196
217
  _response = self._client_wrapper.httpx_client.request(
197
218
  f"v1/agents/{jsonable_encoder(agent_id)}/files",
198
- method="PATCH",
219
+ method="GET",
220
+ params={
221
+ "cursor": cursor,
222
+ "limit": limit,
223
+ "is_open": is_open,
224
+ },
199
225
  request_options=request_options,
200
226
  )
201
227
  try:
202
228
  if 200 <= _response.status_code < 300:
203
- return HttpResponse(response=_response, data=None)
229
+ _data = typing.cast(
230
+ PaginatedAgentFiles,
231
+ construct_type(
232
+ type_=PaginatedAgentFiles, # type: ignore
233
+ object_=_response.json(),
234
+ ),
235
+ )
236
+ return HttpResponse(response=_response, data=_data)
237
+ if _response.status_code == 422:
238
+ raise UnprocessableEntityError(
239
+ headers=dict(_response.headers),
240
+ body=typing.cast(
241
+ HttpValidationError,
242
+ construct_type(
243
+ type_=HttpValidationError, # type: ignore
244
+ object_=_response.json(),
245
+ ),
246
+ ),
247
+ )
204
248
  _response_json = _response.json()
205
249
  except JSONDecodeError:
206
250
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
@@ -375,28 +419,69 @@ class AsyncRawFilesClient:
375
419
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
376
420
 
377
421
  async def list(
378
- self, agent_id: str, *, request_options: typing.Optional[RequestOptions] = None
379
- ) -> AsyncHttpResponse[None]:
422
+ self,
423
+ agent_id: str,
424
+ *,
425
+ cursor: typing.Optional[str] = None,
426
+ limit: typing.Optional[int] = None,
427
+ is_open: typing.Optional[bool] = None,
428
+ request_options: typing.Optional[RequestOptions] = None,
429
+ ) -> AsyncHttpResponse[PaginatedAgentFiles]:
380
430
  """
431
+ Get the files attached to an agent with their open/closed status (paginated).
432
+
381
433
  Parameters
382
434
  ----------
383
435
  agent_id : str
384
436
 
437
+ cursor : typing.Optional[str]
438
+ Pagination cursor from previous response
439
+
440
+ limit : typing.Optional[int]
441
+ Number of items to return (1-100)
442
+
443
+ is_open : typing.Optional[bool]
444
+ Filter by open status (true for open files, false for closed files)
445
+
385
446
  request_options : typing.Optional[RequestOptions]
386
447
  Request-specific configuration.
387
448
 
388
449
  Returns
389
450
  -------
390
- AsyncHttpResponse[None]
451
+ AsyncHttpResponse[PaginatedAgentFiles]
452
+ Successful Response
391
453
  """
392
454
  _response = await self._client_wrapper.httpx_client.request(
393
455
  f"v1/agents/{jsonable_encoder(agent_id)}/files",
394
- method="PATCH",
456
+ method="GET",
457
+ params={
458
+ "cursor": cursor,
459
+ "limit": limit,
460
+ "is_open": is_open,
461
+ },
395
462
  request_options=request_options,
396
463
  )
397
464
  try:
398
465
  if 200 <= _response.status_code < 300:
399
- return AsyncHttpResponse(response=_response, data=None)
466
+ _data = typing.cast(
467
+ PaginatedAgentFiles,
468
+ construct_type(
469
+ type_=PaginatedAgentFiles, # type: ignore
470
+ object_=_response.json(),
471
+ ),
472
+ )
473
+ return AsyncHttpResponse(response=_response, data=_data)
474
+ if _response.status_code == 422:
475
+ raise UnprocessableEntityError(
476
+ headers=dict(_response.headers),
477
+ body=typing.cast(
478
+ HttpValidationError,
479
+ construct_type(
480
+ type_=HttpValidationError, # type: ignore
481
+ object_=_response.json(),
482
+ ),
483
+ ),
484
+ )
400
485
  _response_json = _response.json()
401
486
  except JSONDecodeError:
402
487
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
@@ -8,7 +8,7 @@ from .types import (
8
8
  MessageSearchRequestSearchMode,
9
9
  MessagesModifyRequest,
10
10
  MessagesModifyResponse,
11
- MessagesPreviewRawPayloadRequest,
11
+ MessagesPreviewRequest,
12
12
  )
13
13
 
14
14
  __all__ = [
@@ -17,5 +17,5 @@ __all__ = [
17
17
  "MessageSearchRequestSearchMode",
18
18
  "MessagesModifyRequest",
19
19
  "MessagesModifyResponse",
20
- "MessagesPreviewRawPayloadRequest",
20
+ "MessagesPreviewRequest",
21
21
  ]
@@ -20,7 +20,7 @@ from .types.letta_streaming_response import LettaStreamingResponse
20
20
  from .types.message_search_request_search_mode import MessageSearchRequestSearchMode
21
21
  from .types.messages_modify_request import MessagesModifyRequest
22
22
  from .types.messages_modify_response import MessagesModifyResponse
23
- from .types.messages_preview_raw_payload_request import MessagesPreviewRawPayloadRequest
23
+ from .types.messages_preview_request import MessagesPreviewRequest
24
24
 
25
25
  # this is used as the default value for optional parameters
26
26
  OMIT = typing.cast(typing.Any, ...)
@@ -185,7 +185,7 @@ class MessagesClient:
185
185
  role="user",
186
186
  content=[
187
187
  TextContent(
188
- text="text",
188
+ text="The sky above the port was the color of television, tuned to a dead channel.",
189
189
  )
190
190
  ],
191
191
  )
@@ -329,7 +329,7 @@ class MessagesClient:
329
329
  role="user",
330
330
  content=[
331
331
  TextContent(
332
- text="text",
332
+ text="The sky above the port was the color of television, tuned to a dead channel.",
333
333
  )
334
334
  ],
335
335
  )
@@ -606,12 +606,8 @@ class MessagesClient:
606
606
  )
607
607
  return _response.data
608
608
 
609
- def preview_raw_payload(
610
- self,
611
- agent_id: str,
612
- *,
613
- request: MessagesPreviewRawPayloadRequest,
614
- request_options: typing.Optional[RequestOptions] = None,
609
+ def preview(
610
+ self, agent_id: str, *, request: MessagesPreviewRequest, request_options: typing.Optional[RequestOptions] = None
615
611
  ) -> typing.Dict[str, typing.Optional[typing.Any]]:
616
612
  """
617
613
  Inspect the raw LLM request payload without sending it.
@@ -624,7 +620,7 @@ class MessagesClient:
624
620
  ----------
625
621
  agent_id : str
626
622
 
627
- request : MessagesPreviewRawPayloadRequest
623
+ request : MessagesPreviewRequest
628
624
 
629
625
  request_options : typing.Optional[RequestOptions]
630
626
  Request-specific configuration.
@@ -642,7 +638,7 @@ class MessagesClient:
642
638
  project="YOUR_PROJECT",
643
639
  token="YOUR_TOKEN",
644
640
  )
645
- client.agents.messages.preview_raw_payload(
641
+ client.agents.messages.preview(
646
642
  agent_id="agent_id",
647
643
  request=LettaRequest(
648
644
  messages=[
@@ -658,7 +654,48 @@ class MessagesClient:
658
654
  ),
659
655
  )
660
656
  """
661
- _response = self._raw_client.preview_raw_payload(agent_id, request=request, request_options=request_options)
657
+ _response = self._raw_client.preview(agent_id, request=request, request_options=request_options)
658
+ return _response.data
659
+
660
+ def summarize(
661
+ self, agent_id: str, *, max_message_length: int, request_options: typing.Optional[RequestOptions] = None
662
+ ) -> None:
663
+ """
664
+ Summarize an agent's conversation history to a target message length.
665
+
666
+ This endpoint summarizes the current message history for a given agent,
667
+ truncating and compressing it down to the specified `max_message_length`.
668
+
669
+ Parameters
670
+ ----------
671
+ agent_id : str
672
+
673
+ max_message_length : int
674
+ Maximum number of messages to retain after summarization.
675
+
676
+ request_options : typing.Optional[RequestOptions]
677
+ Request-specific configuration.
678
+
679
+ Returns
680
+ -------
681
+ None
682
+
683
+ Examples
684
+ --------
685
+ from letta_client import Letta
686
+
687
+ client = Letta(
688
+ project="YOUR_PROJECT",
689
+ token="YOUR_TOKEN",
690
+ )
691
+ client.agents.messages.summarize(
692
+ agent_id="agent_id",
693
+ max_message_length=1,
694
+ )
695
+ """
696
+ _response = self._raw_client.summarize(
697
+ agent_id, max_message_length=max_message_length, request_options=request_options
698
+ )
662
699
  return _response.data
663
700
 
664
701
 
@@ -834,7 +871,7 @@ class AsyncMessagesClient:
834
871
  role="user",
835
872
  content=[
836
873
  TextContent(
837
- text="text",
874
+ text="The sky above the port was the color of television, tuned to a dead channel.",
838
875
  )
839
876
  ],
840
877
  )
@@ -996,7 +1033,7 @@ class AsyncMessagesClient:
996
1033
  role="user",
997
1034
  content=[
998
1035
  TextContent(
999
- text="text",
1036
+ text="The sky above the port was the color of television, tuned to a dead channel.",
1000
1037
  )
1001
1038
  ],
1002
1039
  )
@@ -1309,12 +1346,8 @@ class AsyncMessagesClient:
1309
1346
  )
1310
1347
  return _response.data
1311
1348
 
1312
- async def preview_raw_payload(
1313
- self,
1314
- agent_id: str,
1315
- *,
1316
- request: MessagesPreviewRawPayloadRequest,
1317
- request_options: typing.Optional[RequestOptions] = None,
1349
+ async def preview(
1350
+ self, agent_id: str, *, request: MessagesPreviewRequest, request_options: typing.Optional[RequestOptions] = None
1318
1351
  ) -> typing.Dict[str, typing.Optional[typing.Any]]:
1319
1352
  """
1320
1353
  Inspect the raw LLM request payload without sending it.
@@ -1327,7 +1360,7 @@ class AsyncMessagesClient:
1327
1360
  ----------
1328
1361
  agent_id : str
1329
1362
 
1330
- request : MessagesPreviewRawPayloadRequest
1363
+ request : MessagesPreviewRequest
1331
1364
 
1332
1365
  request_options : typing.Optional[RequestOptions]
1333
1366
  Request-specific configuration.
@@ -1350,7 +1383,7 @@ class AsyncMessagesClient:
1350
1383
 
1351
1384
 
1352
1385
  async def main() -> None:
1353
- await client.agents.messages.preview_raw_payload(
1386
+ await client.agents.messages.preview(
1354
1387
  agent_id="agent_id",
1355
1388
  request=LettaRequest(
1356
1389
  messages=[
@@ -1369,7 +1402,54 @@ class AsyncMessagesClient:
1369
1402
 
1370
1403
  asyncio.run(main())
1371
1404
  """
1372
- _response = await self._raw_client.preview_raw_payload(
1373
- agent_id, request=request, request_options=request_options
1405
+ _response = await self._raw_client.preview(agent_id, request=request, request_options=request_options)
1406
+ return _response.data
1407
+
1408
+ async def summarize(
1409
+ self, agent_id: str, *, max_message_length: int, request_options: typing.Optional[RequestOptions] = None
1410
+ ) -> None:
1411
+ """
1412
+ Summarize an agent's conversation history to a target message length.
1413
+
1414
+ This endpoint summarizes the current message history for a given agent,
1415
+ truncating and compressing it down to the specified `max_message_length`.
1416
+
1417
+ Parameters
1418
+ ----------
1419
+ agent_id : str
1420
+
1421
+ max_message_length : int
1422
+ Maximum number of messages to retain after summarization.
1423
+
1424
+ request_options : typing.Optional[RequestOptions]
1425
+ Request-specific configuration.
1426
+
1427
+ Returns
1428
+ -------
1429
+ None
1430
+
1431
+ Examples
1432
+ --------
1433
+ import asyncio
1434
+
1435
+ from letta_client import AsyncLetta
1436
+
1437
+ client = AsyncLetta(
1438
+ project="YOUR_PROJECT",
1439
+ token="YOUR_TOKEN",
1440
+ )
1441
+
1442
+
1443
+ async def main() -> None:
1444
+ await client.agents.messages.summarize(
1445
+ agent_id="agent_id",
1446
+ max_message_length=1,
1447
+ )
1448
+
1449
+
1450
+ asyncio.run(main())
1451
+ """
1452
+ _response = await self._raw_client.summarize(
1453
+ agent_id, max_message_length=max_message_length, request_options=request_options
1374
1454
  )
1375
1455
  return _response.data
@@ -30,7 +30,7 @@ from .types.letta_streaming_response import LettaStreamingResponse
30
30
  from .types.message_search_request_search_mode import MessageSearchRequestSearchMode
31
31
  from .types.messages_modify_request import MessagesModifyRequest
32
32
  from .types.messages_modify_response import MessagesModifyResponse
33
- from .types.messages_preview_raw_payload_request import MessagesPreviewRawPayloadRequest
33
+ from .types.messages_preview_request import MessagesPreviewRequest
34
34
 
35
35
  # this is used as the default value for optional parameters
36
36
  OMIT = typing.cast(typing.Any, ...)
@@ -751,12 +751,8 @@ class RawMessagesClient:
751
751
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
752
752
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
753
753
 
754
- def preview_raw_payload(
755
- self,
756
- agent_id: str,
757
- *,
758
- request: MessagesPreviewRawPayloadRequest,
759
- request_options: typing.Optional[RequestOptions] = None,
754
+ def preview(
755
+ self, agent_id: str, *, request: MessagesPreviewRequest, request_options: typing.Optional[RequestOptions] = None
760
756
  ) -> HttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]:
761
757
  """
762
758
  Inspect the raw LLM request payload without sending it.
@@ -769,7 +765,7 @@ class RawMessagesClient:
769
765
  ----------
770
766
  agent_id : str
771
767
 
772
- request : MessagesPreviewRawPayloadRequest
768
+ request : MessagesPreviewRequest
773
769
 
774
770
  request_options : typing.Optional[RequestOptions]
775
771
  Request-specific configuration.
@@ -783,7 +779,7 @@ class RawMessagesClient:
783
779
  f"v1/agents/{jsonable_encoder(agent_id)}/messages/preview-raw-payload",
784
780
  method="POST",
785
781
  json=convert_and_respect_annotation_metadata(
786
- object_=request, annotation=MessagesPreviewRawPayloadRequest, direction="write"
782
+ object_=request, annotation=MessagesPreviewRequest, direction="write"
787
783
  ),
788
784
  headers={
789
785
  "content-type": "application/json",
@@ -817,6 +813,56 @@ class RawMessagesClient:
817
813
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
818
814
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
819
815
 
816
+ def summarize(
817
+ self, agent_id: str, *, max_message_length: int, request_options: typing.Optional[RequestOptions] = None
818
+ ) -> HttpResponse[None]:
819
+ """
820
+ Summarize an agent's conversation history to a target message length.
821
+
822
+ This endpoint summarizes the current message history for a given agent,
823
+ truncating and compressing it down to the specified `max_message_length`.
824
+
825
+ Parameters
826
+ ----------
827
+ agent_id : str
828
+
829
+ max_message_length : int
830
+ Maximum number of messages to retain after summarization.
831
+
832
+ request_options : typing.Optional[RequestOptions]
833
+ Request-specific configuration.
834
+
835
+ Returns
836
+ -------
837
+ HttpResponse[None]
838
+ """
839
+ _response = self._client_wrapper.httpx_client.request(
840
+ f"v1/agents/{jsonable_encoder(agent_id)}/summarize",
841
+ method="POST",
842
+ params={
843
+ "max_message_length": max_message_length,
844
+ },
845
+ request_options=request_options,
846
+ )
847
+ try:
848
+ if 200 <= _response.status_code < 300:
849
+ return HttpResponse(response=_response, data=None)
850
+ if _response.status_code == 422:
851
+ raise UnprocessableEntityError(
852
+ headers=dict(_response.headers),
853
+ body=typing.cast(
854
+ HttpValidationError,
855
+ construct_type(
856
+ type_=HttpValidationError, # type: ignore
857
+ object_=_response.json(),
858
+ ),
859
+ ),
860
+ )
861
+ _response_json = _response.json()
862
+ except JSONDecodeError:
863
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
864
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
865
+
820
866
 
821
867
  class AsyncRawMessagesClient:
822
868
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
@@ -1533,12 +1579,8 @@ class AsyncRawMessagesClient:
1533
1579
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1534
1580
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1535
1581
 
1536
- async def preview_raw_payload(
1537
- self,
1538
- agent_id: str,
1539
- *,
1540
- request: MessagesPreviewRawPayloadRequest,
1541
- request_options: typing.Optional[RequestOptions] = None,
1582
+ async def preview(
1583
+ self, agent_id: str, *, request: MessagesPreviewRequest, request_options: typing.Optional[RequestOptions] = None
1542
1584
  ) -> AsyncHttpResponse[typing.Dict[str, typing.Optional[typing.Any]]]:
1543
1585
  """
1544
1586
  Inspect the raw LLM request payload without sending it.
@@ -1551,7 +1593,7 @@ class AsyncRawMessagesClient:
1551
1593
  ----------
1552
1594
  agent_id : str
1553
1595
 
1554
- request : MessagesPreviewRawPayloadRequest
1596
+ request : MessagesPreviewRequest
1555
1597
 
1556
1598
  request_options : typing.Optional[RequestOptions]
1557
1599
  Request-specific configuration.
@@ -1565,7 +1607,7 @@ class AsyncRawMessagesClient:
1565
1607
  f"v1/agents/{jsonable_encoder(agent_id)}/messages/preview-raw-payload",
1566
1608
  method="POST",
1567
1609
  json=convert_and_respect_annotation_metadata(
1568
- object_=request, annotation=MessagesPreviewRawPayloadRequest, direction="write"
1610
+ object_=request, annotation=MessagesPreviewRequest, direction="write"
1569
1611
  ),
1570
1612
  headers={
1571
1613
  "content-type": "application/json",
@@ -1598,3 +1640,53 @@ class AsyncRawMessagesClient:
1598
1640
  except JSONDecodeError:
1599
1641
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1600
1642
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1643
+
1644
+ async def summarize(
1645
+ self, agent_id: str, *, max_message_length: int, request_options: typing.Optional[RequestOptions] = None
1646
+ ) -> AsyncHttpResponse[None]:
1647
+ """
1648
+ Summarize an agent's conversation history to a target message length.
1649
+
1650
+ This endpoint summarizes the current message history for a given agent,
1651
+ truncating and compressing it down to the specified `max_message_length`.
1652
+
1653
+ Parameters
1654
+ ----------
1655
+ agent_id : str
1656
+
1657
+ max_message_length : int
1658
+ Maximum number of messages to retain after summarization.
1659
+
1660
+ request_options : typing.Optional[RequestOptions]
1661
+ Request-specific configuration.
1662
+
1663
+ Returns
1664
+ -------
1665
+ AsyncHttpResponse[None]
1666
+ """
1667
+ _response = await self._client_wrapper.httpx_client.request(
1668
+ f"v1/agents/{jsonable_encoder(agent_id)}/summarize",
1669
+ method="POST",
1670
+ params={
1671
+ "max_message_length": max_message_length,
1672
+ },
1673
+ request_options=request_options,
1674
+ )
1675
+ try:
1676
+ if 200 <= _response.status_code < 300:
1677
+ return AsyncHttpResponse(response=_response, data=None)
1678
+ if _response.status_code == 422:
1679
+ raise UnprocessableEntityError(
1680
+ headers=dict(_response.headers),
1681
+ body=typing.cast(
1682
+ HttpValidationError,
1683
+ construct_type(
1684
+ type_=HttpValidationError, # type: ignore
1685
+ object_=_response.json(),
1686
+ ),
1687
+ ),
1688
+ )
1689
+ _response_json = _response.json()
1690
+ except JSONDecodeError:
1691
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1692
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -7,7 +7,7 @@ from .letta_streaming_response import LettaStreamingResponse
7
7
  from .message_search_request_search_mode import MessageSearchRequestSearchMode
8
8
  from .messages_modify_request import MessagesModifyRequest
9
9
  from .messages_modify_response import MessagesModifyResponse
10
- from .messages_preview_raw_payload_request import MessagesPreviewRawPayloadRequest
10
+ from .messages_preview_request import MessagesPreviewRequest
11
11
 
12
12
  __all__ = [
13
13
  "LettaAsyncRequestMessagesItem",
@@ -15,5 +15,5 @@ __all__ = [
15
15
  "MessageSearchRequestSearchMode",
16
16
  "MessagesModifyRequest",
17
17
  "MessagesModifyResponse",
18
- "MessagesPreviewRawPayloadRequest",
18
+ "MessagesPreviewRequest",
19
19
  ]
@@ -5,4 +5,4 @@ import typing
5
5
  from ....types.letta_request import LettaRequest
6
6
  from ....types.letta_streaming_request import LettaStreamingRequest
7
7
 
8
- MessagesPreviewRawPayloadRequest = typing.Union[LettaRequest, LettaStreamingRequest]
8
+ MessagesPreviewRequest = typing.Union[LettaRequest, LettaStreamingRequest]