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
@@ -0,0 +1,59 @@
1
+ from contextlib import AbstractContextManager
2
+ from traceback import format_exc
3
+ from functools import wraps
4
+ from inspect import iscoroutinefunction
5
+
6
+ from agenta.sdk.utils.logging import log
7
+
8
+
9
+ def display_exception(message: str):
10
+ _len = len("Agenta - ") + len(message) + len(":")
11
+ _bar = "-" * _len
12
+
13
+ log.warning(_bar)
14
+ log.warning("Agenta - %s:", message)
15
+ log.warning(_bar)
16
+ log.warning(format_exc().strip("\n"))
17
+ log.warning(_bar)
18
+
19
+
20
+ class suppress(AbstractContextManager): # pylint: disable=invalid-name
21
+ def __init__(self):
22
+ pass
23
+
24
+ def __enter__(self):
25
+ pass
26
+
27
+ def __exit__(self, exc_type, exc_value, exc_tb):
28
+ if exc_type is not None:
29
+ display_exception("Exception (suppressed)")
30
+
31
+ return True
32
+
33
+
34
+ def handle_exceptions():
35
+ def decorator(func):
36
+ is_coroutine_function = iscoroutinefunction(func)
37
+
38
+ @wraps(func)
39
+ async def async_wrapper(*args, **kwargs):
40
+ try:
41
+ return await func(*args, **kwargs)
42
+
43
+ except Exception as e:
44
+ display_exception("Exception")
45
+
46
+ raise e
47
+
48
+ @wraps(func)
49
+ def sync_wrapper(*args, **kwargs):
50
+ try:
51
+ return func(*args, **kwargs)
52
+ except Exception as e:
53
+ display_exception("Exception")
54
+
55
+ raise e
56
+
57
+ return async_wrapper if is_coroutine_function else sync_wrapper
58
+
59
+ return decorator
@@ -1,14 +1,10 @@
1
- import agenta
1
+ import agenta as ag
2
2
 
3
3
 
4
- def set_global(setup=None, config=None):
5
- """Allows usage of agenta.config and agenta.setup in the user's code.
4
+ def set_global(config=None, tracing=None):
5
+ """Allows usage of agenta.config and agenta.tracing in the user's code."""
6
6
 
