mirascope 2.0.0a5__py3-none-any.whl → 2.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. mirascope/__init__.py +10 -1
  2. mirascope/_stubs.py +363 -0
  3. mirascope/api/__init__.py +8 -0
  4. mirascope/api/_generated/__init__.py +285 -2
  5. mirascope/api/_generated/annotations/__init__.py +33 -0
  6. mirascope/api/_generated/annotations/client.py +506 -0
  7. mirascope/api/_generated/annotations/raw_client.py +1414 -0
  8. mirascope/api/_generated/annotations/types/__init__.py +31 -0
  9. mirascope/api/_generated/annotations/types/annotations_create_request_label.py +5 -0
  10. mirascope/api/_generated/annotations/types/annotations_create_response.py +48 -0
  11. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
  12. mirascope/api/_generated/annotations/types/annotations_get_response.py +48 -0
  13. mirascope/api/_generated/annotations/types/annotations_get_response_label.py +5 -0
  14. mirascope/api/_generated/annotations/types/annotations_list_request_label.py +5 -0
  15. mirascope/api/_generated/annotations/types/annotations_list_response.py +21 -0
  16. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item.py +50 -0
  17. mirascope/api/_generated/annotations/types/annotations_list_response_annotations_item_label.py +5 -0
  18. mirascope/api/_generated/annotations/types/annotations_update_request_label.py +5 -0
  19. mirascope/api/_generated/annotations/types/annotations_update_response.py +48 -0
  20. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
  21. mirascope/api/_generated/api_keys/__init__.py +12 -2
  22. mirascope/api/_generated/api_keys/client.py +77 -0
  23. mirascope/api/_generated/api_keys/raw_client.py +422 -39
  24. mirascope/api/_generated/api_keys/types/__init__.py +7 -1
  25. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +4 -12
  26. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +4 -12
  27. mirascope/api/_generated/api_keys/types/api_keys_list_all_for_org_response_item.py +40 -0
  28. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +4 -12
  29. mirascope/api/_generated/client.py +42 -0
  30. mirascope/api/_generated/core/client_wrapper.py +2 -14
  31. mirascope/api/_generated/core/datetime_utils.py +1 -3
  32. mirascope/api/_generated/core/file.py +2 -5
  33. mirascope/api/_generated/core/http_client.py +36 -112
  34. mirascope/api/_generated/core/jsonable_encoder.py +1 -3
  35. mirascope/api/_generated/core/pydantic_utilities.py +19 -74
  36. mirascope/api/_generated/core/query_encoder.py +1 -3
  37. mirascope/api/_generated/core/serialization.py +4 -10
  38. mirascope/api/_generated/docs/client.py +2 -6
  39. mirascope/api/_generated/docs/raw_client.py +51 -5
  40. mirascope/api/_generated/environment.py +3 -3
  41. mirascope/api/_generated/environments/__init__.py +6 -0
  42. mirascope/api/_generated/environments/client.py +117 -0
  43. mirascope/api/_generated/environments/raw_client.py +530 -51
  44. mirascope/api/_generated/environments/types/__init__.py +10 -0
  45. mirascope/api/_generated/environments/types/environments_create_response.py +1 -3
  46. mirascope/api/_generated/environments/types/environments_get_analytics_response.py +60 -0
  47. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_functions_item.py +24 -0
  48. mirascope/api/_generated/environments/types/environments_get_analytics_response_top_models_item.py +22 -0
  49. mirascope/api/_generated/environments/types/environments_get_response.py +1 -3
  50. mirascope/api/_generated/environments/types/environments_list_response_item.py +1 -3
  51. mirascope/api/_generated/environments/types/environments_update_response.py +1 -3
  52. mirascope/api/_generated/errors/__init__.py +8 -0
  53. mirascope/api/_generated/errors/bad_request_error.py +1 -2
  54. mirascope/api/_generated/errors/conflict_error.py +1 -2
  55. mirascope/api/_generated/errors/forbidden_error.py +1 -5
  56. mirascope/api/_generated/errors/internal_server_error.py +1 -6
  57. mirascope/api/_generated/errors/not_found_error.py +1 -5
  58. mirascope/api/_generated/errors/payment_required_error.py +15 -0
  59. mirascope/api/_generated/errors/service_unavailable_error.py +14 -0
  60. mirascope/api/_generated/errors/too_many_requests_error.py +15 -0
  61. mirascope/api/_generated/errors/unauthorized_error.py +11 -0
  62. mirascope/api/_generated/functions/__init__.py +39 -0
  63. mirascope/api/_generated/functions/client.py +647 -0
  64. mirascope/api/_generated/functions/raw_client.py +1890 -0
  65. mirascope/api/_generated/functions/types/__init__.py +53 -0
  66. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
  67. mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
  68. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
  69. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
  70. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
  71. mirascope/api/_generated/functions/types/functions_get_by_env_response.py +53 -0
  72. mirascope/api/_generated/functions/types/functions_get_by_env_response_dependencies_value.py +22 -0
  73. mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
  74. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
  75. mirascope/api/_generated/functions/types/functions_list_by_env_response.py +25 -0
  76. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item.py +56 -0
  77. mirascope/api/_generated/functions/types/functions_list_by_env_response_functions_item_dependencies_value.py +22 -0
  78. mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
  79. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
  80. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
  81. mirascope/api/_generated/health/client.py +2 -6
  82. mirascope/api/_generated/health/raw_client.py +51 -5
  83. mirascope/api/_generated/health/types/health_check_response.py +1 -3
  84. mirascope/api/_generated/organization_invitations/__init__.py +33 -0
  85. mirascope/api/_generated/organization_invitations/client.py +546 -0
  86. mirascope/api/_generated/organization_invitations/raw_client.py +1519 -0
  87. mirascope/api/_generated/organization_invitations/types/__init__.py +53 -0
  88. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response.py +34 -0
  89. mirascope/api/_generated/organization_invitations/types/organization_invitations_accept_response_role.py +7 -0
  90. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_request_role.py +7 -0
  91. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response.py +48 -0
  92. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_role.py +7 -0
  93. mirascope/api/_generated/organization_invitations/types/organization_invitations_create_response_status.py +7 -0
  94. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response.py +48 -0
  95. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_role.py +7 -0
  96. mirascope/api/_generated/organization_invitations/types/organization_invitations_get_response_status.py +7 -0
  97. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item.py +48 -0
  98. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_role.py +7 -0
  99. mirascope/api/_generated/organization_invitations/types/organization_invitations_list_response_item_status.py +7 -0
  100. mirascope/api/_generated/organization_memberships/__init__.py +19 -0
  101. mirascope/api/_generated/organization_memberships/client.py +302 -0
  102. mirascope/api/_generated/organization_memberships/raw_client.py +736 -0
  103. mirascope/api/_generated/organization_memberships/types/__init__.py +27 -0
  104. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item.py +33 -0
  105. mirascope/api/_generated/organization_memberships/types/organization_memberships_list_response_item_role.py +7 -0
  106. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_request_role.py +7 -0
  107. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response.py +31 -0
  108. mirascope/api/_generated/organization_memberships/types/organization_memberships_update_response_role.py +7 -0
  109. mirascope/api/_generated/organizations/__init__.py +26 -0
  110. mirascope/api/_generated/organizations/client.py +465 -0
  111. mirascope/api/_generated/organizations/raw_client.py +1799 -108
  112. mirascope/api/_generated/organizations/types/__init__.py +48 -0
  113. mirascope/api/_generated/organizations/types/organizations_create_payment_intent_response.py +24 -0
  114. mirascope/api/_generated/organizations/types/organizations_create_response.py +4 -3
  115. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +1 -3
  116. mirascope/api/_generated/organizations/types/organizations_get_response.py +4 -3
  117. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +1 -3
  118. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +4 -3
  119. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +1 -3
  120. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_request_target_plan.py +7 -0
  121. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response.py +47 -0
  122. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item.py +33 -0
  123. mirascope/api/_generated/organizations/types/organizations_preview_subscription_change_response_validation_errors_item_resource.py +7 -0
  124. mirascope/api/_generated/organizations/types/organizations_router_balance_response.py +24 -0
  125. mirascope/api/_generated/organizations/types/organizations_subscription_response.py +53 -0
  126. mirascope/api/_generated/organizations/types/organizations_subscription_response_current_plan.py +7 -0
  127. mirascope/api/_generated/organizations/types/organizations_subscription_response_payment_method.py +26 -0
  128. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change.py +34 -0
  129. mirascope/api/_generated/organizations/types/organizations_subscription_response_scheduled_change_target_plan.py +7 -0
  130. mirascope/api/_generated/organizations/types/organizations_update_response.py +4 -3
  131. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +1 -3
  132. mirascope/api/_generated/organizations/types/organizations_update_subscription_request_target_plan.py +7 -0
  133. mirascope/api/_generated/organizations/types/organizations_update_subscription_response.py +35 -0
  134. mirascope/api/_generated/project_memberships/__init__.py +25 -0
  135. mirascope/api/_generated/project_memberships/client.py +437 -0
  136. mirascope/api/_generated/project_memberships/raw_client.py +1039 -0
  137. mirascope/api/_generated/project_memberships/types/__init__.py +29 -0
  138. mirascope/api/_generated/project_memberships/types/project_memberships_create_request_role.py +7 -0
  139. mirascope/api/_generated/project_memberships/types/project_memberships_create_response.py +35 -0
  140. mirascope/api/_generated/project_memberships/types/project_memberships_create_response_role.py +7 -0
  141. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item.py +33 -0
  142. mirascope/api/_generated/project_memberships/types/project_memberships_list_response_item_role.py +7 -0
  143. mirascope/api/_generated/project_memberships/types/project_memberships_update_request_role.py +7 -0
  144. mirascope/api/_generated/project_memberships/types/project_memberships_update_response.py +35 -0
  145. mirascope/api/_generated/project_memberships/types/project_memberships_update_response_role.py +7 -0
  146. mirascope/api/_generated/projects/__init__.py +2 -12
  147. mirascope/api/_generated/projects/client.py +17 -71
  148. mirascope/api/_generated/projects/raw_client.py +295 -51
  149. mirascope/api/_generated/projects/types/__init__.py +1 -6
  150. mirascope/api/_generated/projects/types/projects_create_response.py +3 -9
  151. mirascope/api/_generated/projects/types/projects_get_response.py +3 -9
  152. mirascope/api/_generated/projects/types/projects_list_response_item.py +3 -9
  153. mirascope/api/_generated/projects/types/projects_update_response.py +3 -9
  154. mirascope/api/_generated/reference.md +3619 -182
  155. mirascope/api/_generated/tags/__init__.py +19 -0
  156. mirascope/api/_generated/tags/client.py +504 -0
  157. mirascope/api/_generated/tags/raw_client.py +1288 -0
  158. mirascope/api/_generated/tags/types/__init__.py +17 -0
  159. mirascope/api/_generated/tags/types/tags_create_response.py +41 -0
  160. mirascope/api/_generated/tags/types/tags_get_response.py +41 -0
  161. mirascope/api/_generated/tags/types/tags_list_response.py +23 -0
  162. mirascope/api/_generated/tags/types/tags_list_response_tags_item.py +41 -0
  163. mirascope/api/_generated/tags/types/tags_update_response.py +41 -0
  164. mirascope/api/_generated/token_cost/__init__.py +7 -0
  165. mirascope/api/_generated/token_cost/client.py +160 -0
  166. mirascope/api/_generated/token_cost/raw_client.py +264 -0
  167. mirascope/api/_generated/token_cost/types/__init__.py +8 -0
  168. mirascope/api/_generated/token_cost/types/token_cost_calculate_request_usage.py +54 -0
  169. mirascope/api/_generated/token_cost/types/token_cost_calculate_response.py +52 -0
  170. mirascope/api/_generated/traces/__init__.py +42 -0
  171. mirascope/api/_generated/traces/client.py +941 -0
  172. mirascope/api/_generated/traces/raw_client.py +2177 -23
  173. mirascope/api/_generated/traces/types/__init__.py +60 -0
  174. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +4 -11
  175. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +2 -6
  176. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +1 -3
  177. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +8 -24
  178. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +2 -6
  179. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +3 -9
  180. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +2 -6
  181. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +3 -9
  182. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +4 -8
  183. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +2 -6
  184. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +8 -24
  185. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +2 -6
  186. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +3 -9
  187. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value_values_item.py +1 -3
  188. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +6 -18
  189. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +3 -9
  190. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +8 -24
  191. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +2 -6
  192. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +2 -6
  193. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value_values_item.py +1 -3
  194. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +2 -6
  195. mirascope/api/_generated/traces/types/traces_create_response.py +2 -5
  196. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +3 -9
  197. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +60 -0
  198. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
  199. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
  200. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response.py +33 -0
  201. mirascope/api/_generated/traces/types/traces_get_trace_detail_by_env_response_spans_item.py +88 -0
  202. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
  203. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +88 -0
  204. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response.py +25 -0
  205. mirascope/api/_generated/traces/types/traces_list_by_function_hash_response_traces_item.py +44 -0
  206. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item.py +26 -0
  207. mirascope/api/_generated/traces/types/traces_search_by_env_request_attribute_filters_item_operator.py +7 -0
  208. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_by.py +7 -0
  209. mirascope/api/_generated/traces/types/traces_search_by_env_request_sort_order.py +7 -0
  210. mirascope/api/_generated/traces/types/traces_search_by_env_response.py +26 -0
  211. mirascope/api/_generated/traces/types/traces_search_by_env_response_spans_item.py +50 -0
  212. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
  213. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
  214. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
  215. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
  216. mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
  217. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +50 -0
  218. mirascope/api/_generated/types/__init__.py +48 -0
  219. mirascope/api/_generated/types/already_exists_error.py +1 -3
  220. mirascope/api/_generated/types/bad_request_error_body.py +50 -0
  221. mirascope/api/_generated/types/click_house_error.py +22 -0
  222. mirascope/api/_generated/types/database_error.py +1 -3
  223. mirascope/api/_generated/types/date.py +3 -0
  224. mirascope/api/_generated/types/http_api_decode_error.py +1 -3
  225. mirascope/api/_generated/types/immutable_resource_error.py +22 -0
  226. mirascope/api/_generated/types/internal_server_error_body.py +49 -0
  227. mirascope/api/_generated/types/issue.py +1 -3
  228. mirascope/api/_generated/types/issue_tag.py +1 -8
  229. mirascope/api/_generated/types/not_found_error_body.py +1 -3
  230. mirascope/api/_generated/types/number_from_string.py +3 -0
  231. mirascope/api/_generated/types/permission_denied_error.py +1 -3
  232. mirascope/api/_generated/types/permission_denied_error_tag.py +1 -3
  233. mirascope/api/_generated/types/plan_limit_exceeded_error.py +32 -0
  234. mirascope/api/_generated/types/plan_limit_exceeded_error_tag.py +7 -0
  235. mirascope/api/_generated/types/pricing_unavailable_error.py +23 -0
  236. mirascope/api/_generated/types/property_key_key.py +1 -3
  237. mirascope/api/_generated/types/rate_limit_error.py +31 -0
  238. mirascope/api/_generated/types/rate_limit_error_tag.py +5 -0
  239. mirascope/api/_generated/types/service_unavailable_error_body.py +24 -0
  240. mirascope/api/_generated/types/service_unavailable_error_tag.py +7 -0
  241. mirascope/api/_generated/types/stripe_error.py +20 -0
  242. mirascope/api/_generated/types/subscription_past_due_error.py +31 -0
  243. mirascope/api/_generated/types/subscription_past_due_error_tag.py +7 -0
  244. mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
  245. mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
  246. mirascope/api/settings.py +19 -1
  247. mirascope/llm/__init__.py +55 -8
  248. mirascope/llm/calls/__init__.py +2 -1
  249. mirascope/llm/calls/calls.py +3 -1
  250. mirascope/llm/calls/decorator.py +21 -7
  251. mirascope/llm/content/tool_call.py +6 -0
  252. mirascope/llm/content/tool_output.py +22 -5
  253. mirascope/llm/exceptions.py +284 -71
  254. mirascope/llm/formatting/__init__.py +19 -2
  255. mirascope/llm/formatting/format.py +219 -30
  256. mirascope/llm/formatting/output_parser.py +178 -0
  257. mirascope/llm/formatting/partial.py +80 -7
  258. mirascope/llm/formatting/primitives.py +192 -0
  259. mirascope/llm/formatting/types.py +21 -64
  260. mirascope/llm/mcp/__init__.py +2 -2
  261. mirascope/llm/mcp/mcp_client.py +130 -0
  262. mirascope/llm/messages/__init__.py +3 -0
  263. mirascope/llm/messages/_utils.py +34 -0
  264. mirascope/llm/models/__init__.py +5 -0
  265. mirascope/llm/models/models.py +137 -69
  266. mirascope/llm/{providers/base → models}/params.py +16 -37
  267. mirascope/llm/models/thinking_config.py +61 -0
  268. mirascope/llm/prompts/_utils.py +0 -32
  269. mirascope/llm/prompts/decorator.py +16 -5
  270. mirascope/llm/prompts/prompts.py +131 -68
  271. mirascope/llm/providers/__init__.py +18 -2
  272. mirascope/llm/providers/anthropic/__init__.py +3 -21
  273. mirascope/llm/providers/anthropic/_utils/__init__.py +2 -0
  274. mirascope/llm/providers/anthropic/_utils/beta_decode.py +22 -11
  275. mirascope/llm/providers/anthropic/_utils/beta_encode.py +75 -25
  276. mirascope/llm/providers/anthropic/_utils/decode.py +22 -11
  277. mirascope/llm/providers/anthropic/_utils/encode.py +82 -20
  278. mirascope/llm/providers/anthropic/_utils/errors.py +2 -2
  279. mirascope/llm/providers/anthropic/beta_provider.py +64 -18
  280. mirascope/llm/providers/anthropic/provider.py +91 -33
  281. mirascope/llm/providers/base/__init__.py +0 -2
  282. mirascope/llm/providers/base/_utils.py +55 -11
  283. mirascope/llm/providers/base/base_provider.py +116 -37
  284. mirascope/llm/providers/google/__init__.py +2 -17
  285. mirascope/llm/providers/google/_utils/__init__.py +2 -0
  286. mirascope/llm/providers/google/_utils/decode.py +37 -15
  287. mirascope/llm/providers/google/_utils/encode.py +127 -19
  288. mirascope/llm/providers/google/_utils/errors.py +3 -2
  289. mirascope/llm/providers/google/model_info.py +1 -0
  290. mirascope/llm/providers/google/provider.py +68 -19
  291. mirascope/llm/providers/mirascope/__init__.py +5 -0
  292. mirascope/llm/providers/mirascope/_utils.py +73 -0
  293. mirascope/llm/providers/mirascope/provider.py +349 -0
  294. mirascope/llm/providers/mlx/__init__.py +2 -17
  295. mirascope/llm/providers/mlx/_utils.py +8 -3
  296. mirascope/llm/providers/mlx/encoding/base.py +5 -2
  297. mirascope/llm/providers/mlx/encoding/transformers.py +5 -2
  298. mirascope/llm/providers/mlx/mlx.py +23 -6
  299. mirascope/llm/providers/mlx/provider.py +42 -13
  300. mirascope/llm/providers/ollama/__init__.py +1 -13
  301. mirascope/llm/providers/openai/_utils/errors.py +2 -2
  302. mirascope/llm/providers/openai/completions/__init__.py +2 -20
  303. mirascope/llm/providers/openai/completions/_utils/decode.py +14 -3
  304. mirascope/llm/providers/openai/completions/_utils/encode.py +35 -28
  305. mirascope/llm/providers/openai/completions/base_provider.py +40 -11
  306. mirascope/llm/providers/openai/provider.py +40 -10
  307. mirascope/llm/providers/openai/responses/__init__.py +1 -17
  308. mirascope/llm/providers/openai/responses/_utils/__init__.py +2 -0
  309. mirascope/llm/providers/openai/responses/_utils/decode.py +21 -8
  310. mirascope/llm/providers/openai/responses/_utils/encode.py +59 -19
  311. mirascope/llm/providers/openai/responses/provider.py +56 -18
  312. mirascope/llm/providers/provider_id.py +1 -0
  313. mirascope/llm/providers/provider_registry.py +96 -19
  314. mirascope/llm/providers/together/__init__.py +1 -13
  315. mirascope/llm/responses/__init__.py +6 -1
  316. mirascope/llm/responses/_utils.py +102 -12
  317. mirascope/llm/responses/base_response.py +5 -2
  318. mirascope/llm/responses/base_stream_response.py +139 -45
  319. mirascope/llm/responses/response.py +2 -1
  320. mirascope/llm/responses/root_response.py +89 -17
  321. mirascope/llm/responses/stream_response.py +6 -9
  322. mirascope/llm/tools/decorator.py +17 -8
  323. mirascope/llm/tools/tool_schema.py +43 -10
  324. mirascope/llm/tools/toolkit.py +35 -27
  325. mirascope/llm/tools/tools.py +123 -30
  326. mirascope/ops/__init__.py +64 -109
  327. mirascope/ops/_internal/configuration.py +82 -31
  328. mirascope/ops/_internal/exporters/exporters.py +64 -11
  329. mirascope/ops/_internal/instrumentation/llm/common.py +530 -0
  330. mirascope/ops/_internal/instrumentation/llm/cost.py +190 -0
  331. mirascope/ops/_internal/instrumentation/llm/encode.py +1 -1
  332. mirascope/ops/_internal/instrumentation/llm/llm.py +116 -1243
  333. mirascope/ops/_internal/instrumentation/llm/model.py +1798 -0
  334. mirascope/ops/_internal/instrumentation/llm/response.py +521 -0
  335. mirascope/ops/_internal/instrumentation/llm/serialize.py +300 -0
  336. mirascope/ops/_internal/protocols.py +83 -1
  337. mirascope/ops/_internal/traced_calls.py +4 -0
  338. mirascope/ops/_internal/traced_functions.py +141 -12
  339. mirascope/ops/_internal/tracing.py +78 -1
  340. mirascope/ops/_internal/utils.py +52 -4
  341. mirascope/ops/_internal/versioned_functions.py +54 -43
  342. {mirascope-2.0.0a5.dist-info → mirascope-2.0.1.dist-info}/METADATA +14 -13
  343. mirascope-2.0.1.dist-info/RECORD +423 -0
  344. {mirascope-2.0.0a5.dist-info → mirascope-2.0.1.dist-info}/licenses/LICENSE +1 -1
  345. mirascope/llm/formatting/_utils.py +0 -78
  346. mirascope/llm/mcp/client.py +0 -118
  347. mirascope/llm/providers/_missing_import_stubs.py +0 -49
  348. mirascope-2.0.0a5.dist-info/RECORD +0 -265
  349. {mirascope-2.0.0a5.dist-info → mirascope-2.0.1.dist-info}/WHEEL +0 -0
