letta-client 0.1.233__py3-none-any.whl → 0.1.234__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (438) hide show
  1. letta_client/__init__.py +2 -0
  2. letta_client/agents/__init__.py +2 -0
  3. letta_client/agents/blocks/__init__.py +2 -0
  4. letta_client/agents/blocks/client.py +72 -313
  5. letta_client/agents/blocks/raw_client.py +654 -0
  6. letta_client/agents/client.py +329 -869
  7. letta_client/agents/context/__init__.py +2 -0
  8. letta_client/agents/context/client.py +31 -66
  9. letta_client/agents/context/raw_client.py +122 -0
  10. letta_client/agents/core_memory/__init__.py +2 -0
  11. letta_client/agents/core_memory/client.py +31 -66
  12. letta_client/agents/core_memory/raw_client.py +124 -0
  13. letta_client/agents/files/__init__.py +2 -0
  14. letta_client/agents/files/client.py +39 -178
  15. letta_client/agents/files/raw_client.py +349 -0
  16. letta_client/agents/folders/__init__.py +2 -0
  17. letta_client/agents/folders/client.py +39 -178
  18. letta_client/agents/folders/raw_client.py +327 -0
  19. letta_client/agents/groups/__init__.py +2 -0
  20. letta_client/agents/groups/client.py +31 -72
  21. letta_client/agents/groups/raw_client.py +142 -0
  22. letta_client/agents/memory_variables/__init__.py +2 -0
  23. letta_client/agents/memory_variables/client.py +31 -65
  24. letta_client/agents/memory_variables/raw_client.py +125 -0
  25. letta_client/agents/memory_variables/types/__init__.py +2 -0
  26. letta_client/agents/memory_variables/types/memory_variables_list_response.py +3 -2
  27. letta_client/agents/messages/__init__.py +2 -0
  28. letta_client/agents/messages/client.py +150 -589
  29. letta_client/agents/messages/raw_client.py +1384 -0
  30. letta_client/agents/messages/types/__init__.py +2 -0
  31. letta_client/agents/messages/types/letta_streaming_response.py +6 -5
  32. letta_client/agents/messages/types/messages_modify_request.py +3 -2
  33. letta_client/agents/messages/types/messages_modify_response.py +5 -4
  34. letta_client/agents/messages/types/messages_preview_raw_payload_request.py +1 -0
  35. letta_client/agents/passages/__init__.py +2 -0
  36. letta_client/agents/passages/client.py +89 -301
  37. letta_client/agents/passages/raw_client.py +678 -0
  38. letta_client/agents/raw_client.py +2068 -0
  39. letta_client/agents/sources/__init__.py +2 -0
  40. letta_client/agents/sources/client.py +39 -178
  41. letta_client/agents/sources/raw_client.py +327 -0
  42. letta_client/agents/templates/__init__.py +2 -0
  43. letta_client/agents/templates/client.py +57 -276
  44. letta_client/agents/templates/raw_client.py +505 -0
  45. letta_client/agents/templates/types/__init__.py +2 -0
  46. letta_client/agents/templates/types/templates_create_response.py +5 -4
  47. letta_client/agents/templates/types/templates_migrate_response.py +3 -2
  48. letta_client/agents/tools/__init__.py +2 -0
  49. letta_client/agents/tools/client.py +40 -179
  50. letta_client/agents/tools/raw_client.py +327 -0
  51. letta_client/agents/types/__init__.py +2 -0
  52. letta_client/agents/types/agents_search_request_search_item.py +4 -3
  53. letta_client/agents/types/agents_search_request_search_item_field.py +4 -3
  54. letta_client/agents/types/agents_search_request_search_item_one.py +4 -3
  55. letta_client/agents/types/agents_search_request_search_item_three.py +3 -2
  56. letta_client/agents/types/agents_search_request_search_item_two.py +3 -2
  57. letta_client/agents/types/agents_search_request_search_item_zero.py +3 -2
  58. letta_client/agents/types/agents_search_response.py +5 -4
  59. letta_client/agents/types/create_agent_request_response_format.py +1 -0
  60. letta_client/agents/types/create_agent_request_tool_rules_item.py +4 -3
  61. letta_client/agents/types/update_agent_response_format.py +1 -0
  62. letta_client/agents/types/update_agent_tool_rules_item.py +4 -3
  63. letta_client/base_client.py +41 -49
  64. letta_client/batches/__init__.py +2 -0
  65. letta_client/batches/client.py +45 -253
  66. letta_client/batches/raw_client.py +457 -0
  67. letta_client/blocks/__init__.py +2 -0
  68. letta_client/blocks/agents/__init__.py +2 -0
  69. letta_client/blocks/agents/client.py +33 -70
  70. letta_client/blocks/agents/raw_client.py +144 -0
  71. letta_client/blocks/client.py +126 -424
  72. letta_client/blocks/raw_client.py +973 -0
  73. letta_client/client_side_access_tokens/__init__.py +2 -0
  74. letta_client/client_side_access_tokens/client.py +45 -216
  75. letta_client/client_side_access_tokens/raw_client.py +435 -0
  76. letta_client/client_side_access_tokens/types/__init__.py +2 -0
  77. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_request_policy_item.py +4 -3
  78. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response.py +6 -5
  79. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy.py +4 -3
  80. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy_data_item.py +4 -3
  81. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response.py +6 -5
  82. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item.py +6 -5
  83. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy.py +4 -3
  84. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy_data_item.py +4 -3
  85. letta_client/core/__init__.py +5 -0
  86. letta_client/core/api_error.py +13 -5
  87. letta_client/core/client_wrapper.py +14 -5
  88. letta_client/core/force_multipart.py +16 -0
  89. letta_client/core/http_client.py +70 -26
  90. letta_client/core/http_response.py +55 -0
  91. letta_client/core/jsonable_encoder.py +0 -1
  92. letta_client/core/pydantic_utilities.py +70 -111
  93. letta_client/core/serialization.py +7 -3
  94. letta_client/core/unchecked_base_model.py +40 -4
  95. letta_client/embedding_models/__init__.py +2 -0
  96. letta_client/embedding_models/client.py +31 -65
  97. letta_client/embedding_models/raw_client.py +117 -0
  98. letta_client/errors/__init__.py +2 -0
  99. letta_client/errors/bad_request_error.py +4 -3
  100. letta_client/errors/conflict_error.py +4 -2
  101. letta_client/errors/internal_server_error.py +4 -3
  102. letta_client/errors/not_found_error.py +4 -3
  103. letta_client/errors/payment_required_error.py +4 -2
  104. letta_client/errors/unprocessable_entity_error.py +4 -2
  105. letta_client/folders/__init__.py +2 -0
  106. letta_client/folders/client.py +100 -564
  107. letta_client/folders/files/__init__.py +2 -0
  108. letta_client/folders/files/client.py +44 -189
  109. letta_client/folders/files/raw_client.py +391 -0
  110. letta_client/folders/passages/__init__.py +2 -0
  111. letta_client/folders/passages/client.py +33 -74
  112. letta_client/folders/passages/raw_client.py +162 -0
  113. letta_client/folders/raw_client.py +1084 -0
  114. letta_client/groups/__init__.py +2 -0
  115. letta_client/groups/client.py +87 -406
  116. letta_client/groups/messages/__init__.py +2 -0
  117. letta_client/groups/messages/client.py +110 -371
  118. letta_client/groups/messages/raw_client.py +881 -0
  119. letta_client/groups/messages/types/__init__.py +2 -0
  120. letta_client/groups/messages/types/letta_streaming_response.py +5 -4
  121. letta_client/groups/messages/types/messages_modify_request.py +3 -2
  122. letta_client/groups/messages/types/messages_modify_response.py +5 -4
  123. letta_client/groups/raw_client.py +807 -0
  124. letta_client/groups/types/__init__.py +2 -0
  125. letta_client/groups/types/group_create_manager_config.py +1 -0
  126. letta_client/groups/types/group_update_manager_config.py +1 -0
  127. letta_client/health/__init__.py +2 -0
  128. letta_client/health/client.py +31 -43
  129. letta_client/health/raw_client.py +85 -0
  130. letta_client/identities/__init__.py +2 -0
  131. letta_client/identities/client.py +115 -498
  132. letta_client/identities/properties/__init__.py +2 -0
  133. letta_client/identities/properties/client.py +32 -76
  134. letta_client/identities/properties/raw_client.py +152 -0
  135. letta_client/identities/raw_client.py +1010 -0
  136. letta_client/jobs/__init__.py +2 -0
  137. letta_client/jobs/client.py +67 -310
  138. letta_client/jobs/raw_client.py +624 -0
  139. letta_client/messages/__init__.py +2 -0
  140. letta_client/messages/client.py +41 -74
  141. letta_client/messages/raw_client.py +186 -0
  142. letta_client/models/__init__.py +2 -0
  143. letta_client/models/client.py +39 -73
  144. letta_client/models/raw_client.py +151 -0
  145. letta_client/projects/__init__.py +2 -0
  146. letta_client/projects/client.py +31 -53
  147. letta_client/projects/raw_client.py +125 -0
  148. letta_client/projects/types/__init__.py +2 -0
  149. letta_client/projects/types/projects_list_response.py +5 -4
  150. letta_client/projects/types/projects_list_response_projects_item.py +3 -2
  151. letta_client/providers/__init__.py +2 -0
  152. letta_client/providers/client.py +62 -335
  153. letta_client/providers/raw_client.py +664 -0
  154. letta_client/runs/__init__.py +2 -0
  155. letta_client/runs/client.py +56 -258
  156. letta_client/runs/messages/__init__.py +2 -0
  157. letta_client/runs/messages/client.py +34 -79
  158. letta_client/runs/messages/raw_client.py +209 -0
  159. letta_client/runs/raw_client.py +440 -0
  160. letta_client/runs/steps/__init__.py +2 -0
  161. letta_client/runs/steps/client.py +33 -76
  162. letta_client/runs/steps/raw_client.py +192 -0
  163. letta_client/runs/usage/__init__.py +2 -0
  164. letta_client/runs/usage/client.py +31 -66
  165. letta_client/runs/usage/raw_client.py +122 -0
  166. letta_client/sources/__init__.py +2 -0
  167. letta_client/sources/client.py +107 -625
  168. letta_client/sources/files/__init__.py +2 -0
  169. letta_client/sources/files/client.py +44 -189
  170. letta_client/sources/files/raw_client.py +391 -0
  171. letta_client/sources/passages/__init__.py +2 -0
  172. letta_client/sources/passages/client.py +33 -74
  173. letta_client/sources/passages/raw_client.py +162 -0
  174. letta_client/sources/raw_client.py +1209 -0
  175. letta_client/steps/__init__.py +2 -0
  176. letta_client/steps/client.py +65 -153
  177. letta_client/steps/feedback/__init__.py +2 -0
  178. letta_client/steps/feedback/client.py +32 -73
  179. letta_client/steps/feedback/raw_client.py +141 -0
  180. letta_client/steps/raw_client.py +355 -0
  181. letta_client/steps/types/__init__.py +2 -0
  182. letta_client/tags/__init__.py +2 -0
  183. letta_client/tags/client.py +33 -73
  184. letta_client/tags/raw_client.py +148 -0
  185. letta_client/telemetry/__init__.py +2 -0
  186. letta_client/telemetry/client.py +31 -66
  187. letta_client/telemetry/raw_client.py +118 -0
  188. letta_client/templates/__init__.py +2 -0
  189. letta_client/templates/agents/__init__.py +2 -0
  190. letta_client/templates/agents/client.py +48 -96
  191. letta_client/templates/agents/raw_client.py +227 -0
  192. letta_client/templates/agents/types/__init__.py +2 -0
  193. letta_client/templates/agents/types/agents_create_request_initial_message_sequence_item.py +4 -3
  194. letta_client/templates/agents/types/agents_create_response.py +4 -3
  195. letta_client/templates/client.py +36 -57
  196. letta_client/templates/raw_client.py +133 -0
  197. letta_client/templates/types/__init__.py +2 -0
  198. letta_client/templates/types/templates_list_response.py +5 -4
  199. letta_client/templates/types/templates_list_response_templates_item.py +3 -2
  200. letta_client/tools/__init__.py +2 -0
  201. letta_client/tools/client.py +195 -1322
  202. letta_client/tools/raw_client.py +2565 -0
  203. letta_client/tools/types/__init__.py +2 -0
  204. letta_client/tools/types/add_mcp_server_request.py +2 -1
  205. letta_client/tools/types/add_mcp_server_response_item.py +2 -1
  206. letta_client/tools/types/connect_mcp_server_request.py +2 -1
  207. letta_client/tools/types/delete_mcp_server_response_item.py +2 -1
  208. letta_client/tools/types/list_mcp_servers_response_value.py +1 -0
  209. letta_client/tools/types/streaming_response.py +5 -4
  210. letta_client/tools/types/test_mcp_server_request.py +2 -1
  211. letta_client/tools/types/update_mcp_server_request.py +2 -1
  212. letta_client/tools/types/update_mcp_server_response.py +2 -1
  213. letta_client/types/__init__.py +2 -0
  214. letta_client/types/action_model.py +6 -5
  215. letta_client/types/action_parameters_model.py +3 -2
  216. letta_client/types/action_response_model.py +3 -2
  217. letta_client/types/agent_environment_variable.py +3 -2
  218. letta_client/types/agent_schema.py +7 -6
  219. letta_client/types/agent_schema_tool_rules_item.py +2 -1
  220. letta_client/types/agent_state.py +9 -8
  221. letta_client/types/agent_state_response_format.py +1 -0
  222. letta_client/types/agent_state_tool_rules_item.py +4 -3
  223. letta_client/types/app_auth_scheme.py +4 -3
  224. letta_client/types/app_model.py +5 -4
  225. letta_client/types/assistant_message.py +3 -2
  226. letta_client/types/assistant_message_content.py +1 -0
  227. letta_client/types/audio.py +3 -2
  228. letta_client/types/auth_request.py +2 -1
  229. letta_client/types/auth_response.py +5 -4
  230. letta_client/types/auth_scheme_field.py +3 -2
  231. letta_client/types/bad_request_error_body.py +3 -2
  232. letta_client/types/base_64_image.py +2 -1
  233. letta_client/types/base_tool_rule_schema.py +3 -2
  234. letta_client/types/batch_job.py +4 -3
  235. letta_client/types/block.py +3 -2
  236. letta_client/types/block_update.py +2 -1
  237. letta_client/types/chat_completion_assistant_message_param.py +5 -4
  238. letta_client/types/chat_completion_assistant_message_param_content.py +1 -0
  239. letta_client/types/chat_completion_assistant_message_param_content_item.py +2 -1
  240. letta_client/types/chat_completion_audio_param.py +4 -3
  241. letta_client/types/chat_completion_content_part_image_param.py +4 -3
  242. letta_client/types/chat_completion_content_part_input_audio_param.py +4 -3
  243. letta_client/types/chat_completion_content_part_refusal_param.py +3 -2
  244. letta_client/types/chat_completion_content_part_text_param.py +3 -2
  245. letta_client/types/chat_completion_developer_message_param.py +4 -3
  246. letta_client/types/chat_completion_developer_message_param_content.py +1 -0
  247. letta_client/types/chat_completion_function_call_option_param.py +3 -2
  248. letta_client/types/chat_completion_function_message_param.py +3 -2
  249. letta_client/types/chat_completion_message_tool_call.py +4 -3
  250. letta_client/types/chat_completion_message_tool_call_param.py +4 -3
  251. letta_client/types/chat_completion_named_tool_choice_param.py +4 -3
  252. letta_client/types/chat_completion_prediction_content_param.py +4 -3
  253. letta_client/types/chat_completion_prediction_content_param_content.py +1 -0
  254. letta_client/types/chat_completion_stream_options_param.py +3 -2
  255. letta_client/types/chat_completion_system_message_param.py +4 -3
  256. letta_client/types/chat_completion_system_message_param_content.py +1 -0
  257. letta_client/types/chat_completion_tool_message_param.py +4 -3
  258. letta_client/types/chat_completion_tool_message_param_content.py +1 -0
  259. letta_client/types/chat_completion_tool_param.py +4 -3
  260. letta_client/types/chat_completion_user_message_param.py +4 -3
  261. letta_client/types/chat_completion_user_message_param_content.py +1 -0
  262. letta_client/types/chat_completion_user_message_param_content_item.py +2 -1
  263. letta_client/types/child_tool_rule.py +3 -2
  264. letta_client/types/child_tool_rule_schema.py +3 -2
  265. letta_client/types/code_input.py +3 -2
  266. letta_client/types/completion_create_params_non_streaming.py +10 -9
  267. letta_client/types/completion_create_params_non_streaming_function_call.py +1 -0
  268. letta_client/types/completion_create_params_non_streaming_messages_item.py +4 -3
  269. letta_client/types/completion_create_params_non_streaming_response_format.py +3 -2
  270. letta_client/types/completion_create_params_non_streaming_tool_choice.py +1 -0
  271. letta_client/types/completion_create_params_streaming.py +10 -9
  272. letta_client/types/completion_create_params_streaming_function_call.py +1 -0
  273. letta_client/types/completion_create_params_streaming_messages_item.py +4 -3
  274. letta_client/types/completion_create_params_streaming_response_format.py +3 -2
  275. letta_client/types/completion_create_params_streaming_tool_choice.py +1 -0
  276. letta_client/types/conditional_tool_rule.py +3 -2
  277. letta_client/types/conditional_tool_rule_schema.py +3 -2
  278. letta_client/types/conflict_error_body.py +3 -2
  279. letta_client/types/context_window_overview.py +4 -3
  280. letta_client/types/continue_tool_rule.py +3 -2
  281. letta_client/types/core_memory_block_schema.py +4 -3
  282. letta_client/types/create_block.py +3 -2
  283. letta_client/types/dynamic_manager.py +2 -1
  284. letta_client/types/dynamic_manager_update.py +2 -1
  285. letta_client/types/e_2_b_sandbox_config.py +2 -1
  286. letta_client/types/embedding_config.py +4 -3
  287. letta_client/types/file.py +4 -3
  288. letta_client/types/file_block.py +4 -3
  289. letta_client/types/file_file.py +3 -2
  290. letta_client/types/file_metadata.py +5 -4
  291. letta_client/types/file_stats.py +3 -2
  292. letta_client/types/folder.py +5 -4
  293. letta_client/types/function_call.py +3 -2
  294. letta_client/types/function_definition_input.py +3 -2
  295. letta_client/types/function_definition_output.py +3 -2
  296. letta_client/types/function_output.py +3 -2
  297. letta_client/types/function_tool.py +4 -3
  298. letta_client/types/generate_tool_input.py +3 -2
  299. letta_client/types/generate_tool_output.py +4 -3
  300. letta_client/types/group.py +4 -3
  301. letta_client/types/health.py +3 -2
  302. letta_client/types/hidden_reasoning_message.py +4 -3
  303. letta_client/types/http_validation_error.py +4 -3
  304. letta_client/types/identity.py +4 -3
  305. letta_client/types/identity_property.py +5 -4
  306. letta_client/types/image_content.py +3 -2
  307. letta_client/types/image_content_source.py +1 -0
  308. letta_client/types/image_url.py +4 -3
  309. letta_client/types/init_tool_rule.py +3 -2
  310. letta_client/types/input_audio.py +4 -3
  311. letta_client/types/internal_server_error_body.py +3 -2
  312. letta_client/types/job.py +4 -3
  313. letta_client/types/json_object_response_format.py +3 -2
  314. letta_client/types/json_schema.py +4 -3
  315. letta_client/types/json_schema_response_format.py +2 -1
  316. letta_client/types/letta_batch_messages.py +4 -3
  317. letta_client/types/letta_batch_request.py +4 -3
  318. letta_client/types/letta_image.py +2 -1
  319. letta_client/types/letta_message_content_union.py +4 -3
  320. letta_client/types/letta_message_union.py +5 -4
  321. letta_client/types/letta_ping.py +2 -1
  322. letta_client/types/letta_request.py +4 -3
  323. letta_client/types/letta_request_config.py +3 -2
  324. letta_client/types/letta_response.py +4 -3
  325. letta_client/types/letta_stop_reason.py +3 -2
  326. letta_client/types/letta_streaming_request.py +9 -3
  327. letta_client/types/letta_usage_statistics.py +3 -2
  328. letta_client/types/letta_user_message_content_union.py +2 -1
  329. letta_client/types/llm_config.py +6 -5
  330. letta_client/types/local_sandbox_config.py +3 -2
  331. letta_client/types/max_count_per_step_tool_rule.py +3 -2
  332. letta_client/types/max_count_per_step_tool_rule_schema.py +3 -2
  333. letta_client/types/mcp_tool.py +4 -3
  334. letta_client/types/memory.py +4 -3
  335. letta_client/types/message.py +6 -5
  336. letta_client/types/message_content_item.py +1 -0
  337. letta_client/types/message_create.py +5 -4
  338. letta_client/types/message_create_content.py +1 -0
  339. letta_client/types/message_schema.py +4 -3
  340. letta_client/types/modal_sandbox_config.py +2 -1
  341. letta_client/types/not_found_error_body.py +3 -2
  342. letta_client/types/omitted_reasoning_content.py +3 -2
  343. letta_client/types/openai_types_chat_chat_completion_message_tool_call_param_function.py +3 -2
  344. letta_client/types/openai_types_chat_chat_completion_named_tool_choice_param_function.py +3 -2
  345. letta_client/types/openai_types_chat_completion_create_params_function.py +3 -2
  346. letta_client/types/organization.py +3 -2
  347. letta_client/types/organization_create.py +2 -1
  348. letta_client/types/organization_sources_stats.py +3 -2
  349. letta_client/types/organization_update.py +2 -1
  350. letta_client/types/parameter_properties.py +3 -2
  351. letta_client/types/parameters_schema.py +4 -3
  352. letta_client/types/parent_tool_rule.py +3 -2
  353. letta_client/types/passage.py +4 -3
  354. letta_client/types/payment_required_error_body.py +3 -2
  355. letta_client/types/pip_requirement.py +3 -2
  356. letta_client/types/provider.py +5 -4
  357. letta_client/types/provider_check.py +4 -3
  358. letta_client/types/provider_trace.py +3 -2
  359. letta_client/types/reasoning_content.py +2 -1
  360. letta_client/types/reasoning_message.py +4 -3
  361. letta_client/types/redacted_reasoning_content.py +2 -1
  362. letta_client/types/required_before_exit_tool_rule.py +3 -2
  363. letta_client/types/response_format_json_object.py +3 -2
  364. letta_client/types/response_format_json_schema.py +4 -3
  365. letta_client/types/response_format_text.py +3 -2
  366. letta_client/types/round_robin_manager.py +2 -1
  367. letta_client/types/round_robin_manager_update.py +2 -1
  368. letta_client/types/run.py +4 -3
  369. letta_client/types/sandbox_config.py +4 -3
  370. letta_client/types/sandbox_config_create.py +4 -3
  371. letta_client/types/sandbox_config_create_config.py +2 -1
  372. letta_client/types/sandbox_config_update.py +3 -2
  373. letta_client/types/sandbox_config_update_config.py +2 -1
  374. letta_client/types/sandbox_environment_variable.py +3 -2
  375. letta_client/types/sandbox_environment_variable_create.py +3 -2
  376. letta_client/types/sandbox_environment_variable_update.py +2 -1
  377. letta_client/types/sleeptime_manager.py +2 -1
  378. letta_client/types/sleeptime_manager_update.py +2 -1
  379. letta_client/types/source.py +5 -4
  380. letta_client/types/source_create.py +4 -3
  381. letta_client/types/source_stats.py +4 -3
  382. letta_client/types/source_update.py +3 -2
  383. letta_client/types/sse_server_config.py +4 -3
  384. letta_client/types/stdio_server_config.py +4 -3
  385. letta_client/types/step.py +5 -4
  386. letta_client/types/streamable_http_server_config.py +4 -3
  387. letta_client/types/supervisor_manager.py +2 -1
  388. letta_client/types/supervisor_manager_update.py +2 -1
  389. letta_client/types/system_message.py +2 -1
  390. letta_client/types/tag_schema.py +3 -2
  391. letta_client/types/terminal_tool_rule.py +3 -2
  392. letta_client/types/text_content.py +2 -1
  393. letta_client/types/text_response_format.py +3 -2
  394. letta_client/types/tool.py +5 -4
  395. letta_client/types/tool_annotations.py +4 -3
  396. letta_client/types/tool_call.py +3 -2
  397. letta_client/types/tool_call_content.py +2 -1
  398. letta_client/types/tool_call_delta.py +3 -2
  399. letta_client/types/tool_call_message.py +4 -3
  400. letta_client/types/tool_call_message_tool_call.py +1 -0
  401. letta_client/types/tool_create.py +3 -2
  402. letta_client/types/tool_env_var_schema.py +3 -2
  403. letta_client/types/tool_json_schema.py +4 -3
  404. letta_client/types/tool_return.py +4 -3
  405. letta_client/types/tool_return_content.py +2 -1
  406. letta_client/types/tool_return_message.py +4 -3
  407. letta_client/types/tool_schema.py +5 -4
  408. letta_client/types/update_assistant_message.py +3 -2
  409. letta_client/types/update_assistant_message_content.py +1 -0
  410. letta_client/types/update_reasoning_message.py +3 -2
  411. letta_client/types/update_ssemcp_server.py +2 -1
  412. letta_client/types/update_stdio_mcp_server.py +3 -2
  413. letta_client/types/update_streamable_httpmcp_server.py +2 -1
  414. letta_client/types/update_system_message.py +2 -1
  415. letta_client/types/update_user_message.py +3 -2
  416. letta_client/types/update_user_message_content.py +1 -0
  417. letta_client/types/url_image.py +2 -1
  418. letta_client/types/usage_statistics.py +5 -4
  419. letta_client/types/usage_statistics_completion_token_details.py +3 -2
  420. letta_client/types/usage_statistics_prompt_token_details.py +3 -2
  421. letta_client/types/user.py +3 -2
  422. letta_client/types/user_create.py +3 -2
  423. letta_client/types/user_message.py +3 -2
  424. letta_client/types/user_message_content.py +1 -0
  425. letta_client/types/user_update.py +3 -2
  426. letta_client/types/validation_error.py +4 -3
  427. letta_client/types/voice_sleeptime_manager.py +2 -1
  428. letta_client/types/voice_sleeptime_manager_update.py +2 -1
  429. letta_client/types/web_search_options.py +4 -3
  430. letta_client/types/web_search_options_user_location.py +4 -3
  431. letta_client/types/web_search_options_user_location_approximate.py +3 -2
  432. letta_client/voice/__init__.py +2 -0
  433. letta_client/voice/client.py +33 -74
  434. letta_client/voice/raw_client.py +154 -0
  435. {letta_client-0.1.233.dist-info → letta_client-0.1.234.dist-info}/METADATA +24 -3
  436. letta_client-0.1.234.dist-info/RECORD +503 -0
  437. letta_client-0.1.233.dist-info/RECORD +0 -455
  438. {letta_client-0.1.233.dist-info → letta_client-0.1.234.dist-info}/WHEEL +0 -0