7
- Args:
8
- setup: _description_. Defaults to None.
9
- config: _description_. Defaults to None.
10
- """
11
- if setup is not None:
12
- agenta.setup = setup
13
7
  if config is not None:
14
- agenta.config = config
8
+ ag.config = config
9
+ if tracing is not None:
10
+ ag.tracing = tracing
@@ -0,0 +1,8 @@
1
+ import importlib.metadata
2
+
3
+
4
+ def get_current_version():
5
+ """Returns the current version of Agenta's SDK."""
6
+
7
+ version = importlib.metadata.version("agenta")
8
+ return version
@@ -0,0 +1,21 @@
1
+ import logging
2
+ from os import getenv
3
+
4
+
5
+ class Logger:
6
+ def __init__(self, name="agenta.logger", level=logging.WARNING):
7
+ if getenv("AGENTA_DEBUG"):
8
+ level = logging.DEBUG
9
+
10
+ self.logger = logging.getLogger(name)
11
+ self.logger.setLevel(level)
12
+
13
+ console_handler = logging.StreamHandler()
14
+ self.logger.addHandler(console_handler)
15
+
16
+ @property
17
+ def log(self) -> logging.Logger:
18
+ return self.logger
19
+
20
+
21
+ log = Logger().log
@@ -0,0 +1,13 @@
1
+ from threading import Lock
2
+
3
+
4
+ class Singleton(type):
5
+ _instances = {}
6
+
7
+ _lock: Lock = Lock()
8
+
9
+ def __call__(cls, *args, **kwargs):
10
+ with cls._lock:
11
+ if cls not in cls._instances:
12
+ cls._instances[cls] = super().__call__(*args, **kwargs)
13
+ return cls._instances[cls]
@@ -0,0 +1,58 @@
1
+ import time
2
+ from functools import wraps
3
+
4
+ from agenta.sdk.utils.logging import log
5
+
6
+
7
+ def timeit(func):
8
+ @wraps(func)
9
+ def wrapper(*args, **kwargs):
10
+ start_time = time.time()
11
+ result = func(*args, **kwargs)
12
+ end_time = time.time()
13
+
14
+ execution_time = end_time - start_time
15
+
16
+ if execution_time < 1e-3:
17
+ time_value = execution_time * 1e6
18
+ unit = "us"
19
+ elif execution_time < 1:
20
+ time_value = execution_time * 1e3
21
+ unit = "ms"
22
+ else:
23
+ time_value = execution_time
24
+ unit = "s"
25
+
26
+ class_name = args[0].__class__.__name__ if args else None
27
+
28
+ log.info(f"'{class_name}.{func.__name__}' executed in {time_value:.4f} {unit}.")
29
+ return result
30
+
31
+ return wrapper
32
+
33
+
34
+ def atimeit(func):
35
+ @wraps(func)
36
+ async def wrapper(*args, **kwargs):
37
+ start_time = time.time()
38
+ result = await func(*args, **kwargs)
39
+ end_time = time.time()
40
+
41
+ execution_time = end_time - start_time
42
+
43
+ if execution_time < 1e-3:
44
+ time_value = execution_time * 1e6
45
+ unit = "us"
46
+ elif execution_time < 1:
47
+ time_value = execution_time * 1e3
48
+ unit = "ms"
49
+ else:
50
+ time_value = execution_time
51
+ unit = "s"
52
+
53
+ class_name = args[0].__class__.__name__ if args else None
54
+
55
+ log.info(f"'{class_name}.{func.__name__}' executed in {time_value:.4f} {unit}.")
56
+ return result
57
+
58
+ return wrapper
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: agenta
3
- Version: 0.12.3
3
+ Version: 0.32.0a1
4
4
  Summary: The SDK for agenta is an open-source LLMOps platform.
5
- Home-page: https://agenta.ai
6
5
  Keywords: LLMOps,LLM,evaluation,prompt engineering
7
6
  Author: Mahmoud Mabrouk
8
7
  Author-email: mahmoud@agenta.ai
@@ -14,46 +13,54 @@ Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Topic :: Software Development :: Libraries
18
+ Requires-Dist: cachetools (>=5.3.3,<6.0.0)
18
19
  Requires-Dist: click (>=8.1.3,<9.0.0)
19
- Requires-Dist: docker (>=6.1.1,<7.0.0)
20
- Requires-Dist: fastapi (>=0.96.1)
21
- Requires-Dist: httpx (>=0.27.0,<0.28.0)
22
- Requires-Dist: importlib-metadata (>=6.7.0,<7.0.0)
23
- Requires-Dist: ipdb (>=0.13)
20
+ Requires-Dist: docker (>=6.1.1,<8.0.0)
21
+ Requires-Dist: fastapi (>=0.100.0)
22
+ Requires-Dist: google-generativeai (>=0.8.3,<0.9.0)
23
+ Requires-Dist: httpx (>=0.24,<0.28)
24
+ Requires-Dist: importlib-metadata (>=8.0.0,<9.0)
25
+ Requires-Dist: litellm (>=1.48.0,<2.0.0)
26
+ Requires-Dist: mangum (>=0.19.0,<0.20.0)
27
+ Requires-Dist: openai (>=1.59.7,<2.0.0)
28
+ Requires-Dist: opentelemetry-api (>=1.27.0,<2.0.0)
29
+ Requires-Dist: opentelemetry-exporter-otlp (>=1.27.0,<2.0.0)
30
+ Requires-Dist: opentelemetry-sdk (>=1.27.0,<2.0.0)
24
31
  Requires-Dist: posthog (>=3.1.0,<4.0.0)
