agenta 0.27.7__py3-none-any.whl → 0.27.7a1__py3-none-any.whl

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

Potentially problematic release.


This version of agenta might be problematic. Click here for more details.

Files changed (61) hide show
  1. agenta/cli/main.py +51 -4
  2. agenta/client/backend/__init__.py +0 -63
  3. agenta/client/backend/apps/client.py +58 -12
  4. agenta/client/backend/client.py +22 -22
  5. agenta/client/backend/core/http_client.py +7 -15
  6. agenta/client/backend/evaluations/client.py +11 -0
  7. agenta/client/backend/observability/client.py +4 -4
  8. agenta/client/backend/testsets/client.py +40 -8
  9. agenta/client/backend/types/__init__.py +0 -58
  10. agenta/client/backend/variants/client.py +16 -24
  11. agenta/sdk/__init__.py +0 -2
  12. agenta/sdk/agenta_init.py +9 -4
  13. agenta/sdk/decorators/routing.py +42 -24
  14. agenta/sdk/litellm/litellm.py +75 -30
  15. agenta/sdk/middleware/auth.py +6 -9
  16. agenta/sdk/tracing/context.py +6 -6
  17. agenta/sdk/tracing/inline.py +151 -48
  18. agenta/sdk/tracing/processors.py +3 -1
  19. agenta/sdk/tracing/tracing.py +5 -1
  20. agenta/sdk/types.py +2 -5
  21. agenta/sdk/utils/debug.py +68 -0
  22. agenta/sdk/utils/exceptions.py +9 -15
  23. agenta/sdk/utils/logging.py +1 -5
  24. {agenta-0.27.7.dist-info → agenta-0.27.7a1.dist-info}/METADATA +1 -1
  25. {agenta-0.27.7.dist-info → agenta-0.27.7a1.dist-info}/RECORD +27 -60
  26. agenta/client/backend/observability_v_1/__init__.py +0 -5
  27. agenta/client/backend/observability_v_1/client.py +0 -560
  28. agenta/client/backend/observability_v_1/types/__init__.py +0 -6
  29. agenta/client/backend/observability_v_1/types/format.py +0 -5
  30. agenta/client/backend/observability_v_1/types/query_traces_response.py +0 -11
  31. agenta/client/backend/types/agenta_node_dto.py +0 -48
  32. agenta/client/backend/types/agenta_node_dto_nodes_value.py +0 -6
  33. agenta/client/backend/types/agenta_nodes_response.py +0 -30
  34. agenta/client/backend/types/agenta_root_dto.py +0 -30
  35. agenta/client/backend/types/agenta_roots_response.py +0 -30
  36. agenta/client/backend/types/agenta_tree_dto.py +0 -30
  37. agenta/client/backend/types/agenta_trees_response.py +0 -30
  38. agenta/client/backend/types/collect_status_response.py +0 -22
  39. agenta/client/backend/types/exception_dto.py +0 -26
  40. agenta/client/backend/types/link_dto.py +0 -24
  41. agenta/client/backend/types/node_dto.py +0 -24
  42. agenta/client/backend/types/node_type.py +0 -19
  43. agenta/client/backend/types/o_tel_context_dto.py +0 -22
  44. agenta/client/backend/types/o_tel_event_dto.py +0 -23
  45. agenta/client/backend/types/o_tel_extra_dto.py +0 -26
  46. agenta/client/backend/types/o_tel_link_dto.py +0 -23
  47. agenta/client/backend/types/o_tel_span_dto.py +0 -37
  48. agenta/client/backend/types/o_tel_span_kind.py +0 -15
  49. agenta/client/backend/types/o_tel_spans_response.py +0 -24
  50. agenta/client/backend/types/o_tel_status_code.py +0 -8
  51. agenta/client/backend/types/parent_dto.py +0 -21
  52. agenta/client/backend/types/root_dto.py +0 -21
  53. agenta/client/backend/types/span_dto.py +0 -54
  54. agenta/client/backend/types/span_dto_nodes_value.py +0 -9
  55. agenta/client/backend/types/status_code.py +0 -5
  56. agenta/client/backend/types/status_dto.py +0 -23
  57. agenta/client/backend/types/time_dto.py +0 -23
  58. agenta/client/backend/types/tree_dto.py +0 -23
  59. agenta/client/backend/types/tree_type.py +0 -5
  60. {agenta-0.27.7.dist-info → agenta-0.27.7a1.dist-info}/WHEEL +0 -0
  61. {agenta-0.27.7.dist-info → agenta-0.27.7a1.dist-info}/entry_points.txt +0 -0
