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

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

Potentially problematic release.


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

Files changed (438) hide show
  1. letta_client/__init__.py +2 -0
  2. letta_client/agents/__init__.py +2 -0
  3. letta_client/agents/blocks/__init__.py +2 -0
  4. letta_client/agents/blocks/client.py +72 -313
  5. letta_client/agents/blocks/raw_client.py +654 -0
  6. letta_client/agents/client.py +349 -869
  7. letta_client/agents/context/__init__.py +2 -0
  8. letta_client/agents/context/client.py +31 -66
  9. letta_client/agents/context/raw_client.py +122 -0
  10. letta_client/agents/core_memory/__init__.py +2 -0
  11. letta_client/agents/core_memory/client.py +31 -66
  12. letta_client/agents/core_memory/raw_client.py +124 -0
  13. letta_client/agents/files/__init__.py +2 -0
  14. letta_client/agents/files/client.py +39 -178
  15. letta_client/agents/files/raw_client.py +349 -0
  16. letta_client/agents/folders/__init__.py +2 -0
  17. letta_client/agents/folders/client.py +39 -178
  18. letta_client/agents/folders/raw_client.py +327 -0
  19. letta_client/agents/groups/__init__.py +2 -0
  20. letta_client/agents/groups/client.py +31 -72
  21. letta_client/agents/groups/raw_client.py +142 -0
  22. letta_client/agents/memory_variables/__init__.py +2 -0
  23. letta_client/agents/memory_variables/client.py +31 -65
  24. letta_client/agents/memory_variables/raw_client.py +125 -0
  25. letta_client/agents/memory_variables/types/__init__.py +2 -0
  26. letta_client/agents/memory_variables/types/memory_variables_list_response.py +3 -2
  27. letta_client/agents/messages/__init__.py +2 -0
  28. letta_client/agents/messages/client.py +150 -589
  29. letta_client/agents/messages/raw_client.py +1384 -0
  30. letta_client/agents/messages/types/__init__.py +2 -0
  31. letta_client/agents/messages/types/letta_streaming_response.py +6 -5
  32. letta_client/agents/messages/types/messages_modify_request.py +3 -2
  33. letta_client/agents/messages/types/messages_modify_response.py +5 -4
  34. letta_client/agents/messages/types/messages_preview_raw_payload_request.py +1 -0
  35. letta_client/agents/passages/__init__.py +2 -0
  36. letta_client/agents/passages/client.py +89 -301
  37. letta_client/agents/passages/raw_client.py +678 -0
  38. letta_client/agents/raw_client.py +2088 -0
  39. letta_client/agents/sources/__init__.py +2 -0
  40. letta_client/agents/sources/client.py +39 -178
  41. letta_client/agents/sources/raw_client.py +327 -0
  42. letta_client/agents/templates/__init__.py +2 -0
  43. letta_client/agents/templates/client.py +57 -276
  44. letta_client/agents/templates/raw_client.py +505 -0
  45. letta_client/agents/templates/types/__init__.py +2 -0
  46. letta_client/agents/templates/types/templates_create_response.py +5 -4
  47. letta_client/agents/templates/types/templates_migrate_response.py +3 -2
  48. letta_client/agents/tools/__init__.py +2 -0
  49. letta_client/agents/tools/client.py +40 -179
  50. letta_client/agents/tools/raw_client.py +327 -0
  51. letta_client/agents/types/__init__.py +2 -0
  52. letta_client/agents/types/agents_search_request_search_item.py +4 -3
  53. letta_client/agents/types/agents_search_request_search_item_field.py +4 -3
  54. letta_client/agents/types/agents_search_request_search_item_one.py +4 -3
  55. letta_client/agents/types/agents_search_request_search_item_three.py +3 -2
  56. letta_client/agents/types/agents_search_request_search_item_two.py +3 -2
  57. letta_client/agents/types/agents_search_request_search_item_zero.py +3 -2
  58. letta_client/agents/types/agents_search_response.py +5 -4
  59. letta_client/agents/types/create_agent_request_response_format.py +1 -0
  60. letta_client/agents/types/create_agent_request_tool_rules_item.py +4 -3
  61. letta_client/agents/types/update_agent_response_format.py +1 -0
  62. letta_client/agents/types/update_agent_tool_rules_item.py +4 -3
  63. letta_client/base_client.py +41 -49
  64. letta_client/batches/__init__.py +2 -0
  65. letta_client/batches/client.py +45 -253
  66. letta_client/batches/raw_client.py +457 -0
  67. letta_client/blocks/__init__.py +2 -0
  68. letta_client/blocks/agents/__init__.py +2 -0
  69. letta_client/blocks/agents/client.py +33 -70
  70. letta_client/blocks/agents/raw_client.py +144 -0
  71. letta_client/blocks/client.py +126 -424
  72. letta_client/blocks/raw_client.py +973 -0
  73. letta_client/client_side_access_tokens/__init__.py +2 -0
  74. letta_client/client_side_access_tokens/client.py +45 -216
  75. letta_client/client_side_access_tokens/raw_client.py +435 -0
  76. letta_client/client_side_access_tokens/types/__init__.py +2 -0
  77. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_request_policy_item.py +4 -3
  78. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response.py +6 -5
  79. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy.py +4 -3
  80. letta_client/client_side_access_tokens/types/client_side_access_tokens_create_response_policy_data_item.py +4 -3
  81. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response.py +6 -5
  82. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item.py +6 -5
  83. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy.py +4 -3
  84. letta_client/client_side_access_tokens/types/client_side_access_tokens_list_client_side_access_tokens_response_tokens_item_policy_data_item.py +4 -3
  85. letta_client/core/__init__.py +5 -0
  86. letta_client/core/api_error.py +13 -5
  87. letta_client/core/client_wrapper.py +14 -5
  88. letta_client/core/force_multipart.py +16 -0
  89. letta_client/core/http_client.py +70 -26
  90. letta_client/core/http_response.py +55 -0
  91. letta_client/core/jsonable_encoder.py +0 -1
  92. letta_client/core/pydantic_utilities.py +70 -111
  93. letta_client/core/serialization.py +7 -3
  94. letta_client/core/unchecked_base_model.py +40 -4
  95. letta_client/embedding_models/__init__.py +2 -0
  96. letta_client/embedding_models/client.py +31 -65
  97. letta_client/embedding_models/raw_client.py +117 -0
  98. letta_client/errors/__init__.py +2 -0
  99. letta_client/errors/bad_request_error.py +4 -3
  100. letta_client/errors/conflict_error.py +4 -2
  101. letta_client/errors/internal_server_error.py +4 -3
  102. letta_client/errors/not_found_error.py +4 -3
  103. letta_client/errors/payment_required_error.py +4 -2
  104. letta_client/errors/unprocessable_entity_error.py +4 -2
  105. letta_client/folders/__init__.py +2 -0
  106. letta_client/folders/client.py +100 -564
  107. letta_client/folders/files/__init__.py +2 -0
  108. letta_client/folders/files/client.py +44 -189
  109. letta_client/folders/files/raw_client.py +391 -0
  110. letta_client/folders/passages/__init__.py +2 -0
  111. letta_client/folders/passages/client.py +33 -74
  112. letta_client/folders/passages/raw_client.py +162 -0
  113. letta_client/folders/raw_client.py +1084 -0
  114. letta_client/groups/__init__.py +2 -0
  115. letta_client/groups/client.py +87 -406
  116. letta_client/groups/messages/__init__.py +2 -0
  117. letta_client/groups/messages/client.py +110 -371
  118. letta_client/groups/messages/raw_client.py +881 -0
  119. letta_client/groups/messages/types/__init__.py +2 -0
  120. letta_client/groups/messages/types/letta_streaming_response.py +5 -4
  121. letta_client/groups/messages/types/messages_modify_request.py +3 -2
  122. letta_client/groups/messages/types/messages_modify_response.py +5 -4
  123. letta_client/groups/raw_client.py +807 -0
  124. letta_client/groups/types/__init__.py +2 -0
  125. letta_client/groups/types/group_create_manager_config.py +1 -0
  126. letta_client/groups/types/group_update_manager_config.py +1 -0
  127. letta_client/health/__init__.py +2 -0
  128. letta_client/health/client.py +31 -43
  129. letta_client/health/raw_client.py +85 -0
  130. letta_client/identities/__init__.py +2 -0
  131. letta_client/identities/client.py +115 -498
  132. letta_client/identities/properties/__init__.py +2 -0
  133. letta_client/identities/properties/client.py +32 -76
  134. letta_client/identities/properties/raw_client.py +152 -0
  135. letta_client/identities/raw_client.py +1010 -0
  136. letta_client/jobs/__init__.py +2 -0
  137. letta_client/jobs/client.py +67 -310
  138. letta_client/jobs/raw_client.py +624 -0
  139. letta_client/messages/__init__.py +2 -0
  140. letta_client/messages/client.py +41 -74
  141. letta_client/messages/raw_client.py +186 -0
  142. letta_client/models/__init__.py +2 -0
  143. letta_client/models/client.py +39 -73
  144. letta_client/models/raw_client.py +151 -0
  145. letta_client/projects/__init__.py +2 -0
  146. letta_client/projects/client.py +31 -53
  147. letta_client/projects/raw_client.py +125 -0
  148. letta_client/projects/types/__init__.py +2 -0
  149. letta_client/projects/types/projects_list_response.py +5 -4
  150. letta_client/projects/types/projects_list_response_projects_item.py +3 -2
  151. letta_client/providers/__init__.py +2 -0
  152. letta_client/providers/client.py +62 -335
  153. letta_client/providers/raw_client.py +664 -0
  154. letta_client/runs/__init__.py +2 -0
  155. letta_client/runs/client.py +56 -258
  156. letta_client/runs/messages/__init__.py +2 -0
  157. letta_client/runs/messages/client.py +34 -79
  158. letta_client/runs/messages/raw_client.py +209 -0
  159. letta_client/runs/raw_client.py +440 -0
  160. letta_client/runs/steps/__init__.py +2 -0
  161. letta_client/runs/steps/client.py +33 -76
  162. letta_client/runs/steps/raw_client.py +192 -0
  163. letta_client/runs/usage/__init__.py +2 -0
  164. letta_client/runs/usage/client.py +31 -66
  165. letta_client/runs/usage/raw_client.py +122 -0
  166. letta_client/sources/__init__.py +2 -0
  167. letta_client/sources/client.py +107 -625
  168. letta_client/sources/files/__init__.py +2 -0
  169. letta_client/sources/files/client.py +44 -189
  170. letta_client/sources/files/raw_client.py +391 -0
  171. letta_client/sources/passages/__init__.py +2 -0
  172. letta_client/sources/passages/client.py +33 -74
  173. letta_client/sources/passages/raw_client.py +162 -0
  174. letta_client/sources/raw_client.py +1209 -0
  175. letta_client/steps/__init__.py +2 -0
  176. letta_client/steps/client.py +65 -153
  177. letta_client/steps/feedback/__init__.py +2 -0
  178. letta_client/steps/feedback/client.py +32 -73
  179. letta_client/steps/feedback/raw_client.py +141 -0
  180. letta_client/steps/raw_client.py +355 -0
  181. letta_client/steps/types/__init__.py +2 -0
  182. letta_client/tags/__init__.py +2 -0
  183. letta_client/tags/client.py +33 -73
  184. letta_client/tags/raw_client.py +148 -0
  185. letta_client/telemetry/__init__.py +2 -0
  186. letta_client/telemetry/client.py +31 -66
  187. letta_client/telemetry/raw_client.py +118 -0
  188. letta_client/templates/__init__.py +2 -0
  189. letta_client/templates/agents/__init__.py +2 -0
  190. letta_client/templates/agents/client.py +48 -96
  191. letta_client/templates/agents/raw_client.py +227 -0
  192. letta_client/templates/agents/types/__init__.py +2 -0
  193. letta_client/templates/agents/types/agents_create_request_initial_message_sequence_item.py +4 -3
  194. letta_client/templates/agents/types/agents_create_response.py +4 -3
  195. letta_client/templates/client.py +36 -57
  196. letta_client/templates/raw_client.py +133 -0
  197. letta_client/templates/types/__init__.py +2 -0
  198. letta_client/templates/types/templates_list_response.py +5 -4
  199. letta_client/templates/types/templates_list_response_templates_item.py +3 -2
  200. letta_client/tools/__init__.py +2 -0
  201. letta_client/tools/client.py +195 -1322
  202. letta_client/tools/raw_client.py +2565 -0
  203. letta_client/tools/types/__init__.py +2 -0
  204. letta_client/tools/types/add_mcp_server_request.py +2 -1
  205. letta_client/tools/types/add_mcp_server_response_item.py +2 -1
  206. letta_client/tools/types/connect_mcp_server_request.py +2 -1
  207. letta_client/tools/types/delete_mcp_server_response_item.py +2 -1
  208. letta_client/tools/types/list_mcp_servers_response_value.py +1 -0
  209. letta_client/tools/types/streaming_response.py +5 -4
  210. letta_client/tools/types/test_mcp_server_request.py +2 -1
  211. letta_client/tools/types/update_mcp_server_request.py +2 -1
  212. letta_client/tools/types/update_mcp_server_response.py +2 -1
  213. letta_client/types/__init__.py +2 -0
  214. letta_client/types/action_model.py +6 -5
  215. letta_client/types/action_parameters_model.py +3 -2
  216. letta_client/types/action_response_model.py +3 -2
  217. letta_client/types/agent_environment_variable.py +3 -2
  218. letta_client/types/agent_schema.py +7 -6
  219. letta_client/types/agent_schema_tool_rules_item.py +2 -1
  220. letta_client/types/agent_state.py +14 -8
  221. letta_client/types/agent_state_response_format.py +1 -0
  222. letta_client/types/agent_state_tool_rules_item.py +4 -3
  223. letta_client/types/app_auth_scheme.py +4 -3
  224. letta_client/types/app_model.py +5 -4
  225. letta_client/types/assistant_message.py +3 -2
  226. letta_client/types/assistant_message_content.py +1 -0
  227. letta_client/types/audio.py +3 -2
  228. letta_client/types/auth_request.py +2 -1
  229. letta_client/types/auth_response.py +5 -4
  230. letta_client/types/auth_scheme_field.py +3 -2
  231. letta_client/types/bad_request_error_body.py +3 -2
  232. letta_client/types/base_64_image.py +2 -1
  233. letta_client/types/base_tool_rule_schema.py +3 -2
  234. letta_client/types/batch_job.py +4 -3
  235. letta_client/types/block.py +3 -2
  236. letta_client/types/block_update.py +2 -1
  237. letta_client/types/chat_completion_assistant_message_param.py +5 -4
  238. letta_client/types/chat_completion_assistant_message_param_content.py +1 -0
  239. letta_client/types/chat_completion_assistant_message_param_content_item.py +2 -1
  240. letta_client/types/chat_completion_audio_param.py +4 -3
  241. letta_client/types/chat_completion_content_part_image_param.py +4 -3
  242. letta_client/types/chat_completion_content_part_input_audio_param.py +4 -3
  243. letta_client/types/chat_completion_content_part_refusal_param.py +3 -2
  244. letta_client/types/chat_completion_content_part_text_param.py +3 -2
  245. letta_client/types/chat_completion_developer_message_param.py +4 -3
  246. letta_client/types/chat_completion_developer_message_param_content.py +1 -0
  247. letta_client/types/chat_completion_function_call_option_param.py +3 -2
  248. letta_client/types/chat_completion_function_message_param.py +3 -2
  249. letta_client/types/chat_completion_message_tool_call.py +4 -3
  250. letta_client/types/chat_completion_message_tool_call_param.py +4 -3
  251. letta_client/types/chat_completion_named_tool_choice_param.py +4 -3
  252. letta_client/types/chat_completion_prediction_content_param.py +4 -3
  253. letta_client/types/chat_completion_prediction_content_param_content.py +1 -0
  254. letta_client/types/chat_completion_stream_options_param.py +3 -2
  255. letta_client/types/chat_completion_system_message_param.py +4 -3
  256. letta_client/types/chat_completion_system_message_param_content.py +1 -0
  257. letta_client/types/chat_completion_tool_message_param.py +4 -3
  258. letta_client/types/chat_completion_tool_message_param_content.py +1 -0
  259. letta_client/types/chat_completion_tool_param.py +4 -3
  260. letta_client/types/chat_completion_user_message_param.py +4 -3
  261. letta_client/types/chat_completion_user_message_param_content.py +1 -0
  262. letta_client/types/chat_completion_user_message_param_content_item.py +2 -1
  263. letta_client/types/child_tool_rule.py +3 -2
  264. letta_client/types/child_tool_rule_schema.py +3 -2
  265. letta_client/types/code_input.py +3 -2
  266. letta_client/types/completion_create_params_non_streaming.py +10 -9
  267. letta_client/types/completion_create_params_non_streaming_function_call.py +1 -0
  268. letta_client/types/completion_create_params_non_streaming_messages_item.py +4 -3
  269. letta_client/types/completion_create_params_non_streaming_response_format.py +3 -2
  270. letta_client/types/completion_create_params_non_streaming_tool_choice.py +1 -0
  271. letta_client/types/completion_create_params_streaming.py +10 -9
  272. letta_client/types/completion_create_params_streaming_function_call.py +1 -0
  273. letta_client/types/completion_create_params_streaming_messages_item.py +4 -3
  274. letta_client/types/completion_create_params_streaming_response_format.py +3 -2
  275. letta_client/types/completion_create_params_streaming_tool_choice.py +1 -0
  276. letta_client/types/conditional_tool_rule.py +3 -2
  277. letta_client/types/conditional_tool_rule_schema.py +3 -2
  278. letta_client/types/conflict_error_body.py +3 -2
  279. letta_client/types/context_window_overview.py +4 -3
  280. letta_client/types/continue_tool_rule.py +3 -2
  281. letta_client/types/core_memory_block_schema.py +4 -3
  282. letta_client/types/create_block.py +3 -2
  283. letta_client/types/dynamic_manager.py +2 -1
  284. letta_client/types/dynamic_manager_update.py +2 -1
  285. letta_client/types/e_2_b_sandbox_config.py +2 -1
  286. letta_client/types/embedding_config.py +4 -3
  287. letta_client/types/file.py +4 -3
  288. letta_client/types/file_block.py +4 -3
  289. letta_client/types/file_file.py +3 -2
  290. letta_client/types/file_metadata.py +5 -4
  291. letta_client/types/file_stats.py +3 -2
  292. letta_client/types/folder.py +5 -4
  293. letta_client/types/function_call.py +3 -2
  294. letta_client/types/function_definition_input.py +3 -2
  295. letta_client/types/function_definition_output.py +3 -2
  296. letta_client/types/function_output.py +3 -2
  297. letta_client/types/function_tool.py +4 -3
  298. letta_client/types/generate_tool_input.py +3 -2
  299. letta_client/types/generate_tool_output.py +4 -3
  300. letta_client/types/group.py +4 -3
  301. letta_client/types/health.py +3 -2
  302. letta_client/types/hidden_reasoning_message.py +4 -3
  303. letta_client/types/http_validation_error.py +4 -3
  304. letta_client/types/identity.py +4 -3
  305. letta_client/types/identity_property.py +5 -4
  306. letta_client/types/image_content.py +3 -2
  307. letta_client/types/image_content_source.py +1 -0
  308. letta_client/types/image_url.py +4 -3
  309. letta_client/types/init_tool_rule.py +3 -2
  310. letta_client/types/input_audio.py +4 -3
  311. letta_client/types/internal_server_error_body.py +3 -2
  312. letta_client/types/job.py +4 -3
  313. letta_client/types/json_object_response_format.py +3 -2
  314. letta_client/types/json_schema.py +4 -3
  315. letta_client/types/json_schema_response_format.py +2 -1
  316. letta_client/types/letta_batch_messages.py +4 -3
  317. letta_client/types/letta_batch_request.py +4 -3
  318. letta_client/types/letta_image.py +2 -1
  319. letta_client/types/letta_message_content_union.py +4 -3
  320. letta_client/types/letta_message_union.py +5 -4
  321. letta_client/types/letta_ping.py +2 -1
  322. letta_client/types/letta_request.py +4 -3
  323. letta_client/types/letta_request_config.py +3 -2
  324. letta_client/types/letta_response.py +4 -3
  325. letta_client/types/letta_stop_reason.py +3 -2
  326. letta_client/types/letta_streaming_request.py +9 -3
  327. letta_client/types/letta_usage_statistics.py +3 -2
  328. letta_client/types/letta_user_message_content_union.py +2 -1
  329. letta_client/types/llm_config.py +6 -5
  330. letta_client/types/local_sandbox_config.py +3 -2
  331. letta_client/types/max_count_per_step_tool_rule.py +3 -2
  332. letta_client/types/max_count_per_step_tool_rule_schema.py +3 -2
  333. letta_client/types/mcp_tool.py +4 -3
  334. letta_client/types/memory.py +4 -3
  335. letta_client/types/message.py +6 -5
  336. letta_client/types/message_content_item.py +1 -0
  337. letta_client/types/message_create.py +5 -4
  338. letta_client/types/message_create_content.py +1 -0
  339. letta_client/types/message_schema.py +4 -3
  340. letta_client/types/modal_sandbox_config.py +2 -1
  341. letta_client/types/not_found_error_body.py +3 -2
  342. letta_client/types/omitted_reasoning_content.py +3 -2
  343. letta_client/types/openai_types_chat_chat_completion_message_tool_call_param_function.py +3 -2
  344. letta_client/types/openai_types_chat_chat_completion_named_tool_choice_param_function.py +3 -2
  345. letta_client/types/openai_types_chat_completion_create_params_function.py +3 -2
  346. letta_client/types/organization.py +3 -2
  347. letta_client/types/organization_create.py +2 -1
  348. letta_client/types/organization_sources_stats.py +3 -2
  349. letta_client/types/organization_update.py +2 -1
  350. letta_client/types/parameter_properties.py +3 -2
  351. letta_client/types/parameters_schema.py +4 -3
  352. letta_client/types/parent_tool_rule.py +3 -2
  353. letta_client/types/passage.py +4 -3
  354. letta_client/types/payment_required_error_body.py +3 -2
  355. letta_client/types/pip_requirement.py +3 -2
  356. letta_client/types/provider.py +5 -4
  357. letta_client/types/provider_check.py +4 -3
  358. letta_client/types/provider_trace.py +3 -2
  359. letta_client/types/reasoning_content.py +2 -1
  360. letta_client/types/reasoning_message.py +4 -3
  361. letta_client/types/redacted_reasoning_content.py +2 -1
  362. letta_client/types/required_before_exit_tool_rule.py +3 -2
  363. letta_client/types/response_format_json_object.py +3 -2
  364. letta_client/types/response_format_json_schema.py +4 -3
  365. letta_client/types/response_format_text.py +3 -2
  366. letta_client/types/round_robin_manager.py +2 -1
  367. letta_client/types/round_robin_manager_update.py +2 -1
  368. letta_client/types/run.py +4 -3
  369. letta_client/types/sandbox_config.py +4 -3
  370. letta_client/types/sandbox_config_create.py +4 -3
  371. letta_client/types/sandbox_config_create_config.py +2 -1
  372. letta_client/types/sandbox_config_update.py +3 -2
  373. letta_client/types/sandbox_config_update_config.py +2 -1
  374. letta_client/types/sandbox_environment_variable.py +3 -2
  375. letta_client/types/sandbox_environment_variable_create.py +3 -2
  376. letta_client/types/sandbox_environment_variable_update.py +2 -1
  377. letta_client/types/sleeptime_manager.py +2 -1
  378. letta_client/types/sleeptime_manager_update.py +2 -1
  379. letta_client/types/source.py +5 -4
  380. letta_client/types/source_create.py +4 -3
  381. letta_client/types/source_stats.py +4 -3
  382. letta_client/types/source_update.py +3 -2
  383. letta_client/types/sse_server_config.py +4 -3
  384. letta_client/types/stdio_server_config.py +4 -3
  385. letta_client/types/step.py +5 -4
  386. letta_client/types/streamable_http_server_config.py +4 -3
  387. letta_client/types/supervisor_manager.py +2 -1
  388. letta_client/types/supervisor_manager_update.py +2 -1
  389. letta_client/types/system_message.py +2 -1
  390. letta_client/types/tag_schema.py +3 -2
  391. letta_client/types/terminal_tool_rule.py +3 -2
  392. letta_client/types/text_content.py +2 -1
  393. letta_client/types/text_response_format.py +3 -2
  394. letta_client/types/tool.py +5 -4
  395. letta_client/types/tool_annotations.py +4 -3
  396. letta_client/types/tool_call.py +3 -2
  397. letta_client/types/tool_call_content.py +2 -1
  398. letta_client/types/tool_call_delta.py +3 -2
  399. letta_client/types/tool_call_message.py +4 -3
  400. letta_client/types/tool_call_message_tool_call.py +1 -0
  401. letta_client/types/tool_create.py +3 -2
  402. letta_client/types/tool_env_var_schema.py +3 -2
  403. letta_client/types/tool_json_schema.py +4 -3
  404. letta_client/types/tool_return.py +4 -3
  405. letta_client/types/tool_return_content.py +2 -1
  406. letta_client/types/tool_return_message.py +4 -3
  407. letta_client/types/tool_schema.py +5 -4
  408. letta_client/types/update_assistant_message.py +3 -2
  409. letta_client/types/update_assistant_message_content.py +1 -0
  410. letta_client/types/update_reasoning_message.py +3 -2
  411. letta_client/types/update_ssemcp_server.py +2 -1
  412. letta_client/types/update_stdio_mcp_server.py +3 -2
  413. letta_client/types/update_streamable_httpmcp_server.py +2 -1
  414. letta_client/types/update_system_message.py +2 -1
  415. letta_client/types/update_user_message.py +3 -2
  416. letta_client/types/update_user_message_content.py +1 -0
  417. letta_client/types/url_image.py +2 -1
  418. letta_client/types/usage_statistics.py +5 -4
  419. letta_client/types/usage_statistics_completion_token_details.py +3 -2
  420. letta_client/types/usage_statistics_prompt_token_details.py +3 -2
  421. letta_client/types/user.py +3 -2
  422. letta_client/types/user_create.py +3 -2
  423. letta_client/types/user_message.py +3 -2
  424. letta_client/types/user_message_content.py +1 -0
  425. letta_client/types/user_update.py +3 -2
  426. letta_client/types/validation_error.py +4 -3
  427. letta_client/types/voice_sleeptime_manager.py +2 -1
  428. letta_client/types/voice_sleeptime_manager_update.py +2 -1
  429. letta_client/types/web_search_options.py +4 -3
  430. letta_client/types/web_search_options_user_location.py +4 -3
  431. letta_client/types/web_search_options_user_location_approximate.py +3 -2
  432. letta_client/voice/__init__.py +2 -0
  433. letta_client/voice/client.py +33 -74
  434. letta_client/voice/raw_client.py +154 -0
  435. {letta_client-0.1.233.dist-info → letta_client-0.1.235.dist-info}/METADATA +24 -3
  436. letta_client-0.1.235.dist-info/RECORD +503 -0
  437. letta_client-0.1.233.dist-info/RECORD +0 -455
  438. {letta_client-0.1.233.dist-info → letta_client-0.1.235.dist-info}/WHEEL +0 -0
