agenta 0.48.9__py3-none-any.whl → 0.49.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.

Potentially problematic release.


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

Files changed (297) hide show
  1. agenta/__init__.py +3 -2
  2. agenta/client/Readme.md +258 -80
  3. agenta/client/__init__.py +205 -29
  4. agenta/client/backend/__init__.py +461 -0
  5. agenta/client/backend/access_control/__init__.py +2 -0
  6. agenta/client/backend/access_control/client.py +53 -73
  7. agenta/client/backend/access_control/raw_client.py +180 -0
  8. agenta/client/backend/admin/__init__.py +2 -0
  9. agenta/client/backend/admin/client.py +473 -268
  10. agenta/client/backend/admin/raw_client.py +1017 -0
  11. agenta/client/backend/api_keys/__init__.py +2 -0
  12. agenta/client/backend/api_keys/client.py +43 -276
  13. agenta/client/backend/api_keys/raw_client.py +364 -0
  14. agenta/client/backend/apps/__init__.py +2 -0
  15. agenta/client/backend/apps/client.py +132 -895
  16. agenta/client/backend/apps/raw_client.py +1516 -0
  17. agenta/client/backend/bases/__init__.py +2 -0
  18. agenta/client/backend/bases/client.py +33 -73
  19. agenta/client/backend/bases/raw_client.py +179 -0
  20. agenta/client/backend/billing/__init__.py +3 -0
  21. agenta/client/backend/billing/client.py +564 -0
  22. agenta/client/backend/billing/raw_client.py +805 -0
  23. agenta/client/backend/client.py +1268 -0
  24. agenta/client/backend/configs/__init__.py +2 -0
  25. agenta/client/backend/configs/client.py +49 -361
  26. agenta/client/backend/configs/raw_client.py +402 -0
  27. agenta/client/backend/containers/__init__.py +1 -3
  28. agenta/client/backend/containers/client.py +25 -548
  29. agenta/client/backend/containers/raw_client.py +112 -0
  30. agenta/client/backend/core/__init__.py +5 -0
  31. agenta/client/backend/core/api_error.py +12 -6
  32. agenta/client/backend/core/client_wrapper.py +4 -4
  33. agenta/client/backend/core/file.py +1 -3
  34. agenta/client/backend/core/force_multipart.py +16 -0
  35. agenta/client/backend/core/http_client.py +78 -34
  36. agenta/client/backend/core/http_response.py +55 -0
  37. agenta/client/backend/core/jsonable_encoder.py +0 -1
  38. agenta/client/backend/core/pydantic_utilities.py +88 -113
  39. agenta/client/backend/core/serialization.py +9 -3
  40. agenta/client/backend/environment.py +7 -0
  41. agenta/client/backend/environments/__init__.py +2 -0
  42. agenta/client/backend/environments/client.py +43 -79
  43. agenta/client/backend/environments/raw_client.py +193 -0
  44. agenta/client/backend/errors/__init__.py +2 -0
  45. agenta/client/backend/errors/unprocessable_entity_error.py +8 -2
  46. agenta/client/backend/evals/__init__.py +3 -0
  47. agenta/client/backend/evals/client.py +1042 -0
  48. agenta/client/backend/evals/raw_client.py +1549 -0
  49. agenta/client/backend/evaluations/__init__.py +2 -0
  50. agenta/client/backend/evaluations/client.py +106 -590
  51. agenta/client/backend/evaluations/raw_client.py +1344 -0
  52. agenta/client/backend/evaluators/__init__.py +2 -0
  53. agenta/client/backend/evaluators/client.py +99 -516
  54. agenta/client/backend/evaluators/raw_client.py +1182 -0
  55. agenta/client/backend/human_evaluations/__init__.py +2 -0
  56. agenta/client/backend/human_evaluations/client.py +120 -680
  57. agenta/client/backend/human_evaluations/raw_client.py +1577 -0
  58. agenta/client/backend/observability/__init__.py +14 -2
  59. agenta/client/backend/observability/client.py +185 -341
  60. agenta/client/backend/observability/raw_client.py +943 -0
  61. agenta/client/backend/observability/types/__init__.py +10 -2
  62. agenta/client/backend/observability/types/{format.py → fetch_trace_by_id_request_trace_id.py} +1 -1
  63. agenta/client/backend/observability/types/fetch_trace_by_id_response.py +15 -0
  64. agenta/client/backend/observability/types/query_analytics_response.py +2 -1
  65. agenta/client/backend/observability/types/query_traces_response.py +7 -3
  66. agenta/client/backend/organization/__init__.py +2 -0
  67. agenta/client/backend/organization/client.py +105 -361
  68. agenta/client/backend/organization/raw_client.py +774 -0
  69. agenta/client/backend/raw_client.py +1432 -0
  70. agenta/client/backend/scopes/__init__.py +2 -0
  71. agenta/client/backend/scopes/client.py +31 -45
  72. agenta/client/backend/scopes/raw_client.py +105 -0
  73. agenta/client/backend/testsets/__init__.py +14 -0
  74. agenta/client/backend/testsets/client.py +1098 -653
  75. agenta/client/backend/testsets/raw_client.py +2348 -0
  76. agenta/client/backend/testsets/types/__init__.py +17 -0
  77. agenta/client/backend/testsets/types/create_testset_from_file_request_file_type.py +7 -0
  78. agenta/client/backend/testsets/types/fetch_testset_to_file_request_file_type.py +7 -0
  79. agenta/client/backend/testsets/types/update_testset_from_file_request_file_type.py +7 -0
  80. agenta/client/backend/tracing/__init__.py +7 -0
  81. agenta/client/backend/tracing/client.py +782 -0
  82. agenta/client/backend/tracing/raw_client.py +1223 -0
  83. agenta/client/backend/tracing/types/__init__.py +8 -0
  84. agenta/client/backend/{types/variant_action_enum.py → tracing/types/fetch_trace_request_trace_id.py} +1 -1
  85. agenta/client/backend/tracing/types/remove_trace_request_trace_id.py +5 -0
  86. agenta/client/backend/types/__init__.py +153 -26
  87. agenta/client/backend/types/account_request.py +24 -0
  88. agenta/client/backend/types/account_response.py +5 -7
  89. agenta/client/backend/types/agenta_node_dto.py +13 -13
  90. agenta/client/backend/types/agenta_node_dto_nodes_value.py +1 -0
  91. agenta/client/backend/types/agenta_nodes_response.py +14 -8
  92. agenta/client/backend/types/agenta_root_dto.py +16 -8
  93. agenta/client/backend/types/agenta_roots_response.py +16 -8
  94. agenta/client/backend/types/agenta_tree_dto.py +16 -8
  95. agenta/client/backend/types/agenta_trees_response.py +16 -8
  96. agenta/client/backend/types/aggregated_result.py +5 -7
  97. agenta/client/backend/types/aggregated_result_evaluator_config.py +1 -0
  98. agenta/client/backend/types/analytics_response.py +4 -6
  99. agenta/client/backend/types/annotation.py +50 -0
  100. agenta/client/backend/types/annotation_create.py +39 -0
  101. agenta/client/backend/types/annotation_edit.py +31 -0
  102. agenta/client/backend/types/annotation_kind.py +5 -0
  103. agenta/client/backend/types/{uri.py → annotation_link.py} +6 -7
  104. agenta/client/backend/types/{provider_key_dto.py → annotation_link_response.py} +6 -7
  105. agenta/client/backend/types/annotation_query.py +40 -0
  106. agenta/client/backend/types/annotation_query_request.py +20 -0
  107. agenta/client/backend/types/annotation_reference.py +21 -0
  108. agenta/client/backend/types/annotation_references.py +22 -0
  109. agenta/client/backend/types/{docker_env_vars.py → annotation_response.py} +6 -7
  110. agenta/client/backend/types/annotation_source.py +5 -0
  111. agenta/client/backend/types/annotations_response.py +24 -0
  112. agenta/client/backend/types/app.py +3 -5
  113. agenta/client/backend/types/app_variant_response.py +3 -6
  114. agenta/client/backend/types/app_variant_revision.py +5 -6
  115. agenta/client/backend/types/artifact.py +44 -0
  116. agenta/client/backend/types/base_output.py +3 -5
  117. agenta/client/backend/types/body_fetch_workflow_revision.py +21 -0
  118. agenta/client/backend/types/body_import_testset.py +3 -5
  119. agenta/client/backend/types/bucket_dto.py +4 -6
  120. agenta/client/backend/types/collect_status_response.py +3 -5
  121. agenta/client/backend/types/config_db.py +3 -5
  122. agenta/client/backend/types/config_dto.py +5 -7
  123. agenta/client/backend/types/config_response_model.py +5 -7
  124. agenta/client/backend/types/correct_answer.py +3 -5
  125. agenta/client/backend/types/create_app_output.py +3 -5
  126. agenta/client/backend/types/custom_model_settings_dto.py +3 -5
  127. agenta/client/backend/types/custom_provider_dto.py +6 -9
  128. agenta/client/backend/types/custom_provider_kind.py +5 -5
  129. agenta/client/backend/types/custom_provider_settings_dto.py +3 -5
  130. agenta/client/backend/types/data.py +2 -1
  131. agenta/client/backend/types/delete_evaluation.py +3 -5
  132. agenta/client/backend/types/environment_output.py +3 -5
  133. agenta/client/backend/types/environment_output_extended.py +4 -6
  134. agenta/client/backend/types/environment_revision.py +5 -5
  135. agenta/client/backend/types/error.py +3 -5
  136. agenta/client/backend/types/evaluation.py +6 -8
  137. agenta/client/backend/types/evaluation_scenario.py +5 -7
  138. agenta/client/backend/types/evaluation_scenario_input.py +3 -5
  139. agenta/client/backend/types/evaluation_scenario_output.py +4 -6
  140. agenta/client/backend/types/evaluation_scenario_result.py +4 -6
  141. agenta/client/backend/types/evaluator.py +31 -12
  142. agenta/client/backend/types/evaluator_config.py +3 -5
  143. agenta/client/backend/types/evaluator_flags.py +21 -0
  144. agenta/client/backend/types/evaluator_mapping_output_interface.py +3 -5
  145. agenta/client/backend/types/evaluator_output_interface.py +3 -5
  146. agenta/client/backend/types/evaluator_query.py +32 -0
  147. agenta/client/backend/types/evaluator_query_request.py +30 -0
  148. agenta/client/backend/types/evaluator_request.py +20 -0
  149. agenta/client/backend/types/evaluator_response.py +21 -0
  150. agenta/client/backend/types/evaluators_response.py +21 -0
  151. agenta/client/backend/types/exception_dto.py +3 -5
  152. agenta/client/backend/types/{o_tel_spans_response.py → extended_o_tel_tracing_response.py} +5 -7
  153. agenta/client/backend/types/focus.py +5 -0
  154. agenta/client/backend/types/format.py +5 -0
  155. agenta/client/backend/types/full_json_input.py +34 -0
  156. agenta/client/backend/types/full_json_output.py +29 -0
  157. agenta/client/backend/types/get_config_response.py +3 -5
  158. agenta/client/backend/types/{header_dto.py → header.py} +4 -6
  159. agenta/client/backend/types/http_validation_error.py +4 -6
  160. agenta/client/backend/types/human_evaluation.py +3 -5
  161. agenta/client/backend/types/human_evaluation_scenario.py +4 -6
  162. agenta/client/backend/types/human_evaluation_scenario_input.py +3 -5
  163. agenta/client/backend/types/human_evaluation_scenario_output.py +3 -5
  164. agenta/client/backend/types/invite_request.py +4 -6
  165. agenta/client/backend/types/legacy_analytics_response.py +4 -6
  166. agenta/client/backend/types/legacy_data_point.py +3 -5
  167. agenta/client/backend/types/legacy_evaluator.py +26 -0
  168. agenta/client/backend/types/legacy_scope_request.py +4 -6
  169. agenta/client/backend/types/legacy_scopes_response.py +3 -5
  170. agenta/client/backend/types/legacy_subscription_request.py +19 -0
  171. agenta/client/backend/types/legacy_user_request.py +5 -7
  172. agenta/client/backend/types/legacy_user_response.py +3 -5
  173. agenta/client/backend/types/lifecycle_dto.py +3 -5
  174. agenta/client/backend/types/link_dto.py +4 -6
  175. agenta/client/backend/types/list_api_keys_response.py +3 -5
  176. agenta/client/backend/types/llm_run_rate_limit.py +3 -5
  177. agenta/client/backend/types/meta_request.py +30 -0
  178. agenta/client/backend/types/metrics_dto.py +3 -5
  179. agenta/client/backend/types/new_testset.py +3 -5
  180. agenta/client/backend/types/node_dto.py +4 -6
  181. agenta/client/backend/types/o_tel_context_dto.py +3 -5
  182. agenta/client/backend/types/o_tel_event.py +35 -0
  183. agenta/client/backend/types/o_tel_event_dto.py +3 -5
  184. agenta/client/backend/types/o_tel_extra_dto.py +4 -6
  185. agenta/client/backend/types/o_tel_flat_span.py +56 -0
  186. agenta/client/backend/types/o_tel_flat_span_input_end_time.py +6 -0
  187. agenta/client/backend/types/o_tel_flat_span_input_start_time.py +6 -0
  188. agenta/client/backend/types/o_tel_flat_span_output_end_time.py +6 -0
  189. agenta/client/backend/types/o_tel_flat_span_output_start_time.py +6 -0
  190. agenta/client/backend/types/o_tel_link.py +34 -0
  191. agenta/client/backend/types/o_tel_link_dto.py +4 -6
  192. agenta/client/backend/types/o_tel_links_response.py +22 -0
  193. agenta/client/backend/types/o_tel_span.py +58 -0
  194. agenta/client/backend/types/o_tel_span_dto.py +8 -10
  195. agenta/client/backend/types/o_tel_span_input_end_time.py +6 -0
  196. agenta/client/backend/types/o_tel_span_input_spans_value.py +7 -0
  197. agenta/client/backend/types/o_tel_span_input_start_time.py +6 -0
  198. agenta/client/backend/types/o_tel_span_output_end_time.py +6 -0
  199. agenta/client/backend/types/o_tel_span_output_spans_value.py +30 -0
  200. agenta/client/backend/types/o_tel_span_output_start_time.py +6 -0
  201. agenta/client/backend/types/o_tel_spans_tree.py +22 -0
  202. agenta/client/backend/types/o_tel_spans_tree_input_spans_value.py +7 -0
  203. agenta/client/backend/types/o_tel_spans_tree_output_spans_value.py +5 -0
  204. agenta/client/backend/types/o_tel_status_code.py +1 -1
  205. agenta/client/backend/types/o_tel_tracing_data_response.py +22 -0
  206. agenta/client/backend/types/o_tel_tracing_request.py +22 -0
  207. agenta/client/backend/types/o_tel_tracing_response.py +27 -0
  208. agenta/client/backend/types/organization.py +3 -5
  209. agenta/client/backend/types/organization_details.py +3 -5
  210. agenta/client/backend/types/organization_membership_request.py +5 -7
  211. agenta/client/backend/types/organization_output.py +3 -5
  212. agenta/client/backend/types/organization_request.py +3 -5
  213. agenta/client/backend/types/parent_dto.py +3 -5
  214. agenta/client/backend/types/permission.py +11 -0
  215. agenta/client/backend/types/plan.py +14 -0
  216. agenta/client/backend/types/project_membership_request.py +5 -7
  217. agenta/client/backend/types/project_request.py +4 -6
  218. agenta/client/backend/types/project_scope.py +5 -7
  219. agenta/client/backend/types/projects_response.py +3 -5
  220. agenta/client/backend/types/recursive_types.py +23 -0
  221. agenta/client/backend/types/reference.py +18 -5
  222. agenta/client/backend/types/reference_dto.py +4 -5
  223. agenta/client/backend/types/reference_request_model.py +4 -5
  224. agenta/client/backend/types/result.py +4 -6
  225. agenta/client/backend/types/root_dto.py +3 -5
  226. agenta/client/backend/types/scopes_response_model.py +4 -6
  227. agenta/client/backend/types/secret_dto.py +5 -7
  228. agenta/client/backend/types/secret_response_dto.py +11 -11
  229. agenta/client/backend/types/simple_evaluation_output.py +4 -6
  230. agenta/client/backend/types/span_dto.py +18 -14
  231. agenta/client/backend/types/span_dto_nodes_value.py +1 -1
  232. agenta/client/backend/types/standard_provider_dto.py +5 -7
  233. agenta/client/backend/types/standard_provider_settings_dto.py +3 -5
  234. agenta/client/backend/types/status_dto.py +4 -6
  235. agenta/client/backend/types/tags_request.py +30 -0
  236. agenta/client/backend/types/test_set_output_response.py +5 -7
  237. agenta/client/backend/types/test_set_simple_response.py +3 -5
  238. agenta/client/backend/types/testcase_response.py +33 -0
  239. agenta/client/backend/types/testset.py +46 -0
  240. agenta/client/backend/types/testset_request.py +20 -0
  241. agenta/client/backend/types/testset_response.py +21 -0
  242. agenta/client/backend/types/testsets_response.py +21 -0
  243. agenta/client/backend/types/time_dto.py +3 -5
  244. agenta/client/backend/types/timestamp.py +6 -0
  245. agenta/client/backend/types/tree_dto.py +4 -6
  246. agenta/client/backend/types/update_app_output.py +3 -5
  247. agenta/client/backend/types/user_request.py +3 -5
  248. agenta/client/backend/types/validation_error.py +4 -6
  249. agenta/client/backend/types/workflow_artifact.py +45 -0
  250. agenta/client/backend/types/workflow_data.py +20 -0
  251. agenta/client/backend/types/workflow_flags.py +21 -0
  252. agenta/client/backend/types/workflow_request.py +20 -0
  253. agenta/client/backend/types/workflow_response.py +21 -0
  254. agenta/client/backend/types/workflow_revision.py +57 -0
  255. agenta/client/backend/types/workflow_revision_request.py +20 -0
  256. agenta/client/backend/types/workflow_revision_response.py +21 -0
  257. agenta/client/backend/types/workflow_revisions_response.py +21 -0
  258. agenta/client/backend/types/workflow_variant.py +48 -0
  259. agenta/client/backend/types/workflow_variant_request.py +20 -0
  260. agenta/client/backend/types/workflow_variant_response.py +21 -0
  261. agenta/client/backend/types/workflow_variants_response.py +21 -0
  262. agenta/client/backend/types/workflows_response.py +21 -0
  263. agenta/client/backend/types/workspace.py +3 -5
  264. agenta/client/backend/types/workspace_member_response.py +4 -6
  265. agenta/client/backend/types/workspace_membership_request.py +5 -7
  266. agenta/client/backend/types/workspace_permission.py +5 -7
  267. agenta/client/backend/types/workspace_request.py +4 -6
  268. agenta/client/backend/types/workspace_response.py +4 -6
  269. agenta/client/backend/variants/__init__.py +2 -0
  270. agenta/client/backend/variants/client.py +306 -1651
  271. agenta/client/backend/variants/raw_client.py +2482 -0
  272. agenta/client/backend/variants/types/__init__.py +2 -0
  273. agenta/client/backend/variants/types/add_variant_from_base_and_config_response.py +1 -0
  274. agenta/client/backend/vault/__init__.py +2 -0
  275. agenta/client/backend/vault/client.py +69 -323
  276. agenta/client/backend/vault/raw_client.py +616 -0
  277. agenta/client/backend/workflows/__init__.py +3 -0
  278. agenta/client/backend/workflows/client.py +2398 -0
  279. agenta/client/backend/workflows/raw_client.py +3639 -0
  280. agenta/client/backend/workspace/__init__.py +2 -0
  281. agenta/client/backend/workspace/client.py +46 -147
  282. agenta/client/backend/workspace/raw_client.py +376 -0
  283. agenta/client/types.py +4 -0
  284. agenta/sdk/litellm/mocks/__init__.py +144 -0
  285. agenta/sdk/middleware/auth.py +26 -25
  286. agenta/sdk/types.py +28 -1
  287. {agenta-0.48.9.dist-info → agenta-0.49.0.dist-info}/METADATA +1 -1
  288. agenta-0.49.0.dist-info/RECORD +362 -0
  289. agenta/client/backend/containers/types/__init__.py +0 -5
  290. agenta/client/backend/containers/types/container_templates_response.py +0 -6
  291. agenta/client/backend/types/image.py +0 -25
  292. agenta/client/backend/types/provider_kind.py +0 -21
  293. agenta/client/backend/types/template.py +0 -23
  294. agenta/client/backend/types/template_image_info.py +0 -29
  295. agenta/client/backend/types/variant_action.py +0 -22
  296. agenta-0.48.9.dist-info/RECORD +0 -255
  297. {agenta-0.48.9.dist-info → agenta-0.49.0.dist-info}/WHEEL +0 -0
