agenta 0.32.0a1__py3-none-any.whl → 0.33.0__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 (80) hide show
  1. agenta/__init__.py +2 -0
  2. agenta/client/backend/__init__.py +39 -31
  3. agenta/client/backend/admin/__init__.py +1 -0
  4. agenta/client/backend/admin/client.py +576 -0
  5. agenta/client/backend/apps/client.py +450 -68
  6. agenta/client/backend/bases/client.py +10 -10
  7. agenta/client/backend/client.py +112 -122
  8. agenta/client/backend/containers/client.py +70 -28
  9. agenta/client/backend/core/http_client.py +3 -3
  10. agenta/client/backend/environments/client.py +8 -8
  11. agenta/client/backend/evaluations/client.py +46 -52
  12. agenta/client/backend/evaluators/client.py +32 -32
  13. agenta/client/backend/human_evaluations/__init__.py +1 -0
  14. agenta/client/backend/human_evaluations/client.py +1692 -0
  15. agenta/client/backend/observability/__init__.py +4 -0
  16. agenta/client/backend/observability/client.py +221 -744
  17. agenta/client/backend/testsets/client.py +38 -202
  18. agenta/client/backend/types/__init__.py +34 -28
  19. agenta/client/backend/types/account_response.py +24 -0
  20. agenta/client/backend/types/app_variant_revision.py +2 -1
  21. agenta/client/backend/types/{create_trace_response.py → delete_evaluation.py} +2 -3
  22. agenta/client/backend/types/{evaluation_scenario_score_update.py → legacy_scope_request.py} +2 -2
  23. agenta/client/backend/types/legacy_scopes_response.py +29 -0
  24. agenta/client/backend/types/{human_evaluation_update.py → legacy_user_request.py} +4 -4
  25. agenta/client/backend/types/{span_variant.py → legacy_user_response.py} +2 -4
  26. agenta/client/backend/types/organization_membership_request.py +25 -0
  27. agenta/client/backend/types/organization_request.py +23 -0
  28. agenta/client/backend/types/permission.py +4 -0
  29. agenta/client/backend/types/{llm_tokens.py → project_membership_request.py} +8 -5
  30. agenta/client/backend/types/project_request.py +26 -0
  31. agenta/client/backend/types/project_scope.py +29 -0
  32. agenta/client/backend/types/provider_kind.py +1 -1
  33. agenta/client/backend/types/reference.py +22 -0
  34. agenta/client/backend/types/role.py +15 -0
  35. agenta/client/backend/types/scopes_response_model.py +22 -0
  36. agenta/client/backend/types/score.py +1 -1
  37. agenta/client/backend/types/secret_response_dto.py +2 -2
  38. agenta/client/backend/types/user_request.py +22 -0
  39. agenta/client/backend/types/workspace_membership_request.py +26 -0
  40. agenta/client/backend/types/workspace_request.py +25 -0
  41. agenta/client/backend/variants/client.py +208 -42
  42. agenta/client/backend/vault/client.py +11 -9
  43. agenta/sdk/__init__.py +3 -0
  44. agenta/sdk/agenta_init.py +3 -1
  45. agenta/sdk/assets.py +4 -4
  46. agenta/sdk/decorators/routing.py +129 -23
  47. agenta/sdk/decorators/tracing.py +16 -4
  48. agenta/sdk/litellm/litellm.py +44 -8
  49. agenta/sdk/litellm/mockllm.py +2 -2
  50. agenta/sdk/litellm/mocks/__init__.py +9 -3
  51. agenta/sdk/managers/apps.py +64 -0
  52. agenta/sdk/managers/shared.py +2 -2
  53. agenta/sdk/middleware/auth.py +156 -53
  54. agenta/sdk/middleware/config.py +28 -16
  55. agenta/sdk/middleware/inline.py +1 -1
  56. agenta/sdk/middleware/mock.py +1 -1
  57. agenta/sdk/middleware/otel.py +1 -1
  58. agenta/sdk/middleware/vault.py +1 -1
  59. agenta/sdk/tracing/exporters.py +0 -1
  60. agenta/sdk/tracing/inline.py +26 -30
  61. agenta/sdk/types.py +12 -9
  62. {agenta-0.32.0a1.dist-info → agenta-0.33.0.dist-info}/METADATA +23 -20
  63. {agenta-0.32.0a1.dist-info → agenta-0.33.0.dist-info}/RECORD +69 -63
  64. agenta/client/backend/observability_v_1/__init__.py +0 -5
  65. agenta/client/backend/observability_v_1/client.py +0 -763
  66. agenta/client/backend/types/create_span.py +0 -45
  67. agenta/client/backend/types/human_evaluation_scenario_update.py +0 -30
  68. agenta/client/backend/types/new_human_evaluation.py +0 -27
  69. agenta/client/backend/types/outputs.py +0 -5
  70. agenta/client/backend/types/span.py +0 -42
  71. agenta/client/backend/types/span_detail.py +0 -44
  72. agenta/client/backend/types/span_status_code.py +0 -5
  73. agenta/client/backend/types/trace_detail.py +0 -44
  74. agenta/client/backend/types/with_pagination.py +0 -26
  75. /agenta/client/backend/{observability_v_1 → observability}/types/__init__.py +0 -0
  76. /agenta/client/backend/{observability_v_1 → observability}/types/format.py +0 -0
  77. /agenta/client/backend/{observability_v_1 → observability}/types/query_analytics_response.py +0 -0
  78. /agenta/client/backend/{observability_v_1 → observability}/types/query_traces_response.py +0 -0
  79. {agenta-0.32.0a1.dist-info → agenta-0.33.0.dist-info}/WHEEL +0 -0
  80. {agenta-0.32.0a1.dist-info → agenta-0.33.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,576 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+ from ..core.client_wrapper import SyncClientWrapper
5
+ from ..types.user_request import UserRequest
6
+ from ..types.organization_request import OrganizationRequest
7
+ from ..types.workspace_request import WorkspaceRequest
8
+ from ..types.project_request import ProjectRequest
9
+ from ..types.organization_membership_request import OrganizationMembershipRequest
10
+ from ..types.workspace_membership_request import WorkspaceMembershipRequest
11
+ from ..types.project_membership_request import ProjectMembershipRequest
12
+ from ..core.request_options import RequestOptions
13
+ from ..types.scopes_response_model import ScopesResponseModel
14
+ from ..core.serialization import convert_and_respect_annotation_metadata
15
+ from ..core.pydantic_utilities import parse_obj_as
16
+ from ..errors.unprocessable_entity_error import UnprocessableEntityError
17
+ from ..types.http_validation_error import HttpValidationError
18
+ from json.decoder import JSONDecodeError
19
+ from ..core.api_error import ApiError
20
+ from ..types.legacy_user_request import LegacyUserRequest
21
+ from ..types.legacy_scope_request import LegacyScopeRequest
22
+ from ..types.account_response import AccountResponse
23
+ from ..core.client_wrapper import AsyncClientWrapper
24
+
25
+ # this is used as the default value for optional parameters
26
+ OMIT = typing.cast(typing.Any, ...)
27
+
28
+
29
+ class AdminClient:
30
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
31
+ self._client_wrapper = client_wrapper
32
+
33
+ def create_accounts(
34
+ self,
35
+ *,
36
+ users: typing.Dict[str, UserRequest],
37
+ organizations: typing.Dict[str, OrganizationRequest],
38
+ workspaces: typing.Dict[str, WorkspaceRequest],
39
+ projects: typing.Dict[str, ProjectRequest],
40
+ organization_memberships: typing.Dict[str, OrganizationMembershipRequest],
41
+ workspace_memberships: typing.Dict[str, WorkspaceMembershipRequest],
42
+ project_memberships: typing.Dict[str, ProjectMembershipRequest],
43
+ request_options: typing.Optional[RequestOptions] = None,
44
+ ) -> ScopesResponseModel:
45
+ """
46
+ Parameters
47
+ ----------
48
+ users : typing.Dict[str, UserRequest]
49
+
50
+ organizations : typing.Dict[str, OrganizationRequest]
51
+
52
+ workspaces : typing.Dict[str, WorkspaceRequest]
53
+
54
+ projects : typing.Dict[str, ProjectRequest]
55
+
56
+ organization_memberships : typing.Dict[str, OrganizationMembershipRequest]
57
+
58
+ workspace_memberships : typing.Dict[str, WorkspaceMembershipRequest]
59
+
60
+ project_memberships : typing.Dict[str, ProjectMembershipRequest]
61
+
62
+ request_options : typing.Optional[RequestOptions]
63
+ Request-specific configuration.
64
+
65
+ Returns
66
+ -------
67
+ ScopesResponseModel
68
+ Successful Response
69
+
70
+ Examples
71
+ --------
72
+ from agenta import (
73
+ AgentaApi,
74
+ OrganizationMembershipRequest,
75
+ OrganizationRequest,
76
+ ProjectMembershipRequest,
77
+ ProjectRequest,
78
+ Reference,
79
+ UserRequest,
80
+ WorkspaceMembershipRequest,
81
+ WorkspaceRequest,
82
+ )
83
+
84
+ client = AgentaApi(
85
+ api_key="YOUR_API_KEY",
86
+ base_url="https://yourhost.com/path/to/api",
87
+ )
88
+ client.admin.create_accounts(
89
+ users={
90
+ "key": UserRequest(
91
+ name="name",
92
+ email="email",
93
+ )
94
+ },
95
+ organizations={
96
+ "key": OrganizationRequest(
97
+ name="name",
98
+ description="description",
99
+ is_paying=True,
100
+ )
101
+ },
102
+ workspaces={
103
+ "key": WorkspaceRequest(
104
+ name="name",
105
+ description="description",
106
+ is_default=True,
107
+ organization_ref=Reference(),
108
+ )
109
+ },
110
+ projects={
111
+ "key": ProjectRequest(
112
+ name="name",
113
+ description="description",
114
+ is_default=True,
115
+ workspace_ref=Reference(),
116
+ organization_ref=Reference(),
117
+ )
118
+ },
119
+ organization_memberships={
120
+ "key": OrganizationMembershipRequest(
121
+ is_demo=True,
122
+ user_ref=Reference(),
123
+ organization_ref=Reference(),
124
+ )
125
+ },
126
+ workspace_memberships={
127
+ "key": WorkspaceMembershipRequest(
128
+ role="owner",
129
+ is_demo=True,
130
+ user_ref=Reference(),
131
+ workspace_ref=Reference(),
132
+ )
133
+ },
134
+ project_memberships={
135
+ "key": ProjectMembershipRequest(
136
+ role="owner",
137
+ is_demo=True,
138
+ user_ref=Reference(),
139
+ project_ref=Reference(),
140
+ )
141
+ },
142
+ )
143
+ """
144
+ _response = self._client_wrapper.httpx_client.request(
145
+ "admin/accounts",
146
+ method="POST",
147
+ json={
148
+ "users": convert_and_respect_annotation_metadata(
149
+ object_=users,
150
+ annotation=typing.Dict[str, UserRequest],
151
+ direction="write",
152
+ ),
153
+ "organizations": convert_and_respect_annotation_metadata(
154
+ object_=organizations,
155
+ annotation=typing.Dict[str, OrganizationRequest],
156
+ direction="write",
157
+ ),
158
+ "workspaces": convert_and_respect_annotation_metadata(
159
+ object_=workspaces,
160
+ annotation=typing.Dict[str, WorkspaceRequest],
161
+ direction="write",
162
+ ),
163
+ "projects": convert_and_respect_annotation_metadata(
164
+ object_=projects,
165
+ annotation=typing.Dict[str, ProjectRequest],
166
+ direction="write",
167
+ ),
168
+ "organization_memberships": convert_and_respect_annotation_metadata(
169
+ object_=organization_memberships,
170
+ annotation=typing.Dict[str, OrganizationMembershipRequest],
171
+ direction="write",
172
+ ),
173
+ "workspace_memberships": convert_and_respect_annotation_metadata(
174
+ object_=workspace_memberships,
175
+ annotation=typing.Dict[str, WorkspaceMembershipRequest],
176
+ direction="write",
177
+ ),
178
+ "project_memberships": convert_and_respect_annotation_metadata(
179
+ object_=project_memberships,
180
+ annotation=typing.Dict[str, ProjectMembershipRequest],
181
+ direction="write",
182
+ ),
183
+ },
184
+ headers={
185
+ "content-type": "application/json",
186
+ },
187
+ request_options=request_options,
188
+ omit=OMIT,
189
+ )
190
+ try:
191
+ if 200 <= _response.status_code < 300:
192
+ return typing.cast(
193
+ ScopesResponseModel,
194
+ parse_obj_as(
195
+ type_=ScopesResponseModel, # type: ignore
196
+ object_=_response.json(),
197
+ ),
198
+ )
199
+ if _response.status_code == 422:
200
+ raise UnprocessableEntityError(
201
+ typing.cast(
202
+ HttpValidationError,
203
+ parse_obj_as(
204
+ type_=HttpValidationError, # type: ignore
205
+ object_=_response.json(),
206
+ ),
207
+ )
208
+ )
209
+ _response_json = _response.json()
210
+ except JSONDecodeError:
211
+ raise ApiError(status_code=_response.status_code, body=_response.text)
212
+ raise ApiError(status_code=_response.status_code, body=_response_json)
213
+
214
+ def create_account(
215
+ self,
216
+ *,
217
+ user: LegacyUserRequest,
218
+ scope: LegacyScopeRequest,
219
+ request_options: typing.Optional[RequestOptions] = None,
220
+ ) -> AccountResponse:
221
+ """
222
+ Parameters
223
+ ----------
224
+ user : LegacyUserRequest
225
+
226
+ scope : LegacyScopeRequest
227
+
228
+ request_options : typing.Optional[RequestOptions]
229
+ Request-specific configuration.
230
+
231
+ Returns
232
+ -------
233
+ AccountResponse
234
+ Successful Response
235
+
236
+ Examples
237
+ --------
238
+ from agenta import AgentaApi, LegacyScopeRequest, LegacyUserRequest
239
+
240
+ client = AgentaApi(
241
+ api_key="YOUR_API_KEY",
242
+ base_url="https://yourhost.com/path/to/api",
243
+ )
244
+ client.admin.create_account(
245
+ user=LegacyUserRequest(
246
+ name="name",
247
+ email="email",
248
+ ),
249
+ scope=LegacyScopeRequest(
250
+ name="name",
251
+ ),
252
+ )
253
+ """
254
+ _response = self._client_wrapper.httpx_client.request(
255
+ "admin/account",
256
+ method="POST",
257
+ json={
258
+ "user": convert_and_respect_annotation_metadata(
259
+ object_=user, annotation=LegacyUserRequest, direction="write"
260
+ ),
261
+ "scope": convert_and_respect_annotation_metadata(
262
+ object_=scope, annotation=LegacyScopeRequest, direction="write"
263
+ ),
264
+ },
265
+ headers={
266
+ "content-type": "application/json",
267
+ },
268
+ request_options=request_options,
269
+ omit=OMIT,
270
+ )
271
+ try:
272
+ if 200 <= _response.status_code < 300:
273
+ return typing.cast(
274
+ AccountResponse,
275
+ parse_obj_as(
276
+ type_=AccountResponse, # type: ignore
277
+ object_=_response.json(),
278
+ ),
279
+ )
280
+ if _response.status_code == 422:
281
+ raise UnprocessableEntityError(
282
+ typing.cast(
283
+ HttpValidationError,
284
+ parse_obj_as(
285
+ type_=HttpValidationError, # type: ignore
286
+ object_=_response.json(),
287
+ ),
288
+ )
289
+ )
290
+ _response_json = _response.json()
291
+ except JSONDecodeError:
292
+ raise ApiError(status_code=_response.status_code, body=_response.text)
293
+ raise ApiError(status_code=_response.status_code, body=_response_json)
294
+
295
+
296
+ class AsyncAdminClient:
297
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
298
+ self._client_wrapper = client_wrapper
299
+
300
+ async def create_accounts(
301
+ self,
302
+ *,
303
+ users: typing.Dict[str, UserRequest],
304
+ organizations: typing.Dict[str, OrganizationRequest],
305
+ workspaces: typing.Dict[str, WorkspaceRequest],
306
+ projects: typing.Dict[str, ProjectRequest],
307
+ organization_memberships: typing.Dict[str, OrganizationMembershipRequest],
308
+ workspace_memberships: typing.Dict[str, WorkspaceMembershipRequest],
309
+ project_memberships: typing.Dict[str, ProjectMembershipRequest],
310
+ request_options: typing.Optional[RequestOptions] = None,
311
+ ) -> ScopesResponseModel:
312
+ """
313
+ Parameters
314
+ ----------
315
+ users : typing.Dict[str, UserRequest]
316
+
317
+ organizations : typing.Dict[str, OrganizationRequest]
318
+
319
+ workspaces : typing.Dict[str, WorkspaceRequest]
320
+
321
+ projects : typing.Dict[str, ProjectRequest]
322
+
323
+ organization_memberships : typing.Dict[str, OrganizationMembershipRequest]
324
+
325
+ workspace_memberships : typing.Dict[str, WorkspaceMembershipRequest]
326
+
327
+ project_memberships : typing.Dict[str, ProjectMembershipRequest]
328
+
329
+ request_options : typing.Optional[RequestOptions]
330
+ Request-specific configuration.
331
+
332
+ Returns
333
+ -------
334
+ ScopesResponseModel
335
+ Successful Response
336
+
337
+ Examples
338
+ --------
339
+ import asyncio
340
+
341
+ from agenta import (
342
+ AsyncAgentaApi,
343
+ OrganizationMembershipRequest,
344
+ OrganizationRequest,
345
+ ProjectMembershipRequest,
346
+ ProjectRequest,
347
+ Reference,
348
+ UserRequest,
349
+ WorkspaceMembershipRequest,
350
+ WorkspaceRequest,
351
+ )
352
+
353
+ client = AsyncAgentaApi(
354
+ api_key="YOUR_API_KEY",
355
+ base_url="https://yourhost.com/path/to/api",
356
+ )
357
+
358
+
359
+ async def main() -> None:
360
+ await client.admin.create_accounts(
361
+ users={
362
+ "key": UserRequest(
363
+ name="name",
364
+ email="email",
365
+ )
366
+ },
367
+ organizations={
368
+ "key": OrganizationRequest(
369
+ name="name",
370
+ description="description",
371
+ is_paying=True,
372
+ )
373
+ },
374
+ workspaces={
375
+ "key": WorkspaceRequest(
376
+ name="name",
377
+ description="description",
378
+ is_default=True,
379
+ organization_ref=Reference(),
380
+ )
381
+ },
382
+ projects={
383
+ "key": ProjectRequest(
384
+ name="name",
385
+ description="description",
386
+ is_default=True,
387
+ workspace_ref=Reference(),
388
+ organization_ref=Reference(),
389
+ )
390
+ },
391
+ organization_memberships={
392
+ "key": OrganizationMembershipRequest(
393
+ is_demo=True,
394
+ user_ref=Reference(),
395
+ organization_ref=Reference(),
396
+ )
397
+ },
398
+ workspace_memberships={
399
+ "key": WorkspaceMembershipRequest(
400
+ role="owner",
401
+ is_demo=True,
402
+ user_ref=Reference(),
403
+ workspace_ref=Reference(),
404
+ )
405
+ },
406
+ project_memberships={
407
+ "key": ProjectMembershipRequest(
408
+ role="owner",
409
+ is_demo=True,
410
+ user_ref=Reference(),
411
+ project_ref=Reference(),
412
+ )
413
+ },
414
+ )
415
+
416
+
417
+ asyncio.run(main())
418
+ """
419
+ _response = await self._client_wrapper.httpx_client.request(
420
+ "admin/accounts",
421
+ method="POST",
422
+ json={
423
+ "users": convert_and_respect_annotation_metadata(
424
+ object_=users,
425
+ annotation=typing.Dict[str, UserRequest],
426
+ direction="write",
427
+ ),
428
+ "organizations": convert_and_respect_annotation_metadata(
429
+ object_=organizations,
430
+ annotation=typing.Dict[str, OrganizationRequest],
431
+ direction="write",
432
+ ),
433
+ "workspaces": convert_and_respect_annotation_metadata(
434
+ object_=workspaces,
435
+ annotation=typing.Dict[str, WorkspaceRequest],
436
+ direction="write",
437
+ ),
438
+ "projects": convert_and_respect_annotation_metadata(
439
+ object_=projects,
440
+ annotation=typing.Dict[str, ProjectRequest],
441
+ direction="write",
442
+ ),
443
+ "organization_memberships": convert_and_respect_annotation_metadata(
444
+ object_=organization_memberships,
445
+ annotation=typing.Dict[str, OrganizationMembershipRequest],
446
+ direction="write",
447
+ ),
448
+ "workspace_memberships": convert_and_respect_annotation_metadata(
449
+ object_=workspace_memberships,
450
+ annotation=typing.Dict[str, WorkspaceMembershipRequest],
451
+ direction="write",
452
+ ),
453
+ "project_memberships": convert_and_respect_annotation_metadata(
454
+ object_=project_memberships,
455
+ annotation=typing.Dict[str, ProjectMembershipRequest],
456
+ direction="write",
457
+ ),
458
+ },
459
+ headers={
460
+ "content-type": "application/json",
461
+ },
462
+ request_options=request_options,
463
+ omit=OMIT,
464
+ )
465
+ try:
466
+ if 200 <= _response.status_code < 300:
467
+ return typing.cast(
468
+ ScopesResponseModel,
469
+ parse_obj_as(
470
+ type_=ScopesResponseModel, # type: ignore
471
+ object_=_response.json(),
472
+ ),
473
+ )
474
+ if _response.status_code == 422:
475
+ raise UnprocessableEntityError(
476
+ typing.cast(
477
+ HttpValidationError,
478
+ parse_obj_as(
479
+ type_=HttpValidationError, # type: ignore
480
+ object_=_response.json(),
481
+ ),
482
+ )
483
+ )
484
+ _response_json = _response.json()
485
+ except JSONDecodeError:
486
+ raise ApiError(status_code=_response.status_code, body=_response.text)
487
+ raise ApiError(status_code=_response.status_code, body=_response_json)
488
+
489
+ async def create_account(
490
+ self,
491
+ *,
492
+ user: LegacyUserRequest,
493
+ scope: LegacyScopeRequest,
494
+ request_options: typing.Optional[RequestOptions] = None,
495
+ ) -> AccountResponse:
496
+ """
497
+ Parameters
498
+ ----------
499
+ user : LegacyUserRequest
500
+
501
+ scope : LegacyScopeRequest
502
+
503
+ request_options : typing.Optional[RequestOptions]
504
+ Request-specific configuration.
505
+
506
+ Returns
507
+ -------
508
+ AccountResponse
509
+ Successful Response
510
+
511
+ Examples
512
+ --------
513
+ import asyncio
514
+
515
+ from agenta import AsyncAgentaApi, LegacyScopeRequest, LegacyUserRequest
516
+
517
+ client = AsyncAgentaApi(
518
+ api_key="YOUR_API_KEY",
519
+ base_url="https://yourhost.com/path/to/api",
520
+ )
521
+
522
+
523
+ async def main() -> None:
524
+ await client.admin.create_account(
525
+ user=LegacyUserRequest(
526
+ name="name",
527
+ email="email",
528
+ ),
529
+ scope=LegacyScopeRequest(
530
+ name="name",
531
+ ),
532
+ )
533
+
534
+
535
+ asyncio.run(main())
536
+ """
537
+ _response = await self._client_wrapper.httpx_client.request(
538
+ "admin/account",
539
+ method="POST",
540
+ json={
541
+ "user": convert_and_respect_annotation_metadata(
542
+ object_=user, annotation=LegacyUserRequest, direction="write"
543
+ ),
544
+ "scope": convert_and_respect_annotation_metadata(
545
+ object_=scope, annotation=LegacyScopeRequest, direction="write"
546
+ ),
547
+ },
548
+ headers={
549
+ "content-type": "application/json",
550
+ },
551
+ request_options=request_options,
552
+ omit=OMIT,
553
+ )
554
+ try:
555
+ if 200 <= _response.status_code < 300:
556
+ return typing.cast(
557
+ AccountResponse,
558
+ parse_obj_as(
559
+ type_=AccountResponse, # type: ignore
560
+ object_=_response.json(),
561
+ ),
562
+ )
563
+ if _response.status_code == 422:
564
+ raise UnprocessableEntityError(
565
+ typing.cast(
566
+ HttpValidationError,
567
+ parse_obj_as(
568
+ type_=HttpValidationError, # type: ignore
569
+ object_=_response.json(),
570
+ ),
571
+ )
572
+ )
573
+ _response_json = _response.json()
574
+ except JSONDecodeError:
575
+ raise ApiError(status_code=_response.status_code, body=_response.text)
576
+ raise ApiError(status_code=_response.status_code, body=_response_json)