@@ -0,0 +1,1209 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.request_options import RequestOptions
11
+ from ..core.serialization import convert_and_respect_annotation_metadata
12
+ from ..core.unchecked_base_model import construct_type
13
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
14
+ from ..types.embedding_config import EmbeddingConfig
15
+ from ..types.file_metadata import FileMetadata
16
+ from ..types.http_validation_error import HttpValidationError
17
+ from ..types.organization_sources_stats import OrganizationSourcesStats
18
+ from ..types.source import Source
19
+
20
+ # this is used as the default value for optional parameters
21
+ OMIT = typing.cast(typing.Any, ...)
22
+
23
+
24
+ class RawSourcesClient:
25
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
26
+ self._client_wrapper = client_wrapper
27
+
28
+ def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[int]:
29
+ """
30
+ Count all data sources created by a user.
31
+
32
+ Parameters
33
+ ----------
34
+ request_options : typing.Optional[RequestOptions]
35
+ Request-specific configuration.
36
+
37
+ Returns
38
+ -------
39
+ HttpResponse[int]
40
+ Successful Response
41
+ """
42
+ _response = self._client_wrapper.httpx_client.request(
43
+ "v1/sources/count",
44
+ method="GET",
45
+ request_options=request_options,
46
+ )
47
+ try:
48
+ if 200 <= _response.status_code < 300:
49
+ _data = typing.cast(
50
+ int,
51
+ construct_type(
52
+ type_=int, # type: ignore
53
+ object_=_response.json(),
54
+ ),
55
+ )
56
+ return HttpResponse(response=_response, data=_data)
57
+ if _response.status_code == 422:
58
+ raise UnprocessableEntityError(
59
+ headers=dict(_response.headers),
60
+ body=typing.cast(
61
+ HttpValidationError,
62
+ construct_type(
63
+ type_=HttpValidationError, # type: ignore
64
+ object_=_response.json(),
65
+ ),
66
+ ),
67
+ )
68
+ _response_json = _response.json()
69
+ except JSONDecodeError:
70
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
71
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
72
+
73
+ def retrieve(
74
+ self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None
75
+ ) -> HttpResponse[Source]:
76
+ """
77
+ Get all sources
78
+
79
+ Parameters
80
+ ----------
81
+ source_id : str
82
+
83
+ request_options : typing.Optional[RequestOptions]
84
+ Request-specific configuration.
85
+
86
+ Returns
87
+ -------
88
+ HttpResponse[Source]
89
+ Successful Response
90
+ """
91
+ _response = self._client_wrapper.httpx_client.request(
92
+ f"v1/sources/{jsonable_encoder(source_id)}",
93
+ method="GET",
94
+ request_options=request_options,
95
+ )
96
+ try:
97
+ if 200 <= _response.status_code < 300:
98
+ _data = typing.cast(
99
+ Source,
100
+ construct_type(
101
+ type_=Source, # type: ignore
102
+ object_=_response.json(),
103
+ ),
104
+ )
105
+ return HttpResponse(response=_response, data=_data)
106
+ if _response.status_code == 422:
107
+ raise UnprocessableEntityError(
108
+ headers=dict(_response.headers),
109
+ body=typing.cast(
110
+ HttpValidationError,
111
+ construct_type(
112
+ type_=HttpValidationError, # type: ignore
113
+ object_=_response.json(),
114
+ ),
115
+ ),
116
+ )
117
+ _response_json = _response.json()
118
+ except JSONDecodeError:
119
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
120
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
121
+
122
+ def delete(
123
+ self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None
124
+ ) -> HttpResponse[typing.Optional[typing.Any]]:
125
+ """
126
+ Delete a data source.
127
+
128
+ Parameters
129
+ ----------
130
+ source_id : str
131
+
132
+ request_options : typing.Optional[RequestOptions]
133
+ Request-specific configuration.
134
+
135
+ Returns
136
+ -------
137
+ HttpResponse[typing.Optional[typing.Any]]
138
+ Successful Response
139
+ """
140
+ _response = self._client_wrapper.httpx_client.request(
141
+ f"v1/sources/{jsonable_encoder(source_id)}",
142
+ method="DELETE",
143
+ request_options=request_options,
144
+ )
145
+ try:
146
+ if _response is None or not _response.text.strip():
147
+ return HttpResponse(response=_response, data=None)
148
+ if 200 <= _response.status_code < 300:
149
+ _data = typing.cast(
150
+ typing.Optional[typing.Any],
151
+ construct_type(
152
+ type_=typing.Optional[typing.Any], # type: ignore
153
+ object_=_response.json(),
154
+ ),
155
+ )
156
+ return HttpResponse(response=_response, data=_data)
157
+ if _response.status_code == 422:
158
+ raise UnprocessableEntityError(
159
+ headers=dict(_response.headers),
160
+ body=typing.cast(
161
+ HttpValidationError,
162
+ construct_type(
163
+ type_=HttpValidationError, # type: ignore
164
+ object_=_response.json(),
165
+ ),
166
+ ),
167
+ )
168
+ _response_json = _response.json()
169
+ except JSONDecodeError:
170
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
171
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
172
+
173
+ def modify(
174
+ self,
175
+ source_id: str,
176
+ *,
177
+ name: typing.Optional[str] = OMIT,
178
+ description: typing.Optional[str] = OMIT,
179
+ instructions: typing.Optional[str] = OMIT,
180
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
181
+ embedding_config: typing.Optional[EmbeddingConfig] = OMIT,
182
+ request_options: typing.Optional[RequestOptions] = None,
183
+ ) -> HttpResponse[Source]:
184
+ """
185
+ Update the name or documentation of an existing data source.
186
+
187
+ Parameters
188
+ ----------
189
+ source_id : str
190
+
191
+ name : typing.Optional[str]
192
+ The name of the source.
193
+
194
+ description : typing.Optional[str]
195
+ The description of the source.
196
+
197
+ instructions : typing.Optional[str]
198
+ Instructions for how to use the source.
199
+
200
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
201
+ Metadata associated with the source.
202
+
203
+ embedding_config : typing.Optional[EmbeddingConfig]
204
+ The embedding configuration used by the source.
205
+
206
+ request_options : typing.Optional[RequestOptions]
207
+ Request-specific configuration.
208
+
209
+ Returns
210
+ -------
211
+ HttpResponse[Source]
212
+ Successful Response
213
+ """
214
+ _response = self._client_wrapper.httpx_client.request(
215
+ f"v1/sources/{jsonable_encoder(source_id)}",
216
+ method="PATCH",
217
+ json={
218
+ "name": name,
219
+ "description": description,
220
+ "instructions": instructions,
221
+ "metadata": metadata,
222
+ "embedding_config": convert_and_respect_annotation_metadata(
223
+ object_=embedding_config, annotation=EmbeddingConfig, direction="write"
224
+ ),
225
+ },
226
+ headers={
227
+ "content-type": "application/json",
228
+ },
229
+ request_options=request_options,
230
+ omit=OMIT,
231
+ )
232
+ try:
233
+ if 200 <= _response.status_code < 300:
234
+ _data = typing.cast(
235
+ Source,
236
+ construct_type(
237
+ type_=Source, # type: ignore
238
+ object_=_response.json(),
239
+ ),
240
+ )
241
+ return HttpResponse(response=_response, data=_data)
242
+ if _response.status_code == 422:
243
+ raise UnprocessableEntityError(
244
+ headers=dict(_response.headers),
245
+ body=typing.cast(
246
+ HttpValidationError,
247
+ construct_type(
248
+ type_=HttpValidationError, # type: ignore
249
+ object_=_response.json(),
250
+ ),
251
+ ),
252
+ )
253
+ _response_json = _response.json()
254
+ except JSONDecodeError:
255
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
256
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
257
+
258
+ def retrieve_by_name(
259
+ self, source_name: str, *, request_options: typing.Optional[RequestOptions] = None
260
+ ) -> HttpResponse[str]:
261
+ """
262
+ Get a source by name
263
+
264
+ Parameters
265
+ ----------
266
+ source_name : str
267
+
268
+ request_options : typing.Optional[RequestOptions]
269
+ Request-specific configuration.
270
+
271
+ Returns
272
+ -------
273
+ HttpResponse[str]
274
+ Successful Response
275
+ """
276
+ _response = self._client_wrapper.httpx_client.request(
277
+ f"v1/sources/name/{jsonable_encoder(source_name)}",
278
+ method="GET",
279
+ request_options=request_options,
280
+ )
281
+ try:
282
+ if 200 <= _response.status_code < 300:
283
+ _data = typing.cast(
284
+ str,
285
+ construct_type(
286
+ type_=str, # type: ignore
287
+ object_=_response.json(),
288
+ ),
289
+ )
290
+ return HttpResponse(response=_response, data=_data)
291
+ if _response.status_code == 422:
292
+ raise UnprocessableEntityError(
293
+ headers=dict(_response.headers),
294
+ body=typing.cast(
295
+ HttpValidationError,
296
+ construct_type(
297
+ type_=HttpValidationError, # type: ignore
298
+ object_=_response.json(),
299
+ ),
300
+ ),
301
+ )
302
+ _response_json = _response.json()
303
+ except JSONDecodeError:
304
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
305
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
306
+
307
+ def get_sources_metadata(
308
+ self,
309
+ *,
310
+ include_detailed_per_source_metadata: typing.Optional[bool] = None,
311
+ request_options: typing.Optional[RequestOptions] = None,
312
+ ) -> HttpResponse[OrganizationSourcesStats]:
313
+ """
314
+ Get aggregated metadata for all sources in an organization.
315
+
316
+ Returns structured metadata including:
317
+ - Total number of sources
318
+ - Total number of files across all sources
319
+ - Total size of all files
320
+ - Per-source breakdown with file details (file_name, file_size per file) if include_detailed_per_source_metadata is True
321
+
322
+ Parameters
323
+ ----------
324
+ include_detailed_per_source_metadata : typing.Optional[bool]
325
+
326
+ request_options : typing.Optional[RequestOptions]
327
+ Request-specific configuration.
328
+
329
+ Returns
330
+ -------
331
+ HttpResponse[OrganizationSourcesStats]
332
+ Successful Response
333
+ """
334
+ _response = self._client_wrapper.httpx_client.request(
335
+ "v1/sources/metadata",
336
+ method="GET",
337
+ params={
338
+ "include_detailed_per_source_metadata": include_detailed_per_source_metadata,
339
+ },
340
+ request_options=request_options,
341
+ )
342
+ try:
343
+ if 200 <= _response.status_code < 300:
344
+ _data = typing.cast(
345
+ OrganizationSourcesStats,
346
+ construct_type(
347
+ type_=OrganizationSourcesStats, # type: ignore
348
+ object_=_response.json(),
349
+ ),
350
+ )
351
+ return HttpResponse(response=_response, data=_data)
352
+ if _response.status_code == 422:
353
+ raise UnprocessableEntityError(
354
+ headers=dict(_response.headers),
355
+ body=typing.cast(
356
+ HttpValidationError,
357
+ construct_type(
358
+ type_=HttpValidationError, # type: ignore
359
+ object_=_response.json(),
360
+ ),
361
+ ),
362
+ )
363
+ _response_json = _response.json()
364
+ except JSONDecodeError:
365
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
366
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
367
+
368
+ def list(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[typing.List[Source]]:
369
+ """
370
+ List all data sources created by a user.
371
+
372
+ Parameters
373
+ ----------
374
+ request_options : typing.Optional[RequestOptions]
375
+ Request-specific configuration.
376
+
377
+ Returns
378
+ -------
379
+ HttpResponse[typing.List[Source]]
380
+ Successful Response
381
+ """
382
+ _response = self._client_wrapper.httpx_client.request(
383
+ "v1/sources/",
384
+ method="GET",
385
+ request_options=request_options,
386
+ )
387
+ try:
388
+ if 200 <= _response.status_code < 300:
389
+ _data = typing.cast(
390
+ typing.List[Source],
391
+ construct_type(
392
+ type_=typing.List[Source], # type: ignore
393
+ object_=_response.json(),
394
+ ),
395
+ )
396
+ return HttpResponse(response=_response, data=_data)
397
+ if _response.status_code == 422:
398
+ raise UnprocessableEntityError(
399
+ headers=dict(_response.headers),
400
+ body=typing.cast(
401
+ HttpValidationError,
402
+ construct_type(
403
+ type_=HttpValidationError, # type: ignore
404
+ object_=_response.json(),
405
+ ),
406
+ ),
407
+ )
408
+ _response_json = _response.json()
409
+ except JSONDecodeError:
410
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
411
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
412
+
413
+ def create(
414
+ self,
415
+ *,
416
+ name: str,
417
+ description: typing.Optional[str] = OMIT,
418
+ instructions: typing.Optional[str] = OMIT,
419
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
420
+ embedding: typing.Optional[str] = OMIT,
421
+ embedding_chunk_size: typing.Optional[int] = OMIT,
422
+ embedding_config: typing.Optional[EmbeddingConfig] = OMIT,
423
+ request_options: typing.Optional[RequestOptions] = None,
424
+ ) -> HttpResponse[Source]:
425
+ """
426
+ Create a new data source.
427
+
428
+ Parameters
429
+ ----------
430
+ name : str
431
+ The name of the source.
432
+
433
+ description : typing.Optional[str]
434
+ The description of the source.
435
+
436
+ instructions : typing.Optional[str]
437
+ Instructions for how to use the source.
438
+
439
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
440
+ Metadata associated with the source.
441
+
442
+ embedding : typing.Optional[str]
443
+ The handle for the embedding config used by the source.
444
+
445
+ embedding_chunk_size : typing.Optional[int]
446
+ The chunk size of the embedding.
447
+
448
+ embedding_config : typing.Optional[EmbeddingConfig]
449
+ (Legacy) The embedding configuration used by the source.
450
+
451
+ request_options : typing.Optional[RequestOptions]
452
+ Request-specific configuration.
453
+
454
+ Returns
455
+ -------
456
+ HttpResponse[Source]
457
+ Successful Response
458
+ """
459
+ _response = self._client_wrapper.httpx_client.request(
460
+ "v1/sources/",
461
+ method="POST",
462
+ json={
463
+ "name": name,
464
+ "description": description,
465
+ "instructions": instructions,
466
+ "metadata": metadata,
467
+ "embedding": embedding,
468
+ "embedding_chunk_size": embedding_chunk_size,
469
+ "embedding_config": convert_and_respect_annotation_metadata(
470
+ object_=embedding_config, annotation=EmbeddingConfig, direction="write"
471
+ ),
472
+ },
473
+ headers={
474
+ "content-type": "application/json",
475
+ },
476
+ request_options=request_options,
477
+ omit=OMIT,
478
+ )
479
+ try:
480
+ if 200 <= _response.status_code < 300:
481
+ _data = typing.cast(
482
+ Source,
483
+ construct_type(
484
+ type_=Source, # type: ignore
485
+ object_=_response.json(),
486
+ ),
487
+ )
488
+ return HttpResponse(response=_response, data=_data)
489
+ if _response.status_code == 422:
490
+ raise UnprocessableEntityError(
491
+ headers=dict(_response.headers),
492
+ body=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, headers=dict(_response.headers), body=_response.text)
503
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
504
+
505
+ def get_agents_for_source(
506
+ self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None
507
+ ) -> HttpResponse[typing.List[str]]:
508
+ """
509
+ Get all agent IDs that have the specified source attached.
510
+
511
+ Parameters
512
+ ----------
513
+ source_id : str
514
+
515
+ request_options : typing.Optional[RequestOptions]
516
+ Request-specific configuration.
517
+
518
+ Returns
519
+ -------
520
+ HttpResponse[typing.List[str]]
521
+ Successful Response
522
+ """
523
+ _response = self._client_wrapper.httpx_client.request(
524
+ f"v1/sources/{jsonable_encoder(source_id)}/agents",
525
+ method="GET",
526
+ request_options=request_options,
527
+ )
528
+ try:
529
+ if 200 <= _response.status_code < 300:
530
+ _data = typing.cast(
531
+ typing.List[str],
532
+ construct_type(
533
+ type_=typing.List[str], # type: ignore
534
+ object_=_response.json(),
535
+ ),
536
+ )
537
+ return HttpResponse(response=_response, data=_data)
538
+ if _response.status_code == 422:
539
+ raise UnprocessableEntityError(
540
+ headers=dict(_response.headers),
541
+ body=typing.cast(
542
+ HttpValidationError,
543
+ construct_type(
544
+ type_=HttpValidationError, # type: ignore
545
+ object_=_response.json(),
546
+ ),
547
+ ),
548
+ )
549
+ _response_json = _response.json()
550
+ except JSONDecodeError:
551
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
552
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
553
+
554
+ def get_file_metadata(
555
+ self,
556
+ source_id: str,
557
+ file_id: str,
558
+ *,
559
+ include_content: typing.Optional[bool] = None,
560
+ request_options: typing.Optional[RequestOptions] = None,
561
+ ) -> HttpResponse[FileMetadata]:
562
+ """
563
+ Retrieve metadata for a specific file by its ID.
564
+
565
+ Parameters
566
+ ----------
567
+ source_id : str
568
+
569
+ file_id : str
570
+
571
+ include_content : typing.Optional[bool]
572
+ Whether to include full file content
573
+
574
+ request_options : typing.Optional[RequestOptions]
575
+ Request-specific configuration.
576
+
577
+ Returns
578
+ -------
579
+ HttpResponse[FileMetadata]
580
+ Successful Response
581
+ """
582
+ _response = self._client_wrapper.httpx_client.request(
583
+ f"v1/sources/{jsonable_encoder(source_id)}/files/{jsonable_encoder(file_id)}",
584
+ method="GET",
585
+ params={
586
+ "include_content": include_content,
587
+ },
588
+ request_options=request_options,
589
+ )
590
+ try:
591
+ if 200 <= _response.status_code < 300:
592
+ _data = typing.cast(
593
+ FileMetadata,
594
+ construct_type(
595
+ type_=FileMetadata, # type: ignore
596
+ object_=_response.json(),
597
+ ),
598
+ )
599
+ return HttpResponse(response=_response, data=_data)
600
+ if _response.status_code == 422:
601
+ raise UnprocessableEntityError(
602
+ headers=dict(_response.headers),
603
+ body=typing.cast(
604
+ HttpValidationError,
605
+ construct_type(
606
+ type_=HttpValidationError, # type: ignore
607
+ object_=_response.json(),
608
+ ),
609
+ ),
610
+ )
611
+ _response_json = _response.json()
612
+ except JSONDecodeError:
613
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
614
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
615
+
616
+
617
+ class AsyncRawSourcesClient:
618
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
619
+ self._client_wrapper = client_wrapper
620
+
621
+ async def count(self, *, request_options: typing.Optional[RequestOptions] = None) -> AsyncHttpResponse[int]:
622
+ """
623
+ Count all data sources created by a user.
624
+
625
+ Parameters
626
+ ----------
627
+ request_options : typing.Optional[RequestOptions]
628
+ Request-specific configuration.
629
+
630
+ Returns
631
+ -------
632
+ AsyncHttpResponse[int]
633
+ Successful Response
634
+ """
635
+ _response = await self._client_wrapper.httpx_client.request(
636
+ "v1/sources/count",
637
+ method="GET",
638
+ request_options=request_options,
639
+ )
640
+ try:
641
+ if 200 <= _response.status_code < 300:
642
+ _data = typing.cast(
643
+ int,
644
+ construct_type(
645
+ type_=int, # type: ignore
646
+ object_=_response.json(),
647
+ ),
648
+ )
649
+ return AsyncHttpResponse(response=_response, data=_data)
650
+ if _response.status_code == 422:
651
+ raise UnprocessableEntityError(
652
+ headers=dict(_response.headers),
653
+ body=typing.cast(
654
+ HttpValidationError,
655
+ construct_type(
656
+ type_=HttpValidationError, # type: ignore
657
+ object_=_response.json(),
658
+ ),
659
+ ),
660
+ )
661
+ _response_json = _response.json()
662
+ except JSONDecodeError:
663
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
664
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
665
+
666
+ async def retrieve(
667
+ self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None
668
+ ) -> AsyncHttpResponse[Source]:
669
+ """
670
+ Get all sources
671
+
672
+ Parameters
673
+ ----------
674
+ source_id : str
675
+
676
+ request_options : typing.Optional[RequestOptions]
677
+ Request-specific configuration.
678
+
679
+ Returns
680
+ -------
681
+ AsyncHttpResponse[Source]
682
+ Successful Response
683
+ """
684
+ _response = await self._client_wrapper.httpx_client.request(
685
+ f"v1/sources/{jsonable_encoder(source_id)}",
686
+ method="GET",
687
+ request_options=request_options,
688
+ )
689
+ try:
690
+ if 200 <= _response.status_code < 300:
691
+ _data = typing.cast(
692
+ Source,
693
+ construct_type(
694
+ type_=Source, # type: ignore
695
+ object_=_response.json(),
696
+ ),
697
+ )
698
+ return AsyncHttpResponse(response=_response, data=_data)
699
+ if _response.status_code == 422:
700
+ raise UnprocessableEntityError(
701
+ headers=dict(_response.headers),
702
+ body=typing.cast(
703
+ HttpValidationError,
704
+ construct_type(
705
+ type_=HttpValidationError, # type: ignore
706
+ object_=_response.json(),
707
+ ),
708
+ ),
709
+ )
710
+ _response_json = _response.json()
711
+ except JSONDecodeError:
712
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
713
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
714
+
715
+ async def delete(
716
+ self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None
717
+ ) -> AsyncHttpResponse[typing.Optional[typing.Any]]:
718
+ """
719
+ Delete a data source.
720
+
721
+ Parameters
722
+ ----------
723
+ source_id : str
724
+
725
+ request_options : typing.Optional[RequestOptions]
726
+ Request-specific configuration.
727
+
728
+ Returns
729
+ -------
730
+ AsyncHttpResponse[typing.Optional[typing.Any]]
731
+ Successful Response
732
+ """
733
+ _response = await self._client_wrapper.httpx_client.request(
734
+ f"v1/sources/{jsonable_encoder(source_id)}",
735
+ method="DELETE",
736
+ request_options=request_options,
737
+ )
738
+ try:
739
+ if _response is None or not _response.text.strip():
740
+ return AsyncHttpResponse(response=_response, data=None)
741
+ if 200 <= _response.status_code < 300:
742
+ _data = typing.cast(
743
+ typing.Optional[typing.Any],
744
+ construct_type(
745
+ type_=typing.Optional[typing.Any], # type: ignore
746
+ object_=_response.json(),
747
+ ),
748
+ )
749
+ return AsyncHttpResponse(response=_response, data=_data)
750
+ if _response.status_code == 422:
751
+ raise UnprocessableEntityError(
752
+ headers=dict(_response.headers),
753
+ body=typing.cast(
754
+ HttpValidationError,
755
+ construct_type(
756
+ type_=HttpValidationError, # type: ignore
757
+ object_=_response.json(),
758
+ ),
759
+ ),
760
+ )
761
+ _response_json = _response.json()
762
+ except JSONDecodeError:
763
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
764
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
765
+
766
+ async def modify(
767
+ self,
768
+ source_id: str,
769
+ *,
770
+ name: typing.Optional[str] = OMIT,
771
+ description: typing.Optional[str] = OMIT,
772
+ instructions: typing.Optional[str] = OMIT,
773
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
774
+ embedding_config: typing.Optional[EmbeddingConfig] = OMIT,
775
+ request_options: typing.Optional[RequestOptions] = None,
776
+ ) -> AsyncHttpResponse[Source]:
777
+ """
778
+ Update the name or documentation of an existing data source.
779
+
780
+ Parameters
781
+ ----------
782
+ source_id : str
783
+
784
+ name : typing.Optional[str]
785
+ The name of the source.
786
+
787
+ description : typing.Optional[str]
788
+ The description of the source.
789
+
790
+ instructions : typing.Optional[str]
791
+ Instructions for how to use the source.
792
+
793
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
794
+ Metadata associated with the source.
795
+
796
+ embedding_config : typing.Optional[EmbeddingConfig]
797
+ The embedding configuration used by the source.
798
+
799
+ request_options : typing.Optional[RequestOptions]
800
+ Request-specific configuration.
801
+
802
+ Returns
803
+ -------
804
+ AsyncHttpResponse[Source]
805
+ Successful Response
806
+ """
807
+ _response = await self._client_wrapper.httpx_client.request(
808
+ f"v1/sources/{jsonable_encoder(source_id)}",
809
+ method="PATCH",
810
+ json={
811
+ "name": name,
812
+ "description": description,
813
+ "instructions": instructions,
814
+ "metadata": metadata,
815
+ "embedding_config": convert_and_respect_annotation_metadata(
816
+ object_=embedding_config, annotation=EmbeddingConfig, direction="write"
817
+ ),
818
+ },
819
+ headers={
820
+ "content-type": "application/json",
821
+ },
822
+ request_options=request_options,
823
+ omit=OMIT,
824
+ )
825
+ try:
826
+ if 200 <= _response.status_code < 300:
827
+ _data = typing.cast(
828
+ Source,
829
+ construct_type(
830
+ type_=Source, # type: ignore
831
+ object_=_response.json(),
832
+ ),
833
+ )
834
+ return AsyncHttpResponse(response=_response, data=_data)
835
+ if _response.status_code == 422:
836
+ raise UnprocessableEntityError(
837
+ headers=dict(_response.headers),
838
+ body=typing.cast(
839
+ HttpValidationError,
840
+ construct_type(
841
+ type_=HttpValidationError, # type: ignore
842
+ object_=_response.json(),
843
+ ),
844
+ ),
845
+ )
846
+ _response_json = _response.json()
847
+ except JSONDecodeError:
848
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
849
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
850
+
851
+ async def retrieve_by_name(
852
+ self, source_name: str, *, request_options: typing.Optional[RequestOptions] = None
853
+ ) -> AsyncHttpResponse[str]:
854
+ """
855
+ Get a source by name
856
+
857
+ Parameters
858
+ ----------
859
+ source_name : str
860
+
861
+ request_options : typing.Optional[RequestOptions]
862
+ Request-specific configuration.
863
+
864
+ Returns
865
+ -------
866
+ AsyncHttpResponse[str]
867
+ Successful Response
868
+ """
869
+ _response = await self._client_wrapper.httpx_client.request(
870
+ f"v1/sources/name/{jsonable_encoder(source_name)}",
871
+ method="GET",
872
+ request_options=request_options,
873
+ )
874
+ try:
875
+ if 200 <= _response.status_code < 300:
876
+ _data = typing.cast(
877
+ str,
878
+ construct_type(
879
+ type_=str, # type: ignore
880
+ object_=_response.json(),
881
+ ),
882
+ )
883
+ return AsyncHttpResponse(response=_response, data=_data)
884
+ if _response.status_code == 422:
885
+ raise UnprocessableEntityError(
886
+ headers=dict(_response.headers),
887
+ body=typing.cast(
888
+ HttpValidationError,
889
+ construct_type(
890
+ type_=HttpValidationError, # type: ignore
891
+ object_=_response.json(),
892
+ ),
893
+ ),
894
+ )
895
+ _response_json = _response.json()
896
+ except JSONDecodeError:
897
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
898
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
899
+
900
+ async def get_sources_metadata(
901
+ self,
902
+ *,
903
+ include_detailed_per_source_metadata: typing.Optional[bool] = None,
904
+ request_options: typing.Optional[RequestOptions] = None,
905
+ ) -> AsyncHttpResponse[OrganizationSourcesStats]:
906
+ """
907
+ Get aggregated metadata for all sources in an organization.
908
+
909
+ Returns structured metadata including:
910
+ - Total number of sources
911
+ - Total number of files across all sources
912
+ - Total size of all files
913
+ - Per-source breakdown with file details (file_name, file_size per file) if include_detailed_per_source_metadata is True
914
+
915
+ Parameters
916
+ ----------
917
+ include_detailed_per_source_metadata : typing.Optional[bool]
918
+
919
+ request_options : typing.Optional[RequestOptions]
920
+ Request-specific configuration.
921
+
922
+ Returns
923
+ -------
924
+ AsyncHttpResponse[OrganizationSourcesStats]
925
+ Successful Response
926
+ """
927
+ _response = await self._client_wrapper.httpx_client.request(
928
+ "v1/sources/metadata",
929
+ method="GET",
930
+ params={
931
+ "include_detailed_per_source_metadata": include_detailed_per_source_metadata,
932
+ },
933
+ request_options=request_options,
934
+ )
935
+ try:
936
+ if 200 <= _response.status_code < 300:
937
+ _data = typing.cast(
938
+ OrganizationSourcesStats,
939
+ construct_type(
940
+ type_=OrganizationSourcesStats, # type: ignore
941
+ object_=_response.json(),
942
+ ),
943
+ )
944
+ return AsyncHttpResponse(response=_response, data=_data)
945
+ if _response.status_code == 422:
946
+ raise UnprocessableEntityError(
947
+ headers=dict(_response.headers),
948
+ body=typing.cast(
949
+ HttpValidationError,
950
+ construct_type(
951
+ type_=HttpValidationError, # type: ignore
952
+ object_=_response.json(),
953
+ ),
954
+ ),
955
+ )
956
+ _response_json = _response.json()
957
+ except JSONDecodeError:
958
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
959
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
960
+
961
+ async def list(
962
+ self, *, request_options: typing.Optional[RequestOptions] = None
963
+ ) -> AsyncHttpResponse[typing.List[Source]]:
964
+ """
965
+ List all data sources created by a user.
966
+
967
+ Parameters
968
+ ----------
969
+ request_options : typing.Optional[RequestOptions]
970
+ Request-specific configuration.
971
+
972
+ Returns
973
+ -------
974
+ AsyncHttpResponse[typing.List[Source]]
975
+ Successful Response
976
+ """
977
+ _response = await self._client_wrapper.httpx_client.request(
978
+ "v1/sources/",
979
+ method="GET",
980
+ request_options=request_options,
981
+ )
982
+ try:
983
+ if 200 <= _response.status_code < 300:
984
+ _data = typing.cast(
985
+ typing.List[Source],
986
+ construct_type(
987
+ type_=typing.List[Source], # type: ignore
988
+ object_=_response.json(),
989
+ ),
990
+ )
991
+ return AsyncHttpResponse(response=_response, data=_data)
992
+ if _response.status_code == 422:
993
+ raise UnprocessableEntityError(
994
+ headers=dict(_response.headers),
995
+ body=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, headers=dict(_response.headers), body=_response.text)
1006
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1007
+
1008
+ async def create(
1009
+ self,
1010
+ *,
1011
+ name: str,
1012
+ description: typing.Optional[str] = OMIT,
1013
+ instructions: typing.Optional[str] = OMIT,
1014
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
1015
+ embedding: typing.Optional[str] = OMIT,
1016
+ embedding_chunk_size: typing.Optional[int] = OMIT,
1017
+ embedding_config: typing.Optional[EmbeddingConfig] = OMIT,
1018
+ request_options: typing.Optional[RequestOptions] = None,
1019
+ ) -> AsyncHttpResponse[Source]:
1020
+ """
1021
+ Create a new data source.
1022
+
1023
+ Parameters
1024
+ ----------
1025
+ name : str
1026
+ The name of the source.
1027
+
1028
+ description : typing.Optional[str]
1029
+ The description of the source.
1030
+
1031
+ instructions : typing.Optional[str]
1032
+ Instructions for how to use the source.
1033
+
1034
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
1035
+ Metadata associated with the source.
1036
+
1037
+ embedding : typing.Optional[str]
1038
+ The handle for the embedding config used by the source.
1039
+
1040
+ embedding_chunk_size : typing.Optional[int]
1041
+ The chunk size of the embedding.
1042
+
1043
+ embedding_config : typing.Optional[EmbeddingConfig]
1044
+ (Legacy) The embedding configuration used by the source.
1045
+
1046
+ request_options : typing.Optional[RequestOptions]
1047
+ Request-specific configuration.
1048
+
1049
+ Returns
1050
+ -------
1051
+ AsyncHttpResponse[Source]
1052
+ Successful Response
1053
+ """
1054
+ _response = await self._client_wrapper.httpx_client.request(
1055
+ "v1/sources/",
1056
+ method="POST",
1057
+ json={
1058
+ "name": name,
1059
+ "description": description,
1060
+ "instructions": instructions,
1061
+ "metadata": metadata,
1062
+ "embedding": embedding,
1063
+ "embedding_chunk_size": embedding_chunk_size,
1064
+ "embedding_config": convert_and_respect_annotation_metadata(
1065
+ object_=embedding_config, annotation=EmbeddingConfig, direction="write"
1066
+ ),
1067
+ },
1068
+ headers={
1069
+ "content-type": "application/json",
1070
+ },
1071
+ request_options=request_options,
1072
+ omit=OMIT,
1073
+ )
1074
+ try:
1075
+ if 200 <= _response.status_code < 300:
1076
+ _data = typing.cast(
1077
+ Source,
1078
+ construct_type(
1079
+ type_=Source, # type: ignore
1080
+ object_=_response.json(),
1081
+ ),
1082
+ )
1083
+ return AsyncHttpResponse(response=_response, data=_data)
1084
+ if _response.status_code == 422:
1085
+ raise UnprocessableEntityError(
1086
+ headers=dict(_response.headers),
1087
+ body=typing.cast(
1088
+ HttpValidationError,
1089
+ construct_type(
1090
+ type_=HttpValidationError, # type: ignore
1091
+ object_=_response.json(),
1092
+ ),
1093
+ ),
1094
+ )
1095
+ _response_json = _response.json()
1096
+ except JSONDecodeError:
1097
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1098
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1099
+
1100
+ async def get_agents_for_source(
1101
+ self, source_id: str, *, request_options: typing.Optional[RequestOptions] = None
1102
+ ) -> AsyncHttpResponse[typing.List[str]]:
1103
+ """
1104
+ Get all agent IDs that have the specified source attached.
1105
+
1106
+ Parameters
1107
+ ----------
1108
+ source_id : str
1109
+
1110
+ request_options : typing.Optional[RequestOptions]
1111
+ Request-specific configuration.
1112
+
1113
+ Returns
1114
+ -------
1115
+ AsyncHttpResponse[typing.List[str]]
1116
+ Successful Response
1117
+ """
1118
+ _response = await self._client_wrapper.httpx_client.request(
1119
+ f"v1/sources/{jsonable_encoder(source_id)}/agents",
1120
+ method="GET",
1121
+ request_options=request_options,
1122
+ )
1123
+ try:
1124
+ if 200 <= _response.status_code < 300:
1125
+ _data = typing.cast(
1126
+ typing.List[str],
1127
+ construct_type(
1128
+ type_=typing.List[str], # type: ignore
1129
+ object_=_response.json(),
1130
+ ),
1131
+ )
1132
+ return AsyncHttpResponse(response=_response, data=_data)
1133
+ if _response.status_code == 422:
1134
+ raise UnprocessableEntityError(
1135
+ headers=dict(_response.headers),
1136
+ body=typing.cast(
1137
+ HttpValidationError,
1138
+ construct_type(
1139
+ type_=HttpValidationError, # type: ignore
1140
+ object_=_response.json(),
1141
+ ),
1142
+ ),
1143
+ )
1144
+ _response_json = _response.json()
1145
+ except JSONDecodeError:
1146
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1147
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1148
+
1149
+ async def get_file_metadata(
1150
+ self,
1151
+ source_id: str,
1152
+ file_id: str,
1153
+ *,
1154
+ include_content: typing.Optional[bool] = None,
1155
+ request_options: typing.Optional[RequestOptions] = None,
1156
+ ) -> AsyncHttpResponse[FileMetadata]:
1157
+ """
1158
+ Retrieve metadata for a specific file by its ID.
1159
+
1160
+ Parameters
1161
+ ----------
1162
+ source_id : str
1163
+
1164
+ file_id : str
1165
+
1166
+ include_content : typing.Optional[bool]
1167
+ Whether to include full file content
1168
+
1169
+ request_options : typing.Optional[RequestOptions]
1170
+ Request-specific configuration.
1171
+
1172
+ Returns
1173
+ -------
1174
+ AsyncHttpResponse[FileMetadata]
1175
+ Successful Response
1176
+ """
1177
+ _response = await self._client_wrapper.httpx_client.request(
1178
+ f"v1/sources/{jsonable_encoder(source_id)}/files/{jsonable_encoder(file_id)}",
1179
+ method="GET",
1180
+ params={
1181
+ "include_content": include_content,
1182
+ },
1183
+ request_options=request_options,
1184
+ )
1185
+ try:
1186
+ if 200 <= _response.status_code < 300:
1187
+ _data = typing.cast(
1188
+ FileMetadata,
1189
+ construct_type(
1190
+ type_=FileMetadata, # type: ignore
1191
+ object_=_response.json(),
1192
+ ),
1193
+ )
1194
+ return AsyncHttpResponse(response=_response, data=_data)
1195
+ if _response.status_code == 422:
1196
+ raise UnprocessableEntityError(
1197
+ headers=dict(_response.headers),
1198
+ body=typing.cast(
1199
+ HttpValidationError,
1200
+ construct_type(
1201
+ type_=HttpValidationError, # type: ignore
1202
+ object_=_response.json(),
1203
+ ),
1204
+ ),
1205
+ )
1206
+ _response_json = _response.json()
1207
+ except JSONDecodeError:
1208
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1209
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)