@@ -1,33 +1,25 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
3
  import typing
4
- from ..core.client_wrapper import SyncClientWrapper
4
+
5
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
5
6
  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
7
+ from ..types.action_model import ActionModel
8
+ from ..types.app_model import AppModel
9
+ from ..types.mcp_tool import McpTool
13
10
  from ..types.pip_requirement import PipRequirement
14
- from ..core.serialization import convert_and_respect_annotation_metadata
11
+ from ..types.tool import Tool
15
12
  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
13
+ from .raw_client import AsyncRawToolsClient, RawToolsClient
19
14
  from .types.add_mcp_server_request import AddMcpServerRequest
20
15
  from .types.add_mcp_server_response_item import AddMcpServerResponseItem
21
- from ..types.mcp_tool import McpTool
16
+ from .types.connect_mcp_server_request import ConnectMcpServerRequest
22
17
  from .types.delete_mcp_server_response_item import DeleteMcpServerResponseItem
18
+ from .types.list_mcp_servers_response_value import ListMcpServersResponseValue
19
+ from .types.streaming_response import StreamingResponse
20
+ from .types.test_mcp_server_request import TestMcpServerRequest
23
21
  from .types.update_mcp_server_request import UpdateMcpServerRequest
24
22
  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
23
 
32
24
  # this is used as the default value for optional parameters
