agenta 0.12.3__py3-none-any.whl → 0.32.0a1__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 (244) hide show
  1. agenta/__init__.py +64 -7
  2. agenta/cli/helper.py +7 -3
  3. agenta/cli/main.py +15 -50
  4. agenta/cli/variant_commands.py +50 -29
  5. agenta/client/Readme.md +72 -64
  6. agenta/client/api.py +2 -2
  7. agenta/client/backend/__init__.py +193 -22
  8. agenta/client/backend/access_control/__init__.py +1 -0
  9. agenta/client/backend/access_control/client.py +167 -0
  10. agenta/client/backend/apps/__init__.py +1 -0
  11. agenta/client/backend/apps/client.py +1691 -0
  12. agenta/client/backend/bases/__init__.py +1 -0
  13. agenta/client/backend/bases/client.py +190 -0
  14. agenta/client/backend/client.py +2508 -5712
  15. agenta/client/backend/configs/__init__.py +1 -0
  16. agenta/client/backend/configs/client.py +604 -0
  17. agenta/client/backend/containers/__init__.py +5 -0
  18. agenta/client/backend/containers/client.py +648 -0
  19. agenta/client/backend/containers/types/__init__.py +5 -0
  20. agenta/client/backend/{types → containers/types}/container_templates_response.py +1 -2
  21. agenta/client/backend/core/__init__.py +30 -0
  22. agenta/client/backend/core/client_wrapper.py +42 -9
  23. agenta/client/backend/core/file.py +70 -0
  24. agenta/client/backend/core/http_client.py +575 -0
  25. agenta/client/backend/core/jsonable_encoder.py +33 -39
  26. agenta/client/backend/core/pydantic_utilities.py +325 -0
  27. agenta/client/backend/core/query_encoder.py +60 -0
  28. agenta/client/backend/core/remove_none_from_dict.py +2 -2
  29. agenta/client/backend/core/request_options.py +35 -0
  30. agenta/client/backend/core/serialization.py +276 -0
  31. agenta/client/backend/environments/__init__.py +1 -0
  32. agenta/client/backend/environments/client.py +196 -0
  33. agenta/client/backend/evaluations/__init__.py +1 -0
  34. agenta/client/backend/evaluations/client.py +1469 -0
  35. agenta/client/backend/evaluators/__init__.py +1 -0
  36. agenta/client/backend/evaluators/client.py +1283 -0
  37. agenta/client/backend/observability/__init__.py +1 -0
  38. agenta/client/backend/observability/client.py +1286 -0
  39. agenta/client/backend/observability_v_1/__init__.py +5 -0
  40. agenta/client/backend/observability_v_1/client.py +763 -0
  41. agenta/client/backend/observability_v_1/types/__init__.py +7 -0
  42. agenta/client/backend/observability_v_1/types/format.py +5 -0
  43. agenta/client/backend/observability_v_1/types/query_analytics_response.py +7 -0
  44. agenta/client/backend/observability_v_1/types/query_traces_response.py +11 -0
  45. agenta/client/backend/scopes/__init__.py +1 -0
  46. agenta/client/backend/scopes/client.py +114 -0
  47. agenta/client/backend/testsets/__init__.py +1 -0
  48. agenta/client/backend/testsets/client.py +1284 -0
  49. agenta/client/backend/types/__init__.py +154 -26
  50. agenta/client/backend/types/agenta_node_dto.py +48 -0
  51. agenta/client/backend/types/agenta_node_dto_nodes_value.py +6 -0
  52. agenta/client/backend/types/agenta_nodes_response.py +30 -0
  53. agenta/client/backend/types/agenta_root_dto.py +30 -0
  54. agenta/client/backend/types/agenta_roots_response.py +30 -0
  55. agenta/client/backend/types/agenta_tree_dto.py +30 -0
  56. agenta/client/backend/types/agenta_trees_response.py +30 -0
  57. agenta/client/backend/types/aggregated_result.py +16 -31
  58. agenta/client/backend/types/aggregated_result_evaluator_config.py +8 -0
  59. agenta/client/backend/types/analytics_response.py +24 -0
  60. agenta/client/backend/types/app.py +17 -30
  61. agenta/client/backend/types/app_variant_response.py +36 -0
  62. agenta/client/backend/types/app_variant_revision.py +17 -32
  63. agenta/client/backend/types/base_output.py +13 -28
  64. agenta/client/backend/types/body_import_testset.py +15 -31
  65. agenta/client/backend/types/bucket_dto.py +26 -0
  66. agenta/client/backend/types/collect_status_response.py +22 -0
  67. agenta/client/backend/types/config_db.py +16 -31
  68. agenta/client/backend/types/config_dto.py +32 -0
  69. agenta/client/backend/types/config_response_model.py +32 -0
  70. agenta/client/backend/types/correct_answer.py +22 -0
  71. agenta/client/backend/types/create_app_output.py +13 -28
  72. agenta/client/backend/types/create_span.py +45 -0
  73. agenta/client/backend/types/create_trace_response.py +22 -0
  74. agenta/client/backend/types/docker_env_vars.py +13 -28
  75. agenta/client/backend/types/environment_output.py +22 -34
  76. agenta/client/backend/types/environment_output_extended.py +31 -0
  77. agenta/client/backend/types/environment_revision.py +26 -0
  78. agenta/client/backend/types/error.py +22 -0
  79. agenta/client/backend/types/evaluation.py +22 -33
  80. agenta/client/backend/types/evaluation_scenario.py +18 -33
  81. agenta/client/backend/types/evaluation_scenario_input.py +16 -31
  82. agenta/client/backend/types/evaluation_scenario_output.py +17 -30
  83. agenta/client/backend/types/evaluation_scenario_result.py +14 -29
  84. agenta/client/backend/types/evaluation_scenario_score_update.py +21 -0
  85. agenta/client/backend/types/evaluation_status_enum.py +11 -29
  86. agenta/client/backend/types/evaluation_type.py +3 -21
  87. agenta/client/backend/types/evaluator.py +20 -31
  88. agenta/client/backend/types/evaluator_config.py +21 -33
  89. agenta/client/backend/types/evaluator_mapping_output_interface.py +21 -0
  90. agenta/client/backend/types/evaluator_output_interface.py +21 -0
  91. agenta/client/backend/types/exception_dto.py +26 -0
  92. agenta/client/backend/types/get_config_response.py +23 -0
  93. agenta/client/backend/types/header_dto.py +22 -0
  94. agenta/client/backend/types/http_validation_error.py +14 -29
  95. agenta/client/backend/types/human_evaluation.py +18 -34
  96. agenta/client/backend/types/human_evaluation_scenario.py +22 -38
  97. agenta/client/backend/types/human_evaluation_scenario_input.py +13 -28
  98. agenta/client/backend/types/human_evaluation_scenario_output.py +13 -28
  99. agenta/client/backend/types/human_evaluation_scenario_update.py +30 -0
  100. agenta/client/backend/types/human_evaluation_update.py +22 -0
  101. agenta/client/backend/types/image.py +18 -32
  102. agenta/client/backend/types/invite_request.py +16 -30
  103. agenta/client/backend/types/legacy_analytics_response.py +29 -0
  104. agenta/client/backend/types/legacy_data_point.py +27 -0
  105. agenta/client/backend/types/lifecycle_dto.py +24 -0
  106. agenta/client/backend/types/link_dto.py +24 -0
  107. agenta/client/backend/types/list_api_keys_response.py +24 -0
  108. agenta/client/backend/types/llm_run_rate_limit.py +13 -28
  109. agenta/client/backend/types/llm_tokens.py +23 -0
  110. agenta/client/backend/types/metrics_dto.py +24 -0
  111. agenta/client/backend/types/new_human_evaluation.py +27 -0
  112. agenta/client/backend/types/new_testset.py +16 -31
  113. agenta/client/backend/types/node_dto.py +24 -0
  114. agenta/client/backend/types/node_type.py +19 -0
  115. agenta/client/backend/types/o_tel_context_dto.py +22 -0
  116. agenta/client/backend/types/o_tel_event_dto.py +23 -0
  117. agenta/client/backend/types/o_tel_extra_dto.py +26 -0
  118. agenta/client/backend/types/o_tel_link_dto.py +23 -0
  119. agenta/client/backend/types/o_tel_span_dto.py +37 -0
  120. agenta/client/backend/types/o_tel_span_kind.py +15 -0
  121. agenta/client/backend/types/o_tel_spans_response.py +24 -0
  122. agenta/client/backend/types/o_tel_status_code.py +8 -0
  123. agenta/client/backend/types/organization.py +22 -35
  124. agenta/client/backend/types/organization_output.py +13 -28
  125. agenta/client/backend/types/outputs.py +5 -0
  126. agenta/client/backend/types/parent_dto.py +21 -0
  127. agenta/client/backend/types/permission.py +41 -0
  128. agenta/client/backend/types/projects_response.py +28 -0
  129. agenta/client/backend/types/provider_key_dto.py +23 -0
  130. agenta/client/backend/types/provider_kind.py +21 -0
  131. agenta/client/backend/types/reference_dto.py +23 -0
  132. agenta/client/backend/types/reference_request_model.py +23 -0
  133. agenta/client/backend/types/result.py +18 -31
  134. agenta/client/backend/types/root_dto.py +21 -0
  135. agenta/client/backend/types/{human_evaluation_scenario_score.py → score.py} +1 -1
  136. agenta/client/backend/types/secret_dto.py +24 -0
  137. agenta/client/backend/types/{human_evaluation_scenario_update_score.py → secret_kind.py} +1 -1
  138. agenta/client/backend/types/secret_response_dto.py +27 -0
  139. agenta/client/backend/types/simple_evaluation_output.py +13 -28
  140. agenta/client/backend/types/span.py +39 -49
  141. agenta/client/backend/types/span_detail.py +44 -0
  142. agenta/client/backend/types/span_dto.py +54 -0
  143. agenta/client/backend/types/span_dto_nodes_value.py +9 -0
  144. agenta/client/backend/types/span_status_code.py +5 -0
  145. agenta/client/backend/types/span_variant.py +23 -0
  146. agenta/client/backend/types/status_code.py +5 -0
  147. agenta/client/backend/types/status_dto.py +23 -0
  148. agenta/client/backend/types/template.py +14 -29
  149. agenta/client/backend/types/template_image_info.py +21 -35
  150. agenta/client/backend/types/test_set_output_response.py +20 -33
  151. agenta/client/backend/types/test_set_simple_response.py +13 -28
  152. agenta/client/backend/types/time_dto.py +23 -0
  153. agenta/client/backend/types/trace_detail.py +44 -0
  154. agenta/client/backend/types/tree_dto.py +23 -0
  155. agenta/client/backend/types/tree_type.py +5 -0
  156. agenta/client/backend/types/update_app_output.py +22 -0
  157. agenta/client/backend/types/uri.py +13 -28
  158. agenta/client/backend/types/validation_error.py +13 -28
  159. agenta/client/backend/types/variant_action.py +14 -29
  160. agenta/client/backend/types/variant_action_enum.py +1 -19
  161. agenta/client/backend/types/with_pagination.py +26 -0
  162. agenta/client/backend/types/workspace_member_response.py +23 -0
  163. agenta/client/backend/types/workspace_permission.py +25 -0
  164. agenta/client/backend/types/workspace_response.py +29 -0
  165. agenta/client/backend/types/workspace_role.py +15 -0
  166. agenta/client/backend/types/workspace_role_response.py +23 -0
  167. agenta/client/backend/variants/__init__.py +5 -0
  168. agenta/client/backend/variants/client.py +2814 -0
  169. agenta/client/backend/variants/types/__init__.py +7 -0
  170. agenta/client/backend/variants/types/add_variant_from_base_and_config_response.py +8 -0
  171. agenta/client/backend/vault/__init__.py +1 -0
  172. agenta/client/backend/vault/client.py +685 -0
  173. agenta/client/client.py +1 -1
  174. agenta/config.py +0 -2
  175. agenta/config.toml +0 -1
  176. agenta/docker/docker-assets/Dockerfile.cloud.template +2 -1
  177. agenta/docker/docker-assets/Dockerfile.template +2 -1
  178. agenta/docker/docker_utils.py +11 -12
  179. agenta/sdk/__init__.py +58 -7
  180. agenta/sdk/agenta_init.py +182 -164
  181. agenta/sdk/assets.py +95 -0
  182. agenta/sdk/client.py +56 -0
  183. agenta/sdk/context/__init__.py +0 -0
  184. agenta/sdk/context/exporting.py +25 -0
  185. agenta/sdk/context/routing.py +27 -0
  186. agenta/sdk/context/tracing.py +28 -0
  187. agenta/sdk/decorators/__init__.py +0 -0
  188. agenta/sdk/decorators/routing.py +576 -0
  189. agenta/sdk/decorators/tracing.py +296 -0
  190. agenta/sdk/litellm/__init__.py +1 -0
  191. agenta/sdk/litellm/litellm.py +314 -0
  192. agenta/sdk/litellm/mockllm.py +27 -0
  193. agenta/sdk/litellm/mocks/__init__.py +26 -0
  194. agenta/sdk/managers/__init__.py +6 -0
  195. agenta/sdk/managers/config.py +208 -0
  196. agenta/sdk/managers/deployment.py +45 -0
  197. agenta/sdk/managers/secrets.py +38 -0
  198. agenta/sdk/managers/shared.py +639 -0
  199. agenta/sdk/managers/variant.py +182 -0
  200. agenta/sdk/managers/vault.py +16 -0
  201. agenta/sdk/middleware/__init__.py +0 -0
  202. agenta/sdk/middleware/auth.py +180 -0
  203. agenta/sdk/middleware/cache.py +47 -0
  204. agenta/sdk/middleware/config.py +255 -0
  205. agenta/sdk/middleware/cors.py +29 -0
  206. agenta/sdk/middleware/inline.py +38 -0
  207. agenta/sdk/middleware/mock.py +33 -0
  208. agenta/sdk/middleware/otel.py +40 -0
  209. agenta/sdk/middleware/vault.py +145 -0
  210. agenta/sdk/router.py +0 -7
  211. agenta/sdk/tracing/__init__.py +1 -0
  212. agenta/sdk/tracing/attributes.py +141 -0
  213. agenta/sdk/tracing/conventions.py +49 -0
  214. agenta/sdk/tracing/exporters.py +103 -0
  215. agenta/sdk/tracing/inline.py +1146 -0
  216. agenta/sdk/tracing/processors.py +121 -0
  217. agenta/sdk/tracing/spans.py +136 -0
  218. agenta/sdk/tracing/tracing.py +237 -0
  219. agenta/sdk/types.py +478 -74
  220. agenta/sdk/utils/__init__.py +0 -0
  221. agenta/sdk/utils/constants.py +1 -0
  222. agenta/sdk/utils/{helper/openai_cost.py → costs.py} +3 -0
  223. agenta/sdk/utils/exceptions.py +59 -0
  224. agenta/sdk/utils/globals.py +6 -10
  225. agenta/sdk/utils/helpers.py +8 -0
  226. agenta/sdk/utils/logging.py +21 -0
  227. agenta/sdk/utils/singleton.py +13 -0
  228. agenta/sdk/utils/timing.py +58 -0
  229. {agenta-0.12.3.dist-info → agenta-0.32.0a1.dist-info}/METADATA +98 -151
  230. agenta-0.32.0a1.dist-info/RECORD +263 -0
  231. {agenta-0.12.3.dist-info → agenta-0.32.0a1.dist-info}/WHEEL +1 -1
  232. agenta/client/backend/types/add_variant_from_base_and_config_response.py +0 -7
  233. agenta/client/backend/types/app_variant_output.py +0 -47
  234. agenta/client/backend/types/app_variant_output_extended.py +0 -50
  235. agenta/client/backend/types/delete_evaluation.py +0 -36
  236. agenta/client/backend/types/evaluation_webhook.py +0 -36
  237. agenta/client/backend/types/feedback.py +0 -40
  238. agenta/client/backend/types/get_config_reponse.py +0 -39
  239. agenta/client/backend/types/list_api_keys_output.py +0 -39
  240. agenta/client/backend/types/trace.py +0 -48
  241. agenta/sdk/agenta_decorator.py +0 -443
  242. agenta/sdk/context.py +0 -41
  243. agenta-0.12.3.dist-info/RECORD +0 -114
  244. {agenta-0.12.3.dist-info → agenta-0.32.0a1.dist-info}/entry_points.txt +0 -0