25
- Requires-Dist: pydantic (==1.10.13)
32
+ Requires-Dist: pydantic (>=2)
26
33
  Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
27
- Requires-Dist: python-multipart (>=0.0.6,<0.0.7)
28
- Requires-Dist: questionary (>=1.10.0,<2.0.0)
34
+ Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
35
+ Requires-Dist: questionary (>=1.10,<3.0)
29
36
  Requires-Dist: toml (>=0.10.2,<0.11.0)
30
37
  Project-URL: Documentation, https://docs.agenta.ai
38
+ Project-URL: Homepage, https://agenta.ai
31
39
  Project-URL: Repository, https://github.com/agenta-ai/agenta
32
40
  Description-Content-Type: text/markdown
33
41
 
34
- <div align="center" style="margin: 30px">
35
- <a href="https://agenta.ai/">
36
- <div align="center" >
42
+ <p align="center">
43
+ <a href="https://agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">
37
44
  <picture >
38
- <source media="(prefers-color-scheme: dark)" srcset="https://github.com/Agenta-AI/agenta/assets/4510758/a356f263-6f5e-43df-8b58-4c183b8d8878" >
39
- <source media="(prefers-color-scheme: light)" srcset="https://github.com/Agenta-AI/agenta/assets/4510758/68e055d4-d7b8-4943-992f-761558c64253" >
45
+ <source width="275" media="(prefers-color-scheme: dark)" srcset="https://github.com/Agenta-AI/agenta/assets/4510758/cdddf5ad-2352-4920-b1d9-ae7f8d9d7735" >
46
+ <source width="275" media="(prefers-color-scheme: light)" srcset="https://github.com/Agenta-AI/agenta/assets/4510758/ab75cbac-b807-496f-aab3-57463a33f726" >
40
47
  <img alt="Shows the logo of agenta" src="https://github.com/Agenta-AI/agenta/assets/4510758/68e055d4-d7b8-4943-992f-761558c64253" >
41
48
  </picture>
42
- </div>
43
49
  </a>
44
- <h4 align="center">
45
- <a href="https://agenta.ai">Home Page</a> |
46
- <a href="https://join.slack.com/t/agenta-hq/shared_invite/zt-1zsafop5i-Y7~ZySbhRZvKVPV5DO_7IA">Slack</a> |
47
- <a href="https://docs.agenta.ai/">Documentation</a>
48
- </h4>
50
+ </p>
51
+ <p align="center">
52
+ <a href="https://docs.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">Documentation</a> |
53
+ <a href="https://agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">Website</a> |
54
+ <a href="https://join.slack.com/t/agenta-hq/shared_invite/zt-1zsafop5i-Y7~ZySbhRZvKVPV5DO_7IA">Slack</a>
55
+ </p>
49
56
  <div align="center">
50
- <strong>Quickly iterate, debug, and evaluate your LLM apps</strong><br />
51
- The open-source LLMOps platform for prompt-engineering, evaluation, human feedback, and deployment of complex LLM apps.
57
+ <strong> <h2> The Open source LLMOps Platform </h2></strong>
58
+ Prompt playground, prompt management, evaluation, and observability
52
59
  </div>
53
60
  </br>
54
61
  <p align="center">
55
62
  <img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT license." />
56
- <a href="https://docs.agenta.ai/">
63
+ <a href="https://docs.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">
57
64
  <img src="https://img.shields.io/badge/Doc-online-green" alt="Doc">
58
65
  </a>
59
66
 
@@ -67,11 +74,9 @@ Description-Content-Type: text/markdown
67
74
  <a href="https://pypi.org/project/agenta/">
68
75
  <img src="https://img.shields.io/pypi/dm/agenta" alt="PyPI - Downloads">
69
76
  </a>
70
-
71
77
  </br>
72
78
  </p>
73
79
 
74
-
75
80
  <p align="center">
76
81
  <a href="https://join.slack.com/t/agenta-hq/shared_invite/zt-1zsafop5i-Y7~ZySbhRZvKVPV5DO_7IA">
