letta-client 0.1.233__py3-none-any.whl → 0.1.234__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 +329 -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 +2068 -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 +9 -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.234.dist-info}/METADATA +24 -3
  436. letta_client-0.1.234.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.234.dist-info}/WHEEL +0 -0
@@ -0,0 +1,624 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.request_options import RequestOptions
11
+ from ..core.unchecked_base_model import construct_type
12
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
13
+ from ..types.http_validation_error import HttpValidationError
14
+ from ..types.job import Job
15
+
16
+
17
+ class RawJobsClient:
18
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
19
+ self._client_wrapper = client_wrapper
20
+
21
+ def list(
22
+ self,
23
+ *,
24
+ source_id: typing.Optional[str] = None,
25
+ before: typing.Optional[str] = None,
26
+ after: typing.Optional[str] = None,
27
+ limit: typing.Optional[int] = None,
28
+ ascending: typing.Optional[bool] = None,
29
+ request_options: typing.Optional[RequestOptions] = None,
30
+ ) -> HttpResponse[typing.List[Job]]:
31
+ """
32
+ List all jobs.
33
+ TODO (cliandy): implementation for pagination
34
+
35
+ Parameters
36
+ ----------
37
+ source_id : typing.Optional[str]
38
+ Only list jobs associated with the source.
39
+
40
+ before : typing.Optional[str]
41
+ Cursor for pagination
42
+
43
+ after : typing.Optional[str]
44
+ Cursor for pagination
45
+
46
+ limit : typing.Optional[int]
47
+ Limit for pagination
48
+
49
+ ascending : typing.Optional[bool]
50
+ Whether to sort jobs oldest to newest (True, default) or newest to oldest (False)
51
+
52
+ request_options : typing.Optional[RequestOptions]
53
+ Request-specific configuration.
54
+
55
+ Returns
56
+ -------
57
+ HttpResponse[typing.List[Job]]
58
+ Successful Response
59
+ """
60
+ _response = self._client_wrapper.httpx_client.request(
61
+ "v1/jobs/",
62
+ method="GET",
63
+ params={
64
+ "source_id": source_id,
65
+ "before": before,
66
+ "after": after,
67
+ "limit": limit,
68
+ "ascending": ascending,
69
+ },
70
+ request_options=request_options,
71
+ )
72
+ try:
73
+ if 200 <= _response.status_code < 300:
74
+ _data = typing.cast(
75
+ typing.List[Job],
76
+ construct_type(
77
+ type_=typing.List[Job], # type: ignore
78
+ object_=_response.json(),
79
+ ),
80
+ )
81
+ return HttpResponse(response=_response, data=_data)
82
+ if _response.status_code == 422:
83
+ raise UnprocessableEntityError(
84
+ headers=dict(_response.headers),
85
+ body=typing.cast(
86
+ HttpValidationError,
87
+ construct_type(
88
+ type_=HttpValidationError, # type: ignore
89
+ object_=_response.json(),
90
+ ),
91
+ ),
92
+ )
93
+ _response_json = _response.json()
94
+ except JSONDecodeError:
95
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
96
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
97
+
98
+ def list_active(
99
+ self,
100
+ *,
101
+ source_id: typing.Optional[str] = None,
102
+ before: typing.Optional[str] = None,
103
+ after: typing.Optional[str] = None,
104
+ limit: typing.Optional[int] = None,
105
+ ascending: typing.Optional[bool] = None,
106
+ request_options: typing.Optional[RequestOptions] = None,
107
+ ) -> HttpResponse[typing.List[Job]]:
108
+ """
109
+ List all active jobs.
110
+
111
+ Parameters
112
+ ----------
113
+ source_id : typing.Optional[str]
114
+ Only list jobs associated with the source.
115
+
116
+ before : typing.Optional[str]
117
+ Cursor for pagination
118
+
119
+ after : typing.Optional[str]
120
+ Cursor for pagination
121
+
122
+ limit : typing.Optional[int]
123
+ Limit for pagination
124
+
125
+ ascending : typing.Optional[bool]
126
+ Whether to sort jobs oldest to newest (True, default) or newest to oldest (False)
127
+
128
+ request_options : typing.Optional[RequestOptions]
129
+ Request-specific configuration.
130
+
131
+ Returns
132
+ -------
133
+ HttpResponse[typing.List[Job]]
134
+ Successful Response
135
+ """
136
+ _response = self._client_wrapper.httpx_client.request(
137
+ "v1/jobs/active",
138
+ method="GET",
139
+ params={
140
+ "source_id": source_id,
141
+ "before": before,
142
+ "after": after,
143
+ "limit": limit,
144
+ "ascending": ascending,
145
+ },
146
+ request_options=request_options,
147
+ )
148
+ try:
149
+ if 200 <= _response.status_code < 300:
150
+ _data = typing.cast(
151
+ typing.List[Job],
152
+ construct_type(
153
+ type_=typing.List[Job], # type: ignore
154
+ object_=_response.json(),
155
+ ),
156
+ )
157
+ return HttpResponse(response=_response, data=_data)
158
+ if _response.status_code == 422:
159
+ raise UnprocessableEntityError(
160
+ headers=dict(_response.headers),
161
+ body=typing.cast(
162
+ HttpValidationError,
163
+ construct_type(
164
+ type_=HttpValidationError, # type: ignore
165
+ object_=_response.json(),
166
+ ),
167
+ ),
168
+ )
169
+ _response_json = _response.json()
170
+ except JSONDecodeError:
171
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
172
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
173
+
174
+ def retrieve(self, job_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Job]:
175
+ """
176
+ Get the status of a job.
177
+
178
+ Parameters
179
+ ----------
180
+ job_id : str
181
+
182
+ request_options : typing.Optional[RequestOptions]
183
+ Request-specific configuration.
184
+
185
+ Returns
186
+ -------
187
+ HttpResponse[Job]
188
+ Successful Response
189
+ """
190
+ _response = self._client_wrapper.httpx_client.request(
191
+ f"v1/jobs/{jsonable_encoder(job_id)}",
192
+ method="GET",
193
+ request_options=request_options,
194
+ )
195
+ try:
196
+ if 200 <= _response.status_code < 300:
197
+ _data = typing.cast(
198
+ Job,
199
+ construct_type(
200
+ type_=Job, # type: ignore
201
+ object_=_response.json(),
202
+ ),
203
+ )
204
+ return HttpResponse(response=_response, data=_data)
205
+ if _response.status_code == 422:
206
+ raise UnprocessableEntityError(
207
+ headers=dict(_response.headers),
208
+ body=typing.cast(
209
+ HttpValidationError,
210
+ construct_type(
211
+ type_=HttpValidationError, # type: ignore
212
+ object_=_response.json(),
213
+ ),
214
+ ),
215
+ )
216
+ _response_json = _response.json()
217
+ except JSONDecodeError:
218
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
219
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
220
+
221
+ def delete(self, job_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Job]:
222
+ """
223
+ Delete a job by its job_id.
224
+
225
+ Parameters
226
+ ----------
227
+ job_id : str
228
+
229
+ request_options : typing.Optional[RequestOptions]
230
+ Request-specific configuration.
231
+
232
+ Returns
233
+ -------
234
+ HttpResponse[Job]
235
+ Successful Response
236
+ """
237
+ _response = self._client_wrapper.httpx_client.request(
238
+ f"v1/jobs/{jsonable_encoder(job_id)}",
239
+ method="DELETE",
240
+ request_options=request_options,
241
+ )
242
+ try:
243
+ if 200 <= _response.status_code < 300:
244
+ _data = typing.cast(
245
+ Job,
246
+ construct_type(
247
+ type_=Job, # type: ignore
248
+ object_=_response.json(),
249
+ ),
250
+ )
251
+ return HttpResponse(response=_response, data=_data)
252
+ if _response.status_code == 422:
253
+ raise UnprocessableEntityError(
254
+ headers=dict(_response.headers),
255
+ body=typing.cast(
256
+ HttpValidationError,
257
+ construct_type(
258
+ type_=HttpValidationError, # type: ignore
259
+ object_=_response.json(),
260
+ ),
261
+ ),
262
+ )
263
+ _response_json = _response.json()
264
+ except JSONDecodeError:
265
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
266
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
267
+
268
+ def cancel_job(self, job_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[Job]:
269
+ """
270
+ Cancel a job by its job_id.
271
+
272
+ This endpoint marks a job as cancelled, which will cause any associated
273
+ agent execution to terminate as soon as possible.
274
+
275
+ Parameters
276
+ ----------
277
+ job_id : str
278
+
279
+ request_options : typing.Optional[RequestOptions]
280
+ Request-specific configuration.
281
+
282
+ Returns
283
+ -------
284
+ HttpResponse[Job]
285
+ Successful Response
286
+ """
287
+ _response = self._client_wrapper.httpx_client.request(
288
+ f"v1/jobs/{jsonable_encoder(job_id)}/cancel",
289
+ method="PATCH",
290
+ request_options=request_options,
291
+ )
292
+ try:
293
+ if 200 <= _response.status_code < 300:
294
+ _data = typing.cast(
295
+ Job,
296
+ construct_type(
297
+ type_=Job, # type: ignore
298
+ object_=_response.json(),
299
+ ),
300
+ )
301
+ return HttpResponse(response=_response, data=_data)
302
+ if _response.status_code == 422:
303
+ raise UnprocessableEntityError(
304
+ headers=dict(_response.headers),
305
+ body=typing.cast(
306
+ HttpValidationError,
307
+ construct_type(
308
+ type_=HttpValidationError, # type: ignore
309
+ object_=_response.json(),
310
+ ),
311
+ ),
312
+ )
313
+ _response_json = _response.json()
314
+ except JSONDecodeError:
315
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
316
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
317
+
318
+
319
+ class AsyncRawJobsClient:
320
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
321
+ self._client_wrapper = client_wrapper
322
+
323
+ async def list(
324
+ self,
325
+ *,
326
+ source_id: typing.Optional[str] = None,
327
+ before: typing.Optional[str] = None,
328
+ after: typing.Optional[str] = None,
329
+ limit: typing.Optional[int] = None,
330
+ ascending: typing.Optional[bool] = None,
331
+ request_options: typing.Optional[RequestOptions] = None,
332
+ ) -> AsyncHttpResponse[typing.List[Job]]:
333
+ """
334
+ List all jobs.
335
+ TODO (cliandy): implementation for pagination
336
+
337
+ Parameters
338
+ ----------
339
+ source_id : typing.Optional[str]
340
+ Only list jobs associated with the source.
341
+
342
+ before : typing.Optional[str]
343
+ Cursor for pagination
344
+
345
+ after : typing.Optional[str]
346
+ Cursor for pagination
347
+
348
+ limit : typing.Optional[int]
349
+ Limit for pagination
350
+
351
+ ascending : typing.Optional[bool]
352
+ Whether to sort jobs oldest to newest (True, default) or newest to oldest (False)
353
+
354
+ request_options : typing.Optional[RequestOptions]
355
+ Request-specific configuration.
356
+
357
+ Returns
358
+ -------
359
+ AsyncHttpResponse[typing.List[Job]]
360
+ Successful Response
361
+ """
362
+ _response = await self._client_wrapper.httpx_client.request(
363
+ "v1/jobs/",
364
+ method="GET",
365
+ params={
366
+ "source_id": source_id,
367
+ "before": before,
368
+ "after": after,
369
+ "limit": limit,
370
+ "ascending": ascending,
371
+ },
372
+ request_options=request_options,
373
+ )
374
+ try:
375
+ if 200 <= _response.status_code < 300:
376
+ _data = typing.cast(
377
+ typing.List[Job],
378
+ construct_type(
379
+ type_=typing.List[Job], # type: ignore
380
+ object_=_response.json(),
381
+ ),
382
+ )
383
+ return AsyncHttpResponse(response=_response, data=_data)
384
+ if _response.status_code == 422:
385
+ raise UnprocessableEntityError(
386
+ headers=dict(_response.headers),
387
+ body=typing.cast(
388
+ HttpValidationError,
389
+ construct_type(
390
+ type_=HttpValidationError, # type: ignore
391
+ object_=_response.json(),
392
+ ),
393
+ ),
394
+ )
395
+ _response_json = _response.json()
396
+ except JSONDecodeError:
397
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
398
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
399
+
400
+ async def list_active(
401
+ self,
402
+ *,
403
+ source_id: typing.Optional[str] = None,
404
+ before: typing.Optional[str] = None,
405
+ after: typing.Optional[str] = None,
406
+ limit: typing.Optional[int] = None,
407
+ ascending: typing.Optional[bool] = None,
408
+ request_options: typing.Optional[RequestOptions] = None,
409
+ ) -> AsyncHttpResponse[typing.List[Job]]:
410
+ """
411
+ List all active jobs.
412
+
413
+ Parameters
414
+ ----------
415
+ source_id : typing.Optional[str]
416
+ Only list jobs associated with the source.
417
+
418
+ before : typing.Optional[str]
419
+ Cursor for pagination
420
+
421
+ after : typing.Optional[str]
422
+ Cursor for pagination
423
+
424
+ limit : typing.Optional[int]
425
+ Limit for pagination
426
+
427
+ ascending : typing.Optional[bool]
428
+ Whether to sort jobs oldest to newest (True, default) or newest to oldest (False)
429
+
430
+ request_options : typing.Optional[RequestOptions]
431
+ Request-specific configuration.
432
+
433
+ Returns
434
+ -------
435
+ AsyncHttpResponse[typing.List[Job]]
436
+ Successful Response
437
+ """
438
+ _response = await self._client_wrapper.httpx_client.request(
439
+ "v1/jobs/active",
440
+ method="GET",
441
+ params={
442
+ "source_id": source_id,
443
+ "before": before,
444
+ "after": after,
445
+ "limit": limit,
446
+ "ascending": ascending,
447
+ },
448
+ request_options=request_options,
449
+ )
450
+ try:
451
+ if 200 <= _response.status_code < 300:
452
+ _data = typing.cast(
453
+ typing.List[Job],
454
+ construct_type(
455
+ type_=typing.List[Job], # type: ignore
456
+ object_=_response.json(),
457
+ ),
458
+ )
459
+ return AsyncHttpResponse(response=_response, data=_data)
460
+ if _response.status_code == 422:
461
+ raise UnprocessableEntityError(
462
+ headers=dict(_response.headers),
463
+ body=typing.cast(
464
+ HttpValidationError,
465
+ construct_type(
466
+ type_=HttpValidationError, # type: ignore
467
+ object_=_response.json(),
468
+ ),
469
+ ),
470
+ )
471
+ _response_json = _response.json()
472
+ except JSONDecodeError:
473
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
474
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
475
+
476
+ async def retrieve(
477
+ self, job_id: str, *, request_options: typing.Optional[RequestOptions] = None
478
+ ) -> AsyncHttpResponse[Job]:
479
+ """
480
+ Get the status of a job.
481
+
482
+ Parameters
483
+ ----------
484
+ job_id : str
485
+
486
+ request_options : typing.Optional[RequestOptions]
487
+ Request-specific configuration.
488
+
489
+ Returns
490
+ -------
491
+ AsyncHttpResponse[Job]
492
+ Successful Response
493
+ """
494
+ _response = await self._client_wrapper.httpx_client.request(
495
+ f"v1/jobs/{jsonable_encoder(job_id)}",
496
+ method="GET",
497
+ request_options=request_options,
498
+ )
499
+ try:
500
+ if 200 <= _response.status_code < 300:
501
+ _data = typing.cast(
502
+ Job,
503
+ construct_type(
504
+ type_=Job, # type: ignore
505
+ object_=_response.json(),
506
+ ),
507
+ )
508
+ return AsyncHttpResponse(response=_response, data=_data)
509
+ if _response.status_code == 422:
510
+ raise UnprocessableEntityError(
511
+ headers=dict(_response.headers),
512
+ body=typing.cast(
513
+ HttpValidationError,
514
+ construct_type(
515
+ type_=HttpValidationError, # type: ignore
516
+ object_=_response.json(),
517
+ ),
518
+ ),
519
+ )
520
+ _response_json = _response.json()
521
+ except JSONDecodeError:
522
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
523
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
524
+
525
+ async def delete(
526
+ self, job_id: str, *, request_options: typing.Optional[RequestOptions] = None
527
+ ) -> AsyncHttpResponse[Job]:
528
+ """
529
+ Delete a job by its job_id.
530
+
531
+ Parameters
532
+ ----------
533
+ job_id : str
534
+
535
+ request_options : typing.Optional[RequestOptions]
536
+ Request-specific configuration.
537
+
538
+ Returns
539
+ -------
540
+ AsyncHttpResponse[Job]
541
+ Successful Response
542
+ """
543
+ _response = await self._client_wrapper.httpx_client.request(
544
+ f"v1/jobs/{jsonable_encoder(job_id)}",
545
+ method="DELETE",
546
+ request_options=request_options,
547
+ )
548
+ try:
549
+ if 200 <= _response.status_code < 300:
550
+ _data = typing.cast(
551
+ Job,
552
+ construct_type(
553
+ type_=Job, # type: ignore
554
+ object_=_response.json(),
555
+ ),
556
+ )
557
+ return AsyncHttpResponse(response=_response, data=_data)
558
+ if _response.status_code == 422:
559
+ raise UnprocessableEntityError(
560
+ headers=dict(_response.headers),
561
+ body=typing.cast(
562
+ HttpValidationError,
563
+ construct_type(
564
+ type_=HttpValidationError, # type: ignore
565
+ object_=_response.json(),
566
+ ),
567
+ ),
568
+ )
569
+ _response_json = _response.json()
570
+ except JSONDecodeError:
571
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
572
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
573
+
574
+ async def cancel_job(
575
+ self, job_id: str, *, request_options: typing.Optional[RequestOptions] = None
576
+ ) -> AsyncHttpResponse[Job]:
577
+ """
578
+ Cancel a job by its job_id.
579
+
580
+ This endpoint marks a job as cancelled, which will cause any associated
581
+ agent execution to terminate as soon as possible.
582
+
583
+ Parameters
584
+ ----------
585
+ job_id : str
586
+
587
+ request_options : typing.Optional[RequestOptions]
588
+ Request-specific configuration.
589
+
590
+ Returns
591
+ -------
592
+ AsyncHttpResponse[Job]
593
+ Successful Response
594
+ """
595
+ _response = await self._client_wrapper.httpx_client.request(
596
+ f"v1/jobs/{jsonable_encoder(job_id)}/cancel",
597
+ method="PATCH",
598
+ request_options=request_options,
599
+ )
600
+ try:
601
+ if 200 <= _response.status_code < 300:
602
+ _data = typing.cast(
603
+ Job,
604
+ construct_type(
605
+ type_=Job, # type: ignore
606
+ object_=_response.json(),
607
+ ),
608
+ )
609
+ return AsyncHttpResponse(response=_response, data=_data)
610
+ if _response.status_code == 422:
611
+ raise UnprocessableEntityError(
612
+ headers=dict(_response.headers),
613
+ body=typing.cast(
614
+ HttpValidationError,
615
+ construct_type(
616
+ type_=HttpValidationError, # type: ignore
617
+ object_=_response.json(),
618
+ ),
619
+ ),
620
+ )
621
+ _response_json = _response.json()
622
+ except JSONDecodeError:
623
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
624
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
@@ -1,2 +1,4 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
+ # isort: skip_file
4
+