33
25
  OMIT = typing.cast(typing.Any, ...)
@@ -35,7 +27,18 @@ OMIT = typing.cast(typing.Any, ...)
35
27
 
36
28
  class ToolsClient:
37
29
  def __init__(self, *, client_wrapper: SyncClientWrapper):
38
- self._client_wrapper = client_wrapper
30
+ self._raw_client = RawToolsClient(client_wrapper=client_wrapper)
31
+
32
+ @property
33
+ def with_raw_response(self) -> RawToolsClient:
34
+ """
35
+ Retrieves a raw implementation of this client that returns raw responses.
36
+
37
+ Returns
38
+ -------
39
+ RawToolsClient
40
+ """
41
+ return self._raw_client
39
42
 
40
43
  def retrieve(self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Tool:
41
44
  """
@@ -65,34 +68,8 @@ class ToolsClient:
65
68
  tool_id="tool_id",
66
69
  )
67
70
  """
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)
71
+ _response = self._raw_client.retrieve(tool_id, request_options=request_options)
72
+ return _response.data
96
73
 
97
74
  def delete(
98
75
  self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -124,34 +101,8 @@ class ToolsClient:
124
101
  tool_id="tool_id",
125
102
  )
126
103
  """
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)
104
+ _response = self._raw_client.delete(tool_id, request_options=request_options)
105
+ return _response.data
155
106
 
156
107
  def modify(
157
108
  self,
@@ -218,50 +169,19 @@ class ToolsClient:
218
169
  tool_id="tool_id",
219
170
  )
220
171
  """
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
- },
172
+ _response = self._raw_client.modify(
173
+ tool_id,
174
+ description=description,
175
+ tags=tags,
176
+ source_code=source_code,
177
+ source_type=source_type,
178
+ json_schema=json_schema,
179
+ args_json_schema=args_json_schema,
180
+ return_char_limit=return_char_limit,
181
+ pip_requirements=pip_requirements,
239
182
  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)