77
82
  <img src="https://img.shields.io/badge/JOIN US ON SLACK-4A154B?style=for-the-badge&logo=slack&logoColor=white" />
@@ -84,27 +89,26 @@ Description-Content-Type: text/markdown
84
89
  </a>
85
90
  </p>
86
91
 
87
-
88
- </br>
89
-
90
- <a href="https://cloud.agenta.ai">
91
- <picture>
92
- <img src="https://github.com/Agenta-AI/agenta/assets/4510758/a3024fac-2945-4208-ae12-4cc51ecfc970" />
93
- </picture>
94
- </a>
95
-
96
-
97
- <br>
98
92
  <br />
99
- <br />
100
- <div align="center" >
93
+ <p align="center">
94
+ <a href="https://cloud.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">
101
95
  <picture >
102
- <source media="(prefers-color-scheme: dark)" srcset="https://github.com/Agenta-AI/agenta/assets/4510758/cf6d4713-4558-4c6c-9e1b-ee4eab261f4c" >
103
- <source media="(prefers-color-scheme: light)" srcset="https://github.com/Agenta-AI/agenta/assets/4510758/ae9cf11f-8ef9-4b67-98c7-4a40341fa87a" >
104
- <img alt="Mockup agenta" src="https://github.com/Agenta-AI/agenta/assets/4510758/ae9cf11f-8ef9-4b67-98c7-4a40341fa87a" >
96
+ <source width="275" media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/b8912ecb-c7a0-47bd-8507-29b12382fef6" >
97
+ <source width="275" media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/f133dd08-04a3-4b20-b047-22f8f841cfbb" >
98
+ <img alt="Try Agenta Live Demo" src="https://github.com/Agenta-AI/agenta/assets/4510758/68e055d4-d7b8-4943-992f-761558c64253" >
105
99
  </picture>
106
- </div>
100
+ </a>
101
+ </p>
107
102
 
103
+ <br/>
104
+ <br />
105
+ <div align="center" >
106
+ <a href="https://cloud.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">
107
+ <picture >
108
+ <img width="800" alt="Screenshot Agenta" src="https://github.com/user-attachments/assets/32e95ddb-e001-4462-b92e-72bf4cc78597" >
109
+ </picture>
110
+ </a>
111
+ </div>
108
112
  </div>
109
113
  <br />
110
114
  <br />
@@ -112,126 +116,58 @@ Description-Content-Type: text/markdown
112
116
  ---
113
117
 
114
118
  <h3 align="center">
115
- <a href="#โ„น๏ธ-about"><b>About</b></a> &bull;
116
- <a href="#quick-start"><b>Quick Start</b></a> &bull;
117
- <a href="https://docs.agenta.ai/installation"><b>Installation</b></a> &bull;
118
- <a href="#features"><b>Features</b></a> &bull;
119
- <a href="https://docs.agenta.ai"><b>Documentation</b></a> &bull;
120
- <a href="#enterprise-support"><b>Enterprise</b></a> &bull;
121
- <a href="https://join.slack.com/t/agenta-hq/shared_invite/zt-1zsafop5i-Y7~ZySbhRZvKVPV5DO_7IA"><b>Community</b></a> &bull;
122
- <a href="#contributing"><b>Contributing</b></a>
119
+ <a href="https://docs.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme"><b>Documentation</b></a> &bull;
120
+ <a href="https://docs.agenta.ai/changelog/main?utm_source=github&utm_medium=referral&utm_campaign=readme"><b>Changelog</b></a> &bull;
121
+ <a href="https://agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme"><b>Website</b></a> &bull;
122
+ <a href="https://cloud.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme"><b>Agenta Cloud</b></a>
123
+
123
124
  </h3>
124
125
 
125
126
  ---
126
127
 
