From e6f28f6244d48ec5c19a1ab42a6faa8e41c7067c Mon Sep 17 00:00:00 2001
From: ashrafchowdury
Date: Mon, 10 Jun 2024 21:25:09 +0600
Subject: [PATCH 01/25] refactor: improved the testset new api page imports
---
.../pages/apps/[app_id]/testsets/new/api/index.tsx | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/agenta-web/src/pages/apps/[app_id]/testsets/new/api/index.tsx b/agenta-web/src/pages/apps/[app_id]/testsets/new/api/index.tsx
index 43c03465b..829788c3e 100644
--- a/agenta-web/src/pages/apps/[app_id]/testsets/new/api/index.tsx
+++ b/agenta-web/src/pages/apps/[app_id]/testsets/new/api/index.tsx
@@ -1,12 +1,12 @@
import DynamicCodeBlock from "@/components/DynamicCodeBlock/DynamicCodeBlock"
-import pythonCode from "../../../../../../code_snippets/testsets/create_with_json/python"
-import cURLCode from "../../../../../../code_snippets/testsets/create_with_json/curl"
-import tsCode from "../../../../../../code_snippets/testsets/create_with_json/typescript"
+import pythonCode from "@/code_snippets/testsets/create_with_json/python"
+import cURLCode from "@/code_snippets/testsets/create_with_json/curl"
+import tsCode from "@/code_snippets/testsets/create_with_json/typescript"
-import pythonCodeUpload from "../../../../../../code_snippets/testsets/create_with_upload/python"
-import cURLCodeUpload from "../../../../../../code_snippets/testsets/create_with_upload/curl"
-import tsCodeUpload from "../../../../../../code_snippets/testsets/create_with_upload/typescript"
+import pythonCodeUpload from "@/code_snippets/testsets/create_with_upload/python"
+import cURLCodeUpload from "@/code_snippets/testsets/create_with_upload/curl"
+import tsCodeUpload from "@/code_snippets/testsets/create_with_upload/typescript"
import {Typography} from "antd"
import {useRouter} from "next/router"
import {createUseStyles} from "react-jss"
From 469754c1e0b3d402021bc021868cf3633962559c Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 13 Jun 2024 03:15:33 +0000
Subject: [PATCH 02/25] build(deps): bump pydantic from 2.7.1 to 2.7.4 in
/agenta-cli
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.7.1 to 2.7.4.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.7.1...v2.7.4)
---
updated-dependencies:
- dependency-name: pydantic
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
agenta-cli/poetry.lock | 253 +++++++++++++++--------------------------
1 file changed, 93 insertions(+), 160 deletions(-)
diff --git a/agenta-cli/poetry.lock b/agenta-cli/poetry.lock
index 599be327f..4b3675c6f 100644
--- a/agenta-cli/poetry.lock
+++ b/agenta-cli/poetry.lock
@@ -15,7 +15,6 @@ files = [
name = "anyio"
version = "4.4.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -38,7 +37,6 @@ trio = ["trio (>=0.23)"]
name = "asttokens"
version = "2.4.1"
description = "Annotate AST trees with source code positions"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -57,7 +55,6 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
name = "backoff"
version = "2.2.1"
description = "Function decoration for backoff and retry"
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
@@ -69,7 +66,6 @@ files = [
name = "cachetools"
version = "5.3.3"
description = "Extensible memoizing collections and decorators"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -81,7 +77,6 @@ files = [
name = "certifi"
version = "2024.2.2"
description = "Python package for providing Mozilla's CA Bundle."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -93,7 +88,6 @@ files = [
name = "charset-normalizer"
version = "3.3.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -193,7 +187,6 @@ files = [
name = "click"
version = "8.1.7"
description = "Composable command line interface toolkit"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -208,7 +201,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
@@ -220,7 +212,6 @@ files = [
name = "decorator"
version = "5.1.1"
description = "Decorators for Humans"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -232,7 +223,6 @@ files = [
name = "dnspython"
version = "2.6.1"
description = "DNS toolkit"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -253,7 +243,6 @@ wmi = ["wmi (>=1.5.1)"]
name = "docker"
version = "7.1.0"
description = "A Python library for the Docker Engine API."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -276,7 +265,6 @@ websockets = ["websocket-client (>=1.3.0)"]
name = "email-validator"
version = "2.1.1"
description = "A robust email address syntax and deliverability validation library."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -292,7 +280,6 @@ idna = ">=2.0.0"
name = "exceptiongroup"
version = "1.2.1"
description = "Backport of PEP 654 (exception groups)"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -307,7 +294,6 @@ test = ["pytest (>=6)"]
name = "executing"
version = "2.0.1"
description = "Get the currently executing AST node of a frame, and other information"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -322,7 +308,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth
name = "fastapi"
version = "0.111.0"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -350,7 +335,6 @@ all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)"
name = "fastapi-cli"
version = "0.0.4"
description = "Run and manage FastAPI apps from the command line with FastAPI CLI. ๐"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -368,7 +352,6 @@ standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"]
name = "h11"
version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -380,7 +363,6 @@ files = [
name = "httpcore"
version = "1.0.5"
description = "A minimal low-level HTTP client."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -395,14 +377,13 @@ h11 = ">=0.13,<0.15"
[package.extras]
asyncio = ["anyio (>=4.0,<5.0)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
trio = ["trio (>=0.22.0,<0.26.0)"]
[[package]]
name = "httptools"
version = "0.6.1"
description = "A collection of framework independent HTTP protocol utils."
-category = "main"
optional = false
python-versions = ">=3.8.0"
files = [
@@ -451,7 +432,6 @@ test = ["Cython (>=0.29.24,<0.30.0)"]
name = "httpx"
version = "0.27.0"
description = "The next generation HTTP client."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -462,21 +442,20 @@ files = [
[package.dependencies]
anyio = "*"
certifi = "*"
-httpcore = ">=1.0.0,<2.0.0"
+httpcore = "==1.*"
idna = "*"
sniffio = "*"
[package.extras]
brotli = ["brotli", "brotlicffi"]
-cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
+cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
[[package]]
name = "idna"
version = "3.7"
description = "Internationalized Domain Names in Applications (IDNA)"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -488,7 +467,6 @@ files = [
name = "importlib-metadata"
version = "7.1.0"
description = "Read metadata from Python packages"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -508,7 +486,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)",
name = "iniconfig"
version = "2.0.0"
description = "brain-dead simple config-ini parsing"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -520,7 +497,6 @@ files = [
name = "ipdb"
version = "0.13.13"
description = "IPython-enabled pdb"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -537,7 +513,6 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version <
name = "ipython"
version = "8.18.0"
description = "IPython: Productive Interactive Computing"
-category = "main"
optional = false
python-versions = ">=3.9"
files = [
@@ -575,7 +550,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa
name = "jedi"
version = "0.19.1"
description = "An autocompletion tool for Python that can be used for text editors."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -595,7 +569,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
name = "jinja2"
version = "3.1.4"
description = "A very fast and expressive template engine."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -613,7 +586,6 @@ i18n = ["Babel (>=2.7)"]
name = "markdown-it-py"
version = "3.0.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -638,7 +610,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "markupsafe"
version = "2.1.5"
description = "Safely add untrusted strings to HTML/XML markup."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -708,7 +679,6 @@ files = [
name = "matplotlib-inline"
version = "0.1.7"
description = "Inline Matplotlib backend for Jupyter"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -723,7 +693,6 @@ traitlets = "*"
name = "mdurl"
version = "0.1.2"
description = "Markdown URL utilities"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -735,7 +704,6 @@ files = [
name = "monotonic"
version = "1.6"
description = "An implementation of time.monotonic() for Python 2 & < 3.3"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -747,7 +715,6 @@ files = [
name = "orjson"
version = "3.10.3"
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -803,7 +770,6 @@ files = [
name = "packaging"
version = "24.0"
description = "Core utilities for Python packages"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -815,7 +781,6 @@ files = [
name = "parso"
version = "0.8.4"
description = "A Python Parser"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -831,7 +796,6 @@ testing = ["docopt", "pytest"]
name = "pexpect"
version = "4.9.0"
description = "Pexpect allows easy control of interactive console applications."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -846,7 +810,6 @@ ptyprocess = ">=0.5"
name = "pluggy"
version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -862,7 +825,6 @@ testing = ["pytest", "pytest-benchmark"]
name = "posthog"
version = "3.5.0"
description = "Integrate PostHog into any python application."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -886,7 +848,6 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint"
name = "prompt-toolkit"
version = "3.0.36"
description = "Library for building powerful interactive command lines in Python"
-category = "main"
optional = false
python-versions = ">=3.6.2"
files = [
@@ -901,7 +862,6 @@ wcwidth = "*"
name = "ptyprocess"
version = "0.7.0"
description = "Run a subprocess in a pseudo terminal"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -913,7 +873,6 @@ files = [
name = "pure-eval"
version = "0.2.2"
description = "Safely evaluate AST nodes without side effects"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -926,18 +885,18 @@ tests = ["pytest"]
[[package]]
name = "pydantic"
-version = "2.7.1"
+version = "2.7.4"
description = "Data validation using Python type hints"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"},
- {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"},
+ {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"},
+ {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"},
]
[package.dependencies]
annotated-types = ">=0.4.0"
-pydantic-core = "2.18.2"
+pydantic-core = "2.18.4"
typing-extensions = ">=4.6.1"
[package.extras]
@@ -945,90 +904,90 @@ email = ["email-validator (>=2.0.0)"]
[[package]]
name = "pydantic-core"
-version = "2.18.2"
+version = "2.18.4"
description = "Core functionality for Pydantic validation and serialization"
optional = false
python-versions = ">=3.8"
files = [
- {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"},
- {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"},
- {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"},
- {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"},
- {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"},
- {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"},
- {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"},
- {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"},
- {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"},
- {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"},
- {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"},
- {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"},
- {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"},
- {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"},
- {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"},
- {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"},
- {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"},
- {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"},
- {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"},
- {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"},
- {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"},
- {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"},
- {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"},
- {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"},
- {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"},
- {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"},
- {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"},
- {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"},
- {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"},
- {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"},
- {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"},
- {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"},
- {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"},
- {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"},
- {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"},
- {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"},
- {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"},
- {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"},
- {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"},
- {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"},
+ {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"},
+ {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"},
+ {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"},
+ {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"},
+ {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"},
+ {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"},
+ {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"},
+ {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"},
+ {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"},
+ {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"},
+ {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"},
+ {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"},
+ {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"},
+ {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"},
+ {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"},
+ {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"},
+ {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"},
+ {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"},
+ {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"},
+ {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"},
]
[package.dependencies]
@@ -1038,7 +997,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
name = "pygments"
version = "2.18.0"
description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1053,7 +1011,6 @@ windows-terminal = ["colorama (>=0.4.6)"]
name = "pymongo"
version = "4.7.3"
description = "Python driver for MongoDB "
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1135,7 +1092,6 @@ zstd = ["zstandard"]
name = "pytest"
version = "8.2.2"
description = "pytest: simple powerful testing with Python"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -1158,7 +1114,6 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments
name = "python-dateutil"
version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [
@@ -1173,7 +1128,6 @@ six = ">=1.5"
name = "python-dotenv"
version = "1.0.1"
description = "Read key-value pairs from a .env file and set them as environment variables"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1188,7 +1142,6 @@ cli = ["click (>=5.0)"]
name = "python-multipart"
version = "0.0.9"
description = "A streaming multipart parser for Python"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1203,7 +1156,6 @@ dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatc
name = "pywin32"
version = "306"
description = "Python for Window Extensions"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1227,7 +1179,6 @@ files = [
name = "pyyaml"
version = "6.0.1"
description = "YAML parser and emitter for Python"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -1236,6 +1187,7 @@ files = [
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+ {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
{file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
{file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
{file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
@@ -1243,6 +1195,7 @@ files = [
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+ {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
{file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
@@ -1268,6 +1221,7 @@ files = [
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+ {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
{file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
{file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
{file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
@@ -1275,6 +1229,7 @@ files = [
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
{file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
{file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
@@ -1284,7 +1239,6 @@ files = [
name = "questionary"
version = "2.0.1"
description = "Python library to build pretty command line user prompts โญ๏ธ"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1299,7 +1253,6 @@ prompt_toolkit = ">=2.0,<=3.0.36"
name = "requests"
version = "2.32.3"
description = "Python HTTP for Humans."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1321,7 +1274,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
name = "rich"
version = "13.7.1"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -1340,7 +1292,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
name = "setuptools"
version = "70.0.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -1356,7 +1307,6 @@ testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metad
name = "shellingham"
version = "1.5.4"
description = "Tool to Detect Surrounding Shell"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1368,7 +1318,6 @@ files = [
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -1380,7 +1329,6 @@ files = [
name = "sniffio"
version = "1.3.1"
description = "Sniff out which async library your code is running under"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1392,7 +1340,6 @@ files = [
name = "stack-data"
version = "0.6.3"
description = "Extract data from python stack frames and tracebacks for informative displays"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1412,7 +1359,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
name = "starlette"
version = "0.37.2"
description = "The little ASGI library that shines."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1431,7 +1377,6 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7
name = "toml"
version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
-category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -1443,7 +1388,6 @@ files = [
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1455,7 +1399,6 @@ files = [
name = "traitlets"
version = "5.14.3"
description = "Traitlets Python configuration system"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1471,7 +1414,6 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,
name = "typer"
version = "0.12.3"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1489,7 +1431,6 @@ typing-extensions = ">=3.7.4.3"
name = "typing-extensions"
version = "4.12.0"
description = "Backported and Experimental Type Hints for Python 3.8+"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1501,7 +1442,6 @@ files = [
name = "ujson"
version = "5.10.0"
description = "Ultra fast JSON encoder and decoder for Python"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1589,7 +1529,6 @@ files = [
name = "urllib3"
version = "2.2.1"
description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1607,7 +1546,6 @@ zstd = ["zstandard (>=0.18.0)"]
name = "uvicorn"
version = "0.30.0"
description = "The lightning-fast ASGI server."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1623,7 +1561,7 @@ httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standar
python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
-uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
+uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
@@ -1634,7 +1572,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
name = "uvloop"
version = "0.19.0"
description = "Fast implementation of asyncio event loop on top of libuv"
-category = "main"
optional = false
python-versions = ">=3.8.0"
files = [
@@ -1679,7 +1616,6 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)"
name = "watchfiles"
version = "0.22.0"
description = "Simple, modern and high performance file watching and code reload in python."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1767,7 +1703,6 @@ anyio = ">=3.0.0"
name = "wcwidth"
version = "0.2.13"
description = "Measures the displayed width of unicode strings in a terminal"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1779,7 +1714,6 @@ files = [
name = "websockets"
version = "12.0"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1861,7 +1795,6 @@ files = [
name = "zipp"
version = "3.19.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
From bd7e853c6f3d43120d449a343b531ccf81dd185e Mon Sep 17 00:00:00 2001
From: ashrafchowdury
Date: Sat, 15 Jun 2024 13:47:26 +0600
Subject: [PATCH 03/25] fix: cleared create variant model input data after
creating a variant
---
agenta-web/src/components/Playground/NewVariantModal.tsx | 4 ++++
agenta-web/src/components/Playground/Playground.tsx | 3 +++
2 files changed, 7 insertions(+)
diff --git a/agenta-web/src/components/Playground/NewVariantModal.tsx b/agenta-web/src/components/Playground/NewVariantModal.tsx
index 34b5c0542..ff20f3bce 100644
--- a/agenta-web/src/components/Playground/NewVariantModal.tsx
+++ b/agenta-web/src/components/Playground/NewVariantModal.tsx
@@ -13,6 +13,7 @@ interface Props {
setNewVariantName: (value: string) => void
newVariantName: string
setTemplateVariantName: (value: string) => void
+ templateVariantName: string
}
const useStyles = createUseStyles({
@@ -29,6 +30,7 @@ const NewVariantModal: React.FC = ({
setNewVariantName,
newVariantName,
setTemplateVariantName,
+ templateVariantName,
}) => {
const classes = useStyles()
const [variantPlaceHolder, setVariantPlaceHolder] = useState("Source Variant")
@@ -70,6 +72,7 @@ const NewVariantModal: React.FC = ({
data-cy="new-variant-modal-select"
placeholder="Select a variant"
onChange={handleTemplateVariantChange}
+ value={templateVariantName}
options={variants.map((variant) => ({
value: variant.variantName,
label: (
@@ -84,6 +87,7 @@ const NewVariantModal: React.FC = ({
diff --git a/agenta-web/src/components/Playground/Playground.tsx b/agenta-web/src/components/Playground/Playground.tsx
index 177782214..fd3854a32 100644
--- a/agenta-web/src/components/Playground/Playground.tsx
+++ b/agenta-web/src/components/Playground/Playground.tsx
@@ -89,6 +89,8 @@ const Playground: React.FC = () => {
setVariants((prevState: any) => [...prevState, newVariant])
setActiveKey(updateNewVariantName)
setUnsavedVariants((prev) => ({...prev, [newVariant.variantName!]: false}))
+ setTemplateVariantName("")
+ setNewVariantName("")
} catch (error) {
message.error("Failed to add new variant. Please try again later.")
console.error("Error adding new variant:", error)
@@ -403,6 +405,7 @@ const Playground: React.FC = () => {
setNewVariantName={setNewVariantName}
newVariantName={newVariantName}
setTemplateVariantName={setTemplateVariantName}
+ templateVariantName={templateVariantName}
/>
)
From db18a659c067ff6febaf725d7c44e47db398f5c8 Mon Sep 17 00:00:00 2001
From: Kaosiso Ezealigo
Date: Mon, 17 Jun 2024 17:51:36 +0100
Subject: [PATCH 04/25] fix(frontend): human eval inputs overflowing when
values are long
---
.../ABTestingEvaluationTable.tsx | 1 +
.../SingleModelEvaluationTable.tsx | 1 +
.../Playground/ParamsForm/ParamsForm.tsx | 38 +++++++++----------
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/agenta-web/src/components/EvaluationTable/ABTestingEvaluationTable.tsx b/agenta-web/src/components/EvaluationTable/ABTestingEvaluationTable.tsx
index 8f209da49..1ea3f3270 100644
--- a/agenta-web/src/components/EvaluationTable/ABTestingEvaluationTable.tsx
+++ b/agenta-web/src/components/EvaluationTable/ABTestingEvaluationTable.tsx
@@ -374,6 +374,7 @@ const ABTestingEvaluationTable: React.FC = ({
),
+ width: 300,
dataIndex: "inputs",
render: (_: any, record: ABTestingEvaluationTableRow, rowIndex: number) => {
return (
diff --git a/agenta-web/src/components/EvaluationTable/SingleModelEvaluationTable.tsx b/agenta-web/src/components/EvaluationTable/SingleModelEvaluationTable.tsx
index e6af1b516..b008f76ff 100644
--- a/agenta-web/src/components/EvaluationTable/SingleModelEvaluationTable.tsx
+++ b/agenta-web/src/components/EvaluationTable/SingleModelEvaluationTable.tsx
@@ -417,6 +417,7 @@ const SingleModelEvaluationTable: React.FC = ({
),
+ width: 300,
dataIndex: "inputs",
render: (_: any, record: SingleModelEvaluationRow, rowIndex: number) => {
return (
diff --git a/agenta-web/src/components/Playground/ParamsForm/ParamsForm.tsx b/agenta-web/src/components/Playground/ParamsForm/ParamsForm.tsx
index b213497e9..53ad10678 100644
--- a/agenta-web/src/components/Playground/ParamsForm/ParamsForm.tsx
+++ b/agenta-web/src/components/Playground/ParamsForm/ParamsForm.tsx
@@ -28,12 +28,11 @@ const useStyles = createUseStyles((theme: JSSTheme) => ({
borderRadius: 6,
},
paramValueContainer: {
- border: `1px solid ${theme.colorBorder}`,
- width: "100%",
- borderRadius: theme.borderRadius,
- padding: theme.paddingSM,
- maxHeight: 300,
- overflowY: "scroll",
+ "&:disabled": {
+ color: "inherit",
+ backgroundColor: "inherit",
+ cursor: "text",
+ },
},
}))
@@ -109,20 +108,19 @@ const ParamsForm: React.FC = ({
alt={param.name}
/>
)}
- {isPlaygroundComponent ? (
-
- onParamChange?.(param.name, e.target.value)
- }
- autoSize={{minRows: 2, maxRows: 8}}
- />
- ) : (
- {param.value}
- )}
+
+ onParamChange?.(param.name, e.target.value)}
+ disabled={!isPlaygroundComponent}
+ autoSize={{minRows: 2, maxRows: 8}}
+ />
)
From b8aa83a39f86c8dad0a1290f6e026fe658bdfb81 Mon Sep 17 00:00:00 2001
From: ashrafchowdury
Date: Tue, 18 Jun 2024 12:43:02 +0600
Subject: [PATCH 05/25] refactore: removed unnecessary code
---
agenta-web/src/components/Playground/NewVariantModal.tsx | 5 +----
agenta-web/src/components/Playground/Playground.tsx | 3 ---
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/agenta-web/src/components/Playground/NewVariantModal.tsx b/agenta-web/src/components/Playground/NewVariantModal.tsx
index ff20f3bce..627e47c3c 100644
--- a/agenta-web/src/components/Playground/NewVariantModal.tsx
+++ b/agenta-web/src/components/Playground/NewVariantModal.tsx
@@ -13,7 +13,6 @@ interface Props {
setNewVariantName: (value: string) => void
newVariantName: string
setTemplateVariantName: (value: string) => void
- templateVariantName: string
}
const useStyles = createUseStyles({
@@ -30,7 +29,6 @@ const NewVariantModal: React.FC = ({
setNewVariantName,
newVariantName,
setTemplateVariantName,
- templateVariantName,
}) => {
const classes = useStyles()
const [variantPlaceHolder, setVariantPlaceHolder] = useState("Source Variant")
@@ -63,6 +61,7 @@ const NewVariantModal: React.FC = ({
onCancel={() => setIsModalOpen(false)}
centered
okButtonProps={{disabled: !isInputValid}} // Disable OK button if input is not valid
+ destroyOnClose
>
diff --git a/agenta-web/src/components/Playground/Playground.tsx b/agenta-web/src/components/Playground/Playground.tsx
index fd3854a32..177782214 100644
--- a/agenta-web/src/components/Playground/Playground.tsx
+++ b/agenta-web/src/components/Playground/Playground.tsx
@@ -89,8 +89,6 @@ const Playground: React.FC = () => {
setVariants((prevState: any) => [...prevState, newVariant])
setActiveKey(updateNewVariantName)
setUnsavedVariants((prev) => ({...prev, [newVariant.variantName!]: false}))
- setTemplateVariantName("")
- setNewVariantName("")
} catch (error) {
message.error("Failed to add new variant. Please try again later.")
console.error("Error adding new variant:", error)
@@ -405,7 +403,6 @@ const Playground: React.FC = () => {
setNewVariantName={setNewVariantName}
newVariantName={newVariantName}
setTemplateVariantName={setTemplateVariantName}
- templateVariantName={templateVariantName}
/>
)
From 667eb1c955643772af47db4b535f22a50f59c6dd Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 20 Jun 2024 03:42:16 +0000
Subject: [PATCH 06/25] build(deps-dev): bump setuptools from 70.0.0 to 70.1.0
in /agenta-cli
Bumps [setuptools](https://github.com/pypa/setuptools) from 70.0.0 to 70.1.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v70.0.0...v70.1.0)
---
updated-dependencies:
- dependency-name: setuptools
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
agenta-cli/poetry.lock | 95 ++++++---------------------------------
agenta-cli/pyproject.toml | 2 +-
2 files changed, 15 insertions(+), 82 deletions(-)
diff --git a/agenta-cli/poetry.lock b/agenta-cli/poetry.lock
index 599be327f..ece7ee7cc 100644
--- a/agenta-cli/poetry.lock
+++ b/agenta-cli/poetry.lock
@@ -15,7 +15,6 @@ files = [
name = "anyio"
version = "4.4.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -38,7 +37,6 @@ trio = ["trio (>=0.23)"]
name = "asttokens"
version = "2.4.1"
description = "Annotate AST trees with source code positions"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -57,7 +55,6 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
name = "backoff"
version = "2.2.1"
description = "Function decoration for backoff and retry"
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
@@ -69,7 +66,6 @@ files = [
name = "cachetools"
version = "5.3.3"
description = "Extensible memoizing collections and decorators"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -81,7 +77,6 @@ files = [
name = "certifi"
version = "2024.2.2"
description = "Python package for providing Mozilla's CA Bundle."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -93,7 +88,6 @@ files = [
name = "charset-normalizer"
version = "3.3.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -193,7 +187,6 @@ files = [
name = "click"
version = "8.1.7"
description = "Composable command line interface toolkit"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -208,7 +201,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
@@ -220,7 +212,6 @@ files = [
name = "decorator"
version = "5.1.1"
description = "Decorators for Humans"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -232,7 +223,6 @@ files = [
name = "dnspython"
version = "2.6.1"
description = "DNS toolkit"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -253,7 +243,6 @@ wmi = ["wmi (>=1.5.1)"]
name = "docker"
version = "7.1.0"
description = "A Python library for the Docker Engine API."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -276,7 +265,6 @@ websockets = ["websocket-client (>=1.3.0)"]
name = "email-validator"
version = "2.1.1"
description = "A robust email address syntax and deliverability validation library."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -292,7 +280,6 @@ idna = ">=2.0.0"
name = "exceptiongroup"
version = "1.2.1"
description = "Backport of PEP 654 (exception groups)"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -307,7 +294,6 @@ test = ["pytest (>=6)"]
name = "executing"
version = "2.0.1"
description = "Get the currently executing AST node of a frame, and other information"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -322,7 +308,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth
name = "fastapi"
version = "0.111.0"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -350,7 +335,6 @@ all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)"
name = "fastapi-cli"
version = "0.0.4"
description = "Run and manage FastAPI apps from the command line with FastAPI CLI. ๐"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -368,7 +352,6 @@ standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"]
name = "h11"
version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -380,7 +363,6 @@ files = [
name = "httpcore"
version = "1.0.5"
description = "A minimal low-level HTTP client."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -395,14 +377,13 @@ h11 = ">=0.13,<0.15"
[package.extras]
asyncio = ["anyio (>=4.0,<5.0)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
trio = ["trio (>=0.22.0,<0.26.0)"]
[[package]]
name = "httptools"
version = "0.6.1"
description = "A collection of framework independent HTTP protocol utils."
-category = "main"
optional = false
python-versions = ">=3.8.0"
files = [
@@ -451,7 +432,6 @@ test = ["Cython (>=0.29.24,<0.30.0)"]
name = "httpx"
version = "0.27.0"
description = "The next generation HTTP client."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -462,21 +442,20 @@ files = [
[package.dependencies]
anyio = "*"
certifi = "*"
-httpcore = ">=1.0.0,<2.0.0"
+httpcore = "==1.*"
idna = "*"
sniffio = "*"
[package.extras]
brotli = ["brotli", "brotlicffi"]
-cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
+cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
[[package]]
name = "idna"
version = "3.7"
description = "Internationalized Domain Names in Applications (IDNA)"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -488,7 +467,6 @@ files = [
name = "importlib-metadata"
version = "7.1.0"
description = "Read metadata from Python packages"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -508,7 +486,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)",
name = "iniconfig"
version = "2.0.0"
description = "brain-dead simple config-ini parsing"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -520,7 +497,6 @@ files = [
name = "ipdb"
version = "0.13.13"
description = "IPython-enabled pdb"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -537,7 +513,6 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version <
name = "ipython"
version = "8.18.0"
description = "IPython: Productive Interactive Computing"
-category = "main"
optional = false
python-versions = ">=3.9"
files = [
@@ -575,7 +550,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa
name = "jedi"
version = "0.19.1"
description = "An autocompletion tool for Python that can be used for text editors."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -595,7 +569,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
name = "jinja2"
version = "3.1.4"
description = "A very fast and expressive template engine."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -613,7 +586,6 @@ i18n = ["Babel (>=2.7)"]
name = "markdown-it-py"
version = "3.0.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -638,7 +610,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "markupsafe"
version = "2.1.5"
description = "Safely add untrusted strings to HTML/XML markup."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -708,7 +679,6 @@ files = [
name = "matplotlib-inline"
version = "0.1.7"
description = "Inline Matplotlib backend for Jupyter"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -723,7 +693,6 @@ traitlets = "*"
name = "mdurl"
version = "0.1.2"
description = "Markdown URL utilities"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -735,7 +704,6 @@ files = [
name = "monotonic"
version = "1.6"
description = "An implementation of time.monotonic() for Python 2 & < 3.3"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -747,7 +715,6 @@ files = [
name = "orjson"
version = "3.10.3"
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -803,7 +770,6 @@ files = [
name = "packaging"
version = "24.0"
description = "Core utilities for Python packages"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -815,7 +781,6 @@ files = [
name = "parso"
version = "0.8.4"
description = "A Python Parser"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -831,7 +796,6 @@ testing = ["docopt", "pytest"]
name = "pexpect"
version = "4.9.0"
description = "Pexpect allows easy control of interactive console applications."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -846,7 +810,6 @@ ptyprocess = ">=0.5"
name = "pluggy"
version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -862,7 +825,6 @@ testing = ["pytest", "pytest-benchmark"]
name = "posthog"
version = "3.5.0"
description = "Integrate PostHog into any python application."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -886,7 +848,6 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint"
name = "prompt-toolkit"
version = "3.0.36"
description = "Library for building powerful interactive command lines in Python"
-category = "main"
optional = false
python-versions = ">=3.6.2"
files = [
@@ -901,7 +862,6 @@ wcwidth = "*"
name = "ptyprocess"
version = "0.7.0"
description = "Run a subprocess in a pseudo terminal"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -913,7 +873,6 @@ files = [
name = "pure-eval"
version = "0.2.2"
description = "Safely evaluate AST nodes without side effects"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1038,7 +997,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
name = "pygments"
version = "2.18.0"
description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1053,7 +1011,6 @@ windows-terminal = ["colorama (>=0.4.6)"]
name = "pymongo"
version = "4.7.3"
description = "Python driver for MongoDB "
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1135,7 +1092,6 @@ zstd = ["zstandard"]
name = "pytest"
version = "8.2.2"
description = "pytest: simple powerful testing with Python"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -1158,7 +1114,6 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments
name = "python-dateutil"
version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [
@@ -1173,7 +1128,6 @@ six = ">=1.5"
name = "python-dotenv"
version = "1.0.1"
description = "Read key-value pairs from a .env file and set them as environment variables"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1188,7 +1142,6 @@ cli = ["click (>=5.0)"]
name = "python-multipart"
version = "0.0.9"
description = "A streaming multipart parser for Python"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1203,7 +1156,6 @@ dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatc
name = "pywin32"
version = "306"
description = "Python for Window Extensions"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1227,7 +1179,6 @@ files = [
name = "pyyaml"
version = "6.0.1"
description = "YAML parser and emitter for Python"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -1236,6 +1187,7 @@ files = [
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+ {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
{file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
{file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
{file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
@@ -1243,6 +1195,7 @@ files = [
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+ {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
{file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
@@ -1268,6 +1221,7 @@ files = [
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+ {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
{file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
{file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
{file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
@@ -1275,6 +1229,7 @@ files = [
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
{file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
{file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
@@ -1284,7 +1239,6 @@ files = [
name = "questionary"
version = "2.0.1"
description = "Python library to build pretty command line user prompts โญ๏ธ"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1299,7 +1253,6 @@ prompt_toolkit = ">=2.0,<=3.0.36"
name = "requests"
version = "2.32.3"
description = "Python HTTP for Humans."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1321,7 +1274,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
name = "rich"
version = "13.7.1"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -1338,25 +1290,23 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
[[package]]
name = "setuptools"
-version = "70.0.0"
+version = "70.1.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
- {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"},
- {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"},
+ {file = "setuptools-70.1.0-py3-none-any.whl", hash = "sha256:d9b8b771455a97c8a9f3ab3448ebe0b29b5e105f1228bba41028be116985a267"},
+ {file = "setuptools-70.1.0.tar.gz", hash = "sha256:01a1e793faa5bd89abc851fa15d0a0db26f160890c7102cd8dce643e886b47f5"},
]
[package.extras]
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
[[package]]
name = "shellingham"
version = "1.5.4"
description = "Tool to Detect Surrounding Shell"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1368,7 +1318,6 @@ files = [
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -1380,7 +1329,6 @@ files = [
name = "sniffio"
version = "1.3.1"
description = "Sniff out which async library your code is running under"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1392,7 +1340,6 @@ files = [
name = "stack-data"
version = "0.6.3"
description = "Extract data from python stack frames and tracebacks for informative displays"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1412,7 +1359,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
name = "starlette"
version = "0.37.2"
description = "The little ASGI library that shines."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1431,7 +1377,6 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7
name = "toml"
version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
-category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -1443,7 +1388,6 @@ files = [
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1455,7 +1399,6 @@ files = [
name = "traitlets"
version = "5.14.3"
description = "Traitlets Python configuration system"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1471,7 +1414,6 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,
name = "typer"
version = "0.12.3"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1489,7 +1431,6 @@ typing-extensions = ">=3.7.4.3"
name = "typing-extensions"
version = "4.12.0"
description = "Backported and Experimental Type Hints for Python 3.8+"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1501,7 +1442,6 @@ files = [
name = "ujson"
version = "5.10.0"
description = "Ultra fast JSON encoder and decoder for Python"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1589,7 +1529,6 @@ files = [
name = "urllib3"
version = "2.2.1"
description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1607,7 +1546,6 @@ zstd = ["zstandard (>=0.18.0)"]
name = "uvicorn"
version = "0.30.0"
description = "The lightning-fast ASGI server."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1623,7 +1561,7 @@ httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standar
python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
-uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
+uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
@@ -1634,7 +1572,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
name = "uvloop"
version = "0.19.0"
description = "Fast implementation of asyncio event loop on top of libuv"
-category = "main"
optional = false
python-versions = ">=3.8.0"
files = [
@@ -1679,7 +1616,6 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)"
name = "watchfiles"
version = "0.22.0"
description = "Simple, modern and high performance file watching and code reload in python."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1767,7 +1703,6 @@ anyio = ">=3.0.0"
name = "wcwidth"
version = "0.2.13"
description = "Measures the displayed width of unicode strings in a terminal"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1779,7 +1714,6 @@ files = [
name = "websockets"
version = "12.0"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1861,7 +1795,6 @@ files = [
name = "zipp"
version = "3.19.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1876,4 +1809,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more
[metadata]
lock-version = "2.0"
python-versions = "^3.9"
-content-hash = "6d97347e0ac076de0bbaedfc2fb0ef9db603ca17a80d997444501391bf4a5dd8"
+content-hash = "ec2c2c9036a752dacfcc4584a6c1868e26813b1f6e7578d3ae2796fd119be3a2"
diff --git a/agenta-cli/pyproject.toml b/agenta-cli/pyproject.toml
index 2c3f012e4..a74d7ab8e 100644
--- a/agenta-cli/pyproject.toml
+++ b/agenta-cli/pyproject.toml
@@ -34,7 +34,7 @@ cachetools = "^5.3.3"
[tool.poetry.dev-dependencies]
pytest = "^8.2"
-setuptools = "^70.0.0"
+setuptools = "^70.1.0"
[build-system]
requires = ["poetry-core"]
From 64473bbbaf8044032260ab0fa203b61cf8338025 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 21 Jun 2024 03:22:56 +0000
Subject: [PATCH 07/25] build(deps): bump importlib-metadata from 7.1.0 to
7.2.0 in /agenta-cli
Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/python/importlib_metadata/releases)
- [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst)
- [Commits](https://github.com/python/importlib_metadata/compare/v7.1.0...v7.2.0)
---
updated-dependencies:
- dependency-name: importlib-metadata
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
agenta-cli/poetry.lock | 95 +++++++-----------------------------------
1 file changed, 14 insertions(+), 81 deletions(-)
diff --git a/agenta-cli/poetry.lock b/agenta-cli/poetry.lock
index 599be327f..d03c872af 100644
--- a/agenta-cli/poetry.lock
+++ b/agenta-cli/poetry.lock
@@ -15,7 +15,6 @@ files = [
name = "anyio"
version = "4.4.0"
description = "High level compatibility layer for multiple asynchronous event loop implementations"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -38,7 +37,6 @@ trio = ["trio (>=0.23)"]
name = "asttokens"
version = "2.4.1"
description = "Annotate AST trees with source code positions"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -57,7 +55,6 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
name = "backoff"
version = "2.2.1"
description = "Function decoration for backoff and retry"
-category = "main"
optional = false
python-versions = ">=3.7,<4.0"
files = [
@@ -69,7 +66,6 @@ files = [
name = "cachetools"
version = "5.3.3"
description = "Extensible memoizing collections and decorators"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -81,7 +77,6 @@ files = [
name = "certifi"
version = "2024.2.2"
description = "Python package for providing Mozilla's CA Bundle."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -93,7 +88,6 @@ files = [
name = "charset-normalizer"
version = "3.3.2"
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -193,7 +187,6 @@ files = [
name = "click"
version = "8.1.7"
description = "Composable command line interface toolkit"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -208,7 +201,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
name = "colorama"
version = "0.4.6"
description = "Cross-platform colored terminal text."
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [
@@ -220,7 +212,6 @@ files = [
name = "decorator"
version = "5.1.1"
description = "Decorators for Humans"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -232,7 +223,6 @@ files = [
name = "dnspython"
version = "2.6.1"
description = "DNS toolkit"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -253,7 +243,6 @@ wmi = ["wmi (>=1.5.1)"]
name = "docker"
version = "7.1.0"
description = "A Python library for the Docker Engine API."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -276,7 +265,6 @@ websockets = ["websocket-client (>=1.3.0)"]
name = "email-validator"
version = "2.1.1"
description = "A robust email address syntax and deliverability validation library."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -292,7 +280,6 @@ idna = ">=2.0.0"
name = "exceptiongroup"
version = "1.2.1"
description = "Backport of PEP 654 (exception groups)"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -307,7 +294,6 @@ test = ["pytest (>=6)"]
name = "executing"
version = "2.0.1"
description = "Get the currently executing AST node of a frame, and other information"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -322,7 +308,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth
name = "fastapi"
version = "0.111.0"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -350,7 +335,6 @@ all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)"
name = "fastapi-cli"
version = "0.0.4"
description = "Run and manage FastAPI apps from the command line with FastAPI CLI. ๐"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -368,7 +352,6 @@ standard = ["fastapi", "uvicorn[standard] (>=0.15.0)"]
name = "h11"
version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -380,7 +363,6 @@ files = [
name = "httpcore"
version = "1.0.5"
description = "A minimal low-level HTTP client."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -395,14 +377,13 @@ h11 = ">=0.13,<0.15"
[package.extras]
asyncio = ["anyio (>=4.0,<5.0)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
trio = ["trio (>=0.22.0,<0.26.0)"]
[[package]]
name = "httptools"
version = "0.6.1"
description = "A collection of framework independent HTTP protocol utils."
-category = "main"
optional = false
python-versions = ">=3.8.0"
files = [
@@ -451,7 +432,6 @@ test = ["Cython (>=0.29.24,<0.30.0)"]
name = "httpx"
version = "0.27.0"
description = "The next generation HTTP client."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -462,21 +442,20 @@ files = [
[package.dependencies]
anyio = "*"
certifi = "*"
-httpcore = ">=1.0.0,<2.0.0"
+httpcore = "==1.*"
idna = "*"
sniffio = "*"
[package.extras]
brotli = ["brotli", "brotlicffi"]
-cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"]
+cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
http2 = ["h2 (>=3,<5)"]
-socks = ["socksio (>=1.0.0,<2.0.0)"]
+socks = ["socksio (==1.*)"]
[[package]]
name = "idna"
version = "3.7"
description = "Internationalized Domain Names in Applications (IDNA)"
-category = "main"
optional = false
python-versions = ">=3.5"
files = [
@@ -486,29 +465,27 @@ files = [
[[package]]
name = "importlib-metadata"
-version = "7.1.0"
+version = "7.2.0"
description = "Read metadata from Python packages"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
- {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"},
- {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"},
+ {file = "importlib_metadata-7.2.0-py3-none-any.whl", hash = "sha256:04e4aad329b8b948a5711d394fa8759cb80f009225441b4f2a02bd4d8e5f426c"},
+ {file = "importlib_metadata-7.2.0.tar.gz", hash = "sha256:3ff4519071ed42740522d494d04819b666541b9752c43012f85afb2cc220fcc6"},
]
[package.dependencies]
zipp = ">=0.5"
[package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
perf = ["ipython"]
-testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"]
+test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"]
[[package]]
name = "iniconfig"
version = "2.0.0"
description = "brain-dead simple config-ini parsing"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -520,7 +497,6 @@ files = [
name = "ipdb"
version = "0.13.13"
description = "IPython-enabled pdb"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
@@ -537,7 +513,6 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version <
name = "ipython"
version = "8.18.0"
description = "IPython: Productive Interactive Computing"
-category = "main"
optional = false
python-versions = ">=3.9"
files = [
@@ -575,7 +550,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa
name = "jedi"
version = "0.19.1"
description = "An autocompletion tool for Python that can be used for text editors."
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -595,7 +569,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
name = "jinja2"
version = "3.1.4"
description = "A very fast and expressive template engine."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -613,7 +586,6 @@ i18n = ["Babel (>=2.7)"]
name = "markdown-it-py"
version = "3.0.0"
description = "Python port of markdown-it. Markdown parsing, done right!"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -638,7 +610,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "markupsafe"
version = "2.1.5"
description = "Safely add untrusted strings to HTML/XML markup."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -708,7 +679,6 @@ files = [
name = "matplotlib-inline"
version = "0.1.7"
description = "Inline Matplotlib backend for Jupyter"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -723,7 +693,6 @@ traitlets = "*"
name = "mdurl"
version = "0.1.2"
description = "Markdown URL utilities"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -735,7 +704,6 @@ files = [
name = "monotonic"
version = "1.6"
description = "An implementation of time.monotonic() for Python 2 & < 3.3"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -747,7 +715,6 @@ files = [
name = "orjson"
version = "3.10.3"
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -803,7 +770,6 @@ files = [
name = "packaging"
version = "24.0"
description = "Core utilities for Python packages"
-category = "dev"
optional = false
python-versions = ">=3.7"
files = [
@@ -815,7 +781,6 @@ files = [
name = "parso"
version = "0.8.4"
description = "A Python Parser"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -831,7 +796,6 @@ testing = ["docopt", "pytest"]
name = "pexpect"
version = "4.9.0"
description = "Pexpect allows easy control of interactive console applications."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -846,7 +810,6 @@ ptyprocess = ">=0.5"
name = "pluggy"
version = "1.5.0"
description = "plugin and hook calling mechanisms for python"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -862,7 +825,6 @@ testing = ["pytest", "pytest-benchmark"]
name = "posthog"
version = "3.5.0"
description = "Integrate PostHog into any python application."
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -886,7 +848,6 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint"
name = "prompt-toolkit"
version = "3.0.36"
description = "Library for building powerful interactive command lines in Python"
-category = "main"
optional = false
python-versions = ">=3.6.2"
files = [
@@ -901,7 +862,6 @@ wcwidth = "*"
name = "ptyprocess"
version = "0.7.0"
description = "Run a subprocess in a pseudo terminal"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -913,7 +873,6 @@ files = [
name = "pure-eval"
version = "0.2.2"
description = "Safely evaluate AST nodes without side effects"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1038,7 +997,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
name = "pygments"
version = "2.18.0"
description = "Pygments is a syntax highlighting package written in Python."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1053,7 +1011,6 @@ windows-terminal = ["colorama (>=0.4.6)"]
name = "pymongo"
version = "4.7.3"
description = "Python driver for MongoDB "
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1135,7 +1092,6 @@ zstd = ["zstandard"]
name = "pytest"
version = "8.2.2"
description = "pytest: simple powerful testing with Python"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -1158,7 +1114,6 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments
name = "python-dateutil"
version = "2.9.0.post0"
description = "Extensions to the standard Python datetime module"
-category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [
@@ -1173,7 +1128,6 @@ six = ">=1.5"
name = "python-dotenv"
version = "1.0.1"
description = "Read key-value pairs from a .env file and set them as environment variables"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1188,7 +1142,6 @@ cli = ["click (>=5.0)"]
name = "python-multipart"
version = "0.0.9"
description = "A streaming multipart parser for Python"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1203,7 +1156,6 @@ dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatc
name = "pywin32"
version = "306"
description = "Python for Window Extensions"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1227,7 +1179,6 @@ files = [
name = "pyyaml"
version = "6.0.1"
description = "YAML parser and emitter for Python"
-category = "main"
optional = false
python-versions = ">=3.6"
files = [
@@ -1236,6 +1187,7 @@ files = [
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
{file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+ {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
{file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
{file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
{file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
@@ -1243,6 +1195,7 @@ files = [
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
{file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+ {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
{file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
{file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
{file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
@@ -1268,6 +1221,7 @@ files = [
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
{file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+ {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
{file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
{file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
{file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
@@ -1275,6 +1229,7 @@ files = [
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
{file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+ {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
{file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
{file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
{file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
@@ -1284,7 +1239,6 @@ files = [
name = "questionary"
version = "2.0.1"
description = "Python library to build pretty command line user prompts โญ๏ธ"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1299,7 +1253,6 @@ prompt_toolkit = ">=2.0,<=3.0.36"
name = "requests"
version = "2.32.3"
description = "Python HTTP for Humans."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1321,7 +1274,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
name = "rich"
version = "13.7.1"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
-category = "main"
optional = false
python-versions = ">=3.7.0"
files = [
@@ -1340,7 +1292,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
name = "setuptools"
version = "70.0.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
-category = "dev"
optional = false
python-versions = ">=3.8"
files = [
@@ -1356,7 +1307,6 @@ testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metad
name = "shellingham"
version = "1.5.4"
description = "Tool to Detect Surrounding Shell"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1368,7 +1318,6 @@ files = [
name = "six"
version = "1.16.0"
description = "Python 2 and 3 compatibility utilities"
-category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -1380,7 +1329,6 @@ files = [
name = "sniffio"
version = "1.3.1"
description = "Sniff out which async library your code is running under"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1392,7 +1340,6 @@ files = [
name = "stack-data"
version = "0.6.3"
description = "Extract data from python stack frames and tracebacks for informative displays"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1412,7 +1359,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
name = "starlette"
version = "0.37.2"
description = "The little ASGI library that shines."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1431,7 +1377,6 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7
name = "toml"
version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
-category = "main"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [
@@ -1443,7 +1388,6 @@ files = [
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1455,7 +1399,6 @@ files = [
name = "traitlets"
version = "5.14.3"
description = "Traitlets Python configuration system"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1471,7 +1414,6 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,
name = "typer"
version = "0.12.3"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
-category = "main"
optional = false
python-versions = ">=3.7"
files = [
@@ -1489,7 +1431,6 @@ typing-extensions = ">=3.7.4.3"
name = "typing-extensions"
version = "4.12.0"
description = "Backported and Experimental Type Hints for Python 3.8+"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1501,7 +1442,6 @@ files = [
name = "ujson"
version = "5.10.0"
description = "Ultra fast JSON encoder and decoder for Python"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1589,7 +1529,6 @@ files = [
name = "urllib3"
version = "2.2.1"
description = "HTTP library with thread-safe connection pooling, file post, and more."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1607,7 +1546,6 @@ zstd = ["zstandard (>=0.18.0)"]
name = "uvicorn"
version = "0.30.0"
description = "The lightning-fast ASGI server."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1623,7 +1561,7 @@ httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standar
python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""}
typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
-uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
+uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""}
watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""}
websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""}
@@ -1634,7 +1572,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
name = "uvloop"
version = "0.19.0"
description = "Fast implementation of asyncio event loop on top of libuv"
-category = "main"
optional = false
python-versions = ">=3.8.0"
files = [
@@ -1679,7 +1616,6 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)"
name = "watchfiles"
version = "0.22.0"
description = "Simple, modern and high performance file watching and code reload in python."
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1767,7 +1703,6 @@ anyio = ">=3.0.0"
name = "wcwidth"
version = "0.2.13"
description = "Measures the displayed width of unicode strings in a terminal"
-category = "main"
optional = false
python-versions = "*"
files = [
@@ -1779,7 +1714,6 @@ files = [
name = "websockets"
version = "12.0"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
@@ -1861,7 +1795,6 @@ files = [
name = "zipp"
version = "3.19.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
-category = "main"
optional = false
python-versions = ">=3.8"
files = [
From 8f9262d93721ad1d119a13cddceb8285a892714d Mon Sep 17 00:00:00 2001
From: Kaosiso Ezealigo
Date: Sun, 23 Jun 2024 17:23:42 +0100
Subject: [PATCH 08/25] fix(frontend): rows not expanding in evaluation
comparison view
---
.../pages/evaluations/evaluationCompare/EvaluationCompare.tsx | 2 +-
agenta-web/src/services/evaluations/api/index.ts | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/agenta-web/src/components/pages/evaluations/evaluationCompare/EvaluationCompare.tsx b/agenta-web/src/components/pages/evaluations/evaluationCompare/EvaluationCompare.tsx
index 0069b9fe0..c3b325c64 100644
--- a/agenta-web/src/components/pages/evaluations/evaluationCompare/EvaluationCompare.tsx
+++ b/agenta-web/src/components/pages/evaluations/evaluationCompare/EvaluationCompare.tsx
@@ -544,7 +544,7 @@ const EvaluationCompareMode: React.FC = () => {
ref={gridRef as any}
rowData={rows}
columnDefs={colDefs}
- getRowId={(params) => params.data.id}
+ getRowId={(params) => params.data.rowId}
headerHeight={64}
/>
diff --git a/agenta-web/src/services/evaluations/api/index.ts b/agenta-web/src/services/evaluations/api/index.ts
index 301bf6c99..98612464d 100644
--- a/agenta-web/src/services/evaluations/api/index.ts
+++ b/agenta-web/src/services/evaluations/api/index.ts
@@ -14,6 +14,7 @@ import {
} from "@/lib/Types"
import {getTagColors} from "@/lib/helpers/colors"
import {stringToNumberInRange} from "@/lib/helpers/utils"
+import {v4 as uuidv4} from "uuid"
import exactMatchImg from "@/media/target.png"
import similarityImg from "@/media/transparency.png"
import regexImg from "@/media/programming.png"
@@ -239,6 +240,7 @@ export const fetchAllComparisonResults = async (evaluationIds: string[]) => {
rows.push({
id: inputValuesStr,
+ rowId: uuidv4(),
inputs: inputNames
.map((name) => ({name, value: data[name]}))
.filter((ip) => ip.value !== undefined),
From c133fcdac359b87c307e5735cd776a8a2e38e989 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 24 Jun 2024 03:38:20 +0000
Subject: [PATCH 09/25] build(deps): bump importlib-metadata from 7.2.0 to
7.2.1 in /agenta-cli
Bumps [importlib-metadata](https://github.com/python/importlib_metadata) from 7.2.0 to 7.2.1.
- [Release notes](https://github.com/python/importlib_metadata/releases)
- [Changelog](https://github.com/python/importlib_metadata/blob/main/NEWS.rst)
- [Commits](https://github.com/python/importlib_metadata/compare/v7.2.0...v7.2.1)
---
updated-dependencies:
- dependency-name: importlib-metadata
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
agenta-cli/poetry.lock | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/agenta-cli/poetry.lock b/agenta-cli/poetry.lock
index a090925b3..a3200a3b7 100644
--- a/agenta-cli/poetry.lock
+++ b/agenta-cli/poetry.lock
@@ -465,13 +465,13 @@ files = [
[[package]]
name = "importlib-metadata"
-version = "7.2.0"
+version = "7.2.1"
description = "Read metadata from Python packages"
optional = false
python-versions = ">=3.8"
files = [
- {file = "importlib_metadata-7.2.0-py3-none-any.whl", hash = "sha256:04e4aad329b8b948a5711d394fa8759cb80f009225441b4f2a02bd4d8e5f426c"},
- {file = "importlib_metadata-7.2.0.tar.gz", hash = "sha256:3ff4519071ed42740522d494d04819b666541b9752c43012f85afb2cc220fcc6"},
+ {file = "importlib_metadata-7.2.1-py3-none-any.whl", hash = "sha256:ffef94b0b66046dd8ea2d619b701fe978d9264d38f3998bc4c27ec3b146a87c8"},
+ {file = "importlib_metadata-7.2.1.tar.gz", hash = "sha256:509ecb2ab77071db5137c655e24ceb3eee66e7bbc6574165d0d114d9fc4bbe68"},
]
[package.dependencies]
From 089c0aba59e22a4b0e0369659cce4b305bbf9010 Mon Sep 17 00:00:00 2001
From: aakrem <6608260+aakrem@users.noreply.github.com>
Date: Mon, 24 Jun 2024 08:52:15 +0000
Subject: [PATCH 10/25] Bump versions
---
agenta-backend/pyproject.toml | 2 +-
agenta-cli/pyproject.toml | 2 +-
agenta-web/package-lock.json | 4 ++--
agenta-web/package.json | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/agenta-backend/pyproject.toml b/agenta-backend/pyproject.toml
index 555363893..f1adf3fcf 100644
--- a/agenta-backend/pyproject.toml
+++ b/agenta-backend/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "agenta_backend"
-version = "0.17.4"
+version = "0.17.5"
description = ""
authors = ["Mahmoud Mabrouk "]
readme = "README.md"
diff --git a/agenta-cli/pyproject.toml b/agenta-cli/pyproject.toml
index a74d7ab8e..a3fc9fb07 100644
--- a/agenta-cli/pyproject.toml
+++ b/agenta-cli/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "agenta"
-version = "0.17.4"
+version = "0.17.5"
description = "The SDK for agenta is an open-source LLMOps platform."
readme = "README.md"
authors = ["Mahmoud Mabrouk "]
diff --git a/agenta-web/package-lock.json b/agenta-web/package-lock.json
index 47de851a1..76ac9d6c4 100644
--- a/agenta-web/package-lock.json
+++ b/agenta-web/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "agenta",
- "version": "0.17.4",
+ "version": "0.17.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "agenta",
- "version": "0.17.4",
+ "version": "0.17.5",
"dependencies": {
"@ant-design/colors": "^7.0.0",
"@ant-design/icons": "^5.3.7",
diff --git a/agenta-web/package.json b/agenta-web/package.json
index e50a0b288..3ad495c93 100644
--- a/agenta-web/package.json
+++ b/agenta-web/package.json
@@ -1,6 +1,6 @@
{
"name": "agenta",
- "version": "0.17.4",
+ "version": "0.17.5",
"private": true,
"engines": {
"node": ">=18"
From 80538cd33b58e6ebdca3ff9adbece84079c9efaf Mon Sep 17 00:00:00 2001
From: Kaosiso Ezealigo
Date: Tue, 25 Jun 2024 14:15:20 +0100
Subject: [PATCH 11/25] fix(frontend): prevents duplicate entries when saving
new testset
---
.../src/components/TestSetTable/TestsetTable.tsx | 14 +++++++++++---
.../apps/[app_id]/testsets/[testset_id]/index.tsx | 2 +-
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/agenta-web/src/components/TestSetTable/TestsetTable.tsx b/agenta-web/src/components/TestSetTable/TestsetTable.tsx
index dad1316ac..9bfc913c4 100644
--- a/agenta-web/src/components/TestSetTable/TestsetTable.tsx
+++ b/agenta-web/src/components/TestSetTable/TestsetTable.tsx
@@ -155,6 +155,7 @@ const TestsetTable: React.FC = ({mode}) => {
const [columnDefs, setColumnDefs] = useState<{field: string; [key: string]: any}[]>([])
const [inputValues, setInputValues] = useStateCallback(columnDefs.map((col) => col.field))
const [focusedRowData, setFocusedRowData] = useState()
+ const [isDuplicate, setIsDuplicate] = useState({bool: false, id: ""})
const gridRef = useRef(null)
const [selectedRow, setSelectedRow] = useState([])
@@ -438,12 +439,17 @@ const TestsetTable: React.FC = ({mode}) => {
const onSaveData = async () => {
try {
setIsLoading(true)
- const afterSave = (response: AxiosResponse) => {
+ const afterSave = (response: AxiosResponse, isNew?: boolean) => {
if (response.status === 200) {
setUnSavedChanges(false, () => {
mssgModal("success", "Changes saved successfully!")
})
setIsLoading(false)
+ if (isNew) {
+ // createNewTestset returns id prop
+ // updateTestset returns _id prop
+ setIsDuplicate({bool: true, id: response.data.id || response.data._id})
+ }
}
}
@@ -452,8 +458,10 @@ const TestsetTable: React.FC = ({mode}) => {
setIsModalOpen(true)
setIsLoading(false)
} else {
- const response = await createNewTestset(appId, testsetName, rowData)
- afterSave(response)
+ const response = isDuplicate.bool
+ ? await updateTestset(isDuplicate.id, testsetName, rowData)
+ : await createNewTestset(appId, testsetName, rowData)
+ afterSave(response, true)
}
} else if (mode === "edit") {
if (!testsetName) {
diff --git a/agenta-web/src/pages/apps/[app_id]/testsets/[testset_id]/index.tsx b/agenta-web/src/pages/apps/[app_id]/testsets/[testset_id]/index.tsx
index 7518ed7d0..9e9a4a47b 100644
--- a/agenta-web/src/pages/apps/[app_id]/testsets/[testset_id]/index.tsx
+++ b/agenta-web/src/pages/apps/[app_id]/testsets/[testset_id]/index.tsx
@@ -1,4 +1,4 @@
-import React, {useState, useEffect} from "react"
+import React from "react"
import TestsetTable from "@/components/TestSetTable/TestsetTable"
const testsetDisplay = () => {
From f3d89c05ac4acd1d2af0df63cd1ed31cae5ef01a Mon Sep 17 00:00:00 2001
From: Kaosiso Ezealigo
Date: Tue, 25 Jun 2024 15:04:44 +0100
Subject: [PATCH 12/25] fix: improved modifications
---
.../components/TestSetTable/TestsetTable.tsx | 36 +++++++++----------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/agenta-web/src/components/TestSetTable/TestsetTable.tsx b/agenta-web/src/components/TestSetTable/TestsetTable.tsx
index 9bfc913c4..355695dd3 100644
--- a/agenta-web/src/components/TestSetTable/TestsetTable.tsx
+++ b/agenta-web/src/components/TestSetTable/TestsetTable.tsx
@@ -155,7 +155,8 @@ const TestsetTable: React.FC = ({mode}) => {
const [columnDefs, setColumnDefs] = useState<{field: string; [key: string]: any}[]>([])
const [inputValues, setInputValues] = useStateCallback(columnDefs.map((col) => col.field))
const [focusedRowData, setFocusedRowData] = useState()
- const [isDuplicate, setIsDuplicate] = useState({bool: false, id: ""})
+ const [writeMode, setWriteMode] = useState(mode)
+ const [duplicateTestsetId, setDuplicateTestsetId] = useState(undefined)
const gridRef = useRef(null)
const [selectedRow, setSelectedRow] = useState([])
@@ -203,7 +204,7 @@ const TestsetTable: React.FC = ({mode}) => {
ADD_BUTTON_COL,
]
setColumnDefs(newColDefs)
- if (mode === "create") {
+ if (writeMode === "create") {
const initialRowData = Array(3).fill({})
const separateRowData = initialRowData.map(() => {
return colData.reduce((acc, curr) => ({...acc, [curr.field]: ""}), {})
@@ -214,7 +215,7 @@ const TestsetTable: React.FC = ({mode}) => {
setInputValues(newColDefs.filter((col) => !!col.field).map((col) => col.field))
}
- if (mode === "edit" && testset_id) {
+ if (writeMode === "edit" && testset_id) {
setLoading(true)
fetchTestset(testset_id as string).then((data) => {
setTestsetName(data.name)
@@ -225,7 +226,7 @@ const TestsetTable: React.FC = ({mode}) => {
})),
)
})
- } else if (mode === "create" && appId) {
+ } else if (writeMode === "create" && appId) {
setLoading(true)
;(async () => {
const backendVariants = await fetchVariants(appId)
@@ -239,7 +240,7 @@ const TestsetTable: React.FC = ({mode}) => {
applyColData([])
})
}
- }, [mode, testset_id, appId])
+ }, [writeMode, testset_id, appId])
const updateTable = (inputValues: string[]) => {
const dataColumns = columnDefs.filter((colDef) => colDef.field !== "")
@@ -439,35 +440,34 @@ const TestsetTable: React.FC = ({mode}) => {
const onSaveData = async () => {
try {
setIsLoading(true)
- const afterSave = (response: AxiosResponse, isNew?: boolean) => {
+ const afterSave = (response: AxiosResponse) => {
if (response.status === 200) {
setUnSavedChanges(false, () => {
mssgModal("success", "Changes saved successfully!")
})
setIsLoading(false)
- if (isNew) {
- // createNewTestset returns id prop
- // updateTestset returns _id prop
- setIsDuplicate({bool: true, id: response.data.id || response.data._id})
- }
+ setWriteMode("edit")
}
}
- if (mode === "create") {
+ if (writeMode === "create") {
if (!testsetName) {
setIsModalOpen(true)
setIsLoading(false)
} else {
- const response = isDuplicate.bool
- ? await updateTestset(isDuplicate.id, testsetName, rowData)
- : await createNewTestset(appId, testsetName, rowData)
- afterSave(response, true)
+ const response = await createNewTestset(appId, testsetName, rowData)
+ afterSave(response)
+ setDuplicateTestsetId(response.data.id)
}
- } else if (mode === "edit") {
+ } else if (writeMode === "edit") {
if (!testsetName) {
setIsModalOpen(true)
} else {
- const response = await updateTestset(testset_id as string, testsetName, rowData)
+ const response = await updateTestset(
+ (duplicateTestsetId || testset_id) as string,
+ testsetName,
+ rowData,
+ )
afterSave(response)
}
}
From a990a949143dcc8bd4aeabb14740c92738db42f4 Mon Sep 17 00:00:00 2001
From: Kaosiso Ezealigo
Date: Tue, 25 Jun 2024 15:53:21 +0100
Subject: [PATCH 13/25] refactor(frontend): modified state name
---
agenta-web/src/components/TestSetTable/TestsetTable.tsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/agenta-web/src/components/TestSetTable/TestsetTable.tsx b/agenta-web/src/components/TestSetTable/TestsetTable.tsx
index 355695dd3..936fc8189 100644
--- a/agenta-web/src/components/TestSetTable/TestsetTable.tsx
+++ b/agenta-web/src/components/TestSetTable/TestsetTable.tsx
@@ -156,7 +156,7 @@ const TestsetTable: React.FC = ({mode}) => {
const [inputValues, setInputValues] = useStateCallback(columnDefs.map((col) => col.field))
const [focusedRowData, setFocusedRowData] = useState()
const [writeMode, setWriteMode] = useState(mode)
- const [duplicateTestsetId, setDuplicateTestsetId] = useState(undefined)
+ const [testsetId, setTestsetId] = useState(undefined)
const gridRef = useRef(null)
const [selectedRow, setSelectedRow] = useState([])
@@ -457,14 +457,14 @@ const TestsetTable: React.FC = ({mode}) => {
} else {
const response = await createNewTestset(appId, testsetName, rowData)
afterSave(response)
- setDuplicateTestsetId(response.data.id)
+ setTestsetId(response.data.id)
}
} else if (writeMode === "edit") {
if (!testsetName) {
setIsModalOpen(true)
} else {
const response = await updateTestset(
- (duplicateTestsetId || testset_id) as string,
+ (testsetId || testset_id) as string,
testsetName,
rowData,
)
From fdaf060acab6df85109085a06feeda4285d2123b Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Wed, 26 Jun 2024 12:23:22 +0200
Subject: [PATCH 14/25] fix(backend): 1817 fix access to variant revision
fix the access to variant revision for deleted variants
Closes: 1817
---
agenta-backend/agenta_backend/models/converters.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/agenta-backend/agenta_backend/models/converters.py b/agenta-backend/agenta_backend/models/converters.py
index cb73ea597..1f89ffa11 100644
--- a/agenta-backend/agenta_backend/models/converters.py
+++ b/agenta-backend/agenta_backend/models/converters.py
@@ -160,7 +160,7 @@ async def human_evaluation_db_to_pydantic(
variant_revision = await db_manager.get_app_variant_revision_by_id(
str(variant_revision_id)
)
- revision = variant_revision.revision
+ revision = variant_revision.revision if variant_revision else ""
revisions.append(str(revision))
return HumanEvaluation(
From 6405171c396815b120215391b3f04ee59265c6cc Mon Sep 17 00:00:00 2001
From: Kaosiso Ezealigo
Date: Thu, 27 Jun 2024 10:45:03 +0100
Subject: [PATCH 15/25] fix(backend): filtered out blank single model test
scores when calculating result
---
agenta-backend/agenta_backend/services/results_service.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/agenta-backend/agenta_backend/services/results_service.py b/agenta-backend/agenta_backend/services/results_service.py
index 86425f9fa..b1ca31a58 100644
--- a/agenta-backend/agenta_backend/services/results_service.py
+++ b/agenta-backend/agenta_backend/services/results_service.py
@@ -99,7 +99,8 @@ async def fetch_results_for_single_model_test(evaluation_id: str):
scores_and_counts = {}
for result in results:
score = result.score
- scores_and_counts[score] = scores_and_counts.get(score, 0) + 1
+ if score:
+ scores_and_counts[score] = scores_and_counts.get(score, 0) + 1
return scores_and_counts
From 23729dfdac5427e17a3ddb0290664bc59a0cd652 Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Thu, 27 Jun 2024 19:19:01 +0200
Subject: [PATCH 16/25] docs(tool): AGE-367 added new cookbook
Closes: AGE-367
---
cookbook/creating_evaluators_with_sdk.ipynb | 470 ++++++++++++++++++++
1 file changed, 470 insertions(+)
create mode 100644 cookbook/creating_evaluators_with_sdk.ipynb
diff --git a/cookbook/creating_evaluators_with_sdk.ipynb b/cookbook/creating_evaluators_with_sdk.ipynb
new file mode 100644
index 000000000..dd32af728
--- /dev/null
+++ b/cookbook/creating_evaluators_with_sdk.ipynb
@@ -0,0 +1,470 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Using evaluations with the SDK\n",
+ "In this cookbook we will show how to interact with evaluation in agenta programatically. Either using the SDK (or the raw API). \n",
+ "\n",
+ "We will do the following:\n",
+ "\n",
+ "- Create a test set\n",
+ "- Create and configure an evaluator\n",
+ "- Run an evaluation\n",
+ "- Retrieve the results of evaluations\n",
+ "\n",
+ "We assume that you have already created an LLM application and variants in agenta. \n",
+ "\n",
+ "\n",
+ "### Architectural Overview:\n",
+ "In this scenario, evaluations are executed on the Agenta backend. Specifically, Agenta invokes the LLM application for each row in the test set and subsequently processes the output using the designated evaluator. \n",
+ "This operation is managed through Celery tasks. The interactions with the LLM application are asynchronous, batched, and include retry mechanisms. Additionally, the batching configuration can be adjusted to avoid exceeding the rate limits imposed by the LLM provider.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Setup "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: agenta in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (0.17.5)\n",
+ "Requirement already satisfied: docker<8.0.0,>=6.1.1 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (6.1.2)\n",
+ "Requirement already satisfied: posthog<4.0.0,>=3.1.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (3.3.1)\n",
+ "Requirement already satisfied: click<9.0.0,>=8.1.3 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (8.1.3)\n",
+ "Requirement already satisfied: importlib-metadata<8.0,>=6.7 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (6.8.0)\n",
+ "Requirement already satisfied: pymongo<5.0.0,>=4.6.3 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (4.7.2)\n",
+ "Requirement already satisfied: questionary<3.0,>=1.10 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (1.10.0)\n",
+ "Requirement already satisfied: httpx<0.28,>=0.24 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (0.27.0)\n",
+ "Requirement already satisfied: python-dotenv<2.0.0,>=1.0.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (1.0.0)\n",
+ "Requirement already satisfied: pydantic>=2 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (2.7.4)\n",
+ "Requirement already satisfied: toml<0.11.0,>=0.10.2 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (0.10.2)\n",
+ "Requirement already satisfied: cachetools<6.0.0,>=5.3.3 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (5.3.3)\n",
+ "Requirement already satisfied: python-multipart<0.0.10,>=0.0.6 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (0.0.9)\n",
+ "Requirement already satisfied: fastapi>=0.100.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (0.111.0)\n",
+ "Requirement already satisfied: ipdb>=0.13 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from agenta) (0.13.13)\n",
+ "Requirement already satisfied: urllib3>=1.26.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from docker<8.0.0,>=6.1.1->agenta) (2.2.1)\n",
+ "Requirement already satisfied: requests>=2.26.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from docker<8.0.0,>=6.1.1->agenta) (2.31.0)\n",
+ "Requirement already satisfied: packaging>=14.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from docker<8.0.0,>=6.1.1->agenta) (23.2)\n",
+ "Requirement already satisfied: websocket-client>=0.32.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from docker<8.0.0,>=6.1.1->agenta) (1.5.2)\n",
+ "Requirement already satisfied: orjson>=3.2.1 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (3.9.15)\n",
+ "Requirement already satisfied: typing-extensions>=4.8.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (4.9.0)\n",
+ "Requirement already satisfied: ujson!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,>=4.0.1 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (5.10.0)\n",
+ "Requirement already satisfied: jinja2>=2.11.2 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (3.1.2)\n",
+ "Requirement already satisfied: starlette<0.38.0,>=0.37.2 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (0.37.2)\n",
+ "Requirement already satisfied: uvicorn[standard]>=0.12.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (0.20.0)\n",
+ "Requirement already satisfied: email_validator>=2.0.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (2.1.1)\n",
+ "Requirement already satisfied: fastapi-cli>=0.0.2 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi>=0.100.0->agenta) (0.0.4)\n",
+ "Requirement already satisfied: idna>=2.0.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from email_validator>=2.0.0->fastapi>=0.100.0->agenta) (3.2)\n",
+ "Requirement already satisfied: dnspython>=2.0.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from email_validator>=2.0.0->fastapi>=0.100.0->agenta) (2.2.1)\n",
+ "Requirement already satisfied: typer>=0.12.3 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from fastapi-cli>=0.0.2->fastapi>=0.100.0->agenta) (0.12.3)\n",
+ "Requirement already satisfied: httpcore==1.* in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from httpx<0.28,>=0.24->agenta) (1.0.4)\n",
+ "Requirement already satisfied: anyio in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from httpx<0.28,>=0.24->agenta) (3.6.2)\n",
+ "Requirement already satisfied: sniffio in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from httpx<0.28,>=0.24->agenta) (1.2.0)\n",
+ "Requirement already satisfied: certifi in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from httpx<0.28,>=0.24->agenta) (2023.11.17)\n",
+ "Requirement already satisfied: h11<0.15,>=0.13 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from httpcore==1.*->httpx<0.28,>=0.24->agenta) (0.14.0)\n",
+ "Requirement already satisfied: zipp>=0.5 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from importlib-metadata<8.0,>=6.7->agenta) (3.6.0)\n",
+ "Requirement already satisfied: tomli in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipdb>=0.13->agenta) (2.0.1)\n",
+ "Requirement already satisfied: ipython>=7.31.1 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipdb>=0.13->agenta) (8.13.2)\n",
+ "Requirement already satisfied: decorator in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipdb>=0.13->agenta) (5.1.0)\n",
+ "Requirement already satisfied: stack-data in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (0.6.2)\n",
+ "Requirement already satisfied: pexpect>4.3 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (4.8.0)\n",
+ "Requirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (3.0.38)\n",
+ "Requirement already satisfied: jedi>=0.16 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (0.18.0)\n",
+ "Requirement already satisfied: pickleshare in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (0.7.5)\n",
+ "Requirement already satisfied: matplotlib-inline in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (0.1.2)\n",
+ "Requirement already satisfied: backcall in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (0.2.0)\n",
+ "Requirement already satisfied: traitlets>=5 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (5.1.0)\n",
+ "Requirement already satisfied: appnope in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (0.1.2)\n",
+ "Requirement already satisfied: pygments>=2.4.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from ipython>=7.31.1->ipdb>=0.13->agenta) (2.10.0)\n",
+ "Requirement already satisfied: parso<0.9.0,>=0.8.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from jedi>=0.16->ipython>=7.31.1->ipdb>=0.13->agenta) (0.8.2)\n",
+ "Requirement already satisfied: MarkupSafe>=2.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from jinja2>=2.11.2->fastapi>=0.100.0->agenta) (2.1.1)\n",
+ "Requirement already satisfied: ptyprocess>=0.5 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from pexpect>4.3->ipython>=7.31.1->ipdb>=0.13->agenta) (0.7.0)\n",
+ "Requirement already satisfied: backoff>=1.10.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from posthog<4.0.0,>=3.1.0->agenta) (1.10.0)\n",
+ "Requirement already satisfied: python-dateutil>2.1 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from posthog<4.0.0,>=3.1.0->agenta) (2.8.2)\n",
+ "Requirement already satisfied: monotonic>=1.5 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from posthog<4.0.0,>=3.1.0->agenta) (1.6)\n",
+ "Requirement already satisfied: six>=1.5 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from posthog<4.0.0,>=3.1.0->agenta) (1.16.0)\n",
+ "Requirement already satisfied: wcwidth in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=7.31.1->ipdb>=0.13->agenta) (0.2.5)\n",
+ "Requirement already satisfied: annotated-types>=0.4.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from pydantic>=2->agenta) (0.5.0)\n",
+ "Requirement already satisfied: pydantic-core==2.18.4 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from pydantic>=2->agenta) (2.18.4)\n",
+ "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from requests>=2.26.0->docker<8.0.0,>=6.1.1->agenta) (2.0.4)\n",
+ "Requirement already satisfied: rich>=10.11.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from typer>=0.12.3->fastapi-cli>=0.0.2->fastapi>=0.100.0->agenta) (12.6.0)\n",
+ "Requirement already satisfied: shellingham>=1.3.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from typer>=0.12.3->fastapi-cli>=0.0.2->fastapi>=0.100.0->agenta) (1.5.4)\n",
+ "Requirement already satisfied: commonmark<0.10.0,>=0.9.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from rich>=10.11.0->typer>=0.12.3->fastapi-cli>=0.0.2->fastapi>=0.100.0->agenta) (0.9.1)\n",
+ "Requirement already satisfied: httptools>=0.5.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from uvicorn[standard]>=0.12.0->fastapi>=0.100.0->agenta) (0.6.1)\n",
+ "Requirement already satisfied: watchfiles>=0.13 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from uvicorn[standard]>=0.12.0->fastapi>=0.100.0->agenta) (0.22.0)\n",
+ "Requirement already satisfied: websockets>=10.4 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from uvicorn[standard]>=0.12.0->fastapi>=0.100.0->agenta) (10.4)\n",
+ "Requirement already satisfied: uvloop!=0.15.0,!=0.15.1,>=0.14.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from uvicorn[standard]>=0.12.0->fastapi>=0.100.0->agenta) (0.19.0)\n",
+ "Requirement already satisfied: pyyaml>=5.1 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from uvicorn[standard]>=0.12.0->fastapi>=0.100.0->agenta) (6.0.1)\n",
+ "Requirement already satisfied: asttokens>=2.1.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from stack-data->ipython>=7.31.1->ipdb>=0.13->agenta) (2.2.1)\n",
+ "Requirement already satisfied: pure-eval in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from stack-data->ipython>=7.31.1->ipdb>=0.13->agenta) (0.2.2)\n",
+ "Requirement already satisfied: executing>=1.2.0 in /Users/mahmoudmabrouk/opt/anaconda3/lib/python3.9/site-packages (from stack-data->ipython>=7.31.1->ipdb>=0.13->agenta) (1.2.0)\n"
+ ]
+ }
+ ],
+ "source": [
+ "! pip install -U agenta"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Configuration Setup\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[App(app_id='666dde95962bbaffdb0072b5', app_name='product-classification'),\n",
+ " App(app_id='666fde62962bbaffdb0073d9', app_name='product-title-generation'),\n",
+ " App(app_id='66704efa962bbaffdb007574', app_name='project-qa'),\n",
+ " App(app_id='6670570b962bbaffdb0075a7', app_name='project-qa-prompt-rewriting'),\n",
+ " App(app_id='667d8cfad1812781f7e375d9', app_name='find_capital')]"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Assuming an application has already been created through the user interface, you will need to obtain the application ID.\n",
+ "# In this example we will use the default template single_prompt which has the prompt \"Determine the capital of {country}\"\n",
+ "\n",
+ "# You can find the application ID in the URL. For example, in the URL https://cloud.agenta.ai/apps/666dde95962bbaffdb0072b5/playground?variant=app.default, the application ID is `666dde95962bbaffdb0072b5`.\n",
+ "from agenta.client.backend.client import AgentaApi\n",
+ "# Let's list the applications\n",
+ "client.apps.list_apps()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "app_id = \"667d8cfad1812781f7e375d9\"\n",
+ "\n",
+ "# You can create the API key under the settings page. If you are using the OSS version, you should keep this as an empty string\n",
+ "api_key = \"EUqJGOUu.xxxx\"\n",
+ "\n",
+ "# Host. \n",
+ "host = \"https://cloud.agenta.ai\"\n",
+ "\n",
+ "# Initialize the client\n",
+ "\n",
+ "client = AgentaApi(base_url=host + \"/api\", api_key=api_key)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Create a test set"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'status': 'success',\n",
+ " 'message': 'testset updated successfully',\n",
+ " '_id': '667d8ecfd1812781f7e375eb'}"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from agenta.client.backend.types.new_testset import NewTestset\n",
+ "\n",
+ "csvdata = [\n",
+ " {\"country\": \"france\", \"capital\": \"Paris\"},\n",
+ " {\"country\": \"Germany\", \"capital\": \"paris\"}\n",
+ " ]\n",
+ "\n",
+ "response = client.testsets.create_testset(app_id=app_id, request=NewTestset(name=\"test set\", csvdata=csvdata))\n",
+ "test_set_id = response.id\n",
+ "\n",
+ "# let's now update it\n",
+ "\n",
+ "csvdata = [\n",
+ " {\"country\": \"france\", \"capital\": \"Paris\"},\n",
+ " {\"country\": \"Germany\", \"capital\": \"Berlin\"}\n",
+ " ]\n",
+ "\n",
+ "client.testsets.update_testset(testset_id=test_set_id, request=NewTestset(name=\"test set\", csvdata=csvdata))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Create evaluators"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Create an evaluator that performs an exact match comparison on the 'capital' column\n",
+ "# You can find the list of evaluator keys and evaluators and their configurations in https://github.com/Agenta-AI/agenta/blob/main/agenta-backend/agenta_backend/resources/evaluators/evaluators.py\n",
+ "response = client.evaluators.create_new_evaluator_config(app_id=app_id, name=\"capital_evaluator\", evaluator_key=\"auto_exact_match\", settings_values={\"correct_answer_key\": \"capital\"})\n",
+ "exact_match_eval_id = response.id\n",
+ "\n",
+ "code_snippet = \"\"\"\n",
+ "from typing import Dict\n",
+ "\n",
+ "def evaluate(\n",
+ " app_params: Dict[str, str],\n",
+ " inputs: Dict[str, str],\n",
+ " output: str, # output of the llm app\n",
+ " datapoint: Dict[str, str] # contains the testset row \n",
+ ") -> float:\n",
+ " if output and output[0].isupper():\n",
+ " return 1.0\n",
+ " else:\n",
+ " return 0.0\n",
+ "\"\"\"\n",
+ "\n",
+ "response = client.evaluators.create_new_evaluator_config(app_id=app_id, name=\"capital_letter_evaluator\", evaluator_key=\"auto_custom_code_run\", settings_values={\"code\": code_snippet})\n",
+ "letter_match_eval_id = response.id"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[EvaluatorConfig(id='667d8cfbd1812781f7e375e2', name='Exact Match', evaluator_key='auto_exact_match', settings_values={'correct_answer_key': 'correct_answer'}, created_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000), updated_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000)),\n",
+ " EvaluatorConfig(id='667d8cfbd1812781f7e375e3', name='Contains Json', evaluator_key='auto_contains_json', settings_values={}, created_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000), updated_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000)),\n",
+ " EvaluatorConfig(id='667d8ed6d1812781f7e375ec', name='capital_evaluator', evaluator_key='auto_exact_match', settings_values={'correct_answer_key': 'capital'}, created_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000), updated_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000)),\n",
+ " EvaluatorConfig(id='667d8ed6d1812781f7e375ed', name='capital_letter_evaluator', evaluator_key='auto_custom_code_run', settings_values={'code': '\\nfrom typing import Dict\\n\\ndef evaluate(\\n app_params: Dict[str, str],\\n inputs: Dict[str, str],\\n output: str, # output of the llm app\\n datapoint: Dict[str, str] # contains the testset row \\n) -> float:\\n if output and output[0].isupper():\\n return 1.0\\n else:\\n return 0.0\\n'}, created_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000), updated_at=datetime.datetime(2024, 6, 26, 12, 22, 31, 775000))]"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# get list of all evaluators\n",
+ "client.evaluators.get_evaluator_configs(app_id=app_id)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Run an evaluation"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[AppVariantResponse(app_id='667d8cfad1812781f7e375d9', app_name='find_capital', variant_id='667d8cfbd1812781f7e375df', variant_name='app.default', parameters={'temperature': 1.0, 'model': 'gpt-3.5-turbo', 'max_tokens': -1, 'prompt_system': 'You are an expert in geography.', 'prompt_user': 'What is the capital of {country}?', 'top_p': 1.0, 'frequence_penalty': 0.0, 'presence_penalty': 0.0, 'force_json': 0}, previous_variant_name=None, user_id='666dde45962bbaffdb0072b2', base_name='app', base_id='667d8cfbd1812781f7e375de', config_name='default', uri='https://vmripsmtbzlysdbptjl4hzrbga0ckadr.lambda-url.eu-central-1.on.aws', revision=1, organization_id='666dde45962bbaffdb0072b3', workspace_id='666dde45962bbaffdb0072b4')]\n"
+ ]
+ }
+ ],
+ "source": [
+ "response = client.apps.list_app_variants(app_id=app_id)\n",
+ "print(response)\n",
+ "myvariant_id = response[0].variant_id"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[Evaluation(id='667d98fbd1812781f7e3761a', app_id='667d8cfad1812781f7e375d9', user_id='666dde45962bbaffdb0072b2', user_username='mahmoud+demo', variant_ids=['667d8cfbd1812781f7e375df'], variant_names=['app.default'], variant_revision_ids=['667d8d0dd1812781f7e375e7'], revisions=['1'], testset_id='667d8ecfd1812781f7e375eb', testset_name='test set', status=Result(type='status', value='EVALUATION_STARTED', error=None), aggregated_results=[], average_cost=None, total_cost=None, average_latency=None, created_at=datetime.datetime(2024, 6, 27, 16, 53, 15, 281313, tzinfo=datetime.timezone.utc), updated_at=datetime.datetime(2024, 6, 27, 16, 53, 15, 281328, tzinfo=datetime.timezone.utc))]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Run an evaluation\n",
+ "from agenta.client.backend.types.llm_run_rate_limit import LlmRunRateLimit\n",
+ "response = client.evaluations.create_evaluation(app_id=app_id, variant_ids=[myvariant_id], testset_id=test_set_id, evaluators_configs=[exact_match_eval_id, letter_match_eval_id],\n",
+ " rate_limit=LlmRunRateLimit(\n",
+ " batch_size=10, # number of rows to call in parallel\n",
+ " max_retries=3, # max number of time to retry a failed llm call\n",
+ " retry_delay=2, # delay before retrying a failed llm call\n",
+ " delay_between_batches=5, # delay between batches\n",
+ " ),)\n",
+ "print(response)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'status': {'type': 'status', 'value': 'EVALUATION_FINISHED', 'error': None}}"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# check the status\n",
+ "client.evaluations.fetch_evaluation_status('667d98fbd1812781f7e3761a')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[('capital_evaluator', {'type': 'number', 'value': 0.0, 'error': None}), ('capital_letter_evaluator', {'type': 'number', 'value': 1.0, 'error': None})]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# fetch the overall results\n",
+ "response = client.evaluations.fetch_evaluation_results('667d98fbd1812781f7e3761a')\n",
+ "\n",
+ "results = [(evaluator[\"evaluator_config\"][\"name\"], evaluator[\"result\"]) for evaluator in response[\"results\"]]\n",
+ "# End of Selection"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'inputs': [{'input_name': 'country', 'input_value': 'france'},\n",
+ " {'input_name': 'capital', 'input_value': 'Paris'},\n",
+ " {'input_name': 'country', 'input_value': 'Germany'},\n",
+ " {'input_name': 'capital', 'input_value': 'Berlin'}],\n",
+ " 'data': [{'input_name': 'country',\n",
+ " 'input_value': 'france',\n",
+ " 'scenarios': [{'id': '667d994d72010c439240463a',\n",
+ " 'evaluation_id': '667d98fbd1812781f7e3761a',\n",
+ " 'inputs': [{'name': 'country', 'type': 'text', 'value': 'france'}],\n",
+ " 'outputs': [{'result': {'type': 'text',\n",
+ " 'value': 'The capital of France is Paris.',\n",
+ " 'error': None},\n",
+ " 'cost': 5.1500000000000005e-05,\n",
+ " 'latency': 1.1813}],\n",
+ " 'evaluation': None,\n",
+ " 'correct_answers': [{'key': 'capital', 'value': 'Paris'},\n",
+ " {'key': '', 'value': ''}],\n",
+ " 'is_pinned': False,\n",
+ " 'note': '',\n",
+ " 'results': [{'evaluator_config': '667d8ed6d1812781f7e375ec',\n",
+ " 'result': {'type': 'bool', 'value': False, 'error': None}},\n",
+ " {'evaluator_config': '667d8ed6d1812781f7e375ed',\n",
+ " 'result': {'type': 'number', 'value': 1.0, 'error': None}}]}]},\n",
+ " {'input_name': 'capital', 'input_value': 'Paris', 'scenarios': []},\n",
+ " {'input_name': 'country',\n",
+ " 'input_value': 'Germany',\n",
+ " 'scenarios': [{'id': '667d994d72010c439240463b',\n",
+ " 'evaluation_id': '667d98fbd1812781f7e3761a',\n",
+ " 'inputs': [{'name': 'country', 'type': 'text', 'value': 'Germany'}],\n",
+ " 'outputs': [{'result': {'type': 'text',\n",
+ " 'value': 'The capital of Germany is Berlin.',\n",
+ " 'error': None},\n",
+ " 'cost': 5.1500000000000005e-05,\n",
+ " 'latency': 0.9169}],\n",
+ " 'evaluation': None,\n",
+ " 'correct_answers': [{'key': 'capital', 'value': 'Berlin'},\n",
+ " {'key': '', 'value': ''}],\n",
+ " 'is_pinned': False,\n",
+ " 'note': '',\n",
+ " 'results': [{'evaluator_config': '667d8ed6d1812781f7e375ec',\n",
+ " 'result': {'type': 'bool', 'value': False, 'error': None}},\n",
+ " {'evaluator_config': '667d8ed6d1812781f7e375ed',\n",
+ " 'result': {'type': 'number', 'value': 1.0, 'error': None}}]}]},\n",
+ " {'input_name': 'capital', 'input_value': 'Berlin', 'scenarios': []}]}"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# fetch the detailed results\n",
+ "client.evaluations.fetch_evaluation_scenarios(evaluations_ids='667d98fbd1812781f7e3761a')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "base",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.7"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
From dfe9ef99228a63a138ebe03608ffda18c1f276b0 Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Thu, 27 Jun 2024 19:25:01 +0200
Subject: [PATCH 17/25] Rename creating_evaluators_with_sdk.ipynb to
evaluations_with_sdk.ipynb
---
...ating_evaluators_with_sdk.ipynb => evaluations_with_sdk.ipynb} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename cookbook/{creating_evaluators_with_sdk.ipynb => evaluations_with_sdk.ipynb} (100%)
diff --git a/cookbook/creating_evaluators_with_sdk.ipynb b/cookbook/evaluations_with_sdk.ipynb
similarity index 100%
rename from cookbook/creating_evaluators_with_sdk.ipynb
rename to cookbook/evaluations_with_sdk.ipynb
From fe9e1f2c605fde09d6a967360d11713e5fe0f68e Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Thu, 27 Jun 2024 19:42:18 +0200
Subject: [PATCH 18/25] docs(tool): AGE-367 add doc for using sdk
Closes: AGE-367
---
docs/guides/evaluation_from_sdk.mdx | 107 ++++++++++++++++++++++++++++
docs/mint.json | 7 ++
2 files changed, 114 insertions(+)
create mode 100644 docs/guides/evaluation_from_sdk.mdx
diff --git a/docs/guides/evaluation_from_sdk.mdx b/docs/guides/evaluation_from_sdk.mdx
new file mode 100644
index 000000000..3a2e3620b
--- /dev/null
+++ b/docs/guides/evaluation_from_sdk.mdx
@@ -0,0 +1,107 @@
+---
+title: "Running Evaluations with SDK"
+---
+
+
+ This guide is also available as a [Jupyter
+ Notebook](https://github.com/Agenta-AI/agenta/blob/main/cookbook/evaluations_with_sdk.ipynb).
+
+
+## Introduction
+
+In this guide, we'll demonstrate how to interact programmatically with evaluations in the Agenta platform using the SDK (or the raw API). This will include:
+
+- Creating a test set
+- Configuring an evaluator
+- Running an evaluation
+- Retrieving the results of evaluations
+
+This assumes that you have already created an LLM application and variants in Agenta.
+
+## Architectural Overview
+
+Evaluations are executed on the Agenta backend. Specifically, Agenta invokes the LLM application for each row in the test set and processes the output using the designated evaluator. Operations are managed through Celery tasks. The interactions with the LLM application are asynchronous, batched, and include retry mechanisms. The batching configuration can be adjusted to avoid exceeding rate limits imposed by the LLM provider.
+
+## Setup
+
+### Installation
+
+Ensure that the Agenta SDK is installed and up-to-date in your development environment:
+
+```bash
+pip install -U agenta
+```
+
+### Configuration
+
+After setting up your environment, you need to configure the SDK:
+
+```python
+from agenta.client.backend.client import AgentaApi
+
+# Set up your application ID and API key
+app_id = "your_app_id"
+api_key = "your_api_key"
+host = "https://cloud.agenta.ai"
+
+# Initialize the client
+client = AgentaApi(base_url=host + "/api", api_key=api_key)
+```
+
+## Create a Test Set
+
+You can create and update test sets as follows:
+
+```python
+from agenta.client.backend.types.new_testset import NewTestset
+
+# Example data for the test set
+csvdata = [
+ {"country": "France", "capital": "Paris"},
+ {"country": "Germany", "capital": "Berlin"}
+]
+
+# Create a new test set
+response = client.testsets.create_testset(app_id=app_id, request=NewTestset(name="Test Set", csvdata=csvdata))
+test_set_id = response.id
+```
+
+## Create Evaluators
+
+Set up evaluators that will assess the performance based on specific criteria:
+
+```python
+# Create an exact match evaluator
+response = client.evaluators.create_new_evaluator_config(
+ app_id=app_id, name="Capital Evaluator", evaluator_key="auto_exact_match",
+ settings_values={"correct_answer_key": "capital"}
+)
+exact_match_eval_id = response.id
+```
+
+## Run an Evaluation
+
+Execute an evaluation using the previously defined test set and evaluators:
+
+```python
+from agenta.client.backend.types.llm_run_rate_limit import LlmRunRateLimit
+
+response = client.evaluations.create_evaluation(
+ app_id=app_id, variant_ids=["your_variant_id"], testset_id=test_set_id,
+ evaluators_configs=[exact_match_eval_id],
+ rate_limit=LlmRunRateLimit(batch_size=10, max_retries=3, retry_delay=2, delay_between_batches=5)
+)
+```
+
+## Retrieve Results
+
+After running the evaluation, fetch the results to see how well the model performed against the test set:
+
+```python
+results = client.evaluations.fetch_evaluation_results("your_evaluation_id")
+print(results)
+```
+
+## Conclusion
+
+This guide covers the basic steps for using the SDK to manage evaluations within Agenta.
diff --git a/docs/mint.json b/docs/mint.json
index 1ae772ad3..f425367ca 100644
--- a/docs/mint.json
+++ b/docs/mint.json
@@ -343,7 +343,14 @@
"guides/tutorials/deploy-mistral-model",
"guides/extract_job_information"
]
+ },
+ {
+ "group": "Cookbooks",
+ "pages": [
+ "guides/evaluation_from_sdk"
+ ]
}
+
],
"api": {
"baseUrl": "http://localhost/api"
From 65dc7124226c5f6d074d210da4556a14fe021302 Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Fri, 28 Jun 2024 13:38:49 +0200
Subject: [PATCH 19/25] fix(sdk): AGE-341 added failsafe for usage in litell
added failsafe for usage in litellm so taht even when usage does not exit the app does not throw an error
Closes: AGE-341
---
agenta-cli/agenta/sdk/tracing/callbacks.py | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/agenta-cli/agenta/sdk/tracing/callbacks.py b/agenta-cli/agenta/sdk/tracing/callbacks.py
index 9ab5e23c1..9a5f93105 100644
--- a/agenta-cli/agenta/sdk/tracing/callbacks.py
+++ b/agenta-cli/agenta/sdk/tracing/callbacks.py
@@ -55,7 +55,7 @@ def log_stream_event(self, kwargs, response_obj, start_time, end_time):
"message": kwargs.get(
"complete_streaming_response"
), # the complete streamed response (only set if `completion(..stream=True)`)
- "usage": response_obj.usage.dict(), # litellm calculates usage
+ "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -69,7 +69,7 @@ def log_success_event(
self._trace.end_span(
outputs={
"message": response_obj.choices[0].message.content,
- "usage": response_obj.usage.dict(), # litellm calculates usage
+ "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -93,7 +93,7 @@ def log_failure_event(
self._trace.end_span(
outputs={
"message": kwargs["exception"], # the Exception raised
- "usage": response_obj.usage.dict(), # litellm calculates usage
+ "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -109,7 +109,7 @@ async def async_log_stream_event(
"message": kwargs.get(
"complete_streaming_response"
), # the complete streamed response (only set if `completion(..stream=True)`)
- "usage": response_obj.usage.dict(), # litellm calculates usage
+ "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -123,7 +123,7 @@ async def async_log_success_event(
self._trace.end_span(
outputs={
"message": response_obj.choices[0].message.content,
- "usage": response_obj.usage.dict(), # litellm calculates usage
+ "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -147,7 +147,7 @@ async def async_log_failure_event(
self._trace.end_span(
outputs={
"message": kwargs["exception"], # the Exception raised
- "usage": response_obj.usage.dict(), # litellm calculates usage
+ "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
From 969001f932288855bf204317ba9517424e89388e Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Fri, 28 Jun 2024 13:39:55 +0200
Subject: [PATCH 20/25] chore(sdk): bump
---
agenta-cli/pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/agenta-cli/pyproject.toml b/agenta-cli/pyproject.toml
index a3fc9fb07..c58cd169c 100644
--- a/agenta-cli/pyproject.toml
+++ b/agenta-cli/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "agenta"
-version = "0.17.5"
+version = "0.17.6a"
description = "The SDK for agenta is an open-source LLMOps platform."
readme = "README.md"
authors = ["Mahmoud Mabrouk "]
From 624827275fab9694f586f30da9bb306d5b956e69 Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Fri, 28 Jun 2024 14:23:06 +0200
Subject: [PATCH 21/25] chore(sdk): AGE-341 format
---
agenta-cli/agenta/sdk/tracing/callbacks.py | 24 ++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/agenta-cli/agenta/sdk/tracing/callbacks.py b/agenta-cli/agenta/sdk/tracing/callbacks.py
index 9a5f93105..c69871a91 100644
--- a/agenta-cli/agenta/sdk/tracing/callbacks.py
+++ b/agenta-cli/agenta/sdk/tracing/callbacks.py
@@ -55,7 +55,9 @@ def log_stream_event(self, kwargs, response_obj, start_time, end_time):
"message": kwargs.get(
"complete_streaming_response"
), # the complete streamed response (only set if `completion(..stream=True)`)
- "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
+ "usage": response_obj.usage.dict()
+ if hasattr(response_obj, "usage")
+ else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -69,7 +71,9 @@ def log_success_event(
self._trace.end_span(
outputs={
"message": response_obj.choices[0].message.content,
- "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
+ "usage": response_obj.usage.dict()
+ if hasattr(response_obj, "usage")
+ else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -93,7 +97,9 @@ def log_failure_event(
self._trace.end_span(
outputs={
"message": kwargs["exception"], # the Exception raised
- "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
+ "usage": response_obj.usage.dict()
+ if hasattr(response_obj, "usage")
+ else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -109,7 +115,9 @@ async def async_log_stream_event(
"message": kwargs.get(
"complete_streaming_response"
), # the complete streamed response (only set if `completion(..stream=True)`)
- "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
+ "usage": response_obj.usage.dict()
+ if hasattr(response_obj, "usage")
+ else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -123,7 +131,9 @@ async def async_log_success_event(
self._trace.end_span(
outputs={
"message": response_obj.choices[0].message.content,
- "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
+ "usage": response_obj.usage.dict()
+ if hasattr(response_obj, "usage")
+ else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
@@ -147,7 +157,9 @@ async def async_log_failure_event(
self._trace.end_span(
outputs={
"message": kwargs["exception"], # the Exception raised
- "usage": response_obj.usage.dict() if hasattr(response_obj, "usage") else None, # litellm calculates usage
+ "usage": response_obj.usage.dict()
+ if hasattr(response_obj, "usage")
+ else None, # litellm calculates usage
"cost": kwargs.get(
"response_cost"
), # litellm calculates response cost
From 0a8167d988b3b97986f53287eb46afa9ea500748 Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Fri, 28 Jun 2024 14:23:56 +0200
Subject: [PATCH 22/25] chore(sdk): AGE-341 bump ve
---
agenta-cli/pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/agenta-cli/pyproject.toml b/agenta-cli/pyproject.toml
index c58cd169c..a12b40388 100644
--- a/agenta-cli/pyproject.toml
+++ b/agenta-cli/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "agenta"
-version = "0.17.6a"
+version = "0.17.6a0"
description = "The SDK for agenta is an open-source LLMOps platform."
readme = "README.md"
authors = ["Mahmoud Mabrouk "]
From 78472f2a3afa5f1b6652c8e59f9848996c44e54b Mon Sep 17 00:00:00 2001
From: Kaosiso Ezealigo
Date: Fri, 28 Jun 2024 18:40:59 +0100
Subject: [PATCH 23/25] docs(tool): corrected docs links in github readme
---
README.md | 58 +++++++++++++++++++++++++++++--------------------------
1 file changed, 31 insertions(+), 27 deletions(-)
diff --git a/README.md b/README.md
index 4c71c00d7..2c1483f5c 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,6 @@
-
@@ -55,7 +54,6 @@
-
@@ -64,7 +62,6 @@
-
@@ -96,54 +93,58 @@
# โญ๏ธ Why Agenta?
-Agenta is an end-to-end LLM developer platform. It provides the tools for **prompt engineering and management**, โ๏ธ **evaluation**, **human annotation**, and :rocket: **deployment**. All without imposing any restrictions on your choice of framework, library, or model.
+Agenta is an end-to-end LLM developer platform. It provides the tools for **prompt engineering and management**, โ๏ธ **evaluation**, **human annotation**, and :rocket: **deployment**. All without imposing any restrictions on your choice of framework, library, or model.
-Agenta allows developers and product teams to collaborate in building production-grade LLM-powered applications in less time.
+Agenta allows developers and product teams to collaborate in building production-grade LLM-powered applications in less time.
### With Agenta, you can:
-- [๐งช **Experiment** and **compare** prompts](https://docs.agenta.ai/basic_guides/prompt_engineering) on [any LLM workflow](https://docs.agenta.ai/advanced_guides/custom_applications) (chain-of-prompts, Retrieval Augmented Generation (RAG), LLM agents...)
-- โ๏ธ Collect and [**annotate golden test sets**](https://docs.agenta.ai/basic_guides/test_sets) for evaluation
-- ๐ [**Evaluate** your application](https://docs.agenta.ai/basic_guides/automatic_evaluation) with pre-existing or [**custom evaluators**](https://docs.agenta.ai/advanced_guides/using_custom_evaluators)
-- [๐ **Annotate** and **A/B test**](https://docs.agenta.aibasic_guides/human_evaluation) your applications with **human feedback**
-- [๐ค **Collaborate with product teams**](https://docs.agenta.ai/basic_guides/team_management) for prompt engineering and evaluation
-- [๐ **Deploy your application**](https://docs.agenta.ai/basic_guides/deployment) in one-click in the UI, through CLI, or through github workflows.
+- [๐งช **Experiment** and **compare** prompts](https://docs.agenta.ai/prompt_management/prompt_engineering) on [any LLM workflow](https://docs.agenta.ai/prompt_management/custom_applications) (chain-of-prompts, Retrieval Augmented Generation (RAG), LLM agents...)
+- โ๏ธ Collect and [**annotate golden test sets**](https://docs.agenta.ai/evaluation/test_sets) for evaluation
+- ๐ [**Evaluate** your application](https://docs.agenta.ai/evaluation/automatic_evaluation) with pre-existing or [**custom evaluators**](https://docs.agenta.ai/evaluation/custom_evaluator)
+- [๐ **Annotate** and **A/B test**](https://docs.agenta.ai/evaluation/human_evaluation) your applications with **human feedback**
+- [๐ค **Collaborate with product teams**](https://docs.agenta.ai/misc/team_management) for prompt engineering and evaluation
+- [๐ **Deploy your application**](https://docs.agenta.ai/prompt_management/deployment) in one-click in the UI, through CLI, or through github workflows.
### Works with any LLM app workflow
Agenta enables prompt engineering and evaluation on any LLM app architecture:
+
- Chain of prompts
- RAG
- Agents
-- ...
-It works with any framework such as [Langchain](https://langchain.com), [LlamaIndex](https://www.llamaindex.ai/) and any LLM provider (openAI, Cohere, Mistral).
-
-[Jump here to see how to use your own custom application with agenta](/advanced_guides/custom_applications)
+It works with any framework such as [Langchain](https://langchain.com), [LlamaIndex](https://www.llamaindex.ai/) and any LLM provider (openAI, Cohere, Mistral).
# Quick Start
### [Get started for free](https://cloud.agenta.ai?utm_source=github&utm_medium=readme&utm_campaign=github)
-### [Explore the Docs](https://docs.agenta.ai)
-### [Create your first application in one-minute](https://docs.agenta.ai/quickstart/getting-started-ui)
-### [Create an application using Langchain](https://docs.agenta.ai/tutorials/first-app-with-langchain)
+
+### [Explore the Docs](https://docs.agenta.ai/getting_started/introduction)
+
+### [Create your first application in one-minute](https://docs.agenta.ai/getting_started/quick-start)
+
+### [Create an application using Langchain](https://docs.agenta.ai/guides/tutorials/first-app-with-langchain)
+
### [Self-host agenta](https://docs.agenta.ai/self-host/host-locally)
-### [Check the Cookbook](https://docs.agenta.ai/cookbook)
-# Features
+### [Check the Cookbook](https://docs.agenta.ai/guides/evaluation_from_sdk)
+# Features
-| Playground | Evaluation |
-| ------- | ------- |
-| Compare and version prompts for any LLM app, from single prompt to agents. | Define test sets, then evaluate manually or programmatically your different variants. |
-| Human annotation | Deployment |
-| Use Human annotator to A/B test and score your LLM apps. | When you are ready, deploy your LLM applications as APIs in one click. ![](https://github.com/Agenta-AI/agenta/blob/main/docs/images/endpoint.gif) |
+| Playground | Evaluation |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Compare and version prompts for any LLM app, from single prompt to agents. | Define test sets, then evaluate manually or programmatically your different variants. |
+| Human annotation | Deployment |
+| Use Human annotator to A/B test and score your LLM apps. | When you are ready, deploy your LLM applications as APIs in one click. ![](https://github.com/Agenta-AI/agenta/blob/main/docs/images/endpoint.gif) |
# Enterprise Support
+
Contact us here for enterprise support and early access to agenta self-managed enterprise with Kubernetes support.
# Disabling Anonymized Tracking
+
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:
@@ -154,6 +155,7 @@ To disable anonymized telemetry, follow these steps:
After making this change, restart Agenta Compose.
# โญ๏ธ Join Our Team
+
- [Founding Lead Software Engineer Backend](https://agentaai.notion.site/Founding-Lead-Software-Engineer-Backend-d70bfefed6d543778bc4aa38b543a678)
- [Founding Product Engineer Frontend](https://agentaai.notion.site/Founding-Product-Engineer-Frontend-b6d26a3e9b254be6b6c2bfffbf0b53c5)
- [Founding Product Designer](https://agentaai.notion.site/Founding-Product-Designer-96b1e760ff0241fd96632578d533a778)
@@ -164,12 +166,14 @@ We warmly welcome contributions to Agenta. Feel free to submit issues, fork the
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)
-Check out our [Contributing Guide](https://docs.agenta.ai/contributing/getting-started) for more information.
+Check out our [Contributing Guide](https://docs.agenta.ai/misc/contributing/getting-started) for more information.
## Contributors โจ
+
[![All Contributors](https://img.shields.io/badge/all_contributors-46-orange.svg?style=flat-square)](#contributors-)
+
Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
@@ -190,7 +194,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Pavle Janjusevic ๐
- Kaosi Ezealigo ๐ ๐ป
+ Kaosiso Ezealigo ๐ ๐ป
Alberto Nunes ๐
Maaz Bin Khawar ๐ป ๐ ๐งโ๐ซ
Nehemiah Onyekachukwu Emmanuel ๐ป ๐ก ๐
From 9d5b06f846a6b4769594b162458303970404a0d8 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 2 Jul 2024 04:04:59 +0000
Subject: [PATCH 24/25] build(deps-dev): bump setuptools from 70.1.0 to 70.2.0
in /agenta-cli
Bumps [setuptools](https://github.com/pypa/setuptools) from 70.1.0 to 70.2.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v70.1.0...v70.2.0)
---
updated-dependencies:
- dependency-name: setuptools
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot]
---
agenta-cli/poetry.lock | 12 ++++++------
agenta-cli/pyproject.toml | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/agenta-cli/poetry.lock b/agenta-cli/poetry.lock
index a090925b3..32ccb1619 100644
--- a/agenta-cli/poetry.lock
+++ b/agenta-cli/poetry.lock
@@ -1290,18 +1290,18 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
[[package]]
name = "setuptools"
-version = "70.1.0"
+version = "70.2.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
optional = false
python-versions = ">=3.8"
files = [
- {file = "setuptools-70.1.0-py3-none-any.whl", hash = "sha256:d9b8b771455a97c8a9f3ab3448ebe0b29b5e105f1228bba41028be116985a267"},
- {file = "setuptools-70.1.0.tar.gz", hash = "sha256:01a1e793faa5bd89abc851fa15d0a0db26f160890c7102cd8dce643e886b47f5"},
+ {file = "setuptools-70.2.0-py3-none-any.whl", hash = "sha256:b8b8060bb426838fbe942479c90296ce976249451118ef566a5a0b7d8b78fb05"},
+ {file = "setuptools-70.2.0.tar.gz", hash = "sha256:bd63e505105011b25c3c11f753f7e3b8465ea739efddaccef8f0efac2137bac1"},
]
[package.extras]
-docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "mypy (==1.10.0)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.3.2)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
[[package]]
name = "shellingham"
@@ -1809,4 +1809,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more
[metadata]
lock-version = "2.0"
python-versions = "^3.9"
-content-hash = "ec2c2c9036a752dacfcc4584a6c1868e26813b1f6e7578d3ae2796fd119be3a2"
+content-hash = "95365188fc7c2f1f28f7d354fbcff40bac4c3cbb021a78400f71fa68bf31bce1"
diff --git a/agenta-cli/pyproject.toml b/agenta-cli/pyproject.toml
index a3fc9fb07..3ba8848ef 100644
--- a/agenta-cli/pyproject.toml
+++ b/agenta-cli/pyproject.toml
@@ -34,7 +34,7 @@ cachetools = "^5.3.3"
[tool.poetry.dev-dependencies]
pytest = "^8.2"
-setuptools = "^70.1.0"
+setuptools = "^70.2.0"
[build-system]
requires = ["poetry-core"]
From 5af8bb63f66a0b70294c8e580a74405c7adb8b7b Mon Sep 17 00:00:00 2001
From: Mahmoud Mabrouk
Date: Tue, 2 Jul 2024 08:36:33 +0200
Subject: [PATCH 25/25] Update pyproject.toml
---
agenta-cli/pyproject.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/agenta-cli/pyproject.toml b/agenta-cli/pyproject.toml
index a12b40388..a3fc9fb07 100644
--- a/agenta-cli/pyproject.toml
+++ b/agenta-cli/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "agenta"
-version = "0.17.6a0"
+version = "0.17.5"
description = "The SDK for agenta is an open-source LLMOps platform."
readme = "README.md"
authors = ["Mahmoud Mabrouk "]