agenta/cli/main.py CHANGED
@@ -80,10 +80,15 @@ def cli():
80
80
  @click.command()
81
81
  @click.option("--app-name", "--app_name", default=None)
82
82
  @click.option("--backend-host", "backend_host", default=None)
83
- def init(app_name: str, backend_host: str):
84
- """Initialize a new Agenta app with the template files."""
85
-
83
+ @click.option(
84
+ "--organisation-name",
85
+ "organisation_name",
86
+ default=None,
87
+ help="The name of the organisation",
88
+ )
89
+ def init(app_name: str, backend_host: str, organisation_name: str):
86
90
  init_option = "Blank App" if backend_host != "" and app_name != "" else ""
91
+ """Initialize a new Agenta app with the template files."""
87
92
 
88
93
  api_key = os.getenv("AGENTA_API_KEY")
89
94
 
@@ -146,9 +151,51 @@ def init(app_name: str, backend_host: str):
146
151
  api_key=api_key if where_question == "On agenta cloud" else "",
147
152
  )
148
153
 
154
+ # list of user organizations
155
+ user_organizations = []
156
+
157
+ # validate the api key if it is provided
158
+ if where_question == "On agenta cloud":
159
+ try:
160
+ key_prefix = api_key.split(".")[0]
161
+ client.validate_api_key(key_prefix=key_prefix)
162
+ except Exception as ex:
163
+ click.echo(
164
+ click.style(
165
+ f"Error: Unable to validate API key.\nError: {ex}", fg="red"
166
+ )
167
+ )
168
+ sys.exit(1)
169
+ # Make request to fetch user organizations after api key validation
170
+ try:
171
+ organizations = client.list_organizations()
172
+ if len(organizations) >= 1:
173
+ user_organizations = organizations
174
+ except Exception as ex:
175
+ click.echo(click.style(f"Error: {ex}", fg="red"))
176
+ sys.exit(1)
177
+
178
+ organization = None
179
+ organization_choices = {}
180
+ if where_question == "On agenta cloud":
181
+ if not organisation_name:
182
+ organization_choices = {
183
+ f"{org.name}": org for org in user_organizations
184
+ }
185
+ which_organization = questionary.select(
186
+ "Which organization do you want to create the app for?",
187
+ choices=list(organization_choices.keys()),
188
+ ).ask()
189
+ organisation_name = which_organization
190
+
191
+ organization = organization_choices.get(organisation_name)
192
+
149
193
  # Get app_id after creating new app in the backend server
150
194
  try:
151
- app_id = client.apps.create_app(app_name=app_name).app_id
195
+ app_id = client.apps.create_app(
196
+ app_name=app_name,
197
+ organization_id=organization.id if organization else None,
198
+ ).app_id
152
199
  except Exception as ex:
153
200
  click.echo(click.style(f"Error: {ex}", fg="red"))
154
201
  sys.exit(1)
@@ -1,13 +1,6 @@
1
1
  # This file was auto-generated by Fern from our API Definition.
2
2
 