@@ -14,15 +14,36 @@ from ..errors.conflict_error import ConflictError
14
14
  from ..errors.forbidden_error import ForbiddenError
15
15
  from ..errors.internal_server_error import InternalServerError
16
16
  from ..errors.not_found_error import NotFoundError
17
- from ..types.already_exists_error import AlreadyExistsError
18
- from ..types.database_error import DatabaseError
19
- from ..types.http_api_decode_error import HttpApiDecodeError
17
+ from ..errors.payment_required_error import PaymentRequiredError
18
+ from ..errors.service_unavailable_error import ServiceUnavailableError
19
+ from ..errors.too_many_requests_error import TooManyRequestsError
20
20
  from ..types.not_found_error_body import NotFoundErrorBody
21
21
  from ..types.permission_denied_error import PermissionDeniedError
22
+ from ..types.plan_limit_exceeded_error import PlanLimitExceededError
23
+ from ..types.rate_limit_error import RateLimitError
24
+ from .types.organizations_create_payment_intent_response import (
25
+ OrganizationsCreatePaymentIntentResponse,
26
+ )
22
27
  from .types.organizations_create_response import OrganizationsCreateResponse
23
28
  from .types.organizations_get_response import OrganizationsGetResponse
24
29
  from .types.organizations_list_response_item import OrganizationsListResponseItem
30
+ from .types.organizations_preview_subscription_change_request_target_plan import (
31
+ OrganizationsPreviewSubscriptionChangeRequestTargetPlan,
32
+ )
33
+ from .types.organizations_preview_subscription_change_response import (
34
+ OrganizationsPreviewSubscriptionChangeResponse,
35
+ )
36
+ from .types.organizations_router_balance_response import (
37
+ OrganizationsRouterBalanceResponse,
38
+ )
39
+ from .types.organizations_subscription_response import OrganizationsSubscriptionResponse
25
40
  from .types.organizations_update_response import OrganizationsUpdateResponse
41
+ from .types.organizations_update_subscription_request_target_plan import (
42
+ OrganizationsUpdateSubscriptionRequestTargetPlan,
43
+ )
44
+ from .types.organizations_update_subscription_response import (
45
+ OrganizationsUpdateSubscriptionResponse,
46
+ )
26
47
 
27
48
  # this is used as the default value for optional parameters
28
49
  OMIT = typing.cast(typing.Any, ...)