@@ -1,443 +0,0 @@
1
- """The code for the Agenta SDK"""
2
-
3
- import os
4
- import sys
5
- import time
6
- import inspect
7
- import argparse
8
- import traceback
9
- import functools
10
- from pathlib import Path
11
- from tempfile import NamedTemporaryFile
12
- from typing import Any, Callable, Dict, Optional, Tuple, List, Union
13
-
14
- from fastapi import Body, FastAPI, UploadFile
15
- from fastapi.responses import JSONResponse
16
- from fastapi.middleware.cors import CORSMiddleware
17
-
18
- import agenta
19
- from .context import save_context
20
- from .router import router as router
21
- from .types import (
22
- Context,
23
- DictInput,
24
- FloatParam,
25
- InFile,
26
- IntParam,
27
- MultipleChoiceParam,
28
- TextParam,
29
- MessagesInput,
30
- FileInputURL,
31
- FuncResponse,
32
- BinaryParam,
33
- )
34
-
35
- app = FastAPI()
36
-
37
- origins = [
38
- "*",
39
- ]
40
-
41
- app.add_middleware(
42
- CORSMiddleware,
43
- allow_origins=origins,
44
- allow_credentials=True,
45
- allow_methods=["*"],
46
- allow_headers=["*"],
47
- )
48
-
49
- app.include_router(router, prefix="")
50
-
51
-
52
- def ingest_file(upfile: UploadFile):
53
- temp_file = NamedTemporaryFile(delete=False)
54
- temp_file.write(upfile.file.read())
55
- temp_file.close()
56
- return InFile(file_name=upfile.filename, file_path=temp_file.name)
57
-
58
-
59
- def entrypoint(func: Callable[..., Any]) -> Callable[..., Any]:
60
- """
61
- Decorator to wrap a function for HTTP POST and terminal exposure.
62
-
63
- Args:
64
- func: Function to wrap.
65
-
66
- Returns:
67
- Wrapped function for HTTP POST and terminal.
68
- """
69
-
70
- endpoint_name = "generate"
71
- func_signature = inspect.signature(func)
72
- config_params = agenta.config.all()
73
- ingestible_files = extract_ingestible_files(func_signature)
74
-
75
- @functools.wraps(func)
76
- async def wrapper(*args, **kwargs) -> Any:
77
- func_params, api_config_params = split_kwargs(kwargs, config_params)
78
- ingest_files(func_params, ingestible_files)
79
- agenta.config.set(**api_config_params)
80
- return await execute_function(func, *args, **func_params)
81
-
82
- @functools.wraps(func)
83
- async def wrapper_deployed(*args, **kwargs) -> Any:
84
- func_params = {
85
- k: v for k, v in kwargs.items() if k not in ["config", "environment"]
86
- }
87
- if "environment" in kwargs and kwargs["environment"] is not None:
88
- agenta.config.pull(environment_name=kwargs["environment"])
89
- elif "config" in kwargs and kwargs["config"] is not None:
90
- agenta.config.pull(config_name=kwargs["config"])
91
- else:
92
- agenta.config.pull(config_name="default")
93
- return await execute_function(func, *args, **func_params)
94
-
95
- update_function_signature(wrapper, func_signature, config_params, ingestible_files)
96
- route = f"/{endpoint_name}"
97
- app.post(route, response_model=FuncResponse)(wrapper)
98
-
99
- update_deployed_function_signature(
100
- wrapper_deployed,
101
- func_signature,
102
- ingestible_files,
103
- )
104
- route_deployed = f"/{endpoint_name}_deployed"
105
- app.post(route_deployed, response_model=FuncResponse)(wrapper_deployed)
106
- override_schema(
107
- openapi_schema=app.openapi(),
108
- func_name=func.__name__,
109
- endpoint=endpoint_name,
110
- params={**config_params, **func_signature.parameters},
111
- )
112
-
113
- if is_main_script(func):
114
- handle_terminal_run(
115
- func,
116
- func_signature.parameters,
117
- config_params,
118
- ingestible_files,
119
- )
120
- return None
121
-
122
-
123
- def extract_ingestible_files(
124
- func_signature: inspect.Signature,
125
- ) -> Dict[str, inspect.Parameter]:
126
- """Extract parameters annotated as InFile from function signature."""
127
-
128
- return {
129
- name: param
130
- for name, param in func_signature.parameters.items()
131
- if param.annotation is InFile
132
- }
133
-
134
-
135
- def split_kwargs(
136
- kwargs: Dict[str, Any], config_params: Dict[str, Any]
137
- ) -> Tuple[Dict[str, Any], Dict[str, Any]]:
138
- """Split keyword arguments into function parameters and API configuration parameters."""
139
-
140
- func_params = {k: v for k, v in kwargs.items() if k not in config_params}
141
- api_config_params = {k: v for k, v in kwargs.items() if k in config_params}
142
- return func_params, api_config_params
143
-
144
-
145
- def ingest_files(
146
- func_params: Dict[str, Any], ingestible_files: Dict[str, inspect.Parameter]
147
- ) -> None:
148
- """Ingest files specified in function parameters."""
149
-
150
- for name in ingestible_files:
151
- if name in func_params and func_params[name] is not None:
152
- func_params[name] = ingest_file(func_params[name])
153
-
154
-
155
- async def execute_function(
156
- func: Callable[..., Any], *args, **func_params
157
- ) -> Union[Dict[str, Any], JSONResponse]:
158
- """Execute the function and handle any exceptions."""
159
-
160
- try:
161
- """Note: The following block is for backward compatibility.
162
- It allows functions to work seamlessly whether they are synchronous or asynchronous.
163
- For synchronous functions, it calls them directly, while for asynchronous functions,
164
- it awaits their execution.
165
- """
166
- is_coroutine_function = inspect.iscoroutinefunction(func)
167
- start_time = time.perf_counter()
168
- if is_coroutine_function:
169
- result = await func(*args, **func_params)
170
- else:
171
- result = func(*args, **func_params)
172
- end_time = time.perf_counter()
173
- latency = end_time - start_time
174
-
175
- if isinstance(result, Context):
176
- save_context(result)
177
- if isinstance(result, Dict):
178
- return FuncResponse(**result, latency=round(latency, 4)).dict()
179
- if isinstance(result, str):
180
- return FuncResponse(message=result, latency=round(latency, 4)).dict()
181
- except Exception as e:
182
- return handle_exception(e)
183
-
184
-
185
- def handle_exception(e: Exception) -> JSONResponse:
186
- """Handle exceptions and return a JSONResponse."""
187
-
188
- status_code: int = e.status_code if hasattr(e, "status_code") else 500
189
- traceback_str = traceback.format_exception(e, value=e, tb=e.__traceback__)
190
- return JSONResponse(
191
- status_code=status_code,
192
- content={"error": str(e), "traceback": "".join(traceback_str)},
193
- )
194
-
195
-
196
- def update_wrapper_signature(wrapper: Callable[..., Any], updated_params: List):
197
- """
198
- Updates the signature of a wrapper function with a new list of parameters.
199
-
200
- Args:
201
- wrapper (callable): A callable object, such as a function or a method, that requires a signature update.
202
- updated_params (List[inspect.Parameter]): A list of `inspect.Parameter` objects representing the updated parameters
203
- for the wrapper function.
204
- """
205
-
206
- wrapper_signature = inspect.signature(wrapper)
207
- wrapper_signature = wrapper_signature.replace(parameters=updated_params)
208
- wrapper.__signature__ = wrapper_signature
209
-
210
-
211
- def update_function_signature(
212
- wrapper: Callable[..., Any],
213
- func_signature: inspect.Signature,
214
- config_params: Dict[str, Any],
215
- ingestible_files: Dict[str, inspect.Parameter],
216
- ) -> None:
217
- """Update the function signature to include new parameters."""
218
-
219
- updated_params = []
220
- add_config_params_to_parser(updated_params, config_params)
221
- add_func_params_to_parser(updated_params, func_signature, ingestible_files)
222
- update_wrapper_signature(wrapper, updated_params)
223
-
224
-
225
- def update_deployed_function_signature(
226
- wrapper: Callable[..., Any],
227
- func_signature: inspect.Signature,
228
- ingestible_files: Dict[str, inspect.Parameter],
229
- ) -> None:
230
- """Update the function signature to include new parameters."""
231
- updated_params = []
232
- add_func_params_to_parser(updated_params, func_signature, ingestible_files)
233
- for param in [
234
- "config",
235
- "environment",
236
- ]: # we add the config and environment parameters
237
- updated_params.append(
238
- inspect.Parameter(
239
- param,
240
- inspect.Parameter.KEYWORD_ONLY,
241
- default=Body(None),
242
- annotation=str,
243
- )
244
- )
245
- update_wrapper_signature(wrapper, updated_params)
246
-
247
-
248
- def add_config_params_to_parser(
249
- updated_params: list, config_params: Dict[str, Any]
250
- ) -> None:
251
- """Add configuration parameters to function signature."""
252
- for name, param in config_params.items():
253
- updated_params.append(
254
- inspect.Parameter(
255
- name,
256
- inspect.Parameter.KEYWORD_ONLY,
257
- default=Body(param),
258
- annotation=Optional[type(param)],
259
- )
260
- )
261
-
262
-
263
- def add_func_params_to_parser(
264
- updated_params: list,
265
- func_signature: inspect.Signature,
266
- ingestible_files: Dict[str, inspect.Parameter],
267
- ) -> None:
268
- """Add function parameters to function signature."""
269
- for name, param in func_signature.parameters.items():
270
- if name in ingestible_files:
271
- updated_params.append(
272
- inspect.Parameter(name, param.kind, annotation=UploadFile)
273
- )
274
- else:
275
- updated_params.append(
276
- inspect.Parameter(
277
- name,
278
- inspect.Parameter.KEYWORD_ONLY,
279
- default=Body(..., embed=True),
280
- annotation=param.annotation,
281
- )
282
- )
283
-
284
-
285
- def is_main_script(func: Callable) -> bool:
286
- """
287
- Check if the script containing the function is the main script being run.
288
-
289
- Args:
290
- func (Callable): The function object to check.
291
-
292
- Returns:
293
- bool: True if the script containing the function is the main script, False otherwise.
294
-
295
- Example:
296
- if is_main_script(my_function):
297
- print("This is the main script.")
298
- """
299
- return (
300
- os.path.splitext(os.path.basename(sys.argv[0]))[0]
301
- == os.path.splitext(os.path.basename(inspect.getfile(func)))[0]
302
- )
303
-
304
-
305
- def handle_terminal_run(
306
- func: Callable,
307
- func_params: Dict[str, Any],
308
- config_params: Dict[str, Any],
309
- ingestible_files: Dict,
310
- ) -> None:
311
- """
312
- Parses command line arguments and sets configuration when script is run from the terminal.
313
-
314
- Args:
315
- func_params (dict): A dictionary containing the function parameters and their annotations.
316
- config_params (dict): A dictionary containing the configuration parameters.
317
-
318
- Example:
319
- handle_terminal_run(func_params=inspect.signature(my_function).parameters, config_params=config.all())
320
- """
321
-
322
- # For required parameters, we add them as arguments
323
- parser = argparse.ArgumentParser()
324
- for name, param in func_params.items():
325
- if name in ingestible_files:
326
- parser.add_argument(name, type=str)
327
- else:
328
- parser.add_argument(name, type=param.annotation)
329
-
330
- for name, param in config_params.items():
331
- if type(param) is MultipleChoiceParam:
332
- parser.add_argument(
333
- f"--{name}",
334
- type=str,
335
- default=param.default,
336
- choices=param.choices,
337
- )
338
- else:
339
- parser.add_argument(
340
- f"--{name}",
341
- type=type(param),
342
- default=param,
343
- )
344
-
345
- args = parser.parse_args()
346
-
347
- # split the arg list into the arg in the app_param and
348
- # the args from the sig.parameter
349
- args_config_params = {k: v for k, v in vars(args).items() if k in config_params}
350
- args_func_params = {k: v for k, v in vars(args).items() if k not in config_params}
351
- for name in ingestible_files:
352
- args_func_params[name] = InFile(
353
- file_name=Path(args_func_params[name]).stem,
354
- file_path=args_func_params[name],
355
- )
356
- agenta.config.set(**args_config_params)
357
-
358
-
359
- def override_schema(openapi_schema: dict, func_name: str, endpoint: str, params: dict):
360
- """
361
- Overrides the default openai schema generated by fastapi with additional information about:
362
- - The choices available for each MultipleChoiceParam instance
363
- - The min and max values for each FloatParam instance
364
- - The min and max values for each IntParam instance
365
- - The default value for DictInput instance
366
- - The default value for MessagesParam instance
367
- - The default value for FileInputURL instance
368
- - The default value for BinaryParam instance
369
- - ... [PLEASE ADD AT EACH CHANGE]
370
-
371
- Args:
372
- openapi_schema (dict): The openapi schema generated by fastapi
373
- func_name (str): The name of the function to override
374
- endpoint (str): The name of the endpoint to override
375
- params (dict(param_name, param_val)): The dictionary of the parameters for the function
376
- """
377
-
378
- def find_in_schema(schema: dict, param_name: str, xparam: str):
379
- """Finds a parameter in the schema based on its name and x-parameter value"""
380
- for _, value in schema.items():
381
- value_title_lower = str(value.get("title")).lower()
382
- value_title = (
383
- "_".join(value_title_lower.split())
384
- if len(value_title_lower.split()) >= 2
385
- else value_title_lower
386
- )
387
-
388
- if (
389
- isinstance(value, dict)
390
- and value.get("x-parameter") == xparam
391
- and value_title == param_name
392
- ):
393
- return value
394
-
395
- schema_to_override = openapi_schema["components"]["schemas"][
396
- f"Body_{func_name}_{endpoint}_post"
397
- ]["properties"]
398
- for param_name, param_val in params.items():
399
- if isinstance(param_val, MultipleChoiceParam):
400
- subschema = find_in_schema(schema_to_override, param_name, "choice")
401
- default = str(param_val)
402
- param_choices = param_val.choices
403
- choices = (
404
- [default] + param_choices
405
- if param_val not in param_choices
406
- else param_choices
407
- )
408
- subschema["enum"] = choices
409
- subschema["default"] = default if default in param_choices else choices[0]
410
- if isinstance(param_val, FloatParam):
411
- subschema = find_in_schema(schema_to_override, param_name, "float")
412
- subschema["minimum"] = param_val.minval
413
- subschema["maximum"] = param_val.maxval
414
- subschema["default"] = param_val
415
- if isinstance(param_val, IntParam):
416
- subschema = find_in_schema(schema_to_override, param_name, "int")
417
- subschema["minimum"] = param_val.minval
418
- subschema["maximum"] = param_val.maxval
419
- subschema["default"] = param_val
420
- if (
421
- isinstance(param_val, inspect.Parameter)
422
- and param_val.annotation is DictInput
423
- ):
424
- subschema = find_in_schema(schema_to_override, param_name, "dict")
425
- subschema["default"] = param_val.default["default_keys"]
426
- if isinstance(param_val, TextParam):
427
- subschema = find_in_schema(schema_to_override, param_name, "text")
428
- subschema["default"] = param_val
429
- if (
430
- isinstance(param_val, inspect.Parameter)
431
- and param_val.annotation is MessagesInput
432
- ):
433
- subschema = find_in_schema(schema_to_override, param_name, "messages")
434
- subschema["default"] = param_val.default
435
- if (
436
- isinstance(param_val, inspect.Parameter)
437
- and param_val.annotation is FileInputURL
438
- ):
439
- subschema = find_in_schema(schema_to_override, param_name, "file_url")
440
- subschema["default"] = "https://example.com"
441
- if isinstance(param_val, BinaryParam):
442
- subschema = find_in_schema(schema_to_override, param_name, "bool")
443
- subschema["default"] = param_val.default
agenta/sdk/context.py DELETED
@@ -1,41 +0,0 @@
1
- import json
2
- import sqlite3
3
- from typing import List
4
- from .types import Context
5
-
6
-
7
- def setup_db():
8
- conn = sqlite3.connect("context.db")
9
- c = conn.cursor()
10
- c.execute(
11
- """
12
- CREATE TABLE IF NOT EXISTS contexts
13
- (id INTEGER PRIMARY KEY AUTOINCREMENT, context TEXT)
14
- """
15
- )
16
- conn.commit()
17
- conn.close()
18
-
19
-
20
- def get_contexts() -> List[Context]:
21
- contexts = []
22
- conn = sqlite3.connect("context.db")
23
- c = conn.cursor()
24
- for row in c.execute("SELECT * FROM contexts"):
25
- context_data = json.loads(row[1])
26
- contexts.append(Context.parse_obj(context_data))
27
- conn.close()
28
- return contexts
29
-
30
-
31
- def save_context(result: Context):
32
- conn = sqlite3.connect("context.db")
33
- c = conn.cursor()
34
- c.execute(
35
- """
36
- INSERT INTO contexts (context) VALUES (?)
37
- """,
38
- (json.dumps(result.dict()),),
39
- )
40
- conn.commit()
41
- conn.close()
@@ -1,114 +0,0 @@
1
- agenta/__init__.py,sha256=Sg_4PW8MM-r9p96FeqTdu1h7fcQzN4nF7KPuQD7lgIc,493
2
- agenta/cli/evaluation_commands.py,sha256=fs6492tprPId9p8eGO02Xy-NCBm2RZNJLZWcUxugwd8,474
3
- agenta/cli/helper.py,sha256=X_0GtjugLQiM_f53_l3AF3uPS8if96ejTh2nThYqLuE,6199
4
- agenta/cli/main.py,sha256=suPOo0aKkwz4XIL_g5DEuzcGpUj-vBBBq0jYVPDh32g,9329
5
- agenta/cli/telemetry.py,sha256=GaFFRsE_NtrcSSJ10r2jhgFs5Sk8gf2C09Ox3gOr3eU,1317
6
- agenta/cli/variant_commands.py,sha256=wJCfTp1uNQwSadg4rraxZF5NUVfpfg_0RAK76qD5xDo,16858
7
- agenta/cli/variant_configs.py,sha256=PLiuMKadVzs6Gi2uYaT0pZzyULNHDXaTMDWboqpwWdU,1293
8
- agenta/client/Readme.md,sha256=zWJ6VMYCG124op5RcqgWBdJdlGkGQ2rPLk9F32rWvqo,2756
9
- agenta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- agenta/client/api.py,sha256=8TrD-whQidlUnqfPuTctDGZlEco_aTGofNJFsQIi7VY,2429
11
- agenta/client/api_models.py,sha256=zebfE2-0-SW1SvzyarzmSJMXqyiCLKrX2sHpzoX-RnU,623
12
- agenta/client/backend/__init__.py,sha256=NylxeIc-3GdneW6REp3XrpYpMuuDnbcnjJ5E-yo7R5o,2666
13
- agenta/client/backend/client.py,sha256=7rEmUSde3RREO4fX8osFobk6MqwTQ-2fPX1WPGK4-84,259068
14
- agenta/client/backend/core/__init__.py,sha256=QJS3CJ2TYP2E1Tge0CS6Z7r8LTNzJHQVX1hD3558eP0,519
15
- agenta/client/backend/core/api_error.py,sha256=TtMtCdxXjd7Tasc9c8ooFg124nPrb2MXG-tKOXV4u9I,440
16
- agenta/client/backend/core/client_wrapper.py,sha256=kQEqxdm31r7V9x--mMliWOdMujD3dtPZyYBNzxgNdrs,972
17
- agenta/client/backend/core/datetime_utils.py,sha256=BHjt_H3WVslcuPsr6qjJoVif_SsdLvFN0c43ABE5UiQ,1069
18
- agenta/client/backend/core/jsonable_encoder.py,sha256=ePEZ-ty4uISZv_wVpA7ldkdLfwoQ4lPXHwhLUEcVKR0,3825
19
- agenta/client/backend/core/remove_none_from_dict.py,sha256=8m91FC3YuVem0Gm9_sXhJ2tGvP33owJJdrqCLEdowGw,330
20
- agenta/client/backend/errors/__init__.py,sha256=pbbVUFtB9LCocA1RMWMMF_RKjsy5YkOKX5BAuE49w6g,170
21
- agenta/client/backend/errors/unprocessable_entity_error.py,sha256=FvR7XPlV3Xx5nu8HNlmLhBRdk4so_gCHjYT5PyZe6sM,313
22
- agenta/client/backend/types/__init__.py,sha256=4kxWtinbbNAmNGByicOnxy8hoscndlVbUKp46hYS4Xw,4008
23
- agenta/client/backend/types/add_variant_from_base_and_config_response.py,sha256=DxAM5QXWoJhJN2mj1Lik1Uf_Vl8rT2K5j4ET03RP1WU,211
24
- agenta/client/backend/types/aggregated_result.py,sha256=8D3AXhLBhwegHRyPzAuo_eFuBsnLh7BptZt5z-VWZ8U,1083
25
- agenta/client/backend/types/app.py,sha256=PLCQN6kqpkAMpAZ2Tk5s1FesewOZmkMv18eASzQ14gg,974
26
- agenta/client/backend/types/app_variant_output.py,sha256=ec2KDbxiTd7eCWIBAM0VUva5ukUkrXFNxnplNr0pgy0,1268
27
- agenta/client/backend/types/app_variant_output_extended.py,sha256=hzPYdWfE6yHAMJtINAT23dOYwV87uD5p-W0jqmf74Bc,1394
28
- agenta/client/backend/types/app_variant_revision.py,sha256=FO3d6hPOqjz5uPSCk_9f2UipfkiIHKvK4jlpV84EWHo,1075
29
- agenta/client/backend/types/base_output.py,sha256=ynXhDBQKrkR6Lnkx-yv6Q8xW4wXmzXur0T-hzmkjBpc,983
30
- agenta/client/backend/types/body_import_testset.py,sha256=7dVF3mv3VO0Co8F0qxLAgu4jabqDPjebK4mYvcd_TuA,1061
31
- agenta/client/backend/types/config_db.py,sha256=P0cSYvVOn0ZxpYMIdvhWpQVjRuBS5APe6qlc69AXaF4,1028
32
- agenta/client/backend/types/container_templates_response.py,sha256=YJm-MmLNa5vC8oDi-vuZEHYdK_pVOpnjnY81FGO-VSM,182
33
- agenta/client/backend/types/create_app_output.py,sha256=pgnTnfZx35Q-8wZ1yTZBQ0ydYacGzFC9kyLug_UvymM,986
34
- agenta/client/backend/types/delete_evaluation.py,sha256=th4ld6oSB-d-0gXUoKzl_0vBjc8QRv35lg0SLclFFTA,991
35
- agenta/client/backend/types/docker_env_vars.py,sha256=altCvA1k-zdAkKNYLwaCnmV48HZg9cwe2cHu_BGImac,986
36
- agenta/client/backend/types/environment_output.py,sha256=l66VgSkayYFQr-i7ZfE9F2CLBfIGlogSRm96CPEKRpY,1176
37
- agenta/client/backend/types/evaluation.py,sha256=oU8bIbXptB8t9sJR_tn8HrbKHzDt4m9_sDM129JhV5A,1376
38
- agenta/client/backend/types/evaluation_scenario.py,sha256=MqxMVliNQCGu1LCq2HMlx7YuZ1UQn4KJQtHZI6TsXoU,1497
39
- agenta/client/backend/types/evaluation_scenario_input.py,sha256=cf562ry0rYNvLWx3hvQu9uNPrdrI3lRZ0IAIiCn4-Fs,1027
40
- agenta/client/backend/types/evaluation_scenario_output.py,sha256=y3qLNbxZFf9bVUzD8NYQ3-Wy4VWceCl3Xc_7LSQeqro,1014
41
- agenta/client/backend/types/evaluation_scenario_result.py,sha256=rKV0ZxJdbLaij9k54uq6YwzYDpaxzUa8tcYEz1bb050,1033
42
- agenta/client/backend/types/evaluation_status_enum.py,sha256=LiE6_T-5vXTgOlBs5XqarXt2Ba6OHwZZVWMccHCXqqc,1102
43
- agenta/client/backend/types/evaluation_type.py,sha256=WX2DlUeT3ULUQlA_yFabpiMqCBEsbjNyfdfN3EkLWR0,644
44
- agenta/client/backend/types/evaluation_webhook.py,sha256=emuKpD4NQjgYkjvQUyKLzHHkMk9FwdXuYFwunTaY4gw,971
45
- agenta/client/backend/types/evaluator.py,sha256=RplGMwAjgSlR0mARaB2BHaGBex6h_y8DcNSj7f0RttQ,1046
46
- agenta/client/backend/types/evaluator_config.py,sha256=d3_ZxThl6ZkXTbmtBiqIg6CJIH8ha6am6fPEYcxp89A,1124
47
- agenta/client/backend/types/feedback.py,sha256=aYDUHvxJ0A3Dhs8JSWYLpxef3bIaHrug6gXH5pNtuAQ,1136
48
- agenta/client/backend/types/get_config_reponse.py,sha256=U7g4xXCVSXY_VToefqtW0uOZumO04pwJrOJsG9Aaavk,1063
49
- agenta/client/backend/types/http_validation_error.py,sha256=YhAPLKvuWLcgHn-uVWiZdWInseMiIS5eymdHKDqAB6Y,1060
50
- agenta/client/backend/types/human_evaluation.py,sha256=fSSO8Li0pAPcYe6lVUvJfrBTeGlJ8srdSw478vxXwW0,1305
51
- agenta/client/backend/types/human_evaluation_scenario.py,sha256=CSymn8m3bwLjrh1V0aviujP0Ji9DmpxQKmznabbLPFA,1580
52
- agenta/client/backend/types/human_evaluation_scenario_input.py,sha256=10bnX4xbKSxIBveDr8g3lhNIYOcfTingDh7o55kT-F4,1006
53
- agenta/client/backend/types/human_evaluation_scenario_output.py,sha256=dA4hN-SeTcoHvNCaKwDvJrwsTw9DY5EeCWz2P2YmF34,1010
54
- agenta/client/backend/types/human_evaluation_scenario_score.py,sha256=P3RxQ2U_u8KNq2yVegZdxJizofuTF20vIe2aS45ezWU,134
55
- agenta/client/backend/types/human_evaluation_scenario_update_score.py,sha256=FSwW5jl2rNa4y0NTsMP2NRNOrKJi4q2I6zBEu5FU6MU,140
56
- agenta/client/backend/types/image.py,sha256=wbaOeFV166Zp-ZqcMdksCNk9h2puTwWppW_E2_Co7fo,1048
57
- agenta/client/backend/types/invite_request.py,sha256=A0ssjAQfHW6pd0EYNWGbNhVB67Y-jnjRjkg6L-Iw8Ok,965
58
- agenta/client/backend/types/list_api_keys_output.py,sha256=DR21I8iYeRO8LDy20CQR1kjm-5PIS30_1EpT9lTlsVg,1095
59
- agenta/client/backend/types/llm_run_rate_limit.py,sha256=mfT4lTczPxrJvd8ZCOAjPvw58QoM151p_uZT0PWNOJ4,1045
60
- agenta/client/backend/types/new_testset.py,sha256=9NOC1-f_UZASy4ptzidLNcRU6Odq609ayvSQxEva-40,1009
61
- agenta/client/backend/types/organization.py,sha256=9YCqgM6kZg93VI8S5ziQxqmw42fDS9dRGZdJ00eFnr4,1181
62
- agenta/client/backend/types/organization_output.py,sha256=QNAKwQl6QkHIS0QKx8po2JU3mu14UrbcX2rU7VsAdqY,981
63
- agenta/client/backend/types/result.py,sha256=7XCjzrjCcdYzjmeotrpYsKrGKjI14OJGbZZMNFsdm8w,996
64
- agenta/client/backend/types/simple_evaluation_output.py,sha256=gRLOCps1hhXPgioADjD2DfabNJf9WgmmhPI6lJY00q4,1117
65
- agenta/client/backend/types/span.py,sha256=3qrYxC5WJfKDiPwiTOhihDjzJc7bGDC5TIQ2hh5t8X8,1546
66
- agenta/client/backend/types/template.py,sha256=mInivp-YnXqt28mWM9y4zqNezOfvUEPcmtM6CHePkyk,1037
67
- agenta/client/backend/types/template_image_info.py,sha256=BycGLw_7XHl9GWOBpu1eu3I_fSQ3n5UVFQdzC0cQ_v8,1189
68
- agenta/client/backend/types/test_set_output_response.py,sha256=T1HtKP3y2z5UOvqR4_rpUadr7zfGQUxzXAhXBrsBWCg,1088
69
- agenta/client/backend/types/test_set_simple_response.py,sha256=YI4tRQodB7-5PsIt4RVb8JwJ16vvsFXo7ed_0iHCoOM,1004
70
- agenta/client/backend/types/trace.py,sha256=oCWbg3Nqhvvr6O928MSOqa7AdBEYtGLQ3VBsW2fDNvo,1353
71
- agenta/client/backend/types/uri.py,sha256=dfnTFYdnqiqBzwKItet51L-UMuyd8hkdTw9g4aGrOjM,953
72
- agenta/client/backend/types/validation_error.py,sha256=KiHcCQ9smOvyaCnwh9EqD-EfiR24wrczv6p-VDS9p5I,1086
73
- agenta/client/backend/types/validation_error_loc_item.py,sha256=LAtjCHIllWRBFXvAZ5QZpp7CPXjdtN9EB7HrLVo6EP0,128
74
- agenta/client/backend/types/variant_action.py,sha256=38SadKvaBM9gNwoTD9AHxfdnWR3_syxRY9B1LEEvX5E,1031
75
- agenta/client/backend/types/variant_action_enum.py,sha256=wFQ74LoXocZkIMok5iTN7ztd7ikh51dZEeedjBm23A8,511
76
- agenta/client/client.py,sha256=DWOGS9A8u4wu28s9jGOR4eRhf7vo4zT7GyDvrIGu59Y,19648
77
- agenta/client/exceptions.py,sha256=cxLjjKvZKlUgBxt4Vn9J_SsezJPPNHvrZxnoq-D6zmw,94
78
- agenta/config.py,sha256=Id-Ie1yf9QRP1YPhRYaYSOruRe6RBrsCXkG9rAa-ZtA,732
79
- agenta/config.toml,sha256=ptE0P49bwsu3Luyn7OLFmk2buPhj5D-MA-O_ErOGoLg,223
80
- agenta/docker/docker-assets/Dockerfile.cloud.template,sha256=CwJbCTezOYCGowA-Hh19f85YXgynT89CrWxjNxLJJfg,317
81
- agenta/docker/docker-assets/Dockerfile.template,sha256=oIUjbDO2a689esL1XCw8nNyyDRAT3kCyH9_3z6c779Q,241
82
- agenta/docker/docker-assets/README.md,sha256=XHxwh2ks_ozrtAU7SLbL3J14SB2holG6buoTxwmMiZM,102
83
- agenta/docker/docker-assets/entrypoint.sh,sha256=29XK8VQjQsx4hN2j-4JDy-6kQb5y4LCqZEa7PD4eqCQ,74
84
- agenta/docker/docker-assets/lambda_function.py,sha256=h4UZSSfqwpfsCgERv6frqwm_4JrYu9rLz3I-LxCfeEg,83
85
- agenta/docker/docker-assets/main.py,sha256=7MI-21n81U7N7A0GxebNi0cmGWtJKcR2sPB6FcH2QfA,251
86
- agenta/docker/docker_utils.py,sha256=gtwD0XZ_1Vk-rzNUYctlnRjZPpn01mX7tYvaNK7o7OQ,3542
87
- agenta/sdk/__init__.py,sha256=TUTEndClnM2SKeQsC7Swv_K3uWkBZTd7jYKvp2-tQeY,565
88
- agenta/sdk/agenta_decorator.py,sha256=B0tQCBsbSUFfdo1Ibadd0MPQCN7xdGtBcTurmsclL6U,15429
89
- agenta/sdk/agenta_init.py,sha256=67THCATEW_oC8juCzdS-AouirksuXouyrRPyuUkLFxw,8025
90
- agenta/sdk/context.py,sha256=q-PxL05-I84puunUAs9LGsffEXcYhDxhQxjuOz2vK90,901
91
- agenta/sdk/router.py,sha256=0sbajvn5C7t18anH6yNo7-oYxldHnYfwcbmQnIXBePw,269
92
- agenta/sdk/types.py,sha256=GiUiXDkbM2pMx1-mldzQT8uDUcm9sRqVUytThEkbjj4,4658
93
- agenta/sdk/utils/globals.py,sha256=lpgflY8xovZJtHfJf41dbNCZGwx07YNkG9ldruv6xoI,360
94
- agenta/sdk/utils/helper/openai_cost.py,sha256=1VkgvucDnNZm1pTfcVLz9icWunntp1d7zwMmnviy3Uw,5877
95
- agenta/sdk/utils/preinit.py,sha256=YlJL7RLfel0R7DFp-jK7OV-z4ZIQJM0oupYlk7g8b5o,1278
96
- agenta/templates/compose_email/README.md,sha256=ss7vZPpI1Hg0VmYtFliwq_r5LnqbCy_S5OQDXg8UoIA,308
97
- agenta/templates/compose_email/app.py,sha256=SG8QnBkC49MtvWa2z5_YQ2d8wxZxhO_hWs15j3CsWvc,2384
98
- agenta/templates/compose_email/env.example,sha256=g9AE5bYcGPpxawXMJ96gh8oenEPCHTabsiOnfQo3c5k,70
99
- agenta/templates/compose_email/requirements.txt,sha256=ywRglRy7pPkw8bljmMEJJ4aOOQKrt9FGKULZ-DGkoBU,23
100
- agenta/templates/compose_email/template.toml,sha256=H0y1i4t-gHgc-dbiTWcf3QiMAOU92MgkY_V9x3Tob-E,47
101
- agenta/templates/extract_data_to_json/README.md,sha256=ss7vZPpI1Hg0VmYtFliwq_r5LnqbCy_S5OQDXg8UoIA,308
102
- agenta/templates/extract_data_to_json/app.py,sha256=xNm9Gs2LzLujm1ox-T1Cn0JkU2tmYPqhwuAR9HnHa9Y,1320
103
- agenta/templates/extract_data_to_json/env.example,sha256=g9AE5bYcGPpxawXMJ96gh8oenEPCHTabsiOnfQo3c5k,70
104
- agenta/templates/extract_data_to_json/requirements.txt,sha256=ywRglRy7pPkw8bljmMEJJ4aOOQKrt9FGKULZ-DGkoBU,23
105
- agenta/templates/extract_data_to_json/template.toml,sha256=5TpnTRmvHbIzANevDCCHc8AOJXL431TN2sBor6tosUY,60
106
- agenta/templates/simple_prompt/README.md,sha256=ss7vZPpI1Hg0VmYtFliwq_r5LnqbCy_S5OQDXg8UoIA,308
107
- agenta/templates/simple_prompt/app.py,sha256=kODgF6lhzsaJPdgL5b21bUki6jkvqjWZzWR9KdBQ1Yc,646
108
- agenta/templates/simple_prompt/env.example,sha256=g9AE5bYcGPpxawXMJ96gh8oenEPCHTabsiOnfQo3c5k,70
109
- agenta/templates/simple_prompt/requirements.txt,sha256=ywRglRy7pPkw8bljmMEJJ4aOOQKrt9FGKULZ-DGkoBU,23
110
- agenta/templates/simple_prompt/template.toml,sha256=DQBtRrF4GU8LBEXOZ-GGuINXMQDKGTEG5y37tnvIUIE,60
111
- agenta-0.12.3.dist-info/METADATA,sha256=S9ZgVrOO0YqSw7lVzINBRuOxeibNgRLIxlXpA60Jw9Q,27336
112
- agenta-0.12.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
113
- agenta-0.12.3.dist-info/entry_points.txt,sha256=PDiu8_8AsL7ibU9v4iNoOKR1S7F2rdxjlEprjM9QOgo,46
114
- agenta-0.12.3.dist-info/RECORD,,