@@ -3,6 +3,8 @@ from asyncio import sleep
3
3
 
4
4
  from pydantic import BaseModel
5
5
 
6
+ import agenta as ag
7
+
6
8
 
7
9
  class MockMessageModel(BaseModel):
8
10
  content: str
@@ -16,6 +18,7 @@ class MockResponseModel(BaseModel):
16
18
  choices: list[MockChoiceModel]
17
19
 
18
20
 
21
+ @ag.instrument()
19
22
  def hello_mock_response(*args, **kwargs) -> MockResponseModel:
20
23
  return MockResponseModel(
21
24
  choices=[
@@ -28,6 +31,7 @@ def hello_mock_response(*args, **kwargs) -> MockResponseModel:
28
31
  )
29
32
 
30
33
 
34
+ @ag.instrument()
31
35
  def chat_mock_response(*args, **kwargs) -> MockResponseModel:
32
36
  return MockResponseModel(
33
37
  choices=[
@@ -41,6 +45,7 @@ def chat_mock_response(*args, **kwargs) -> MockResponseModel:
41
45
  )
42
46
 
43
47
 
48
+ @ag.instrument()
44
49
  def delay_mock_response(*args, **kwargs) -> MockResponseModel:
45
50
  sleep(2)
46
51
 
@@ -55,8 +60,147 @@ def delay_mock_response(*args, **kwargs) -> MockResponseModel:
55
60
  )
56
61
 
57
62
 
63
+ @ag.instrument()
64
+ def capital_mock_response(*args, **kwargs) -> MockResponseModel:
65
+ country = kwargs.get("messages", [{}, {}])[1].get(
66
+ "content", "What is the capital of _____?"
67
+ )[len("What is the capital of ") :][:-1]
68
+
69
+ capital = CAPITALS.get(country, "Unknown")
70
+ return MockResponseModel(
71
+ choices=[
72
+ MockChoiceModel(
73
+ message=MockMessageModel(
74
+ content=f"The capital of {country} is {capital}.",
75
+ )
76
+ )
77
+ ],
78
+ )
79
+
80
+
58
81
  MOCKS: dict[str, Callable[..., MockResponseModel]] = {
59
82
  "hello": hello_mock_response,
60
83
  "chat": chat_mock_response,
61
84
  "delay": delay_mock_response,
85
+ "capital": capital_mock_response,
86
+ }
87
+
88
+ CAPITALS = {
89
+ "Afghanistan": "Kabul",
90
+ "Albania": "Tirana",
91
+ "Algeria": "Algiers",
92
+ "Andorra": "Andorra la Vella",
93
+ "Angola": "Luanda",
94
+ "Antigua and Barbuda": "St. John's",
95
+ "Argentina": "Buenos Aires",
96
+ "Armenia": "Yerevan",
97
+ "Australia": "Canberra",
98
+ "Austria": "Vienna",
99
+ "Azerbaijan": "Baku",
100
+ "Bahamas": "Nassau",
101
+ "Bahrain": "Manama",
102
+ "Bangladesh": "Dhaka",
103
+ "Barbados": "Bridgetown",
104
+ "Belarus": "Minsk",
105
+ "Belgium": "Brussels",
106
+ "Belize": "Belmopan",
107
+ "Benin": "Porto-Novo",
108
+ "Bhutan": "Thimphu",
109
+ "Bolivia": "Sucre",
110
+ "Bosnia and Herzegovina": "Sarajevo",
111
+ "Botswana": "Gaborone",
112
+ "Brazil": "Bras\u00edlia",
113
+ "Brunei": "Bandar Seri Begawan",
114
+ "Bulgaria": "Sofia",
115
+ "Burkina Faso": "Ouagadougou",
116
+ "Burundi": "Gitega",
117
+ "Cabo Verde": "Praia",
118
+ "Cambodia": "Phnom Penh",
119
+ "Cameroon": "Yaound\u00e9",
120
+ "Canada": "Ottawa",
121
+ "Central African Republic": "Bangui",
122
+ "Chad": "N'Djamena",
123
+ "Chile": "Santiago",
124
+ "China": "Beijing",
125
+ "Colombia": "Bogot\u00e1",
126
+ "Comoros": "Moroni",
127
+ "Congo (Brazzaville)": "Brazzaville",
128
+ "Congo (Kinshasa)": "Kinshasa",
129
+ "Costa Rica": "San Jos\u00e9",
130
+ "Croatia": "Zagreb",
131
+ "Cuba": "Havana",
132
+ "Cyprus": "Nicosia",
133
+ "Czech Republic": "Prague",
134
+ "Denmark": "Copenhagen",
135
+ "Djibouti": "Djibouti",
136
+ "Dominica": "Roseau",
137
+ "Dominican Republic": "Santo Domingo",
138
+ "East Timor": "Dili",
139
+ "Ecuador": "Quito",
140
+ "Egypt": "Cairo",
141
+ "El Salvador": "San Salvador",
142
+ "Equatorial Guinea": "Malabo",
143
+ "Eritrea": "Asmara",
144
+ "Estonia": "Tallinn",
145
+ "Eswatini": "Mbabane",
146
+ "Ethiopia": "Addis Ababa",
147
+ "Fiji": "Suva",
148
+ "Finland": "Helsinki",
149
+ "France": "Paris",
150
+ "Gabon": "Libreville",
151
+ "Gambia": "Banjul",
152
+ "Georgia": "Tbilisi",
153
+ "Germany": "Berlin",
154
+ "Ghana": "Accra",
155
+ "Greece": "Athens",
156
+ "Grenada": "St. George's",
157
+ "Guatemala": "Guatemala City",
158
+ "Guinea": "Conakry",
159
+ "Guinea-Bissau": "Bissau",
160
+ "Guyana": "Georgetown",
161
+ "Haiti": "Port-au-Prince",
162
+ "Honduras": "Tegucigalpa",
163
+ "Hungary": "Budapest",
164
+ "Iceland": "Reykjavik",
165
+ "India": "New Delhi",
166
+ "Indonesia": "Jakarta",
167
+ "Iran": "Tehran",
168
+ "Iraq": "Baghdad",
169
+ "Ireland": "Dublin",
170
+ "Israel": "Jerusalem",
171
+ "Italy": "Rome",
172
+ "Ivory Coast": "Yamoussoukro",
173
+ "Jamaica": "Kingston",
174
+ "Japan": "Tokyo",
175
+ "Jordan": "Amman",
176
+ "Kazakhstan": "Astana",
177
+ "Kenya": "Nairobi",
178
+ "Kiribati": "South Tarawa",
179
+ "North Korea": "Pyongyang",
180
+ "South Korea": "Seoul",
181
+ "Kosovo": "Pristina",
182
+ "Kuwait": "Kuwait City",
183
+ "Kyrgyzstan": "Bishkek",
184
+ "Laos": "Vientiane",
185
+ "Latvia": "Riga",
186
+ "Lebanon": "Beirut",
187
+ "Lesotho": "Maseru",
188
+ "Liberia": "Monrovia",
189
+ "Libya": "Tripoli",
190
+ "Liechtenstein": "Vaduz",
191
+ "Lithuania": "Vilnius",
192
+ "Luxembourg": "Luxembourg",
193
+ "Madagascar": "Antananarivo",
194
+ "Malawi": "Lilongwe",
195
+ "Malaysia": "Kuala Lumpur",
196
+ "Maldives": "Mal\u00e9",
197
+ "Mali": "Bamako",
198
+ "Malta": "Valletta",
199
+ "Marshall Islands": "Majuro",
200
+ "Mauritania": "Nouakchott",
201
+ "Mauritius": "Port Louis",
202
+ "Mexico": "Mexico City",
203
+ "Micronesia": "Palikir",
204
+ "Moldova": "Chi\u0219in\u0103u",
205
+ "Monaco": "Monaco",
62
206
  }
@@ -100,8 +100,8 @@ class AuthMiddleware(BaseHTTPMiddleware):
100
100
  access_token = request.cookies.get("sAccessToken", None)
101
101
  cookies = {"sAccessToken": access_token} if access_token else None
102
102
 
103
- if not headers and not cookies:
104
- log.debug("No auth header nor auth cookie found in the request")
103
+ # if not headers and not cookies:
104
+ # log.debug("No auth header nor auth cookie found in the request")
105
105
 
106
106
  # PARAMS
107
107
  params = {}
@@ -112,8 +112,9 @@ class AuthMiddleware(BaseHTTPMiddleware):
112
112
  # ALTERNATIVE
113
113
  or request.query_params.get("project_id")
114
114
  )