183
+ )
184
+ return _response.data
265
185
 
266
186
  def count(
267
187
  self,
@@ -295,37 +215,8 @@ class ToolsClient:
295
215
  )
296
216
  client.tools.count()
297
217
  """
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)
218
+ _response = self._raw_client.count(include_base_tools=include_base_tools, request_options=request_options)
219
+ return _response.data
329
220
 
330
221
  def list(
331
222
  self,
@@ -364,39 +255,8 @@ class ToolsClient:
364
255
  )
365
256
  client.tools.list()
366
257
  """
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)
258
+ _response = self._raw_client.list(after=after, limit=limit, name=name, request_options=request_options)
259
+ return _response.data
400
260
 
401
261
  def create(
402
262
  self,
@@ -460,47 +320,18 @@ class ToolsClient:
460
320
  source_code="source_code",
461
321
  )
462
322
  """
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
- },
323
+ _response = self._raw_client.create(
324
+ source_code=source_code,
325
+ description=description,
326
+ tags=tags,
327
+ source_type=source_type,
328
+ json_schema=json_schema,
329
+ args_json_schema=args_json_schema,
330
+ return_char_limit=return_char_limit,
331
+ pip_requirements=pip_requirements,
478
332
  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)
333
+ )
334
+ return _response.data
504
335
 
505
336
  def upsert(
506
337
  self,
@@ -564,47 +395,18 @@ class ToolsClient:
564
395
  source_code="source_code",
565
396
  )
566
397
  """
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
- },
398
+ _response = self._raw_client.upsert(
399
+ source_code=source_code,
400
+ description=description,
401
+ tags=tags,
402
+ source_type=source_type,
403
+ json_schema=json_schema,
404
+ args_json_schema=args_json_schema,
405
+ return_char_limit=return_char_limit,
406
+ pip_requirements=pip_requirements,
582
407
  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)
