mirascope 2.0.0a4__py3-none-any.whl → 2.0.0a6__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 (215) 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 +119 -1
  5. mirascope/api/_generated/annotations/__init__.py +33 -0
  6. mirascope/api/_generated/annotations/client.py +474 -0
  7. mirascope/api/_generated/annotations/raw_client.py +1095 -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 +35 -0
  11. mirascope/api/_generated/annotations/types/annotations_create_response_label.py +5 -0
  12. mirascope/api/_generated/annotations/types/annotations_get_response.py +35 -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 +35 -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 +35 -0
  20. mirascope/api/_generated/annotations/types/annotations_update_response_label.py +5 -0
  21. mirascope/api/_generated/api_keys/__init__.py +7 -0
  22. mirascope/api/_generated/api_keys/client.py +429 -0
  23. mirascope/api/_generated/api_keys/raw_client.py +788 -0
  24. mirascope/api/_generated/api_keys/types/__init__.py +9 -0
  25. mirascope/api/_generated/api_keys/types/api_keys_create_response.py +28 -0
  26. mirascope/api/_generated/api_keys/types/api_keys_get_response.py +27 -0
  27. mirascope/api/_generated/api_keys/types/api_keys_list_response_item.py +27 -0
  28. mirascope/api/_generated/client.py +12 -0
  29. mirascope/api/_generated/core/client_wrapper.py +2 -14
  30. mirascope/api/_generated/core/datetime_utils.py +1 -3
  31. mirascope/api/_generated/core/file.py +2 -5
  32. mirascope/api/_generated/core/http_client.py +36 -112
  33. mirascope/api/_generated/core/jsonable_encoder.py +1 -3
  34. mirascope/api/_generated/core/pydantic_utilities.py +19 -74
  35. mirascope/api/_generated/core/query_encoder.py +1 -3
  36. mirascope/api/_generated/core/serialization.py +4 -10
  37. mirascope/api/_generated/docs/client.py +2 -6
  38. mirascope/api/_generated/docs/raw_client.py +4 -20
  39. mirascope/api/_generated/environments/__init__.py +17 -0
  40. mirascope/api/_generated/environments/client.py +500 -0
  41. mirascope/api/_generated/environments/raw_client.py +999 -0
  42. mirascope/api/_generated/environments/types/__init__.py +15 -0
  43. mirascope/api/_generated/environments/types/environments_create_response.py +24 -0
  44. mirascope/api/_generated/environments/types/environments_get_response.py +24 -0
  45. mirascope/api/_generated/environments/types/environments_list_response_item.py +24 -0
  46. mirascope/api/_generated/environments/types/environments_update_response.py +24 -0
  47. mirascope/api/_generated/errors/__init__.py +2 -0
  48. mirascope/api/_generated/errors/bad_request_error.py +1 -5
  49. mirascope/api/_generated/errors/conflict_error.py +1 -5
  50. mirascope/api/_generated/errors/forbidden_error.py +1 -5
  51. mirascope/api/_generated/errors/internal_server_error.py +1 -6
  52. mirascope/api/_generated/errors/not_found_error.py +1 -5
  53. mirascope/api/_generated/errors/unauthorized_error.py +11 -0
  54. mirascope/api/_generated/functions/__init__.py +29 -0
  55. mirascope/api/_generated/functions/client.py +433 -0
  56. mirascope/api/_generated/functions/raw_client.py +1049 -0
  57. mirascope/api/_generated/functions/types/__init__.py +29 -0
  58. mirascope/api/_generated/functions/types/functions_create_request_dependencies_value.py +20 -0
  59. mirascope/api/_generated/functions/types/functions_create_response.py +37 -0
  60. mirascope/api/_generated/functions/types/functions_create_response_dependencies_value.py +20 -0
  61. mirascope/api/_generated/functions/types/functions_find_by_hash_response.py +39 -0
  62. mirascope/api/_generated/functions/types/functions_find_by_hash_response_dependencies_value.py +20 -0
  63. mirascope/api/_generated/functions/types/functions_get_response.py +37 -0
  64. mirascope/api/_generated/functions/types/functions_get_response_dependencies_value.py +20 -0
  65. mirascope/api/_generated/functions/types/functions_list_response.py +21 -0
  66. mirascope/api/_generated/functions/types/functions_list_response_functions_item.py +41 -0
  67. mirascope/api/_generated/functions/types/functions_list_response_functions_item_dependencies_value.py +20 -0
  68. mirascope/api/_generated/health/client.py +2 -6
  69. mirascope/api/_generated/health/raw_client.py +5 -23
  70. mirascope/api/_generated/health/types/health_check_response.py +1 -3
  71. mirascope/api/_generated/organizations/__init__.py +2 -0
  72. mirascope/api/_generated/organizations/client.py +94 -27
  73. mirascope/api/_generated/organizations/raw_client.py +246 -128
  74. mirascope/api/_generated/organizations/types/__init__.py +2 -0
  75. mirascope/api/_generated/organizations/types/organizations_create_response.py +5 -3
  76. mirascope/api/_generated/organizations/types/organizations_create_response_role.py +1 -3
  77. mirascope/api/_generated/organizations/types/organizations_credits_response.py +19 -0
  78. mirascope/api/_generated/organizations/types/organizations_get_response.py +5 -3
  79. mirascope/api/_generated/organizations/types/organizations_get_response_role.py +1 -3
  80. mirascope/api/_generated/organizations/types/organizations_list_response_item.py +5 -3
  81. mirascope/api/_generated/organizations/types/organizations_list_response_item_role.py +1 -3
  82. mirascope/api/_generated/organizations/types/organizations_update_response.py +5 -3
  83. mirascope/api/_generated/organizations/types/organizations_update_response_role.py +1 -3
  84. mirascope/api/_generated/projects/__init__.py +2 -12
  85. mirascope/api/_generated/projects/client.py +38 -68
  86. mirascope/api/_generated/projects/raw_client.py +92 -163
  87. mirascope/api/_generated/projects/types/__init__.py +1 -6
  88. mirascope/api/_generated/projects/types/projects_create_response.py +4 -9
  89. mirascope/api/_generated/projects/types/projects_get_response.py +4 -9
  90. mirascope/api/_generated/projects/types/projects_list_response_item.py +4 -9
  91. mirascope/api/_generated/projects/types/projects_update_response.py +4 -9
  92. mirascope/api/_generated/reference.md +1862 -70
  93. mirascope/api/_generated/traces/__init__.py +22 -0
  94. mirascope/api/_generated/traces/client.py +398 -0
  95. mirascope/api/_generated/traces/raw_client.py +902 -18
  96. mirascope/api/_generated/traces/types/__init__.py +32 -0
  97. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item.py +4 -11
  98. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource.py +2 -6
  99. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item.py +1 -3
  100. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value.py +8 -24
  101. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_array_value.py +2 -6
  102. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value.py +3 -9
  103. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_resource_attributes_item_value_kvlist_value_values_item.py +2 -6
  104. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item.py +3 -9
  105. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope.py +4 -8
  106. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item.py +2 -6
  107. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value.py +8 -24
  108. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_array_value.py +2 -6
  109. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_scope_attributes_item_value_kvlist_value.py +3 -9
  110. 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
  111. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item.py +6 -18
  112. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item.py +3 -9
  113. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value.py +8 -24
  114. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_array_value.py +2 -6
  115. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_attributes_item_value_kvlist_value.py +2 -6
  116. 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
  117. mirascope/api/_generated/traces/types/traces_create_request_resource_spans_item_scope_spans_item_spans_item_status.py +2 -6
  118. mirascope/api/_generated/traces/types/traces_create_response.py +2 -5
  119. mirascope/api/_generated/traces/types/traces_create_response_partial_success.py +3 -9
  120. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response.py +54 -0
  121. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_functions_item.py +24 -0
  122. mirascope/api/_generated/traces/types/traces_get_analytics_summary_response_top_models_item.py +22 -0
  123. mirascope/api/_generated/traces/types/traces_get_trace_detail_response.py +33 -0
  124. mirascope/api/_generated/traces/types/traces_get_trace_detail_response_spans_item.py +90 -0
  125. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item.py +26 -0
  126. mirascope/api/_generated/traces/types/traces_search_request_attribute_filters_item_operator.py +7 -0
  127. mirascope/api/_generated/traces/types/traces_search_request_sort_by.py +7 -0
  128. mirascope/api/_generated/traces/types/traces_search_request_sort_order.py +5 -0
  129. mirascope/api/_generated/traces/types/traces_search_response.py +26 -0
  130. mirascope/api/_generated/traces/types/traces_search_response_spans_item.py +41 -0
  131. mirascope/api/_generated/types/__init__.py +18 -0
  132. mirascope/api/_generated/types/already_exists_error.py +1 -3
  133. mirascope/api/_generated/types/click_house_error.py +22 -0
  134. mirascope/api/_generated/types/database_error.py +1 -3
  135. mirascope/api/_generated/types/http_api_decode_error.py +1 -3
  136. mirascope/api/_generated/types/internal_server_error_body.py +49 -0
  137. mirascope/api/_generated/types/issue.py +1 -3
  138. mirascope/api/_generated/types/issue_tag.py +1 -8
  139. mirascope/api/_generated/types/not_found_error_body.py +1 -3
  140. mirascope/api/_generated/types/number_from_string.py +3 -0
  141. mirascope/api/_generated/types/permission_denied_error.py +1 -3
  142. mirascope/api/_generated/types/permission_denied_error_tag.py +1 -3
  143. mirascope/api/_generated/types/property_key_key.py +1 -3
  144. mirascope/api/_generated/types/stripe_error.py +20 -0
  145. mirascope/api/_generated/types/unauthorized_error_body.py +21 -0
  146. mirascope/api/_generated/types/unauthorized_error_tag.py +5 -0
  147. mirascope/llm/__init__.py +6 -2
  148. mirascope/llm/content/tool_call.py +6 -0
  149. mirascope/llm/exceptions.py +28 -0
  150. mirascope/llm/formatting/__init__.py +2 -2
  151. mirascope/llm/formatting/format.py +120 -8
  152. mirascope/llm/formatting/types.py +1 -56
  153. mirascope/llm/mcp/__init__.py +2 -2
  154. mirascope/llm/mcp/mcp_client.py +130 -0
  155. mirascope/llm/providers/__init__.py +26 -5
  156. mirascope/llm/providers/anthropic/__init__.py +3 -21
  157. mirascope/llm/providers/anthropic/_utils/__init__.py +2 -0
  158. mirascope/llm/providers/anthropic/_utils/beta_decode.py +4 -2
  159. mirascope/llm/providers/anthropic/_utils/beta_encode.py +13 -12
  160. mirascope/llm/providers/anthropic/_utils/decode.py +4 -2
  161. mirascope/llm/providers/anthropic/_utils/encode.py +57 -14
  162. mirascope/llm/providers/anthropic/_utils/errors.py +46 -0
  163. mirascope/llm/providers/anthropic/beta_provider.py +6 -0
  164. mirascope/llm/providers/anthropic/provider.py +5 -0
  165. mirascope/llm/providers/base/__init__.py +5 -2
  166. mirascope/llm/providers/base/_utils.py +2 -7
  167. mirascope/llm/providers/base/base_provider.py +173 -58
  168. mirascope/llm/providers/base/params.py +63 -34
  169. mirascope/llm/providers/google/__init__.py +2 -17
  170. mirascope/llm/providers/google/_utils/__init__.py +2 -0
  171. mirascope/llm/providers/google/_utils/decode.py +17 -8
  172. mirascope/llm/providers/google/_utils/encode.py +105 -16
  173. mirascope/llm/providers/google/_utils/errors.py +49 -0
  174. mirascope/llm/providers/google/model_info.py +1 -0
  175. mirascope/llm/providers/google/provider.py +9 -5
  176. mirascope/llm/providers/mirascope/__init__.py +5 -0
  177. mirascope/llm/providers/mirascope/_utils.py +77 -0
  178. mirascope/llm/providers/mirascope/provider.py +318 -0
  179. mirascope/llm/providers/mlx/__init__.py +2 -17
  180. mirascope/llm/providers/mlx/_utils.py +9 -2
  181. mirascope/llm/providers/mlx/provider.py +8 -0
  182. mirascope/llm/providers/ollama/__init__.py +1 -13
  183. mirascope/llm/providers/openai/__init__.py +10 -1
  184. mirascope/llm/providers/openai/_utils/__init__.py +5 -0
  185. mirascope/llm/providers/openai/_utils/errors.py +46 -0
  186. mirascope/llm/providers/openai/completions/__init__.py +2 -20
  187. mirascope/llm/providers/openai/completions/_utils/decode.py +14 -3
  188. mirascope/llm/providers/openai/completions/_utils/encode.py +15 -12
  189. mirascope/llm/providers/openai/completions/base_provider.py +6 -6
  190. mirascope/llm/providers/openai/provider.py +14 -1
  191. mirascope/llm/providers/openai/responses/__init__.py +1 -17
  192. mirascope/llm/providers/openai/responses/_utils/decode.py +2 -2
  193. mirascope/llm/providers/openai/responses/_utils/encode.py +43 -15
  194. mirascope/llm/providers/openai/responses/provider.py +13 -7
  195. mirascope/llm/providers/provider_id.py +1 -0
  196. mirascope/llm/providers/provider_registry.py +59 -3
  197. mirascope/llm/providers/together/__init__.py +1 -13
  198. mirascope/llm/responses/base_stream_response.py +24 -20
  199. mirascope/llm/tools/decorator.py +8 -4
  200. mirascope/llm/tools/tool_schema.py +33 -6
  201. mirascope/llm/tools/tools.py +84 -16
  202. mirascope/ops/__init__.py +60 -109
  203. mirascope/ops/_internal/closure.py +62 -11
  204. mirascope/ops/_internal/instrumentation/llm/llm.py +1 -2
  205. mirascope/ops/_internal/traced_functions.py +23 -4
  206. mirascope/ops/_internal/versioned_functions.py +54 -43
  207. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/METADATA +7 -7
  208. mirascope-2.0.0a6.dist-info/RECORD +316 -0
  209. mirascope/llm/formatting/_utils.py +0 -78
  210. mirascope/llm/mcp/client.py +0 -118
  211. mirascope/llm/providers/_missing_import_stubs.py +0 -49
  212. mirascope/llm/providers/load_provider.py +0 -54
  213. mirascope-2.0.0a4.dist-info/RECORD +0 -247
  214. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/WHEEL +0 -0
  215. {mirascope-2.0.0a4.dist-info → mirascope-2.0.0a6.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1095 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from json.decoder import JSONDecodeError
5
+
6
+ from ..core.api_error import ApiError
7
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
+ from ..core.http_response import AsyncHttpResponse, HttpResponse
9
+ from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.pydantic_utilities import parse_obj_as
11
+ from ..core.request_options import RequestOptions
12
+ from ..errors.bad_request_error import BadRequestError
13
+ from ..errors.conflict_error import ConflictError
14
+ from ..errors.forbidden_error import ForbiddenError
15
+ from ..errors.internal_server_error import InternalServerError
16
+ from ..errors.not_found_error import NotFoundError
17
+ from ..errors.unauthorized_error import UnauthorizedError
18
+ from ..types.already_exists_error import AlreadyExistsError
19
+ from ..types.http_api_decode_error import HttpApiDecodeError
20
+ from ..types.not_found_error_body import NotFoundErrorBody
21
+ from ..types.number_from_string import NumberFromString
22
+ from ..types.permission_denied_error import PermissionDeniedError
23
+ from ..types.unauthorized_error_body import UnauthorizedErrorBody
24
+ from .types.annotations_create_request_label import AnnotationsCreateRequestLabel
25
+ from .types.annotations_create_response import AnnotationsCreateResponse
26
+ from .types.annotations_get_response import AnnotationsGetResponse
27
+ from .types.annotations_list_request_label import AnnotationsListRequestLabel
28
+ from .types.annotations_list_response import AnnotationsListResponse
29
+ from .types.annotations_update_request_label import AnnotationsUpdateRequestLabel
30
+ from .types.annotations_update_response import AnnotationsUpdateResponse
31
+
32
+ # this is used as the default value for optional parameters
33
+ OMIT = typing.cast(typing.Any, ...)
34
+
35
+
36
+ class RawAnnotationsClient:
37
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
38
+ self._client_wrapper = client_wrapper
39
+
40
+ def list(
41
+ self,
42
+ *,
43
+ otel_trace_id: typing.Optional[str] = None,
44
+ otel_span_id: typing.Optional[str] = None,
45
+ label: typing.Optional[AnnotationsListRequestLabel] = None,
46
+ limit: typing.Optional[NumberFromString] = None,
47
+ offset: typing.Optional[NumberFromString] = None,
48
+ request_options: typing.Optional[RequestOptions] = None,
49
+ ) -> HttpResponse[AnnotationsListResponse]:
50
+ """
51
+ Parameters
52
+ ----------
53
+ otel_trace_id : typing.Optional[str]
54
+
55
+ otel_span_id : typing.Optional[str]
56
+
57
+ label : typing.Optional[AnnotationsListRequestLabel]
58
+
59
+ limit : typing.Optional[NumberFromString]
60
+
61
+ offset : typing.Optional[NumberFromString]
62
+
63
+ request_options : typing.Optional[RequestOptions]
64
+ Request-specific configuration.
65
+
66
+ Returns
67
+ -------
68
+ HttpResponse[AnnotationsListResponse]
69
+ Success
70
+ """
71
+ _response = self._client_wrapper.httpx_client.request(
72
+ "annotations",
73
+ method="GET",
74
+ params={
75
+ "otelTraceId": otel_trace_id,
76
+ "otelSpanId": otel_span_id,
77
+ "label": label,
78
+ "limit": limit,
79
+ "offset": offset,
80
+ },
81
+ request_options=request_options,
82
+ )
83
+ try:
84
+ if 200 <= _response.status_code < 300:
85
+ _data = typing.cast(
86
+ AnnotationsListResponse,
87
+ parse_obj_as(
88
+ type_=AnnotationsListResponse, # type: ignore
89
+ object_=_response.json(),
90
+ ),
91
+ )
92
+ return HttpResponse(response=_response, data=_data)
93
+ if _response.status_code == 400:
94
+ raise BadRequestError(
95
+ headers=dict(_response.headers),
96
+ body=typing.cast(
97
+ HttpApiDecodeError,
98
+ parse_obj_as(
99
+ type_=HttpApiDecodeError, # type: ignore
100
+ object_=_response.json(),
101
+ ),
102
+ ),
103
+ )
104
+ if _response.status_code == 401:
105
+ raise UnauthorizedError(
106
+ headers=dict(_response.headers),
107
+ body=typing.cast(
108
+ UnauthorizedErrorBody,
109
+ parse_obj_as(
110
+ type_=UnauthorizedErrorBody, # type: ignore
111
+ object_=_response.json(),
112
+ ),
113
+ ),
114
+ )
115
+ if _response.status_code == 403:
116
+ raise ForbiddenError(
117
+ headers=dict(_response.headers),
118
+ body=typing.cast(
119
+ PermissionDeniedError,
120
+ parse_obj_as(
121
+ type_=PermissionDeniedError, # type: ignore
122
+ object_=_response.json(),
123
+ ),
124
+ ),
125
+ )
126
+ if _response.status_code == 404:
127
+ raise NotFoundError(
128
+ headers=dict(_response.headers),
129
+ body=typing.cast(
130
+ NotFoundErrorBody,
131
+ parse_obj_as(
132
+ type_=NotFoundErrorBody, # type: ignore
133
+ object_=_response.json(),
134
+ ),
135
+ ),
136
+ )
137
+ if _response.status_code == 500:
138
+ raise InternalServerError(
139
+ headers=dict(_response.headers),
140
+ body=typing.cast(
141
+ typing.Optional[typing.Any],
142
+ parse_obj_as(
143
+ type_=typing.Optional[typing.Any], # type: ignore
144
+ object_=_response.json(),
145
+ ),
146
+ ),
147
+ )
148
+ _response_json = _response.json()
149
+ except JSONDecodeError:
150
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
151
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
152
+
153
+ def create(
154
+ self,
155
+ *,
156
+ otel_span_id: str,
157
+ otel_trace_id: str,
158
+ label: typing.Optional[AnnotationsCreateRequestLabel] = OMIT,
159
+ reasoning: typing.Optional[str] = OMIT,
160
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
161
+ request_options: typing.Optional[RequestOptions] = None,
162
+ ) -> HttpResponse[AnnotationsCreateResponse]:
163
+ """
164
+ Parameters
165
+ ----------
166
+ otel_span_id : str
167
+
168
+ otel_trace_id : str
169
+
170
+ label : typing.Optional[AnnotationsCreateRequestLabel]
171
+
172
+ reasoning : typing.Optional[str]
173
+
174
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
175
+
176
+ request_options : typing.Optional[RequestOptions]
177
+ Request-specific configuration.
178
+
179
+ Returns
180
+ -------
181
+ HttpResponse[AnnotationsCreateResponse]
182
+ Success
183
+ """
184
+ _response = self._client_wrapper.httpx_client.request(
185
+ "annotations",
186
+ method="POST",
187
+ json={
188
+ "otelSpanId": otel_span_id,
189
+ "otelTraceId": otel_trace_id,
190
+ "label": label,
191
+ "reasoning": reasoning,
192
+ "metadata": metadata,
193
+ },
194
+ headers={
195
+ "content-type": "application/json",
196
+ },
197
+ request_options=request_options,
198
+ omit=OMIT,
199
+ )
200
+ try:
201
+ if 200 <= _response.status_code < 300:
202
+ _data = typing.cast(
203
+ AnnotationsCreateResponse,
204
+ parse_obj_as(
205
+ type_=AnnotationsCreateResponse, # type: ignore
206
+ object_=_response.json(),
207
+ ),
208
+ )
209
+ return HttpResponse(response=_response, data=_data)
210
+ if _response.status_code == 400:
211
+ raise BadRequestError(
212
+ headers=dict(_response.headers),
213
+ body=typing.cast(
214
+ HttpApiDecodeError,
215
+ parse_obj_as(
216
+ type_=HttpApiDecodeError, # type: ignore
217
+ object_=_response.json(),
218
+ ),
219
+ ),
220
+ )
221
+ if _response.status_code == 401:
222
+ raise UnauthorizedError(
223
+ headers=dict(_response.headers),
224
+ body=typing.cast(
225
+ UnauthorizedErrorBody,
226
+ parse_obj_as(
227
+ type_=UnauthorizedErrorBody, # type: ignore
228
+ object_=_response.json(),
229
+ ),
230
+ ),
231
+ )
232
+ if _response.status_code == 403:
233
+ raise ForbiddenError(
234
+ headers=dict(_response.headers),
235
+ body=typing.cast(
236
+ PermissionDeniedError,
237
+ parse_obj_as(
238
+ type_=PermissionDeniedError, # type: ignore
239
+ object_=_response.json(),
240
+ ),
241
+ ),
242
+ )
243
+ if _response.status_code == 404:
244
+ raise NotFoundError(
245
+ headers=dict(_response.headers),
246
+ body=typing.cast(
247
+ NotFoundErrorBody,
248
+ parse_obj_as(
249
+ type_=NotFoundErrorBody, # type: ignore
250
+ object_=_response.json(),
251
+ ),
252
+ ),
253
+ )
254
+ if _response.status_code == 409:
255
+ raise ConflictError(
256
+ headers=dict(_response.headers),
257
+ body=typing.cast(
258
+ AlreadyExistsError,
259
+ parse_obj_as(
260
+ type_=AlreadyExistsError, # type: ignore
261
+ object_=_response.json(),
262
+ ),
263
+ ),
264
+ )
265
+ if _response.status_code == 500:
266
+ raise InternalServerError(
267
+ headers=dict(_response.headers),
268
+ body=typing.cast(
269
+ typing.Optional[typing.Any],
270
+ parse_obj_as(
271
+ type_=typing.Optional[typing.Any], # type: ignore
272
+ object_=_response.json(),
273
+ ),
274
+ ),
275
+ )
276
+ _response_json = _response.json()
277
+ except JSONDecodeError:
278
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
279
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
280
+
281
+ def get(
282
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
283
+ ) -> HttpResponse[AnnotationsGetResponse]:
284
+ """
285
+ Parameters
286
+ ----------
287
+ id : str
288
+
289
+ request_options : typing.Optional[RequestOptions]
290
+ Request-specific configuration.
291
+
292
+ Returns
293
+ -------
294
+ HttpResponse[AnnotationsGetResponse]
295
+ Success
296
+ """
297
+ _response = self._client_wrapper.httpx_client.request(
298
+ f"annotations/{jsonable_encoder(id)}",
299
+ method="GET",
300
+ request_options=request_options,
301
+ )
302
+ try:
303
+ if 200 <= _response.status_code < 300:
304
+ _data = typing.cast(
305
+ AnnotationsGetResponse,
306
+ parse_obj_as(
307
+ type_=AnnotationsGetResponse, # type: ignore
308
+ object_=_response.json(),
309
+ ),
310
+ )
311
+ return HttpResponse(response=_response, data=_data)
312
+ if _response.status_code == 400:
313
+ raise BadRequestError(
314
+ headers=dict(_response.headers),
315
+ body=typing.cast(
316
+ HttpApiDecodeError,
317
+ parse_obj_as(
318
+ type_=HttpApiDecodeError, # type: ignore
319
+ object_=_response.json(),
320
+ ),
321
+ ),
322
+ )
323
+ if _response.status_code == 401:
324
+ raise UnauthorizedError(
325
+ headers=dict(_response.headers),
326
+ body=typing.cast(
327
+ UnauthorizedErrorBody,
328
+ parse_obj_as(
329
+ type_=UnauthorizedErrorBody, # type: ignore
330
+ object_=_response.json(),
331
+ ),
332
+ ),
333
+ )
334
+ if _response.status_code == 403:
335
+ raise ForbiddenError(
336
+ headers=dict(_response.headers),
337
+ body=typing.cast(
338
+ PermissionDeniedError,
339
+ parse_obj_as(
340
+ type_=PermissionDeniedError, # type: ignore
341
+ object_=_response.json(),
342
+ ),
343
+ ),
344
+ )
345
+ if _response.status_code == 404:
346
+ raise NotFoundError(
347
+ headers=dict(_response.headers),
348
+ body=typing.cast(
349
+ NotFoundErrorBody,
350
+ parse_obj_as(
351
+ type_=NotFoundErrorBody, # type: ignore
352
+ object_=_response.json(),
353
+ ),
354
+ ),
355
+ )
356
+ if _response.status_code == 500:
357
+ raise InternalServerError(
358
+ headers=dict(_response.headers),
359
+ body=typing.cast(
360
+ typing.Optional[typing.Any],
361
+ parse_obj_as(
362
+ type_=typing.Optional[typing.Any], # type: ignore
363
+ object_=_response.json(),
364
+ ),
365
+ ),
366
+ )
367
+ _response_json = _response.json()
368
+ except JSONDecodeError:
369
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
370
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
371
+
372
+ def update(
373
+ self,
374
+ id: str,
375
+ *,
376
+ label: typing.Optional[AnnotationsUpdateRequestLabel] = OMIT,
377
+ reasoning: typing.Optional[str] = OMIT,
378
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
379
+ request_options: typing.Optional[RequestOptions] = None,
380
+ ) -> HttpResponse[AnnotationsUpdateResponse]:
381
+ """
382
+ Parameters
383
+ ----------
384
+ id : str
385
+
386
+ label : typing.Optional[AnnotationsUpdateRequestLabel]
387
+
388
+ reasoning : typing.Optional[str]
389
+
390
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
391
+
392
+ request_options : typing.Optional[RequestOptions]
393
+ Request-specific configuration.
394
+
395
+ Returns
396
+ -------
397
+ HttpResponse[AnnotationsUpdateResponse]
398
+ Success
399
+ """
400
+ _response = self._client_wrapper.httpx_client.request(
401
+ f"annotations/{jsonable_encoder(id)}",
402
+ method="PUT",
403
+ json={
404
+ "label": label,
405
+ "reasoning": reasoning,
406
+ "metadata": metadata,
407
+ },
408
+ headers={
409
+ "content-type": "application/json",
410
+ },
411
+ request_options=request_options,
412
+ omit=OMIT,
413
+ )
414
+ try:
415
+ if 200 <= _response.status_code < 300:
416
+ _data = typing.cast(
417
+ AnnotationsUpdateResponse,
418
+ parse_obj_as(
419
+ type_=AnnotationsUpdateResponse, # type: ignore
420
+ object_=_response.json(),
421
+ ),
422
+ )
423
+ return HttpResponse(response=_response, data=_data)
424
+ if _response.status_code == 400:
425
+ raise BadRequestError(
426
+ headers=dict(_response.headers),
427
+ body=typing.cast(
428
+ HttpApiDecodeError,
429
+ parse_obj_as(
430
+ type_=HttpApiDecodeError, # type: ignore
431
+ object_=_response.json(),
432
+ ),
433
+ ),
434
+ )
435
+ if _response.status_code == 401:
436
+ raise UnauthorizedError(
437
+ headers=dict(_response.headers),
438
+ body=typing.cast(
439
+ UnauthorizedErrorBody,
440
+ parse_obj_as(
441
+ type_=UnauthorizedErrorBody, # type: ignore
442
+ object_=_response.json(),
443
+ ),
444
+ ),
445
+ )
446
+ if _response.status_code == 403:
447
+ raise ForbiddenError(
448
+ headers=dict(_response.headers),
449
+ body=typing.cast(
450
+ PermissionDeniedError,
451
+ parse_obj_as(
452
+ type_=PermissionDeniedError, # type: ignore
453
+ object_=_response.json(),
454
+ ),
455
+ ),
456
+ )
457
+ if _response.status_code == 404:
458
+ raise NotFoundError(
459
+ headers=dict(_response.headers),
460
+ body=typing.cast(
461
+ NotFoundErrorBody,
462
+ parse_obj_as(
463
+ type_=NotFoundErrorBody, # type: ignore
464
+ object_=_response.json(),
465
+ ),
466
+ ),
467
+ )
468
+ if _response.status_code == 500:
469
+ raise InternalServerError(
470
+ headers=dict(_response.headers),
471
+ body=typing.cast(
472
+ typing.Optional[typing.Any],
473
+ parse_obj_as(
474
+ type_=typing.Optional[typing.Any], # type: ignore
475
+ object_=_response.json(),
476
+ ),
477
+ ),
478
+ )
479
+ _response_json = _response.json()
480
+ except JSONDecodeError:
481
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
482
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
483
+
484
+ def delete(self, id: str, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[None]:
485
+ """
486
+ Parameters
487
+ ----------
488
+ id : str
489
+
490
+ request_options : typing.Optional[RequestOptions]
491
+ Request-specific configuration.
492
+
493
+ Returns
494
+ -------
495
+ HttpResponse[None]
496
+ """
497
+ _response = self._client_wrapper.httpx_client.request(
498
+ f"annotations/{jsonable_encoder(id)}",
499
+ method="DELETE",
500
+ request_options=request_options,
501
+ )
502
+ try:
503
+ if 200 <= _response.status_code < 300:
504
+ return HttpResponse(response=_response, data=None)
505
+ if _response.status_code == 400:
506
+ raise BadRequestError(
507
+ headers=dict(_response.headers),
508
+ body=typing.cast(
509
+ HttpApiDecodeError,
510
+ parse_obj_as(
511
+ type_=HttpApiDecodeError, # type: ignore
512
+ object_=_response.json(),
513
+ ),
514
+ ),
515
+ )
516
+ if _response.status_code == 401:
517
+ raise UnauthorizedError(
518
+ headers=dict(_response.headers),
519
+ body=typing.cast(
520
+ UnauthorizedErrorBody,
521
+ parse_obj_as(
522
+ type_=UnauthorizedErrorBody, # type: ignore
523
+ object_=_response.json(),
524
+ ),
525
+ ),
526
+ )
527
+ if _response.status_code == 403:
528
+ raise ForbiddenError(
529
+ headers=dict(_response.headers),
530
+ body=typing.cast(
531
+ PermissionDeniedError,
532
+ parse_obj_as(
533
+ type_=PermissionDeniedError, # type: ignore
534
+ object_=_response.json(),
535
+ ),
536
+ ),
537
+ )
538
+ if _response.status_code == 404:
539
+ raise NotFoundError(
540
+ headers=dict(_response.headers),
541
+ body=typing.cast(
542
+ NotFoundErrorBody,
543
+ parse_obj_as(
544
+ type_=NotFoundErrorBody, # type: ignore
545
+ object_=_response.json(),
546
+ ),
547
+ ),
548
+ )
549
+ if _response.status_code == 500:
550
+ raise InternalServerError(
551
+ headers=dict(_response.headers),
552
+ body=typing.cast(
553
+ typing.Optional[typing.Any],
554
+ parse_obj_as(
555
+ type_=typing.Optional[typing.Any], # type: ignore
556
+ object_=_response.json(),
557
+ ),
558
+ ),
559
+ )
560
+ _response_json = _response.json()
561
+ except JSONDecodeError:
562
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
563
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
564
+
565
+
566
+ class AsyncRawAnnotationsClient:
567
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
568
+ self._client_wrapper = client_wrapper
569
+
570
+ async def list(
571
+ self,
572
+ *,
573
+ otel_trace_id: typing.Optional[str] = None,
574
+ otel_span_id: typing.Optional[str] = None,
575
+ label: typing.Optional[AnnotationsListRequestLabel] = None,
576
+ limit: typing.Optional[NumberFromString] = None,
577
+ offset: typing.Optional[NumberFromString] = None,
578
+ request_options: typing.Optional[RequestOptions] = None,
579
+ ) -> AsyncHttpResponse[AnnotationsListResponse]:
580
+ """
581
+ Parameters
582
+ ----------
583
+ otel_trace_id : typing.Optional[str]
584
+
585
+ otel_span_id : typing.Optional[str]
586
+
587
+ label : typing.Optional[AnnotationsListRequestLabel]
588
+
589
+ limit : typing.Optional[NumberFromString]
590
+
591
+ offset : typing.Optional[NumberFromString]
592
+
593
+ request_options : typing.Optional[RequestOptions]
594
+ Request-specific configuration.
595
+
596
+ Returns
597
+ -------
598
+ AsyncHttpResponse[AnnotationsListResponse]
599
+ Success
600
+ """
601
+ _response = await self._client_wrapper.httpx_client.request(
602
+ "annotations",
603
+ method="GET",
604
+ params={
605
+ "otelTraceId": otel_trace_id,
606
+ "otelSpanId": otel_span_id,
607
+ "label": label,
608
+ "limit": limit,
609
+ "offset": offset,
610
+ },
611
+ request_options=request_options,
612
+ )
613
+ try:
614
+ if 200 <= _response.status_code < 300:
615
+ _data = typing.cast(
616
+ AnnotationsListResponse,
617
+ parse_obj_as(
618
+ type_=AnnotationsListResponse, # type: ignore
619
+ object_=_response.json(),
620
+ ),
621
+ )
622
+ return AsyncHttpResponse(response=_response, data=_data)
623
+ if _response.status_code == 400:
624
+ raise BadRequestError(
625
+ headers=dict(_response.headers),
626
+ body=typing.cast(
627
+ HttpApiDecodeError,
628
+ parse_obj_as(
629
+ type_=HttpApiDecodeError, # type: ignore
630
+ object_=_response.json(),
631
+ ),
632
+ ),
633
+ )
634
+ if _response.status_code == 401:
635
+ raise UnauthorizedError(
636
+ headers=dict(_response.headers),
637
+ body=typing.cast(
638
+ UnauthorizedErrorBody,
639
+ parse_obj_as(
640
+ type_=UnauthorizedErrorBody, # type: ignore
641
+ object_=_response.json(),
642
+ ),
643
+ ),
644
+ )
645
+ if _response.status_code == 403:
646
+ raise ForbiddenError(
647
+ headers=dict(_response.headers),
648
+ body=typing.cast(
649
+ PermissionDeniedError,
650
+ parse_obj_as(
651
+ type_=PermissionDeniedError, # type: ignore
652
+ object_=_response.json(),
653
+ ),
654
+ ),
655
+ )
656
+ if _response.status_code == 404:
657
+ raise NotFoundError(
658
+ headers=dict(_response.headers),
659
+ body=typing.cast(
660
+ NotFoundErrorBody,
661
+ parse_obj_as(
662
+ type_=NotFoundErrorBody, # type: ignore
663
+ object_=_response.json(),
664
+ ),
665
+ ),
666
+ )
667
+ if _response.status_code == 500:
668
+ raise InternalServerError(
669
+ headers=dict(_response.headers),
670
+ body=typing.cast(
671
+ typing.Optional[typing.Any],
672
+ parse_obj_as(
673
+ type_=typing.Optional[typing.Any], # type: ignore
674
+ object_=_response.json(),
675
+ ),
676
+ ),
677
+ )
678
+ _response_json = _response.json()
679
+ except JSONDecodeError:
680
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
681
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
682
+
683
+ async def create(
684
+ self,
685
+ *,
686
+ otel_span_id: str,
687
+ otel_trace_id: str,
688
+ label: typing.Optional[AnnotationsCreateRequestLabel] = OMIT,
689
+ reasoning: typing.Optional[str] = OMIT,
690
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
691
+ request_options: typing.Optional[RequestOptions] = None,
692
+ ) -> AsyncHttpResponse[AnnotationsCreateResponse]:
693
+ """
694
+ Parameters
695
+ ----------
696
+ otel_span_id : str
697
+
698
+ otel_trace_id : str
699
+
700
+ label : typing.Optional[AnnotationsCreateRequestLabel]
701
+
702
+ reasoning : typing.Optional[str]
703
+
704
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
705
+
706
+ request_options : typing.Optional[RequestOptions]
707
+ Request-specific configuration.
708
+
709
+ Returns
710
+ -------
711
+ AsyncHttpResponse[AnnotationsCreateResponse]
712
+ Success
713
+ """
714
+ _response = await self._client_wrapper.httpx_client.request(
715
+ "annotations",
716
+ method="POST",
717
+ json={
718
+ "otelSpanId": otel_span_id,
719
+ "otelTraceId": otel_trace_id,
720
+ "label": label,
721
+ "reasoning": reasoning,
722
+ "metadata": metadata,
723
+ },
724
+ headers={
725
+ "content-type": "application/json",
726
+ },
727
+ request_options=request_options,
728
+ omit=OMIT,
729
+ )
730
+ try:
731
+ if 200 <= _response.status_code < 300:
732
+ _data = typing.cast(
733
+ AnnotationsCreateResponse,
734
+ parse_obj_as(
735
+ type_=AnnotationsCreateResponse, # type: ignore
736
+ object_=_response.json(),
737
+ ),
738
+ )
739
+ return AsyncHttpResponse(response=_response, data=_data)
740
+ if _response.status_code == 400:
741
+ raise BadRequestError(
742
+ headers=dict(_response.headers),
743
+ body=typing.cast(
744
+ HttpApiDecodeError,
745
+ parse_obj_as(
746
+ type_=HttpApiDecodeError, # type: ignore
747
+ object_=_response.json(),
748
+ ),
749
+ ),
750
+ )
751
+ if _response.status_code == 401:
752
+ raise UnauthorizedError(
753
+ headers=dict(_response.headers),
754
+ body=typing.cast(
755
+ UnauthorizedErrorBody,
756
+ parse_obj_as(
757
+ type_=UnauthorizedErrorBody, # type: ignore
758
+ object_=_response.json(),
759
+ ),
760
+ ),
761
+ )
762
+ if _response.status_code == 403:
763
+ raise ForbiddenError(
764
+ headers=dict(_response.headers),
765
+ body=typing.cast(
766
+ PermissionDeniedError,
767
+ parse_obj_as(
768
+ type_=PermissionDeniedError, # type: ignore
769
+ object_=_response.json(),
770
+ ),
771
+ ),
772
+ )
773
+ if _response.status_code == 404:
774
+ raise NotFoundError(
775
+ headers=dict(_response.headers),
776
+ body=typing.cast(
777
+ NotFoundErrorBody,
778
+ parse_obj_as(
779
+ type_=NotFoundErrorBody, # type: ignore
780
+ object_=_response.json(),
781
+ ),
782
+ ),
783
+ )
784
+ if _response.status_code == 409:
785
+ raise ConflictError(
786
+ headers=dict(_response.headers),
787
+ body=typing.cast(
788
+ AlreadyExistsError,
789
+ parse_obj_as(
790
+ type_=AlreadyExistsError, # type: ignore
791
+ object_=_response.json(),
792
+ ),
793
+ ),
794
+ )
795
+ if _response.status_code == 500:
796
+ raise InternalServerError(
797
+ headers=dict(_response.headers),
798
+ body=typing.cast(
799
+ typing.Optional[typing.Any],
800
+ parse_obj_as(
801
+ type_=typing.Optional[typing.Any], # type: ignore
802
+ object_=_response.json(),
803
+ ),
804
+ ),
805
+ )
806
+ _response_json = _response.json()
807
+ except JSONDecodeError:
808
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
809
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
810
+
811
+ async def get(
812
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
813
+ ) -> AsyncHttpResponse[AnnotationsGetResponse]:
814
+ """
815
+ Parameters
816
+ ----------
817
+ id : str
818
+
819
+ request_options : typing.Optional[RequestOptions]
820
+ Request-specific configuration.
821
+
822
+ Returns
823
+ -------
824
+ AsyncHttpResponse[AnnotationsGetResponse]
825
+ Success
826
+ """
827
+ _response = await self._client_wrapper.httpx_client.request(
828
+ f"annotations/{jsonable_encoder(id)}",
829
+ method="GET",
830
+ request_options=request_options,
831
+ )
832
+ try:
833
+ if 200 <= _response.status_code < 300:
834
+ _data = typing.cast(
835
+ AnnotationsGetResponse,
836
+ parse_obj_as(
837
+ type_=AnnotationsGetResponse, # type: ignore
838
+ object_=_response.json(),
839
+ ),
840
+ )
841
+ return AsyncHttpResponse(response=_response, data=_data)
842
+ if _response.status_code == 400:
843
+ raise BadRequestError(
844
+ headers=dict(_response.headers),
845
+ body=typing.cast(
846
+ HttpApiDecodeError,
847
+ parse_obj_as(
848
+ type_=HttpApiDecodeError, # type: ignore
849
+ object_=_response.json(),
850
+ ),
851
+ ),
852
+ )
853
+ if _response.status_code == 401:
854
+ raise UnauthorizedError(
855
+ headers=dict(_response.headers),
856
+ body=typing.cast(
857
+ UnauthorizedErrorBody,
858
+ parse_obj_as(
859
+ type_=UnauthorizedErrorBody, # type: ignore
860
+ object_=_response.json(),
861
+ ),
862
+ ),
863
+ )
864
+ if _response.status_code == 403:
865
+ raise ForbiddenError(
866
+ headers=dict(_response.headers),
867
+ body=typing.cast(
868
+ PermissionDeniedError,
869
+ parse_obj_as(
870
+ type_=PermissionDeniedError, # type: ignore
871
+ object_=_response.json(),
872
+ ),
873
+ ),
874
+ )
875
+ if _response.status_code == 404:
876
+ raise NotFoundError(
877
+ headers=dict(_response.headers),
878
+ body=typing.cast(
879
+ NotFoundErrorBody,
880
+ parse_obj_as(
881
+ type_=NotFoundErrorBody, # type: ignore
882
+ object_=_response.json(),
883
+ ),
884
+ ),
885
+ )
886
+ if _response.status_code == 500:
887
+ raise InternalServerError(
888
+ headers=dict(_response.headers),
889
+ body=typing.cast(
890
+ typing.Optional[typing.Any],
891
+ parse_obj_as(
892
+ type_=typing.Optional[typing.Any], # type: ignore
893
+ object_=_response.json(),
894
+ ),
895
+ ),
896
+ )
897
+ _response_json = _response.json()
898
+ except JSONDecodeError:
899
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
900
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
901
+
902
+ async def update(
903
+ self,
904
+ id: str,
905
+ *,
906
+ label: typing.Optional[AnnotationsUpdateRequestLabel] = OMIT,
907
+ reasoning: typing.Optional[str] = OMIT,
908
+ metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
909
+ request_options: typing.Optional[RequestOptions] = None,
910
+ ) -> AsyncHttpResponse[AnnotationsUpdateResponse]:
911
+ """
912
+ Parameters
913
+ ----------
914
+ id : str
915
+
916
+ label : typing.Optional[AnnotationsUpdateRequestLabel]
917
+
918
+ reasoning : typing.Optional[str]
919
+
920
+ metadata : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
921
+
922
+ request_options : typing.Optional[RequestOptions]
923
+ Request-specific configuration.
924
+
925
+ Returns
926
+ -------
927
+ AsyncHttpResponse[AnnotationsUpdateResponse]
928
+ Success
929
+ """
930
+ _response = await self._client_wrapper.httpx_client.request(
931
+ f"annotations/{jsonable_encoder(id)}",
932
+ method="PUT",
933
+ json={
934
+ "label": label,
935
+ "reasoning": reasoning,
936
+ "metadata": metadata,
937
+ },
938
+ headers={
939
+ "content-type": "application/json",
940
+ },
941
+ request_options=request_options,
942
+ omit=OMIT,
943
+ )
944
+ try:
945
+ if 200 <= _response.status_code < 300:
946
+ _data = typing.cast(
947
+ AnnotationsUpdateResponse,
948
+ parse_obj_as(
949
+ type_=AnnotationsUpdateResponse, # type: ignore
950
+ object_=_response.json(),
951
+ ),
952
+ )
953
+ return AsyncHttpResponse(response=_response, data=_data)
954
+ if _response.status_code == 400:
955
+ raise BadRequestError(
956
+ headers=dict(_response.headers),
957
+ body=typing.cast(
958
+ HttpApiDecodeError,
959
+ parse_obj_as(
960
+ type_=HttpApiDecodeError, # type: ignore
961
+ object_=_response.json(),
962
+ ),
963
+ ),
964
+ )
965
+ if _response.status_code == 401:
966
+ raise UnauthorizedError(
967
+ headers=dict(_response.headers),
968
+ body=typing.cast(
969
+ UnauthorizedErrorBody,
970
+ parse_obj_as(
971
+ type_=UnauthorizedErrorBody, # type: ignore
972
+ object_=_response.json(),
973
+ ),
974
+ ),
975
+ )
976
+ if _response.status_code == 403:
977
+ raise ForbiddenError(
978
+ headers=dict(_response.headers),
979
+ body=typing.cast(
980
+ PermissionDeniedError,
981
+ parse_obj_as(
982
+ type_=PermissionDeniedError, # type: ignore
983
+ object_=_response.json(),
984
+ ),
985
+ ),
986
+ )
987
+ if _response.status_code == 404:
988
+ raise NotFoundError(
989
+ headers=dict(_response.headers),
990
+ body=typing.cast(
991
+ NotFoundErrorBody,
992
+ parse_obj_as(
993
+ type_=NotFoundErrorBody, # type: ignore
994
+ object_=_response.json(),
995
+ ),
996
+ ),
997
+ )
998
+ if _response.status_code == 500:
999
+ raise InternalServerError(
1000
+ headers=dict(_response.headers),
1001
+ body=typing.cast(
1002
+ typing.Optional[typing.Any],
1003
+ parse_obj_as(
1004
+ type_=typing.Optional[typing.Any], # type: ignore
1005
+ object_=_response.json(),
1006
+ ),
1007
+ ),
1008
+ )
1009
+ _response_json = _response.json()
1010
+ except JSONDecodeError:
1011
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1012
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
1013
+
1014
+ async def delete(
1015
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
1016
+ ) -> AsyncHttpResponse[None]:
1017
+ """
1018
+ Parameters
1019
+ ----------
1020
+ id : str
1021
+
1022
+ request_options : typing.Optional[RequestOptions]
1023
+ Request-specific configuration.
1024
+
1025
+ Returns
1026
+ -------
1027
+ AsyncHttpResponse[None]
1028
+ """
1029
+ _response = await self._client_wrapper.httpx_client.request(
1030
+ f"annotations/{jsonable_encoder(id)}",
1031
+ method="DELETE",
1032
+ request_options=request_options,
1033
+ )
1034
+ try:
1035
+ if 200 <= _response.status_code < 300:
1036
+ return AsyncHttpResponse(response=_response, data=None)
1037
+ if _response.status_code == 400:
1038
+ raise BadRequestError(
1039
+ headers=dict(_response.headers),
1040
+ body=typing.cast(
1041
+ HttpApiDecodeError,
1042
+ parse_obj_as(
1043
+ type_=HttpApiDecodeError, # type: ignore
1044
+ object_=_response.json(),
1045
+ ),
1046
+ ),
1047
+ )
1048
+ if _response.status_code == 401:
1049
+ raise UnauthorizedError(
1050
+ headers=dict(_response.headers),
1051
+ body=typing.cast(
1052
+ UnauthorizedErrorBody,
1053
+ parse_obj_as(
1054
+ type_=UnauthorizedErrorBody, # type: ignore
1055
+ object_=_response.json(),
1056
+ ),
1057
+ ),
1058
+ )
1059
+ if _response.status_code == 403:
1060
+ raise ForbiddenError(
1061
+ headers=dict(_response.headers),
1062
+ body=typing.cast(
1063
+ PermissionDeniedError,
1064
+ parse_obj_as(
1065
+ type_=PermissionDeniedError, # type: ignore
1066
+ object_=_response.json(),
1067
+ ),
1068
+ ),
1069
+ )
1070
+ if _response.status_code == 404:
1071
+ raise NotFoundError(
1072
+ headers=dict(_response.headers),
1073
+ body=typing.cast(
1074
+ NotFoundErrorBody,
1075
+ parse_obj_as(
1076
+ type_=NotFoundErrorBody, # type: ignore
1077
+ object_=_response.json(),
1078
+ ),
1079
+ ),
1080
+ )
1081
+ if _response.status_code == 500:
1082
+ raise InternalServerError(
1083
+ headers=dict(_response.headers),
1084
+ body=typing.cast(
1085
+ typing.Optional[typing.Any],
1086
+ parse_obj_as(
1087
+ type_=typing.Optional[typing.Any], # type: ignore
1088
+ object_=_response.json(),
1089
+ ),
1090
+ ),
1091
+ )
1092
+ _response_json = _response.json()
1093
+ except JSONDecodeError:
1094
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
1095
+ raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)