letta-client 0.1.226__py3-none-any.whl → 1.7.2__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.
Files changed (755) hide show
  1. letta_client/__init__.py +91 -672
  2. letta_client/_base_client.py +2125 -0
  3. letta_client/_client.py +1136 -0
  4. letta_client/_compat.py +219 -0
  5. letta_client/_constants.py +14 -0
  6. letta_client/_exceptions.py +108 -0
  7. letta_client/_files.py +123 -0
  8. letta_client/_models.py +872 -0
  9. letta_client/_qs.py +150 -0
  10. letta_client/_resource.py +43 -0
  11. letta_client/_response.py +832 -0
  12. letta_client/_streaming.py +371 -0
  13. letta_client/_types.py +270 -0
  14. letta_client/_utils/__init__.py +64 -0
  15. letta_client/_utils/_compat.py +45 -0
  16. letta_client/_utils/_datetime_parse.py +136 -0
  17. letta_client/_utils/_logs.py +25 -0
  18. letta_client/_utils/_proxy.py +65 -0
  19. letta_client/_utils/_reflection.py +42 -0
  20. letta_client/_utils/_resources_proxy.py +24 -0
  21. letta_client/_utils/_streams.py +12 -0
  22. letta_client/_utils/_sync.py +58 -0
  23. letta_client/_utils/_transform.py +457 -0
  24. letta_client/_utils/_typing.py +156 -0
  25. letta_client/_utils/_utils.py +421 -0
  26. letta_client/_version.py +4 -0
  27. letta_client/lib/.keep +4 -0
  28. letta_client/pagination.py +280 -0
  29. letta_client/resources/__init__.py +215 -0
  30. letta_client/resources/access_tokens.py +396 -0
  31. letta_client/resources/agents/__init__.py +131 -0
  32. letta_client/resources/agents/agents.py +2148 -0
  33. letta_client/resources/agents/archives.py +260 -0
  34. letta_client/resources/agents/blocks.py +736 -0
  35. letta_client/resources/agents/files.py +541 -0
  36. letta_client/resources/agents/folders.py +422 -0
  37. letta_client/resources/agents/identities.py +260 -0
  38. letta_client/resources/agents/messages.py +1800 -0
  39. letta_client/resources/agents/passages.py +638 -0
  40. letta_client/resources/agents/tools.py +651 -0
  41. letta_client/resources/archives/__init__.py +33 -0
  42. letta_client/resources/archives/archives.py +650 -0
  43. letta_client/resources/archives/passages.py +309 -0
  44. letta_client/resources/blocks/__init__.py +33 -0
  45. letta_client/resources/blocks/agents.py +289 -0
  46. letta_client/resources/blocks/blocks.py +977 -0
  47. letta_client/resources/conversations/__init__.py +33 -0
  48. letta_client/resources/conversations/conversations.py +611 -0
  49. letta_client/resources/conversations/messages.py +650 -0
  50. letta_client/resources/folders/__init__.py +47 -0
  51. letta_client/resources/folders/agents.py +234 -0
  52. letta_client/resources/folders/files.py +581 -0
  53. letta_client/resources/folders/folders.py +734 -0
  54. letta_client/resources/mcp_servers/__init__.py +33 -0
  55. letta_client/resources/mcp_servers/mcp_servers.py +670 -0
  56. letta_client/resources/mcp_servers/tools.py +351 -0
  57. letta_client/resources/messages.py +455 -0
  58. letta_client/resources/models/__init__.py +33 -0
  59. letta_client/resources/models/embeddings.py +149 -0
  60. letta_client/resources/models/models.py +233 -0
  61. letta_client/resources/passages.py +259 -0
  62. letta_client/resources/runs/__init__.py +75 -0
  63. letta_client/resources/runs/messages.py +363 -0
  64. letta_client/resources/runs/runs.py +502 -0
  65. letta_client/resources/runs/steps.py +229 -0
  66. letta_client/resources/runs/trace.py +197 -0
  67. letta_client/resources/runs/usage.py +163 -0
  68. letta_client/resources/steps/__init__.py +75 -0
  69. letta_client/resources/steps/feedback.py +198 -0
  70. letta_client/resources/steps/messages.py +237 -0
  71. letta_client/resources/steps/metrics.py +167 -0
  72. letta_client/resources/steps/steps.py +505 -0
  73. letta_client/resources/steps/trace.py +169 -0
  74. letta_client/resources/tags.py +240 -0
  75. letta_client/resources/templates/__init__.py +33 -0
  76. letta_client/resources/templates/agents.py +229 -0
  77. letta_client/resources/templates/templates.py +540 -0
  78. letta_client/resources/tools.py +1721 -0
  79. letta_client/types/__init__.py +148 -530
  80. letta_client/types/access_token_create_params.py +32 -0
  81. letta_client/types/access_token_create_response.py +34 -0
  82. letta_client/types/access_token_delete_params.py +11 -0
  83. letta_client/types/access_token_list_params.py +23 -0
  84. letta_client/types/access_token_list_response.py +40 -0
  85. letta_client/types/agent_create_params.py +444 -0
  86. letta_client/types/agent_environment_variable.py +40 -63
  87. letta_client/types/agent_export_file_params.py +26 -0
  88. letta_client/types/agent_export_file_response.py +7 -0
  89. letta_client/types/agent_import_file_params.py +57 -0
  90. letta_client/types/agent_import_file_response.py +14 -0
  91. letta_client/types/agent_list_params.py +100 -0
  92. letta_client/types/agent_retrieve_params.py +37 -0
  93. letta_client/types/agent_state.py +651 -138
  94. letta_client/types/agent_type.py +14 -14
  95. letta_client/types/agent_update_params.py +386 -0
  96. letta_client/types/agents/__init__.py +76 -0
  97. letta_client/types/agents/approval_create_param.py +35 -0
  98. letta_client/types/agents/approval_request_message.py +57 -0
  99. letta_client/types/agents/approval_response_message.py +61 -0
  100. letta_client/types/agents/approval_return.py +22 -0
  101. letta_client/types/agents/approval_return_param.py +22 -0
  102. letta_client/types/agents/assistant_message.py +48 -0
  103. letta_client/types/agents/block.py +68 -0
  104. letta_client/types/agents/block_list_params.py +34 -0
  105. letta_client/types/agents/block_update_params.py +63 -0
  106. letta_client/types/agents/event_message.py +40 -0
  107. letta_client/types/agents/file_close_all_response.py +8 -0
  108. letta_client/types/agents/file_list_params.py +40 -0
  109. letta_client/types/agents/file_list_response.py +42 -0
  110. letta_client/types/agents/file_open_response.py +8 -0
  111. letta_client/types/agents/folder_list_params.py +34 -0
  112. letta_client/types/agents/folder_list_response.py +49 -0
  113. letta_client/types/agents/hidden_reasoning_message.py +49 -0
  114. letta_client/types/agents/image_content.py +67 -0
  115. letta_client/types/agents/image_content_param.py +64 -0
  116. letta_client/types/agents/internal_message.py +271 -0
  117. letta_client/types/agents/job_status.py +7 -0
  118. letta_client/types/agents/job_type.py +7 -0
  119. letta_client/types/agents/letta_assistant_message_content_union.py +19 -0
  120. letta_client/types/agents/letta_response.py +76 -0
  121. letta_client/types/agents/letta_streaming_response.py +155 -0
  122. letta_client/types/agents/letta_user_message_content_union.py +14 -0
  123. letta_client/types/agents/message.py +36 -0
  124. letta_client/types/agents/message_cancel_params.py +15 -0
  125. letta_client/types/agents/message_cancel_response.py +8 -0
  126. letta_client/types/agents/message_compact_params.py +145 -0
  127. letta_client/types/agents/message_compact_response.py +13 -0
  128. letta_client/types/agents/message_create_async_params.py +145 -0
  129. letta_client/types/agents/message_create_params.py +181 -0
  130. letta_client/types/agents/message_list_params.py +55 -0
  131. letta_client/types/agents/message_reset_params.py +12 -0
  132. letta_client/types/agents/message_role.py +7 -0
  133. letta_client/types/agents/message_stream_params.py +166 -0
  134. letta_client/types/agents/message_type.py +17 -0
  135. letta_client/types/agents/omitted_reasoning_content.py +20 -0
  136. letta_client/types/agents/omitted_reasoning_content_param.py +20 -0
  137. letta_client/types/agents/passage_create_params.py +23 -0
  138. letta_client/types/agents/passage_create_response.py +10 -0
  139. letta_client/types/agents/passage_list_params.py +28 -0
  140. letta_client/types/agents/passage_list_response.py +10 -0
  141. letta_client/types/agents/passage_search_params.py +35 -0
  142. letta_client/types/agents/passage_search_response.py +29 -0
  143. letta_client/types/agents/reasoning_content.py +27 -0
  144. letta_client/types/agents/reasoning_content_param.py +27 -0
  145. letta_client/types/agents/reasoning_message.py +50 -0
  146. letta_client/types/agents/redacted_reasoning_content.py +18 -0
  147. letta_client/types/agents/redacted_reasoning_content_param.py +17 -0
  148. letta_client/types/agents/run.py +91 -0
  149. letta_client/types/agents/summary_message.py +38 -0
  150. letta_client/types/agents/system_message.py +46 -0
  151. letta_client/types/agents/text_content.py +19 -0
  152. letta_client/types/agents/text_content_param.py +19 -0
  153. letta_client/types/agents/tool_call.py +13 -0
  154. letta_client/types/agents/tool_call_content.py +28 -0
  155. letta_client/types/agents/tool_call_content_param.py +28 -0
  156. letta_client/types/agents/tool_call_delta.py +15 -0
  157. letta_client/types/agents/tool_call_message.py +52 -0
  158. letta_client/types/agents/tool_execution_result.py +33 -0
  159. letta_client/types/agents/tool_list_params.py +34 -0
  160. letta_client/types/agents/tool_return.py +29 -0
  161. letta_client/types/agents/tool_return_content.py +22 -0
  162. letta_client/types/agents/tool_return_content_param.py +21 -0
  163. letta_client/types/agents/tool_return_param.py +30 -0
  164. letta_client/types/agents/tool_run_params.py +16 -0
  165. letta_client/types/agents/tool_update_approval_params.py +21 -0
  166. letta_client/types/agents/user_message.py +50 -0
  167. letta_client/types/anthropic_model_settings.py +62 -0
  168. letta_client/types/anthropic_model_settings_param.py +59 -0
  169. letta_client/types/archive.py +46 -0
  170. letta_client/types/archive_create_params.py +22 -0
  171. letta_client/types/archive_list_params.py +40 -0
  172. letta_client/types/archive_update_params.py +14 -0
  173. letta_client/types/archives/__init__.py +5 -0
  174. letta_client/types/archives/passage_create_params.py +21 -0
  175. letta_client/types/azure_model_settings.py +36 -0
  176. letta_client/types/azure_model_settings_param.py +33 -0
  177. letta_client/types/bedrock_model_settings.py +36 -0
  178. letta_client/types/bedrock_model_settings_param.py +33 -0
  179. letta_client/types/block_create_params.py +59 -0
  180. letta_client/types/block_list_params.py +102 -0
  181. letta_client/types/block_response.py +66 -0
  182. letta_client/types/block_update_params.py +60 -0
  183. letta_client/types/blocks/__init__.py +5 -0
  184. letta_client/types/blocks/agent_list_params.py +61 -0
  185. letta_client/types/child_tool_rule.py +37 -26
  186. letta_client/types/child_tool_rule_param.py +50 -0
  187. letta_client/types/conditional_tool_rule.py +19 -35
  188. letta_client/types/conditional_tool_rule_param.py +31 -0
  189. letta_client/types/continue_tool_rule.py +13 -23
  190. letta_client/types/continue_tool_rule_param.py +22 -0
  191. letta_client/types/conversation.py +42 -0
  192. letta_client/types/conversation_cancel_response.py +8 -0
  193. letta_client/types/conversation_create_params.py +25 -0
  194. letta_client/types/conversation_list_params.py +19 -0
  195. letta_client/types/conversation_list_response.py +10 -0
  196. letta_client/types/conversation_update_params.py +13 -0
  197. letta_client/types/conversations/__init__.py +7 -0
  198. letta_client/types/conversations/message_create_params.py +166 -0
  199. letta_client/types/conversations/message_list_params.py +43 -0
  200. letta_client/types/conversations/message_stream_params.py +28 -0
  201. letta_client/types/create_block_param.py +61 -0
  202. letta_client/types/create_sse_mcp_server_param.py +26 -0
  203. letta_client/types/create_stdio_mcp_server_param.py +25 -0
  204. letta_client/types/create_streamable_http_mcp_server_param.py +26 -0
  205. letta_client/types/deepseek_model_settings.py +36 -0
  206. letta_client/types/deepseek_model_settings_param.py +33 -0
  207. letta_client/types/embedding_config.py +47 -67
  208. letta_client/types/embedding_config_param.py +64 -0
  209. letta_client/types/embedding_model.py +81 -0
  210. letta_client/types/folder.py +28 -66
  211. letta_client/types/folder_create_params.py +33 -0
  212. letta_client/types/folder_list_params.py +37 -0
  213. letta_client/types/folder_update_params.py +27 -0
  214. letta_client/types/folders/__init__.py +12 -0
  215. letta_client/types/folders/agent_list_params.py +34 -0
  216. letta_client/types/folders/agent_list_response.py +8 -0
  217. letta_client/types/folders/file_list_params.py +37 -0
  218. letta_client/types/folders/file_list_response.py +70 -0
  219. letta_client/types/folders/file_retrieve_params.py +15 -0
  220. letta_client/types/folders/file_retrieve_response.py +70 -0
  221. letta_client/types/folders/file_upload_params.py +20 -0
  222. letta_client/types/folders/file_upload_response.py +70 -0
  223. letta_client/types/google_ai_model_settings.py +47 -0
  224. letta_client/types/google_ai_model_settings_param.py +44 -0
  225. letta_client/types/google_vertex_model_settings.py +47 -0
  226. letta_client/types/google_vertex_model_settings_param.py +44 -0
  227. letta_client/types/groq_model_settings.py +36 -0
  228. letta_client/types/groq_model_settings_param.py +33 -0
  229. letta_client/types/health_response.py +13 -0
  230. letta_client/types/init_tool_rule.py +24 -24
  231. letta_client/types/init_tool_rule_param.py +32 -0
  232. letta_client/types/json_object_response_format.py +9 -17
  233. letta_client/types/json_object_response_format_param.py +14 -0
  234. letta_client/types/json_schema_response_format.py +12 -21
  235. letta_client/types/json_schema_response_format_param.py +18 -0
  236. letta_client/types/letta_message_content_union_param.py +26 -0
  237. letta_client/types/llm_config.py +124 -75
  238. letta_client/types/llm_config_param.py +155 -0
  239. letta_client/types/max_count_per_step_tool_rule.py +16 -25
  240. letta_client/types/max_count_per_step_tool_rule_param.py +28 -0
  241. letta_client/types/mcp_server_create_params.py +23 -0
  242. letta_client/types/mcp_server_create_response.py +12 -0
  243. letta_client/types/mcp_server_list_response.py +14 -0
  244. letta_client/types/mcp_server_refresh_params.py +12 -0
  245. letta_client/types/mcp_server_retrieve_response.py +12 -0
  246. letta_client/types/mcp_server_update_params.py +23 -0
  247. letta_client/types/mcp_server_update_response.py +12 -0
  248. letta_client/types/mcp_servers/__init__.py +6 -0
  249. letta_client/types/mcp_servers/tool_list_response.py +10 -0
  250. letta_client/types/mcp_servers/tool_run_params.py +15 -0
  251. letta_client/types/message_create_param.py +38 -0
  252. letta_client/types/message_list_params.py +34 -0
  253. letta_client/types/message_list_response.py +10 -0
  254. letta_client/types/message_retrieve_response.py +10 -0
  255. letta_client/types/message_search_params.py +34 -0
  256. letta_client/types/message_search_response.py +124 -0
  257. letta_client/types/model.py +148 -0
  258. letta_client/types/model_list_params.py +19 -0
  259. letta_client/types/model_list_response.py +10 -0
  260. letta_client/types/models/__init__.py +5 -0
  261. letta_client/types/models/embedding_list_response.py +10 -0
  262. letta_client/types/npm_requirement.py +15 -0
  263. letta_client/types/npm_requirement_param.py +16 -0
  264. letta_client/types/openai_model_settings.py +51 -0
  265. letta_client/types/openai_model_settings_param.py +48 -0
  266. letta_client/types/parent_tool_rule.py +15 -27
  267. letta_client/types/parent_tool_rule_param.py +27 -0
  268. letta_client/types/passage.py +56 -101
  269. letta_client/types/passage_search_params.py +41 -0
  270. letta_client/types/passage_search_response.py +25 -0
  271. letta_client/types/pip_requirement.py +9 -21
  272. letta_client/types/pip_requirement_param.py +16 -0
  273. letta_client/types/provider_category.py +5 -3
  274. letta_client/types/provider_trace.py +43 -48
  275. letta_client/types/provider_type.py +25 -23
  276. letta_client/types/required_before_exit_tool_rule.py +13 -23
  277. letta_client/types/required_before_exit_tool_rule_param.py +22 -0
  278. letta_client/types/requires_approval_tool_rule.py +25 -0
  279. letta_client/types/requires_approval_tool_rule_param.py +25 -0
  280. letta_client/types/run_list_params.py +67 -0
  281. letta_client/types/runs/__init__.py +10 -0
  282. letta_client/types/runs/message_list_params.py +34 -0
  283. letta_client/types/runs/message_stream_params.py +28 -0
  284. letta_client/types/runs/step_list_params.py +28 -0
  285. letta_client/types/runs/trace_retrieve_params.py +12 -0
  286. letta_client/types/runs/trace_retrieve_response.py +8 -0
  287. letta_client/types/runs/usage_retrieve_response.py +31 -0
  288. letta_client/types/sse_mcp_server.py +32 -0
  289. letta_client/types/stdio_mcp_server.py +29 -0
  290. letta_client/types/step.py +71 -97
  291. letta_client/types/step_list_params.py +57 -0
  292. letta_client/types/steps/__init__.py +8 -0
  293. letta_client/types/steps/feedback_create_params.py +18 -0
  294. letta_client/types/steps/message_list_params.py +34 -0
  295. letta_client/types/steps/message_list_response.py +36 -0
  296. letta_client/types/steps/metric_retrieve_response.py +45 -0
  297. letta_client/types/stop_reason_type.py +17 -5
  298. letta_client/types/streamable_http_mcp_server.py +32 -0
  299. letta_client/types/tag_list_params.py +40 -0
  300. letta_client/types/tag_list_response.py +8 -0
  301. letta_client/types/template_create_params.py +46 -0
  302. letta_client/types/template_create_response.py +29 -0
  303. letta_client/types/template_delete_response.py +9 -0
  304. letta_client/types/template_update_params.py +25 -0
  305. letta_client/types/template_update_response.py +13 -0
  306. letta_client/types/templates/__init__.py +6 -0
  307. letta_client/types/templates/agent_create_params.py +50 -0
  308. letta_client/types/templates/agent_create_response.py +20 -0
  309. letta_client/types/terminal_tool_rule.py +13 -23
  310. letta_client/types/terminal_tool_rule_param.py +22 -0
  311. letta_client/types/text_response_format.py +9 -17
  312. letta_client/types/text_response_format_param.py +14 -0
  313. letta_client/types/together_model_settings.py +36 -0
  314. letta_client/types/together_model_settings_param.py +33 -0
  315. letta_client/types/tool.py +154 -81
  316. letta_client/types/tool_create_params.py +53 -0
  317. letta_client/types/tool_list_params.py +57 -0
  318. letta_client/types/tool_return_message.py +44 -31
  319. letta_client/types/tool_search_params.py +27 -0
  320. letta_client/types/tool_search_response.py +10 -0
  321. letta_client/types/tool_search_result.py +27 -0
  322. letta_client/types/tool_type.py +16 -17
  323. letta_client/types/tool_update_params.py +57 -0
  324. letta_client/types/tool_upsert_params.py +53 -0
  325. letta_client/types/update_sse_mcp_server_param.py +26 -0
  326. letta_client/types/update_stdio_mcp_server_param.py +25 -0
  327. letta_client/types/update_streamable_http_mcp_server_param.py +26 -0
  328. letta_client/types/vector_db_provider.py +7 -0
  329. letta_client/types/xai_model_settings.py +36 -0
  330. letta_client/types/xai_model_settings_param.py +33 -0
  331. letta_client-1.7.2.dist-info/METADATA +436 -0
  332. letta_client-1.7.2.dist-info/RECORD +335 -0
  333. {letta_client-0.1.226.dist-info → letta_client-1.7.2.dist-info}/WHEEL +1 -1
  334. letta_client-1.7.2.dist-info/licenses/LICENSE +201 -0
  335. letta_client/agents/__init__.py +0 -77
  336. letta_client/agents/blocks/__init__.py +0 -2
  337. letta_client/agents/blocks/client.py +0 -793
  338. letta_client/agents/client.py +0 -2371
  339. letta_client/agents/context/__init__.py +0 -2
  340. letta_client/agents/context/client.py +0 -149
  341. letta_client/agents/core_memory/__init__.py +0 -2
  342. letta_client/agents/core_memory/client.py +0 -147
  343. letta_client/agents/files/__init__.py +0 -2
  344. letta_client/agents/files/client.py +0 -430
  345. letta_client/agents/folders/__init__.py +0 -2
  346. letta_client/agents/folders/client.py +0 -412
  347. letta_client/agents/groups/__init__.py +0 -2
  348. letta_client/agents/groups/client.py +0 -169
  349. letta_client/agents/memory_variables/__init__.py +0 -5
  350. letta_client/agents/memory_variables/client.py +0 -152
  351. letta_client/agents/memory_variables/types/__init__.py +0 -5
  352. letta_client/agents/memory_variables/types/memory_variables_list_response.py +0 -19
  353. letta_client/agents/messages/__init__.py +0 -15
  354. letta_client/agents/messages/client.py +0 -1638
  355. letta_client/agents/messages/types/__init__.py +0 -13
  356. letta_client/agents/messages/types/letta_streaming_response.py +0 -22
  357. letta_client/agents/messages/types/messages_modify_request.py +0 -11
  358. letta_client/agents/messages/types/messages_modify_response.py +0 -20
  359. letta_client/agents/messages/types/messages_preview_raw_payload_request.py +0 -7
  360. letta_client/agents/passages/__init__.py +0 -2
  361. letta_client/agents/passages/client.py +0 -793
  362. letta_client/agents/sources/__init__.py +0 -2
  363. letta_client/agents/sources/client.py +0 -412
  364. letta_client/agents/templates/__init__.py +0 -5
  365. letta_client/agents/templates/client.py +0 -588
  366. letta_client/agents/templates/types/__init__.py +0 -7
  367. letta_client/agents/templates/types/templates_create_response.py +0 -22
  368. letta_client/agents/templates/types/templates_create_version_request_return_agent_state.py +0 -5
  369. letta_client/agents/templates/types/templates_migrate_response.py +0 -19
  370. letta_client/agents/tools/__init__.py +0 -2
  371. letta_client/agents/tools/client.py +0 -412
  372. letta_client/agents/types/__init__.py +0 -33
  373. letta_client/agents/types/agents_search_request_search_item.py +0 -16
  374. letta_client/agents/types/agents_search_request_search_item_field.py +0 -22
  375. letta_client/agents/types/agents_search_request_search_item_field_operator.py +0 -5
  376. letta_client/agents/types/agents_search_request_search_item_one.py +0 -22
  377. letta_client/agents/types/agents_search_request_search_item_one_operator.py +0 -5
  378. letta_client/agents/types/agents_search_request_search_item_three.py +0 -21
  379. letta_client/agents/types/agents_search_request_search_item_two.py +0 -21
  380. letta_client/agents/types/agents_search_request_search_item_zero.py +0 -20
  381. letta_client/agents/types/agents_search_request_sort_by.py +0 -5
  382. letta_client/agents/types/agents_search_response.py +0 -23
  383. letta_client/agents/types/create_agent_request_response_format.py +0 -8
  384. letta_client/agents/types/create_agent_request_tool_rules_item.py +0 -22
  385. letta_client/agents/types/update_agent_response_format.py +0 -8
  386. letta_client/agents/types/update_agent_tool_rules_item.py +0 -22
  387. letta_client/base_client.py +0 -232
  388. letta_client/batches/__init__.py +0 -2
  389. letta_client/batches/client.py +0 -587
  390. letta_client/blocks/__init__.py +0 -5
  391. letta_client/blocks/agents/__init__.py +0 -2
  392. letta_client/blocks/agents/client.py +0 -171
  393. letta_client/blocks/client.py +0 -1038
  394. letta_client/client.py +0 -661
  395. letta_client/client_side_access_tokens/__init__.py +0 -29
  396. letta_client/client_side_access_tokens/client.py +0 -524
  397. letta_client/client_side_access_tokens/types/__init__.py +0 -43
  398. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_request_policy_item.py +0 -24
  399. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_request_policy_item_access_item.py +0 -7
  400. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response.py +0 -25
  401. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy.py +0 -23
  402. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy_data_item.py +0 -24
  403. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy_data_item_access_item.py +0 -7
  404. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response.py +0 -25
  405. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item.py +0 -27
  406. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy.py +0 -23
  407. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy_data_item.py +0 -24
  408. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy_data_item_access_item.py +0 -7
  409. letta_client/core/__init__.py +0 -51
  410. letta_client/core/api_error.py +0 -15
  411. letta_client/core/client_wrapper.py +0 -77
  412. letta_client/core/datetime_utils.py +0 -28
  413. letta_client/core/file.py +0 -67
  414. letta_client/core/http_client.py +0 -499
  415. letta_client/core/jsonable_encoder.py +0 -101
  416. letta_client/core/pydantic_utilities.py +0 -296
  417. letta_client/core/query_encoder.py +0 -58
  418. letta_client/core/remove_none_from_dict.py +0 -11
  419. letta_client/core/request_options.py +0 -35
  420. letta_client/core/serialization.py +0 -272
  421. letta_client/core/unchecked_base_model.py +0 -305
  422. letta_client/embedding_models/__init__.py +0 -2
  423. letta_client/embedding_models/client.py +0 -136
  424. letta_client/environment.py +0 -8
  425. letta_client/errors/__init__.py +0 -17
  426. letta_client/errors/bad_request_error.py +0 -9
  427. letta_client/errors/conflict_error.py +0 -9
  428. letta_client/errors/internal_server_error.py +0 -9
  429. letta_client/errors/not_found_error.py +0 -9
  430. letta_client/errors/payment_required_error.py +0 -9
  431. letta_client/errors/unprocessable_entity_error.py +0 -9
  432. letta_client/folders/__init__.py +0 -5
  433. letta_client/folders/client.py +0 -1307
  434. letta_client/folders/files/__init__.py +0 -2
  435. letta_client/folders/files/client.py +0 -474
  436. letta_client/folders/passages/__init__.py +0 -2
  437. letta_client/folders/passages/client.py +0 -189
  438. letta_client/groups/__init__.py +0 -14
  439. letta_client/groups/client.py +0 -964
  440. letta_client/groups/messages/__init__.py +0 -5
  441. letta_client/groups/messages/client.py +0 -1015
  442. letta_client/groups/messages/types/__init__.py +0 -7
  443. letta_client/groups/messages/types/letta_streaming_response.py +0 -20
  444. letta_client/groups/messages/types/messages_modify_request.py +0 -11
  445. letta_client/groups/messages/types/messages_modify_response.py +0 -20
  446. letta_client/groups/types/__init__.py +0 -6
  447. letta_client/groups/types/group_create_manager_config.py +0 -12
  448. letta_client/groups/types/group_update_manager_config.py +0 -16
  449. letta_client/health/__init__.py +0 -2
  450. letta_client/health/client.py +0 -110
  451. letta_client/identities/__init__.py +0 -5
  452. letta_client/identities/client.py +0 -1201
  453. letta_client/identities/properties/__init__.py +0 -2
  454. letta_client/identities/properties/client.py +0 -183
  455. letta_client/jobs/__init__.py +0 -2
  456. letta_client/jobs/client.py +0 -749
  457. letta_client/messages/__init__.py +0 -2
  458. letta_client/messages/client.py +0 -213
  459. letta_client/models/__init__.py +0 -2
  460. letta_client/models/client.py +0 -174
  461. letta_client/projects/__init__.py +0 -5
  462. letta_client/projects/client.py +0 -150
  463. letta_client/projects/types/__init__.py +0 -6
  464. letta_client/projects/types/projects_list_response.py +0 -23
  465. letta_client/projects/types/projects_list_response_projects_item.py +0 -21
  466. letta_client/providers/__init__.py +0 -2
  467. letta_client/providers/client.py +0 -789
  468. letta_client/runs/__init__.py +0 -5
  469. letta_client/runs/client.py +0 -551
  470. letta_client/runs/messages/__init__.py +0 -2
  471. letta_client/runs/messages/client.py +0 -236
  472. letta_client/runs/steps/__init__.py +0 -2
  473. letta_client/runs/steps/client.py +0 -219
  474. letta_client/runs/usage/__init__.py +0 -2
  475. letta_client/runs/usage/client.py +0 -147
  476. letta_client/sources/__init__.py +0 -5
  477. letta_client/sources/client.py +0 -1462
  478. letta_client/sources/files/__init__.py +0 -2
  479. letta_client/sources/files/client.py +0 -474
  480. letta_client/sources/passages/__init__.py +0 -2
  481. letta_client/sources/passages/client.py +0 -189
  482. letta_client/steps/__init__.py +0 -6
  483. letta_client/steps/client.py +0 -408
  484. letta_client/steps/feedback/__init__.py +0 -2
  485. letta_client/steps/feedback/client.py +0 -168
  486. letta_client/steps/types/__init__.py +0 -5
  487. letta_client/steps/types/steps_list_request_feedback.py +0 -5
  488. letta_client/tags/__init__.py +0 -2
  489. letta_client/tags/client.py +0 -171
  490. letta_client/telemetry/__init__.py +0 -2
  491. letta_client/telemetry/client.py +0 -145
  492. letta_client/templates/__init__.py +0 -18
  493. letta_client/templates/agents/__init__.py +0 -13
  494. letta_client/templates/agents/client.py +0 -256
  495. letta_client/templates/agents/types/__init__.py +0 -11
  496. letta_client/templates/agents/types/agents_create_request_initial_message_sequence_item.py +0 -26
  497. letta_client/templates/agents/types/agents_create_request_initial_message_sequence_item_role.py +0 -7
  498. letta_client/templates/agents/types/agents_create_response.py +0 -20
  499. letta_client/templates/client.py +0 -162
  500. letta_client/templates/types/__init__.py +0 -6
  501. letta_client/templates/types/templates_list_response.py +0 -23
  502. letta_client/templates/types/templates_list_response_templates_item.py +0 -20
  503. letta_client/tools/__init__.py +0 -27
  504. letta_client/tools/client.py +0 -3063
  505. letta_client/tools/types/__init__.py +0 -25
  506. letta_client/tools/types/add_mcp_server_request.py +0 -8
  507. letta_client/tools/types/add_mcp_server_response_item.py +0 -8
  508. letta_client/tools/types/connect_mcp_server_request.py +0 -8
  509. letta_client/tools/types/connect_mcp_server_response_event.py +0 -8
  510. letta_client/tools/types/delete_mcp_server_response_item.py +0 -8
  511. letta_client/tools/types/list_mcp_servers_response_value.py +0 -8
  512. letta_client/tools/types/streaming_response.py +0 -23
  513. letta_client/tools/types/test_mcp_server_request.py +0 -8
  514. letta_client/tools/types/update_mcp_server_request.py +0 -8
  515. letta_client/tools/types/update_mcp_server_response.py +0 -8
  516. letta_client/types/action_model.py +0 -38
  517. letta_client/types/action_parameters_model.py +0 -27
  518. letta_client/types/action_response_model.py +0 -27
  519. letta_client/types/agent_schema.py +0 -49
  520. letta_client/types/agent_schema_tool_rules_item.py +0 -11
  521. letta_client/types/agent_state_response_format.py +0 -8
  522. letta_client/types/agent_state_tool_rules_item.py +0 -22
  523. letta_client/types/app_auth_scheme.py +0 -34
  524. letta_client/types/app_auth_scheme_auth_mode.py +0 -19
  525. letta_client/types/app_model.py +0 -44
  526. letta_client/types/assistant_message.py +0 -42
  527. letta_client/types/assistant_message_content.py +0 -6
  528. letta_client/types/audio.py +0 -19
  529. letta_client/types/auth_request.py +0 -22
  530. letta_client/types/auth_response.py +0 -29
  531. letta_client/types/auth_scheme_field.py +0 -30
  532. letta_client/types/bad_request_error_body.py +0 -19
  533. letta_client/types/base_64_image.py +0 -33
  534. letta_client/types/base_tool_rule_schema.py +0 -20
  535. letta_client/types/batch_job.py +0 -81
  536. letta_client/types/block.py +0 -97
  537. letta_client/types/block_update.py +0 -71
  538. letta_client/types/chat_completion_assistant_message_param.py +0 -29
  539. letta_client/types/chat_completion_assistant_message_param_content.py +0 -8
  540. letta_client/types/chat_completion_assistant_message_param_content_item.py +0 -9
  541. letta_client/types/chat_completion_audio_param.py +0 -22
  542. letta_client/types/chat_completion_audio_param_format.py +0 -5
  543. letta_client/types/chat_completion_audio_param_voice.py +0 -18
  544. letta_client/types/chat_completion_content_part_image_param.py +0 -21
  545. letta_client/types/chat_completion_content_part_input_audio_param.py +0 -21
  546. letta_client/types/chat_completion_content_part_refusal_param.py +0 -20
  547. letta_client/types/chat_completion_content_part_text_param.py +0 -20
  548. letta_client/types/chat_completion_developer_message_param.py +0 -22
  549. letta_client/types/chat_completion_developer_message_param_content.py +0 -6
  550. letta_client/types/chat_completion_function_call_option_param.py +0 -19
  551. letta_client/types/chat_completion_function_message_param.py +0 -21
  552. letta_client/types/chat_completion_message_tool_call.py +0 -22
  553. letta_client/types/chat_completion_message_tool_call_param.py +0 -24
  554. letta_client/types/chat_completion_named_tool_choice_param.py +0 -23
  555. letta_client/types/chat_completion_prediction_content_param.py +0 -21
  556. letta_client/types/chat_completion_prediction_content_param_content.py +0 -6
  557. letta_client/types/chat_completion_stream_options_param.py +0 -19
  558. letta_client/types/chat_completion_system_message_param.py +0 -22
  559. letta_client/types/chat_completion_system_message_param_content.py +0 -6
  560. letta_client/types/chat_completion_tool_message_param.py +0 -22
  561. letta_client/types/chat_completion_tool_message_param_content.py +0 -6
  562. letta_client/types/chat_completion_tool_param.py +0 -21
  563. letta_client/types/chat_completion_user_message_param.py +0 -22
  564. letta_client/types/chat_completion_user_message_param_content.py +0 -6
  565. letta_client/types/chat_completion_user_message_param_content_item.py +0 -14
  566. letta_client/types/child_tool_rule_schema.py +0 -21
  567. letta_client/types/code_input.py +0 -22
  568. letta_client/types/completion_create_params_non_streaming.py +0 -64
  569. letta_client/types/completion_create_params_non_streaming_function_call.py +0 -8
  570. letta_client/types/completion_create_params_non_streaming_messages_item.py +0 -18
  571. letta_client/types/completion_create_params_non_streaming_modalities_item.py +0 -5
  572. letta_client/types/completion_create_params_non_streaming_model.py +0 -62
  573. letta_client/types/completion_create_params_non_streaming_reasoning_effort.py +0 -5
  574. letta_client/types/completion_create_params_non_streaming_response_format.py +0 -10
  575. letta_client/types/completion_create_params_non_streaming_service_tier.py +0 -7
  576. letta_client/types/completion_create_params_non_streaming_stop.py +0 -5
  577. letta_client/types/completion_create_params_non_streaming_tool_choice.py +0 -8
  578. letta_client/types/completion_create_params_streaming.py +0 -64
  579. letta_client/types/completion_create_params_streaming_function_call.py +0 -8
  580. letta_client/types/completion_create_params_streaming_messages_item.py +0 -18
  581. letta_client/types/completion_create_params_streaming_modalities_item.py +0 -5
  582. letta_client/types/completion_create_params_streaming_model.py +0 -62
  583. letta_client/types/completion_create_params_streaming_reasoning_effort.py +0 -5
  584. letta_client/types/completion_create_params_streaming_response_format.py +0 -10
  585. letta_client/types/completion_create_params_streaming_service_tier.py +0 -7
  586. letta_client/types/completion_create_params_streaming_stop.py +0 -5
  587. letta_client/types/completion_create_params_streaming_tool_choice.py +0 -8
  588. letta_client/types/components_schemas_text_content.py +0 -5
  589. letta_client/types/conditional_tool_rule_schema.py +0 -23
  590. letta_client/types/conflict_error_body.py +0 -21
  591. letta_client/types/context_window_overview.py +0 -108
  592. letta_client/types/core_memory_block_schema.py +0 -31
  593. letta_client/types/create_block.py +0 -67
  594. letta_client/types/duplicate_file_handling.py +0 -5
  595. letta_client/types/dynamic_manager.py +0 -33
  596. letta_client/types/dynamic_manager_update.py +0 -33
  597. letta_client/types/e_2_b_sandbox_config.py +0 -32
  598. letta_client/types/embedding_config_embedding_endpoint_type.py +0 -29
  599. letta_client/types/feedback_type.py +0 -5
  600. letta_client/types/file.py +0 -21
  601. letta_client/types/file_block.py +0 -103
  602. letta_client/types/file_file.py +0 -21
  603. letta_client/types/file_metadata.py +0 -108
  604. letta_client/types/file_processing_status.py +0 -5
  605. letta_client/types/file_stats.py +0 -36
  606. letta_client/types/function_call.py +0 -20
  607. letta_client/types/function_definition_input.py +0 -22
  608. letta_client/types/function_definition_output.py +0 -22
  609. letta_client/types/function_output.py +0 -20
  610. letta_client/types/function_tool.py +0 -21
  611. letta_client/types/generate_tool_input.py +0 -42
  612. letta_client/types/generate_tool_output.py +0 -33
  613. letta_client/types/group.py +0 -88
  614. letta_client/types/health.py +0 -24
  615. letta_client/types/hidden_reasoning_message.py +0 -43
  616. letta_client/types/hidden_reasoning_message_state.py +0 -5
  617. letta_client/types/http_validation_error.py +0 -20
  618. letta_client/types/identity.py +0 -59
  619. letta_client/types/identity_property.py +0 -38
  620. letta_client/types/identity_property_type.py +0 -5
  621. letta_client/types/identity_property_value.py +0 -5
  622. letta_client/types/identity_type.py +0 -5
  623. letta_client/types/image_content.py +0 -24
  624. letta_client/types/image_content_source.py +0 -8
  625. letta_client/types/image_url.py +0 -21
  626. letta_client/types/image_url_detail.py +0 -5
  627. letta_client/types/input_audio.py +0 -21
  628. letta_client/types/input_audio_format.py +0 -5
  629. letta_client/types/internal_server_error_body.py +0 -19
  630. letta_client/types/job.py +0 -96
  631. letta_client/types/job_status.py +0 -7
  632. letta_client/types/job_type.py +0 -5
  633. letta_client/types/json_schema.py +0 -26
  634. letta_client/types/letta_batch_messages.py +0 -20
  635. letta_client/types/letta_batch_request.py +0 -59
  636. letta_client/types/letta_image.py +0 -38
  637. letta_client/types/letta_message_content_union.py +0 -13
  638. letta_client/types/letta_message_union.py +0 -20
  639. letta_client/types/letta_request.py +0 -54
  640. letta_client/types/letta_request_config.py +0 -38
  641. letta_client/types/letta_response.py +0 -40
  642. letta_client/types/letta_stop_reason.py +0 -32
  643. letta_client/types/letta_streaming_request.py +0 -59
  644. letta_client/types/letta_usage_statistics.py +0 -59
  645. letta_client/types/letta_user_message_content_union.py +0 -7
  646. letta_client/types/llm_config_model_endpoint_type.py +0 -31
  647. letta_client/types/llm_config_reasoning_effort.py +0 -5
  648. letta_client/types/local_sandbox_config.py +0 -38
  649. letta_client/types/manager_type.py +0 -7
  650. letta_client/types/max_count_per_step_tool_rule_schema.py +0 -21
  651. letta_client/types/mcp_server_type.py +0 -5
  652. letta_client/types/mcp_tool.py +0 -38
  653. letta_client/types/memory.py +0 -38
  654. letta_client/types/message.py +0 -139
  655. letta_client/types/message_content_item.py +0 -20
  656. letta_client/types/message_create.py +0 -58
  657. letta_client/types/message_create_content.py +0 -6
  658. letta_client/types/message_create_role.py +0 -5
  659. letta_client/types/message_role.py +0 -5
  660. letta_client/types/message_schema.py +0 -29
  661. letta_client/types/message_type.py +0 -16
  662. letta_client/types/not_found_error_body.py +0 -19
  663. letta_client/types/not_found_error_body_message.py +0 -11
  664. letta_client/types/omitted_reasoning_content.py +0 -19
  665. letta_client/types/openai_types_chat_chat_completion_message_tool_call_param_function.py +0 -20
  666. letta_client/types/openai_types_chat_chat_completion_named_tool_choice_param_function.py +0 -19
  667. letta_client/types/openai_types_chat_completion_create_params_function.py +0 -21
  668. letta_client/types/organization.py +0 -38
  669. letta_client/types/organization_create.py +0 -27
  670. letta_client/types/organization_sources_stats.py +0 -42
  671. letta_client/types/organization_update.py +0 -27
  672. letta_client/types/parameter_properties.py +0 -20
  673. letta_client/types/parameters_schema.py +0 -22
  674. letta_client/types/payment_required_error_body.py +0 -20
  675. letta_client/types/provider.py +0 -65
  676. letta_client/types/provider_check.py +0 -38
  677. letta_client/types/reasoning_content.py +0 -33
  678. letta_client/types/reasoning_message.py +0 -44
  679. letta_client/types/reasoning_message_source.py +0 -5
  680. letta_client/types/redacted_reasoning_content.py +0 -23
  681. letta_client/types/response_format_json_object.py +0 -19
  682. letta_client/types/response_format_json_schema.py +0 -21
  683. letta_client/types/response_format_text.py +0 -19
  684. letta_client/types/round_robin_manager.py +0 -23
  685. letta_client/types/round_robin_manager_update.py +0 -23
  686. letta_client/types/run.py +0 -99
  687. letta_client/types/sandbox_config.py +0 -54
  688. letta_client/types/sandbox_config_create.py +0 -23
  689. letta_client/types/sandbox_config_create_config.py +0 -7
  690. letta_client/types/sandbox_config_update.py +0 -27
  691. letta_client/types/sandbox_config_update_config.py +0 -7
  692. letta_client/types/sandbox_environment_variable.py +0 -63
  693. letta_client/types/sandbox_environment_variable_create.py +0 -32
  694. letta_client/types/sandbox_environment_variable_update.py +0 -32
  695. letta_client/types/sandbox_type.py +0 -5
  696. letta_client/types/sleeptime_manager.py +0 -28
  697. letta_client/types/sleeptime_manager_update.py +0 -28
  698. letta_client/types/source.py +0 -81
  699. letta_client/types/source_create.py +0 -57
  700. letta_client/types/source_stats.py +0 -47
  701. letta_client/types/source_update.py +0 -47
  702. letta_client/types/sse_server_config.py +0 -55
  703. letta_client/types/stdio_server_config.py +0 -39
  704. letta_client/types/step_feedback.py +0 -5
  705. letta_client/types/streamable_http_server_config.py +0 -55
  706. letta_client/types/supervisor_manager.py +0 -23
  707. letta_client/types/supervisor_manager_update.py +0 -23
  708. letta_client/types/system_message.py +0 -41
  709. letta_client/types/tag_schema.py +0 -19
  710. letta_client/types/text_content.py +0 -23
  711. letta_client/types/tool_annotations.py +0 -36
  712. letta_client/types/tool_call.py +0 -21
  713. letta_client/types/tool_call_content.py +0 -33
  714. letta_client/types/tool_call_delta.py +0 -21
  715. letta_client/types/tool_call_message.py +0 -39
  716. letta_client/types/tool_call_message_tool_call.py +0 -7
  717. letta_client/types/tool_create.py +0 -58
  718. letta_client/types/tool_env_var_schema.py +0 -23
  719. letta_client/types/tool_json_schema.py +0 -24
  720. letta_client/types/tool_return.py +0 -33
  721. letta_client/types/tool_return_content.py +0 -33
  722. letta_client/types/tool_return_message_status.py +0 -5
  723. letta_client/types/tool_return_status.py +0 -5
  724. letta_client/types/tool_schema.py +0 -35
  725. letta_client/types/update_assistant_message.py +0 -24
  726. letta_client/types/update_assistant_message_content.py +0 -6
  727. letta_client/types/update_reasoning_message.py +0 -20
  728. letta_client/types/update_ssemcp_server.py +0 -41
  729. letta_client/types/update_stdio_mcp_server.py +0 -32
  730. letta_client/types/update_streamable_httpmcp_server.py +0 -46
  731. letta_client/types/update_system_message.py +0 -23
  732. letta_client/types/update_user_message.py +0 -24
  733. letta_client/types/update_user_message_content.py +0 -6
  734. letta_client/types/url_image.py +0 -23
  735. letta_client/types/usage_statistics.py +0 -25
  736. letta_client/types/usage_statistics_completion_token_details.py +0 -19
  737. letta_client/types/usage_statistics_prompt_token_details.py +0 -19
  738. letta_client/types/user.py +0 -52
  739. letta_client/types/user_create.py +0 -22
  740. letta_client/types/user_message.py +0 -42
  741. letta_client/types/user_message_content.py +0 -6
  742. letta_client/types/user_update.py +0 -27
  743. letta_client/types/validation_error.py +0 -22
  744. letta_client/types/validation_error_loc_item.py +0 -5
  745. letta_client/types/voice_sleeptime_manager.py +0 -33
  746. letta_client/types/voice_sleeptime_manager_update.py +0 -33
  747. letta_client/types/web_search_options.py +0 -22
  748. letta_client/types/web_search_options_search_context_size.py +0 -5
  749. letta_client/types/web_search_options_user_location.py +0 -21
  750. letta_client/types/web_search_options_user_location_approximate.py +0 -22
  751. letta_client/version.py +0 -3
  752. letta_client/voice/__init__.py +0 -2
  753. letta_client/voice/client.py +0 -177
  754. letta_client-0.1.226.dist-info/METADATA +0 -190
  755. letta_client-0.1.226.dist-info/RECORD +0 -452
