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 >
@@ -72,7 +71,6 @@ 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: ( @@ -87,7 +85,6 @@ const NewVariantModal: React.FC = ({
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.