letta-client 0.1.233__py3-none-any.whl → 0.1.235__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 (438) hide show
  1. letta_client/__init__.py +2 -0
  2. letta_client/agents/__init__.py +2 -0
  3. letta_client/agents/blocks/__init__.py +2 -0
  4. letta_client/agents/blocks/client.py +72 -313
  5. letta_client/agents/blocks/raw_client.py +654 -0
  6. letta_client/agents/client.py +349 -869
  7. letta_client/agents/context/__init__.py +2 -0
  8. letta_client/agents/context/client.py +31 -66
  9. letta_client/agents/context/raw_client.py +122 -0
  10. letta_client/agents/core_memory/__init__.py +2 -0
  11. letta_client/agents/core_memory/client.py +31 -66
  12. letta_client/agents/core_memory/raw_client.py +124 -0
  13. letta_client/agents/files/__init__.py +2 -0
  14. letta_client/agents/files/client.py +39 -178
  15. letta_client/agents/files/raw_client.py +349 -0
  16. letta_client/agents/folders/__init__.py +2 -0
  17. letta_client/agents/folders/client.py +39 -178
  18. letta_client/agents/folders/raw_client.py +327 -0
  19. letta_client/agents/groups/__init__.py +2 -0
  20. letta_client/agents/groups/client.py +31 -72
  21. letta_client/agents/groups/raw_client.py +142 -0
  22. letta_client/agents/memory_variables/__init__.py +2 -0
  23. letta_client/agents/memory_variables/client.py +31 -65
  24. letta_client/agents/memory_variables/raw_client.py +125 -0
  25. letta_client/agents/memory_variables/types/__init__.py +2 -0
  26. letta_client/agents/memory_variables/types/memory_variables_list_response.py +3 -2
  27. letta_client/agents/messages/__init__.py +2 -0
  28. letta_client/agents/messages/client.py +150 -589
  29. letta_client/agents/messages/raw_client.py +1384 -0
  30. letta_client/agents/messages/types/__init__.py +2 -0
  31. letta_client/agents/messages/types/letta_streaming_response.py +6 -5
  32. letta_client/agents/messages/types/messages_modify_request.py +3 -2
  33. letta_client/agents/messages/types/messages_modify_response.py +5 -4
  34. letta_client/agents/messages/types/messages_preview_raw_payload_request.py +1 -0
  35. letta_client/agents/passages/__init__.py +2 -0
  36. letta_client/agents/passages/client.py +89 -301
  37. letta_client/agents/passages/raw_client.py +678 -0
  38. letta_client/agents/raw_client.py +2088 -0
  39. letta_client/agents/sources/__init__.py +2 -0
  40. letta_client/agents/sources/client.py +39 -178
  41. letta_client/agents/sources/raw_client.py +327 -0
  42. letta_client/agents/templates/__init__.py +2 -0
  43. letta_client/agents/templates/client.py +57 -276
  44. letta_client/agents/templates/raw_client.py +505 -0
  45. letta_client/agents/templates/types/__init__.py +2 -0
  46. letta_client/agents/templates/types/templates_create_response.py +5 -4
  47. letta_client/agents/templates/types/templates_migrate_response.py +3 -2
  48. letta_client/agents/tools/__init__.py +2 -0
  49. letta_client/agents/tools/client.py +40 -179
  50. letta_client/agents/tools/raw_client.py +327 -0
  51. letta_client/agents/types/__init__.py +2 -0
  52. letta_client/agents/types/agents_search_request_search_item.py +4 -3
  53. letta_client/agents/types/agents_search_request_search_item_field.py +4 -3
  54. letta_client/agents/types/agents_search_request_search_item_one.py +4 -3
  55. letta_client/agents/types/agents_search_request_search_item_three.py +3 -2
  56. letta_client/agents/types/agents_search_request_search_item_two.py +3 -2
  57. letta_client/agents/types/agents_search_request_search_item_zero.py +3 -2
  58. letta_client/agents/types/agents_search_response.py +5 -4
  59. letta_client/agents/types/create_agent_request_response_format.py +1 -0
  60. letta_client/agents/types/create_agent_request_tool_rules_item.py +4 -3
  61. letta_client/agents/types/update_agent_response_format.py +1 -0
  62. letta_client/agents/types/update_agent_tool_rules_item.py +4 -3
  63. letta_client/base_client.py +41 -49
  64. letta_client/batches/__init__.py +2 -0
  65. letta_client/batches/client.py +45 -253
  66. letta_client/batches/raw_client.py +457 -0
  67. letta_client/blocks/__init__.py +2 -0
  68. letta_client/blocks/agents/__init__.py +2 -0
  69. letta_client/blocks/agents/client.py +33 -70
  70. letta_client/blocks/agents/raw_client.py +144 -0
  71. letta_client/blocks/client.py +126 -424
  72. letta_client/blocks/raw_client.py +973 -0
  73. letta_client/client_side_access_tokens/__init__.py +2 -0
  74. letta_client/client_side_access_tokens/client.py +45 -216
  75. letta_client/client_side_access_tokens/raw_client.py +435 -0
  76. letta_client/client_side_access_tokens/types/__init__.py +2 -0
  77. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_request_policy_item.py +4 -3
  78. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response.py +6 -5
  79. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy.py +4 -3
  80. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy_data_item.py +4 -3
  81. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response.py +6 -5
  82. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item.py +6 -5
  83. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy.py +4 -3
  84. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy_data_item.py +4 -3
  85. letta_client/core/__init__.py +5 -0
  86. letta_client/core/api_error.py +13 -5
  87. letta_client/core/client_wrapper.py +14 -5
  88. letta_client/core/force_multipart.py +16 -0
  89. letta_client/core/http_client.py +70 -26
  90. letta_client/core/http_response.py +55 -0
  91. letta_client/core/jsonable_encoder.py +0 -1
  92. letta_client/core/pydantic_utilities.py +70 -111
  93. letta_client/core/serialization.py +7 -3
  94. letta_client/core/unchecked_base_model.py +40 -4
  95. letta_client/embedding_models/__init__.py +2 -0
  96. letta_client/embedding_models/client.py +31 -65
  97. letta_client/embedding_models/raw_client.py +117 -0
  98. letta_client/errors/__init__.py +2 -0
  99. letta_client/errors/bad_request_error.py +4 -3
  100. letta_client/errors/conflict_error.py +4 -2
  101. letta_client/errors/internal_server_error.py +4 -3
  102. letta_client/errors/not_found_error.py +4 -3
  103. letta_client/errors/payment_required_error.py +4 -2
  104. letta_client/errors/unprocessable_entity_error.py +4 -2
  105. letta_client/folders/__init__.py +2 -0
  106. letta_client/folders/client.py +100 -564
  107. letta_client/folders/files/__init__.py +2 -0
  108. letta_client/folders/files/client.py +44 -189
  109. letta_client/folders/files/raw_client.py +391 -0
  110. letta_client/folders/passages/__init__.py +2 -0
  111. letta_client/folders/passages/client.py +33 -74
  112. letta_client/folders/passages/raw_client.py +162 -0
  113. letta_client/folders/raw_client.py +1084 -0
  114. letta_client/groups/__init__.py +2 -0
  115. letta_client/groups/client.py +87 -406
  116. letta_client/groups/messages/__init__.py +2 -0
  117. letta_client/groups/messages/client.py +110 -371
  118. letta_client/groups/messages/raw_client.py +881 -0
  119. letta_client/groups/messages/types/__init__.py +2 -0
  120. letta_client/groups/messages/types/letta_streaming_response.py +5 -4
  121. letta_client/groups/messages/types/messages_modify_request.py +3 -2
  122. letta_client/groups/messages/types/messages_modify_response.py +5 -4
  123. letta_client/groups/raw_client.py +807 -0
  124. letta_client/groups/types/__init__.py +2 -0
  125. letta_client/groups/types/group_create_manager_config.py +1 -0
  126. letta_client/groups/types/group_update_manager_config.py +1 -0
  127. letta_client/health/__init__.py +2 -0
  128. letta_client/health/client.py +31 -43
  129. letta_client/health/raw_client.py +85 -0
  130. letta_client/identities/__init__.py +2 -0
  131. letta_client/identities/client.py +115 -498
  132. letta_client/identities/properties/__init__.py +2 -0
  133. letta_client/identities/properties/client.py +32 -76
  134. letta_client/identities/properties/raw_client.py +152 -0
  135. letta_client/identities/raw_client.py +1010 -0
  136. letta_client/jobs/__init__.py +2 -0
  137. letta_client/jobs/client.py +67 -310
  138. letta_client/jobs/raw_client.py +624 -0
  139. letta_client/messages/__init__.py +2 -0
  140. letta_client/messages/client.py +41 -74
  141. letta_client/messages/raw_client.py +186 -0
  142. letta_client/models/__init__.py +2 -0
  143. letta_client/models/client.py +39 -73
  144. letta_client/models/raw_client.py +151 -0
  145. letta_client/projects/__init__.py +2 -0
  146. letta_client/projects/client.py +31 -53
  147. letta_client/projects/raw_client.py +125 -0
  148. letta_client/projects/types/__init__.py +2 -0
  149. letta_client/projects/types/projects_list_response.py +5 -4
  150. letta_client/projects/types/projects_list_response_projects_item.py +3 -2
  151. letta_client/providers/__init__.py +2 -0
  152. letta_client/providers/client.py +62 -335
  153. letta_client/providers/raw_client.py +664 -0
  154. letta_client/runs/__init__.py +2 -0
  155. letta_client/runs/client.py +56 -258
  156. letta_client/runs/messages/__init__.py +2 -0
  157. letta_client/runs/messages/client.py +34 -79
  158. letta_client/runs/messages/raw_client.py +209 -0
  159. letta_client/runs/raw_client.py +440 -0
  160. letta_client/runs/steps/__init__.py +2 -0
  161. letta_client/runs/steps/client.py +33 -76
  162. letta_client/runs/steps/raw_client.py +192 -0
  163. letta_client/runs/usage/__init__.py +2 -0
  164. letta_client/runs/usage/client.py +31 -66
  165. letta_client/runs/usage/raw_client.py +122 -0
  166. letta_client/sources/__init__.py +2 -0
  167. letta_client/sources/client.py +107 -625
  168. letta_client/sources/files/__init__.py +2 -0
  169. letta_client/sources/files/client.py +44 -189
  170. letta_client/sources/files/raw_client.py +391 -0
  171. letta_client/sources/passages/__init__.py +2 -0
  172. letta_client/sources/passages/client.py +33 -74
  173. letta_client/sources/passages/raw_client.py +162 -0
  174. letta_client/sources/raw_client.py +1209 -0
  175. letta_client/steps/__init__.py +2 -0
  176. letta_client/steps/client.py +65 -153
  177. letta_client/steps/feedback/__init__.py +2 -0
  178. letta_client/steps/feedback/client.py +32 -73
  179. letta_client/steps/feedback/raw_client.py +141 -0
  180. letta_client/steps/raw_client.py +355 -0
  181. letta_client/steps/types/__init__.py +2 -0
  182. letta_client/tags/__init__.py +2 -0
  183. letta_client/tags/client.py +33 -73
  184. letta_client/tags/raw_client.py +148 -0
  185. letta_client/telemetry/__init__.py +2 -0
  186. letta_client/telemetry/client.py +31 -66
  187. letta_client/telemetry/raw_client.py +118 -0
  188. letta_client/templates/__init__.py +2 -0
  189. letta_client/templates/agents/__init__.py +2 -0
  190. letta_client/templates/agents/client.py +48 -96
  191. letta_client/templates/agents/raw_client.py +227 -0
  192. letta_client/templates/agents/types/__init__.py +2 -0
  193. letta_client/templates/agents/types/agents_create_request_initial_message_sequence_item.py +4 -3
  194. letta_client/templates/agents/types/agents_create_response.py +4 -3
  195. letta_client/templates/client.py +36 -57
  196. letta_client/templates/raw_client.py +133 -0
  197. letta_client/templates/types/__init__.py +2 -0
  198. letta_client/templates/types/templates_list_response.py +5 -4
  199. letta_client/templates/types/templates_list_response_templates_item.py +3 -2
  200. letta_client/tools/__init__.py +2 -0
  201. letta_client/tools/client.py +195 -1322
  202. letta_client/tools/raw_client.py +2565 -0
  203. letta_client/tools/types/__init__.py +2 -0
  204. letta_client/tools/types/add_mcp_server_request.py +2 -1
  205. letta_client/tools/types/add_mcp_server_response_item.py +2 -1
  206. letta_client/tools/types/connect_mcp_server_request.py +2 -1
  207. letta_client/tools/types/delete_mcp_server_response_item.py +2 -1
  208. letta_client/tools/types/list_mcp_servers_response_value.py +1 -0
  209. letta_client/tools/types/streaming_response.py +5 -4
  210. letta_client/tools/types/test_mcp_server_request.py +2 -1
  211. letta_client/tools/types/update_mcp_server_request.py +2 -1
  212. letta_client/tools/types/update_mcp_server_response.py +2 -1
  213. letta_client/types/__init__.py +2 -0
  214. letta_client/types/action_model.py +6 -5
  215. letta_client/types/action_parameters_model.py +3 -2
  216. letta_client/types/action_response_model.py +3 -2
  217. letta_client/types/agent_environment_variable.py +3 -2
  218. letta_client/types/agent_schema.py +7 -6
  219. letta_client/types/agent_schema_tool_rules_item.py +2 -1
  220. letta_client/types/agent_state.py +14 -8
  221. letta_client/types/agent_state_response_format.py +1 -0
  222. letta_client/types/agent_state_tool_rules_item.py +4 -3
  223. letta_client/types/app_auth_scheme.py +4 -3
  224. letta_client/types/app_model.py +5 -4
  225. letta_client/types/assistant_message.py +3 -2
  226. letta_client/types/assistant_message_content.py +1 -0
  227. letta_client/types/audio.py +3 -2
  228. letta_client/types/auth_request.py +2 -1
  229. letta_client/types/auth_response.py +5 -4
  230. letta_client/types/auth_scheme_field.py +3 -2
  231. letta_client/types/bad_request_error_body.py +3 -2
  232. letta_client/types/base_64_image.py +2 -1
  233. letta_client/types/base_tool_rule_schema.py +3 -2
  234. letta_client/types/batch_job.py +4 -3
  235. letta_client/types/block.py +3 -2
  236. letta_client/types/block_update.py +2 -1
  237. letta_client/types/chat_completion_assistant_message_param.py +5 -4
  238. letta_client/types/chat_completion_assistant_message_param_content.py +1 -0
  239. letta_client/types/chat_completion_assistant_message_param_content_item.py +2 -1
  240. letta_client/types/chat_completion_audio_param.py +4 -3
  241. letta_client/types/chat_completion_content_part_image_param.py +4 -3
  242. letta_client/types/chat_completion_content_part_input_audio_param.py +4 -3
  243. letta_client/types/chat_completion_content_part_refusal_param.py +3 -2
  244. letta_client/types/chat_completion_content_part_text_param.py +3 -2
  245. letta_client/types/chat_completion_developer_message_param.py +4 -3
  246. letta_client/types/chat_completion_developer_message_param_content.py +1 -0
  247. letta_client/types/chat_completion_function_call_option_param.py +3 -2
  248. letta_client/types/chat_completion_function_message_param.py +3 -2
  249. letta_client/types/chat_completion_message_tool_call.py +4 -3
  250. letta_client/types/chat_completion_message_tool_call_param.py +4 -3
  251. letta_client/types/chat_completion_named_tool_choice_param.py +4 -3
  252. letta_client/types/chat_completion_prediction_content_param.py +4 -3
  253. letta_client/types/chat_completion_prediction_content_param_content.py +1 -0
  254. letta_client/types/chat_completion_stream_options_param.py +3 -2
  255. letta_client/types/chat_completion_system_message_param.py +4 -3
  256. letta_client/types/chat_completion_system_message_param_content.py +1 -0
  257. letta_client/types/chat_completion_tool_message_param.py +4 -3
  258. letta_client/types/chat_completion_tool_message_param_content.py +1 -0
  259. letta_client/types/chat_completion_tool_param.py +4 -3
  260. letta_client/types/chat_completion_user_message_param.py +4 -3
  261. letta_client/types/chat_completion_user_message_param_content.py +1 -0
  262. letta_client/types/chat_completion_user_message_param_content_item.py +2 -1
  263. letta_client/types/child_tool_rule.py +3 -2
  264. letta_client/types/child_tool_rule_schema.py +3 -2
  265. letta_client/types/code_input.py +3 -2
  266. letta_client/types/completion_create_params_non_streaming.py +10 -9
  267. letta_client/types/completion_create_params_non_streaming_function_call.py +1 -0
  268. letta_client/types/completion_create_params_non_streaming_messages_item.py +4 -3
  269. letta_client/types/completion_create_params_non_streaming_response_format.py +3 -2
  270. letta_client/types/completion_create_params_non_streaming_tool_choice.py +1 -0
  271. letta_client/types/completion_create_params_streaming.py +10 -9
  272. letta_client/types/completion_create_params_streaming_function_call.py +1 -0
  273. letta_client/types/completion_create_params_streaming_messages_item.py +4 -3
  274. letta_client/types/completion_create_params_streaming_response_format.py +3 -2
  275. letta_client/types/completion_create_params_streaming_tool_choice.py +1 -0
  276. letta_client/types/conditional_tool_rule.py +3 -2
  277. letta_client/types/conditional_tool_rule_schema.py +3 -2
  278. letta_client/types/conflict_error_body.py +3 -2
  279. letta_client/types/context_window_overview.py +4 -3
  280. letta_client/types/continue_tool_rule.py +3 -2
  281. letta_client/types/core_memory_block_schema.py +4 -3
  282. letta_client/types/create_block.py +3 -2
  283. letta_client/types/dynamic_manager.py +2 -1
  284. letta_client/types/dynamic_manager_update.py +2 -1
  285. letta_client/types/e_2_b_sandbox_config.py +2 -1
  286. letta_client/types/embedding_config.py +4 -3
  287. letta_client/types/file.py +4 -3
  288. letta_client/types/file_block.py +4 -3
  289. letta_client/types/file_file.py +3 -2
  290. letta_client/types/file_metadata.py +5 -4
  291. letta_client/types/file_stats.py +3 -2
  292. letta_client/types/folder.py +5 -4
  293. letta_client/types/function_call.py +3 -2
  294. letta_client/types/function_definition_input.py +3 -2
  295. letta_client/types/function_definition_output.py +3 -2
  296. letta_client/types/function_output.py +3 -2
  297. letta_client/types/function_tool.py +4 -3
  298. letta_client/types/generate_tool_input.py +3 -2
  299. letta_client/types/generate_tool_output.py +4 -3
  300. letta_client/types/group.py +4 -3
  301. letta_client/types/health.py +3 -2
  302. letta_client/types/hidden_reasoning_message.py +4 -3
  303. letta_client/types/http_validation_error.py +4 -3
  304. letta_client/types/identity.py +4 -3
  305. letta_client/types/identity_property.py +5 -4
  306. letta_client/types/image_content.py +3 -2
  307. letta_client/types/image_content_source.py +1 -0
  308. letta_client/types/image_url.py +4 -3
  309. letta_client/types/init_tool_rule.py +3 -2
  310. letta_client/types/input_audio.py +4 -3
  311. letta_client/types/internal_server_error_body.py +3 -2
  312. letta_client/types/job.py +4 -3
  313. letta_client/types/json_object_response_format.py +3 -2
  314. letta_client/types/json_schema.py +4 -3
  315. letta_client/types/json_schema_response_format.py +2 -1
  316. letta_client/types/letta_batch_messages.py +4 -3
  317. letta_client/types/letta_batch_request.py +4 -3
  318. letta_client/types/letta_image.py +2 -1
  319. letta_client/types/letta_message_content_union.py +4 -3
  320. letta_client/types/letta_message_union.py +5 -4
  321. letta_client/types/letta_ping.py +2 -1
  322. letta_client/types/letta_request.py +4 -3
  323. letta_client/types/letta_request_config.py +3 -2
  324. letta_client/types/letta_response.py +4 -3
  325. letta_client/types/letta_stop_reason.py +3 -2
  326. letta_client/types/letta_streaming_request.py +9 -3
  327. letta_client/types/letta_usage_statistics.py +3 -2
  328. letta_client/types/letta_user_message_content_union.py +2 -1
  329. letta_client/types/llm_config.py +6 -5
  330. letta_client/types/local_sandbox_config.py +3 -2
  331. letta_client/types/max_count_per_step_tool_rule.py +3 -2
  332. letta_client/types/max_count_per_step_tool_rule_schema.py +3 -2
  333. letta_client/types/mcp_tool.py +4 -3
  334. letta_client/types/memory.py +4 -3
  335. letta_client/types/message.py +6 -5
  336. letta_client/types/message_content_item.py +1 -0
  337. letta_client/types/message_create.py +5 -4
  338. letta_client/types/message_create_content.py +1 -0
  339. letta_client/types/message_schema.py +4 -3
  340. letta_client/types/modal_sandbox_config.py +2 -1
  341. letta_client/types/not_found_error_body.py +3 -2
  342. letta_client/types/omitted_reasoning_content.py +3 -2
  343. letta_client/types/openai_types_chat_chat_completion_message_tool_call_param_function.py +3 -2
  344. letta_client/types/openai_types_chat_chat_completion_named_tool_choice_param_function.py +3 -2
  345. letta_client/types/openai_types_chat_completion_create_params_function.py +3 -2
  346. letta_client/types/organization.py +3 -2
  347. letta_client/types/organization_create.py +2 -1
  348. letta_client/types/organization_sources_stats.py +3 -2
  349. letta_client/types/organization_update.py +2 -1
  350. letta_client/types/parameter_properties.py +3 -2
  351. letta_client/types/parameters_schema.py +4 -3
  352. letta_client/types/parent_tool_rule.py +3 -2
  353. letta_client/types/passage.py +4 -3
  354. letta_client/types/payment_required_error_body.py +3 -2
  355. letta_client/types/pip_requirement.py +3 -2
  356. letta_client/types/provider.py +5 -4
  357. letta_client/types/provider_check.py +4 -3
  358. letta_client/types/provider_trace.py +3 -2
  359. letta_client/types/reasoning_content.py +2 -1
  360. letta_client/types/reasoning_message.py +4 -3
  361. letta_client/types/redacted_reasoning_content.py +2 -1
  362. letta_client/types/required_before_exit_tool_rule.py +3 -2
  363. letta_client/types/response_format_json_object.py +3 -2
  364. letta_client/types/response_format_json_schema.py +4 -3
  365. letta_client/types/response_format_text.py +3 -2
  366. letta_client/types/round_robin_manager.py +2 -1
  367. letta_client/types/round_robin_manager_update.py +2 -1
  368. letta_client/types/run.py +4 -3
  369. letta_client/types/sandbox_config.py +4 -3
  370. letta_client/types/sandbox_config_create.py +4 -3
  371. letta_client/types/sandbox_config_create_config.py +2 -1
  372. letta_client/types/sandbox_config_update.py +3 -2
  373. letta_client/types/sandbox_config_update_config.py +2 -1
  374. letta_client/types/sandbox_environment_variable.py +3 -2
  375. letta_client/types/sandbox_environment_variable_create.py +3 -2
  376. letta_client/types/sandbox_environment_variable_update.py +2 -1
  377. letta_client/types/sleeptime_manager.py +2 -1
  378. letta_client/types/sleeptime_manager_update.py +2 -1
  379. letta_client/types/source.py +5 -4
  380. letta_client/types/source_create.py +4 -3
  381. letta_client/types/source_stats.py +4 -3
  382. letta_client/types/source_update.py +3 -2
  383. letta_client/types/sse_server_config.py +4 -3
  384. letta_client/types/stdio_server_config.py +4 -3
  385. letta_client/types/step.py +5 -4
  386. letta_client/types/streamable_http_server_config.py +4 -3
  387. letta_client/types/supervisor_manager.py +2 -1
  388. letta_client/types/supervisor_manager_update.py +2 -1
  389. letta_client/types/system_message.py +2 -1
  390. letta_client/types/tag_schema.py +3 -2
  391. letta_client/types/terminal_tool_rule.py +3 -2
  392. letta_client/types/text_content.py +2 -1
  393. letta_client/types/text_response_format.py +3 -2
  394. letta_client/types/tool.py +5 -4
  395. letta_client/types/tool_annotations.py +4 -3
  396. letta_client/types/tool_call.py +3 -2
  397. letta_client/types/tool_call_content.py +2 -1
  398. letta_client/types/tool_call_delta.py +3 -2
  399. letta_client/types/tool_call_message.py +4 -3
  400. letta_client/types/tool_call_message_tool_call.py +1 -0
  401. letta_client/types/tool_create.py +3 -2
  402. letta_client/types/tool_env_var_schema.py +3 -2
  403. letta_client/types/tool_json_schema.py +4 -3
  404. letta_client/types/tool_return.py +4 -3
  405. letta_client/types/tool_return_content.py +2 -1
  406. letta_client/types/tool_return_message.py +4 -3
  407. letta_client/types/tool_schema.py +5 -4
  408. letta_client/types/update_assistant_message.py +3 -2
  409. letta_client/types/update_assistant_message_content.py +1 -0
  410. letta_client/types/update_reasoning_message.py +3 -2
  411. letta_client/types/update_ssemcp_server.py +2 -1
  412. letta_client/types/update_stdio_mcp_server.py +3 -2
  413. letta_client/types/update_streamable_httpmcp_server.py +2 -1
  414. letta_client/types/update_system_message.py +2 -1
  415. letta_client/types/update_user_message.py +3 -2
  416. letta_client/types/update_user_message_content.py +1 -0
  417. letta_client/types/url_image.py +2 -1
  418. letta_client/types/usage_statistics.py +5 -4
  419. letta_client/types/usage_statistics_completion_token_details.py +3 -2
  420. letta_client/types/usage_statistics_prompt_token_details.py +3 -2
  421. letta_client/types/user.py +3 -2
  422. letta_client/types/user_create.py +3 -2
  423. letta_client/types/user_message.py +3 -2
  424. letta_client/types/user_message_content.py +1 -0
  425. letta_client/types/user_update.py +3 -2
  426. letta_client/types/validation_error.py +4 -3
  427. letta_client/types/voice_sleeptime_manager.py +2 -1
  428. letta_client/types/voice_sleeptime_manager_update.py +2 -1
  429. letta_client/types/web_search_options.py +4 -3
  430. letta_client/types/web_search_options_user_location.py +4 -3
  431. letta_client/types/web_search_options_user_location_approximate.py +3 -2
  432. letta_client/voice/__init__.py +2 -0
  433. letta_client/voice/client.py +33 -74
  434. letta_client/voice/raw_client.py +154 -0
  435. {letta_client-0.1.233.dist-info → letta_client-0.1.235.dist-info}/METADATA +24 -3
  436. letta_client-0.1.235.dist-info/RECORD +503 -0
  437. letta_client-0.1.233.dist-info/RECORD +0 -455
  438. {letta_client-0.1.233.dist-info → letta_client-0.1.235.dist-info}/WHEEL +0 -0