408
+ )
409
+ return _response.data
608
410
 
609
411
  def upsert_base_tools(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Tool]:
610
412
  """
@@ -630,34 +432,8 @@ class ToolsClient:
630
432
  )
631
433
  client.tools.upsert_base_tools()
632
434
  """
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)
435
+ _response = self._raw_client.upsert_base_tools(request_options=request_options)
436
+ return _response.data
661
437
 
662
438
  def run_tool_from_source(
663
439
  self,
@@ -722,50 +498,18 @@ class ToolsClient:
722
498
  args={"key": "value"},
723
499
  )
724
500
  """
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
- },
501
+ _response = self._raw_client.run_tool_from_source(
502
+ source_code=source_code,
503
+ args=args,
504
+ env_vars=env_vars,
505
+ name=name,
506
+ source_type=source_type,
507
+ args_json_schema=args_json_schema,
508
+ json_schema=json_schema,
509
+ pip_requirements=pip_requirements,
743
510
  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)
511
+ )
512
+ return _response.data
769
513
 
770
514
  def list_composio_apps(
771
515
  self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
@@ -795,37 +539,8 @@ class ToolsClient:
795
539
  )
796
540
  client.tools.list_composio_apps()
797
541
  """
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)
542
+ _response = self._raw_client.list_composio_apps(user_id=user_id, request_options=request_options)
543
+ return _response.data
829
544
 