127
- # โ„น๏ธ About
128
-
129
- Agenta is an end-to-end LLMOps platform. It provides the tools for **prompt engineering and management**, โš–๏ธ **evaluation**, and :rocket: **deployment**. All without imposing any restrictions on your choice of framework, library, or model.
130
-
131
- Agenta allows developers and product teams to collaborate and build robust AI applications in less time.
132
-
133
- ## ๐Ÿ”จ How does it work?
128
+ # What is Agenta?
134
129
 
135
- | Using an LLM App Template (For Non-Technical Users) | Starting from Code |
136
- | ------------- | ------------- |
137
- |1. [Create an application using a pre-built template from our UI](https://cloud.agenta.ai?utm_source=github&utm_medium=readme&utm_campaign=github)<br />2. Access a playground where you can test and compare different prompts and configurations side-by-side.<br /> 3. Systematically evaluate your application using pre-built or custom evaluators.<br /> 4. Deploy the application to production with one click. |1. [Add a few lines to any LLM application code to automatically create a playground for it](https://docs.agenta.ai/developer_guides/tutorials/first-app-with-langchain) <br />2. Experiment with prompts and configurations, and compare them side-by-side in the playground. <br />3. Systematically evaluate your application using pre-built or custom evaluators. <br />4. Deploy the application to production with one click. |
130
+ Agenta is a platform for building production-grade LLM applications. It helps **engineering and product teams** create reliable LLM apps faster.
138
131
 
139
- <br /><br />
140
132
 
141
- # Quick Start
142
-
143
- ### [Try the cloud version](https://cloud.agenta.ai?utm_source=github&utm_medium=readme&utm_campaign=github)
144
- ### [Create your first application in one-minute](https://docs.agenta.ai/getting_started/getting-started-ui)
145
- ### [Create an application using Langchain](https://docs.agenta.ai/developer_guides/tutorials/first-app-with-langchain)
146
- ### [Self-host agenta](https://docs.agenta.ai/self-host/host-locally)
147
- ### [Read the Documentation](https://docs.agenta.ai)
148
- ### [Check the Cookbook](https://docs.agenta.ai/cookbook)
133
+ Agenta provides end-to-end tools for the entire LLMOps workflow: building (**LLM playground**, **evaluation**), deploying (**prompt and configuration management**), and monitoring (**LLM observability and tracing**).
149
134
 
150
135
  # Features
151
-
152
- <h3>Playground ๐Ÿช„ <br/></h3>
153
- With just a few lines of code, define the parameters and prompts you wish to experiment with. You and your team can quickly experiment and test new variants on the web UI. <br/>
154
-
155
- https://github.com/Agenta-AI/agenta/assets/4510758/8b736d2b-7c61-414c-b534-d95efc69134c
156
-
157
- <h3>Version Evaluation ๐Ÿ“Š <br/></h3>
158
- Define test sets, then evaluate manually or programmatically your different variants.<br/>
159
-
160
- ![](https://github.com/Agenta-AI/agenta/assets/4510758/b1de455d-7e0a-48d6-8497-39ba641600f0)
161
-
162
-
163
- <h3>API Deployment ๐Ÿš€<br/></h3>
164
- When you are ready, deploy your LLM applications as APIs in one click.<br/>
165
-
166
- ![](https://github.com/Agenta-AI/agenta/blob/main/docs/images/endpoint.gif)
167
-
168
- ## Why choose Agenta for building LLM-apps?
169
-
170
- - ๐Ÿ”จ **Build quickly**: You need to iterate many times on different architectures and prompts to bring apps to production. We streamline this process and allow you to do this in days instead of weeks.
171
- - ๐Ÿ—๏ธ **Build robust apps and reduce hallucination**: We provide you with the tools to systematically and easily evaluate your application to make sure you only serve robust apps to production.
172
- - ๐Ÿ‘จโ€๐Ÿ’ป **Developer-centric**: We cater to complex LLM-apps and pipelines that require more than one simple prompt. We allow you to experiment and iterate on apps that have complex integration, business logic, and many prompts.
173
- - ๐ŸŒ **Solution-Agnostic**: You have the freedom to use any libraries and models, be it Langchain, llma_index, or a custom-written alternative.
174
- - ๐Ÿ”’ **Privacy-First**: We respect your privacy and do not proxy your data through third-party services. The platform and the data are hosted on your infrastructure.
175
-
176
- ## How Agenta works:
177
-
178
- **1. Write your LLM-app code**
179
-
180
- Write the code using any framework, library, or model you want. Add the `agenta.post` decorator and put the inputs and parameters in the function call just like in this example:
181
-
182
- _Example simple application that generates baby names:_
183
-
184
- ```python
185
- import agenta as ag
186
- from langchain.chains import LLMChain
187
- from langchain.llms import OpenAI
188
- from langchain.prompts import PromptTemplate
189
-
190
- default_prompt = "Give me five cool names for a baby from {country} with this gender {gender}!!!!"
191
- ag.init()
192
- ag.config(prompt_template=ag.TextParam(default_prompt),
193
- temperature=ag.FloatParam(0.9))
194
-
195
- @ag.entrypoint
196
- def generate(
197
- country: str,
198
- gender: str,
199
- ) -> str:
200
- llm = OpenAI(temperature=ag.config.temperature)
201
- prompt = PromptTemplate(
202
- input_variables=["country", "gender"],
203
- template=ag.config.prompt_template,
204
- )
205
- chain = LLMChain(llm=llm, prompt=prompt)
206
- output = chain.run(country=country, gender=gender)
207
-
208
- return output
136
+ - **Prompt Playground**: Experiment, iterate on prompts, and compare outputs from over 50 LLM models side by side ([docs](https://docs.agenta.ai/prompt-management/using-the-playground?utm_source=github&utm_medium=referral&utm_campaign=readme))
137
+ - **Custom Workflows**: Build a playground for any custom LLM workflow, such as RAG or agents. Enable all the team to easily iterate on its parameters and evaluate it from the web UI.
138
+ - **LLM evaluation**: Run evaluation suite from the webUI using predefined evaluators like LLM-as-a-judge, RAG evaluators, or custom code evaluators. ([docs](https://docs.agenta.ai/evaluation/overview?utm_source=github&utm_medium=referral&utm_campaign=readme))
139
+ - **Human evaluation**: Collaborate with subject matter experts for human annotation evaluation, including A/B testing and annotating golden test sets.
140
+ - **Prompt Management**: Version your prompts and manage them across different environments ([docs](https://docs.agenta.ai/prompt-management/overview?utm_source=github&utm_medium=referral&utm_campaign=readme), [quick start](https://docs.agenta.ai/prompt-management/quick-start?utm_source=github&utm_medium=referral&utm_campaign=readme))
141
+ - **LLM Tracing**: Observe and debug your apps with integrations to most providers and frameworks ([docs](https://docs.agenta.ai/observability/overview?utm_source=github&utm_medium=referral&utm_campaign=readme), [quick start](https://docs.agenta.ai/observability/quickstart?utm_source=github&utm_medium=referral&utm_campaign=readme))
142
+ - **LLM Monitoring**: Track cost and latency and compare different deployments.
143
+
144
+
145
+ # Getting Started
146
+ ## Agenta Cloud:
147
+ The easiest way to get started is through Agenta Cloud. It is free to signup, and comes with a generous free-tier.
148
+
149
+ <a href="https://cloud.agenta.ai?utm_source=github&utm_medium=referral&utm_campaign=readme">
150
+ <picture >
151
+ <source width="160" media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/759422d8-01bc-4503-bf3c-b5871c99359a" >
152
+ <source width="160" media="(prefers-color-scheme: light)" srcset="https://github.com/user-attachments/assets/ffa9af5f-0981-4e95-9272-cb35eedb6780" >
153
+ <img alt="Get Started with Agenta Cloud" src="https://github.com/user-attachments/assets/ffa9af5f-0981-4e95-9272-cb35eedb6780" >
154
+ </picture>
155
+ </a>
156
+
157
+ ## Self-host:
158
+ ```
159
+ mkdir agenta && cd agenta
160
+ curl -L https://raw.githubusercontent.com/agenta-ai/agenta/main/docker-compose.gh.yml -o docker-compose.gh.yml
161
+ docker compose -f docker-compose.gh.yml up -d
209
162
  ```
210
-
211
- **2.Deploy your app using the Agenta CLI**
212
-
213
- <img width="650" alt="Screenshot 2023-06-19 at 15 58 34" src="https://github.com/Agenta-AI/agenta/assets/4510758/eede3e78-0fe1-42a0-ad4e-d880ddb10bf0">
214
-
215
- **3. Go to agenta at http://localhost**
216
-
217
- Now your team can ๐Ÿ”„ iterate, ๐Ÿงช experiment, and โš–๏ธ evaluate different versions of your app (with your code!) in the web platform.</summary>
218
- <br/>
219
-
220
- <img width="900" alt="Screenshot 2023-06-25 at 21 08 53" src="https://github.com/Agenta-AI/agenta/assets/57623556/7e07a988-a36a-4fb5-99dd-9cc13a678434">
221
-
222
-
223
- # Enterprise Support
224
- Contact us here for enterprise support and early access to agenta self-managed enterprise with Kubernetes support. <br/><br/>
225
- <a href="https://cal.com/mahmoud-mabrouk-ogzgey/demo"><img src="https://cal.com/book-with-cal-dark.svg" alt="Book us"></a>
226
163
 
227
164
  # Disabling Anonymized Tracking
228
165
 
229
- To disable anonymized telemetry, set the following environment variable:
166
+ By default, Agenta automatically reports anonymized basic usage statistics. This helps us understand how Agenta is used and track its overall usage and growth. This data does not include any sensitive information. To disable anonymized telemetry, follow these steps:
230
167
 
231
168
  - For web: Set `TELEMETRY_TRACKING_ENABLED` to `false` in your `agenta-web/.env` file.
232
169
  - For CLI: Set `telemetry_tracking_enabled` to `false` in your `~/.agenta/config.toml` file.
233
170
 
234
- After making this change, restart agenta compose.
235
171
 
236
172
  # Contributing
237
173
 
@@ -239,12 +175,14 @@ We warmly welcome contributions to Agenta. Feel free to submit issues, fork the
239
175
 
240
176
  We are usually hanging in our Slack. Feel free to [join our Slack and ask us anything](https://join.slack.com/t/agenta-hq/shared_invite/zt-1zsafop5i-Y7~ZySbhRZvKVPV5DO_7IA)
241
177
 
242
- Check out our [Contributing Guide](https://docs.agenta.ai/contributing/getting-started) for more information.
178
+ Check out our [Contributing Guide](https://docs.agenta.ai/misc/contributing/getting-started?utm_source=github&utm_medium=referral&utm_campaign=readme) for more information.
243
179
 
244
180
  ## Contributors โœจ
245
181
 
246
182
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
247
- [![All Contributors](https://img.shields.io/badge/all_contributors-39-orange.svg?style=flat-square)](#contributors-)
183
+
184
+ [![All Contributors](https://img.shields.io/badge/all_contributors-48-orange.svg?style=flat-square)](#contributors-)
185
+
248
186
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
249
187
 
250
188
  Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
@@ -304,6 +242,17 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
304
242
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/brockWith"><img src="https://avatars.githubusercontent.com/u/105627491?v=4?s=100" width="100px;" alt="brockWith"/><br /><sub><b>brockWith</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=brockWith" title="Code">๐Ÿ’ป</a></td>
305
243
  <td align="center" valign="top" width="14.28%"><a href="http://denniszelada.wordpress.com/"><img src="https://avatars.githubusercontent.com/u/219311?v=4?s=100" width="100px;" alt="Dennis Zelada"/><br /><sub><b>Dennis Zelada</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=denniszelada" title="Code">๐Ÿ’ป</a></td>
306
244
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/romainrbr"><img src="https://avatars.githubusercontent.com/u/10381609?v=4?s=100" width="100px;" alt="Romain Brucker"/><br /><sub><b>Romain Brucker</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=romainrbr" title="Code">๐Ÿ’ป</a></td>
245
+ <td align="center" valign="top" width="14.28%"><a href="http://heonheo.com"><img src="https://avatars.githubusercontent.com/u/76820291?v=4?s=100" width="100px;" alt="Heon Heo"/><br /><sub><b>Heon Heo</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=HeonHeo23" title="Code">๐Ÿ’ป</a></td>
246
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Drewski2222"><img src="https://avatars.githubusercontent.com/u/39228951?v=4?s=100" width="100px;" alt="Drew Reisner"/><br /><sub><b>Drew Reisner</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=Drewski2222" title="Code">๐Ÿ’ป</a></td>
247
+ <td align="center" valign="top" width="14.28%"><a href="https://speakerdeck.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Eltociear Ashimine"/><br /><sub><b>Ikko Eltociear Ashimine</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=eltociear" title="Documentation">๐Ÿ“–</a></td>
248
+ </tr>
249
+ <tr>
250
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/vishalvanpariya"><img src="https://avatars.githubusercontent.com/u/27823328?v=4?s=100" width="100px;" alt="Vishal Vanpariya"/><br /><sub><b>Vishal Vanpariya</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=vishalvanpariya" title="Code">๐Ÿ’ป</a></td>
251
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/youcefs21"><img src="https://avatars.githubusercontent.com/u/34604972?v=4?s=100" width="100px;" alt="Youcef Boumar"/><br /><sub><b>Youcef Boumar</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=youcefs21" title="Documentation">๐Ÿ“–</a></td>
252
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/LucasTrg"><img src="https://avatars.githubusercontent.com/u/47852577?v=4?s=100" width="100px;" alt="LucasTrg"/><br /><sub><b>LucasTrg</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=LucasTrg" title="Code">๐Ÿ’ป</a> <a href="https://github.com/Agenta-AI/agenta/issues?q=author%3ALucasTrg" title="Bug reports">๐Ÿ›</a></td>
253
+ <td align="center" valign="top" width="14.28%"><a href="https://ashrafchowdury.me"><img src="https://avatars.githubusercontent.com/u/87828904?v=4?s=100" width="100px;" alt="Ashraf Chowdury"/><br /><sub><b>Ashraf Chowdury</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/issues?q=author%3Aashrafchowdury" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/Agenta-AI/agenta/commits?author=ashrafchowdury" title="Code">๐Ÿ’ป</a></td>
254
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/jp-agenta"><img src="https://avatars.githubusercontent.com/u/174311389?v=4?s=100" width="100px;" alt="jp-agenta"/><br /><sub><b>jp-agenta</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/commits?author=jp-agenta" title="Code">๐Ÿ’ป</a> <a href="https://github.com/Agenta-AI/agenta/issues?q=author%3Ajp-agenta" title="Bug reports">๐Ÿ›</a></td>
255
+ <td align="center" valign="top" width="14.28%"><a href="https://mrunhap.github.io"><img src="https://avatars.githubusercontent.com/u/24653356?v=4?s=100" width="100px;" alt="Mr Unhappy"/><br /><sub><b>Mr Unhappy</b></sub></a><br /><a href="https://github.com/Agenta-AI/agenta/issues?q=author%3Amrunhap" title="Bug reports">๐Ÿ›</a> <a href="#infra-mrunhap" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a></td>
307
256
  </tr>
308
257
  </tbody>
309
258
  </table>
@@ -315,5 +264,3 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
315
264
 
316
265
  This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind are welcome!
317
266
 
318
- **Attribution**: Testing icons created by [Freepik - Flaticon](https://www.flaticon.com/free-icons/testing)
319
-