@@ -1,3063 +0,0 @@
1
- # This file was auto-generated by Fern from our API Definition.
2
-
3
- import typing
4
- from ..core.client_wrapper import SyncClientWrapper
5
- from ..core.request_options import RequestOptions
6
- from ..types.tool import Tool
7
- from ..core.jsonable_encoder import jsonable_encoder
8
- from ..core.unchecked_base_model import construct_type
9
- from ..errors.unprocessable_entity_error import UnprocessableEntityError
10
- from ..types.http_validation_error import HttpValidationError
11
- from json.decoder import JSONDecodeError
12
- from ..core.api_error import ApiError
13
- from ..types.pip_requirement import PipRequirement
14
- from ..core.serialization import convert_and_respect_annotation_metadata
15
- from ..types.tool_return_message import ToolReturnMessage
16
- from ..types.app_model import AppModel
17
- from ..types.action_model import ActionModel
18
- from .types.list_mcp_servers_response_value import ListMcpServersResponseValue
19
- from .types.add_mcp_server_request import AddMcpServerRequest
20
- from .types.add_mcp_server_response_item import AddMcpServerResponseItem
21
- from ..types.mcp_tool import McpTool
22
- from .types.delete_mcp_server_response_item import DeleteMcpServerResponseItem
23
- from .types.update_mcp_server_request import UpdateMcpServerRequest
24
- from .types.update_mcp_server_response import UpdateMcpServerResponse
25
- from .types.test_mcp_server_request import TestMcpServerRequest
26
- from .types.connect_mcp_server_request import ConnectMcpServerRequest
27
- from .types.streaming_response import StreamingResponse
28
- import httpx_sse
29
- import json
30
- from ..core.client_wrapper import AsyncClientWrapper
31
-
32
- # this is used as the default value for optional parameters
33
- OMIT = typing.cast(typing.Any, ...)
34
-
35
-
36
- class ToolsClient:
37
- def __init__(self, *, client_wrapper: SyncClientWrapper):
38
- self._client_wrapper = client_wrapper
39
-
40
- def retrieve(self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Tool:
41
- """
42
- Get a tool by ID
43
-
44
- Parameters
45
- ----------
46
- tool_id : str
47
-
48
- request_options : typing.Optional[RequestOptions]
49
- Request-specific configuration.
50
-
51
- Returns
52
- -------
53
- Tool
54
- Successful Response
55
-
56
- Examples
57
- --------
58
- from letta_client import Letta
59
-
60
- client = Letta(
61
- project="YOUR_PROJECT",
62
- token="YOUR_TOKEN",
63
- )
64
- client.tools.retrieve(
65
- tool_id="tool_id",
66
- )
67
- """
68
- _response = self._client_wrapper.httpx_client.request(
69
- f"v1/tools/{jsonable_encoder(tool_id)}",
70
- method="GET",
71
- request_options=request_options,
72
- )
73
- try:
74
- if 200 <= _response.status_code < 300:
75
- return typing.cast(
76
- Tool,
77
- construct_type(
78
- type_=Tool, # type: ignore
79
- object_=_response.json(),
80
- ),
81
- )
82
- if _response.status_code == 422:
83
- raise UnprocessableEntityError(
84
- typing.cast(
85
- HttpValidationError,
86
- construct_type(
87
- type_=HttpValidationError, # type: ignore
88
- object_=_response.json(),
89
- ),
90
- )
91
- )
92
- _response_json = _response.json()
93
- except JSONDecodeError:
94
- raise ApiError(status_code=_response.status_code, body=_response.text)
95
- raise ApiError(status_code=_response.status_code, body=_response_json)
96
-
97
- def delete(
98
- self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None
99
- ) -> typing.Optional[typing.Any]:
100
- """
101
- Delete a tool by name
102
-
103
- Parameters
104
- ----------
105
- tool_id : str
106
-
107
- request_options : typing.Optional[RequestOptions]
108
- Request-specific configuration.
109
-
110
- Returns
111
- -------
112
- typing.Optional[typing.Any]
113
- Successful Response
114
-
115
- Examples
116
- --------
117
- from letta_client import Letta
118
-
119
- client = Letta(
120
- project="YOUR_PROJECT",
121
- token="YOUR_TOKEN",
122
- )
123
- client.tools.delete(
124
- tool_id="tool_id",
125
- )
126
- """
127
- _response = self._client_wrapper.httpx_client.request(
128
- f"v1/tools/{jsonable_encoder(tool_id)}",
129
- method="DELETE",
130
- request_options=request_options,
131
- )
132
- try:
133
- if 200 <= _response.status_code < 300:
134
- return typing.cast(
135
- typing.Optional[typing.Any],
136
- construct_type(
137
- type_=typing.Optional[typing.Any], # type: ignore
138
- object_=_response.json(),
139
- ),
140
- )
141
- if _response.status_code == 422:
142
- raise UnprocessableEntityError(
143
- typing.cast(
144
- HttpValidationError,
145
- construct_type(
146
- type_=HttpValidationError, # type: ignore
147
- object_=_response.json(),
148
- ),
149
- )
150
- )
151
- _response_json = _response.json()
152
- except JSONDecodeError:
153
- raise ApiError(status_code=_response.status_code, body=_response.text)
154
- raise ApiError(status_code=_response.status_code, body=_response_json)
155
-
156
- def modify(
157
- self,
158
- tool_id: str,
159
- *,
160
- description: typing.Optional[str] = OMIT,
161
- tags: typing.Optional[typing.Sequence[str]] = OMIT,
162
- source_code: typing.Optional[str] = OMIT,
163
- source_type: typing.Optional[str] = OMIT,
164
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
165
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
166
- return_char_limit: typing.Optional[int] = OMIT,
167
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
168
- request_options: typing.Optional[RequestOptions] = None,
169
- ) -> Tool:
170
- """
171
- Update an existing tool
172
-
173
- Parameters
174
- ----------
175
- tool_id : str
176
-
177
- description : typing.Optional[str]
178
- The description of the tool.
179
-
180
- tags : typing.Optional[typing.Sequence[str]]
181
- Metadata tags.
182
-
183
- source_code : typing.Optional[str]
184
- The source code of the function.
185
-
186
- source_type : typing.Optional[str]
187
- The type of the source code.
188
-
189
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
190
- The JSON schema of the function (auto-generated from source_code if not provided)
191
-
192
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
193
- The args JSON schema of the function.
194
-
195
- return_char_limit : typing.Optional[int]
196
- The maximum number of characters in the response.
197
-
198
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
199
- Optional list of pip packages required by this tool.
200
-
201
- request_options : typing.Optional[RequestOptions]
202
- Request-specific configuration.
203
-
204
- Returns
205
- -------
206
- Tool
207
- Successful Response
208
-
209
- Examples
210
- --------
211
- from letta_client import Letta
212
-
213
- client = Letta(
214
- project="YOUR_PROJECT",
215
- token="YOUR_TOKEN",
216
- )
217
- client.tools.modify(
218
- tool_id="tool_id",
219
- )
220
- """
221
- _response = self._client_wrapper.httpx_client.request(
222
- f"v1/tools/{jsonable_encoder(tool_id)}",
223
- method="PATCH",
224
- json={
225
- "description": description,
226
- "tags": tags,
227
- "source_code": source_code,
228
- "source_type": source_type,
229
- "json_schema": json_schema,
230
- "args_json_schema": args_json_schema,
231
- "return_char_limit": return_char_limit,
232
- "pip_requirements": convert_and_respect_annotation_metadata(
233
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
234
- ),
235
- },
236
- headers={
237
- "content-type": "application/json",
238
- },
239
- request_options=request_options,
240
- omit=OMIT,
241
- )
242
- try:
243
- if 200 <= _response.status_code < 300:
244
- return typing.cast(
245
- Tool,
246
- construct_type(
247
- type_=Tool, # type: ignore
248
- object_=_response.json(),
249
- ),
250
- )
251
- if _response.status_code == 422:
252
- raise UnprocessableEntityError(
253
- typing.cast(
254
- HttpValidationError,
255
- construct_type(
256
- type_=HttpValidationError, # type: ignore
257
- object_=_response.json(),
258
- ),
259
- )
260
- )
261
- _response_json = _response.json()
262
- except JSONDecodeError:
263
- raise ApiError(status_code=_response.status_code, body=_response.text)
264
- raise ApiError(status_code=_response.status_code, body=_response_json)
265
-
266
- def count(
267
- self,
268
- *,
269
- include_base_tools: typing.Optional[bool] = None,
270
- request_options: typing.Optional[RequestOptions] = None,
271
- ) -> int:
272
- """
273
- Get a count of all tools available to agents belonging to the org of the user.
274
-
275
- Parameters
276
- ----------
277
- include_base_tools : typing.Optional[bool]
278
- Include built-in Letta tools in the count
279
-
280
- request_options : typing.Optional[RequestOptions]
281
- Request-specific configuration.
282
-
283
- Returns
284
- -------
285
- int
286
- Successful Response
287
-
288
- Examples
289
- --------
290
- from letta_client import Letta
291
-
292
- client = Letta(
293
- project="YOUR_PROJECT",
294
- token="YOUR_TOKEN",
295
- )
296
- client.tools.count()
297
- """
298
- _response = self._client_wrapper.httpx_client.request(
299
- "v1/tools/count",
300
- method="GET",
301
- params={
302
- "include_base_tools": include_base_tools,
303
- },
304
- request_options=request_options,
305
- )
306
- try:
307
- if 200 <= _response.status_code < 300:
308
- return typing.cast(
309
- int,
310
- construct_type(
311
- type_=int, # type: ignore
312
- object_=_response.json(),
313
- ),
314
- )
315
- if _response.status_code == 422:
316
- raise UnprocessableEntityError(
317
- typing.cast(
318
- HttpValidationError,
319
- construct_type(
320
- type_=HttpValidationError, # type: ignore
321
- object_=_response.json(),
322
- ),
323
- )
324
- )
325
- _response_json = _response.json()
326
- except JSONDecodeError:
327
- raise ApiError(status_code=_response.status_code, body=_response.text)
328
- raise ApiError(status_code=_response.status_code, body=_response_json)
329
-
330
- def list(
331
- self,
332
- *,
333
- after: typing.Optional[str] = None,
334
- limit: typing.Optional[int] = None,
335
- name: typing.Optional[str] = None,
336
- request_options: typing.Optional[RequestOptions] = None,
337
- ) -> typing.List[Tool]:
338
- """
339
- Get a list of all tools available to agents belonging to the org of the user
340
-
341
- Parameters
342
- ----------
343
- after : typing.Optional[str]
344
-
345
- limit : typing.Optional[int]
346
-
347
- name : typing.Optional[str]
348
-
349
- request_options : typing.Optional[RequestOptions]
350
- Request-specific configuration.
351
-
352
- Returns
353
- -------
354
- typing.List[Tool]
355
- Successful Response
356
-
357
- Examples
358
- --------
359
- from letta_client import Letta
360
-
361
- client = Letta(
362
- project="YOUR_PROJECT",
363
- token="YOUR_TOKEN",
364
- )
365
- client.tools.list()
366
- """
367
- _response = self._client_wrapper.httpx_client.request(
368
- "v1/tools/",
369
- method="GET",
370
- params={
371
- "after": after,
372
- "limit": limit,
373
- "name": name,
374
- },
375
- request_options=request_options,
376
- )
377
- try:
378
- if 200 <= _response.status_code < 300:
379
- return typing.cast(
380
- typing.List[Tool],
381
- construct_type(
382
- type_=typing.List[Tool], # type: ignore
383
- object_=_response.json(),
384
- ),
385
- )
386
- if _response.status_code == 422:
387
- raise UnprocessableEntityError(
388
- typing.cast(
389
- HttpValidationError,
390
- construct_type(
391
- type_=HttpValidationError, # type: ignore
392
- object_=_response.json(),
393
- ),
394
- )
395
- )
396
- _response_json = _response.json()
397
- except JSONDecodeError:
398
- raise ApiError(status_code=_response.status_code, body=_response.text)
399
- raise ApiError(status_code=_response.status_code, body=_response_json)
400
-
401
- def create(
402
- self,
403
- *,
404
- source_code: str,
405
- description: typing.Optional[str] = OMIT,
406
- tags: typing.Optional[typing.Sequence[str]] = OMIT,
407
- source_type: typing.Optional[str] = OMIT,
408
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
409
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
410
- return_char_limit: typing.Optional[int] = OMIT,
411
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
412
- request_options: typing.Optional[RequestOptions] = None,
413
- ) -> Tool:
414
- """
415
- Create a new tool
416
-
417
- Parameters
418
- ----------
419
- source_code : str
420
- The source code of the function.
421
-
422
- description : typing.Optional[str]
423
- The description of the tool.
424
-
425
- tags : typing.Optional[typing.Sequence[str]]
426
- Metadata tags.
427
-
428
- source_type : typing.Optional[str]
429
- The source type of the function.
430
-
431
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
432
- The JSON schema of the function (auto-generated from source_code if not provided)
433
-
434
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
435
- The args JSON schema of the function.
436
-
437
- return_char_limit : typing.Optional[int]
438
- The maximum number of characters in the response.
439
-
440
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
441
- Optional list of pip packages required by this tool.
442
-
443
- request_options : typing.Optional[RequestOptions]
444
- Request-specific configuration.
445
-
446
- Returns
447
- -------
448
- Tool
449
- Successful Response
450
-
451
- Examples
452
- --------
453
- from letta_client import Letta
454
-
455
- client = Letta(
456
- project="YOUR_PROJECT",
457
- token="YOUR_TOKEN",
458
- )
459
- client.tools.create(
460
- source_code="source_code",
461
- )
462
- """
463
- _response = self._client_wrapper.httpx_client.request(
464
- "v1/tools/",
465
- method="POST",
466
- json={
467
- "description": description,
468
- "tags": tags,
469
- "source_code": source_code,
470
- "source_type": source_type,
471
- "json_schema": json_schema,
472
- "args_json_schema": args_json_schema,
473
- "return_char_limit": return_char_limit,
474
- "pip_requirements": convert_and_respect_annotation_metadata(
475
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
476
- ),
477
- },
478
- request_options=request_options,
479
- omit=OMIT,
480
- )
481
- try:
482
- if 200 <= _response.status_code < 300:
483
- return typing.cast(
484
- Tool,
485
- construct_type(
486
- type_=Tool, # type: ignore
487
- object_=_response.json(),
488
- ),
489
- )
490
- if _response.status_code == 422:
491
- raise UnprocessableEntityError(
492
- typing.cast(
493
- HttpValidationError,
494
- construct_type(
495
- type_=HttpValidationError, # type: ignore
496
- object_=_response.json(),
497
- ),
498
- )
499
- )
500
- _response_json = _response.json()
501
- except JSONDecodeError:
502
- raise ApiError(status_code=_response.status_code, body=_response.text)
503
- raise ApiError(status_code=_response.status_code, body=_response_json)
504
-
505
- def upsert(
506
- self,
507
- *,
508
- source_code: str,
509
- description: typing.Optional[str] = OMIT,
510
- tags: typing.Optional[typing.Sequence[str]] = OMIT,
511
- source_type: typing.Optional[str] = OMIT,
512
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
513
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
514
- return_char_limit: typing.Optional[int] = OMIT,
515
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
516
- request_options: typing.Optional[RequestOptions] = None,
517
- ) -> Tool:
518
- """
519
- Create or update a tool
520
-
521
- Parameters
522
- ----------
523
- source_code : str
524
- The source code of the function.
525
-
526
- description : typing.Optional[str]
527
- The description of the tool.
528
-
529
- tags : typing.Optional[typing.Sequence[str]]
530
- Metadata tags.
531
-
532
- source_type : typing.Optional[str]
533
- The source type of the function.
534
-
535
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
536
- The JSON schema of the function (auto-generated from source_code if not provided)
537
-
538
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
539
- The args JSON schema of the function.
540
-
541
- return_char_limit : typing.Optional[int]
542
- The maximum number of characters in the response.
543
-
544
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
545
- Optional list of pip packages required by this tool.
546
-
547
- request_options : typing.Optional[RequestOptions]
548
- Request-specific configuration.
549
-
550
- Returns
551
- -------
552
- Tool
553
- Successful Response
554
-
555
- Examples
556
- --------
557
- from letta_client import Letta
558
-
559
- client = Letta(
560
- project="YOUR_PROJECT",
561
- token="YOUR_TOKEN",
562
- )
563
- client.tools.upsert(
564
- source_code="source_code",
565
- )
566
- """
567
- _response = self._client_wrapper.httpx_client.request(
568
- "v1/tools/",
569
- method="PUT",
570
- json={
571
- "description": description,
572
- "tags": tags,
573
- "source_code": source_code,
574
- "source_type": source_type,
575
- "json_schema": json_schema,
576
- "args_json_schema": args_json_schema,
577
- "return_char_limit": return_char_limit,
578
- "pip_requirements": convert_and_respect_annotation_metadata(
579
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
580
- ),
581
- },
582
- request_options=request_options,
583
- omit=OMIT,
584
- )
585
- try:
586
- if 200 <= _response.status_code < 300:
587
- return typing.cast(
588
- Tool,
589
- construct_type(
590
- type_=Tool, # type: ignore
591
- object_=_response.json(),
592
- ),
593
- )
594
- if _response.status_code == 422:
595
- raise UnprocessableEntityError(
596
- typing.cast(
597
- HttpValidationError,
598
- construct_type(
599
- type_=HttpValidationError, # type: ignore
600
- object_=_response.json(),
601
- ),
602
- )
603
- )
604
- _response_json = _response.json()
605
- except JSONDecodeError:
606
- raise ApiError(status_code=_response.status_code, body=_response.text)
607
- raise ApiError(status_code=_response.status_code, body=_response_json)
608
-
609
- def upsert_base_tools(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Tool]:
610
- """
611
- Upsert base tools
612
-
613
- Parameters
614
- ----------
615
- request_options : typing.Optional[RequestOptions]
616
- Request-specific configuration.
617
-
618
- Returns
619
- -------
620
- typing.List[Tool]
621
- Successful Response
622
-
623
- Examples
624
- --------
625
- from letta_client import Letta
626
-
627
- client = Letta(
628
- project="YOUR_PROJECT",
629
- token="YOUR_TOKEN",
630
- )
631
- client.tools.upsert_base_tools()
632
- """
633
- _response = self._client_wrapper.httpx_client.request(
634
- "v1/tools/add-base-tools",
635
- method="POST",
636
- request_options=request_options,
637
- )
638
- try:
639
- if 200 <= _response.status_code < 300:
640
- return typing.cast(
641
- typing.List[Tool],
642
- construct_type(
643
- type_=typing.List[Tool], # type: ignore
644
- object_=_response.json(),
645
- ),
646
- )
647
- if _response.status_code == 422:
648
- raise UnprocessableEntityError(
649
- typing.cast(
650
- HttpValidationError,
651
- construct_type(
652
- type_=HttpValidationError, # type: ignore
653
- object_=_response.json(),
654
- ),
655
- )
656
- )
657
- _response_json = _response.json()
658
- except JSONDecodeError:
659
- raise ApiError(status_code=_response.status_code, body=_response.text)
660
- raise ApiError(status_code=_response.status_code, body=_response_json)
661
-
662
- def run_tool_from_source(
663
- self,
664
- *,
665
- source_code: str,
666
- args: typing.Dict[str, typing.Optional[typing.Any]],
667
- env_vars: typing.Optional[typing.Dict[str, str]] = OMIT,
668
- name: typing.Optional[str] = OMIT,
669
- source_type: typing.Optional[str] = OMIT,
670
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
671
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
672
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
673
- request_options: typing.Optional[RequestOptions] = None,
674
- ) -> ToolReturnMessage:
675
- """
676
- Attempt to build a tool from source, then run it on the provided arguments
677
-
678
- Parameters
679
- ----------
680
- source_code : str
681
- The source code of the function.
682
-
683
- args : typing.Dict[str, typing.Optional[typing.Any]]
684
- The arguments to pass to the tool.
685
-
686
- env_vars : typing.Optional[typing.Dict[str, str]]
687
- The environment variables to pass to the tool.
688
-
689
- name : typing.Optional[str]
690
- The name of the tool to run.
691
-
692
- source_type : typing.Optional[str]
693
- The type of the source code.
694
-
695
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
696
- The args JSON schema of the function.
697
-
698
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
699
- The JSON schema of the function (auto-generated from source_code if not provided)
700
-
701
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
702
- Optional list of pip packages required by this tool.
703
-
704
- request_options : typing.Optional[RequestOptions]
705
- Request-specific configuration.
706
-
707
- Returns
708
- -------
709
- ToolReturnMessage
710
- Successful Response
711
-
712
- Examples
713
- --------
714
- from letta_client import Letta
715
-
716
- client = Letta(
717
- project="YOUR_PROJECT",
718
- token="YOUR_TOKEN",
719
- )
720
- client.tools.run_tool_from_source(
721
- source_code="source_code",
722
- args={"key": "value"},
723
- )
724
- """
725
- _response = self._client_wrapper.httpx_client.request(
726
- "v1/tools/run",
727
- method="POST",
728
- json={
729
- "source_code": source_code,
730
- "args": args,
731
- "env_vars": env_vars,
732
- "name": name,
733
- "source_type": source_type,
734
- "args_json_schema": args_json_schema,
735
- "json_schema": json_schema,
736
- "pip_requirements": convert_and_respect_annotation_metadata(
737
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
738
- ),
739
- },
740
- headers={
741
- "content-type": "application/json",
742
- },
743
- request_options=request_options,
744
- omit=OMIT,
745
- )
746
- try:
747
- if 200 <= _response.status_code < 300:
748
- return typing.cast(
749
- ToolReturnMessage,
750
- construct_type(
751
- type_=ToolReturnMessage, # type: ignore
752
- object_=_response.json(),
753
- ),
754
- )
755
- if _response.status_code == 422:
756
- raise UnprocessableEntityError(
757
- typing.cast(
758
- HttpValidationError,
759
- construct_type(
760
- type_=HttpValidationError, # type: ignore
761
- object_=_response.json(),
762
- ),
763
- )
764
- )
765
- _response_json = _response.json()
766
- except JSONDecodeError:
767
- raise ApiError(status_code=_response.status_code, body=_response.text)
768
- raise ApiError(status_code=_response.status_code, body=_response_json)
769
-
770
- def list_composio_apps(
771
- self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
772
- ) -> typing.List[AppModel]:
773
- """
774
- Get a list of all Composio apps
775
-
776
- Parameters
777
- ----------
778
- user_id : typing.Optional[str]
779
-
780
- request_options : typing.Optional[RequestOptions]
781
- Request-specific configuration.
782
-
783
- Returns
784
- -------
785
- typing.List[AppModel]
786
- Successful Response
787
-
788
- Examples
789
- --------
790
- from letta_client import Letta
791
-
792
- client = Letta(
793
- project="YOUR_PROJECT",
794
- token="YOUR_TOKEN",
795
- )
796
- client.tools.list_composio_apps()
797
- """
798
- _response = self._client_wrapper.httpx_client.request(
799
- "v1/tools/composio/apps",
800
- method="GET",
801
- headers={
802
- "user-id": str(user_id) if user_id is not None else None,
803
- },
804
- request_options=request_options,
805
- )
806
- try:
807
- if 200 <= _response.status_code < 300:
808
- return typing.cast(
809
- typing.List[AppModel],
810
- construct_type(
811
- type_=typing.List[AppModel], # type: ignore
812
- object_=_response.json(),
813
- ),
814
- )
815
- if _response.status_code == 422:
816
- raise UnprocessableEntityError(
817
- typing.cast(
818
- HttpValidationError,
819
- construct_type(
820
- type_=HttpValidationError, # type: ignore
821
- object_=_response.json(),
822
- ),
823
- )
824
- )
825
- _response_json = _response.json()
826
- except JSONDecodeError:
827
- raise ApiError(status_code=_response.status_code, body=_response.text)
828
- raise ApiError(status_code=_response.status_code, body=_response_json)
829
-
830
- def list_composio_actions_by_app(
831
- self, composio_app_name: str, *, request_options: typing.Optional[RequestOptions] = None
832
- ) -> typing.List[ActionModel]:
833
- """
834
- Get a list of all Composio actions for a specific app
835
-
836
- Parameters
837
- ----------
838
- composio_app_name : str
839
-
840
- request_options : typing.Optional[RequestOptions]
841
- Request-specific configuration.
842
-
843
- Returns
844
- -------
845
- typing.List[ActionModel]
846
- Successful Response
847
-
848
- Examples
849
- --------
850
- from letta_client import Letta
851
-
852
- client = Letta(
853
- project="YOUR_PROJECT",
854
- token="YOUR_TOKEN",
855
- )
856
- client.tools.list_composio_actions_by_app(
857
- composio_app_name="composio_app_name",
858
- )
859
- """
860
- _response = self._client_wrapper.httpx_client.request(
861
- f"v1/tools/composio/apps/{jsonable_encoder(composio_app_name)}/actions",
862
- method="GET",
863
- request_options=request_options,
864
- )
865
- try:
866
- if 200 <= _response.status_code < 300:
867
- return typing.cast(
868
- typing.List[ActionModel],
869
- construct_type(
870
- type_=typing.List[ActionModel], # type: ignore
871
- object_=_response.json(),
872
- ),
873
- )
874
- if _response.status_code == 422:
875
- raise UnprocessableEntityError(
876
- typing.cast(
877
- HttpValidationError,
878
- construct_type(
879
- type_=HttpValidationError, # type: ignore
880
- object_=_response.json(),
881
- ),
882
- )
883
- )
884
- _response_json = _response.json()
885
- except JSONDecodeError:
886
- raise ApiError(status_code=_response.status_code, body=_response.text)
887
- raise ApiError(status_code=_response.status_code, body=_response_json)
888
-
889
- def add_composio_tool(
890
- self, composio_action_name: str, *, request_options: typing.Optional[RequestOptions] = None
891
- ) -> Tool:
892
- """
893
- Add a new Composio tool by action name (Composio refers to each tool as an `Action`)
894
-
895
- Parameters
896
- ----------
897
- composio_action_name : str
898
-
899
- request_options : typing.Optional[RequestOptions]
900
- Request-specific configuration.
901
-
902
- Returns
903
- -------
904
- Tool
905
- Successful Response
906
-
907
- Examples
908
- --------
909
- from letta_client import Letta
910
-
911
- client = Letta(
912
- project="YOUR_PROJECT",
913
- token="YOUR_TOKEN",
914
- )
915
- client.tools.add_composio_tool(
916
- composio_action_name="composio_action_name",
917
- )
918
- """
919
- _response = self._client_wrapper.httpx_client.request(
920
- f"v1/tools/composio/{jsonable_encoder(composio_action_name)}",
921
- method="POST",
922
- request_options=request_options,
923
- )
924
- try:
925
- if 200 <= _response.status_code < 300:
926
- return typing.cast(
927
- Tool,
928
- construct_type(
929
- type_=Tool, # type: ignore
930
- object_=_response.json(),
931
- ),
932
- )
933
- if _response.status_code == 422:
934
- raise UnprocessableEntityError(
935
- typing.cast(
936
- HttpValidationError,
937
- construct_type(
938
- type_=HttpValidationError, # type: ignore
939
- object_=_response.json(),
940
- ),
941
- )
942
- )
943
- _response_json = _response.json()
944
- except JSONDecodeError:
945
- raise ApiError(status_code=_response.status_code, body=_response.text)
946
- raise ApiError(status_code=_response.status_code, body=_response_json)
947
-
948
- def list_mcp_servers(
949
- self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
950
- ) -> typing.Dict[str, ListMcpServersResponseValue]:
951
- """
952
- Get a list of all configured MCP servers
953
-
954
- Parameters
955
- ----------
956
- user_id : typing.Optional[str]
957
-
958
- request_options : typing.Optional[RequestOptions]
959
- Request-specific configuration.
960
-
961
- Returns
962
- -------
963
- typing.Dict[str, ListMcpServersResponseValue]
964
- Successful Response
965
-
966
- Examples
967
- --------
968
- from letta_client import Letta
969
-
970
- client = Letta(
971
- project="YOUR_PROJECT",
972
- token="YOUR_TOKEN",
973
- )
974
- client.tools.list_mcp_servers()
975
- """
976
- _response = self._client_wrapper.httpx_client.request(
977
- "v1/tools/mcp/servers",
978
- method="GET",
979
- headers={
980
- "user-id": str(user_id) if user_id is not None else None,
981
- },
982
- request_options=request_options,
983
- )
984
- try:
985
- if 200 <= _response.status_code < 300:
986
- return typing.cast(
987
- typing.Dict[str, ListMcpServersResponseValue],
988
- construct_type(
989
- type_=typing.Dict[str, ListMcpServersResponseValue], # type: ignore
990
- object_=_response.json(),
991
- ),
992
- )
993
- if _response.status_code == 422:
994
- raise UnprocessableEntityError(
995
- typing.cast(
996
- HttpValidationError,
997
- construct_type(
998
- type_=HttpValidationError, # type: ignore
999
- object_=_response.json(),
1000
- ),
1001
- )
1002
- )
1003
- _response_json = _response.json()
1004
- except JSONDecodeError:
1005
- raise ApiError(status_code=_response.status_code, body=_response.text)
1006
- raise ApiError(status_code=_response.status_code, body=_response_json)
1007
-
1008
- def add_mcp_server(
1009
- self, *, request: AddMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
1010
- ) -> typing.List[AddMcpServerResponseItem]:
1011
- """
1012
- Add a new MCP server to the Letta MCP server config
1013
-
1014
- Parameters
1015
- ----------
1016
- request : AddMcpServerRequest
1017
-
1018
- request_options : typing.Optional[RequestOptions]
1019
- Request-specific configuration.
1020
-
1021
- Returns
1022
- -------
1023
- typing.List[AddMcpServerResponseItem]
1024
- Successful Response
1025
-
1026
- Examples
1027
- --------
1028
- from letta_client import Letta, StdioServerConfig
1029
-
1030
- client = Letta(
1031
- project="YOUR_PROJECT",
1032
- token="YOUR_TOKEN",
1033
- )
1034
- client.tools.add_mcp_server(
1035
- request=StdioServerConfig(
1036
- server_name="server_name",
1037
- command="command",
1038
- args=["args"],
1039
- ),
1040
- )
1041
- """
1042
- _response = self._client_wrapper.httpx_client.request(
1043
- "v1/tools/mcp/servers",
1044
- method="PUT",
1045
- json=convert_and_respect_annotation_metadata(
1046
- object_=request, annotation=AddMcpServerRequest, direction="write"
1047
- ),
1048
- request_options=request_options,
1049
- omit=OMIT,
1050
- )
1051
- try:
1052
- if 200 <= _response.status_code < 300:
1053
- return typing.cast(
1054
- typing.List[AddMcpServerResponseItem],
1055
- construct_type(
1056
- type_=typing.List[AddMcpServerResponseItem], # type: ignore
1057
- object_=_response.json(),
1058
- ),
1059
- )
1060
- if _response.status_code == 422:
1061
- raise UnprocessableEntityError(
1062
- typing.cast(
1063
- HttpValidationError,
1064
- construct_type(
1065
- type_=HttpValidationError, # type: ignore
1066
- object_=_response.json(),
1067
- ),
1068
- )
1069
- )
1070
- _response_json = _response.json()
1071
- except JSONDecodeError:
1072
- raise ApiError(status_code=_response.status_code, body=_response.text)
1073
- raise ApiError(status_code=_response.status_code, body=_response_json)
1074
-
1075
- def list_mcp_tools_by_server(
1076
- self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
1077
- ) -> typing.List[McpTool]:
1078
- """
1079
- Get a list of all tools for a specific MCP server
1080
-
1081
- Parameters
1082
- ----------
1083
- mcp_server_name : str
1084
-
1085
- request_options : typing.Optional[RequestOptions]
1086
- Request-specific configuration.
1087
-
1088
- Returns
1089
- -------
1090
- typing.List[McpTool]
1091
- Successful Response
1092
-
1093
- Examples
1094
- --------
1095
- from letta_client import Letta
1096
-
1097
- client = Letta(
1098
- project="YOUR_PROJECT",
1099
- token="YOUR_TOKEN",
1100
- )
1101
- client.tools.list_mcp_tools_by_server(
1102
- mcp_server_name="mcp_server_name",
1103
- )
1104
- """
1105
- _response = self._client_wrapper.httpx_client.request(
1106
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}/tools",
1107
- method="GET",
1108
- request_options=request_options,
1109
- )
1110
- try:
1111
- if 200 <= _response.status_code < 300:
1112
- return typing.cast(
1113
- typing.List[McpTool],
1114
- construct_type(
1115
- type_=typing.List[McpTool], # type: ignore
1116
- object_=_response.json(),
1117
- ),
1118
- )
1119
- if _response.status_code == 422:
1120
- raise UnprocessableEntityError(
1121
- typing.cast(
1122
- HttpValidationError,
1123
- construct_type(
1124
- type_=HttpValidationError, # type: ignore
1125
- object_=_response.json(),
1126
- ),
1127
- )
1128
- )
1129
- _response_json = _response.json()
1130
- except JSONDecodeError:
1131
- raise ApiError(status_code=_response.status_code, body=_response.text)
1132
- raise ApiError(status_code=_response.status_code, body=_response_json)
1133
-
1134
- def add_mcp_tool(
1135
- self, mcp_server_name: str, mcp_tool_name: str, *, request_options: typing.Optional[RequestOptions] = None
1136
- ) -> Tool:
1137
- """
1138
- Register a new MCP tool as a Letta server by MCP server + tool name
1139
-
1140
- Parameters
1141
- ----------
1142
- mcp_server_name : str
1143
-
1144
- mcp_tool_name : str
1145
-
1146
- request_options : typing.Optional[RequestOptions]
1147
- Request-specific configuration.
1148
-
1149
- Returns
1150
- -------
1151
- Tool
1152
- Successful Response
1153
-
1154
- Examples
1155
- --------
1156
- from letta_client import Letta
1157
-
1158
- client = Letta(
1159
- project="YOUR_PROJECT",
1160
- token="YOUR_TOKEN",
1161
- )
1162
- client.tools.add_mcp_tool(
1163
- mcp_server_name="mcp_server_name",
1164
- mcp_tool_name="mcp_tool_name",
1165
- )
1166
- """
1167
- _response = self._client_wrapper.httpx_client.request(
1168
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}/{jsonable_encoder(mcp_tool_name)}",
1169
- method="POST",
1170
- request_options=request_options,
1171
- )
1172
- try:
1173
- if 200 <= _response.status_code < 300:
1174
- return typing.cast(
1175
- Tool,
1176
- construct_type(
1177
- type_=Tool, # type: ignore
1178
- object_=_response.json(),
1179
- ),
1180
- )
1181
- if _response.status_code == 422:
1182
- raise UnprocessableEntityError(
1183
- typing.cast(
1184
- HttpValidationError,
1185
- construct_type(
1186
- type_=HttpValidationError, # type: ignore
1187
- object_=_response.json(),
1188
- ),
1189
- )
1190
- )
1191
- _response_json = _response.json()
1192
- except JSONDecodeError:
1193
- raise ApiError(status_code=_response.status_code, body=_response.text)
1194
- raise ApiError(status_code=_response.status_code, body=_response_json)
1195
-
1196
- def delete_mcp_server(
1197
- self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
1198
- ) -> typing.List[DeleteMcpServerResponseItem]:
1199
- """
1200
- Add a new MCP server to the Letta MCP server config
1201
-
1202
- Parameters
1203
- ----------
1204
- mcp_server_name : str
1205
-
1206
- request_options : typing.Optional[RequestOptions]
1207
- Request-specific configuration.
1208
-
1209
- Returns
1210
- -------
1211
- typing.List[DeleteMcpServerResponseItem]
1212
- Successful Response
1213
-
1214
- Examples
1215
- --------
1216
- from letta_client import Letta
1217
-
1218
- client = Letta(
1219
- project="YOUR_PROJECT",
1220
- token="YOUR_TOKEN",
1221
- )
1222
- client.tools.delete_mcp_server(
1223
- mcp_server_name="mcp_server_name",
1224
- )
1225
- """
1226
- _response = self._client_wrapper.httpx_client.request(
1227
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}",
1228
- method="DELETE",
1229
- request_options=request_options,
1230
- )
1231
- try:
1232
- if 200 <= _response.status_code < 300:
1233
- return typing.cast(
1234
- typing.List[DeleteMcpServerResponseItem],
1235
- construct_type(
1236
- type_=typing.List[DeleteMcpServerResponseItem], # type: ignore
1237
- object_=_response.json(),
1238
- ),
1239
- )
1240
- if _response.status_code == 422:
1241
- raise UnprocessableEntityError(
1242
- typing.cast(
1243
- HttpValidationError,
1244
- construct_type(
1245
- type_=HttpValidationError, # type: ignore
1246
- object_=_response.json(),
1247
- ),
1248
- )
1249
- )
1250
- _response_json = _response.json()
1251
- except JSONDecodeError:
1252
- raise ApiError(status_code=_response.status_code, body=_response.text)
1253
- raise ApiError(status_code=_response.status_code, body=_response_json)
1254
-
1255
- def update_mcp_server(
1256
- self,
1257
- mcp_server_name: str,
1258
- *,
1259
- request: UpdateMcpServerRequest,
1260
- request_options: typing.Optional[RequestOptions] = None,
1261
- ) -> UpdateMcpServerResponse:
1262
- """
1263
- Update an existing MCP server configuration
1264
-
1265
- Parameters
1266
- ----------
1267
- mcp_server_name : str
1268
-
1269
- request : UpdateMcpServerRequest
1270
-
1271
- request_options : typing.Optional[RequestOptions]
1272
- Request-specific configuration.
1273
-
1274
- Returns
1275
- -------
1276
- UpdateMcpServerResponse
1277
- Successful Response
1278
-
1279
- Examples
1280
- --------
1281
- from letta_client import Letta, UpdateStdioMcpServer
1282
-
1283
- client = Letta(
1284
- project="YOUR_PROJECT",
1285
- token="YOUR_TOKEN",
1286
- )
1287
- client.tools.update_mcp_server(
1288
- mcp_server_name="mcp_server_name",
1289
- request=UpdateStdioMcpServer(),
1290
- )
1291
- """
1292
- _response = self._client_wrapper.httpx_client.request(
1293
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}",
1294
- method="PATCH",
1295
- json=convert_and_respect_annotation_metadata(
1296
- object_=request, annotation=UpdateMcpServerRequest, direction="write"
1297
- ),
1298
- request_options=request_options,
1299
- omit=OMIT,
1300
- )
1301
- try:
1302
- if 200 <= _response.status_code < 300:
1303
- return typing.cast(
1304
- UpdateMcpServerResponse,
1305
- construct_type(
1306
- type_=UpdateMcpServerResponse, # type: ignore
1307
- object_=_response.json(),
1308
- ),
1309
- )
1310
- if _response.status_code == 422:
1311
- raise UnprocessableEntityError(
1312
- typing.cast(
1313
- HttpValidationError,
1314
- construct_type(
1315
- type_=HttpValidationError, # type: ignore
1316
- object_=_response.json(),
1317
- ),
1318
- )
1319
- )
1320
- _response_json = _response.json()
1321
- except JSONDecodeError:
1322
- raise ApiError(status_code=_response.status_code, body=_response.text)
1323
- raise ApiError(status_code=_response.status_code, body=_response_json)
1324
-
1325
- def test_mcp_server(
1326
- self, *, request: TestMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
1327
- ) -> typing.Optional[typing.Any]:
1328
- """
1329
- Test connection to an MCP server without adding it.
1330
- Returns the list of available tools if successful.
1331
-
1332
- Parameters
1333
- ----------
1334
- request : TestMcpServerRequest
1335
-
1336
- request_options : typing.Optional[RequestOptions]
1337
- Request-specific configuration.
1338
-
1339
- Returns
1340
- -------
1341
- typing.Optional[typing.Any]
1342
- Successful Response
1343
-
1344
- Examples
1345
- --------
1346
- from letta_client import Letta, StdioServerConfig
1347
-
1348
- client = Letta(
1349
- project="YOUR_PROJECT",
1350
- token="YOUR_TOKEN",
1351
- )
1352
- client.tools.test_mcp_server(
1353
- request=StdioServerConfig(
1354
- server_name="server_name",
1355
- command="command",
1356
- args=["args"],
1357
- ),
1358
- )
1359
- """
1360
- _response = self._client_wrapper.httpx_client.request(
1361
- "v1/tools/mcp/servers/test",
1362
- method="POST",
1363
- json=convert_and_respect_annotation_metadata(
1364
- object_=request, annotation=TestMcpServerRequest, direction="write"
1365
- ),
1366
- request_options=request_options,
1367
- omit=OMIT,
1368
- )
1369
- try:
1370
- if 200 <= _response.status_code < 300:
1371
- return typing.cast(
1372
- typing.Optional[typing.Any],
1373
- construct_type(
1374
- type_=typing.Optional[typing.Any], # type: ignore
1375
- object_=_response.json(),
1376
- ),
1377
- )
1378
- if _response.status_code == 422:
1379
- raise UnprocessableEntityError(
1380
- typing.cast(
1381
- HttpValidationError,
1382
- construct_type(
1383
- type_=HttpValidationError, # type: ignore
1384
- object_=_response.json(),
1385
- ),
1386
- )
1387
- )
1388
- _response_json = _response.json()
1389
- except JSONDecodeError:
1390
- raise ApiError(status_code=_response.status_code, body=_response.text)
1391
- raise ApiError(status_code=_response.status_code, body=_response_json)
1392
-
1393
- def connect_mcp_server(
1394
- self, *, request: ConnectMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
1395
- ) -> typing.Iterator[StreamingResponse]:
1396
- """
1397
- Connect to an MCP server with support for OAuth via SSE.
1398
- Returns a stream of events handling authorization state and exchange if OAuth is required.
1399
-
1400
- Parameters
1401
- ----------
1402
- request : ConnectMcpServerRequest
1403
-
1404
- request_options : typing.Optional[RequestOptions]
1405
- Request-specific configuration.
1406
-
1407
- Yields
1408
- ------
1409
- typing.Iterator[StreamingResponse]
1410
- Successful response
1411
-
1412
- Examples
1413
- --------
1414
- from letta_client import Letta, StdioServerConfig
1415
-
1416
- client = Letta(
1417
- project="YOUR_PROJECT",
1418
- token="YOUR_TOKEN",
1419
- )
1420
- response = client.tools.connect_mcp_server(
1421
- request=StdioServerConfig(
1422
- server_name="server_name",
1423
- command="command",
1424
- args=["args"],
1425
- ),
1426
- )
1427
- for chunk in response:
1428
- yield chunk
1429
- """
1430
- with self._client_wrapper.httpx_client.stream(
1431
- "v1/tools/mcp/servers/connect",
1432
- method="POST",
1433
- json=convert_and_respect_annotation_metadata(
1434
- object_=request, annotation=ConnectMcpServerRequest, direction="write"
1435
- ),
1436
- request_options=request_options,
1437
- omit=OMIT,
1438
- ) as _response:
1439
- try:
1440
- if 200 <= _response.status_code < 300:
1441
- _event_source = httpx_sse.EventSource(_response)
1442
- for _sse in _event_source.iter_sse():
1443
- try:
1444
- yield typing.cast(
1445
- StreamingResponse,
1446
- construct_type(
1447
- type_=StreamingResponse, # type: ignore
1448
- object_=json.loads(_sse.data),
1449
- ),
1450
- )
1451
- except:
1452
- pass
1453
- return
1454
- _response.read()
1455
- if _response.status_code == 422:
1456
- raise UnprocessableEntityError(
1457
- typing.cast(
1458
- HttpValidationError,
1459
- construct_type(
1460
- type_=HttpValidationError, # type: ignore
1461
- object_=_response.json(),
1462
- ),
1463
- )
1464
- )
1465
- _response_json = _response.json()
1466
- except JSONDecodeError:
1467
- raise ApiError(status_code=_response.status_code, body=_response.text)
1468
- raise ApiError(status_code=_response.status_code, body=_response_json)
1469
-
1470
-
1471
- class AsyncToolsClient:
1472
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
1473
- self._client_wrapper = client_wrapper
1474
-
1475
- async def retrieve(self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Tool:
1476
- """
1477
- Get a tool by ID
1478
-
1479
- Parameters
1480
- ----------
1481
- tool_id : str
1482
-
1483
- request_options : typing.Optional[RequestOptions]
1484
- Request-specific configuration.
1485
-
1486
- Returns
1487
- -------
1488
- Tool
1489
- Successful Response
1490
-
1491
- Examples
1492
- --------
1493
- import asyncio
1494
-
1495
- from letta_client import AsyncLetta
1496
-
1497
- client = AsyncLetta(
1498
- project="YOUR_PROJECT",
1499
- token="YOUR_TOKEN",
1500
- )
1501
-
1502
-
1503
- async def main() -> None:
1504
- await client.tools.retrieve(
1505
- tool_id="tool_id",
1506
- )
1507
-
1508
-
1509
- asyncio.run(main())
1510
- """
1511
- _response = await self._client_wrapper.httpx_client.request(
1512
- f"v1/tools/{jsonable_encoder(tool_id)}",
1513
- method="GET",
1514
- request_options=request_options,
1515
- )
1516
- try:
1517
- if 200 <= _response.status_code < 300:
1518
- return typing.cast(
1519
- Tool,
1520
- construct_type(
1521
- type_=Tool, # type: ignore
1522
- object_=_response.json(),
1523
- ),
1524
- )
1525
- if _response.status_code == 422:
1526
- raise UnprocessableEntityError(
1527
- typing.cast(
1528
- HttpValidationError,
1529
- construct_type(
1530
- type_=HttpValidationError, # type: ignore
1531
- object_=_response.json(),
1532
- ),
1533
- )
1534
- )
1535
- _response_json = _response.json()
1536
- except JSONDecodeError:
1537
- raise ApiError(status_code=_response.status_code, body=_response.text)
1538
- raise ApiError(status_code=_response.status_code, body=_response_json)
1539
-
1540
- async def delete(
1541
- self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None
1542
- ) -> typing.Optional[typing.Any]:
1543
- """
1544
- Delete a tool by name
1545
-
1546
- Parameters
1547
- ----------
1548
- tool_id : str
1549
-
1550
- request_options : typing.Optional[RequestOptions]
1551
- Request-specific configuration.
1552
-
1553
- Returns
1554
- -------
1555
- typing.Optional[typing.Any]
1556
- Successful Response
1557
-
1558
- Examples
1559
- --------
1560
- import asyncio
1561
-
1562
- from letta_client import AsyncLetta
1563
-
1564
- client = AsyncLetta(
1565
- project="YOUR_PROJECT",
1566
- token="YOUR_TOKEN",
1567
- )
1568
-
1569
-
1570
- async def main() -> None:
1571
- await client.tools.delete(
1572
- tool_id="tool_id",
1573
- )
1574
-
1575
-
1576
- asyncio.run(main())
1577
- """
1578
- _response = await self._client_wrapper.httpx_client.request(
1579
- f"v1/tools/{jsonable_encoder(tool_id)}",
1580
- method="DELETE",
1581
- request_options=request_options,
1582
- )
1583
- try:
1584
- if 200 <= _response.status_code < 300:
1585
- return typing.cast(
1586
- typing.Optional[typing.Any],
1587
- construct_type(
1588
- type_=typing.Optional[typing.Any], # type: ignore
1589
- object_=_response.json(),
1590
- ),
1591
- )
1592
- if _response.status_code == 422:
1593
- raise UnprocessableEntityError(
1594
- typing.cast(
1595
- HttpValidationError,
1596
- construct_type(
1597
- type_=HttpValidationError, # type: ignore
1598
- object_=_response.json(),
1599
- ),
1600
- )
1601
- )
1602
- _response_json = _response.json()
1603
- except JSONDecodeError:
1604
- raise ApiError(status_code=_response.status_code, body=_response.text)
1605
- raise ApiError(status_code=_response.status_code, body=_response_json)
1606
-
1607
- async def modify(
1608
- self,
1609
- tool_id: str,
1610
- *,
1611
- description: typing.Optional[str] = OMIT,
1612
- tags: typing.Optional[typing.Sequence[str]] = OMIT,
1613
- source_code: typing.Optional[str] = OMIT,
1614
- source_type: typing.Optional[str] = OMIT,
1615
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
1616
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
1617
- return_char_limit: typing.Optional[int] = OMIT,
1618
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
1619
- request_options: typing.Optional[RequestOptions] = None,
1620
- ) -> Tool:
1621
- """
1622
- Update an existing tool
1623
-
1624
- Parameters
1625
- ----------
1626
- tool_id : str
1627
-
1628
- description : typing.Optional[str]
1629
- The description of the tool.
1630
-
1631
- tags : typing.Optional[typing.Sequence[str]]
1632
- Metadata tags.
1633
-
1634
- source_code : typing.Optional[str]
1635
- The source code of the function.
1636
-
1637
- source_type : typing.Optional[str]
1638
- The type of the source code.
1639
-
1640
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
1641
- The JSON schema of the function (auto-generated from source_code if not provided)
1642
-
1643
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
1644
- The args JSON schema of the function.
1645
-
1646
- return_char_limit : typing.Optional[int]
1647
- The maximum number of characters in the response.
1648
-
1649
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
1650
- Optional list of pip packages required by this tool.
1651
-
1652
- request_options : typing.Optional[RequestOptions]
1653
- Request-specific configuration.
1654
-
1655
- Returns
1656
- -------
1657
- Tool
1658
- Successful Response
1659
-
1660
- Examples
1661
- --------
1662
- import asyncio
1663
-
1664
- from letta_client import AsyncLetta
1665
-
1666
- client = AsyncLetta(
1667
- project="YOUR_PROJECT",
1668
- token="YOUR_TOKEN",
1669
- )
1670
-
1671
-
1672
- async def main() -> None:
1673
- await client.tools.modify(
1674
- tool_id="tool_id",
1675
- )
1676
-
1677
-
1678
- asyncio.run(main())
1679
- """
1680
- _response = await self._client_wrapper.httpx_client.request(
1681
- f"v1/tools/{jsonable_encoder(tool_id)}",
1682
- method="PATCH",
1683
- json={
1684
- "description": description,
1685
- "tags": tags,
1686
- "source_code": source_code,
1687
- "source_type": source_type,
1688
- "json_schema": json_schema,
1689
- "args_json_schema": args_json_schema,
1690
- "return_char_limit": return_char_limit,
1691
- "pip_requirements": convert_and_respect_annotation_metadata(
1692
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
1693
- ),
1694
- },
1695
- headers={
1696
- "content-type": "application/json",
1697
- },
1698
- request_options=request_options,
1699
- omit=OMIT,
1700
- )
1701
- try:
1702
- if 200 <= _response.status_code < 300:
1703
- return typing.cast(
1704
- Tool,
1705
- construct_type(
1706
- type_=Tool, # type: ignore
1707
- object_=_response.json(),
1708
- ),
1709
- )
1710
- if _response.status_code == 422:
1711
- raise UnprocessableEntityError(
1712
- typing.cast(
1713
- HttpValidationError,
1714
- construct_type(
1715
- type_=HttpValidationError, # type: ignore
1716
- object_=_response.json(),
1717
- ),
1718
- )
1719
- )
1720
- _response_json = _response.json()
1721
- except JSONDecodeError:
1722
- raise ApiError(status_code=_response.status_code, body=_response.text)
1723
- raise ApiError(status_code=_response.status_code, body=_response_json)
1724
-
1725
- async def count(
1726
- self,
1727
- *,
1728
- include_base_tools: typing.Optional[bool] = None,
1729
- request_options: typing.Optional[RequestOptions] = None,
1730
- ) -> int:
1731
- """
1732
- Get a count of all tools available to agents belonging to the org of the user.
1733
-
1734
- Parameters
1735
- ----------
1736
- include_base_tools : typing.Optional[bool]
1737
- Include built-in Letta tools in the count
1738
-
1739
- request_options : typing.Optional[RequestOptions]
1740
- Request-specific configuration.
1741
-
1742
- Returns
1743
- -------
1744
- int
1745
- Successful Response
1746
-
1747
- Examples
1748
- --------
1749
- import asyncio
1750
-
1751
- from letta_client import AsyncLetta
1752
-
1753
- client = AsyncLetta(
1754
- project="YOUR_PROJECT",
1755
- token="YOUR_TOKEN",
1756
- )
1757
-
1758
-
1759
- async def main() -> None:
1760
- await client.tools.count()
1761
-
1762
-
1763
- asyncio.run(main())
1764
- """
1765
- _response = await self._client_wrapper.httpx_client.request(
1766
- "v1/tools/count",
1767
- method="GET",
1768
- params={
1769
- "include_base_tools": include_base_tools,
1770
- },
1771
- request_options=request_options,
1772
- )
1773
- try:
1774
- if 200 <= _response.status_code < 300:
1775
- return typing.cast(
1776
- int,
1777
- construct_type(
1778
- type_=int, # type: ignore
1779
- object_=_response.json(),
1780
- ),
1781
- )
1782
- if _response.status_code == 422:
1783
- raise UnprocessableEntityError(
1784
- typing.cast(
1785
- HttpValidationError,
1786
- construct_type(
1787
- type_=HttpValidationError, # type: ignore
1788
- object_=_response.json(),
1789
- ),
1790
- )
1791
- )
1792
- _response_json = _response.json()
1793
- except JSONDecodeError:
1794
- raise ApiError(status_code=_response.status_code, body=_response.text)
1795
- raise ApiError(status_code=_response.status_code, body=_response_json)
1796
-
1797
- async def list(
1798
- self,
1799
- *,
1800
- after: typing.Optional[str] = None,
1801
- limit: typing.Optional[int] = None,
1802
- name: typing.Optional[str] = None,
1803
- request_options: typing.Optional[RequestOptions] = None,
1804
- ) -> typing.List[Tool]:
1805
- """
1806
- Get a list of all tools available to agents belonging to the org of the user
1807
-
1808
- Parameters
1809
- ----------
1810
- after : typing.Optional[str]
1811
-
1812
- limit : typing.Optional[int]
1813
-
1814
- name : typing.Optional[str]
1815
-
1816
- request_options : typing.Optional[RequestOptions]
1817
- Request-specific configuration.
1818
-
1819
- Returns
1820
- -------
1821
- typing.List[Tool]
1822
- Successful Response
1823
-
1824
- Examples
1825
- --------
1826
- import asyncio
1827
-
1828
- from letta_client import AsyncLetta
1829
-
1830
- client = AsyncLetta(
1831
- project="YOUR_PROJECT",
1832
- token="YOUR_TOKEN",
1833
- )
1834
-
1835
-
1836
- async def main() -> None:
1837
- await client.tools.list()
1838
-
1839
-
1840
- asyncio.run(main())
1841
- """
1842
- _response = await self._client_wrapper.httpx_client.request(
1843
- "v1/tools/",
1844
- method="GET",
1845
- params={
1846
- "after": after,
1847
- "limit": limit,
1848
- "name": name,
1849
- },
1850
- request_options=request_options,
1851
- )
1852
- try:
1853
- if 200 <= _response.status_code < 300:
1854
- return typing.cast(
1855
- typing.List[Tool],
1856
- construct_type(
1857
- type_=typing.List[Tool], # type: ignore
1858
- object_=_response.json(),
1859
- ),
1860
- )
1861
- if _response.status_code == 422:
1862
- raise UnprocessableEntityError(
1863
- typing.cast(
1864
- HttpValidationError,
1865
- construct_type(
1866
- type_=HttpValidationError, # type: ignore
1867
- object_=_response.json(),
1868
- ),
1869
- )
1870
- )
1871
- _response_json = _response.json()
1872
- except JSONDecodeError:
1873
- raise ApiError(status_code=_response.status_code, body=_response.text)
1874
- raise ApiError(status_code=_response.status_code, body=_response_json)
1875
-
1876
- async def create(
1877
- self,
1878
- *,
1879
- source_code: str,
1880
- description: typing.Optional[str] = OMIT,
1881
- tags: typing.Optional[typing.Sequence[str]] = OMIT,
1882
- source_type: typing.Optional[str] = OMIT,
1883
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
1884
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
1885
- return_char_limit: typing.Optional[int] = OMIT,
1886
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
1887
- request_options: typing.Optional[RequestOptions] = None,
1888
- ) -> Tool:
1889
- """
1890
- Create a new tool
1891
-
1892
- Parameters
1893
- ----------
1894
- source_code : str
1895
- The source code of the function.
1896
-
1897
- description : typing.Optional[str]
1898
- The description of the tool.
1899
-
1900
- tags : typing.Optional[typing.Sequence[str]]
1901
- Metadata tags.
1902
-
1903
- source_type : typing.Optional[str]
1904
- The source type of the function.
1905
-
1906
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
1907
- The JSON schema of the function (auto-generated from source_code if not provided)
1908
-
1909
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
1910
- The args JSON schema of the function.
1911
-
1912
- return_char_limit : typing.Optional[int]
1913
- The maximum number of characters in the response.
1914
-
1915
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
1916
- Optional list of pip packages required by this tool.
1917
-
1918
- request_options : typing.Optional[RequestOptions]
1919
- Request-specific configuration.
1920
-
1921
- Returns
1922
- -------
1923
- Tool
1924
- Successful Response
1925
-
1926
- Examples
1927
- --------
1928
- import asyncio
1929
-
1930
- from letta_client import AsyncLetta
1931
-
1932
- client = AsyncLetta(
1933
- project="YOUR_PROJECT",
1934
- token="YOUR_TOKEN",
1935
- )
1936
-
1937
-
1938
- async def main() -> None:
1939
- await client.tools.create(
1940
- source_code="source_code",
1941
- )
1942
-
1943
-
1944
- asyncio.run(main())
1945
- """
1946
- _response = await self._client_wrapper.httpx_client.request(
1947
- "v1/tools/",
1948
- method="POST",
1949
- json={
1950
- "description": description,
1951
- "tags": tags,
1952
- "source_code": source_code,
1953
- "source_type": source_type,
1954
- "json_schema": json_schema,
1955
- "args_json_schema": args_json_schema,
1956
- "return_char_limit": return_char_limit,
1957
- "pip_requirements": convert_and_respect_annotation_metadata(
1958
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
1959
- ),
1960
- },
1961
- request_options=request_options,
1962
- omit=OMIT,
1963
- )
1964
- try:
1965
- if 200 <= _response.status_code < 300:
1966
- return typing.cast(
1967
- Tool,
1968
- construct_type(
1969
- type_=Tool, # type: ignore
1970
- object_=_response.json(),
1971
- ),
1972
- )
1973
- if _response.status_code == 422:
1974
- raise UnprocessableEntityError(
1975
- typing.cast(
1976
- HttpValidationError,
1977
- construct_type(
1978
- type_=HttpValidationError, # type: ignore
1979
- object_=_response.json(),
1980
- ),
1981
- )
1982
- )
1983
- _response_json = _response.json()
1984
- except JSONDecodeError:
1985
- raise ApiError(status_code=_response.status_code, body=_response.text)
1986
- raise ApiError(status_code=_response.status_code, body=_response_json)
1987
-
1988
- async def upsert(
1989
- self,
1990
- *,
1991
- source_code: str,
1992
- description: typing.Optional[str] = OMIT,
1993
- tags: typing.Optional[typing.Sequence[str]] = OMIT,
1994
- source_type: typing.Optional[str] = OMIT,
1995
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
1996
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
1997
- return_char_limit: typing.Optional[int] = OMIT,
1998
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
1999
- request_options: typing.Optional[RequestOptions] = None,
2000
- ) -> Tool:
2001
- """
2002
- Create or update a tool
2003
-
2004
- Parameters
2005
- ----------
2006
- source_code : str
2007
- The source code of the function.
2008
-
2009
- description : typing.Optional[str]
2010
- The description of the tool.
2011
-
2012
- tags : typing.Optional[typing.Sequence[str]]
2013
- Metadata tags.
2014
-
2015
- source_type : typing.Optional[str]
2016
- The source type of the function.
2017
-
2018
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
2019
- The JSON schema of the function (auto-generated from source_code if not provided)
2020
-
2021
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
2022
- The args JSON schema of the function.
2023
-
2024
- return_char_limit : typing.Optional[int]
2025
- The maximum number of characters in the response.
2026
-
2027
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
2028
- Optional list of pip packages required by this tool.
2029
-
2030
- request_options : typing.Optional[RequestOptions]
2031
- Request-specific configuration.
2032
-
2033
- Returns
2034
- -------
2035
- Tool
2036
- Successful Response
2037
-
2038
- Examples
2039
- --------
2040
- import asyncio
2041
-
2042
- from letta_client import AsyncLetta
2043
-
2044
- client = AsyncLetta(
2045
- project="YOUR_PROJECT",
2046
- token="YOUR_TOKEN",
2047
- )
2048
-
2049
-
2050
- async def main() -> None:
2051
- await client.tools.upsert(
2052
- source_code="source_code",
2053
- )
2054
-
2055
-
2056
- asyncio.run(main())
2057
- """
2058
- _response = await self._client_wrapper.httpx_client.request(
2059
- "v1/tools/",
2060
- method="PUT",
2061
- json={
2062
- "description": description,
2063
- "tags": tags,
2064
- "source_code": source_code,
2065
- "source_type": source_type,
2066
- "json_schema": json_schema,
2067
- "args_json_schema": args_json_schema,
2068
- "return_char_limit": return_char_limit,
2069
- "pip_requirements": convert_and_respect_annotation_metadata(
2070
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
2071
- ),
2072
- },
2073
- request_options=request_options,
2074
- omit=OMIT,
2075
- )
2076
- try:
2077
- if 200 <= _response.status_code < 300:
2078
- return typing.cast(
2079
- Tool,
2080
- construct_type(
2081
- type_=Tool, # type: ignore
2082
- object_=_response.json(),
2083
- ),
2084
- )
2085
- if _response.status_code == 422:
2086
- raise UnprocessableEntityError(
2087
- typing.cast(
2088
- HttpValidationError,
2089
- construct_type(
2090
- type_=HttpValidationError, # type: ignore
2091
- object_=_response.json(),
2092
- ),
2093
- )
2094
- )
2095
- _response_json = _response.json()
2096
- except JSONDecodeError:
2097
- raise ApiError(status_code=_response.status_code, body=_response.text)
2098
- raise ApiError(status_code=_response.status_code, body=_response_json)
2099
-
2100
- async def upsert_base_tools(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Tool]:
2101
- """
2102
- Upsert base tools
2103
-
2104
- Parameters
2105
- ----------
2106
- request_options : typing.Optional[RequestOptions]
2107
- Request-specific configuration.
2108
-
2109
- Returns
2110
- -------
2111
- typing.List[Tool]
2112
- Successful Response
2113
-
2114
- Examples
2115
- --------
2116
- import asyncio
2117
-
2118
- from letta_client import AsyncLetta
2119
-
2120
- client = AsyncLetta(
2121
- project="YOUR_PROJECT",
2122
- token="YOUR_TOKEN",
2123
- )
2124
-
2125
-
2126
- async def main() -> None:
2127
- await client.tools.upsert_base_tools()
2128
-
2129
-
2130
- asyncio.run(main())
2131
- """
2132
- _response = await self._client_wrapper.httpx_client.request(
2133
- "v1/tools/add-base-tools",
2134
- method="POST",
2135
- request_options=request_options,
2136
- )
2137
- try:
2138
- if 200 <= _response.status_code < 300:
2139
- return typing.cast(
2140
- typing.List[Tool],
2141
- construct_type(
2142
- type_=typing.List[Tool], # type: ignore
2143
- object_=_response.json(),
2144
- ),
2145
- )
2146
- if _response.status_code == 422:
2147
- raise UnprocessableEntityError(
2148
- typing.cast(
2149
- HttpValidationError,
2150
- construct_type(
2151
- type_=HttpValidationError, # type: ignore
2152
- object_=_response.json(),
2153
- ),
2154
- )
2155
- )
2156
- _response_json = _response.json()
2157
- except JSONDecodeError:
2158
- raise ApiError(status_code=_response.status_code, body=_response.text)
2159
- raise ApiError(status_code=_response.status_code, body=_response_json)
2160
-
2161
- async def run_tool_from_source(
2162
- self,
2163
- *,
2164
- source_code: str,
2165
- args: typing.Dict[str, typing.Optional[typing.Any]],
2166
- env_vars: typing.Optional[typing.Dict[str, str]] = OMIT,
2167
- name: typing.Optional[str] = OMIT,
2168
- source_type: typing.Optional[str] = OMIT,
2169
- args_json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
2170
- json_schema: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
2171
- pip_requirements: typing.Optional[typing.Sequence[PipRequirement]] = OMIT,
2172
- request_options: typing.Optional[RequestOptions] = None,
2173
- ) -> ToolReturnMessage:
2174
- """
2175
- Attempt to build a tool from source, then run it on the provided arguments
2176
-
2177
- Parameters
2178
- ----------
2179
- source_code : str
2180
- The source code of the function.
2181
-
2182
- args : typing.Dict[str, typing.Optional[typing.Any]]
2183
- The arguments to pass to the tool.
2184
-
2185
- env_vars : typing.Optional[typing.Dict[str, str]]
2186
- The environment variables to pass to the tool.
2187
-
2188
- name : typing.Optional[str]
2189
- The name of the tool to run.
2190
-
2191
- source_type : typing.Optional[str]
2192
- The type of the source code.
2193
-
2194
- args_json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
2195
- The args JSON schema of the function.
2196
-
2197
- json_schema : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
2198
- The JSON schema of the function (auto-generated from source_code if not provided)
2199
-
2200
- pip_requirements : typing.Optional[typing.Sequence[PipRequirement]]
2201
- Optional list of pip packages required by this tool.
2202
-
2203
- request_options : typing.Optional[RequestOptions]
2204
- Request-specific configuration.
2205
-
2206
- Returns
2207
- -------
2208
- ToolReturnMessage
2209
- Successful Response
2210
-
2211
- Examples
2212
- --------
2213
- import asyncio
2214
-
2215
- from letta_client import AsyncLetta
2216
-
2217
- client = AsyncLetta(
2218
- project="YOUR_PROJECT",
2219
- token="YOUR_TOKEN",
2220
- )
2221
-
2222
-
2223
- async def main() -> None:
2224
- await client.tools.run_tool_from_source(
2225
- source_code="source_code",
2226
- args={"key": "value"},
2227
- )
2228
-
2229
-
2230
- asyncio.run(main())
2231
- """
2232
- _response = await self._client_wrapper.httpx_client.request(
2233
- "v1/tools/run",
2234
- method="POST",
2235
- json={
2236
- "source_code": source_code,
2237
- "args": args,
2238
- "env_vars": env_vars,
2239
- "name": name,
2240
- "source_type": source_type,
2241
- "args_json_schema": args_json_schema,
2242
- "json_schema": json_schema,
2243
- "pip_requirements": convert_and_respect_annotation_metadata(
2244
- object_=pip_requirements, annotation=typing.Sequence[PipRequirement], direction="write"
2245
- ),
2246
- },
2247
- headers={
2248
- "content-type": "application/json",
2249
- },
2250
- request_options=request_options,
2251
- omit=OMIT,
2252
- )
2253
- try:
2254
- if 200 <= _response.status_code < 300:
2255
- return typing.cast(
2256
- ToolReturnMessage,
2257
- construct_type(
2258
- type_=ToolReturnMessage, # type: ignore
2259
- object_=_response.json(),
2260
- ),
2261
- )
2262
- if _response.status_code == 422:
2263
- raise UnprocessableEntityError(
2264
- typing.cast(
2265
- HttpValidationError,
2266
- construct_type(
2267
- type_=HttpValidationError, # type: ignore
2268
- object_=_response.json(),
2269
- ),
2270
- )
2271
- )
2272
- _response_json = _response.json()
2273
- except JSONDecodeError:
2274
- raise ApiError(status_code=_response.status_code, body=_response.text)
2275
- raise ApiError(status_code=_response.status_code, body=_response_json)
2276
-
2277
- async def list_composio_apps(
2278
- self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
2279
- ) -> typing.List[AppModel]:
2280
- """
2281
- Get a list of all Composio apps
2282
-
2283
- Parameters
2284
- ----------
2285
- user_id : typing.Optional[str]
2286
-
2287
- request_options : typing.Optional[RequestOptions]
2288
- Request-specific configuration.
2289
-
2290
- Returns
2291
- -------
2292
- typing.List[AppModel]
2293
- Successful Response
2294
-
2295
- Examples
2296
- --------
2297
- import asyncio
2298
-
2299
- from letta_client import AsyncLetta
2300
-
2301
- client = AsyncLetta(
2302
- project="YOUR_PROJECT",
2303
- token="YOUR_TOKEN",
2304
- )
2305
-
2306
-
2307
- async def main() -> None:
2308
- await client.tools.list_composio_apps()
2309
-
2310
-
2311
- asyncio.run(main())
2312
- """
2313
- _response = await self._client_wrapper.httpx_client.request(
2314
- "v1/tools/composio/apps",
2315
- method="GET",
2316
- headers={
2317
- "user-id": str(user_id) if user_id is not None else None,
2318
- },
2319
- request_options=request_options,
2320
- )
2321
- try:
2322
- if 200 <= _response.status_code < 300:
2323
- return typing.cast(
2324
- typing.List[AppModel],
2325
- construct_type(
2326
- type_=typing.List[AppModel], # type: ignore
2327
- object_=_response.json(),
2328
- ),
2329
- )
2330
- if _response.status_code == 422:
2331
- raise UnprocessableEntityError(
2332
- typing.cast(
2333
- HttpValidationError,
2334
- construct_type(
2335
- type_=HttpValidationError, # type: ignore
2336
- object_=_response.json(),
2337
- ),
2338
- )
2339
- )
2340
- _response_json = _response.json()
2341
- except JSONDecodeError:
2342
- raise ApiError(status_code=_response.status_code, body=_response.text)
2343
- raise ApiError(status_code=_response.status_code, body=_response_json)
2344
-
2345
- async def list_composio_actions_by_app(
2346
- self, composio_app_name: str, *, request_options: typing.Optional[RequestOptions] = None
2347
- ) -> typing.List[ActionModel]:
2348
- """
2349
- Get a list of all Composio actions for a specific app
2350
-
2351
- Parameters
2352
- ----------
2353
- composio_app_name : str
2354
-
2355
- request_options : typing.Optional[RequestOptions]
2356
- Request-specific configuration.
2357
-
2358
- Returns
2359
- -------
2360
- typing.List[ActionModel]
2361
- Successful Response
2362
-
2363
- Examples
2364
- --------
2365
- import asyncio
2366
-
2367
- from letta_client import AsyncLetta
2368
-
2369
- client = AsyncLetta(
2370
- project="YOUR_PROJECT",
2371
- token="YOUR_TOKEN",
2372
- )
2373
-
2374
-
2375
- async def main() -> None:
2376
- await client.tools.list_composio_actions_by_app(
2377
- composio_app_name="composio_app_name",
2378
- )
2379
-
2380
-
2381
- asyncio.run(main())
2382
- """
2383
- _response = await self._client_wrapper.httpx_client.request(
2384
- f"v1/tools/composio/apps/{jsonable_encoder(composio_app_name)}/actions",
2385
- method="GET",
2386
- request_options=request_options,
2387
- )
2388
- try:
2389
- if 200 <= _response.status_code < 300:
2390
- return typing.cast(
2391
- typing.List[ActionModel],
2392
- construct_type(
2393
- type_=typing.List[ActionModel], # type: ignore
2394
- object_=_response.json(),
2395
- ),
2396
- )
2397
- if _response.status_code == 422:
2398
- raise UnprocessableEntityError(
2399
- typing.cast(
2400
- HttpValidationError,
2401
- construct_type(
2402
- type_=HttpValidationError, # type: ignore
2403
- object_=_response.json(),
2404
- ),
2405
- )
2406
- )
2407
- _response_json = _response.json()
2408
- except JSONDecodeError:
2409
- raise ApiError(status_code=_response.status_code, body=_response.text)
2410
- raise ApiError(status_code=_response.status_code, body=_response_json)
2411
-
2412
- async def add_composio_tool(
2413
- self, composio_action_name: str, *, request_options: typing.Optional[RequestOptions] = None
2414
- ) -> Tool:
2415
- """
2416
- Add a new Composio tool by action name (Composio refers to each tool as an `Action`)
2417
-
2418
- Parameters
2419
- ----------
2420
- composio_action_name : str
2421
-
2422
- request_options : typing.Optional[RequestOptions]
2423
- Request-specific configuration.
2424
-
2425
- Returns
2426
- -------
2427
- Tool
2428
- Successful Response
2429
-
2430
- Examples
2431
- --------
2432
- import asyncio
2433
-
2434
- from letta_client import AsyncLetta
2435
-
2436
- client = AsyncLetta(
2437
- project="YOUR_PROJECT",
2438
- token="YOUR_TOKEN",
2439
- )
2440
-
2441
-
2442
- async def main() -> None:
2443
- await client.tools.add_composio_tool(
2444
- composio_action_name="composio_action_name",
2445
- )
2446
-
2447
-
2448
- asyncio.run(main())
2449
- """
2450
- _response = await self._client_wrapper.httpx_client.request(
2451
- f"v1/tools/composio/{jsonable_encoder(composio_action_name)}",
2452
- method="POST",
2453
- request_options=request_options,
2454
- )
2455
- try:
2456
- if 200 <= _response.status_code < 300:
2457
- return typing.cast(
2458
- Tool,
2459
- construct_type(
2460
- type_=Tool, # type: ignore
2461
- object_=_response.json(),
2462
- ),
2463
- )
2464
- if _response.status_code == 422:
2465
- raise UnprocessableEntityError(
2466
- typing.cast(
2467
- HttpValidationError,
2468
- construct_type(
2469
- type_=HttpValidationError, # type: ignore
2470
- object_=_response.json(),
2471
- ),
2472
- )
2473
- )
2474
- _response_json = _response.json()
2475
- except JSONDecodeError:
2476
- raise ApiError(status_code=_response.status_code, body=_response.text)
2477
- raise ApiError(status_code=_response.status_code, body=_response_json)
2478
-
2479
- async def list_mcp_servers(
2480
- self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
2481
- ) -> typing.Dict[str, ListMcpServersResponseValue]:
2482
- """
2483
- Get a list of all configured MCP servers
2484
-
2485
- Parameters
2486
- ----------
2487
- user_id : typing.Optional[str]
2488
-
2489
- request_options : typing.Optional[RequestOptions]
2490
- Request-specific configuration.
2491
-
2492
- Returns
2493
- -------
2494
- typing.Dict[str, ListMcpServersResponseValue]
2495
- Successful Response
2496
-
2497
- Examples
2498
- --------
2499
- import asyncio
2500
-
2501
- from letta_client import AsyncLetta
2502
-
2503
- client = AsyncLetta(
2504
- project="YOUR_PROJECT",
2505
- token="YOUR_TOKEN",
2506
- )
2507
-
2508
-
2509
- async def main() -> None:
2510
- await client.tools.list_mcp_servers()
2511
-
2512
-
2513
- asyncio.run(main())
2514
- """
2515
- _response = await self._client_wrapper.httpx_client.request(
2516
- "v1/tools/mcp/servers",
2517
- method="GET",
2518
- headers={
2519
- "user-id": str(user_id) if user_id is not None else None,
2520
- },
2521
- request_options=request_options,
2522
- )
2523
- try:
2524
- if 200 <= _response.status_code < 300:
2525
- return typing.cast(
2526
- typing.Dict[str, ListMcpServersResponseValue],
2527
- construct_type(
2528
- type_=typing.Dict[str, ListMcpServersResponseValue], # type: ignore
2529
- object_=_response.json(),
2530
- ),
2531
- )
2532
- if _response.status_code == 422:
2533
- raise UnprocessableEntityError(
2534
- typing.cast(
2535
- HttpValidationError,
2536
- construct_type(
2537
- type_=HttpValidationError, # type: ignore
2538
- object_=_response.json(),
2539
- ),
2540
- )
2541
- )
2542
- _response_json = _response.json()
2543
- except JSONDecodeError:
2544
- raise ApiError(status_code=_response.status_code, body=_response.text)
2545
- raise ApiError(status_code=_response.status_code, body=_response_json)
2546
-
2547
- async def add_mcp_server(
2548
- self, *, request: AddMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
2549
- ) -> typing.List[AddMcpServerResponseItem]:
2550
- """
2551
- Add a new MCP server to the Letta MCP server config
2552
-
2553
- Parameters
2554
- ----------
2555
- request : AddMcpServerRequest
2556
-
2557
- request_options : typing.Optional[RequestOptions]
2558
- Request-specific configuration.
2559
-
2560
- Returns
2561
- -------
2562
- typing.List[AddMcpServerResponseItem]
2563
- Successful Response
2564
-
2565
- Examples
2566
- --------
2567
- import asyncio
2568
-
2569
- from letta_client import AsyncLetta, StdioServerConfig
2570
-
2571
- client = AsyncLetta(
2572
- project="YOUR_PROJECT",
2573
- token="YOUR_TOKEN",
2574
- )
2575
-
2576
-
2577
- async def main() -> None:
2578
- await client.tools.add_mcp_server(
2579
- request=StdioServerConfig(
2580
- server_name="server_name",
2581
- command="command",
2582
- args=["args"],
2583
- ),
2584
- )
2585
-
2586
-
2587
- asyncio.run(main())
2588
- """
2589
- _response = await self._client_wrapper.httpx_client.request(
2590
- "v1/tools/mcp/servers",
2591
- method="PUT",
2592
- json=convert_and_respect_annotation_metadata(
2593
- object_=request, annotation=AddMcpServerRequest, direction="write"
2594
- ),
2595
- request_options=request_options,
2596
- omit=OMIT,
2597
- )
2598
- try:
2599
- if 200 <= _response.status_code < 300:
2600
- return typing.cast(
2601
- typing.List[AddMcpServerResponseItem],
2602
- construct_type(
2603
- type_=typing.List[AddMcpServerResponseItem], # type: ignore
2604
- object_=_response.json(),
2605
- ),
2606
- )
2607
- if _response.status_code == 422:
2608
- raise UnprocessableEntityError(
2609
- typing.cast(
2610
- HttpValidationError,
2611
- construct_type(
2612
- type_=HttpValidationError, # type: ignore
2613
- object_=_response.json(),
2614
- ),
2615
- )
2616
- )
2617
- _response_json = _response.json()
2618
- except JSONDecodeError:
2619
- raise ApiError(status_code=_response.status_code, body=_response.text)
2620
- raise ApiError(status_code=_response.status_code, body=_response_json)
2621
-
2622
- async def list_mcp_tools_by_server(
2623
- self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
2624
- ) -> typing.List[McpTool]:
2625
- """
2626
- Get a list of all tools for a specific MCP server
2627
-
2628
- Parameters
2629
- ----------
2630
- mcp_server_name : str
2631
-
2632
- request_options : typing.Optional[RequestOptions]
2633
- Request-specific configuration.
2634
-
2635
- Returns
2636
- -------
2637
- typing.List[McpTool]
2638
- Successful Response
2639
-
2640
- Examples
2641
- --------
2642
- import asyncio
2643
-
2644
- from letta_client import AsyncLetta
2645
-
2646
- client = AsyncLetta(
2647
- project="YOUR_PROJECT",
2648
- token="YOUR_TOKEN",
2649
- )
2650
-
2651
-
2652
- async def main() -> None:
2653
- await client.tools.list_mcp_tools_by_server(
2654
- mcp_server_name="mcp_server_name",
2655
- )
2656
-
2657
-
2658
- asyncio.run(main())
2659
- """
2660
- _response = await self._client_wrapper.httpx_client.request(
2661
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}/tools",
2662
- method="GET",
2663
- request_options=request_options,
2664
- )
2665
- try:
2666
- if 200 <= _response.status_code < 300:
2667
- return typing.cast(
2668
- typing.List[McpTool],
2669
- construct_type(
2670
- type_=typing.List[McpTool], # type: ignore
2671
- object_=_response.json(),
2672
- ),
2673
- )
2674
- if _response.status_code == 422:
2675
- raise UnprocessableEntityError(
2676
- typing.cast(
2677
- HttpValidationError,
2678
- construct_type(
2679
- type_=HttpValidationError, # type: ignore
2680
- object_=_response.json(),
2681
- ),
2682
- )
2683
- )
2684
- _response_json = _response.json()
2685
- except JSONDecodeError:
2686
- raise ApiError(status_code=_response.status_code, body=_response.text)
2687
- raise ApiError(status_code=_response.status_code, body=_response_json)
2688
-
2689
- async def add_mcp_tool(
2690
- self, mcp_server_name: str, mcp_tool_name: str, *, request_options: typing.Optional[RequestOptions] = None
2691
- ) -> Tool:
2692
- """
2693
- Register a new MCP tool as a Letta server by MCP server + tool name
2694
-
2695
- Parameters
2696
- ----------
2697
- mcp_server_name : str
2698
-
2699
- mcp_tool_name : str
2700
-
2701
- request_options : typing.Optional[RequestOptions]
2702
- Request-specific configuration.
2703
-
2704
- Returns
2705
- -------
2706
- Tool
2707
- Successful Response
2708
-
2709
- Examples
2710
- --------
2711
- import asyncio
2712
-
2713
- from letta_client import AsyncLetta
2714
-
2715
- client = AsyncLetta(
2716
- project="YOUR_PROJECT",
2717
- token="YOUR_TOKEN",
2718
- )
2719
-
2720
-
2721
- async def main() -> None:
2722
- await client.tools.add_mcp_tool(
2723
- mcp_server_name="mcp_server_name",
2724
- mcp_tool_name="mcp_tool_name",
2725
- )
2726
-
2727
-
2728
- asyncio.run(main())
2729
- """
2730
- _response = await self._client_wrapper.httpx_client.request(
2731
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}/{jsonable_encoder(mcp_tool_name)}",
2732
- method="POST",
2733
- request_options=request_options,
2734
- )
2735
- try:
2736
- if 200 <= _response.status_code < 300:
2737
- return typing.cast(
2738
- Tool,
2739
- construct_type(
2740
- type_=Tool, # type: ignore
2741
- object_=_response.json(),
2742
- ),
2743
- )
2744
- if _response.status_code == 422:
2745
- raise UnprocessableEntityError(
2746
- typing.cast(
2747
- HttpValidationError,
2748
- construct_type(
2749
- type_=HttpValidationError, # type: ignore
2750
- object_=_response.json(),
2751
- ),
2752
- )
2753
- )
2754
- _response_json = _response.json()
2755
- except JSONDecodeError:
2756
- raise ApiError(status_code=_response.status_code, body=_response.text)
2757
- raise ApiError(status_code=_response.status_code, body=_response_json)
2758
-
2759
- async def delete_mcp_server(
2760
- self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
2761
- ) -> typing.List[DeleteMcpServerResponseItem]:
2762
- """
2763
- Add a new MCP server to the Letta MCP server config
2764
-
2765
- Parameters
2766
- ----------
2767
- mcp_server_name : str
2768
-
2769
- request_options : typing.Optional[RequestOptions]
2770
- Request-specific configuration.
2771
-
2772
- Returns
2773
- -------
2774
- typing.List[DeleteMcpServerResponseItem]
2775
- Successful Response
2776
-
2777
- Examples
2778
- --------
2779
- import asyncio
2780
-
2781
- from letta_client import AsyncLetta
2782
-
2783
- client = AsyncLetta(
2784
- project="YOUR_PROJECT",
2785
- token="YOUR_TOKEN",
2786
- )
2787
-
2788
-
2789
- async def main() -> None:
2790
- await client.tools.delete_mcp_server(
2791
- mcp_server_name="mcp_server_name",
2792
- )
2793
-
2794
-
2795
- asyncio.run(main())
2796
- """
2797
- _response = await self._client_wrapper.httpx_client.request(
2798
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}",
2799
- method="DELETE",
2800
- request_options=request_options,
2801
- )
2802
- try:
2803
- if 200 <= _response.status_code < 300:
2804
- return typing.cast(
2805
- typing.List[DeleteMcpServerResponseItem],
2806
- construct_type(
2807
- type_=typing.List[DeleteMcpServerResponseItem], # type: ignore
2808
- object_=_response.json(),
2809
- ),
2810
- )
2811
- if _response.status_code == 422:
2812
- raise UnprocessableEntityError(
2813
- typing.cast(
2814
- HttpValidationError,
2815
- construct_type(
2816
- type_=HttpValidationError, # type: ignore
2817
- object_=_response.json(),
2818
- ),
2819
- )
2820
- )
2821
- _response_json = _response.json()
2822
- except JSONDecodeError:
2823
- raise ApiError(status_code=_response.status_code, body=_response.text)
2824
- raise ApiError(status_code=_response.status_code, body=_response_json)
2825
-
2826
- async def update_mcp_server(
2827
- self,
2828
- mcp_server_name: str,
2829
- *,
2830
- request: UpdateMcpServerRequest,
2831
- request_options: typing.Optional[RequestOptions] = None,
2832
- ) -> UpdateMcpServerResponse:
2833
- """
2834
- Update an existing MCP server configuration
2835
-
2836
- Parameters
2837
- ----------
2838
- mcp_server_name : str
2839
-
2840
- request : UpdateMcpServerRequest
2841
-
2842
- request_options : typing.Optional[RequestOptions]
2843
- Request-specific configuration.
2844
-
2845
- Returns
2846
- -------
2847
- UpdateMcpServerResponse
2848
- Successful Response
2849
-
2850
- Examples
2851
- --------
2852
- import asyncio
2853
-
2854
- from letta_client import AsyncLetta, UpdateStdioMcpServer
2855
-
2856
- client = AsyncLetta(
2857
- project="YOUR_PROJECT",
2858
- token="YOUR_TOKEN",
2859
- )
2860
-
2861
-
2862
- async def main() -> None:
2863
- await client.tools.update_mcp_server(
2864
- mcp_server_name="mcp_server_name",
2865
- request=UpdateStdioMcpServer(),
2866
- )
2867
-
2868
-
2869
- asyncio.run(main())
2870
- """
2871
- _response = await self._client_wrapper.httpx_client.request(
2872
- f"v1/tools/mcp/servers/{jsonable_encoder(mcp_server_name)}",
2873
- method="PATCH",
2874
- json=convert_and_respect_annotation_metadata(
2875
- object_=request, annotation=UpdateMcpServerRequest, direction="write"
2876
- ),
2877
- request_options=request_options,
2878
- omit=OMIT,
2879
- )
2880
- try:
2881
- if 200 <= _response.status_code < 300:
2882
- return typing.cast(
2883
- UpdateMcpServerResponse,
2884
- construct_type(
2885
- type_=UpdateMcpServerResponse, # type: ignore
2886
- object_=_response.json(),
2887
- ),
2888
- )
2889
- if _response.status_code == 422:
2890
- raise UnprocessableEntityError(
2891
- typing.cast(
2892
- HttpValidationError,
2893
- construct_type(
2894
- type_=HttpValidationError, # type: ignore
2895
- object_=_response.json(),
2896
- ),
2897
- )
2898
- )
2899
- _response_json = _response.json()
2900
- except JSONDecodeError:
2901
- raise ApiError(status_code=_response.status_code, body=_response.text)
2902
- raise ApiError(status_code=_response.status_code, body=_response_json)
2903
-
2904
- async def test_mcp_server(
2905
- self, *, request: TestMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
2906
- ) -> typing.Optional[typing.Any]:
2907
- """
2908
- Test connection to an MCP server without adding it.
2909
- Returns the list of available tools if successful.
2910
-
2911
- Parameters
2912
- ----------
2913
- request : TestMcpServerRequest
2914
-
2915
- request_options : typing.Optional[RequestOptions]
2916
- Request-specific configuration.
2917
-
2918
- Returns
2919
- -------
2920
- typing.Optional[typing.Any]
2921
- Successful Response
2922
-
2923
- Examples
2924
- --------
2925
- import asyncio
2926
-
2927
- from letta_client import AsyncLetta, StdioServerConfig
2928
-
2929
- client = AsyncLetta(
2930
- project="YOUR_PROJECT",
2931
- token="YOUR_TOKEN",
2932
- )
2933
-
2934
-
2935
- async def main() -> None:
2936
- await client.tools.test_mcp_server(
2937
- request=StdioServerConfig(
2938
- server_name="server_name",
2939
- command="command",
2940
- args=["args"],
2941
- ),
2942
- )
2943
-
2944
-
2945
- asyncio.run(main())
2946
- """
2947
- _response = await self._client_wrapper.httpx_client.request(
2948
- "v1/tools/mcp/servers/test",
2949
- method="POST",
2950
- json=convert_and_respect_annotation_metadata(
2951
- object_=request, annotation=TestMcpServerRequest, direction="write"
2952
- ),
2953
- request_options=request_options,
2954
- omit=OMIT,
2955
- )
2956
- try:
2957
- if 200 <= _response.status_code < 300:
2958
- return typing.cast(
2959
- typing.Optional[typing.Any],
2960
- construct_type(
2961
- type_=typing.Optional[typing.Any], # type: ignore
2962
- object_=_response.json(),
2963
- ),
2964
- )
2965
- if _response.status_code == 422:
2966
- raise UnprocessableEntityError(
2967
- typing.cast(
2968
- HttpValidationError,
2969
- construct_type(
2970
- type_=HttpValidationError, # type: ignore
2971
- object_=_response.json(),
2972
- ),
2973
- )
2974
- )
2975
- _response_json = _response.json()
2976
- except JSONDecodeError:
2977
- raise ApiError(status_code=_response.status_code, body=_response.text)
2978
- raise ApiError(status_code=_response.status_code, body=_response_json)
2979
-
2980
- async def connect_mcp_server(
2981
- self, *, request: ConnectMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
2982
- ) -> typing.AsyncIterator[StreamingResponse]:
2983
- """
2984
- Connect to an MCP server with support for OAuth via SSE.
2985
- Returns a stream of events handling authorization state and exchange if OAuth is required.
2986
-
2987
- Parameters
2988
- ----------
2989
- request : ConnectMcpServerRequest
2990
-
2991
- request_options : typing.Optional[RequestOptions]
2992
- Request-specific configuration.
2993
-
2994
- Yields
2995
- ------
2996
- typing.AsyncIterator[StreamingResponse]
2997
- Successful response
2998
-
2999
- Examples
3000
- --------
3001
- import asyncio
3002
-
3003
- from letta_client import AsyncLetta, StdioServerConfig
3004
-
3005
- client = AsyncLetta(
3006
- project="YOUR_PROJECT",
3007
- token="YOUR_TOKEN",
3008
- )
3009
-
3010
-
3011
- async def main() -> None:
3012
- response = await client.tools.connect_mcp_server(
3013
- request=StdioServerConfig(
3014
- server_name="server_name",
3015
- command="command",
3016
- args=["args"],
3017
- ),
3018
- )
3019
- async for chunk in response:
3020
- yield chunk
3021
-
3022
-
3023
- asyncio.run(main())
3024
- """
3025
- async with self._client_wrapper.httpx_client.stream(
3026
- "v1/tools/mcp/servers/connect",
3027
- method="POST",
3028
- json=convert_and_respect_annotation_metadata(
3029
- object_=request, annotation=ConnectMcpServerRequest, direction="write"
3030
- ),
3031
- request_options=request_options,
3032
- omit=OMIT,
3033
- ) as _response:
3034
- try:
3035
- if 200 <= _response.status_code < 300:
3036
- _event_source = httpx_sse.EventSource(_response)
3037
- async for _sse in _event_source.aiter_sse():
3038
- try:
3039
- yield typing.cast(
3040
- StreamingResponse,
3041
- construct_type(
3042
- type_=StreamingResponse, # type: ignore
3043
- object_=json.loads(_sse.data),
3044
- ),
3045
- )
3046
- except:
3047
- pass
3048
- return
3049
- await _response.aread()
3050
- if _response.status_code == 422:
3051
- raise UnprocessableEntityError(
3052
- typing.cast(
3053
- HttpValidationError,
3054
- construct_type(
3055
- type_=HttpValidationError, # type: ignore
3056
- object_=_response.json(),
3057
- ),
3058
- )
3059
- )
3060
- _response_json = _response.json()
3061
- except JSONDecodeError:
3062
- raise ApiError(status_code=_response.status_code, body=_response.text)
3063
- raise ApiError(status_code=_response.status_code, body=_response_json)