115
- if not project_id:
116
- log.debug("No project ID found in request")
115
+ # if not project_id:
116
+ # log.debug("No project ID found in request")
117
+
117
118
  if project_id:
118
119
  params["project_id"] = project_id
119
120
  ## SCOPE
@@ -139,7 +140,7 @@ class AuthMiddleware(BaseHTTPMiddleware):
139
140
  credentials = _cache.get(_hash)
140
141
 
141
142
  if credentials:
142
- log.debug("Using cached credentials")
143
+ # log.debug("Using cached credentials")
143
144
  return credentials
144
145
 
145
146
  try:
@@ -153,46 +154,46 @@ class AuthMiddleware(BaseHTTPMiddleware):
153
154
  timeout=30.0,
154
155
  )
155
156
  except httpx.TimeoutException as exc:
156
- log.debug(f"Timeout error while verify credentials: {exc}")
157
+ # log.debug(f"Timeout error while verify credentials: {exc}")
157
158
  raise DenyException(
158
159
  status_code=504,
159
160
  content="Could not verify credentials: connection to {self.host} timed out. Please check your network connection.",
160
161
  ) from exc
161
162
  except httpx.ConnectError as exc:
162
- log.debug(f"Connection error while verify credentials: {exc}")
163
+ # log.debug(f"Connection error while verify credentials: {exc}")
163
164
  raise DenyException(
164
165
  status_code=503,
165
166
  content=f"Could not verify credentials: connection to {self.host} failed. Please check if agenta is available.",
166
167
  ) from exc