830
545
  def list_composio_actions_by_app(
831
546
  self, composio_app_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -857,34 +572,8 @@ class ToolsClient:
857
572
  composio_app_name="composio_app_name",
858
573
  )
859
574
  """
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)
575
+ _response = self._raw_client.list_composio_actions_by_app(composio_app_name, request_options=request_options)
576
+ return _response.data
888
577
 
889
578
  def add_composio_tool(
890
579
  self, composio_action_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -916,34 +605,8 @@ class ToolsClient:
916
605
  composio_action_name="composio_action_name",
917
606
  )
918
607
  """
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)
608
+ _response = self._raw_client.add_composio_tool(composio_action_name, request_options=request_options)
609
+ return _response.data
947
610
 
948
611
  def list_mcp_servers(
949
612
  self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
@@ -973,37 +636,8 @@ class ToolsClient:
973
636
  )
974
637
  client.tools.list_mcp_servers()
975
638
  """
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)
639
+ _response = self._raw_client.list_mcp_servers(user_id=user_id, request_options=request_options)
640
+ return _response.data
1007
641
 
1008
642
  def add_mcp_server(
1009
643
  self, *, request: AddMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
@@ -1039,38 +673,8 @@ class ToolsClient:
1039
673
  ),
1040
674
  )
1041
675
  """
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)
676
+ _response = self._raw_client.add_mcp_server(request=request, request_options=request_options)
677
+ return _response.data
1074
678
 
1075
679
  def list_mcp_tools_by_server(
1076
680
  self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -1102,34 +706,8 @@ class ToolsClient:
1102
706
  mcp_server_name="mcp_server_name",
1103
707
  )