@@ -0,0 +1,881 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import contextlib
4
+ import json
5
+ import typing
6
+ from json.decoder import JSONDecodeError
7
+
8
+ import httpx_sse
9
+ from ...core.api_error import ApiError
10
+ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
11
+ from ...core.http_response import AsyncHttpResponse, HttpResponse
12
+ from ...core.jsonable_encoder import jsonable_encoder
13
+ from ...core.request_options import RequestOptions
14
+ from ...core.serialization import convert_and_respect_annotation_metadata
15
+ from ...core.unchecked_base_model import construct_type
16
+ from ...errors.unprocessable_entity_error import UnprocessableEntityError
17
+ from ...types.http_validation_error import HttpValidationError
18
+ from ...types.letta_message_union import LettaMessageUnion
19
+ from ...types.letta_response import LettaResponse
20
+ from ...types.message_create import MessageCreate
21
+ from ...types.message_type import MessageType
22
+ from .types.letta_streaming_response import LettaStreamingResponse
23
+ from .types.messages_modify_request import MessagesModifyRequest
24
+ from .types.messages_modify_response import MessagesModifyResponse
25
+
26
+ # this is used as the default value for optional parameters
27
+ OMIT = typing.cast(typing.Any, ...)
28
+
29
+
30
+ class RawMessagesClient:
31
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
32
+ self._client_wrapper = client_wrapper
33
+
34
+ def list(
35
+ self,
36
+ group_id: str,
37
+ *,
38
+ after: typing.Optional[str] = None,
39
+ before: typing.Optional[str] = None,
40
+ limit: typing.Optional[int] = None,
41
+ use_assistant_message: typing.Optional[bool] = None,
42
+ assistant_message_tool_name: typing.Optional[str] = None,
43
+ assistant_message_tool_kwarg: typing.Optional[str] = None,
44
+ request_options: typing.Optional[RequestOptions] = None,
45
+ ) -> HttpResponse[typing.List[LettaMessageUnion]]:
46
+ """
47
+ Retrieve message history for an agent.
48
+
49
+ Parameters
50
+ ----------
51
+ group_id : str
52
+
53
+ after : typing.Optional[str]
54
+ Message after which to retrieve the returned messages.
55
+
56
+ before : typing.Optional[str]
57
+ Message before which to retrieve the returned messages.
58
+
59
+ limit : typing.Optional[int]
60
+ Maximum number of messages to retrieve.
61
+
62
+ use_assistant_message : typing.Optional[bool]
63
+ Whether to use assistant messages
64
+
65
+ assistant_message_tool_name : typing.Optional[str]
66
+ The name of the designated message tool.
67
+
68
+ assistant_message_tool_kwarg : typing.Optional[str]
69
+ The name of the message argument.
70
+
71
+ request_options : typing.Optional[RequestOptions]
72
+ Request-specific configuration.
73
+
74
+ Returns
75
+ -------
76
+ HttpResponse[typing.List[LettaMessageUnion]]
77
+ Successful Response
78
+ """
79
+ _response = self._client_wrapper.httpx_client.request(
80
+ f"v1/groups/{jsonable_encoder(group_id)}/messages",
81
+ method="GET",
82
+ params={
83
+ "after": after,
84
+ "before": before,
85
+ "limit": limit,
86
+ "use_assistant_message": use_assistant_message,
87
+ "assistant_message_tool_name": assistant_message_tool_name,
88
+ "assistant_message_tool_kwarg": assistant_message_tool_kwarg,
89
+ },
90
+ request_options=request_options,
91
+ )
92
+ try:
93
+ if 200 <= _response.status_code < 300:
94
+ _data = typing.cast(
95
+ typing.List[LettaMessageUnion],
96
+ construct_type(
97
+ type_=typing.List[LettaMessageUnion], # type: ignore
98
+ object_=_response.json(),
99
+ ),
100
+ )
101
+ return HttpResponse(response=_response, data=_data)
102
+ if _response.status_code == 422:
103
+ raise UnprocessableEntityError(
104
+ headers=dict(_response.headers),
105
+ body=typing.cast(
106
+ HttpValidationError,
107
+ construct_type(
108
+ type_=HttpValidationError, # type: ignore
109
+ object_=_response.json(),
110
+ ),
111
+ ),
112
+ )
113
+ _response_json = _response.json()
114
+ except JSONDecodeError:
115
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
116
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
117
+
118
+ def create(
119
+ self,
120
+ group_id: str,
121
+ *,
122
+ messages: typing.Sequence[MessageCreate],
123
+ max_steps: typing.Optional[int] = OMIT,
124
+ use_assistant_message: typing.Optional[bool] = OMIT,
125
+ assistant_message_tool_name: typing.Optional[str] = OMIT,
126
+ assistant_message_tool_kwarg: typing.Optional[str] = OMIT,
127
+ include_return_message_types: typing.Optional[typing.Sequence[MessageType]] = OMIT,
128
+ enable_thinking: typing.Optional[str] = OMIT,
129
+ request_options: typing.Optional[RequestOptions] = None,
130
+ ) -> HttpResponse[LettaResponse]:
131
+ """
132
+ Process a user message and return the group's response.
133
+ This endpoint accepts a message from a user and processes it through through agents in the group based on the specified pattern
134
+
135
+ Parameters
136
+ ----------
137
+ group_id : str
138
+
139
+ messages : typing.Sequence[MessageCreate]
140
+ The messages to be sent to the agent.
141
+
142
+ max_steps : typing.Optional[int]
143
+ Maximum number of steps the agent should take to process the request.
144
+
145
+ use_assistant_message : typing.Optional[bool]
146
+ Whether the server should parse specific tool call arguments (default `send_message`) as `AssistantMessage` objects.
147
+
148
+ assistant_message_tool_name : typing.Optional[str]
149
+ The name of the designated message tool.
150
+
151
+ assistant_message_tool_kwarg : typing.Optional[str]
152
+ The name of the message argument in the designated message tool.
153
+
154
+ include_return_message_types : typing.Optional[typing.Sequence[MessageType]]
155
+ Only return specified message types in the response. If `None` (default) returns all messages.
156
+
157
+ enable_thinking : typing.Optional[str]
158
+ If set to True, enables reasoning before responses or tool calls from the agent.
159
+
160
+ request_options : typing.Optional[RequestOptions]
161
+ Request-specific configuration.
162
+
163
+ Returns
164
+ -------
165
+ HttpResponse[LettaResponse]
166
+ Successful Response
167
+ """
168
+ _response = self._client_wrapper.httpx_client.request(
169
+ f"v1/groups/{jsonable_encoder(group_id)}/messages",
170
+ method="POST",
171
+ json={
172
+ "messages": convert_and_respect_annotation_metadata(
173
+ object_=messages, annotation=typing.Sequence[MessageCreate], direction="write"
174
+ ),
175
+ "max_steps": max_steps,
176
+ "use_assistant_message": use_assistant_message,
177
+ "assistant_message_tool_name": assistant_message_tool_name,
178
+ "assistant_message_tool_kwarg": assistant_message_tool_kwarg,
179
+ "include_return_message_types": include_return_message_types,
180
+ "enable_thinking": enable_thinking,
181
+ },
182
+ headers={
183
+ "content-type": "application/json",
184
+ },
185
+ request_options=request_options,
186
+ omit=OMIT,
187
+ )
188
+ try:
189
+ if 200 <= _response.status_code < 300:
190
+ _data = typing.cast(
191
+ LettaResponse,
192
+ construct_type(
193
+ type_=LettaResponse, # type: ignore
194
+ object_=_response.json(),
195
+ ),
196
+ )
197
+ return HttpResponse(response=_response, data=_data)
198
+ if _response.status_code == 422:
199
+ raise UnprocessableEntityError(
200
+ headers=dict(_response.headers),
201
+ body=typing.cast(
202
+ HttpValidationError,
203
+ construct_type(
204
+ type_=HttpValidationError, # type: ignore
205
+ object_=_response.json(),
206
+ ),
207
+ ),
208
+ )
209
+ _response_json = _response.json()
210
+ except JSONDecodeError:
211
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
212
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
213
+
214
+ @contextlib.contextmanager
215
+ def create_stream(
216
+ self,
217
+ group_id: str,
218
+ *,
219
+ messages: typing.Sequence[MessageCreate],
220
+ max_steps: typing.Optional[int] = OMIT,
221
+ use_assistant_message: typing.Optional[bool] = OMIT,
222
+ assistant_message_tool_name: typing.Optional[str] = OMIT,
223
+ assistant_message_tool_kwarg: typing.Optional[str] = OMIT,
224
+ include_return_message_types: typing.Optional[typing.Sequence[MessageType]] = OMIT,
225
+ enable_thinking: typing.Optional[str] = OMIT,
226
+ stream_tokens: typing.Optional[bool] = OMIT,
227
+ include_pings: typing.Optional[bool] = OMIT,
228
+ request_options: typing.Optional[RequestOptions] = None,
229
+ ) -> typing.Iterator[HttpResponse[typing.Iterator[LettaStreamingResponse]]]:
230
+ """
231
+ Process a user message and return the group's responses.
232
+ This endpoint accepts a message from a user and processes it through agents in the group based on the specified pattern.
233
+ It will stream the steps of the response always, and stream the tokens if 'stream_tokens' is set to True.
234
+
235
+ Parameters
236
+ ----------
237
+ group_id : str
238
+
239
+ messages : typing.Sequence[MessageCreate]
240
+ The messages to be sent to the agent.
241
+
242
+ max_steps : typing.Optional[int]
243
+ Maximum number of steps the agent should take to process the request.
244
+
245
+ use_assistant_message : typing.Optional[bool]
246
+ Whether the server should parse specific tool call arguments (default `send_message`) as `AssistantMessage` objects.
247
+
248
+ assistant_message_tool_name : typing.Optional[str]
249
+ The name of the designated message tool.
250
+
251
+ assistant_message_tool_kwarg : typing.Optional[str]
252
+ The name of the message argument in the designated message tool.
253
+
254
+ include_return_message_types : typing.Optional[typing.Sequence[MessageType]]
255
+ Only return specified message types in the response. If `None` (default) returns all messages.
256
+
257
+ enable_thinking : typing.Optional[str]
258
+ If set to True, enables reasoning before responses or tool calls from the agent.
259
+
260
+ stream_tokens : typing.Optional[bool]
261
+ Flag to determine if individual tokens should be streamed. Set to True for token streaming (requires stream_steps = True).
262
+
263
+ include_pings : typing.Optional[bool]
264
+ Whether to include periodic keepalive ping messages in the stream to prevent connection timeouts.
265
+
266
+ request_options : typing.Optional[RequestOptions]
267
+ Request-specific configuration.
268
+
269
+ Yields
270
+ ------
271
+ typing.Iterator[HttpResponse[typing.Iterator[LettaStreamingResponse]]]
272
+ Successful response
273
+ """
274
+ with self._client_wrapper.httpx_client.stream(
275
+ f"v1/groups/{jsonable_encoder(group_id)}/messages/stream",
276
+ method="POST",
277
+ json={
278
+ "messages": convert_and_respect_annotation_metadata(
279
+ object_=messages, annotation=typing.Sequence[MessageCreate], direction="write"
280
+ ),
281
+ "max_steps": max_steps,
282
+ "use_assistant_message": use_assistant_message,
283
+ "assistant_message_tool_name": assistant_message_tool_name,
284
+ "assistant_message_tool_kwarg": assistant_message_tool_kwarg,
285
+ "include_return_message_types": include_return_message_types,
286
+ "enable_thinking": enable_thinking,
287
+ "stream_tokens": stream_tokens,
288
+ "include_pings": include_pings,
289
+ },
290
+ headers={
291
+ "content-type": "application/json",
292
+ },
293
+ request_options=request_options,
294
+ omit=OMIT,
295
+ ) as _response:
296
+
297
+ def _stream() -> HttpResponse[typing.Iterator[LettaStreamingResponse]]:
298
+ try:
299
+ if 200 <= _response.status_code < 300:
300
+
301
+ def _iter():
302
+ _event_source = httpx_sse.EventSource(_response)
303
+ for _sse in _event_source.iter_sse():
304
+ if _sse.data == None:
305
+ return
306
+ try:
307
+ yield typing.cast(
308
+ LettaStreamingResponse,
309
+ construct_type(
310
+ type_=LettaStreamingResponse, # type: ignore
311
+ object_=json.loads(_sse.data),
312
+ ),
313
+ )
314
+ except Exception:
315
+ pass
316
+ return
317
+
318
+ return HttpResponse(response=_response, data=_iter())
319
+ _response.read()
320
+ if _response.status_code == 422:
321
+ raise UnprocessableEntityError(
322
+ headers=dict(_response.headers),
323
+ body=typing.cast(
324
+ HttpValidationError,
325
+ construct_type(
326
+ type_=HttpValidationError, # type: ignore
327
+ object_=_response.json(),
328
+ ),
329
+ ),
330
+ )
331
+ _response_json = _response.json()
332
+ except JSONDecodeError:
333
+ raise ApiError(
334
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
335
+ )
336
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
337
+
338
+ yield _stream()
339
+
340
+ def modify(
341
+ self,
342
+ group_id: str,
343
+ message_id: str,
344
+ *,
345
+ request: MessagesModifyRequest,
346
+ request_options: typing.Optional[RequestOptions] = None,
347
+ ) -> HttpResponse[MessagesModifyResponse]:
348
+ """
349
+ Update the details of a message associated with an agent.
350
+
351
+ Parameters
352
+ ----------
353
+ group_id : str
354
+
355
+ message_id : str
356
+
357
+ request : MessagesModifyRequest
358
+
359
+ request_options : typing.Optional[RequestOptions]
360
+ Request-specific configuration.
361
+
362
+ Returns
363
+ -------
364
+ HttpResponse[MessagesModifyResponse]
365
+ Successful Response
366
+ """
367
+ _response = self._client_wrapper.httpx_client.request(
368
+ f"v1/groups/{jsonable_encoder(group_id)}/messages/{jsonable_encoder(message_id)}",
369
+ method="PATCH",
370
+ json=convert_and_respect_annotation_metadata(
371
+ object_=request, annotation=MessagesModifyRequest, direction="write"
372
+ ),
373
+ headers={
374
+ "content-type": "application/json",
375
+ },
376
+ request_options=request_options,
377
+ omit=OMIT,
378
+ )
379
+ try:
380
+ if 200 <= _response.status_code < 300:
381
+ _data = typing.cast(
382
+ MessagesModifyResponse,
383
+ construct_type(
384
+ type_=MessagesModifyResponse, # type: ignore
385
+ object_=_response.json(),
386
+ ),
387
+ )
388
+ return HttpResponse(response=_response, data=_data)
389
+ if _response.status_code == 422:
390
+ raise UnprocessableEntityError(
391
+ headers=dict(_response.headers),
392
+ body=typing.cast(
393
+ HttpValidationError,
394
+ construct_type(
395
+ type_=HttpValidationError, # type: ignore
396
+ object_=_response.json(),
397
+ ),
398
+ ),
399
+ )
400
+ _response_json = _response.json()
401
+ except JSONDecodeError:
402
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
403
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
404
+
405
+ def reset(
406
+ self, group_id: str, *, request_options: typing.Optional[RequestOptions] = None
407
+ ) -> HttpResponse[typing.Optional[typing.Any]]:
408
+ """
409
+ Delete the group messages for all agents that are part of the multi-agent group.
410
+
411
+ Parameters
412
+ ----------
413
+ group_id : str
414
+
415
+ request_options : typing.Optional[RequestOptions]
416
+ Request-specific configuration.
417
+
418
+ Returns
419
+ -------
420
+ HttpResponse[typing.Optional[typing.Any]]
421
+ Successful Response
422
+ """
423
+ _response = self._client_wrapper.httpx_client.request(
424
+ f"v1/groups/{jsonable_encoder(group_id)}/reset-messages",
425
+ method="PATCH",
426
+ request_options=request_options,
427
+ )
428
+ try:
429
+ if _response is None or not _response.text.strip():
430
+ return HttpResponse(response=_response, data=None)
431
+ if 200 <= _response.status_code < 300:
432
+ _data = typing.cast(
433
+ typing.Optional[typing.Any],
434
+ construct_type(
435
+ type_=typing.Optional[typing.Any], # type: ignore
436
+ object_=_response.json(),
437
+ ),
438
+ )
439
+ return HttpResponse(response=_response, data=_data)
440
+ if _response.status_code == 422:
441
+ raise UnprocessableEntityError(
442
+ headers=dict(_response.headers),
443
+ body=typing.cast(
444
+ HttpValidationError,
445
+ construct_type(
446
+ type_=HttpValidationError, # type: ignore
447
+ object_=_response.json(),
448
+ ),
449
+ ),
450
+ )
451
+ _response_json = _response.json()
452
+ except JSONDecodeError:
453
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
454
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
455
+
456
+
457
+ class AsyncRawMessagesClient:
458
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
459
+ self._client_wrapper = client_wrapper
460
+
461
+ async def list(
462
+ self,
463
+ group_id: str,
464
+ *,
465
+ after: typing.Optional[str] = None,
466
+ before: typing.Optional[str] = None,
467
+ limit: typing.Optional[int] = None,
468
+ use_assistant_message: typing.Optional[bool] = None,
469
+ assistant_message_tool_name: typing.Optional[str] = None,
470
+ assistant_message_tool_kwarg: typing.Optional[str] = None,
471
+ request_options: typing.Optional[RequestOptions] = None,
472
+ ) -> AsyncHttpResponse[typing.List[LettaMessageUnion]]:
473
+ """
474
+ Retrieve message history for an agent.
475
+
476
+ Parameters
477
+ ----------
478
+ group_id : str
479
+
480
+ after : typing.Optional[str]
481
+ Message after which to retrieve the returned messages.
482
+
483
+ before : typing.Optional[str]
484
+ Message before which to retrieve the returned messages.
485
+
486
+ limit : typing.Optional[int]
487
+ Maximum number of messages to retrieve.
488
+
489
+ use_assistant_message : typing.Optional[bool]
490
+ Whether to use assistant messages
491
+
492
+ assistant_message_tool_name : typing.Optional[str]
493
+ The name of the designated message tool.
494
+
495
+ assistant_message_tool_kwarg : typing.Optional[str]
496
+ The name of the message argument.
497
+
498
+ request_options : typing.Optional[RequestOptions]
499
+ Request-specific configuration.
500
+
501
+ Returns
502
+ -------
503
+ AsyncHttpResponse[typing.List[LettaMessageUnion]]
504
+ Successful Response
505
+ """
506
+ _response = await self._client_wrapper.httpx_client.request(
507
+ f"v1/groups/{jsonable_encoder(group_id)}/messages",
508
+ method="GET",
509
+ params={
510
+ "after": after,
511
+ "before": before,
512
+ "limit": limit,
513
+ "use_assistant_message": use_assistant_message,
514
+ "assistant_message_tool_name": assistant_message_tool_name,
515
+ "assistant_message_tool_kwarg": assistant_message_tool_kwarg,
516
+ },
517
+ request_options=request_options,
518
+ )
519
+ try:
520
+ if 200 <= _response.status_code < 300:
521
+ _data = typing.cast(
522
+ typing.List[LettaMessageUnion],
523
+ construct_type(
524
+ type_=typing.List[LettaMessageUnion], # type: ignore
525
+ object_=_response.json(),
526
+ ),
527
+ )
528
+ return AsyncHttpResponse(response=_response, data=_data)
529
+ if _response.status_code == 422:
530
+ raise UnprocessableEntityError(
531
+ headers=dict(_response.headers),
532
+ body=typing.cast(
533
+ HttpValidationError,
534
+ construct_type(
535
+ type_=HttpValidationError, # type: ignore
536
+ object_=_response.json(),
537
+ ),
538
+ ),
539
+ )
540
+ _response_json = _response.json()
541
+ except JSONDecodeError:
542
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
543
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
544
+
545
+ async def create(
546
+ self,
547
+ group_id: str,
548
+ *,
549
+ messages: typing.Sequence[MessageCreate],
550
+ max_steps: typing.Optional[int] = OMIT,
551
+ use_assistant_message: typing.Optional[bool] = OMIT,
552
+ assistant_message_tool_name: typing.Optional[str] = OMIT,
553
+ assistant_message_tool_kwarg: typing.Optional[str] = OMIT,
554
+ include_return_message_types: typing.Optional[typing.Sequence[MessageType]] = OMIT,
555
+ enable_thinking: typing.Optional[str] = OMIT,
556
+ request_options: typing.Optional[RequestOptions] = None,
557
+ ) -> AsyncHttpResponse[LettaResponse]:
558
+ """
559
+ Process a user message and return the group's response.
560
+ This endpoint accepts a message from a user and processes it through through agents in the group based on the specified pattern
561
+
562
+ Parameters
563
+ ----------
564
+ group_id : str
565
+
566
+ messages : typing.Sequence[MessageCreate]
567
+ The messages to be sent to the agent.
568
+
569
+ max_steps : typing.Optional[int]
570
+ Maximum number of steps the agent should take to process the request.
571
+
572
+ use_assistant_message : typing.Optional[bool]
573
+ Whether the server should parse specific tool call arguments (default `send_message`) as `AssistantMessage` objects.
574
+
575
+ assistant_message_tool_name : typing.Optional[str]
576
+ The name of the designated message tool.
577
+
578
+ assistant_message_tool_kwarg : typing.Optional[str]
579
+ The name of the message argument in the designated message tool.
580
+
581
+ include_return_message_types : typing.Optional[typing.Sequence[MessageType]]
582
+ Only return specified message types in the response. If `None` (default) returns all messages.
583
+
584
+ enable_thinking : typing.Optional[str]
585
+ If set to True, enables reasoning before responses or tool calls from the agent.
586
+
587
+ request_options : typing.Optional[RequestOptions]
588
+ Request-specific configuration.
589
+
590
+ Returns
591
+ -------
592
+ AsyncHttpResponse[LettaResponse]
593
+ Successful Response
594
+ """
595
+ _response = await self._client_wrapper.httpx_client.request(
596
+ f"v1/groups/{jsonable_encoder(group_id)}/messages",
597
+ method="POST",
598
+ json={
599
+ "messages": convert_and_respect_annotation_metadata(
600
+ object_=messages, annotation=typing.Sequence[MessageCreate], direction="write"
601
+ ),
602
+ "max_steps": max_steps,
603
+ "use_assistant_message": use_assistant_message,
604
+ "assistant_message_tool_name": assistant_message_tool_name,
605
+ "assistant_message_tool_kwarg": assistant_message_tool_kwarg,
606
+ "include_return_message_types": include_return_message_types,
607
+ "enable_thinking": enable_thinking,
608
+ },
609
+ headers={
610
+ "content-type": "application/json",
611
+ },
612
+ request_options=request_options,
613
+ omit=OMIT,
614
+ )
615
+ try:
616
+ if 200 <= _response.status_code < 300:
617
+ _data = typing.cast(
618
+ LettaResponse,
619
+ construct_type(
620
+ type_=LettaResponse, # type: ignore
621
+ object_=_response.json(),
622
+ ),
623
+ )
624
+ return AsyncHttpResponse(response=_response, data=_data)
625
+ if _response.status_code == 422:
626
+ raise UnprocessableEntityError(
627
+ headers=dict(_response.headers),
628
+ body=typing.cast(
629
+ HttpValidationError,
630
+ construct_type(
631
+ type_=HttpValidationError, # type: ignore
632
+ object_=_response.json(),
633
+ ),
634
+ ),
635
+ )
636
+ _response_json = _response.json()
637
+ except JSONDecodeError:
638
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
639
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
640
+
641
+ @contextlib.asynccontextmanager
642
+ async def create_stream(
643
+ self,
644
+ group_id: str,
645
+ *,
646
+ messages: typing.Sequence[MessageCreate],
647
+ max_steps: typing.Optional[int] = OMIT,
648
+ use_assistant_message: typing.Optional[bool] = OMIT,
649
+ assistant_message_tool_name: typing.Optional[str] = OMIT,
650
+ assistant_message_tool_kwarg: typing.Optional[str] = OMIT,
651
+ include_return_message_types: typing.Optional[typing.Sequence[MessageType]] = OMIT,
652
+ enable_thinking: typing.Optional[str] = OMIT,
653
+ stream_tokens: typing.Optional[bool] = OMIT,
654
+ include_pings: typing.Optional[bool] = OMIT,
655
+ request_options: typing.Optional[RequestOptions] = None,
656
+ ) -> typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[LettaStreamingResponse]]]:
657
+ """
658
+ Process a user message and return the group's responses.
659
+ This endpoint accepts a message from a user and processes it through agents in the group based on the specified pattern.
660
+ It will stream the steps of the response always, and stream the tokens if 'stream_tokens' is set to True.
661
+
662
+ Parameters
663
+ ----------
664
+ group_id : str
665
+
666
+ messages : typing.Sequence[MessageCreate]
667
+ The messages to be sent to the agent.
668
+
669
+ max_steps : typing.Optional[int]
670
+ Maximum number of steps the agent should take to process the request.
671
+
672
+ use_assistant_message : typing.Optional[bool]
673
+ Whether the server should parse specific tool call arguments (default `send_message`) as `AssistantMessage` objects.
674
+
675
+ assistant_message_tool_name : typing.Optional[str]
676
+ The name of the designated message tool.
677
+
678
+ assistant_message_tool_kwarg : typing.Optional[str]
679
+ The name of the message argument in the designated message tool.
680
+
681
+ include_return_message_types : typing.Optional[typing.Sequence[MessageType]]
682
+ Only return specified message types in the response. If `None` (default) returns all messages.
683
+
684
+ enable_thinking : typing.Optional[str]
685
+ If set to True, enables reasoning before responses or tool calls from the agent.
686
+
687
+ stream_tokens : typing.Optional[bool]
688
+ Flag to determine if individual tokens should be streamed. Set to True for token streaming (requires stream_steps = True).
689
+
690
+ include_pings : typing.Optional[bool]
691
+ Whether to include periodic keepalive ping messages in the stream to prevent connection timeouts.
692
+
693
+ request_options : typing.Optional[RequestOptions]
694
+ Request-specific configuration.
695
+
696
+ Yields
697
+ ------
698
+ typing.AsyncIterator[AsyncHttpResponse[typing.AsyncIterator[LettaStreamingResponse]]]
699
+ Successful response
700
+ """
701
+ async with self._client_wrapper.httpx_client.stream(
702
+ f"v1/groups/{jsonable_encoder(group_id)}/messages/stream",
703
+ method="POST",
704
+ json={
705
+ "messages": convert_and_respect_annotation_metadata(
706
+ object_=messages, annotation=typing.Sequence[MessageCreate], direction="write"
707
+ ),
708
+ "max_steps": max_steps,
709
+ "use_assistant_message": use_assistant_message,
710
+ "assistant_message_tool_name": assistant_message_tool_name,
711
+ "assistant_message_tool_kwarg": assistant_message_tool_kwarg,
712
+ "include_return_message_types": include_return_message_types,
713
+ "enable_thinking": enable_thinking,
714
+ "stream_tokens": stream_tokens,
715
+ "include_pings": include_pings,
716
+ },
717
+ headers={
718
+ "content-type": "application/json",
719
+ },
720
+ request_options=request_options,
721
+ omit=OMIT,
722
+ ) as _response:
723
+
724
+ async def _stream() -> AsyncHttpResponse[typing.AsyncIterator[LettaStreamingResponse]]:
725
+ try:
726
+ if 200 <= _response.status_code < 300:
727
+
728
+ async def _iter():
729
+ _event_source = httpx_sse.EventSource(_response)
730
+ async for _sse in _event_source.aiter_sse():
731
+ if _sse.data == None:
732
+ return
733
+ try:
734
+ yield typing.cast(
735
+ LettaStreamingResponse,
736
+ construct_type(
737
+ type_=LettaStreamingResponse, # type: ignore
738
+ object_=json.loads(_sse.data),
739
+ ),
740
+ )
741
+ except Exception:
742
+ pass
743
+ return
744
+
745
+ return AsyncHttpResponse(response=_response, data=_iter())
746
+ await _response.aread()
747
+ if _response.status_code == 422:
748
+ raise UnprocessableEntityError(
749
+ headers=dict(_response.headers),
750
+ body=typing.cast(
751
+ HttpValidationError,
752
+ construct_type(
753
+ type_=HttpValidationError, # type: ignore
754
+ object_=_response.json(),
755
+ ),
756
+ ),
757
+ )
758
+ _response_json = _response.json()
759
+ except JSONDecodeError:
760
+ raise ApiError(
761
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
762
+ )
763
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
764
+
765
+ yield await _stream()
766
+
767
+ async def modify(
768
+ self,
769
+ group_id: str,
770
+ message_id: str,
771
+ *,
772
+ request: MessagesModifyRequest,
773
+ request_options: typing.Optional[RequestOptions] = None,
774
+ ) -> AsyncHttpResponse[MessagesModifyResponse]:
775
+ """
776
+ Update the details of a message associated with an agent.
777
+
778
+ Parameters
779
+ ----------
780
+ group_id : str
781
+
782
+ message_id : str
783
+
784
+ request : MessagesModifyRequest
785
+
786
+ request_options : typing.Optional[RequestOptions]
787
+ Request-specific configuration.
788
+
789
+ Returns
790
+ -------
791
+ AsyncHttpResponse[MessagesModifyResponse]
792
+ Successful Response
793
+ """
794
+ _response = await self._client_wrapper.httpx_client.request(
795
+ f"v1/groups/{jsonable_encoder(group_id)}/messages/{jsonable_encoder(message_id)}",
796
+ method="PATCH",
797
+ json=convert_and_respect_annotation_metadata(
798
+ object_=request, annotation=MessagesModifyRequest, direction="write"
799
+ ),
800
+ headers={
801
+ "content-type": "application/json",
802
+ },
803
+ request_options=request_options,
804
+ omit=OMIT,
805
+ )
806
+ try:
807
+ if 200 <= _response.status_code < 300:
808
+ _data = typing.cast(
809
+ MessagesModifyResponse,
810
+ construct_type(
811
+ type_=MessagesModifyResponse, # type: ignore
812
+ object_=_response.json(),
813
+ ),
814
+ )
815
+ return AsyncHttpResponse(response=_response, data=_data)
816
+ if _response.status_code == 422:
817
+ raise UnprocessableEntityError(
818
+ headers=dict(_response.headers),
819
+ body=typing.cast(
820
+ HttpValidationError,
821
+ construct_type(
822
+ type_=HttpValidationError, # type: ignore
823
+ object_=_response.json(),
824
+ ),
825
+ ),
826
+ )
827
+ _response_json = _response.json()
828
+ except JSONDecodeError:
829
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
830
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
831
+
832
+ async def reset(
833
+ self, group_id: str, *, request_options: typing.Optional[RequestOptions] = None
834
+ ) -> AsyncHttpResponse[typing.Optional[typing.Any]]:
835
+ """
836
+ Delete the group messages for all agents that are part of the multi-agent group.
837
+
838
+ Parameters
839
+ ----------
840
+ group_id : str
841
+
842
+ request_options : typing.Optional[RequestOptions]
843
+ Request-specific configuration.
844
+
845
+ Returns
846
+ -------
847
+ AsyncHttpResponse[typing.Optional[typing.Any]]
848
+ Successful Response
849
+ """
850
+ _response = await self._client_wrapper.httpx_client.request(
851
+ f"v1/groups/{jsonable_encoder(group_id)}/reset-messages",
852
+ method="PATCH",
853
+ request_options=request_options,
854
+ )
855
+ try:
856
+ if _response is None or not _response.text.strip():
857
+ return AsyncHttpResponse(response=_response, data=None)
858
+ if 200 <= _response.status_code < 300:
859
+ _data = typing.cast(
860
+ typing.Optional[typing.Any],
861
+ construct_type(
862
+ type_=typing.Optional[typing.Any], # type: ignore
863
+ object_=_response.json(),
864
+ ),
865
+ )
866
+ return AsyncHttpResponse(response=_response, data=_data)
867
+ if _response.status_code == 422:
868
+ raise UnprocessableEntityError(
869
+ headers=dict(_response.headers),
870
+ body=typing.cast(
871
+ HttpValidationError,
872
+ construct_type(
873
+ type_=HttpValidationError, # type: ignore
874
+ object_=_response.json(),
875
+ ),
876
+ ),
877
+ )
878
+ _response_json = _response.json()
879
+ except JSONDecodeError:
880
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
881
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)