167
168
  except httpx.NetworkError as exc:
168
- log.debug(f"Network error while verify credentials: {exc}")
169
+ # log.debug(f"Network error while verify credentials: {exc}")
169
170
  raise DenyException(
170
171
  status_code=503,
171
172
  content="Could not verify credentials: connection to {self.host} failed. Please check your network connection.",
172
173
  ) from exc
173
174
  except httpx.HTTPError as exc:
174
- log.debug(f"HTTP error while verify credentials: {exc}")
175
+ # log.debug(f"HTTP error while verify credentials: {exc}")
175
176
  raise DenyException(
176
177
  status_code=502,
177
178
  content=f"Could not verify credentials: connection to {self.host} failed. Please check if agenta is available.",
178
179
  ) from exc
179
180
 
180
181
  if response.status_code == 401:
181
- log.debug("Agenta returned 401 - Invalid credentials")
182
+ # log.debug("Agenta returned 401 - Invalid credentials")
182
183
  raise DenyException(
183
184
  status_code=401,
184
185
  content="Invalid credentials. Please check your credentials or login again.",
185
186
  )
186
187
  elif response.status_code == 403:
187
- log.debug("Agenta returned 403 - Permission denied")
188
+ # log.debug("Agenta returned 403 - Permission denied")
188
189
  raise DenyException(
189
190
  status_code=403,
190
191
  content="Permission denied. Please check your permissions or contact your administrator.",
191
192
  )