1104
708
  """
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)
709
+ _response = self._raw_client.list_mcp_tools_by_server(mcp_server_name, request_options=request_options)
710
+ return _response.data
1133
711
 
1134
712
  def add_mcp_tool(
1135
713
  self, mcp_server_name: str, mcp_tool_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -1164,34 +742,8 @@ class ToolsClient:
1164
742
  mcp_tool_name="mcp_tool_name",
1165
743
  )
1166
744
  """
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)
745
+ _response = self._raw_client.add_mcp_tool(mcp_server_name, mcp_tool_name, request_options=request_options)
746
+ return _response.data
1195
747
 
1196
748
  def delete_mcp_server(
1197
749
  self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -1223,34 +775,8 @@ class ToolsClient:
1223
775
  mcp_server_name="mcp_server_name",
1224
776
  )
1225
777
  """
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)
778
+ _response = self._raw_client.delete_mcp_server(mcp_server_name, request_options=request_options)
779
+ return _response.data
1254
780
 
1255
781
  def update_mcp_server(
1256
782
  self,
@@ -1289,38 +815,10 @@ class ToolsClient:
1289
815
  request=UpdateStdioMcpServer(),
1290
816
  )
1291
817
  """
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)
818
+ _response = self._raw_client.update_mcp_server(
819
+ mcp_server_name, request=request, request_options=request_options
820
+ )
821
+ return _response.data
1324
822
 
1325
823
  def test_mcp_server(
1326
824
  self, *, request: TestMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
@@ -1357,38 +855,8 @@ class ToolsClient:
1357
855
  ),
1358
856
  )
1359
857
  """
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)
858
+ _response = self._raw_client.test_mcp_server(request=request, request_options=request_options)
859
+ return _response.data
1392
860
 
1393
861
  def connect_mcp_server(
1394
862
  self, *, request: ConnectMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
@@ -1427,50 +895,24 @@ class ToolsClient:
1427
895
  for chunk in response:
1428
896
  yield chunk
1429
897
  """
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)
898
+ with self._raw_client.connect_mcp_server(request=request, request_options=request_options) as r:
899
+ yield from r.data
1469
900
 
1470
901
 
1471
902
  class AsyncToolsClient:
1472
903
  def __init__(self, *, client_wrapper: AsyncClientWrapper):
1473
- self._client_wrapper = client_wrapper
904
+ self._raw_client = AsyncRawToolsClient(client_wrapper=client_wrapper)
905
+
906
+ @property
907
+ def with_raw_response(self) -> AsyncRawToolsClient:
908
+ """
909
+ Retrieves a raw implementation of this client that returns raw responses.
910
+
911
+ Returns
912
+ -------
913
+ AsyncRawToolsClient
914
+ """
915
+ return self._raw_client
1474
916
 
1475
917
  async def retrieve(self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Tool:
1476
918
  """
@@ -1508,34 +950,8 @@ class AsyncToolsClient:
1508
950
 
1509
951
  asyncio.run(main())
1510
952
  """
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)
953
+ _response = await self._raw_client.retrieve(tool_id, request_options=request_options)
954
+ return _response.data
1539
955
 
1540
956
  async def delete(
1541
957
  self, tool_id: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -1575,34 +991,8 @@ class AsyncToolsClient:
1575
991
 
1576
992
  asyncio.run(main())
1577
993
  """
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)
994
+ _response = await self._raw_client.delete(tool_id, request_options=request_options)
995
+ return _response.data
1606
996
 
1607
997
  async def modify(
1608
998
  self,
@@ -1677,50 +1067,19 @@ class AsyncToolsClient:
1677
1067
 
1678
1068
  asyncio.run(main())
1679
1069
  """
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
- },
1070
+ _response = await self._raw_client.modify(
1071
+ tool_id,
1072
+ description=description,
1073
+ tags=tags,
1074
+ source_code=source_code,
1075
+ source_type=source_type,
1076
+ json_schema=json_schema,
1077
+ args_json_schema=args_json_schema,
1078
+ return_char_limit=return_char_limit,
1079
+ pip_requirements=pip_requirements,
1698
1080
  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)
1081
+ )
1082
+ return _response.data
1724
1083
 
1725
1084
  async def count(
1726
1085
  self,
@@ -1762,37 +1121,8 @@ class AsyncToolsClient:
1762
1121
 
1763
1122
  asyncio.run(main())
1764
1123
  """
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)
1124
+ _response = await self._raw_client.count(include_base_tools=include_base_tools, request_options=request_options)
1125
+ return _response.data
1796
1126
 
1797
1127
  async def list(
1798
1128
  self,
@@ -1839,39 +1169,8 @@ class AsyncToolsClient:
1839
1169
 
1840
1170
  asyncio.run(main())
1841
1171
  """
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)
1172
+ _response = await self._raw_client.list(after=after, limit=limit, name=name, request_options=request_options)
1173
+ return _response.data
1875
1174
 
1876
1175
  async def create(
1877
1176
  self,
@@ -1943,47 +1242,18 @@ class AsyncToolsClient:
1943
1242
 
1944
1243
  asyncio.run(main())
1945
1244
  """
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
- },
1245
+ _response = await self._raw_client.create(
1246
+ source_code=source_code,
1247
+ description=description,
1248
+ tags=tags,
1249
+ source_type=source_type,
1250
+ json_schema=json_schema,
1251
+ args_json_schema=args_json_schema,
1252
+ return_char_limit=return_char_limit,
1253
+ pip_requirements=pip_requirements,
1961
1254
  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)
1255
+ )
1256
+ return _response.data
1987
1257
 
1988
1258
  async def upsert(
1989
1259
  self,
@@ -2055,47 +1325,18 @@ class AsyncToolsClient:
2055
1325
 
2056
1326
  asyncio.run(main())
2057
1327
  """
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
- },
1328
+ _response = await self._raw_client.upsert(
1329
+ source_code=source_code,
1330
+ description=description,
1331
+ tags=tags,
1332
+ source_type=source_type,
1333
+ json_schema=json_schema,
1334
+ args_json_schema=args_json_schema,
1335
+ return_char_limit=return_char_limit,
1336
+ pip_requirements=pip_requirements,
2073
1337
  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)