3
3
  from .types import (
4
- AgentaNodeDto,
5
- AgentaNodeDtoNodesValue,
6
- AgentaNodesResponse,
7
- AgentaRootDto,
8
- AgentaRootsResponse,
9
- AgentaTreeDto,
10
- AgentaTreesResponse,
11
4
  AggregatedResult,
12
5
  AggregatedResultEvaluatorConfig,
13
6
  App,
@@ -15,7 +8,6 @@ from .types import (
15
8
  AppVariantRevision,
16
9
  BaseOutput,
17
10
  BodyImportTestset,
18
- CollectStatusResponse,
19
11
  ConfigDb,
20
12
  ConfigDto,
21
13
  ConfigResponseModel,
@@ -40,7 +32,6 @@ from .types import (
40
32
  EvaluatorConfig,
41
33
  EvaluatorMappingOutputInterface,
42
34
  EvaluatorOutputInterface,
43
- ExceptionDto,
44
35
  GetConfigResponse,
45
36
  HttpValidationError,
46
37
  HumanEvaluation,
@@ -52,50 +43,30 @@ from .types import (
52
43
  Image,
53
44
  InviteRequest,
54
45
  LifecycleDto,
55
- LinkDto,
56
46
  ListApiKeysResponse,
57
47
  LlmRunRateLimit,
58
48
  LlmTokens,
59
49
  LmProvidersEnum,
60
50
  NewHumanEvaluation,
61
51
  NewTestset,
62
- NodeDto,
63
- NodeType,
64
- OTelContextDto,
65
- OTelEventDto,
66
- OTelExtraDto,
67
- OTelLinkDto,
68
- OTelSpanDto,
69
- OTelSpanKind,
70
- OTelSpansResponse,
71
- OTelStatusCode,
72
52
  Organization,
73
53
  OrganizationOutput,
74
54
  Outputs,
75
- ParentDto,
76
55
  Permission,
77
56
  ReferenceDto,
78
57
  ReferenceRequestModel,
79
58
  Result,
80
- RootDto,
81
59
  Score,
82
60
  SimpleEvaluationOutput,
83
61
  Span,
84
62
  SpanDetail,
85
- SpanDto,
86
- SpanDtoNodesValue,
87
63
  SpanStatusCode,
88
64
  SpanVariant,
89
- StatusCode,
90
- StatusDto,
91
65
  Template,
92
66
  TemplateImageInfo,
93
67
  TestSetOutputResponse,
94
68
  TestSetSimpleResponse,
95
- TimeDto,
96
69
  TraceDetail,
97
- TreeDto,
98
- TreeType,
99
70
  UpdateAppOutput,
100
71
  Uri,
101
72
  ValidationError,
@@ -119,25 +90,16 @@ from . import (
119
90
  evaluations,
120
91
  evaluators,
121
92
  observability,
122
- observability_v_1,
123
93
  testsets,
124
94
  variants,
125
95
  )
126
96
  from .client import AgentaApi, AsyncAgentaApi
127
97
  from .containers import ContainerTemplatesResponse
128
- from .observability_v_1 import Format, QueryTracesResponse
129
98
  from .variants import AddVariantFromBaseAndConfigResponse
130
99
 
131
100
  __all__ = [
132
101
  "AddVariantFromBaseAndConfigResponse",
133
102
  "AgentaApi",
134
- "AgentaNodeDto",
135
- "AgentaNodeDtoNodesValue",
136
- "AgentaNodesResponse",
137
- "AgentaRootDto",
138
- "AgentaRootsResponse",
139
- "AgentaTreeDto",
140
- "AgentaTreesResponse",
141
103
  "AggregatedResult",
142
104
  "AggregatedResultEvaluatorConfig",
143
105
  "App",
@@ -146,7 +108,6 @@ __all__ = [
146
108
  "AsyncAgentaApi",
147
109
  "BaseOutput",
148
110
  "BodyImportTestset",
149
- "CollectStatusResponse",
150
111
  "ConfigDb",
151
112
  "ConfigDto",
152
113
  "ConfigResponseModel",
@@ -172,8 +133,6 @@ __all__ = [
172
133
  "EvaluatorConfig",
173
134
  "EvaluatorMappingOutputInterface",
174
135
  "EvaluatorOutputInterface",
175
- "ExceptionDto",
176
- "Format",
177
136
  "GetConfigResponse",
178
137
  "HttpValidationError",
179
138
  "HumanEvaluation",
@@ -185,51 +144,30 @@ __all__ = [
185
144
  "Image",
186
145
  "InviteRequest",
187
146
  "LifecycleDto",
188
- "LinkDto",
189
147
  "ListApiKeysResponse",
190
148
  "LlmRunRateLimit",
191
149
  "LlmTokens",
192
150
  "LmProvidersEnum",
193
151
  "NewHumanEvaluation",
194
152
  "NewTestset",
195
- "NodeDto",
196
- "NodeType",
197
- "OTelContextDto",
198
- "OTelEventDto",
199
- "OTelExtraDto",
200
- "OTelLinkDto",
201
- "OTelSpanDto",
202
- "OTelSpanKind",
203
- "OTelSpansResponse",
204
- "OTelStatusCode",
205
153
  "Organization",
206
154
  "OrganizationOutput",
207
155
  "Outputs",
208
- "ParentDto",
209
156
  "Permission",
210
- "QueryTracesResponse",
211
157
  "ReferenceDto",
212
158
  "ReferenceRequestModel",
213
159
  "Result",
214
- "RootDto",
215
160
  "Score",
216
161
  "SimpleEvaluationOutput",
217
162
  "Span",
218
163
  "SpanDetail",
219
- "SpanDto",
220
- "SpanDtoNodesValue",
221
164
  "SpanStatusCode",
222
165
  "SpanVariant",
223
- "StatusCode",
224
- "StatusDto",
225
166
  "Template",
226
167
  "TemplateImageInfo",
227
168
  "TestSetOutputResponse",
228
169
  "TestSetSimpleResponse",
229
- "TimeDto",
230
170
  "TraceDetail",
231
- "TreeDto",
232
- "TreeType",
233
171
  "UnprocessableEntityError",
234
172
  "UpdateAppOutput",
235
173
  "Uri",
@@ -251,7 +189,6 @@ __all__ = [
251
189
  "evaluations",
252
190
  "evaluators",
253
191
  "observability",
254
- "observability_v_1",
255
192
  "testsets",
256
193
  "variants",
257
194
  ]
@@ -176,17 +176,19 @@ class AppsClient:
176
176
  self,
177
177
  *,
178
178
  app_name: typing.Optional[str] = None,
179
+ workspace_id: typing.Optional[str] = None,
179
180
  request_options: typing.Optional[RequestOptions] = None,
180
181
  ) -> typing.List[App]:
181
182
  """
182
- Retrieve a list of apps filtered by app_name.
183
+ Retrieve a list of apps filtered by app_name and org_id.
183
184
 
184
185
  Args:
185
186
  app_name (Optional[str]): The name of the app to filter by.
187
+ org_id (Optional[str]): The ID of the organization to filter by.
186
188
  stoken_session (SessionContainer): The session container.
187
189
 
188
190
  Returns:
189
- List[App]: A list of apps filtered by app_name.
191
+ List[App]: A list of apps filtered by app_name and org_id.
190
192
 
191
193
  Raises:
192
194
  HTTPException: If there was an error retrieving the list of apps.
@@ -195,6 +197,8 @@ class AppsClient:
195
197
  ----------
196
198
  app_name : typing.Optional[str]
197
199
 
200
+ workspace_id : typing.Optional[str]
201
+
198
202
  request_options : typing.Optional[RequestOptions]
199
203
  Request-specific configuration.
200
204
 
@@ -216,7 +220,10 @@ class AppsClient:
216
220
  _response = self._client_wrapper.httpx_client.request(
217
221
  "apps",
218
222
  method="GET",
219
- params={"app_name": app_name},
223
+ params={
224
+ "app_name": app_name,
225
+ "workspace_id": workspace_id,
226
+ },
220
227
  request_options=request_options,
221
228
  )
222
229
  try:
@@ -248,13 +255,15 @@ class AppsClient:
248
255
  *,
249
256
  app_name: str,
250
257
  project_id: typing.Optional[str] = OMIT,
258
+ workspace_id: typing.Optional[str] = OMIT,
259
+ organization_id: typing.Optional[str] = OMIT,
251
260
  request_options: typing.Optional[RequestOptions] = None,
252
261
  ) -> CreateAppOutput:
253
262
  """
254
- Create a new app for a user.
263
+ Create a new app for a user or organization.
255
264
 
256
265
  Args:
257
- payload (CreateApp): The payload containing the app name.
266
+ payload (CreateApp): The payload containing the app name and organization ID (optional).
258
267
  stoken_session (SessionContainer): The session container containing the user's session token.
259
268
 
260
269
  Returns:
@@ -269,6 +278,10 @@ class AppsClient:
269
278
 
270
279
  project_id : typing.Optional[str]
271
280
 
281
+ workspace_id : typing.Optional[str]
282
+
283
+ organization_id : typing.Optional[str]
284
+
272
285
  request_options : typing.Optional[RequestOptions]
273
286
  Request-specific configuration.
274
287
 
@@ -295,6 +308,8 @@ class AppsClient:
295
308
  json={
296
309
  "app_name": app_name,
297
310
  "project_id": project_id,
311
+ "workspace_id": workspace_id,
312
+ "organization_id": organization_id,
298
313
  },
299
314
  request_options=request_options,
300
315
  omit=OMIT,
@@ -393,7 +408,7 @@ class AppsClient:
393
408
  request_options: typing.Optional[RequestOptions] = None,
394
409
  ) -> UpdateAppOutput:
395
410
  """
396
- Update an app for a user.
411
+ Update an app for a user or organization.
397
412
 
398
413
  Args:
399
414
  app_id (str): The ID of the app.
@@ -572,6 +587,8 @@ class AppsClient:
572
587
  template_id: str,
573
588
  env_vars: typing.Dict[str, str],
574
589
  project_id: typing.Optional[str] = OMIT,
590
+ workspace_id: typing.Optional[str] = OMIT,
591
+ organization_id: typing.Optional[str] = OMIT,
575
592
  request_options: typing.Optional[RequestOptions] = None,
576
593
  ) -> AppVariantResponse:
577
594
  """
@@ -597,6 +614,10 @@ class AppsClient:
597
614
 
598
615
  project_id : typing.Optional[str]
599
616
 
617
+ workspace_id : typing.Optional[str]
618
+
619
+ organization_id : typing.Optional[str]
620
+
600
621
  request_options : typing.Optional[RequestOptions]
601
622
  Request-specific configuration.
602
623
 
@@ -626,7 +647,9 @@ class AppsClient:
626
647
  "app_name": app_name,
627
648
  "template_id": template_id,
628
649
  "project_id": project_id,
650
+ "workspace_id": workspace_id,
629
651
  "env_vars": env_vars,
652
+ "organization_id": organization_id,
630
653
  },
631
654
  request_options=request_options,
632
655
  omit=OMIT,
@@ -957,17 +980,19 @@ class AsyncAppsClient:
957
980
  self,
958
981
  *,
959
982
  app_name: typing.Optional[str] = None,
983
+ workspace_id: typing.Optional[str] = None,
960
984
  request_options: typing.Optional[RequestOptions] = None,
961
985
  ) -> typing.List[App]:
962
986
  """
963
- Retrieve a list of apps filtered by app_name.
987
+ Retrieve a list of apps filtered by app_name and org_id.
964
988
 
965
989
  Args:
966
990
  app_name (Optional[str]): The name of the app to filter by.
991
+ org_id (Optional[str]): The ID of the organization to filter by.
967
992
  stoken_session (SessionContainer): The session container.
968
993
 
969
994
  Returns:
970
- List[App]: A list of apps filtered by app_name.
995
+ List[App]: A list of apps filtered by app_name and org_id.
971
996
 
972
997
  Raises:
973
998
  HTTPException: If there was an error retrieving the list of apps.
@@ -976,6 +1001,8 @@ class AsyncAppsClient:
976
1001
  ----------
977
1002
  app_name : typing.Optional[str]
978
1003
 
1004
+ workspace_id : typing.Optional[str]
1005
+
979
1006
  request_options : typing.Optional[RequestOptions]
980
1007
  Request-specific configuration.
981
1008
 
@@ -1005,7 +1032,10 @@ class AsyncAppsClient:
1005
1032
  _response = await self._client_wrapper.httpx_client.request(
1006
1033
  "apps",
1007
1034
  method="GET",
1008
- params={"app_name": app_name},
1035
+ params={
1036
+ "app_name": app_name,
1037
+ "workspace_id": workspace_id,
1038
+ },
1009
1039
  request_options=request_options,
1010
1040
  )
1011
1041
  try:
@@ -1037,13 +1067,15 @@ class AsyncAppsClient:
1037
1067
  *,
1038
1068
  app_name: str,
1039
1069
  project_id: typing.Optional[str] = OMIT,
1070
+ workspace_id: typing.Optional[str] = OMIT,
1071
+ organization_id: typing.Optional[str] = OMIT,
1040
1072
  request_options: typing.Optional[RequestOptions] = None,
1041
1073
  ) -> CreateAppOutput:
1042
1074
  """
1043
- Create a new app for a user.
1075
+ Create a new app for a user or organization.
1044
1076
 
1045
1077
  Args:
1046
- payload (CreateApp): The payload containing the app name.
1078
+ payload (CreateApp): The payload containing the app name and organization ID (optional).
1047
1079
  stoken_session (SessionContainer): The session container containing the user's session token.
1048
1080
 
1049
1081
  Returns:
@@ -1058,6 +1090,10 @@ class AsyncAppsClient:
1058
1090
 
1059
1091
  project_id : typing.Optional[str]
1060
1092
 
1093
+ workspace_id : typing.Optional[str]
1094
+
1095
+ organization_id : typing.Optional[str]
1096
+
1061
1097
  request_options : typing.Optional[RequestOptions]
1062
1098
  Request-specific configuration.
1063
1099
 
@@ -1092,6 +1128,8 @@ class AsyncAppsClient:
1092
1128
  json={
1093
1129
  "app_name": app_name,
1094
1130
  "project_id": project_id,
1131
+ "workspace_id": workspace_id,
1132
+ "organization_id": organization_id,
1095
1133
  },
1096
1134
  request_options=request_options,
1097
1135
  omit=OMIT,
@@ -1198,7 +1236,7 @@ class AsyncAppsClient:
1198
1236
  request_options: typing.Optional[RequestOptions] = None,
1199
1237
  ) -> UpdateAppOutput:
1200
1238
  """
1201
- Update an app for a user.
1239
+ Update an app for a user or organization.
1202
1240
 
1203
1241
  Args:
1204
1242
  app_id (str): The ID of the app.
@@ -1393,6 +1431,8 @@ class AsyncAppsClient:
1393
1431
  template_id: str,
1394
1432
  env_vars: typing.Dict[str, str],
1395
1433
  project_id: typing.Optional[str] = OMIT,
1434
+ workspace_id: typing.Optional[str] = OMIT,
1435
+ organization_id: typing.Optional[str] = OMIT,
1396
1436
  request_options: typing.Optional[RequestOptions] = None,
1397
1437
  ) -> AppVariantResponse:
1398
1438
  """
@@ -1418,6 +1458,10 @@ class AsyncAppsClient:
1418
1458
 
1419
1459
  project_id : typing.Optional[str]
1420
1460
 
1461
+ workspace_id : typing.Optional[str]
1462
+
1463
+ organization_id : typing.Optional[str]
1464
+
1421
1465
  request_options : typing.Optional[RequestOptions]
1422
1466
  Request-specific configuration.
1423
1467
 
@@ -1455,7 +1499,9 @@ class AsyncAppsClient:
1455
1499
  "app_name": app_name,
1456
1500
  "template_id": template_id,
1457
1501
  "project_id": project_id,
1502
+ "workspace_id": workspace_id,
1458
1503
  "env_vars": env_vars,
1504
+ "organization_id": organization_id,
1459
1505
  },
1460
1506
  request_options=request_options,
1461
1507
  omit=OMIT,
@@ -13,7 +13,6 @@ from .containers.client import ContainersClient
13
13
  from .environments.client import EnvironmentsClient
14
14
  from .bases.client import BasesClient
15
15
  from .configs.client import ConfigsClient
16
- from .observability_v_1.client import ObservabilityV1Client
17
16
  from .core.request_options import RequestOptions
18
17
  from .types.list_api_keys_response import ListApiKeysResponse
19
18
  from .core.pydantic_utilities import parse_obj_as
@@ -41,7 +40,6 @@ from .containers.client import AsyncContainersClient
41
40
  from .environments.client import AsyncEnvironmentsClient
42
41
  from .bases.client import AsyncBasesClient
43
42
  from .configs.client import AsyncConfigsClient
44
- from .observability_v_1.client import AsyncObservabilityV1Client
45
43
 
46
44
  # this is used as the default value for optional parameters
47
45
  OMIT = typing.cast(typing.Any, ...)
@@ -91,13 +89,17 @@ class AgentaApi:
91
89
  self._client_wrapper = SyncClientWrapper(
92
90
  base_url=base_url,
93
91
  api_key=api_key,
94
- httpx_client=httpx_client
95
- if httpx_client is not None
96
- else httpx.Client(
97
- timeout=_defaulted_timeout, follow_redirects=follow_redirects
98
- )
99
- if follow_redirects is not None
100
- else httpx.Client(timeout=_defaulted_timeout),
92
+ httpx_client=(
93
+ httpx_client
94
+ if httpx_client is not None
95
+ else (
96
+ httpx.Client(
97
+ timeout=_defaulted_timeout, follow_redirects=follow_redirects
98
+ )
99
+ if follow_redirects is not None
100
+ else httpx.Client(timeout=_defaulted_timeout)
101
+ )
102
+ ),
101
103
  timeout=_defaulted_timeout,
102
104
  )
103
105
  self.observability = ObservabilityClient(client_wrapper=self._client_wrapper)
@@ -110,9 +112,6 @@ class AgentaApi:
110
112
  self.environments = EnvironmentsClient(client_wrapper=self._client_wrapper)
111
113
  self.bases = BasesClient(client_wrapper=self._client_wrapper)
112
114
  self.configs = ConfigsClient(client_wrapper=self._client_wrapper)
113
- self.observability_v_1 = ObservabilityV1Client(
114
- client_wrapper=self._client_wrapper
115
- )
116
115
 
117
116
  def list_api_keys(
118
117
  self, *, request_options: typing.Optional[RequestOptions] = None
@@ -1620,13 +1619,17 @@ class AsyncAgentaApi:
1620
1619
  self._client_wrapper = AsyncClientWrapper(
1621
1620
  base_url=base_url,
1622
1621
  api_key=api_key,
1623
- httpx_client=httpx_client
1624
- if httpx_client is not None
1625
- else httpx.AsyncClient(
1626
- timeout=_defaulted_timeout, follow_redirects=follow_redirects
1627
- )
1628
- if follow_redirects is not None
1629
- else httpx.AsyncClient(timeout=_defaulted_timeout),
1622
+ httpx_client=(
1623
+ httpx_client
1624
+ if httpx_client is not None
1625
+ else (
1626
+ httpx.AsyncClient(
1627
+ timeout=_defaulted_timeout, follow_redirects=follow_redirects
1628
+ )
1629
+ if follow_redirects is not None
1630
+ else httpx.AsyncClient(timeout=_defaulted_timeout)
1631
+ )
1632
+ ),
1630
1633
  timeout=_defaulted_timeout,
1631
1634
  )
1632
1635
  self.observability = AsyncObservabilityClient(
@@ -1641,9 +1644,6 @@ class AsyncAgentaApi:
1641
1644
  self.environments = AsyncEnvironmentsClient(client_wrapper=self._client_wrapper)
1642
1645
  self.bases = AsyncBasesClient(client_wrapper=self._client_wrapper)
1643
1646
  self.configs = AsyncConfigsClient(client_wrapper=self._client_wrapper)
1644
- self.observability_v_1 = AsyncObservabilityV1Client(
1645
- client_wrapper=self._client_wrapper
1646
- )
1647
1647
 
1648
1648
  async def list_api_keys(
1649
1649
  self, *, request_options: typing.Optional[RequestOptions] = None
@@ -148,9 +148,9 @@ def get_request_body(
148
148
  json_body = maybe_filter_request_body(json, request_options, omit)
149
149
 
150
150
  # If you have an empty JSON body, you should just send None
151
- return (
152
- json_body if json_body != {} else None
153
- ), data_body if data_body != {} else None
151
+ return (json_body if json_body != {} else None), (
152
+ data_body if data_body != {} else None
153
+ )
154
154
 
155
155
 
156
156
  class HttpClient:
@@ -250,9 +250,7 @@ class HttpClient:
250
250
  data=data_body,
251
251
  content=content,
252
252
  files=(
253
- convert_file_dict_to_httpx_tuples(
254
- remove_omit_from_dict(remove_none_from_dict(files), omit)
255
- )
253
+ convert_file_dict_to_httpx_tuples(remove_none_from_dict(files))
256
254
  if (files is not None and files is not omit)
257
255
  else None
258
256
  ),
@@ -353,9 +351,7 @@ class HttpClient:
353
351
  data=data_body,
354
352
  content=content,
355
353
  files=(
356
- convert_file_dict_to_httpx_tuples(
357
- remove_omit_from_dict(remove_none_from_dict(files), omit)
358
- )
354
+ convert_file_dict_to_httpx_tuples(remove_none_from_dict(files))
359
355
  if (files is not None and files is not omit)
360
356
  else None
361
357
  ),
@@ -462,9 +458,7 @@ class AsyncHttpClient:
462
458
  data=data_body,
463
459
  content=content,
464
460
  files=(
465
- convert_file_dict_to_httpx_tuples(
466
- remove_omit_from_dict(remove_none_from_dict(files), omit)
467
- )
461
+ convert_file_dict_to_httpx_tuples(remove_none_from_dict(files))
468
462
  if files is not None
469
463
  else None
470
464
  ),
@@ -564,9 +558,7 @@ class AsyncHttpClient:
564
558
  data=data_body,
565
559
  content=content,
566
560
  files=(
567
- convert_file_dict_to_httpx_tuples(
568
- remove_omit_from_dict(remove_none_from_dict(files), omit)
569
- )
561
+ convert_file_dict_to_httpx_tuples(remove_none_from_dict(files))
570
562
  if files is not None
571
563
  else None
572
564
  ),