192
193
  elif response.status_code != 200:
193
- log.debug(
194
- f"Agenta returned {response.status_code} - Unexpected status code"
195
- )
194
+ # log.debug(
195
+ # f"Agenta returned {response.status_code} - Unexpected status code"
196
+ # )
196
197
  raise DenyException(
197
198
  status_code=500,
198
199
  content=f"Could not verify credentials: {self.host} returned unexpected status code {response.status_code}. Please try again later or contact support if the issue persists.",
@@ -201,16 +202,16 @@ class AuthMiddleware(BaseHTTPMiddleware):
201
202
  try:
202
203
  auth = response.json()
203
204
  except ValueError as exc:
204
- log.debug(f"Agenta returned invalid JSON response: {exc}")
205
+ # log.debug(f"Agenta returned invalid JSON response: {exc}")
205
206
  raise DenyException(
206
207
  status_code=500,
207
208
  content=f"Could not verify credentials: {self.host} returned unexpected invalid JSON response. Please try again later or contact support if the issue persists.",
208
209
  ) from exc
209
210
 
210
211
  if not isinstance(auth, dict):
211
- log.debug(
212
- f"Agenta returned invalid response format: {type(auth)}"
213
- )
212
+ # log.debug(
213
+ # f"Agenta returned invalid response format: {type(auth)}"
214
+ # )
214
215
  raise DenyException(
215
216
  status_code=500,
216
217
  content=f"Could not verify credentials: {self.host} returned unexpected invalid response format. Please try again later or contact support if the issue persists.",
@@ -218,7 +219,7 @@ class AuthMiddleware(BaseHTTPMiddleware):
218
219
 
219
220
  effect = auth.get("effect")
220
221
  if effect != "allow":
221
- log.debug("Access denied by Agenta - effect: {effect}")
222
+ # log.debug("Access denied by Agenta - effect: {effect}")
222
223
  raise DenyException(
223
224
  status_code=403,
224
225
  content="Permission denied. Please check your permissions or contact your administrator.",
@@ -226,8 +227,8 @@ class AuthMiddleware(BaseHTTPMiddleware):
226
227
 
227
228
  credentials = auth.get("credentials")
228
229
 
229
- if not credentials:
230
- log.debug("No credentials found in the response")
230
+ # if not credentials:
231
+ # log.debug("No credentials found in the response")
231
232
 
232
233
  _cache.put(_hash, credentials)
233
234
 
@@ -236,9 +237,9 @@ class AuthMiddleware(BaseHTTPMiddleware):
236
237
  except DenyException as deny:
237
238
  raise deny
238
239
  except Exception as exc: # pylint: disable=bare-except
239
- log.debug(
240
- f"Unexpected error while verifying credentials (remote): {exc}"
241
- )
240
+ # log.debug(
241
+ # f"Unexpected error while verifying credentials (remote): {exc}"
242
+ # )
242
243
  raise DenyException(
243
244
  status_code=500,
244
245
  content=f"Could not verify credentials: unexpected error - {str(exc)}. Please try again later or contact support if the issue persists.",
@@ -247,7 +248,7 @@ class AuthMiddleware(BaseHTTPMiddleware):
247
248
  except DenyException as deny:
248
249
  raise deny
249
250
  except Exception as exc:
250
- log.debug(f"Unexpected error while verifying credentials (local): {exc}")
251
+ # log.debug(f"Unexpected error while verifying credentials (local): {exc}")
251
252
  raise DenyException(
252
253
  status_code=500,
253
254
  content=f"Could not verify credentials: unexpected error - {str(exc)}. Please try again later or contact support if the issue persists.",
agenta/sdk/types.py CHANGED
@@ -481,6 +481,26 @@ class PromptTemplate(BaseModel):
481
481
  f"Error formatting template '{content}': {str(e)}", original_error=e
482
482
  )
483
483
 
484
+ def _substitute_variables(self, obj: Any, kwargs: Dict[str, Any]) -> Any:
485
+ """Recursively substitute variables within strings of a JSON-like object.
486
+
487
+ This now processes placeholders in both keys and values so that
488
+ structures like ``{"my_{{var}}": "{{val}}"}`` are fully substituted.
489
+ """
490
+ if isinstance(obj, str):
491
+ return self._format_with_template(obj, kwargs)
492
+ if isinstance(obj, list):
493
+ return [self._substitute_variables(item, kwargs) for item in obj]
494
+ if isinstance(obj, dict):
495
+ new_dict = {}
496
+ for k, v in obj.items():
497
+ new_key = (
498
+ self._format_with_template(k, kwargs) if isinstance(k, str) else k
499
+ )
500
+ new_dict[new_key] = self._substitute_variables(v, kwargs)
501
+ return new_dict
502
+ return obj
503
+
484
504
  def format(self, **kwargs) -> "PromptTemplate":
485
505
  """
486
506
  Format the template with provided inputs.
@@ -533,10 +553,17 @@ class PromptTemplate(BaseModel):
533
553
  )
534
554
  )
535
555
 
556
+ new_llm_config = self.llm_config.copy(deep=True)
557
+ if new_llm_config.response_format is not None:
558
+ rf_dict = new_llm_config.response_format.model_dump(by_alias=True)
559
+ substituted = self._substitute_variables(rf_dict, kwargs)
560
+ rf_type = type(new_llm_config.response_format)
561
+ new_llm_config.response_format = rf_type(**substituted)
562
+
536
563
  return PromptTemplate(
537
564
  messages=new_messages,
538
565
  template_format=self.template_format,
539
- llm_config=self.llm_config,
566
+ llm_config=new_llm_config,
540
567
  input_keys=self.input_keys,
541
568
  )
542
569
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: agenta
3
- Version: 0.48.9
3
+ Version: 0.49.0
4
4
  Summary: The SDK for agenta is an open-source LLMOps platform.
5
5
  Keywords: LLMOps,LLM,evaluation,prompt engineering
6
6
  Author: Mahmoud Mabrouk