1338
+ )
1339
+ return _response.data
2099
1340
 
2100
1341
  async def upsert_base_tools(self, *, request_options: typing.Optional[RequestOptions] = None) -> typing.List[Tool]:
2101
1342
  """
@@ -2129,34 +1370,8 @@ class AsyncToolsClient:
2129
1370
 
2130
1371
  asyncio.run(main())
2131
1372
  """
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)
1373
+ _response = await self._raw_client.upsert_base_tools(request_options=request_options)
1374
+ return _response.data
2160
1375
 
2161
1376
  async def run_tool_from_source(
2162
1377
  self,
@@ -2229,50 +1444,18 @@ class AsyncToolsClient:
2229
1444
 
2230
1445
  asyncio.run(main())
2231
1446
  """
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
- },
1447
+ _response = await self._raw_client.run_tool_from_source(
1448
+ source_code=source_code,
1449
+ args=args,
1450
+ env_vars=env_vars,
1451
+ name=name,
1452
+ source_type=source_type,
1453
+ args_json_schema=args_json_schema,
1454
+ json_schema=json_schema,
1455
+ pip_requirements=pip_requirements,
2250
1456
  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)
1457
+ )
1458
+ return _response.data
2276
1459
 
2277
1460
  async def list_composio_apps(
2278
1461
  self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
@@ -2310,37 +1493,8 @@ class AsyncToolsClient:
2310
1493
 
2311
1494
  asyncio.run(main())
2312
1495
  """
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)
1496
+ _response = await self._raw_client.list_composio_apps(user_id=user_id, request_options=request_options)
1497
+ return _response.data
2344
1498
 
2345
1499
  async def list_composio_actions_by_app(
2346
1500
  self, composio_app_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -2380,34 +1534,10 @@ class AsyncToolsClient:
2380
1534
 
2381
1535
  asyncio.run(main())
2382
1536
  """
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,
1537
+ _response = await self._raw_client.list_composio_actions_by_app(
1538
+ composio_app_name, request_options=request_options
2387
1539
  )
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)
1540
+ return _response.data
2411
1541
 
2412
1542
  async def add_composio_tool(
2413
1543
  self, composio_action_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -2447,34 +1577,8 @@ class AsyncToolsClient:
2447
1577
 
2448
1578
  asyncio.run(main())
2449
1579
  """
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)
1580
+ _response = await self._raw_client.add_composio_tool(composio_action_name, request_options=request_options)
1581
+ return _response.data
2478
1582
 
2479
1583
  async def list_mcp_servers(
2480
1584
  self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None
@@ -2512,37 +1616,8 @@ class AsyncToolsClient:
2512
1616
 
2513
1617
  asyncio.run(main())
2514
1618
  """
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)
1619
+ _response = await self._raw_client.list_mcp_servers(user_id=user_id, request_options=request_options)
1620
+ return _response.data
2546
1621
 
2547
1622
  async def add_mcp_server(
2548
1623
  self, *, request: AddMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
@@ -2586,38 +1661,8 @@ class AsyncToolsClient:
2586
1661
 
2587
1662
  asyncio.run(main())
2588
1663
  """
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)
1664
+ _response = await self._raw_client.add_mcp_server(request=request, request_options=request_options)
1665
+ return _response.data
2621
1666
 
2622
1667
  async def list_mcp_tools_by_server(
2623
1668
  self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -2657,34 +1702,8 @@ class AsyncToolsClient:
2657
1702
 
2658
1703
  asyncio.run(main())
2659
1704
  """
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)
1705
+ _response = await self._raw_client.list_mcp_tools_by_server(mcp_server_name, request_options=request_options)
1706
+ return _response.data
2688
1707
 
2689
1708
  async def add_mcp_tool(
2690
1709
  self, mcp_server_name: str, mcp_tool_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -2727,34 +1746,8 @@ class AsyncToolsClient:
2727
1746
 
2728
1747
  asyncio.run(main())
2729
1748
  """
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)
1749
+ _response = await self._raw_client.add_mcp_tool(mcp_server_name, mcp_tool_name, request_options=request_options)
1750
+ return _response.data
2758
1751
 
2759
1752
  async def delete_mcp_server(
2760
1753
  self, mcp_server_name: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -2794,34 +1787,8 @@ class AsyncToolsClient:
2794
1787
 
2795
1788
  asyncio.run(main())
2796
1789
  """
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)
1790
+ _response = await self._raw_client.delete_mcp_server(mcp_server_name, request_options=request_options)
1791
+ return _response.data
2825
1792
 
2826
1793
  async def update_mcp_server(
2827
1794
  self,
@@ -2868,38 +1835,10 @@ class AsyncToolsClient:
2868
1835
 
2869
1836
  asyncio.run(main())
2870
1837
  """
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)
1838
+ _response = await self._raw_client.update_mcp_server(
1839
+ mcp_server_name, request=request, request_options=request_options
1840
+ )
1841
+ return _response.data
2903
1842
 
2904
1843
  async def test_mcp_server(
2905
1844
  self, *, request: TestMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
@@ -2944,38 +1883,8 @@ class AsyncToolsClient:
2944
1883
 
2945
1884
  asyncio.run(main())
2946
1885
  """
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)
1886
+ _response = await self._raw_client.test_mcp_server(request=request, request_options=request_options)
1887
+ return _response.data
2979
1888
 
2980
1889
  async def connect_mcp_server(
2981
1890
  self, *, request: ConnectMcpServerRequest, request_options: typing.Optional[RequestOptions] = None
@@ -3022,42 +1931,6 @@ class AsyncToolsClient:
3022
1931
 
3023
1932
  asyncio.run(main())
3024
1933
  """
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)
1934
+ async with self._raw_client.connect_mcp_server(request=request, request_options=request_options) as r:
1935
+ async for _chunk in r.data:
1936
+ yield _chunk