@@ -65,9 +86,20 @@ class RawOrganizationsClient:
65
86
  raise BadRequestError(
66
87
  headers=dict(_response.headers),
67
88
  body=typing.cast(
68
- HttpApiDecodeError,
89
+ typing.Optional[typing.Any],
69
90
  parse_obj_as(
70
- type_=HttpApiDecodeError, # type: ignore
91
+ type_=typing.Optional[typing.Any], # type: ignore
92
+ object_=_response.json(),
93
+ ),
94
+ ),
95
+ )
96
+ if _response.status_code == 429:
97
+ raise TooManyRequestsError(
98
+ headers=dict(_response.headers),
99
+ body=typing.cast(
100
+ RateLimitError,
101
+ parse_obj_as(
102
+ type_=RateLimitError, # type: ignore
71
103
  object_=_response.json(),
72
104
  ),
73
105
  ),
@@ -76,9 +108,20 @@ class RawOrganizationsClient:
76
108
  raise InternalServerError(
77
109
  headers=dict(_response.headers),
78
110
  body=typing.cast(
79
- DatabaseError,
111
+ typing.Optional[typing.Any],
112
+ parse_obj_as(
113
+ type_=typing.Optional[typing.Any], # type: ignore
114
+ object_=_response.json(),
115
+ ),
116
+ ),
117
+ )
118
+ if _response.status_code == 503:
119
+ raise ServiceUnavailableError(
120
+ headers=dict(_response.headers),
121
+ body=typing.cast(
122
+ typing.Optional[typing.Any],
80
123
  parse_obj_as(
81
- type_=DatabaseError, # type: ignore
124
+ type_=typing.Optional[typing.Any], # type: ignore
82
125
  object_=_response.json(),
83
126
  ),
84
127
  ),
@@ -147,9 +190,20 @@ class RawOrganizationsClient:
147
190
  raise BadRequestError(
148
191
  headers=dict(_response.headers),
149
192
  body=typing.cast(
150
- HttpApiDecodeError,
193
+ typing.Optional[typing.Any],
194
+ parse_obj_as(
195
+ type_=typing.Optional[typing.Any], # type: ignore
196
+ object_=_response.json(),
197
+ ),
198
+ ),
199
+ )
200
+ if _response.status_code == 404:
201
+ raise NotFoundError(
202
+ headers=dict(_response.headers),
203
+ body=typing.cast(
204
+ NotFoundErrorBody,
151
205
  parse_obj_as(
152
- type_=HttpApiDecodeError, # type: ignore
206
+ type_=NotFoundErrorBody, # type: ignore
153
207
  object_=_response.json(),
154
208
  ),
155
209
  ),
@@ -158,9 +212,20 @@ class RawOrganizationsClient:
158
212
  raise ConflictError(
159
213
  headers=dict(_response.headers),
160
214
  body=typing.cast(
161
- AlreadyExistsError,
215
+ typing.Optional[typing.Any],
216
+ parse_obj_as(
217
+ type_=typing.Optional[typing.Any], # type: ignore
218
+ object_=_response.json(),
219
+ ),
220
+ ),
221
+ )
222
+ if _response.status_code == 429:
223
+ raise TooManyRequestsError(
224
+ headers=dict(_response.headers),
225
+ body=typing.cast(
226
+ RateLimitError,
162
227
  parse_obj_as(
163
- type_=AlreadyExistsError, # type: ignore
228
+ type_=RateLimitError, # type: ignore
164
229
  object_=_response.json(),
165
230
  ),
166
231
  ),
@@ -169,9 +234,20 @@ class RawOrganizationsClient:
169
234
  raise InternalServerError(
170
235
  headers=dict(_response.headers),
171
236
  body=typing.cast(
172
- DatabaseError,
237
+ typing.Optional[typing.Any],
173
238
  parse_obj_as(
174
- type_=DatabaseError, # type: ignore
239
+ type_=typing.Optional[typing.Any], # type: ignore
240
+ object_=_response.json(),
241
+ ),
242
+ ),
243
+ )
244
+ if _response.status_code == 503:
245
+ raise ServiceUnavailableError(
246
+ headers=dict(_response.headers),
247
+ body=typing.cast(
248
+ typing.Optional[typing.Any],
249
+ parse_obj_as(
250
+ type_=typing.Optional[typing.Any], # type: ignore
175
251
  object_=_response.json(),
176
252
  ),
177
253
  ),
@@ -224,9 +300,9 @@ class RawOrganizationsClient:
224
300
  raise BadRequestError(
225
301
  headers=dict(_response.headers),
226
302
  body=typing.cast(
227
- HttpApiDecodeError,
303
+ typing.Optional[typing.Any],
228
304
  parse_obj_as(
229
- type_=HttpApiDecodeError, # type: ignore
305
+ type_=typing.Optional[typing.Any], # type: ignore
230
306
  object_=_response.json(),
231
307
  ),
232
308
  ),
@@ -253,13 +329,35 @@ class RawOrganizationsClient:
253
329
  ),
254
330
  ),
255
331
  )
332
+ if _response.status_code == 429:
333
+ raise TooManyRequestsError(
334
+ headers=dict(_response.headers),
335
+ body=typing.cast(
336
+ RateLimitError,
337
+ parse_obj_as(
338
+ type_=RateLimitError, # type: ignore
339
+ object_=_response.json(),
340
+ ),
341
+ ),
342
+ )
256
343
  if _response.status_code == 500:
257
344
  raise InternalServerError(
258
345
  headers=dict(_response.headers),
259
346
  body=typing.cast(
260
- DatabaseError,
347
+ typing.Optional[typing.Any],
348
+ parse_obj_as(
349
+ type_=typing.Optional[typing.Any], # type: ignore
350
+ object_=_response.json(),
351
+ ),
352
+ ),
353
+ )
354
+ if _response.status_code == 503:
355
+ raise ServiceUnavailableError(
356
+ headers=dict(_response.headers),
357
+ body=typing.cast(
358
+ typing.Optional[typing.Any],
261
359
  parse_obj_as(
262
- type_=DatabaseError, # type: ignore
360
+ type_=typing.Optional[typing.Any], # type: ignore
263
361
  object_=_response.json(),
264
362
  ),
265
363
  ),
@@ -331,9 +429,9 @@ class RawOrganizationsClient:
331
429
  raise BadRequestError(
332
430
  headers=dict(_response.headers),
333
431
  body=typing.cast(
334
- HttpApiDecodeError,
432
+ typing.Optional[typing.Any],
335
433
  parse_obj_as(
336
- type_=HttpApiDecodeError, # type: ignore
434
+ type_=typing.Optional[typing.Any], # type: ignore
337
435
  object_=_response.json(),
338
436
  ),
339
437
  ),
@@ -360,13 +458,35 @@ class RawOrganizationsClient:
360
458
  ),
361
459
  ),
362
460
  )
461
+ if _response.status_code == 429:
462
+ raise TooManyRequestsError(
463
+ headers=dict(_response.headers),
464
+ body=typing.cast(
465
+ RateLimitError,
466
+ parse_obj_as(
467
+ type_=RateLimitError, # type: ignore
468
+ object_=_response.json(),
469
+ ),
470
+ ),
471
+ )
363
472
  if _response.status_code == 500:
364
473
  raise InternalServerError(
365
474
  headers=dict(_response.headers),
366
475
  body=typing.cast(
367
- DatabaseError,
476
+ typing.Optional[typing.Any],
477
+ parse_obj_as(
478
+ type_=typing.Optional[typing.Any], # type: ignore
479
+ object_=_response.json(),
480
+ ),
481
+ ),
482
+ )
483
+ if _response.status_code == 503:
484
+ raise ServiceUnavailableError(
485
+ headers=dict(_response.headers),
486
+ body=typing.cast(
487
+ typing.Optional[typing.Any],
368
488
  parse_obj_as(
369
- type_=DatabaseError, # type: ignore
489
+ type_=typing.Optional[typing.Any], # type: ignore
370
490
  object_=_response.json(),
371
491
  ),
372
492
  ),
@@ -411,9 +531,9 @@ class RawOrganizationsClient:
411
531
  raise BadRequestError(
412
532
  headers=dict(_response.headers),
413
533
  body=typing.cast(
414
- HttpApiDecodeError,
534
+ typing.Optional[typing.Any],
415
535
  parse_obj_as(
416
- type_=HttpApiDecodeError, # type: ignore
536
+ type_=typing.Optional[typing.Any], # type: ignore
417
537
  object_=_response.json(),
418
538
  ),
419
539
  ),
@@ -440,13 +560,46 @@ class RawOrganizationsClient:
440
560
  ),
441
561
  ),
442
562
  )
563
+ if _response.status_code == 409:
564
+ raise ConflictError(
565
+ headers=dict(_response.headers),
566
+ body=typing.cast(
567
+ typing.Optional[typing.Any],
568
+ parse_obj_as(
569
+ type_=typing.Optional[typing.Any], # type: ignore
570
+ object_=_response.json(),
571
+ ),
572
+ ),
573
+ )
574
+ if _response.status_code == 429:
575
+ raise TooManyRequestsError(
576
+ headers=dict(_response.headers),
577
+ body=typing.cast(
578
+ RateLimitError,
579
+ parse_obj_as(
580
+ type_=RateLimitError, # type: ignore
581
+ object_=_response.json(),
582
+ ),
583
+ ),
584
+ )
443
585
  if _response.status_code == 500:
444
586
  raise InternalServerError(
445
587
  headers=dict(_response.headers),
446
588
  body=typing.cast(
447
- DatabaseError,
589
+ typing.Optional[typing.Any],
590
+ parse_obj_as(
591
+ type_=typing.Optional[typing.Any], # type: ignore
592
+ object_=_response.json(),
593
+ ),
594
+ ),
595
+ )
596
+ if _response.status_code == 503:
597
+ raise ServiceUnavailableError(
598
+ headers=dict(_response.headers),
599
+ body=typing.cast(
600
+ typing.Optional[typing.Any],
448
601
  parse_obj_as(
449
- type_=DatabaseError, # type: ignore
602
+ type_=typing.Optional[typing.Any], # type: ignore
450
603
  object_=_response.json(),
451
604
  ),
452
605
  ),
@@ -464,47 +617,77 @@ class RawOrganizationsClient:
464
617
  body=_response_json,
465
618
  )
466
619
 
467
-
468
- class AsyncRawOrganizationsClient:
469
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
470
- self._client_wrapper = client_wrapper
471
-
472
- async def list(
473
- self, *, request_options: typing.Optional[RequestOptions] = None
474
- ) -> AsyncHttpResponse[typing.List[OrganizationsListResponseItem]]:
620
+ def routerbalance(
621
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
622
+ ) -> HttpResponse[OrganizationsRouterBalanceResponse]:
475
623
  """
476
624
  Parameters
477
625
  ----------
626
+ id : str
627
+
478
628
  request_options : typing.Optional[RequestOptions]
479
629
  Request-specific configuration.
480
630
 
481
631
  Returns
482
632
  -------
483
- AsyncHttpResponse[typing.List[OrganizationsListResponseItem]]
633
+ HttpResponse[OrganizationsRouterBalanceResponse]
484
634
  Success
485
635
  """
486
- _response = await self._client_wrapper.httpx_client.request(
487
- "organizations",
636
+ _response = self._client_wrapper.httpx_client.request(
637
+ f"organizations/{jsonable_encoder(id)}/router-balance",
488
638
  method="GET",
489
639
  request_options=request_options,
490
640
  )
491
641
  try:
492
642
  if 200 <= _response.status_code < 300:
493
643
  _data = typing.cast(
494
- typing.List[OrganizationsListResponseItem],
644
+ OrganizationsRouterBalanceResponse,
495
645
  parse_obj_as(
496
- type_=typing.List[OrganizationsListResponseItem], # type: ignore
646
+ type_=OrganizationsRouterBalanceResponse, # type: ignore
497
647
  object_=_response.json(),
498
648
  ),
499
649
  )
500
- return AsyncHttpResponse(response=_response, data=_data)
650
+ return HttpResponse(response=_response, data=_data)
501
651
  if _response.status_code == 400:
502
652
  raise BadRequestError(
503
653
  headers=dict(_response.headers),
504
654
  body=typing.cast(
505
- HttpApiDecodeError,
655
+ typing.Optional[typing.Any],
656
+ parse_obj_as(
657
+ type_=typing.Optional[typing.Any], # type: ignore
658
+ object_=_response.json(),
659
+ ),
660
+ ),
661
+ )
662
+ if _response.status_code == 403:
663
+ raise ForbiddenError(
664
+ headers=dict(_response.headers),
665
+ body=typing.cast(
666
+ PermissionDeniedError,
667
+ parse_obj_as(
668
+ type_=PermissionDeniedError, # type: ignore
669
+ object_=_response.json(),
670
+ ),
671
+ ),
672
+ )
673
+ if _response.status_code == 404:
674
+ raise NotFoundError(
675
+ headers=dict(_response.headers),
676
+ body=typing.cast(
677
+ NotFoundErrorBody,
678
+ parse_obj_as(
679
+ type_=NotFoundErrorBody, # type: ignore
680
+ object_=_response.json(),
681
+ ),
682
+ ),
683
+ )
684
+ if _response.status_code == 429:
685
+ raise TooManyRequestsError(
686
+ headers=dict(_response.headers),
687
+ body=typing.cast(
688
+ RateLimitError,
506
689
  parse_obj_as(
507
- type_=HttpApiDecodeError, # type: ignore
690
+ type_=RateLimitError, # type: ignore
508
691
  object_=_response.json(),
509
692
  ),
510
693
  ),
@@ -513,9 +696,20 @@ class AsyncRawOrganizationsClient:
513
696
  raise InternalServerError(
514
697
  headers=dict(_response.headers),
515
698
  body=typing.cast(
516
- DatabaseError,
699
+ typing.Optional[typing.Any],
700
+ parse_obj_as(
701
+ type_=typing.Optional[typing.Any], # type: ignore
702
+ object_=_response.json(),
703
+ ),
704
+ ),
705
+ )
706
+ if _response.status_code == 503:
707
+ raise ServiceUnavailableError(
708
+ headers=dict(_response.headers),
709
+ body=typing.cast(
710
+ typing.Optional[typing.Any],
517
711
  parse_obj_as(
518
- type_=DatabaseError, # type: ignore
712
+ type_=typing.Optional[typing.Any], # type: ignore
519
713
  object_=_response.json(),
520
714
  ),
521
715
  ),
@@ -533,36 +727,34 @@ class AsyncRawOrganizationsClient:
533
727
  body=_response_json,
534
728
  )
535
729
 
536
- async def create(
730
+ def createpaymentintent(
537
731
  self,
732
+ id: str,
538
733
  *,
539
- name: str,
540
- slug: str,
734
+ amount: float,
541
735
  request_options: typing.Optional[RequestOptions] = None,
542
- ) -> AsyncHttpResponse[OrganizationsCreateResponse]:
736
+ ) -> HttpResponse[OrganizationsCreatePaymentIntentResponse]:
543
737
  """
544
738
  Parameters
545
739
  ----------
546
- name : str
547
- a string at most 100 character(s) long
740
+ id : str
548
741
 
549
- slug : str
550
- a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
742
+ amount : float
743
+ a positive number
551
744
 
552
745
  request_options : typing.Optional[RequestOptions]
553
746
  Request-specific configuration.
554
747
 
555
748
  Returns
556
749
  -------
557
- AsyncHttpResponse[OrganizationsCreateResponse]
750
+ HttpResponse[OrganizationsCreatePaymentIntentResponse]
558
751
  Success
559
752
  """
560
- _response = await self._client_wrapper.httpx_client.request(
561
- "organizations",
753
+ _response = self._client_wrapper.httpx_client.request(
754
+ f"organizations/{jsonable_encoder(id)}/credits/payment-intent",
562
755
  method="POST",
563
756
  json={
564
- "name": name,
565
- "slug": slug,
757
+ "amount": amount,
566
758
  },
567
759
  headers={
568
760
  "content-type": "application/json",
@@ -573,31 +765,53 @@ class AsyncRawOrganizationsClient:
573
765
  try:
574
766
  if 200 <= _response.status_code < 300:
575
767
  _data = typing.cast(
576
- OrganizationsCreateResponse,
768
+ OrganizationsCreatePaymentIntentResponse,
577
769
  parse_obj_as(
578
- type_=OrganizationsCreateResponse, # type: ignore
770
+ type_=OrganizationsCreatePaymentIntentResponse, # type: ignore
579
771
  object_=_response.json(),
580
772
  ),
581
773
  )
582
- return AsyncHttpResponse(response=_response, data=_data)
774
+ return HttpResponse(response=_response, data=_data)
583
775
  if _response.status_code == 400:
584
776
  raise BadRequestError(
585
777
  headers=dict(_response.headers),
586
778
  body=typing.cast(
587
- HttpApiDecodeError,
779
+ typing.Optional[typing.Any],
588
780
  parse_obj_as(
589
- type_=HttpApiDecodeError, # type: ignore
781
+ type_=typing.Optional[typing.Any], # type: ignore
590
782
  object_=_response.json(),
591
783
  ),
592
784
  ),
593
785
  )
594
- if _response.status_code == 409:
595
- raise ConflictError(
786
+ if _response.status_code == 403:
787
+ raise ForbiddenError(
788
+ headers=dict(_response.headers),
789
+ body=typing.cast(
790
+ PermissionDeniedError,
791
+ parse_obj_as(
792
+ type_=PermissionDeniedError, # type: ignore
793
+ object_=_response.json(),
794
+ ),
795
+ ),
796
+ )
797
+ if _response.status_code == 404:
798
+ raise NotFoundError(
799
+ headers=dict(_response.headers),
800
+ body=typing.cast(
801
+ NotFoundErrorBody,
802
+ parse_obj_as(
803
+ type_=NotFoundErrorBody, # type: ignore
804
+ object_=_response.json(),
805
+ ),
806
+ ),
807
+ )
808
+ if _response.status_code == 429:
809
+ raise TooManyRequestsError(
596
810
  headers=dict(_response.headers),
597
811
  body=typing.cast(
598
- AlreadyExistsError,
812
+ RateLimitError,
599
813
  parse_obj_as(
600
- type_=AlreadyExistsError, # type: ignore
814
+ type_=RateLimitError, # type: ignore
601
815
  object_=_response.json(),
602
816
  ),
603
817
  ),
@@ -606,9 +820,20 @@ class AsyncRawOrganizationsClient:
606
820
  raise InternalServerError(
607
821
  headers=dict(_response.headers),
608
822
  body=typing.cast(
609
- DatabaseError,
823
+ typing.Optional[typing.Any],
824
+ parse_obj_as(
825
+ type_=typing.Optional[typing.Any], # type: ignore
826
+ object_=_response.json(),
827
+ ),
828
+ ),
829
+ )
830
+ if _response.status_code == 503:
831
+ raise ServiceUnavailableError(
832
+ headers=dict(_response.headers),
833
+ body=typing.cast(
834
+ typing.Optional[typing.Any],
610
835
  parse_obj_as(
611
- type_=DatabaseError, # type: ignore
836
+ type_=typing.Optional[typing.Any], # type: ignore
612
837
  object_=_response.json(),
613
838
  ),
614
839
  ),
@@ -626,9 +851,9 @@ class AsyncRawOrganizationsClient:
626
851
  body=_response_json,
627
852
  )
628
853
 
629
- async def get(
854
+ def subscription(
630
855
  self, id: str, *, request_options: typing.Optional[RequestOptions] = None
631
- ) -> AsyncHttpResponse[OrganizationsGetResponse]:
856
+ ) -> HttpResponse[OrganizationsSubscriptionResponse]:
632
857
  """
633
858
  Parameters
634
859
  ----------
@@ -639,31 +864,31 @@ class AsyncRawOrganizationsClient:
639
864
 
640
865
  Returns
641
866
  -------
642
- AsyncHttpResponse[OrganizationsGetResponse]
867
+ HttpResponse[OrganizationsSubscriptionResponse]
643
868
  Success
644
869
  """
645
- _response = await self._client_wrapper.httpx_client.request(
646
- f"organizations/{jsonable_encoder(id)}",
870
+ _response = self._client_wrapper.httpx_client.request(
871
+ f"organizations/{jsonable_encoder(id)}/subscription",
647
872
  method="GET",
648
873
  request_options=request_options,
649
874
  )
650
875
  try:
651
876
  if 200 <= _response.status_code < 300:
652
877
  _data = typing.cast(
653
- OrganizationsGetResponse,
878
+ OrganizationsSubscriptionResponse,
654
879
  parse_obj_as(
655
- type_=OrganizationsGetResponse, # type: ignore
880
+ type_=OrganizationsSubscriptionResponse, # type: ignore
656
881
  object_=_response.json(),
657
882
  ),
658
883
  )
659
- return AsyncHttpResponse(response=_response, data=_data)
884
+ return HttpResponse(response=_response, data=_data)
660
885
  if _response.status_code == 400:
661
886
  raise BadRequestError(
662
887
  headers=dict(_response.headers),
663
888
  body=typing.cast(
664
- HttpApiDecodeError,
889
+ typing.Optional[typing.Any],
665
890
  parse_obj_as(
666
- type_=HttpApiDecodeError, # type: ignore
891
+ type_=typing.Optional[typing.Any], # type: ignore
667
892
  object_=_response.json(),
668
893
  ),
669
894
  ),
@@ -690,13 +915,35 @@ class AsyncRawOrganizationsClient:
690
915
  ),
691
916
  ),
692
917
  )
918
+ if _response.status_code == 429:
919
+ raise TooManyRequestsError(
920
+ headers=dict(_response.headers),
921
+ body=typing.cast(
922
+ RateLimitError,
923
+ parse_obj_as(
924
+ type_=RateLimitError, # type: ignore
925
+ object_=_response.json(),
926
+ ),
927
+ ),
928
+ )
693
929
  if _response.status_code == 500:
694
930
  raise InternalServerError(
695
931
  headers=dict(_response.headers),
696
932
  body=typing.cast(
697
- DatabaseError,
933
+ typing.Optional[typing.Any],
934
+ parse_obj_as(
935
+ type_=typing.Optional[typing.Any], # type: ignore
936
+ object_=_response.json(),
937
+ ),
938
+ ),
939
+ )
940
+ if _response.status_code == 503:
941
+ raise ServiceUnavailableError(
942
+ headers=dict(_response.headers),
943
+ body=typing.cast(
944
+ typing.Optional[typing.Any],
698
945
  parse_obj_as(
699
- type_=DatabaseError, # type: ignore
946
+ type_=typing.Optional[typing.Any], # type: ignore
700
947
  object_=_response.json(),
701
948
  ),
702
949
  ),
@@ -714,39 +961,33 @@ class AsyncRawOrganizationsClient:
714
961
  body=_response_json,
715
962
  )
716
963
 
717
- async def update(
964
+ def previewsubscriptionchange(
718
965
  self,
719
966
  id: str,
720
967
  *,
721
- name: typing.Optional[str] = OMIT,
722
- slug: typing.Optional[str] = OMIT,
968
+ target_plan: OrganizationsPreviewSubscriptionChangeRequestTargetPlan,
723
969
  request_options: typing.Optional[RequestOptions] = None,
724
- ) -> AsyncHttpResponse[OrganizationsUpdateResponse]:
970
+ ) -> HttpResponse[OrganizationsPreviewSubscriptionChangeResponse]:
725
971
  """
726
972
  Parameters
727
973
  ----------
728
974
  id : str
729
975
 
730
- name : typing.Optional[str]
731
- a string at most 100 character(s) long
732
-
733
- slug : typing.Optional[str]
734
- a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
976
+ target_plan : OrganizationsPreviewSubscriptionChangeRequestTargetPlan
735
977
 
736
978
  request_options : typing.Optional[RequestOptions]
737
979
  Request-specific configuration.
738
980
 
739
981
  Returns
740
982
  -------
741
- AsyncHttpResponse[OrganizationsUpdateResponse]
983
+ HttpResponse[OrganizationsPreviewSubscriptionChangeResponse]
742
984
  Success
743
985
  """
744
- _response = await self._client_wrapper.httpx_client.request(
745
- f"organizations/{jsonable_encoder(id)}",
746
- method="PUT",
986
+ _response = self._client_wrapper.httpx_client.request(
987
+ f"organizations/{jsonable_encoder(id)}/subscription/preview",
988
+ method="POST",
747
989
  json={
748
- "name": name,
749
- "slug": slug,
990
+ "targetPlan": target_plan,
750
991
  },
751
992
  headers={
752
993
  "content-type": "application/json",
@@ -757,20 +998,20 @@ class AsyncRawOrganizationsClient:
757
998
  try:
758
999
  if 200 <= _response.status_code < 300:
759
1000
  _data = typing.cast(
760
- OrganizationsUpdateResponse,
1001
+ OrganizationsPreviewSubscriptionChangeResponse,
761
1002
  parse_obj_as(
762
- type_=OrganizationsUpdateResponse, # type: ignore
1003
+ type_=OrganizationsPreviewSubscriptionChangeResponse, # type: ignore
763
1004
  object_=_response.json(),
764
1005
  ),
765
1006
  )
766
- return AsyncHttpResponse(response=_response, data=_data)
1007
+ return HttpResponse(response=_response, data=_data)
767
1008
  if _response.status_code == 400:
768
1009
  raise BadRequestError(
769
1010
  headers=dict(_response.headers),
770
1011
  body=typing.cast(
771
- HttpApiDecodeError,
1012
+ typing.Optional[typing.Any],
772
1013
  parse_obj_as(
773
- type_=HttpApiDecodeError, # type: ignore
1014
+ type_=typing.Optional[typing.Any], # type: ignore
774
1015
  object_=_response.json(),
775
1016
  ),
776
1017
  ),
@@ -797,13 +1038,35 @@ class AsyncRawOrganizationsClient:
797
1038
  ),
798
1039
  ),
799
1040
  )
1041
+ if _response.status_code == 429:
1042
+ raise TooManyRequestsError(
1043
+ headers=dict(_response.headers),
1044
+ body=typing.cast(
1045
+ RateLimitError,
1046
+ parse_obj_as(
1047
+ type_=RateLimitError, # type: ignore
1048
+ object_=_response.json(),
1049
+ ),
1050
+ ),
1051
+ )
800
1052
  if _response.status_code == 500:
801
1053
  raise InternalServerError(
802
1054
  headers=dict(_response.headers),
803
1055
  body=typing.cast(
804
- DatabaseError,
1056
+ typing.Optional[typing.Any],
805
1057
  parse_obj_as(
806
- type_=DatabaseError, # type: ignore
1058
+ type_=typing.Optional[typing.Any], # type: ignore
1059
+ object_=_response.json(),
1060
+ ),
1061
+ ),
1062
+ )
1063
+ if _response.status_code == 503:
1064
+ raise ServiceUnavailableError(
1065
+ headers=dict(_response.headers),
1066
+ body=typing.cast(
1067
+ typing.Optional[typing.Any],
1068
+ parse_obj_as(
1069
+ type_=typing.Optional[typing.Any], # type: ignore
807
1070
  object_=_response.json(),
808
1071
  ),
809
1072
  ),
@@ -821,7 +1084,1413 @@ class AsyncRawOrganizationsClient:
821
1084
  body=_response_json,
822
1085
  )
823
1086
 
824
- async def delete(
1087
+ def updatesubscription(
1088
+ self,
1089
+ id: str,
1090
+ *,
1091
+ target_plan: OrganizationsUpdateSubscriptionRequestTargetPlan,
1092
+ request_options: typing.Optional[RequestOptions] = None,
1093
+ ) -> HttpResponse[OrganizationsUpdateSubscriptionResponse]:
1094
+ """
1095
+ Parameters
1096
+ ----------
1097
+ id : str
1098
+
1099
+ target_plan : OrganizationsUpdateSubscriptionRequestTargetPlan
1100
+
1101
+ request_options : typing.Optional[RequestOptions]
1102
+ Request-specific configuration.
1103
+
1104
+ Returns
1105
+ -------
1106
+ HttpResponse[OrganizationsUpdateSubscriptionResponse]
1107
+ Success
1108
+ """
1109
+ _response = self._client_wrapper.httpx_client.request(
1110
+ f"organizations/{jsonable_encoder(id)}/subscription/update",
1111
+ method="POST",
1112
+ json={
1113
+ "targetPlan": target_plan,
1114
+ },
1115
+ headers={
1116
+ "content-type": "application/json",
1117
+ },
1118
+ request_options=request_options,
1119
+ omit=OMIT,
1120
+ )
1121
+ try:
1122
+ if 200 <= _response.status_code < 300:
1123
+ _data = typing.cast(
1124
+ OrganizationsUpdateSubscriptionResponse,
1125
+ parse_obj_as(
1126
+ type_=OrganizationsUpdateSubscriptionResponse, # type: ignore
1127
+ object_=_response.json(),
1128
+ ),
1129
+ )
1130
+ return HttpResponse(response=_response, data=_data)
1131
+ if _response.status_code == 400:
1132
+ raise BadRequestError(
1133
+ headers=dict(_response.headers),
1134
+ body=typing.cast(
1135
+ typing.Optional[typing.Any],
1136
+ parse_obj_as(
1137
+ type_=typing.Optional[typing.Any], # type: ignore
1138
+ object_=_response.json(),
1139
+ ),
1140
+ ),
1141
+ )
1142
+ if _response.status_code == 402:
1143
+ raise PaymentRequiredError(
1144
+ headers=dict(_response.headers),
1145
+ body=typing.cast(
1146
+ PlanLimitExceededError,
1147
+ parse_obj_as(
1148
+ type_=PlanLimitExceededError, # type: ignore
1149
+ object_=_response.json(),
1150
+ ),
1151
+ ),
1152
+ )
1153
+ if _response.status_code == 403:
1154
+ raise ForbiddenError(
1155
+ headers=dict(_response.headers),
1156
+ body=typing.cast(
1157
+ PermissionDeniedError,
1158
+ parse_obj_as(
1159
+ type_=PermissionDeniedError, # type: ignore
1160
+ object_=_response.json(),
1161
+ ),
1162
+ ),
1163
+ )
1164
+ if _response.status_code == 404:
1165
+ raise NotFoundError(
1166
+ headers=dict(_response.headers),
1167
+ body=typing.cast(
1168
+ NotFoundErrorBody,
1169
+ parse_obj_as(
1170
+ type_=NotFoundErrorBody, # type: ignore
1171
+ object_=_response.json(),
1172
+ ),
1173
+ ),
1174
+ )
1175
+ if _response.status_code == 429:
1176
+ raise TooManyRequestsError(
1177
+ headers=dict(_response.headers),
1178
+ body=typing.cast(
1179
+ RateLimitError,
1180
+ parse_obj_as(
1181
+ type_=RateLimitError, # type: ignore
1182
+ object_=_response.json(),
1183
+ ),
1184
+ ),
1185
+ )
1186
+ if _response.status_code == 500:
1187
+ raise InternalServerError(
1188
+ headers=dict(_response.headers),
1189
+ body=typing.cast(
1190
+ typing.Optional[typing.Any],
1191
+ parse_obj_as(
1192
+ type_=typing.Optional[typing.Any], # type: ignore
1193
+ object_=_response.json(),
1194
+ ),
1195
+ ),
1196
+ )
1197
+ if _response.status_code == 503:
1198
+ raise ServiceUnavailableError(
1199
+ headers=dict(_response.headers),
1200
+ body=typing.cast(
1201
+ typing.Optional[typing.Any],
1202
+ parse_obj_as(
1203
+ type_=typing.Optional[typing.Any], # type: ignore
1204
+ object_=_response.json(),
1205
+ ),
1206
+ ),
1207
+ )
1208
+ _response_json = _response.json()
1209
+ except JSONDecodeError:
1210
+ raise ApiError(
1211
+ status_code=_response.status_code,
1212
+ headers=dict(_response.headers),
1213
+ body=_response.text,
1214
+ )
1215
+ raise ApiError(
1216
+ status_code=_response.status_code,
1217
+ headers=dict(_response.headers),
1218
+ body=_response_json,
1219
+ )
1220
+
1221
+ def cancelscheduleddowngrade(
1222
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
1223
+ ) -> HttpResponse[None]:
1224
+ """
1225
+ Parameters
1226
+ ----------
1227
+ id : str
1228
+
1229
+ request_options : typing.Optional[RequestOptions]
1230
+ Request-specific configuration.
1231
+
1232
+ Returns
1233
+ -------
1234
+ HttpResponse[None]
1235
+ """
1236
+ _response = self._client_wrapper.httpx_client.request(
1237
+ f"organizations/{jsonable_encoder(id)}/subscription/cancel-downgrade",
1238
+ method="POST",
1239
+ request_options=request_options,
1240
+ )
1241
+ try:
1242
+ if 200 <= _response.status_code < 300:
1243
+ return HttpResponse(response=_response, data=None)
1244
+ if _response.status_code == 400:
1245
+ raise BadRequestError(
1246
+ headers=dict(_response.headers),
1247
+ body=typing.cast(
1248
+ typing.Optional[typing.Any],
1249
+ parse_obj_as(
1250
+ type_=typing.Optional[typing.Any], # type: ignore
1251
+ object_=_response.json(),
1252
+ ),
1253
+ ),
1254
+ )
1255
+ if _response.status_code == 403:
1256
+ raise ForbiddenError(
1257
+ headers=dict(_response.headers),
1258
+ body=typing.cast(
1259
+ PermissionDeniedError,
1260
+ parse_obj_as(
1261
+ type_=PermissionDeniedError, # type: ignore
1262
+ object_=_response.json(),
1263
+ ),
1264
+ ),
1265
+ )
1266
+ if _response.status_code == 404:
1267
+ raise NotFoundError(
1268
+ headers=dict(_response.headers),
1269
+ body=typing.cast(
1270
+ NotFoundErrorBody,
1271
+ parse_obj_as(
1272
+ type_=NotFoundErrorBody, # type: ignore
1273
+ object_=_response.json(),
1274
+ ),
1275
+ ),
1276
+ )
1277
+ if _response.status_code == 429:
1278
+ raise TooManyRequestsError(
1279
+ headers=dict(_response.headers),
1280
+ body=typing.cast(
1281
+ RateLimitError,
1282
+ parse_obj_as(
1283
+ type_=RateLimitError, # type: ignore
1284
+ object_=_response.json(),
1285
+ ),
1286
+ ),
1287
+ )
1288
+ if _response.status_code == 500:
1289
+ raise InternalServerError(
1290
+ headers=dict(_response.headers),
1291
+ body=typing.cast(
1292
+ typing.Optional[typing.Any],
1293
+ parse_obj_as(
1294
+ type_=typing.Optional[typing.Any], # type: ignore
1295
+ object_=_response.json(),
1296
+ ),
1297
+ ),
1298
+ )
1299
+ if _response.status_code == 503:
1300
+ raise ServiceUnavailableError(
1301
+ headers=dict(_response.headers),
1302
+ body=typing.cast(
1303
+ typing.Optional[typing.Any],
1304
+ parse_obj_as(
1305
+ type_=typing.Optional[typing.Any], # type: ignore
1306
+ object_=_response.json(),
1307
+ ),
1308
+ ),
1309
+ )
1310
+ _response_json = _response.json()
1311
+ except JSONDecodeError:
1312
+ raise ApiError(
1313
+ status_code=_response.status_code,
1314
+ headers=dict(_response.headers),
1315
+ body=_response.text,
1316
+ )
1317
+ raise ApiError(
1318
+ status_code=_response.status_code,
1319
+ headers=dict(_response.headers),
1320
+ body=_response_json,
1321
+ )
1322
+
1323
+
1324
+ class AsyncRawOrganizationsClient:
1325
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
1326
+ self._client_wrapper = client_wrapper
1327
+
1328
+ async def list(
1329
+ self, *, request_options: typing.Optional[RequestOptions] = None
1330
+ ) -> AsyncHttpResponse[typing.List[OrganizationsListResponseItem]]:
1331
+ """
1332
+ Parameters
1333
+ ----------
1334
+ request_options : typing.Optional[RequestOptions]
1335
+ Request-specific configuration.
1336
+
1337
+ Returns
1338
+ -------
1339
+ AsyncHttpResponse[typing.List[OrganizationsListResponseItem]]
1340
+ Success
1341
+ """
1342
+ _response = await self._client_wrapper.httpx_client.request(
1343
+ "organizations",
1344
+ method="GET",
1345
+ request_options=request_options,
1346
+ )
1347
+ try:
1348
+ if 200 <= _response.status_code < 300:
1349
+ _data = typing.cast(
1350
+ typing.List[OrganizationsListResponseItem],
1351
+ parse_obj_as(
1352
+ type_=typing.List[OrganizationsListResponseItem], # type: ignore
1353
+ object_=_response.json(),
1354
+ ),
1355
+ )
1356
+ return AsyncHttpResponse(response=_response, data=_data)
1357
+ if _response.status_code == 400:
1358
+ raise BadRequestError(
1359
+ headers=dict(_response.headers),
1360
+ body=typing.cast(
1361
+ typing.Optional[typing.Any],
1362
+ parse_obj_as(
1363
+ type_=typing.Optional[typing.Any], # type: ignore
1364
+ object_=_response.json(),
1365
+ ),
1366
+ ),
1367
+ )
1368
+ if _response.status_code == 429:
1369
+ raise TooManyRequestsError(
1370
+ headers=dict(_response.headers),
1371
+ body=typing.cast(
1372
+ RateLimitError,
1373
+ parse_obj_as(
1374
+ type_=RateLimitError, # type: ignore
1375
+ object_=_response.json(),
1376
+ ),
1377
+ ),
1378
+ )
1379
+ if _response.status_code == 500:
1380
+ raise InternalServerError(
1381
+ headers=dict(_response.headers),
1382
+ body=typing.cast(
1383
+ typing.Optional[typing.Any],
1384
+ parse_obj_as(
1385
+ type_=typing.Optional[typing.Any], # type: ignore
1386
+ object_=_response.json(),
1387
+ ),
1388
+ ),
1389
+ )
1390
+ if _response.status_code == 503:
1391
+ raise ServiceUnavailableError(
1392
+ headers=dict(_response.headers),
1393
+ body=typing.cast(
1394
+ typing.Optional[typing.Any],
1395
+ parse_obj_as(
1396
+ type_=typing.Optional[typing.Any], # type: ignore
1397
+ object_=_response.json(),
1398
+ ),
1399
+ ),
1400
+ )
1401
+ _response_json = _response.json()
1402
+ except JSONDecodeError:
1403
+ raise ApiError(
1404
+ status_code=_response.status_code,
1405
+ headers=dict(_response.headers),
1406
+ body=_response.text,
1407
+ )
1408
+ raise ApiError(
1409
+ status_code=_response.status_code,
1410
+ headers=dict(_response.headers),
1411
+ body=_response_json,
1412
+ )
1413
+
1414
+ async def create(
1415
+ self,
1416
+ *,
1417
+ name: str,
1418
+ slug: str,
1419
+ request_options: typing.Optional[RequestOptions] = None,
1420
+ ) -> AsyncHttpResponse[OrganizationsCreateResponse]:
1421
+ """
1422
+ Parameters
1423
+ ----------
1424
+ name : str
1425
+ a string at most 100 character(s) long
1426
+
1427
+ slug : str
1428
+ a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
1429
+
1430
+ request_options : typing.Optional[RequestOptions]
1431
+ Request-specific configuration.
1432
+
1433
+ Returns
1434
+ -------
1435
+ AsyncHttpResponse[OrganizationsCreateResponse]
1436
+ Success
1437
+ """
1438
+ _response = await self._client_wrapper.httpx_client.request(
1439
+ "organizations",
1440
+ method="POST",
1441
+ json={
1442
+ "name": name,
1443
+ "slug": slug,
1444
+ },
1445
+ headers={
1446
+ "content-type": "application/json",
1447
+ },
1448
+ request_options=request_options,
1449
+ omit=OMIT,
1450
+ )
1451
+ try:
1452
+ if 200 <= _response.status_code < 300:
1453
+ _data = typing.cast(
1454
+ OrganizationsCreateResponse,
1455
+ parse_obj_as(
1456
+ type_=OrganizationsCreateResponse, # type: ignore
1457
+ object_=_response.json(),
1458
+ ),
1459
+ )
1460
+ return AsyncHttpResponse(response=_response, data=_data)
1461
+ if _response.status_code == 400:
1462
+ raise BadRequestError(
1463
+ headers=dict(_response.headers),
1464
+ body=typing.cast(
1465
+ typing.Optional[typing.Any],
1466
+ parse_obj_as(
1467
+ type_=typing.Optional[typing.Any], # type: ignore
1468
+ object_=_response.json(),
1469
+ ),
1470
+ ),
1471
+ )
1472
+ if _response.status_code == 404:
1473
+ raise NotFoundError(
1474
+ headers=dict(_response.headers),
1475
+ body=typing.cast(
1476
+ NotFoundErrorBody,
1477
+ parse_obj_as(
1478
+ type_=NotFoundErrorBody, # type: ignore
1479
+ object_=_response.json(),
1480
+ ),
1481
+ ),
1482
+ )
1483
+ if _response.status_code == 409:
1484
+ raise ConflictError(
1485
+ headers=dict(_response.headers),
1486
+ body=typing.cast(
1487
+ typing.Optional[typing.Any],
1488
+ parse_obj_as(
1489
+ type_=typing.Optional[typing.Any], # type: ignore
1490
+ object_=_response.json(),
1491
+ ),
1492
+ ),
1493
+ )
1494
+ if _response.status_code == 429:
1495
+ raise TooManyRequestsError(
1496
+ headers=dict(_response.headers),
1497
+ body=typing.cast(
1498
+ RateLimitError,
1499
+ parse_obj_as(
1500
+ type_=RateLimitError, # type: ignore
1501
+ object_=_response.json(),
1502
+ ),
1503
+ ),
1504
+ )
1505
+ if _response.status_code == 500:
1506
+ raise InternalServerError(
1507
+ headers=dict(_response.headers),
1508
+ body=typing.cast(
1509
+ typing.Optional[typing.Any],
1510
+ parse_obj_as(
1511
+ type_=typing.Optional[typing.Any], # type: ignore
1512
+ object_=_response.json(),
1513
+ ),
1514
+ ),
1515
+ )
1516
+ if _response.status_code == 503:
1517
+ raise ServiceUnavailableError(
1518
+ headers=dict(_response.headers),
1519
+ body=typing.cast(
1520
+ typing.Optional[typing.Any],
1521
+ parse_obj_as(
1522
+ type_=typing.Optional[typing.Any], # type: ignore
1523
+ object_=_response.json(),
1524
+ ),
1525
+ ),
1526
+ )
1527
+ _response_json = _response.json()
1528
+ except JSONDecodeError:
1529
+ raise ApiError(
1530
+ status_code=_response.status_code,
1531
+ headers=dict(_response.headers),
1532
+ body=_response.text,
1533
+ )
1534
+ raise ApiError(
1535
+ status_code=_response.status_code,
1536
+ headers=dict(_response.headers),
1537
+ body=_response_json,
1538
+ )
1539
+
1540
+ async def get(
1541
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
1542
+ ) -> AsyncHttpResponse[OrganizationsGetResponse]:
1543
+ """
1544
+ Parameters
1545
+ ----------
1546
+ id : str
1547
+
1548
+ request_options : typing.Optional[RequestOptions]
1549
+ Request-specific configuration.
1550
+
1551
+ Returns
1552
+ -------
1553
+ AsyncHttpResponse[OrganizationsGetResponse]
1554
+ Success
1555
+ """
1556
+ _response = await self._client_wrapper.httpx_client.request(
1557
+ f"organizations/{jsonable_encoder(id)}",
1558
+ method="GET",
1559
+ request_options=request_options,
1560
+ )
1561
+ try:
1562
+ if 200 <= _response.status_code < 300:
1563
+ _data = typing.cast(
1564
+ OrganizationsGetResponse,
1565
+ parse_obj_as(
1566
+ type_=OrganizationsGetResponse, # type: ignore
1567
+ object_=_response.json(),
1568
+ ),
1569
+ )
1570
+ return AsyncHttpResponse(response=_response, data=_data)
1571
+ if _response.status_code == 400:
1572
+ raise BadRequestError(
1573
+ headers=dict(_response.headers),
1574
+ body=typing.cast(
1575
+ typing.Optional[typing.Any],
1576
+ parse_obj_as(
1577
+ type_=typing.Optional[typing.Any], # type: ignore
1578
+ object_=_response.json(),
1579
+ ),
1580
+ ),
1581
+ )
1582
+ if _response.status_code == 403:
1583
+ raise ForbiddenError(
1584
+ headers=dict(_response.headers),
1585
+ body=typing.cast(
1586
+ PermissionDeniedError,
1587
+ parse_obj_as(
1588
+ type_=PermissionDeniedError, # type: ignore
1589
+ object_=_response.json(),
1590
+ ),
1591
+ ),
1592
+ )
1593
+ if _response.status_code == 404:
1594
+ raise NotFoundError(
1595
+ headers=dict(_response.headers),
1596
+ body=typing.cast(
1597
+ NotFoundErrorBody,
1598
+ parse_obj_as(
1599
+ type_=NotFoundErrorBody, # type: ignore
1600
+ object_=_response.json(),
1601
+ ),
1602
+ ),
1603
+ )
1604
+ if _response.status_code == 429:
1605
+ raise TooManyRequestsError(
1606
+ headers=dict(_response.headers),
1607
+ body=typing.cast(
1608
+ RateLimitError,
1609
+ parse_obj_as(
1610
+ type_=RateLimitError, # type: ignore
1611
+ object_=_response.json(),
1612
+ ),
1613
+ ),
1614
+ )
1615
+ if _response.status_code == 500:
1616
+ raise InternalServerError(
1617
+ headers=dict(_response.headers),
1618
+ body=typing.cast(
1619
+ typing.Optional[typing.Any],
1620
+ parse_obj_as(
1621
+ type_=typing.Optional[typing.Any], # type: ignore
1622
+ object_=_response.json(),
1623
+ ),
1624
+ ),
1625
+ )
1626
+ if _response.status_code == 503:
1627
+ raise ServiceUnavailableError(
1628
+ headers=dict(_response.headers),
1629
+ body=typing.cast(
1630
+ typing.Optional[typing.Any],
1631
+ parse_obj_as(
1632
+ type_=typing.Optional[typing.Any], # type: ignore
1633
+ object_=_response.json(),
1634
+ ),
1635
+ ),
1636
+ )
1637
+ _response_json = _response.json()
1638
+ except JSONDecodeError:
1639
+ raise ApiError(
1640
+ status_code=_response.status_code,
1641
+ headers=dict(_response.headers),
1642
+ body=_response.text,
1643
+ )
1644
+ raise ApiError(
1645
+ status_code=_response.status_code,
1646
+ headers=dict(_response.headers),
1647
+ body=_response_json,
1648
+ )
1649
+
1650
+ async def update(
1651
+ self,
1652
+ id: str,
1653
+ *,
1654
+ name: typing.Optional[str] = OMIT,
1655
+ slug: typing.Optional[str] = OMIT,
1656
+ request_options: typing.Optional[RequestOptions] = None,
1657
+ ) -> AsyncHttpResponse[OrganizationsUpdateResponse]:
1658
+ """
1659
+ Parameters
1660
+ ----------
1661
+ id : str
1662
+
1663
+ name : typing.Optional[str]
1664
+ a string at most 100 character(s) long
1665
+
1666
+ slug : typing.Optional[str]
1667
+ a string matching the pattern ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
1668
+
1669
+ request_options : typing.Optional[RequestOptions]
1670
+ Request-specific configuration.
1671
+
1672
+ Returns
1673
+ -------
1674
+ AsyncHttpResponse[OrganizationsUpdateResponse]
1675
+ Success
1676
+ """
1677
+ _response = await self._client_wrapper.httpx_client.request(
1678
+ f"organizations/{jsonable_encoder(id)}",
1679
+ method="PUT",
1680
+ json={
1681
+ "name": name,
1682
+ "slug": slug,
1683
+ },
1684
+ headers={
1685
+ "content-type": "application/json",
1686
+ },
1687
+ request_options=request_options,
1688
+ omit=OMIT,
1689
+ )
1690
+ try:
1691
+ if 200 <= _response.status_code < 300:
1692
+ _data = typing.cast(
1693
+ OrganizationsUpdateResponse,
1694
+ parse_obj_as(
1695
+ type_=OrganizationsUpdateResponse, # type: ignore
1696
+ object_=_response.json(),
1697
+ ),
1698
+ )
1699
+ return AsyncHttpResponse(response=_response, data=_data)
1700
+ if _response.status_code == 400:
1701
+ raise BadRequestError(
1702
+ headers=dict(_response.headers),
1703
+ body=typing.cast(
1704
+ typing.Optional[typing.Any],
1705
+ parse_obj_as(
1706
+ type_=typing.Optional[typing.Any], # type: ignore
1707
+ object_=_response.json(),
1708
+ ),
1709
+ ),
1710
+ )
1711
+ if _response.status_code == 403:
1712
+ raise ForbiddenError(
1713
+ headers=dict(_response.headers),
1714
+ body=typing.cast(
1715
+ PermissionDeniedError,
1716
+ parse_obj_as(
1717
+ type_=PermissionDeniedError, # type: ignore
1718
+ object_=_response.json(),
1719
+ ),
1720
+ ),
1721
+ )
1722
+ if _response.status_code == 404:
1723
+ raise NotFoundError(
1724
+ headers=dict(_response.headers),
1725
+ body=typing.cast(
1726
+ NotFoundErrorBody,
1727
+ parse_obj_as(
1728
+ type_=NotFoundErrorBody, # type: ignore
1729
+ object_=_response.json(),
1730
+ ),
1731
+ ),
1732
+ )
1733
+ if _response.status_code == 429:
1734
+ raise TooManyRequestsError(
1735
+ headers=dict(_response.headers),
1736
+ body=typing.cast(
1737
+ RateLimitError,
1738
+ parse_obj_as(
1739
+ type_=RateLimitError, # type: ignore
1740
+ object_=_response.json(),
1741
+ ),
1742
+ ),
1743
+ )
1744
+ if _response.status_code == 500:
1745
+ raise InternalServerError(
1746
+ headers=dict(_response.headers),
1747
+ body=typing.cast(
1748
+ typing.Optional[typing.Any],
1749
+ parse_obj_as(
1750
+ type_=typing.Optional[typing.Any], # type: ignore
1751
+ object_=_response.json(),
1752
+ ),
1753
+ ),
1754
+ )
1755
+ if _response.status_code == 503:
1756
+ raise ServiceUnavailableError(
1757
+ headers=dict(_response.headers),
1758
+ body=typing.cast(
1759
+ typing.Optional[typing.Any],
1760
+ parse_obj_as(
1761
+ type_=typing.Optional[typing.Any], # type: ignore
1762
+ object_=_response.json(),
1763
+ ),
1764
+ ),
1765
+ )
1766
+ _response_json = _response.json()
1767
+ except JSONDecodeError:
1768
+ raise ApiError(
1769
+ status_code=_response.status_code,
1770
+ headers=dict(_response.headers),
1771
+ body=_response.text,
1772
+ )
1773
+ raise ApiError(
1774
+ status_code=_response.status_code,
1775
+ headers=dict(_response.headers),
1776
+ body=_response_json,
1777
+ )
1778
+
1779
+ async def delete(
1780
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
1781
+ ) -> AsyncHttpResponse[None]:
1782
+ """
1783
+ Parameters
1784
+ ----------
1785
+ id : str
1786
+
1787
+ request_options : typing.Optional[RequestOptions]
1788
+ Request-specific configuration.
1789
+
1790
+ Returns
1791
+ -------
1792
+ AsyncHttpResponse[None]
1793
+ """
1794
+ _response = await self._client_wrapper.httpx_client.request(
1795
+ f"organizations/{jsonable_encoder(id)}",
1796
+ method="DELETE",
1797
+ request_options=request_options,
1798
+ )
1799
+ try:
1800
+ if 200 <= _response.status_code < 300:
1801
+ return AsyncHttpResponse(response=_response, data=None)
1802
+ if _response.status_code == 400:
1803
+ raise BadRequestError(
1804
+ headers=dict(_response.headers),
1805
+ body=typing.cast(
1806
+ typing.Optional[typing.Any],
1807
+ parse_obj_as(
1808
+ type_=typing.Optional[typing.Any], # type: ignore
1809
+ object_=_response.json(),
1810
+ ),
1811
+ ),
1812
+ )
1813
+ if _response.status_code == 403:
1814
+ raise ForbiddenError(
1815
+ headers=dict(_response.headers),
1816
+ body=typing.cast(
1817
+ PermissionDeniedError,
1818
+ parse_obj_as(
1819
+ type_=PermissionDeniedError, # type: ignore
1820
+ object_=_response.json(),
1821
+ ),
1822
+ ),
1823
+ )
1824
+ if _response.status_code == 404:
1825
+ raise NotFoundError(
1826
+ headers=dict(_response.headers),
1827
+ body=typing.cast(
1828
+ NotFoundErrorBody,
1829
+ parse_obj_as(
1830
+ type_=NotFoundErrorBody, # type: ignore
1831
+ object_=_response.json(),
1832
+ ),
1833
+ ),
1834
+ )
1835
+ if _response.status_code == 409:
1836
+ raise ConflictError(
1837
+ headers=dict(_response.headers),
1838
+ body=typing.cast(
1839
+ typing.Optional[typing.Any],
1840
+ parse_obj_as(
1841
+ type_=typing.Optional[typing.Any], # type: ignore
1842
+ object_=_response.json(),
1843
+ ),
1844
+ ),
1845
+ )
1846
+ if _response.status_code == 429:
1847
+ raise TooManyRequestsError(
1848
+ headers=dict(_response.headers),
1849
+ body=typing.cast(
1850
+ RateLimitError,
1851
+ parse_obj_as(
1852
+ type_=RateLimitError, # type: ignore
1853
+ object_=_response.json(),
1854
+ ),
1855
+ ),
1856
+ )
1857
+ if _response.status_code == 500:
1858
+ raise InternalServerError(
1859
+ headers=dict(_response.headers),
1860
+ body=typing.cast(
1861
+ typing.Optional[typing.Any],
1862
+ parse_obj_as(
1863
+ type_=typing.Optional[typing.Any], # type: ignore
1864
+ object_=_response.json(),
1865
+ ),
1866
+ ),
1867
+ )
1868
+ if _response.status_code == 503:
1869
+ raise ServiceUnavailableError(
1870
+ headers=dict(_response.headers),
1871
+ body=typing.cast(
1872
+ typing.Optional[typing.Any],
1873
+ parse_obj_as(
1874
+ type_=typing.Optional[typing.Any], # type: ignore
1875
+ object_=_response.json(),
1876
+ ),
1877
+ ),
1878
+ )
1879
+ _response_json = _response.json()
1880
+ except JSONDecodeError:
1881
+ raise ApiError(
1882
+ status_code=_response.status_code,
1883
+ headers=dict(_response.headers),
1884
+ body=_response.text,
1885
+ )
1886
+ raise ApiError(
1887
+ status_code=_response.status_code,
1888
+ headers=dict(_response.headers),
1889
+ body=_response_json,
1890
+ )
1891
+
1892
+ async def routerbalance(
1893
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
1894
+ ) -> AsyncHttpResponse[OrganizationsRouterBalanceResponse]:
1895
+ """
1896
+ Parameters
1897
+ ----------
1898
+ id : str
1899
+
1900
+ request_options : typing.Optional[RequestOptions]
1901
+ Request-specific configuration.
1902
+
1903
+ Returns
1904
+ -------
1905
+ AsyncHttpResponse[OrganizationsRouterBalanceResponse]
1906
+ Success
1907
+ """
1908
+ _response = await self._client_wrapper.httpx_client.request(
1909
+ f"organizations/{jsonable_encoder(id)}/router-balance",
1910
+ method="GET",
1911
+ request_options=request_options,
1912
+ )
1913
+ try:
1914
+ if 200 <= _response.status_code < 300:
1915
+ _data = typing.cast(
1916
+ OrganizationsRouterBalanceResponse,
1917
+ parse_obj_as(
1918
+ type_=OrganizationsRouterBalanceResponse, # type: ignore
1919
+ object_=_response.json(),
1920
+ ),
1921
+ )
1922
+ return AsyncHttpResponse(response=_response, data=_data)
1923
+ if _response.status_code == 400:
1924
+ raise BadRequestError(
1925
+ headers=dict(_response.headers),
1926
+ body=typing.cast(
1927
+ typing.Optional[typing.Any],
1928
+ parse_obj_as(
1929
+ type_=typing.Optional[typing.Any], # type: ignore
1930
+ object_=_response.json(),
1931
+ ),
1932
+ ),
1933
+ )
1934
+ if _response.status_code == 403:
1935
+ raise ForbiddenError(
1936
+ headers=dict(_response.headers),
1937
+ body=typing.cast(
1938
+ PermissionDeniedError,
1939
+ parse_obj_as(
1940
+ type_=PermissionDeniedError, # type: ignore
1941
+ object_=_response.json(),
1942
+ ),
1943
+ ),
1944
+ )
1945
+ if _response.status_code == 404:
1946
+ raise NotFoundError(
1947
+ headers=dict(_response.headers),
1948
+ body=typing.cast(
1949
+ NotFoundErrorBody,
1950
+ parse_obj_as(
1951
+ type_=NotFoundErrorBody, # type: ignore
1952
+ object_=_response.json(),
1953
+ ),
1954
+ ),
1955
+ )
1956
+ if _response.status_code == 429:
1957
+ raise TooManyRequestsError(
1958
+ headers=dict(_response.headers),
1959
+ body=typing.cast(
1960
+ RateLimitError,
1961
+ parse_obj_as(
1962
+ type_=RateLimitError, # type: ignore
1963
+ object_=_response.json(),
1964
+ ),
1965
+ ),
1966
+ )
1967
+ if _response.status_code == 500:
1968
+ raise InternalServerError(
1969
+ headers=dict(_response.headers),
1970
+ body=typing.cast(
1971
+ typing.Optional[typing.Any],
1972
+ parse_obj_as(
1973
+ type_=typing.Optional[typing.Any], # type: ignore
1974
+ object_=_response.json(),
1975
+ ),
1976
+ ),
1977
+ )
1978
+ if _response.status_code == 503:
1979
+ raise ServiceUnavailableError(
1980
+ headers=dict(_response.headers),
1981
+ body=typing.cast(
1982
+ typing.Optional[typing.Any],
1983
+ parse_obj_as(
1984
+ type_=typing.Optional[typing.Any], # type: ignore
1985
+ object_=_response.json(),
1986
+ ),
1987
+ ),
1988
+ )
1989
+ _response_json = _response.json()
1990
+ except JSONDecodeError:
1991
+ raise ApiError(
1992
+ status_code=_response.status_code,
1993
+ headers=dict(_response.headers),
1994
+ body=_response.text,
1995
+ )
1996
+ raise ApiError(
1997
+ status_code=_response.status_code,
1998
+ headers=dict(_response.headers),
1999
+ body=_response_json,
2000
+ )
2001
+
2002
+ async def createpaymentintent(
2003
+ self,
2004
+ id: str,
2005
+ *,
2006
+ amount: float,
2007
+ request_options: typing.Optional[RequestOptions] = None,
2008
+ ) -> AsyncHttpResponse[OrganizationsCreatePaymentIntentResponse]:
2009
+ """
2010
+ Parameters
2011
+ ----------
2012
+ id : str
2013
+
2014
+ amount : float
2015
+ a positive number
2016
+
2017
+ request_options : typing.Optional[RequestOptions]
2018
+ Request-specific configuration.
2019
+
2020
+ Returns
2021
+ -------
2022
+ AsyncHttpResponse[OrganizationsCreatePaymentIntentResponse]
2023
+ Success
2024
+ """
2025
+ _response = await self._client_wrapper.httpx_client.request(
2026
+ f"organizations/{jsonable_encoder(id)}/credits/payment-intent",
2027
+ method="POST",
2028
+ json={
2029
+ "amount": amount,
2030
+ },
2031
+ headers={
2032
+ "content-type": "application/json",
2033
+ },
2034
+ request_options=request_options,
2035
+ omit=OMIT,
2036
+ )
2037
+ try:
2038
+ if 200 <= _response.status_code < 300:
2039
+ _data = typing.cast(
2040
+ OrganizationsCreatePaymentIntentResponse,
2041
+ parse_obj_as(
2042
+ type_=OrganizationsCreatePaymentIntentResponse, # type: ignore
2043
+ object_=_response.json(),
2044
+ ),
2045
+ )
2046
+ return AsyncHttpResponse(response=_response, data=_data)
2047
+ if _response.status_code == 400:
2048
+ raise BadRequestError(
2049
+ headers=dict(_response.headers),
2050
+ body=typing.cast(
2051
+ typing.Optional[typing.Any],
2052
+ parse_obj_as(
2053
+ type_=typing.Optional[typing.Any], # type: ignore
2054
+ object_=_response.json(),
2055
+ ),
2056
+ ),
2057
+ )
2058
+ if _response.status_code == 403:
2059
+ raise ForbiddenError(
2060
+ headers=dict(_response.headers),
2061
+ body=typing.cast(
2062
+ PermissionDeniedError,
2063
+ parse_obj_as(
2064
+ type_=PermissionDeniedError, # type: ignore
2065
+ object_=_response.json(),
2066
+ ),
2067
+ ),
2068
+ )
2069
+ if _response.status_code == 404:
2070
+ raise NotFoundError(
2071
+ headers=dict(_response.headers),
2072
+ body=typing.cast(
2073
+ NotFoundErrorBody,
2074
+ parse_obj_as(
2075
+ type_=NotFoundErrorBody, # type: ignore
2076
+ object_=_response.json(),
2077
+ ),
2078
+ ),
2079
+ )
2080
+ if _response.status_code == 429:
2081
+ raise TooManyRequestsError(
2082
+ headers=dict(_response.headers),
2083
+ body=typing.cast(
2084
+ RateLimitError,
2085
+ parse_obj_as(
2086
+ type_=RateLimitError, # type: ignore
2087
+ object_=_response.json(),
2088
+ ),
2089
+ ),
2090
+ )
2091
+ if _response.status_code == 500:
2092
+ raise InternalServerError(
2093
+ headers=dict(_response.headers),
2094
+ body=typing.cast(
2095
+ typing.Optional[typing.Any],
2096
+ parse_obj_as(
2097
+ type_=typing.Optional[typing.Any], # type: ignore
2098
+ object_=_response.json(),
2099
+ ),
2100
+ ),
2101
+ )
2102
+ if _response.status_code == 503:
2103
+ raise ServiceUnavailableError(
2104
+ headers=dict(_response.headers),
2105
+ body=typing.cast(
2106
+ typing.Optional[typing.Any],
2107
+ parse_obj_as(
2108
+ type_=typing.Optional[typing.Any], # type: ignore
2109
+ object_=_response.json(),
2110
+ ),
2111
+ ),
2112
+ )
2113
+ _response_json = _response.json()
2114
+ except JSONDecodeError:
2115
+ raise ApiError(
2116
+ status_code=_response.status_code,
2117
+ headers=dict(_response.headers),
2118
+ body=_response.text,
2119
+ )
2120
+ raise ApiError(
2121
+ status_code=_response.status_code,
2122
+ headers=dict(_response.headers),
2123
+ body=_response_json,
2124
+ )
2125
+
2126
+ async def subscription(
2127
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
2128
+ ) -> AsyncHttpResponse[OrganizationsSubscriptionResponse]:
2129
+ """
2130
+ Parameters
2131
+ ----------
2132
+ id : str
2133
+
2134
+ request_options : typing.Optional[RequestOptions]
2135
+ Request-specific configuration.
2136
+
2137
+ Returns
2138
+ -------
2139
+ AsyncHttpResponse[OrganizationsSubscriptionResponse]
2140
+ Success
2141
+ """
2142
+ _response = await self._client_wrapper.httpx_client.request(
2143
+ f"organizations/{jsonable_encoder(id)}/subscription",
2144
+ method="GET",
2145
+ request_options=request_options,
2146
+ )
2147
+ try:
2148
+ if 200 <= _response.status_code < 300:
2149
+ _data = typing.cast(
2150
+ OrganizationsSubscriptionResponse,
2151
+ parse_obj_as(
2152
+ type_=OrganizationsSubscriptionResponse, # type: ignore
2153
+ object_=_response.json(),
2154
+ ),
2155
+ )
2156
+ return AsyncHttpResponse(response=_response, data=_data)
2157
+ if _response.status_code == 400:
2158
+ raise BadRequestError(
2159
+ headers=dict(_response.headers),
2160
+ body=typing.cast(
2161
+ typing.Optional[typing.Any],
2162
+ parse_obj_as(
2163
+ type_=typing.Optional[typing.Any], # type: ignore
2164
+ object_=_response.json(),
2165
+ ),
2166
+ ),
2167
+ )
2168
+ if _response.status_code == 403:
2169
+ raise ForbiddenError(
2170
+ headers=dict(_response.headers),
2171
+ body=typing.cast(
2172
+ PermissionDeniedError,
2173
+ parse_obj_as(
2174
+ type_=PermissionDeniedError, # type: ignore
2175
+ object_=_response.json(),
2176
+ ),
2177
+ ),
2178
+ )
2179
+ if _response.status_code == 404:
2180
+ raise NotFoundError(
2181
+ headers=dict(_response.headers),
2182
+ body=typing.cast(
2183
+ NotFoundErrorBody,
2184
+ parse_obj_as(
2185
+ type_=NotFoundErrorBody, # type: ignore
2186
+ object_=_response.json(),
2187
+ ),
2188
+ ),
2189
+ )
2190
+ if _response.status_code == 429:
2191
+ raise TooManyRequestsError(
2192
+ headers=dict(_response.headers),
2193
+ body=typing.cast(
2194
+ RateLimitError,
2195
+ parse_obj_as(
2196
+ type_=RateLimitError, # type: ignore
2197
+ object_=_response.json(),
2198
+ ),
2199
+ ),
2200
+ )
2201
+ if _response.status_code == 500:
2202
+ raise InternalServerError(
2203
+ headers=dict(_response.headers),
2204
+ body=typing.cast(
2205
+ typing.Optional[typing.Any],
2206
+ parse_obj_as(
2207
+ type_=typing.Optional[typing.Any], # type: ignore
2208
+ object_=_response.json(),
2209
+ ),
2210
+ ),
2211
+ )
2212
+ if _response.status_code == 503:
2213
+ raise ServiceUnavailableError(
2214
+ headers=dict(_response.headers),
2215
+ body=typing.cast(
2216
+ typing.Optional[typing.Any],
2217
+ parse_obj_as(
2218
+ type_=typing.Optional[typing.Any], # type: ignore
2219
+ object_=_response.json(),
2220
+ ),
2221
+ ),
2222
+ )
2223
+ _response_json = _response.json()
2224
+ except JSONDecodeError:
2225
+ raise ApiError(
2226
+ status_code=_response.status_code,
2227
+ headers=dict(_response.headers),
2228
+ body=_response.text,
2229
+ )
2230
+ raise ApiError(
2231
+ status_code=_response.status_code,
2232
+ headers=dict(_response.headers),
2233
+ body=_response_json,
2234
+ )
2235
+
2236
+ async def previewsubscriptionchange(
2237
+ self,
2238
+ id: str,
2239
+ *,
2240
+ target_plan: OrganizationsPreviewSubscriptionChangeRequestTargetPlan,
2241
+ request_options: typing.Optional[RequestOptions] = None,
2242
+ ) -> AsyncHttpResponse[OrganizationsPreviewSubscriptionChangeResponse]:
2243
+ """
2244
+ Parameters
2245
+ ----------
2246
+ id : str
2247
+
2248
+ target_plan : OrganizationsPreviewSubscriptionChangeRequestTargetPlan
2249
+
2250
+ request_options : typing.Optional[RequestOptions]
2251
+ Request-specific configuration.
2252
+
2253
+ Returns
2254
+ -------
2255
+ AsyncHttpResponse[OrganizationsPreviewSubscriptionChangeResponse]
2256
+ Success
2257
+ """
2258
+ _response = await self._client_wrapper.httpx_client.request(
2259
+ f"organizations/{jsonable_encoder(id)}/subscription/preview",
2260
+ method="POST",
2261
+ json={
2262
+ "targetPlan": target_plan,
2263
+ },
2264
+ headers={
2265
+ "content-type": "application/json",
2266
+ },
2267
+ request_options=request_options,
2268
+ omit=OMIT,
2269
+ )
2270
+ try:
2271
+ if 200 <= _response.status_code < 300:
2272
+ _data = typing.cast(
2273
+ OrganizationsPreviewSubscriptionChangeResponse,
2274
+ parse_obj_as(
2275
+ type_=OrganizationsPreviewSubscriptionChangeResponse, # type: ignore
2276
+ object_=_response.json(),
2277
+ ),
2278
+ )
2279
+ return AsyncHttpResponse(response=_response, data=_data)
2280
+ if _response.status_code == 400:
2281
+ raise BadRequestError(
2282
+ headers=dict(_response.headers),
2283
+ body=typing.cast(
2284
+ typing.Optional[typing.Any],
2285
+ parse_obj_as(
2286
+ type_=typing.Optional[typing.Any], # type: ignore
2287
+ object_=_response.json(),
2288
+ ),
2289
+ ),
2290
+ )
2291
+ if _response.status_code == 403:
2292
+ raise ForbiddenError(
2293
+ headers=dict(_response.headers),
2294
+ body=typing.cast(
2295
+ PermissionDeniedError,
2296
+ parse_obj_as(
2297
+ type_=PermissionDeniedError, # type: ignore
2298
+ object_=_response.json(),
2299
+ ),
2300
+ ),
2301
+ )
2302
+ if _response.status_code == 404:
2303
+ raise NotFoundError(
2304
+ headers=dict(_response.headers),
2305
+ body=typing.cast(
2306
+ NotFoundErrorBody,
2307
+ parse_obj_as(
2308
+ type_=NotFoundErrorBody, # type: ignore
2309
+ object_=_response.json(),
2310
+ ),
2311
+ ),
2312
+ )
2313
+ if _response.status_code == 429:
2314
+ raise TooManyRequestsError(
2315
+ headers=dict(_response.headers),
2316
+ body=typing.cast(
2317
+ RateLimitError,
2318
+ parse_obj_as(
2319
+ type_=RateLimitError, # type: ignore
2320
+ object_=_response.json(),
2321
+ ),
2322
+ ),
2323
+ )
2324
+ if _response.status_code == 500:
2325
+ raise InternalServerError(
2326
+ headers=dict(_response.headers),
2327
+ body=typing.cast(
2328
+ typing.Optional[typing.Any],
2329
+ parse_obj_as(
2330
+ type_=typing.Optional[typing.Any], # type: ignore
2331
+ object_=_response.json(),
2332
+ ),
2333
+ ),
2334
+ )
2335
+ if _response.status_code == 503:
2336
+ raise ServiceUnavailableError(
2337
+ headers=dict(_response.headers),
2338
+ body=typing.cast(
2339
+ typing.Optional[typing.Any],
2340
+ parse_obj_as(
2341
+ type_=typing.Optional[typing.Any], # type: ignore
2342
+ object_=_response.json(),
2343
+ ),
2344
+ ),
2345
+ )
2346
+ _response_json = _response.json()
2347
+ except JSONDecodeError:
2348
+ raise ApiError(
2349
+ status_code=_response.status_code,
2350
+ headers=dict(_response.headers),
2351
+ body=_response.text,
2352
+ )
2353
+ raise ApiError(
2354
+ status_code=_response.status_code,
2355
+ headers=dict(_response.headers),
2356
+ body=_response_json,
2357
+ )
2358
+
2359
+ async def updatesubscription(
2360
+ self,
2361
+ id: str,
2362
+ *,
2363
+ target_plan: OrganizationsUpdateSubscriptionRequestTargetPlan,
2364
+ request_options: typing.Optional[RequestOptions] = None,
2365
+ ) -> AsyncHttpResponse[OrganizationsUpdateSubscriptionResponse]:
2366
+ """
2367
+ Parameters
2368
+ ----------
2369
+ id : str
2370
+
2371
+ target_plan : OrganizationsUpdateSubscriptionRequestTargetPlan
2372
+
2373
+ request_options : typing.Optional[RequestOptions]
2374
+ Request-specific configuration.
2375
+
2376
+ Returns
2377
+ -------
2378
+ AsyncHttpResponse[OrganizationsUpdateSubscriptionResponse]
2379
+ Success
2380
+ """
2381
+ _response = await self._client_wrapper.httpx_client.request(
2382
+ f"organizations/{jsonable_encoder(id)}/subscription/update",
2383
+ method="POST",
2384
+ json={
2385
+ "targetPlan": target_plan,
2386
+ },
2387
+ headers={
2388
+ "content-type": "application/json",
2389
+ },
2390
+ request_options=request_options,
2391
+ omit=OMIT,
2392
+ )
2393
+ try:
2394
+ if 200 <= _response.status_code < 300:
2395
+ _data = typing.cast(
2396
+ OrganizationsUpdateSubscriptionResponse,
2397
+ parse_obj_as(
2398
+ type_=OrganizationsUpdateSubscriptionResponse, # type: ignore
2399
+ object_=_response.json(),
2400
+ ),
2401
+ )
2402
+ return AsyncHttpResponse(response=_response, data=_data)
2403
+ if _response.status_code == 400:
2404
+ raise BadRequestError(
2405
+ headers=dict(_response.headers),
2406
+ body=typing.cast(
2407
+ typing.Optional[typing.Any],
2408
+ parse_obj_as(
2409
+ type_=typing.Optional[typing.Any], # type: ignore
2410
+ object_=_response.json(),
2411
+ ),
2412
+ ),
2413
+ )
2414
+ if _response.status_code == 402:
2415
+ raise PaymentRequiredError(
2416
+ headers=dict(_response.headers),
2417
+ body=typing.cast(
2418
+ PlanLimitExceededError,
2419
+ parse_obj_as(
2420
+ type_=PlanLimitExceededError, # type: ignore
2421
+ object_=_response.json(),
2422
+ ),
2423
+ ),
2424
+ )
2425
+ if _response.status_code == 403:
2426
+ raise ForbiddenError(
2427
+ headers=dict(_response.headers),
2428
+ body=typing.cast(
2429
+ PermissionDeniedError,
2430
+ parse_obj_as(
2431
+ type_=PermissionDeniedError, # type: ignore
2432
+ object_=_response.json(),
2433
+ ),
2434
+ ),
2435
+ )
2436
+ if _response.status_code == 404:
2437
+ raise NotFoundError(
2438
+ headers=dict(_response.headers),
2439
+ body=typing.cast(
2440
+ NotFoundErrorBody,
2441
+ parse_obj_as(
2442
+ type_=NotFoundErrorBody, # type: ignore
2443
+ object_=_response.json(),
2444
+ ),
2445
+ ),
2446
+ )
2447
+ if _response.status_code == 429:
2448
+ raise TooManyRequestsError(
2449
+ headers=dict(_response.headers),
2450
+ body=typing.cast(
2451
+ RateLimitError,
2452
+ parse_obj_as(
2453
+ type_=RateLimitError, # type: ignore
2454
+ object_=_response.json(),
2455
+ ),
2456
+ ),
2457
+ )
2458
+ if _response.status_code == 500:
2459
+ raise InternalServerError(
2460
+ headers=dict(_response.headers),
2461
+ body=typing.cast(
2462
+ typing.Optional[typing.Any],
2463
+ parse_obj_as(
2464
+ type_=typing.Optional[typing.Any], # type: ignore
2465
+ object_=_response.json(),
2466
+ ),
2467
+ ),
2468
+ )
2469
+ if _response.status_code == 503:
2470
+ raise ServiceUnavailableError(
2471
+ headers=dict(_response.headers),
2472
+ body=typing.cast(
2473
+ typing.Optional[typing.Any],
2474
+ parse_obj_as(
2475
+ type_=typing.Optional[typing.Any], # type: ignore
2476
+ object_=_response.json(),
2477
+ ),
2478
+ ),
2479
+ )
2480
+ _response_json = _response.json()
2481
+ except JSONDecodeError:
2482
+ raise ApiError(
2483
+ status_code=_response.status_code,
2484
+ headers=dict(_response.headers),
2485
+ body=_response.text,
2486
+ )
2487
+ raise ApiError(
2488
+ status_code=_response.status_code,
2489
+ headers=dict(_response.headers),
2490
+ body=_response_json,
2491
+ )
2492
+
2493
+ async def cancelscheduleddowngrade(
825
2494
  self, id: str, *, request_options: typing.Optional[RequestOptions] = None
826
2495
  ) -> AsyncHttpResponse[None]:
827
2496
  """
@@ -837,8 +2506,8 @@ class AsyncRawOrganizationsClient:
837
2506
  AsyncHttpResponse[None]
838
2507
  """
839
2508
  _response = await self._client_wrapper.httpx_client.request(
840
- f"organizations/{jsonable_encoder(id)}",
841
- method="DELETE",
2509
+ f"organizations/{jsonable_encoder(id)}/subscription/cancel-downgrade",
2510
+ method="POST",
842
2511
  request_options=request_options,
843
2512
  )
844
2513
  try:
@@ -848,9 +2517,9 @@ class AsyncRawOrganizationsClient:
848
2517
  raise BadRequestError(
849
2518
  headers=dict(_response.headers),
850
2519
  body=typing.cast(
851
- HttpApiDecodeError,
2520
+ typing.Optional[typing.Any],
852
2521
  parse_obj_as(
853
- type_=HttpApiDecodeError, # type: ignore
2522
+ type_=typing.Optional[typing.Any], # type: ignore
854
2523
  object_=_response.json(),
855
2524
  ),
856
2525
  ),
@@ -877,13 +2546,35 @@ class AsyncRawOrganizationsClient:
877
2546
  ),
878
2547
  ),
879
2548
  )
2549
+ if _response.status_code == 429:
2550
+ raise TooManyRequestsError(
2551
+ headers=dict(_response.headers),
2552
+ body=typing.cast(
2553
+ RateLimitError,
2554
+ parse_obj_as(
2555
+ type_=RateLimitError, # type: ignore
2556
+ object_=_response.json(),
2557
+ ),
2558
+ ),
2559
+ )
880
2560
  if _response.status_code == 500:
881
2561
  raise InternalServerError(
882
2562
  headers=dict(_response.headers),
883
2563
  body=typing.cast(
884
- DatabaseError,
2564
+ typing.Optional[typing.Any],
2565
+ parse_obj_as(
2566
+ type_=typing.Optional[typing.Any], # type: ignore
2567
+ object_=_response.json(),
2568
+ ),
2569
+ ),
2570
+ )
2571
+ if _response.status_code == 503:
2572
+ raise ServiceUnavailableError(
2573
+ headers=dict(_response.headers),
2574
+ body=typing.cast(
2575
+ typing.Optional[typing.Any],
885
2576
  parse_obj_as(
886
- type_=DatabaseError, # type: ignore
2577
+ type_=typing.Optional[typing.Any], # type: ignore
887
2578
  object_=_response.json(),
888
2579
  ),
889
2580
  ),