From f5da453c574277b1e6f78dce8cfe61e8af92f2de Mon Sep 17 00:00:00 2001 From: corey Date: Tue, 29 Oct 2024 12:43:34 -0700 Subject: [PATCH 01/12] working changes --- tests/docs_notebooks/test_notebooks.py | 157 ++++++++++++------------- 1 file changed, 78 insertions(+), 79 deletions(-) diff --git a/tests/docs_notebooks/test_notebooks.py b/tests/docs_notebooks/test_notebooks.py index 79b460f2c..1503a0e1a 100644 --- a/tests/docs_notebooks/test_notebooks.py +++ b/tests/docs_notebooks/test_notebooks.py @@ -1,33 +1,47 @@ -import os +import glob from os import listdir import shutil -from typing import Sequence -from unittest import TestCase +from typing import Iterable, Optional from unittest import main +from dotenv import dotenv_values from nbconvert.preprocessors import ExecutePreprocessor +from nbformat import NotebookNode from nbformat import read +import pytest from trulens.core.database.legacy import migration as legacy_migration -class DocsNotebookTests(TestCase): - pass - - class VariableSettingPreprocessor(ExecutePreprocessor): def __init__( self, timeout: int, kernel_name: str, - code_to_run_before_each_cell: Sequence[str], + init_code: Optional[Iterable[str]] = None, + code_to_run_before_each_cell: Optional[Iterable[str]] = None, ): super().__init__(timeout=timeout, kernel_name=kernel_name) - self.code_to_run_before_each_cell = ( - "\n".join(code_to_run_before_each_cell) + "\n" - ) - def preprocess_cell(self, cell, resources, index, **kwargs): + if init_code: + self.init_code = "\n".join(init_code) + "\n" + else: + self.init_code = "" + self.ran_init_code = False + + if code_to_run_before_each_cell: + self.code_to_run_before_each_cell = ( + "\n".join(code_to_run_before_each_cell) + "\n" + ) + else: + self.code_to_run_before_each_cell = "" + + def preprocess_cell( + self, cell: NotebookNode, resources: dict, index: int, **kwargs + ): if cell["cell_type"] == "code": + if not self.ran_init_code: + cell["source"] = self.init_code + cell["source"] + self.ran_init_code = True cell["source"] = self.code_to_run_before_each_cell + cell["source"] ret = super().preprocess_cell(cell, resources, index, **kwargs) return ret @@ -38,12 +52,14 @@ def __init__( self, timeout: int, kernel_name: str, - code_to_run_before_each_cell: Sequence[str], db_compat_version: str, + init_code: Optional[Iterable[str]] = None, + code_to_run_before_each_cell: Optional[Iterable[str]] = None, ): super().__init__( timeout=timeout, kernel_name=kernel_name, + init_code=init_code, code_to_run_before_each_cell=code_to_run_before_each_cell, ) shutil.copyfile( @@ -63,78 +79,61 @@ def preprocess_cell(self, cell, resources, index, **kwargs): return ret -def get_unit_test_for_filename(filename, db_compat_version=None): - def test(self): - OPENAI_API_KEY = os.environ["OPENAI_API_KEY"] - HUGGINGFACE_API_KEY = os.environ["HUGGINGFACE_API_KEY"] - - notebook_preprocessor = VariableSettingPreprocessor - notebook_preprocessor_kwargs = { - "timeout": 600, - "kernel_name": "trulens-llm", - "code_to_run_before_each_cell": [ - "import os", - f"os.environ['OPENAI_API_KEY']='{OPENAI_API_KEY}'", - f"os.environ['HUGGINGFACE_API_KEY']='{HUGGINGFACE_API_KEY}'", - ], - } - if db_compat_version is not None: - notebook_preprocessor = DBMigrationPreprocessor - notebook_preprocessor_kwargs["db_compat_version"] = ( - db_compat_version - ) - with open(f"./tests/docs_notebooks/notebooks_to_test/{filename}") as f: - nb = read(f, as_version=4) - notebook_preprocessor(**notebook_preprocessor_kwargs).preprocess( - nb, {} - ) +NOTEBOOKS_TO_TEST = glob.glob( + "./tests/docs_notebooks/notebooks_to_test/**/*.ipynb" +) + - return test +@pytest.mark.parametrize("filename", NOTEBOOKS_TO_TEST) +def test_notebook(filename): + env: dict = dotenv_values("tests/docs_notebooks/.env") + cell_start_code = ["import os"] + for key, value in env.items(): + cell_start_code.append(f"os.environ['{key}'] = '{value}'") + notebook_preprocessor = VariableSettingPreprocessor + notebook_preprocessor_kwargs = { + "timeout": 600, + "kernel_name": "trulens-llm", + "code_to_run_before_each_cell": cell_start_code, + } + with open(filename) as f: + nb = read(f, as_version=4) + notebook_preprocessor(**notebook_preprocessor_kwargs).preprocess(nb, {}) -NOTEBOOKS_TO_TEST_BACKWARDS_COMPATIBILITY = [ - "langchain_quickstart.ipynb", - "llama_index_quickstart.ipynb", - "quickstart.ipynb", - "prototype_evals.ipynb", - "human_feedback.ipynb", - "groundtruth_evals.ipynb", - "logging.ipynb", + +legacy_sqllite_migrations = [ + legacy_migration.migration_versions[0], + legacy_migration.migration_versions[-1], ] -for filename in listdir("./tests/docs_notebooks/notebooks_to_test/"): - if filename.endswith(".ipynb"): - setattr( - DocsNotebookTests, - "test_" + filename.split(".ipynb")[0], - get_unit_test_for_filename(filename), - ) +sqlalchemy_versions = [ + compat_versions + for compat_versions in listdir("./release_dbs") + if "sql_alchemy_" in compat_versions +] +migrations_to_test = legacy_sqllite_migrations + sqlalchemy_versions + + +@pytest.mark.parametrize("filename", NOTEBOOKS_TO_TEST) +@pytest.mark.parametrize("db_compat_version", migrations_to_test) +def test_notebook_backwards_compat(filename: str, db_compat_version: str): + env: dict = dotenv_values("tests/docs_notebooks/.env") + cell_start_code = ["import os"] + for key, value in env.items(): + cell_start_code.append(f"os.environ['{key}'] = '{value}'") + + notebook_preprocessor = DBMigrationPreprocessor + notebook_preprocessor_kwargs = { + "timeout": 600, + "kernel_name": "trulens-llm", + "code_to_run_before_each_cell": cell_start_code, + "db_compat_version": db_compat_version, + } + with open(filename) as f: + nb = read(f, as_version=4) + notebook_preprocessor(**notebook_preprocessor_kwargs).preprocess(nb, {}) - if filename in NOTEBOOKS_TO_TEST_BACKWARDS_COMPATIBILITY: - # If you want to test all versions uncomment and replace the below for loop - ### for version in migration.migration_versions: - - # Run the oldest and latest migrations to keep testing more manageable - legacy_sqllite_migrations = [ - legacy_migration.migration_versions[0], - legacy_migration.migration_versions[-1], - ] - sqlalchemy_versions = [ - compat_versions - for compat_versions in listdir("./release_dbs") - if "sql_alchemy_" in compat_versions - ] - # Todo: once there are more than 2 migrations; make tests only check most 2 recent, and oldest migrations to make testing faster - migrations_to_test = legacy_sqllite_migrations + sqlalchemy_versions - for version in migrations_to_test: - test_version_str = version.replace(".", "_") - setattr( - DocsNotebookTests, - f"test_db_backwards_compat_{test_version_str}_{filename.split('.ipynb')[0]}", - get_unit_test_for_filename( - filename, db_compat_version=version - ), - ) if __name__ == "__main__": main() From e2d4ef8f2e8f403c4cc6b634aac9b7a139a278ae Mon Sep 17 00:00:00 2001 From: corey Date: Tue, 29 Oct 2024 14:01:09 -0700 Subject: [PATCH 02/12] fix llamaindex instrumentation --- src/core/trulens/core/instruments.py | 10 ++++++---- src/core/trulens/core/utils/pyschema.py | 5 ++++- tests/docs_notebooks/test_notebooks.py | 5 +++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/core/trulens/core/instruments.py b/src/core/trulens/core/instruments.py index 9c973944a..578ce4e6b 100644 --- a/src/core/trulens/core/instruments.py +++ b/src/core/trulens/core/instruments.py @@ -1129,13 +1129,13 @@ def instrument_object( attrs = obj.keys() vals = obj.values() - if isinstance(obj, pydantic.BaseModel): + elif isinstance(obj, pydantic.BaseModel): # NOTE(piotrm): This will not include private fields like # llama_index's LLMPredictor._llm which might be useful to # include: attrs = obj.model_fields.keys() - if isinstance(obj, v1BaseModel): + elif isinstance(obj, v1BaseModel): attrs = obj.__fields__.keys() elif dataclasses.is_dataclass(type(obj)): @@ -1146,9 +1146,11 @@ def instrument_object( # is meant to be instrumented and if so, we walk over it manually. # NOTE: some llama_index objects are using dataclasses_json but most do # not so this section applies. - attrs = pyschema_utils.clean_attributes( + attrs_map = pyschema_utils.clean_attributes( obj, include_props=True - ).keys() + ) + attrs = attrs_map.keys() + vals = attrs_map.values() if vals is None: vals = [ diff --git a/src/core/trulens/core/utils/pyschema.py b/src/core/trulens/core/utils/pyschema.py index d1411a568..f57174d6a 100644 --- a/src/core/trulens/core/utils/pyschema.py +++ b/src/core/trulens/core/utils/pyschema.py @@ -76,6 +76,8 @@ def safe_getattr(obj: Any, k: str, get_prop: bool = True) -> Any: # OpenAI version 1 classes may cause this isinstance test to raise an # exception. is_prop = isinstance(v, property) + except AttributeError as e: + raise e except Exception as e: return {constant_utils.ERROR: Obj.of_object(e)} @@ -86,7 +88,8 @@ def safe_getattr(obj: Any, k: str, get_prop: bool = True) -> Any: try: v = v.fget(obj) return v - + except AttributeError as e: + raise e except Exception as e: return {constant_utils.ERROR: Obj.of_object(e)} else: diff --git a/tests/docs_notebooks/test_notebooks.py b/tests/docs_notebooks/test_notebooks.py index 1503a0e1a..59f1a9ca5 100644 --- a/tests/docs_notebooks/test_notebooks.py +++ b/tests/docs_notebooks/test_notebooks.py @@ -94,7 +94,7 @@ def test_notebook(filename): notebook_preprocessor = VariableSettingPreprocessor notebook_preprocessor_kwargs = { "timeout": 600, - "kernel_name": "trulens-llm", + "kernel_name": "python3", "code_to_run_before_each_cell": cell_start_code, } with open(filename) as f: @@ -115,6 +115,7 @@ def test_notebook(filename): migrations_to_test = legacy_sqllite_migrations + sqlalchemy_versions +@pytest.mark.skip("This test is not working") @pytest.mark.parametrize("filename", NOTEBOOKS_TO_TEST) @pytest.mark.parametrize("db_compat_version", migrations_to_test) def test_notebook_backwards_compat(filename: str, db_compat_version: str): @@ -126,7 +127,7 @@ def test_notebook_backwards_compat(filename: str, db_compat_version: str): notebook_preprocessor = DBMigrationPreprocessor notebook_preprocessor_kwargs = { "timeout": 600, - "kernel_name": "trulens-llm", + "kernel_name": "python3", "code_to_run_before_each_cell": cell_start_code, "db_compat_version": db_compat_version, } From 94fd605248a0ededfba58a5fe48874f1672e69c6 Mon Sep 17 00:00:00 2001 From: corey Date: Tue, 29 Oct 2024 14:01:54 -0700 Subject: [PATCH 03/12] replace notebooks to run --- tests/docs_notebooks/notebooks_to_test/README.md | 1 - tests/docs_notebooks/notebooks_to_test/cookbook | 1 + tests/docs_notebooks/notebooks_to_test/groundtruth_evals.ipynb | 1 - tests/docs_notebooks/notebooks_to_test/human_feedback.ipynb | 1 - .../notebooks_to_test/langchain_faiss_example.ipynb | 1 - .../notebooks_to_test/langchain_instrumentation.ipynb | 1 - .../docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb | 1 - .../notebooks_to_test/llama_index_instrumentation.ipynb | 1 - .../notebooks_to_test/llama_index_quickstart.ipynb | 1 - tests/docs_notebooks/notebooks_to_test/logging.ipynb | 1 - tests/docs_notebooks/notebooks_to_test/prototype_evals.ipynb | 1 - tests/docs_notebooks/notebooks_to_test/quickstart.ipynb | 1 - tests/docs_notebooks/notebooks_to_test/quickstarts | 1 + .../docs_notebooks/notebooks_to_test/text2text_quickstart.ipynb | 1 - .../notebooks_to_test/trulens_instrumentation.ipynb | 1 - 15 files changed, 2 insertions(+), 13 deletions(-) delete mode 120000 tests/docs_notebooks/notebooks_to_test/README.md create mode 120000 tests/docs_notebooks/notebooks_to_test/cookbook delete mode 120000 tests/docs_notebooks/notebooks_to_test/groundtruth_evals.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/human_feedback.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/langchain_faiss_example.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/langchain_instrumentation.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/llama_index_instrumentation.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/logging.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/prototype_evals.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/quickstart.ipynb create mode 120000 tests/docs_notebooks/notebooks_to_test/quickstarts delete mode 120000 tests/docs_notebooks/notebooks_to_test/text2text_quickstart.ipynb delete mode 120000 tests/docs_notebooks/notebooks_to_test/trulens_instrumentation.ipynb diff --git a/tests/docs_notebooks/notebooks_to_test/README.md b/tests/docs_notebooks/notebooks_to_test/README.md deleted file mode 120000 index 8a33348c7..000000000 --- a/tests/docs_notebooks/notebooks_to_test/README.md +++ /dev/null @@ -1 +0,0 @@ -../../../README.md \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/cookbook b/tests/docs_notebooks/notebooks_to_test/cookbook new file mode 120000 index 000000000..8e3f47ed2 --- /dev/null +++ b/tests/docs_notebooks/notebooks_to_test/cookbook @@ -0,0 +1 @@ +../../../docs/cookbook \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/groundtruth_evals.ipynb b/tests/docs_notebooks/notebooks_to_test/groundtruth_evals.ipynb deleted file mode 120000 index e8e7c03ae..000000000 --- a/tests/docs_notebooks/notebooks_to_test/groundtruth_evals.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/quickstart/groundtruth_evals.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/human_feedback.ipynb b/tests/docs_notebooks/notebooks_to_test/human_feedback.ipynb deleted file mode 120000 index d0617b6f9..000000000 --- a/tests/docs_notebooks/notebooks_to_test/human_feedback.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/quickstart/human_feedback.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/langchain_faiss_example.ipynb b/tests/docs_notebooks/notebooks_to_test/langchain_faiss_example.ipynb deleted file mode 120000 index c89292f0b..000000000 --- a/tests/docs_notebooks/notebooks_to_test/langchain_faiss_example.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/expositional/vector-dbs/faiss/langchain_faiss_example.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/langchain_instrumentation.ipynb b/tests/docs_notebooks/notebooks_to_test/langchain_instrumentation.ipynb deleted file mode 120000 index 2949d647c..000000000 --- a/tests/docs_notebooks/notebooks_to_test/langchain_instrumentation.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../docs/trulens/tracking/instrumentation/langchain.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb b/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb deleted file mode 120000 index b59cfc14a..000000000 --- a/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/quickstart/langchain_quickstart.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/llama_index_instrumentation.ipynb b/tests/docs_notebooks/notebooks_to_test/llama_index_instrumentation.ipynb deleted file mode 120000 index 6897b74c6..000000000 --- a/tests/docs_notebooks/notebooks_to_test/llama_index_instrumentation.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../docs/trulens/tracking/instrumentation/llama_index.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb b/tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb deleted file mode 120000 index 112d690ff..000000000 --- a/tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/quickstart/llama_index_quickstart.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/logging.ipynb b/tests/docs_notebooks/notebooks_to_test/logging.ipynb deleted file mode 120000 index 304504dda..000000000 --- a/tests/docs_notebooks/notebooks_to_test/logging.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../docs/trulens/tracking/logging/logging.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/prototype_evals.ipynb b/tests/docs_notebooks/notebooks_to_test/prototype_evals.ipynb deleted file mode 120000 index f06a75e95..000000000 --- a/tests/docs_notebooks/notebooks_to_test/prototype_evals.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/quickstart/prototype_evals.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/quickstart.ipynb b/tests/docs_notebooks/notebooks_to_test/quickstart.ipynb deleted file mode 120000 index 20f342e00..000000000 --- a/tests/docs_notebooks/notebooks_to_test/quickstart.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/quickstart/quickstart.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/quickstarts b/tests/docs_notebooks/notebooks_to_test/quickstarts new file mode 120000 index 000000000..18f6b0bfc --- /dev/null +++ b/tests/docs_notebooks/notebooks_to_test/quickstarts @@ -0,0 +1 @@ +../../../docs/getting_started/quickstarts \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/text2text_quickstart.ipynb b/tests/docs_notebooks/notebooks_to_test/text2text_quickstart.ipynb deleted file mode 120000 index fa807adc6..000000000 --- a/tests/docs_notebooks/notebooks_to_test/text2text_quickstart.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../examples/quickstart/text2text_quickstart.ipynb \ No newline at end of file diff --git a/tests/docs_notebooks/notebooks_to_test/trulens_instrumentation.ipynb b/tests/docs_notebooks/notebooks_to_test/trulens_instrumentation.ipynb deleted file mode 120000 index 65c2fdc83..000000000 --- a/tests/docs_notebooks/notebooks_to_test/trulens_instrumentation.ipynb +++ /dev/null @@ -1 +0,0 @@ -../../../docs/trulens/tracking/instrumentation/index.ipynb \ No newline at end of file From 4a9479537a3d93825610d6f192889b3ee12d031c Mon Sep 17 00:00:00 2001 From: corey Date: Tue, 29 Oct 2024 14:02:25 -0700 Subject: [PATCH 04/12] run tests in parallel --- Makefile | 11 +- poetry.lock | 522 ++++++++++++++------------ tests/docs_notebooks/requirements.txt | 3 - 3 files changed, 295 insertions(+), 241 deletions(-) delete mode 100644 tests/docs_notebooks/requirements.txt diff --git a/Makefile b/Makefile index 78416a7b7..372286b5c 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ SHELL := /bin/bash REPO_ROOT := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) -PYTEST := poetry run pytest --rootdir=. -s +PYTEST := poetry run pytest -n auto --rootdir=. -s POETRY_DIRS := $(shell find . \ -not -path "./dist/*" \ -maxdepth 4 \ @@ -29,6 +29,7 @@ env-%: env-tests: poetry run pip install \ pytest \ + pytest-xdist[psutil] \ nbconvert \ nbformat \ pytest-subtests \ @@ -127,7 +128,7 @@ codespell: # Generates a coverage report. coverage: - ALLOW_OPTIONALS=true poetry run pytest --rootdir=. tests/* --cov src --cov-report html + ALLOW_OPTIONALS=true poetry run pytest -n auto --rootdir=. tests/* --cov src --cov-report html # Run the static unit tests only, those in the static subfolder. They are run # for every tested python version while those outside of static are run only for @@ -204,15 +205,15 @@ test-%-optional: env-tests-optional # Run the unit tests, those in the tests/unit. They are run in the CI pipeline # frequently. test-unit: - poetry run pytest --rootdir=. tests/unit/* + poetry run pytest -n auto --rootdir=. tests/unit/* # Tests in the e2e folder make use of possibly costly endpoints. They # are part of only the less frequently run release tests. test-e2e: - poetry run pytest --rootdir=. tests/e2e/* + poetry run pytest -n auto --rootdir=. tests/e2e/* # Runs the notebook test test-notebook: - poetry run pytest --rootdir=. tests/docs_notebooks/* + poetry run pytest -n auto --rootdir=. tests/docs_notebooks/* install-wheels: pip install dist/*/*.whl diff --git a/poetry.lock b/poetry.lock index 9f16d0139..2e572cb8a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -491,21 +491,20 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "6.1.0" +version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, - {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, + {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, + {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, ] [package.dependencies] -six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.3)"] +css = ["tinycss2 (>=1.1.0,<1.5)"] [[package]] name = "blinker" @@ -520,17 +519,17 @@ files = [ [[package]] name = "boto3" -version = "1.35.49" +version = "1.35.50" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.49-py3-none-any.whl", hash = "sha256:b660c649a27a6b47a34f6f858f5bd7c3b0a798a16dec8dda7cbebeee80fd1f60"}, - {file = "boto3-1.35.49.tar.gz", hash = "sha256:ddecb27f5699ca9f97711c52b6c0652c2e63bf6c2bfbc13b819b4f523b4d30ff"}, + {file = "boto3-1.35.50-py3-none-any.whl", hash = "sha256:14724b905fd13f26d9d8f7cdcea0fa65a9acad79f60f41f7662667f4e233d97c"}, + {file = "boto3-1.35.50.tar.gz", hash = "sha256:4f15d1ccb481d66f6925b8c91c970ce41b956b6ecf7c479f23e2159531b37eec"}, ] [package.dependencies] -botocore = ">=1.35.49,<1.36.0" +botocore = ">=1.35.50,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -539,13 +538,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.49" +version = "1.35.50" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.49-py3-none-any.whl", hash = "sha256:aed4d3643afd702920792b68fbe712a8c3847993820d1048cd238a6469354da1"}, - {file = "botocore-1.35.49.tar.gz", hash = "sha256:07d0c1325fdbfa49a4a054413dbdeab0a6030449b2aa66099241af2dac48afd8"}, + {file = "botocore-1.35.50-py3-none-any.whl", hash = "sha256:965d3b99179ac04aa98e4c4baf4a970ebce77a5e02bb2a0a21cb6304e2bc0955"}, + {file = "botocore-1.35.50.tar.gz", hash = "sha256:136ecef8d5a1088f1ba485c0bbfca40abd42b9f9fe9e11d8cde4e53b4c05b188"}, ] [package.dependencies] @@ -1260,13 +1259,13 @@ typing-extensions = "*" [[package]] name = "fastapi" -version = "0.115.3" +version = "0.115.4" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.115.3-py3-none-any.whl", hash = "sha256:8035e8f9a2b0aa89cea03b6c77721178ed5358e1aea4cd8570d9466895c0638c"}, - {file = "fastapi-0.115.3.tar.gz", hash = "sha256:c091c6a35599c036d676fa24bd4a6e19fa30058d93d950216cdc672881f6f7db"}, + {file = "fastapi-0.115.4-py3-none-any.whl", hash = "sha256:0b504a063ffb3cf96a5e27dc1bc32c80ca743a2528574f9cdc77daa2d31b4742"}, + {file = "fastapi-0.115.4.tar.gz", hash = "sha256:db653475586b091cb8b2fec2ac54a680ac6a158e07406e1abae31679e8826349"}, ] [package.dependencies] @@ -1802,13 +1801,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "huggingface-hub" -version = "0.26.1" +version = "0.26.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.26.1-py3-none-any.whl", hash = "sha256:5927a8fc64ae68859cd954b7cc29d1c8390a5e15caba6d3d349c973be8fdacf3"}, - {file = "huggingface_hub-0.26.1.tar.gz", hash = "sha256:414c0d9b769eecc86c70f9d939d0f48bb28e8461dd1130021542eff0212db890"}, + {file = "huggingface_hub-0.26.2-py3-none-any.whl", hash = "sha256:98c2a5a8e786c7b2cb6fdeb2740893cba4d53e312572ed3d8afafda65b128c46"}, + {file = "huggingface_hub-0.26.2.tar.gz", hash = "sha256:b100d853465d965733964d123939ba287da60a547087783ddff8a323f340332b"}, ] [package.dependencies] @@ -2613,13 +2612,13 @@ test-ui = ["calysto-bash"] [[package]] name = "keyring" -version = "25.4.1" +version = "25.5.0" description = "Store and access your passwords safely." optional = false python-versions = ">=3.8" files = [ - {file = "keyring-25.4.1-py3-none-any.whl", hash = "sha256:5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf"}, - {file = "keyring-25.4.1.tar.gz", hash = "sha256:b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b"}, + {file = "keyring-25.5.0-py3-none-any.whl", hash = "sha256:e67f8ac32b04be4714b42fe84ce7dad9c40985b9ca827c592cc303e7c26d9741"}, + {file = "keyring-25.5.0.tar.gz", hash = "sha256:4c753b3ec91717fe713c4edd522d625889d8973a349b0e582622f49766de58e6"}, ] [package.dependencies] @@ -2892,13 +2891,13 @@ regex = ["regex"] [[package]] name = "litellm" -version = "1.50.4" +version = "1.51.1" description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "litellm-1.50.4-py3-none-any.whl", hash = "sha256:cc6992275e24a0bbb4a3b377e6842d45a8510fc85d7f255930a64bb872980a36"}, - {file = "litellm-1.50.4.tar.gz", hash = "sha256:a7e68ef614f631b58969c2c7a5154a565ba5974558d437c8cd6c8623654880ea"}, + {file = "litellm-1.51.1-py3-none-any.whl", hash = "sha256:1a389ca5b8ddd7a98d97ad229118d8323caeaaf9c1c5b79b1072edc2a18e773d"}, + {file = "litellm-1.51.1.tar.gz", hash = "sha256:ef9019bdd8bbad927e49696a300d03ea00b86721ebe7b62621c923f728e50d18"}, ] [package.dependencies] @@ -5144,6 +5143,17 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa typing = ["typing-extensions"] xmp = ["defusedxml"] +[[package]] +name = "pip" +version = "24.3.1" +description = "The PyPA recommended tool for installing Python packages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pip-24.3.1-py3-none-any.whl", hash = "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed"}, + {file = "pip-24.3.1.tar.gz", hash = "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99"}, +] + [[package]] name = "pkginfo" version = "1.10.0" @@ -5417,81 +5427,118 @@ tests = ["pytest"] [[package]] name = "py-rust-stemmers" -version = "0.1.1" +version = "0.1.3" description = "Fast and parallel snowball stemmer" optional = false python-versions = "*" files = [ - {file = "py_rust_stemmers-0.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bb29770e8a3d14923685670872e207d200e28dd7292913b2ec4da823d09e1c90"}, - {file = "py_rust_stemmers-0.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22c85114383916983bdec0751d6b5f2543109ab60e8798a1ffe941fac5ee8687"}, - {file = "py_rust_stemmers-0.1.1-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:ff8b46957d149761742ded813a9f37e72aae909dd7e8505d37a4044376c0d537"}, - {file = "py_rust_stemmers-0.1.1-cp310-none-win_amd64.whl", hash = "sha256:3ddf1c8abaa96f4ad4d6bcd56dd76ae4c38c717a017806e973bd062191ce45f1"}, - {file = "py_rust_stemmers-0.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:63d9bb445bfe2ef03f558554a6de27d6a163f11433b2b361303d17f577080c57"}, - {file = "py_rust_stemmers-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21d94c3e010f536223c42505361ebd86eb59f66cff6d01c21d31909f28dbd07b"}, - {file = "py_rust_stemmers-0.1.1-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:b7384aaefd75f877617603ec51348dbd6ff3a8ec2de57c9a9c62c0491c07199b"}, - {file = "py_rust_stemmers-0.1.1-cp311-none-win_amd64.whl", hash = "sha256:1409d57f8d0a0514ff42043c0ceef5d70acf4f182a7858997f1fb7595a918270"}, - {file = "py_rust_stemmers-0.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b98c8c04b56411f03662ba2933123fff7e04c31518e09df3cd13a97fef10262a"}, - {file = "py_rust_stemmers-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed2c42afd7fd6303e1fa63bf751fde5e9e07f0d9c9b9726d7bd1cc7243a30ff"}, - {file = "py_rust_stemmers-0.1.1-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:0b07712fc41cd7fecd48cf801268bde8b1381892face1e2e5be72b9f688ffffa"}, - {file = "py_rust_stemmers-0.1.1-cp312-none-win_amd64.whl", hash = "sha256:bed3b0750700a6d388b04af6c0dbbb1d90199ffcd90e0c61fe6ef61a8dc10d2b"}, - {file = "py_rust_stemmers-0.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:19ab2d7caec20e81fad8bb523956e5d81977093c679aa7c23cd8a1c12a40f26a"}, - {file = "py_rust_stemmers-0.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d527764f023aff64b8f4f644dacce203d59302ffbe3165036ce5bbf71b3c4e7b"}, - {file = "py_rust_stemmers-0.1.1-cp38-cp38-manylinux_2_34_x86_64.whl", hash = "sha256:cc39fbdd03d0585b076237bf6a152c7e9f7233e82af252b51a2804a079a049ac"}, - {file = "py_rust_stemmers-0.1.1-cp38-none-win_amd64.whl", hash = "sha256:85a8559e2a25767d0f1ae54f4a92d33fcb692bb10289bcd5e8a599f157af139c"}, - {file = "py_rust_stemmers-0.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3dddda52d792a9e5109497713bc742d3e77dc14f30bd1b5b9790fa08d516bc70"}, - {file = "py_rust_stemmers-0.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d3f0f28eb37ffe8abf3dca529195f1f034ff374ae92e778d953ec9b0ed024a2"}, - {file = "py_rust_stemmers-0.1.1-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:c40cd53fe44f9255f823f921257534d7baef40767fc40272341730144ab6fe32"}, - {file = "py_rust_stemmers-0.1.1-cp39-none-win_amd64.whl", hash = "sha256:a5932b86050009b9dbff3bacf234c86d92dddd90136fae3eb1726cea794a1936"}, - {file = "py_rust_stemmers-0.1.1.tar.gz", hash = "sha256:c383c6b7d59f25472ecaccdeae2c8b0169c6b71128bc3a5fd93741f402401e50"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8b4861673bc690a5830a5d84d61c64a95ede86f79c9952df66e99e0559fe8264"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b0d2108c758e8081064cbbb7fc70d3cdfd32e0cccf7d051c1d888d16c91c1e78"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdf43a726b81dd5439a98973200546660e10379e805bb6fd6366dbd8d0857666"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03acb3d89f8090f67698d2c64172492618585927dfb56d0b5f6070ff54269940"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3f8cd1139a641ed53e9a1d7f25ae9cf3757cae96a2b0ce0d9399332ec8b148f"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0a5906aa2eec31f647b94d6cc9b2b065bf77ca31be095fcbb1b412ba42f0e473"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b89fe8e55201604e89bdbd7559b19337ef9ae703a5545878d37664507c1067e9"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:0d43981b272c73709d3885ed096a332b2a160db2317fbe16cc9ef3b1d974d39a"}, + {file = "py_rust_stemmers-0.1.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b379c3901a87ee63d7cbb01a68ece78af7040e0c3e3d52fe7b108bfa399feb2"}, + {file = "py_rust_stemmers-0.1.3-cp310-none-win_amd64.whl", hash = "sha256:0f571ee0f2a4b2314d4cd8ef26af83e1fd24ea3e3ff97407d536184167f05957"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2d8b8e6b6d5839a168dae510a00ff4662c7d0a22d12f24fe81caa0ac59265711"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:02b347ab8fe686a88aef0432060471d501b37a6b9a868e7c50bffcd382269cf2"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a65b429eb1282934a1cc3c1b2698ae32a6dc00d6be00dd747e688c642eb110"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9fbbb37e0df579859b42b3f850aa08fe829d190d32c6338349eccb0e762b74c6"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6f9790fe1e9962787817b1894486df7e0b5fc59e4adad423e189530530fae11"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fd5d7388f807f584b4c55bfbe608ef40cff0024c1dc54de95d28265395065d02"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72a7b810d8d376c03f0ccebe146f04cbf4c6c97bd74e489b0ddf1342eb40970c"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:658784c0072f7aae67c726be9acac40dd27b29416356c63a3a760a9499a93513"}, + {file = "py_rust_stemmers-0.1.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e6afcd19da56d4182eecb43bdb6c5b9686370063f2538df877fc23f1d16f909e"}, + {file = "py_rust_stemmers-0.1.3-cp311-none-win_amd64.whl", hash = "sha256:47211ac6252eb484f5067d30b1812667936deffcef89b4b0acd2efe881a99aed"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a36bfbd9219a55bdf5aa9c5d74b8a3741cb092495190ca18551dc39f57272d57"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca1ab04ff2fa15a1d0685007293ffdf4679dcfdc02fc5b36c1af0111670908a1"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccaa08251b9cb421429976d56365ddf9db63b5a8ac4e7817723fb0b62adf8b19"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6262b40f989c0b0bcb3eaef5511268ba63703428c4ab1aa9353a58c8572735b7"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a073701b492ef900cee5185961c23006ba13fa6126cf716f241c929adbdfad6e"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:39c75f10da70380076b68398d84cdc42b42966180bdb8216b81d21a824278b50"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:34f7d92abc85f0f0b1fa407410b3f2daaf2c36b8277a2ffff2ff0beb2f2acc2f"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fbb9f7933239a57d1d9c0fcdfbe0c5283a081e9e64ddc48ed878783be3d52b2b"}, + {file = "py_rust_stemmers-0.1.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:921803a6f8259f10bf348ac0e32a767c28ab587c9ad5c3b1ee593a4bbbe98d39"}, + {file = "py_rust_stemmers-0.1.3-cp312-none-win_amd64.whl", hash = "sha256:576206b540575e81bb84a0f620b7a8529f5e89b0b2ec7d4487f3183789dd5cfd"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8cf4ddafea535c67c00191ff314f947e146b73b3c2a18f745c633f6da10e0118"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bc689a1b6413e0a5170ddb3902c9bec1422f2749ef4b61e8c88618d8b6d4c79a"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5863d0e3dbf9c9564635ef29b60928d9ebdc407970fbded3f31e75ae695e108a"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:985e4bdb91d2bdcbb066838ba108b68de2b5d847350ecb8824fe5bc41cc6bb42"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f457f8c1f90663d747f9a58dc4652949bda872d7436c4dd3c12445183df8f256"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d92f275b061af0ef213ee897e3e2000a9b704ca2d731e4894fc04789460de8e7"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:285357eb9346a22e03f1a843a382d76fca5041932574746ede049c15f2a75c83"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0a801fe925e59122ab4da289a35ac954c25f0e32c02b118416c819cf526a3e93"}, + {file = "py_rust_stemmers-0.1.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c93900ebe37dff6068f9f443782fe38ed212c9cb6e640c92a26880124ad303d6"}, + {file = "py_rust_stemmers-0.1.3-cp38-none-win_amd64.whl", hash = "sha256:d3bc1c1bd29a8cf782c2e0564219e11ee45e26b774aaf1a19110adf821c8bb8c"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:d182dd36e825583de0bc8d8148ea8258ba9bd9d7274d219071bb9d58a10fd23f"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78b6fe32037621ccfb11c11612a7463639b2ddcfdfa2109a10576f2a0359ea22"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6aef7800e28457557a16ecb19ef3dfdeb459bddd6d9cea4e929ca328dda517d7"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f717b49eb756e9266150593e368587a06487f56956de518411e22419b8e419ae"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accc60909f0bef310edb9606fad521297a81fecece5fb345b34862f1a72a4c73"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:92103556fde7d43f8206ccdc68810df73581533a98eb0ebb4f623c05ad9ed060"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:796e78f9301169f4f3ac485cbf0f00531c4227c82745002603ca0726ef157b79"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:efc2eb8052a16626d92cc838e4459b5ae71418b761632a10622561bd01d95aff"}, + {file = "py_rust_stemmers-0.1.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:48150a071dd612eb3968d827bb3143c28967a25f610c4b5077d5010a8a082936"}, + {file = "py_rust_stemmers-0.1.3-cp39-none-win_amd64.whl", hash = "sha256:fee92e93fbbc8e58b526b29e2d25c01ed2fb3e39d31b47938eb90fea8b03de97"}, + {file = "py_rust_stemmers-0.1.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:59eacf7687738b20886a7c0ceeae999d501902b4e6234cf11eecd2f45f2c26bb"}, + {file = "py_rust_stemmers-0.1.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:e39d5d273e13aec2f07a2c3ea0050b3bf3aaa7b6e9f6bef3d4e728ab49979ae8"}, + {file = "py_rust_stemmers-0.1.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f95b25138431c4a457d684c49c6de5ff0c1852cf1cb3657e187ea63610fc7c21"}, + {file = "py_rust_stemmers-0.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cc9df57dff15d12d7fec65a541af6fdcefd40ea5f7ebd48ad5202a1b9a56f89"}, + {file = "py_rust_stemmers-0.1.3.tar.gz", hash = "sha256:ad796d47874181a25addb505a04245e34620bd7a0c5055671f52d9ce993253e2"}, ] [[package]] name = "pyarrow" -version = "17.0.0" +version = "18.0.0" description = "Python library for Apache Arrow" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pyarrow-17.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a5c8b238d47e48812ee577ee20c9a2779e6a5904f1708ae240f53ecbee7c9f07"}, - {file = "pyarrow-17.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db023dc4c6cae1015de9e198d41250688383c3f9af8f565370ab2b4cb5f62655"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da1e060b3876faa11cee287839f9cc7cdc00649f475714b8680a05fd9071d545"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c06d4624c0ad6674364bb46ef38c3132768139ddec1c56582dbac54f2663e2"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fa3c246cc58cb5a4a5cb407a18f193354ea47dd0648194e6265bd24177982fe8"}, - {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:f7ae2de664e0b158d1607699a16a488de3d008ba99b3a7aa5de1cbc13574d047"}, - {file = "pyarrow-17.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:5984f416552eea15fd9cee03da53542bf4cddaef5afecefb9aa8d1010c335087"}, - {file = "pyarrow-17.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977"}, - {file = "pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420"}, - {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4"}, - {file = "pyarrow-17.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03"}, - {file = "pyarrow-17.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22"}, - {file = "pyarrow-17.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a"}, - {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b"}, - {file = "pyarrow-17.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7"}, - {file = "pyarrow-17.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204"}, - {file = "pyarrow-17.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c7916bff914ac5d4a8fe25b7a25e432ff921e72f6f2b7547d1e325c1ad9d155"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f553ca691b9e94b202ff741bdd40f6ccb70cdd5fbf65c187af132f1317de6145"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0cdb0e627c86c373205a2f94a510ac4376fdc523f8bb36beab2e7f204416163c"}, - {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d7d192305d9d8bc9082d10f361fc70a73590a4c65cf31c3e6926cd72b76bc35c"}, - {file = "pyarrow-17.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:02dae06ce212d8b3244dd3e7d12d9c4d3046945a5933d28026598e9dbbda1fca"}, - {file = "pyarrow-17.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:13d7a460b412f31e4c0efa1148e1d29bdf18ad1411eb6757d38f8fbdcc8645fb"}, - {file = "pyarrow-17.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b564a51fbccfab5a04a80453e5ac6c9954a9c5ef2890d1bcf63741909c3f8df"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32503827abbc5aadedfa235f5ece8c4f8f8b0a3cf01066bc8d29de7539532687"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a155acc7f154b9ffcc85497509bcd0d43efb80d6f733b0dc3bb14e281f131c8b"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:dec8d129254d0188a49f8a1fc99e0560dc1b85f60af729f47de4046015f9b0a5"}, - {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a48ddf5c3c6a6c505904545c25a4ae13646ae1f8ba703c4df4a1bfe4f4006bda"}, - {file = "pyarrow-17.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:42bf93249a083aca230ba7e2786c5f673507fa97bbd9725a1e2754715151a204"}, - {file = "pyarrow-17.0.0.tar.gz", hash = "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28"}, -] - -[package.dependencies] -numpy = ">=1.16.6" + {file = "pyarrow-18.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2333f93260674e185cfbf208d2da3007132572e56871f451ba1a556b45dae6e2"}, + {file = "pyarrow-18.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:4c381857754da44326f3a49b8b199f7f87a51c2faacd5114352fc78de30d3aba"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:603cd8ad4976568954598ef0a6d4ed3dfb78aff3d57fa8d6271f470f0ce7d34f"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58a62549a3e0bc9e03df32f350e10e1efb94ec6cf63e3920c3385b26663948ce"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bc97316840a349485fbb137eb8d0f4d7057e1b2c1272b1a20eebbbe1848f5122"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:2e549a748fa8b8715e734919923f69318c953e077e9c02140ada13e59d043310"}, + {file = "pyarrow-18.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:606e9a3dcb0f52307c5040698ea962685fb1c852d72379ee9412be7de9c5f9e2"}, + {file = "pyarrow-18.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d5795e37c0a33baa618c5e054cd61f586cf76850a251e2b21355e4085def6280"}, + {file = "pyarrow-18.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:5f0510608ccd6e7f02ca8596962afb8c6cc84c453e7be0da4d85f5f4f7b0328a"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616ea2826c03c16e87f517c46296621a7c51e30400f6d0a61be645f203aa2b93"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1824f5b029ddd289919f354bc285992cb4e32da518758c136271cf66046ef22"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6dd1b52d0d58dd8f685ced9971eb49f697d753aa7912f0a8f50833c7a7426319"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:320ae9bd45ad7ecc12ec858b3e8e462578de060832b98fc4d671dee9f10d9954"}, + {file = "pyarrow-18.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2c992716cffb1088414f2b478f7af0175fd0a76fea80841b1706baa8fb0ebaad"}, + {file = "pyarrow-18.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:e7ab04f272f98ebffd2a0661e4e126036f6936391ba2889ed2d44c5006237802"}, + {file = "pyarrow-18.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:03f40b65a43be159d2f97fd64dc998f769d0995a50c00f07aab58b0b3da87e1f"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be08af84808dff63a76860847c48ec0416928a7b3a17c2f49a072cac7c45efbd"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70c1965cde991b711a98448ccda3486f2a336457cf4ec4dca257a926e149c9"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:00178509f379415a3fcf855af020e3340254f990a8534294ec3cf674d6e255fd"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a71ab0589a63a3e987beb2bc172e05f000a5c5be2636b4b263c44034e215b5d7"}, + {file = "pyarrow-18.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe92efcdbfa0bcf2fa602e466d7f2905500f33f09eb90bf0bcf2e6ca41b574c8"}, + {file = "pyarrow-18.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:907ee0aa8ca576f5e0cdc20b5aeb2ad4d3953a3b4769fc4b499e00ef0266f02f"}, + {file = "pyarrow-18.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:66dcc216ebae2eb4c37b223feaf82f15b69d502821dde2da138ec5a3716e7463"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1daf7c425f58527900876354390ee41b0ae962a73ad0959b9d829def583bb1"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:871b292d4b696b09120ed5bde894f79ee2a5f109cb84470546471df264cae136"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:082ba62bdcb939824ba1ce10b8acef5ab621da1f4c4805e07bfd153617ac19d4"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:2c664ab88b9766413197733c1720d3dcd4190e8fa3bbdc3710384630a0a7207b"}, + {file = "pyarrow-18.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:dc892be34dbd058e8d189b47db1e33a227d965ea8805a235c8a7286f7fd17d3a"}, + {file = "pyarrow-18.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:28f9c39a56d2c78bf6b87dcc699d520ab850919d4a8c7418cd20eda49874a2ea"}, + {file = "pyarrow-18.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:f1a198a50c409ab2d009fbf20956ace84567d67f2c5701511d4dd561fae6f32e"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5bd7fd32e3ace012d43925ea4fc8bd1b02cc6cc1e9813b518302950e89b5a22"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:336addb8b6f5208be1b2398442c703a710b6b937b1a046065ee4db65e782ff5a"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:45476490dd4adec5472c92b4d253e245258745d0ccaabe706f8d03288ed60a79"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b46591222c864e7da7faa3b19455196416cd8355ff6c2cc2e65726a760a3c420"}, + {file = "pyarrow-18.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:eb7e3abcda7e1e6b83c2dc2909c8d045881017270a119cc6ee7fdcfe71d02df8"}, + {file = "pyarrow-18.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:09f30690b99ce34e0da64d20dab372ee54431745e4efb78ac938234a282d15f9"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5ca5d707e158540312e09fd907f9f49bacbe779ab5236d9699ced14d2293b8"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6331f280c6e4521c69b201a42dd978f60f7e129511a55da9e0bfe426b4ebb8d"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3ac24b2be732e78a5a3ac0b3aa870d73766dd00beba6e015ea2ea7394f8b4e55"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b30a927c6dff89ee702686596f27c25160dd6c99be5bcc1513a763ae5b1bfc03"}, + {file = "pyarrow-18.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8f40ec677e942374e3d7f2fad6a67a4c2811a8b975e8703c6fd26d3b168a90e2"}, + {file = "pyarrow-18.0.0.tar.gz", hash = "sha256:a6aa027b1a9d2970cf328ccd6dbe4a996bc13c39fd427f502782f5bdb9ca20f5"}, +] [package.extras] test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] @@ -5683,13 +5730,13 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pymdown-extensions" -version = "10.11.2" +version = "10.12" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.11.2-py3-none-any.whl", hash = "sha256:41cdde0a77290e480cf53892f5c5e50921a7ee3e5cd60ba91bf19837b33badcf"}, - {file = "pymdown_extensions-10.11.2.tar.gz", hash = "sha256:bc8847ecc9e784a098efd35e20cba772bc5a1b529dfcef9dc1972db9021a1049"}, + {file = "pymdown_extensions-10.12-py3-none-any.whl", hash = "sha256:49f81412242d3527b8b4967b990df395c89563043bc51a3d2d7d500e52123b77"}, + {file = "pymdown_extensions-10.12.tar.gz", hash = "sha256:b0ee1e0b2bef1071a47891ab17003bfe5bf824a398e13f49f8ed653b699369a7"}, ] [package.dependencies] @@ -6642,6 +6689,11 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, + {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -6740,23 +6792,23 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "75.2.0" +version = "75.3.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-75.2.0-py3-none-any.whl", hash = "sha256:a7fcb66f68b4d9e8e66b42f9876150a3371558f98fa32222ffaa5bced76406f8"}, - {file = "setuptools-75.2.0.tar.gz", hash = "sha256:753bb6ebf1f465a1912e19ed1d41f403a79173a9acf66a42e7e6aec45c3c16ec"}, + {file = "setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"}, + {file = "setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.12.*)", "pytest-mypy"] [[package]] name = "shellingham" @@ -6771,15 +6823,18 @@ files = [ [[package]] name = "simpleeval" -version = "1.0.0" +version = "1.0.1" description = "A simple, safe single expression evaluator library." optional = false python-versions = ">=3.9" files = [ - {file = "simpleeval-1.0.0-py3-none-any.whl", hash = "sha256:704817f39879b42d81777f02e2dd28dde45c7f9c3fd84cea0d6dbde85c3efcff"}, - {file = "simpleeval-1.0.0.tar.gz", hash = "sha256:f3d259deeb751d34c63e56747bab384efad63a2dbdb4f130281c42279788ac3c"}, + {file = "simpleeval-1.0.1-py3-none-any.whl", hash = "sha256:1928b4a5528099012e73de532d3293a5c7038c103111dda69da679ba3bee4352"}, + {file = "simpleeval-1.0.1.tar.gz", hash = "sha256:3b95f8b04d35cf1f793749fc3034d332dafb20e71fadf56631b4642fcc84a26a"}, ] +[package.dependencies] +pip = ">=24.2" + [[package]] name = "six" version = "1.16.0" @@ -6894,13 +6949,13 @@ urllib3 = "*" [[package]] name = "snowflake-snowpark-python" -version = "1.23.0" +version = "1.24.0" description = "Snowflake Snowpark for Python" optional = false python-versions = "<3.12,>=3.8" files = [ - {file = "snowflake_snowpark_python-1.23.0-py3-none-any.whl", hash = "sha256:c22feaf7edcb2fbbf5493c41e4b2e3cbefbaec016160c1707d9e96d8b2ba6dd3"}, - {file = "snowflake_snowpark_python-1.23.0.tar.gz", hash = "sha256:47f649ad3a7399ddd3bc714fa42d9845cecbd260039320c406e5471beb334a35"}, + {file = "snowflake_snowpark_python-1.24.0-py3-none-any.whl", hash = "sha256:d84e0709c4fda710bef99c201a4a83aa6489c2850e3a26f12c20e96d727c337a"}, + {file = "snowflake_snowpark_python-1.24.0.tar.gz", hash = "sha256:cd8bae93f08f210b57b6ce9c12bca251dd062de57031a496411ac5bfd7fa1105"}, ] [package.dependencies] @@ -6918,7 +6973,7 @@ wheel = "*" development = ["cachetools", "coverage", "decorator", "graphviz", "matplotlib", "openpyxl", "pre-commit", "pytest (<8.0.0)", "pytest-assume", "pytest-cov", "pytest-timeout", "pytest-xdist", "sphinx (==5.0.2)"] localtest = ["pandas", "requests"] modin = ["modin (==0.28.1)", "snowflake-connector-python[pandas] (>=3.10.0,<4.0.0)"] -modin-development = ["cachetools", "coverage", "decorator", "graphviz", "matplotlib", "modin (==0.28.1)", "openpyxl", "pre-commit", "pytest (<8.0.0)", "pytest-assume", "pytest-cov", "pytest-timeout", "pytest-xdist", "scipy", "snowflake-connector-python[pandas] (>=3.10.0,<4.0.0)", "sphinx (==5.0.2)", "statsmodels"] +modin-development = ["cachetools", "coverage", "decorator", "graphviz", "matplotlib", "modin (==0.28.1)", "openpyxl", "pre-commit", "pytest (<8.0.0)", "pytest-assume", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-learn (==1.5.2)", "scipy", "snowflake-connector-python[pandas] (>=3.10.0,<4.0.0)", "sphinx (==5.0.2)", "statsmodels"] opentelemetry = ["opentelemetry-api (>=1.0.0,<2.0.0)", "opentelemetry-sdk (>=1.0.0,<2.0.0)"] pandas = ["snowflake-connector-python[pandas] (>=3.10.0,<4.0.0)"] secure-local-storage = ["snowflake-connector-python[secure-local-storage] (>=3.10.0,<4.0.0)"] @@ -7108,13 +7163,13 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "starlette" -version = "0.41.0" +version = "0.41.2" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.41.0-py3-none-any.whl", hash = "sha256:a0193a3c413ebc9c78bff1c3546a45bb8c8bcb4a84cae8747d650a65bd37210a"}, - {file = "starlette-0.41.0.tar.gz", hash = "sha256:39cbd8768b107d68bfe1ff1672b38a2c38b49777de46d2a592841d58e3bf7c2a"}, + {file = "starlette-0.41.2-py3-none-any.whl", hash = "sha256:fbc189474b4731cf30fcef52f18a8d070e3f3b46c6a04c97579e85e6ffca942d"}, + {file = "starlette-0.41.2.tar.gz", hash = "sha256:9834fd799d1a87fd346deb76158668cfa0b0d56f85caefe8268e2d97c3468b62"}, ] [package.dependencies] @@ -7429,6 +7484,7 @@ files = [ {file = "tiktoken-0.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d8c2d0e5ba6453a290b86cd65fc51fedf247e1ba170191715b049dac1f628005"}, {file = "tiktoken-0.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d622d8011e6d6f239297efa42a2657043aaed06c4f68833550cac9e9bc723ef1"}, {file = "tiktoken-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2efaf6199717b4485031b4d6edb94075e4d79177a172f38dd934d911b588d54a"}, + {file = "tiktoken-0.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5637e425ce1fc49cf716d88df3092048359a4b3bbb7da762840426e937ada06d"}, {file = "tiktoken-0.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb0e352d1dbe15aba082883058b3cce9e48d33101bdaac1eccf66424feb5b47"}, {file = "tiktoken-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56edfefe896c8f10aba372ab5706b9e3558e78db39dd497c940b47bf228bc419"}, {file = "tiktoken-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:326624128590def898775b722ccc327e90b073714227175ea8febbc920ac0a99"}, @@ -7641,28 +7697,28 @@ files = [ [[package]] name = "torch" -version = "2.5.0" +version = "2.5.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.5.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:7f179373a047b947dec448243f4e6598a1c960fa3bb978a9a7eecd529fbc363f"}, - {file = "torch-2.5.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:15fbc95e38d330e5b0ef1593b7bc0a19f30e5bdad76895a5cffa1a6a044235e9"}, - {file = "torch-2.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:f499212f1cffea5d587e5f06144630ed9aa9c399bba12ec8905798d833bd1404"}, - {file = "torch-2.5.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:c54db1fade17287aabbeed685d8e8ab3a56fea9dd8d46e71ced2da367f09a49f"}, - {file = "torch-2.5.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:499a68a756d3b30d10f7e0f6214dc3767b130b797265db3b1c02e9094e2a07be"}, - {file = "torch-2.5.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9f3df8138a1126a851440b7d5a4869bfb7c9cc43563d64fd9d96d0465b581024"}, - {file = "torch-2.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b81da3bdb58c9de29d0e1361e52f12fcf10a89673f17a11a5c6c7da1cb1a8376"}, - {file = "torch-2.5.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:ba135923295d564355326dc409b6b7f5bd6edc80f764cdaef1fb0a1b23ff2f9c"}, - {file = "torch-2.5.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:2dd40c885a05ef7fe29356cca81be1435a893096ceb984441d6e2c27aff8c6f4"}, - {file = "torch-2.5.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:bc52d603d87fe1da24439c0d5fdbbb14e0ae4874451d53f0120ffb1f6c192727"}, - {file = "torch-2.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea718746469246cc63b3353afd75698a288344adb55e29b7f814a5d3c0a7c78d"}, - {file = "torch-2.5.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:6de1fd253e27e7f01f05cd7c37929ae521ca23ca4620cfc7c485299941679112"}, - {file = "torch-2.5.0-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:83dcf518685db20912b71fc49cbddcc8849438cdb0e9dcc919b02a849e2cd9e8"}, - {file = "torch-2.5.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:65e0a60894435608334d68c8811e55fd8f73e5bf8ee6f9ccedb0064486a7b418"}, - {file = "torch-2.5.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:38c21ff1bd39f076d72ab06e3c88c2ea6874f2e6f235c9450816b6c8e7627094"}, - {file = "torch-2.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:ce4baeba9804da5a346e210b3b70826f5811330c343e4fe1582200359ee77fe5"}, - {file = "torch-2.5.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:03e53f577a96e4d41aca472da8faa40e55df89d2273664af390ce1f570e885bd"}, + {file = "torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:71328e1bbe39d213b8721678f9dcac30dfc452a46d586f1d514a6aa0a99d4744"}, + {file = "torch-2.5.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:34bfa1a852e5714cbfa17f27c49d8ce35e1b7af5608c4bc6e81392c352dbc601"}, + {file = "torch-2.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:32a037bd98a241df6c93e4c789b683335da76a2ac142c0973675b715102dc5fa"}, + {file = "torch-2.5.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:23d062bf70776a3d04dbe74db950db2a5245e1ba4f27208a87f0d743b0d06e86"}, + {file = "torch-2.5.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:de5b7d6740c4b636ef4db92be922f0edc425b65ed78c5076c43c42d362a45457"}, + {file = "torch-2.5.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:340ce0432cad0d37f5a31be666896e16788f1adf8ad7be481196b503dad675b9"}, + {file = "torch-2.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:603c52d2fe06433c18b747d25f5c333f9c1d58615620578c326d66f258686f9a"}, + {file = "torch-2.5.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:31f8c39660962f9ae4eeec995e3049b5492eb7360dd4f07377658ef4d728fa4c"}, + {file = "torch-2.5.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ed231a4b3a5952177fafb661213d690a72caaad97d5824dd4fc17ab9e15cec03"}, + {file = "torch-2.5.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:3f4b7f10a247e0dcd7ea97dc2d3bfbfc90302ed36d7f3952b0008d0df264e697"}, + {file = "torch-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:73e58e78f7d220917c5dbfad1a40e09df9929d3b95d25e57d9f8558f84c9a11c"}, + {file = "torch-2.5.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:8c712df61101964eb11910a846514011f0b6f5920c55dbf567bff8a34163d5b1"}, + {file = "torch-2.5.1-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:9b61edf3b4f6e3b0e0adda8b3960266b9009d02b37555971f4d1c8f7a05afed7"}, + {file = "torch-2.5.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1f3b7fb3cf7ab97fae52161423f81be8c6b8afac8d9760823fd623994581e1a3"}, + {file = "torch-2.5.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7974e3dce28b5a21fb554b73e1bc9072c25dde873fa00d54280861e7a009d7dc"}, + {file = "torch-2.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:46c817d3ea33696ad3b9df5e774dba2257e9a4cd3c4a3afbf92f6bb13ac5ce2d"}, + {file = "torch-2.5.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:8046768b7f6d35b85d101b4b38cba8aa2f3cd51952bc4c06a49580f2ce682291"}, ] [package.dependencies] @@ -7713,13 +7769,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.5" +version = "4.66.6" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.5-py3-none-any.whl", hash = "sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd"}, - {file = "tqdm-4.66.5.tar.gz", hash = "sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad"}, + {file = "tqdm-4.66.6-py3-none-any.whl", hash = "sha256:223e8b5359c2efc4b30555531f09e9f2f3589bcd7fdd389271191031b49b7a63"}, + {file = "tqdm-4.66.6.tar.gz", hash = "sha256:4bdd694238bef1485ce839d67967ab50af8f9272aab687c0d7702a01da0be090"}, ] [package.dependencies] @@ -7748,13 +7804,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.46.0" +version = "4.46.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" files = [ - {file = "transformers-4.46.0-py3-none-any.whl", hash = "sha256:e161268ae8bee315eb9e9b4c0b27f1bd6980f91e0fc292d75249193d339704c0"}, - {file = "transformers-4.46.0.tar.gz", hash = "sha256:3a9e2eb537094db11c3652334d281afa4766c0e5091c4dcdb454e9921bb0d2b7"}, + {file = "transformers-4.46.1-py3-none-any.whl", hash = "sha256:f77b251a648fd32e3d14b5e7e27c913b7c29154940f519e4c8c3aa6061df0f05"}, + {file = "transformers-4.46.1.tar.gz", hash = "sha256:16d79927d772edaf218820a96f9254e2211f9cd7fb3c308562d2d636c964a68c"}, ] [package.dependencies] @@ -7839,7 +7895,7 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "trulens-apps-langchain" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9,<3.13" @@ -7858,7 +7914,7 @@ url = "src/apps/langchain" [[package]] name = "trulens-apps-llamaindex" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -7877,7 +7933,7 @@ url = "src/apps/llamaindex" [[package]] name = "trulens-apps-nemo" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = ">=3.9,<3.12" @@ -7896,7 +7952,7 @@ url = "src/apps/nemo" [[package]] name = "trulens-benchmark" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -7912,7 +7968,7 @@ url = "src/benchmark" [[package]] name = "trulens-connectors-snowflake" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = ">=3.9,<3.12" @@ -7932,7 +7988,7 @@ url = "src/connectors/snowflake" [[package]] name = "trulens-core" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -7958,7 +8014,7 @@ url = "src/core" [[package]] name = "trulens-dashboard" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9,!=3.9.7" @@ -7985,7 +8041,7 @@ url = "src/dashboard" [[package]] name = "trulens-eval" -version = "1.1.0" +version = "1.2.0" description = "Backwards-compatibility package for API of trulens_eval<1.0.0 using API of trulens-*>=1.0.0." optional = false python-versions = "^3.9,!=3.9.7" @@ -8001,7 +8057,7 @@ url = "src/trulens_eval" [[package]] name = "trulens-feedback" -version = "1.1.0" +version = "1.2.0" description = "A TruLens extension package implementing feedback functions for LLM App evaluation." optional = false python-versions = "^3.9" @@ -8022,7 +8078,7 @@ url = "src/feedback" [[package]] name = "trulens-providers-bedrock" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8041,7 +8097,7 @@ url = "src/providers/bedrock" [[package]] name = "trulens-providers-cortex" -version = "1.1.0" +version = "1.2.0" description = "A TruLens extension package adding Snowflake Cortex support for LLM App evaluation." optional = false python-versions = ">=3.9,<3.12" @@ -8060,7 +8116,7 @@ url = "src/providers/cortex" [[package]] name = "trulens-providers-huggingface" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8082,7 +8138,7 @@ url = "src/providers/huggingface" [[package]] name = "trulens-providers-langchain" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8100,7 +8156,7 @@ url = "src/providers/langchain" [[package]] name = "trulens-providers-litellm" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8118,7 +8174,7 @@ url = "src/providers/litellm" [[package]] name = "trulens-providers-openai" -version = "1.1.0" +version = "1.2.0" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8287,13 +8343,13 @@ crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] [[package]] name = "virtualenv" -version = "20.27.0" +version = "20.27.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.27.0-py3-none-any.whl", hash = "sha256:44a72c29cceb0ee08f300b314848c86e57bf8d1f13107a5e671fb9274138d655"}, - {file = "virtualenv-20.27.0.tar.gz", hash = "sha256:2ca56a68ed615b8fe4326d11a0dca5dfbe8fd68510fb6c6349163bed3c15f2b2"}, + {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, + {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, ] [package.dependencies] @@ -8534,93 +8590,93 @@ files = [ [[package]] name = "yarl" -version = "1.16.0" +version = "1.17.0" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32468f41242d72b87ab793a86d92f885355bcf35b3355aa650bfa846a5c60058"}, - {file = "yarl-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:234f3a3032b505b90e65b5bc6652c2329ea7ea8855d8de61e1642b74b4ee65d2"}, - {file = "yarl-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a0296040e5cddf074c7f5af4a60f3fc42c0237440df7bcf5183be5f6c802ed5"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de6c14dd7c7c0badba48157474ea1f03ebee991530ba742d381b28d4f314d6f3"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b140e532fe0266003c936d017c1ac301e72ee4a3fd51784574c05f53718a55d8"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:019f5d58093402aa8f6661e60fd82a28746ad6d156f6c5336a70a39bd7b162b9"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c42998fd1cbeb53cd985bff0e4bc25fbe55fd6eb3a545a724c1012d69d5ec84"}, - {file = "yarl-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c7c30fb38c300fe8140df30a046a01769105e4cf4282567a29b5cdb635b66c4"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e49e0fd86c295e743fd5be69b8b0712f70a686bc79a16e5268386c2defacaade"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:b9ca7b9147eb1365c8bab03c003baa1300599575effad765e0b07dd3501ea9af"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:27e11db3f1e6a51081a981509f75617b09810529de508a181319193d320bc5c7"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8994c42f4ca25df5380ddf59f315c518c81df6a68fed5bb0c159c6cb6b92f120"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:542fa8e09a581bcdcbb30607c7224beff3fdfb598c798ccd28a8184ffc18b7eb"}, - {file = "yarl-1.16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2bd6a51010c7284d191b79d3b56e51a87d8e1c03b0902362945f15c3d50ed46b"}, - {file = "yarl-1.16.0-cp310-cp310-win32.whl", hash = "sha256:178ccb856e265174a79f59721031060f885aca428983e75c06f78aa24b91d929"}, - {file = "yarl-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:fe8bba2545427418efc1929c5c42852bdb4143eb8d0a46b09de88d1fe99258e7"}, - {file = "yarl-1.16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d8643975a0080f361639787415a038bfc32d29208a4bf6b783ab3075a20b1ef3"}, - {file = "yarl-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:676d96bafc8c2d0039cea0cd3fd44cee7aa88b8185551a2bb93354668e8315c2"}, - {file = "yarl-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d9525f03269e64310416dbe6c68d3b23e5d34aaa8f47193a1c45ac568cecbc49"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b37d5ec034e668b22cf0ce1074d6c21fd2a08b90d11b1b73139b750a8b0dd97"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f32c4cb7386b41936894685f6e093c8dfaf0960124d91fe0ec29fe439e201d0"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b8e265a0545637492a7e12fd7038370d66c9375a61d88c5567d0e044ded9202"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:789a3423f28a5fff46fbd04e339863c169ece97c827b44de16e1a7a42bc915d2"}, - {file = "yarl-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1d1f45e3e8d37c804dca99ab3cf4ab3ed2e7a62cd82542924b14c0a4f46d243"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:621280719c4c5dad4c1391160a9b88925bb8b0ff6a7d5af3224643024871675f"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed097b26f18a1f5ff05f661dc36528c5f6735ba4ce8c9645e83b064665131349"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2f1fe2b2e3ee418862f5ebc0c0083c97f6f6625781382f828f6d4e9b614eba9b"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:87dd10bc0618991c66cee0cc65fa74a45f4ecb13bceec3c62d78ad2e42b27a16"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4199db024b58a8abb2cfcedac7b1292c3ad421684571aeb622a02f242280e8d6"}, - {file = "yarl-1.16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:99a9dcd4b71dd5f5f949737ab3f356cfc058c709b4f49833aeffedc2652dac56"}, - {file = "yarl-1.16.0-cp311-cp311-win32.whl", hash = "sha256:a9394c65ae0ed95679717d391c862dece9afacd8fa311683fc8b4362ce8a410c"}, - {file = "yarl-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:5b9101f528ae0f8f65ac9d64dda2bb0627de8a50344b2f582779f32fda747c1d"}, - {file = "yarl-1.16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4ffb7c129707dd76ced0a4a4128ff452cecf0b0e929f2668ea05a371d9e5c104"}, - {file = "yarl-1.16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1a5e9d8ce1185723419c487758d81ac2bde693711947032cce600ca7c9cda7d6"}, - {file = "yarl-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d743e3118b2640cef7768ea955378c3536482d95550222f908f392167fe62059"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26768342f256e6e3c37533bf9433f5f15f3e59e3c14b2409098291b3efaceacb"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1b0796168b953bca6600c5f97f5ed407479889a36ad7d17183366260f29a6b9"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:858728086914f3a407aa7979cab743bbda1fe2bdf39ffcd991469a370dd7414d"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5570e6d47bcb03215baf4c9ad7bf7c013e56285d9d35013541f9ac2b372593e7"}, - {file = "yarl-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66ea8311422a7ba1fc79b4c42c2baa10566469fe5a78500d4e7754d6e6db8724"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:649bddcedee692ee8a9b7b6e38582cb4062dc4253de9711568e5620d8707c2a3"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3a91654adb7643cb21b46f04244c5a315a440dcad63213033826549fa2435f71"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b439cae82034ade094526a8f692b9a2b5ee936452de5e4c5f0f6c48df23f8604"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:571f781ae8ac463ce30bacebfaef2c6581543776d5970b2372fbe31d7bf31a07"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:aa7943f04f36d6cafc0cf53ea89824ac2c37acbdb4b316a654176ab8ffd0f968"}, - {file = "yarl-1.16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1a5cf32539373ff39d97723e39a9283a7277cbf1224f7aef0c56c9598b6486c3"}, - {file = "yarl-1.16.0-cp312-cp312-win32.whl", hash = "sha256:a5b6c09b9b4253d6a208b0f4a2f9206e511ec68dce9198e0fbec4f160137aa67"}, - {file = "yarl-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:1208ca14eed2fda324042adf8d6c0adf4a31522fa95e0929027cd487875f0240"}, - {file = "yarl-1.16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5ace0177520bd4caa99295a9b6fb831d0e9a57d8e0501a22ffaa61b4c024283"}, - {file = "yarl-1.16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7118bdb5e3ed81acaa2095cba7ec02a0fe74b52a16ab9f9ac8e28e53ee299732"}, - {file = "yarl-1.16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38fec8a2a94c58bd47c9a50a45d321ab2285ad133adefbbadf3012c054b7e656"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8791d66d81ee45866a7bb15a517b01a2bcf583a18ebf5d72a84e6064c417e64b"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cf936ba67bc6c734f3aa1c01391da74ab7fc046a9f8bbfa230b8393b90cf472"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1aab176dd55b59f77a63b27cffaca67d29987d91a5b615cbead41331e6b7428"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:995d0759004c08abd5d1b81300a91d18c8577c6389300bed1c7c11675105a44d"}, - {file = "yarl-1.16.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1bc22e00edeb068f71967ab99081e9406cd56dbed864fc3a8259442999d71552"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:35b4f7842154176523e0a63c9b871168c69b98065d05a4f637fce342a6a2693a"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7ace71c4b7a0c41f317ae24be62bb61e9d80838d38acb20e70697c625e71f120"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8f639e3f5795a6568aa4f7d2ac6057c757dcd187593679f035adbf12b892bb00"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e8be3aff14f0120ad049121322b107f8a759be76a6a62138322d4c8a337a9e2c"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:122d8e7986043d0549e9eb23c7fd23be078be4b70c9eb42a20052b3d3149c6f2"}, - {file = "yarl-1.16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0fd9c227990f609c165f56b46107d0bc34553fe0387818c42c02f77974402c36"}, - {file = "yarl-1.16.0-cp313-cp313-win32.whl", hash = "sha256:595ca5e943baed31d56b33b34736461a371c6ea0038d3baec399949dd628560b"}, - {file = "yarl-1.16.0-cp313-cp313-win_amd64.whl", hash = "sha256:921b81b8d78f0e60242fb3db615ea3f368827a76af095d5a69f1c3366db3f596"}, - {file = "yarl-1.16.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab2b2ac232110a1fdb0d3ffcd087783edd3d4a6ced432a1bf75caf7b7be70916"}, - {file = "yarl-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7f8713717a09acbfee7c47bfc5777e685539fefdd34fa72faf504c8be2f3df4e"}, - {file = "yarl-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdcffe1dbcb4477d2b4202f63cd972d5baa155ff5a3d9e35801c46a415b7f71a"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a91217208306d82357c67daeef5162a41a28c8352dab7e16daa82e3718852a7"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ab3ed42c78275477ea8e917491365e9a9b69bb615cb46169020bd0aa5e2d6d3"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:707ae579ccb3262dfaef093e202b4c3fb23c3810e8df544b1111bd2401fd7b09"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7a852d1cd0b8d8b37fc9d7f8581152add917a98cfe2ea6e241878795f917ae"}, - {file = "yarl-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3f1cc3d3d4dc574bebc9b387f6875e228ace5748a7c24f49d8f01ac1bc6c31b"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5ff96da263740779b0893d02b718293cc03400c3a208fc8d8cd79d9b0993e532"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:3d375a19ba2bfe320b6d873f3fb165313b002cef8b7cc0a368ad8b8a57453837"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:62c7da0ad93a07da048b500514ca47b759459ec41924143e2ddb5d7e20fd3db5"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:147b0fcd0ee33b4b5f6edfea80452d80e419e51b9a3f7a96ce98eaee145c1581"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:504e1fe1cc4f170195320eb033d2b0ccf5c6114ce5bf2f617535c01699479bca"}, - {file = "yarl-1.16.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bdcf667a5dec12a48f669e485d70c54189f0639c2157b538a4cffd24a853624f"}, - {file = "yarl-1.16.0-cp39-cp39-win32.whl", hash = "sha256:e9951afe6557c75a71045148890052cb942689ee4c9ec29f5436240e1fcc73b7"}, - {file = "yarl-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:7d7aaa8ff95d0840e289423e7dc35696c2b058d635f945bf05b5cd633146b027"}, - {file = "yarl-1.16.0-py3-none-any.whl", hash = "sha256:e6980a558d8461230c457218bd6c92dfc1d10205548215c2c21d79dc8d0a96f3"}, - {file = "yarl-1.16.0.tar.gz", hash = "sha256:b6f687ced5510a9a2474bbae96a4352e5ace5fa34dc44a217b0537fec1db00b4"}, + {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d8715edfe12eee6f27f32a3655f38d6c7410deb482158c0b7d4b7fad5d07628"}, + {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1803bf2a7a782e02db746d8bd18f2384801bc1d108723840b25e065b116ad726"}, + {file = "yarl-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e66589110e20c2951221a938fa200c7aa134a8bdf4e4dc97e6b21539ff026d4"}, + {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7069d411cfccf868e812497e0ec4acb7c7bf8d684e93caa6c872f1e6f5d1664d"}, + {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbf70ba16118db3e4b0da69dcde9d4d4095d383c32a15530564c283fa38a7c52"}, + {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0bc53cc349675b32ead83339a8de79eaf13b88f2669c09d4962322bb0f064cbc"}, + {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6aa18a402d1c80193ce97c8729871f17fd3e822037fbd7d9b719864018df746"}, + {file = "yarl-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d89c5bc701861cfab357aa0cd039bc905fe919997b8c312b4b0c358619c38d4d"}, + {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b728bdf38ca58f2da1d583e4af4ba7d4cd1a58b31a363a3137a8159395e7ecc7"}, + {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:5542e57dc15d5473da5a39fbde14684b0cc4301412ee53cbab677925e8497c11"}, + {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e564b57e5009fb150cb513804d7e9e9912fee2e48835638f4f47977f88b4a39c"}, + {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:eb3c4cff524b4c1c1dba3a6da905edb1dfd2baf6f55f18a58914bbb2d26b59e1"}, + {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:05e13f389038842da930d439fbed63bdce3f7644902714cb68cf527c971af804"}, + {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:153c38ee2b4abba136385af4467459c62d50f2a3f4bde38c7b99d43a20c143ef"}, + {file = "yarl-1.17.0-cp310-cp310-win32.whl", hash = "sha256:4065b4259d1ae6f70fd9708ffd61e1c9c27516f5b4fae273c41028afcbe3a094"}, + {file = "yarl-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:abf366391a02a8335c5c26163b5fe6f514cc1d79e74d8bf3ffab13572282368e"}, + {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19a4fe0279626c6295c5b0c8c2bb7228319d2e985883621a6e87b344062d8135"}, + {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cadd0113f4db3c6b56868d6a19ca6286f5ccfa7bc08c27982cf92e5ed31b489a"}, + {file = "yarl-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60d6693eef43215b1ccfb1df3f6eae8db30a9ff1e7989fb6b2a6f0b468930ee8"}, + {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb8bf3843e1fa8cf3fe77813c512818e57368afab7ebe9ef02446fe1a10b492"}, + {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2a5b35fd1d8d90443e061d0c8669ac7600eec5c14c4a51f619e9e105b136715"}, + {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5bf17b32f392df20ab5c3a69d37b26d10efaa018b4f4e5643c7520d8eee7ac7"}, + {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f51b529b958cd06e78158ff297a8bf57b4021243c179ee03695b5dbf9cb6e1"}, + {file = "yarl-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fcaa06bf788e19f913d315d9c99a69e196a40277dc2c23741a1d08c93f4d430"}, + {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:32f3ee19ff0f18a7a522d44e869e1ebc8218ad3ae4ebb7020445f59b4bbe5897"}, + {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a4fb69a81ae2ec2b609574ae35420cf5647d227e4d0475c16aa861dd24e840b0"}, + {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7bacc8b77670322132a1b2522c50a1f62991e2f95591977455fd9a398b4e678d"}, + {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:437bf6eb47a2d20baaf7f6739895cb049e56896a5ffdea61a4b25da781966e8b"}, + {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30534a03c87484092080e3b6e789140bd277e40f453358900ad1f0f2e61fc8ec"}, + {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b30df4ff98703649915144be6f0df3b16fd4870ac38a09c56d5d9e54ff2d5f96"}, + {file = "yarl-1.17.0-cp311-cp311-win32.whl", hash = "sha256:263b487246858e874ab53e148e2a9a0de8465341b607678106829a81d81418c6"}, + {file = "yarl-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:07055a9e8b647a362e7d4810fe99d8f98421575e7d2eede32e008c89a65a17bd"}, + {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84095ab25ba69a8fa3fb4936e14df631b8a71193fe18bd38be7ecbe34d0f5512"}, + {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02608fb3f6df87039212fc746017455ccc2a5fc96555ee247c45d1e9f21f1d7b"}, + {file = "yarl-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13468d291fe8c12162b7cf2cdb406fe85881c53c9e03053ecb8c5d3523822cd9"}, + {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8da3f8f368fb7e2f052fded06d5672260c50b5472c956a5f1bd7bf474ae504ab"}, + {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec0507ab6523980bed050137007c76883d941b519aca0e26d4c1ec1f297dd646"}, + {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08fc76df7fd8360e9ff30e6ccc3ee85b8dbd6ed5d3a295e6ec62bcae7601b932"}, + {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d522f390686acb6bab2b917dd9ca06740c5080cd2eaa5aef8827b97e967319d"}, + {file = "yarl-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:147c527a80bb45b3dcd6e63401af8ac574125d8d120e6afe9901049286ff64ef"}, + {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:24cf43bcd17a0a1f72284e47774f9c60e0bf0d2484d5851f4ddf24ded49f33c6"}, + {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c28a44b9e0fba49c3857360e7ad1473fc18bc7f6659ca08ed4f4f2b9a52c75fa"}, + {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:350cacb2d589bc07d230eb995d88fcc646caad50a71ed2d86df533a465a4e6e1"}, + {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fd1ab1373274dea1c6448aee420d7b38af163b5c4732057cd7ee9f5454efc8b1"}, + {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4934e0f96dadc567edc76d9c08181633c89c908ab5a3b8f698560124167d9488"}, + {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d0a278170d75c88e435a1ce76557af6758bfebc338435b2eba959df2552163e"}, + {file = "yarl-1.17.0-cp312-cp312-win32.whl", hash = "sha256:61584f33196575a08785bb56db6b453682c88f009cd9c6f338a10f6737ce419f"}, + {file = "yarl-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:9987a439ad33a7712bd5bbd073f09ad10d38640425fa498ecc99d8aa064f8fc4"}, + {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8deda7b8eb15a52db94c2014acdc7bdd14cb59ec4b82ac65d2ad16dc234a109e"}, + {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56294218b348dcbd3d7fce0ffd79dd0b6c356cb2a813a1181af730b7c40de9e7"}, + {file = "yarl-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1fab91292f51c884b290ebec0b309a64a5318860ccda0c4940e740425a67b6b7"}, + {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf93fa61ff4d9c7d40482ce1a2c9916ca435e34a1b8451e17f295781ccc034f"}, + {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:261be774a0d71908c8830c33bacc89eef15c198433a8cc73767c10eeeb35a7d0"}, + {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deec9693b67f6af856a733b8a3e465553ef09e5e8ead792f52c25b699b8f9e6e"}, + {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c804b07622ba50a765ca7fb8145512836ab65956de01307541def869e4a456c9"}, + {file = "yarl-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d013a7c9574e98c14831a8f22d27277688ec3b2741d0188ac01a910b009987a"}, + {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e2cfcba719bd494c7413dcf0caafb51772dec168c7c946e094f710d6aa70494e"}, + {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c068aba9fc5b94dfae8ea1cedcbf3041cd4c64644021362ffb750f79837e881f"}, + {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3616df510ffac0df3c9fa851a40b76087c6c89cbcea2de33a835fc80f9faac24"}, + {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:755d6176b442fba9928a4df787591a6a3d62d4969f05c406cad83d296c5d4e05"}, + {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c18f6e708d1cf9ff5b1af026e697ac73bea9cb70ee26a2b045b112548579bed2"}, + {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5b937c216b6dee8b858c6afea958de03c5ff28406257d22b55c24962a2baf6fd"}, + {file = "yarl-1.17.0-cp313-cp313-win32.whl", hash = "sha256:d0131b14cb545c1a7bd98f4565a3e9bdf25a1bd65c83fc156ee5d8a8499ec4a3"}, + {file = "yarl-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:01c96efa4313c01329e88b7e9e9e1b2fc671580270ddefdd41129fa8d0db7696"}, + {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d44f67e193f0a7acdf552ecb4d1956a3a276c68e7952471add9f93093d1c30d"}, + {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16ea0aa5f890cdcb7ae700dffa0397ed6c280840f637cd07bffcbe4b8d68b985"}, + {file = "yarl-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf5469dc7dcfa65edf5cc3a6add9f84c5529c6b556729b098e81a09a92e60e51"}, + {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e662bf2f6e90b73cf2095f844e2bc1fda39826472a2aa1959258c3f2a8500a2f"}, + {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8260e88f1446904ba20b558fa8ce5d0ab9102747238e82343e46d056d7304d7e"}, + {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dc16477a4a2c71e64c5d3d15d7ae3d3a6bb1e8b955288a9f73c60d2a391282f"}, + {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46027e326cecd55e5950184ec9d86c803f4f6fe4ba6af9944a0e537d643cdbe0"}, + {file = "yarl-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc95e46c92a2b6f22e70afe07e34dbc03a4acd07d820204a6938798b16f4014f"}, + {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:16ca76c7ac9515320cd09d6cc083d8d13d1803f6ebe212b06ea2505fd66ecff8"}, + {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eb1a5b97388f2613f9305d78a3473cdf8d80c7034e554d8199d96dcf80c62ac4"}, + {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:41fd5498975418cdc34944060b8fbeec0d48b2741068077222564bea68daf5a6"}, + {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:146ca582ed04a5664ad04b0e0603934281eaab5c0115a5a46cce0b3c061a56a1"}, + {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:6abb8c06107dbec97481b2392dafc41aac091a5d162edf6ed7d624fe7da0587a"}, + {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d14be4613dd4f96c25feb4bd8c0d8ce0f529ab0ae555a17df5789e69d8ec0c5"}, + {file = "yarl-1.17.0-cp39-cp39-win32.whl", hash = "sha256:174d6a6cad1068f7850702aad0c7b1bca03bcac199ca6026f84531335dfc2646"}, + {file = "yarl-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:6af417ca2c7349b101d3fd557ad96b4cd439fdb6ab0d288e3f64a068eea394d0"}, + {file = "yarl-1.17.0-py3-none-any.whl", hash = "sha256:62dd42bb0e49423f4dd58836a04fcf09c80237836796025211bbe913f1524993"}, + {file = "yarl-1.17.0.tar.gz", hash = "sha256:d3f13583f378930377e02002b4085a3d025b00402d5a80911726d43a67911cd9"}, ] [package.dependencies] diff --git a/tests/docs_notebooks/requirements.txt b/tests/docs_notebooks/requirements.txt deleted file mode 100644 index 8420623f1..000000000 --- a/tests/docs_notebooks/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -jinja2==3.1.4 -nbformat==5.0.8 -nbconvert==6.5.1 From 1a618342d2850063a6ed83faac9a3fdfa447926f Mon Sep 17 00:00:00 2001 From: corey Date: Tue, 29 Oct 2024 14:02:34 -0700 Subject: [PATCH 05/12] update quickstart --- .../quickstart/llama_index_quickstart.ipynb | 25 ++++--------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/examples/quickstart/llama_index_quickstart.ipynb b/examples/quickstart/llama_index_quickstart.ipynb index c691a6019..df02ec177 100644 --- a/examples/quickstart/llama_index_quickstart.ipynb +++ b/examples/quickstart/llama_index_quickstart.ipynb @@ -53,7 +53,7 @@ "source": [ "import os\n", "\n", - "os.environ[\"OPENAI_API_KEY\"] = \"sk-...\"" + "os.environ[\"OPENAI_API_KEY\"] = \"sk-....\"" ] }, { @@ -371,18 +371,7 @@ "metadata": {}, "outputs": [], "source": [ - "from trulens.dashboard import run_dashboard\n", - "\n", - "run_dashboard(session)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# The results of the feedback functions can be rertireved from\n", + "# The results of the feedback functions can be retrieved from\n", "# `Record.feedback_results` or using the `wait_for_feedback_result` method. The\n", "# results if retrieved directly are `Future` instances (see\n", "# `concurrent.futures`). You can use `as_completed` to wait until they have\n", @@ -429,8 +418,9 @@ "metadata": {}, "outputs": [], "source": [ - "run_dashboard(session) # open a local streamlit app to explore\n", + "from trulens.dashboard import run_dashboard\n", "\n", + "run_dashboard(session) # open a local streamlit app to explore\n", "# stop_dashboard(session) # stop if needed" ] }, @@ -445,7 +435,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.4 ('agents')", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -459,11 +449,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "7d153714b979d5e6d08dd8ec90712dd93bff2c9b6c1f0c118169738af3430cd4" - } } }, "nbformat": 4, From baabd5114d3c4a35d14edd43836311d152f0e4d7 Mon Sep 17 00:00:00 2001 From: corey Date: Wed, 30 Oct 2024 09:24:32 -0700 Subject: [PATCH 06/12] notebook fixes --- Makefile | 9 +- .../llama_index_complex_evals.ipynb | 8 +- ...moguardrails_feedback_action_example.ipynb | 6 +- .../openai_assistants_api.ipynb | 19 +- .../Vectara_HHEM_evaluator.ipynb | 26 +- .../milvus_evals_build_better_rags.ipynb | 29 +- .../vector_stores/milvus/milvus_simple.ipynb | 15 +- .../langchain_quickstart.ipynb | 579 ++++++++++++++++++ .../llama_index_quickstart.ipynb | 466 ++++++++++++++ tests/docs_notebooks/test_notebooks.py | 2 +- 10 files changed, 1107 insertions(+), 52 deletions(-) create mode 100644 tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb create mode 100644 tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb diff --git a/Makefile b/Makefile index 372286b5c..a4be776fa 100644 --- a/Makefile +++ b/Makefile @@ -64,8 +64,12 @@ env-tests-db: env-tests env-tests-notebook: env-tests env-tests-optional poetry run pip install \ faiss-cpu \ + langchainhub \ + llama-hub \ + rank_bm25 \ ipytree \ - llama-index-readers-web + llama-index-readers-web \ + llama-index-vector-stores-milvus # Lock the poetry dependencies for all the subprojects. lock: $(POETRY_DIRS) @@ -202,6 +206,9 @@ test-%-allow-optional: env test-%-optional: env-tests-optional TEST_OPTIONAL=true make test-$* +test-notebook: env-tests-notebook + make test-notebook-optional + # Run the unit tests, those in the tests/unit. They are run in the CI pipeline # frequently. test-unit: diff --git a/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb b/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb index b87a25a3d..140c71d9f 100644 --- a/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb +++ b/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb @@ -95,7 +95,7 @@ "outputs": [], "source": [ "# Merge into a single large document rather than one document per-page\n", - "from llama_index import Document\n", + "from llama_index.core import Document\n", "\n", "document = Document(text=\"\\n\\n\".join([doc.text for doc in documents]))" ] @@ -107,8 +107,8 @@ "outputs": [], "source": [ "from llama_index.core import ServiceContext\n", - "from llama_index.llms import OpenAI\n", - "from llama_index.node_parser import SentenceWindowNodeParser\n", + "from llama_index.llms.openai import OpenAI\n", + "from llama_index.core.node_parser import SentenceWindowNodeParser\n", "\n", "# create the sentence window node parser w/ default settings\n", "node_parser = SentenceWindowNodeParser.from_defaults(\n", @@ -340,7 +340,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "milvus", + "display_name": "pkg_311", "language": "python", "name": "python3" }, diff --git a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb index 3728b06f0..d77c670da 100644 --- a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb +++ b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb @@ -109,7 +109,7 @@ "metadata": {}, "outputs": [], "source": [ - "from trulens.tru_rails import FeedbackActions\n", + "from trulens.apps.nemo.tru_rails import FeedbackActions\n", "\n", "FeedbackActions.register_feedback_functions(**fs_triad)\n", "FeedbackActions.register_feedback_functions(f_language_match)" @@ -142,7 +142,7 @@ "metadata": {}, "outputs": [], "source": [ - "from trulens.dashboard.notebook_utils import writefileinterpolated" + "from trulens.dashboard.utils.notebook_utils import writefileinterpolated" ] }, { @@ -479,7 +479,7 @@ ], "metadata": { "kernelspec": { - "display_name": "py311_trulens", + "display_name": "pkg_311", "language": "python", "name": "python3" }, diff --git a/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb b/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb index 1e293ee3e..3e383ac6a 100644 --- a/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb +++ b/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb @@ -112,17 +112,26 @@ " self.client = client\n", "\n", " # upload the file\\\n", - " file = client.files.create(\n", - " file=open(\"data/paul_graham_essay.txt\", \"rb\"), purpose=\"assistants\"\n", - " )\n", + " \n", "\n", " # create the assistant with access to a retrieval tool\n", " assistant = client.beta.assistants.create(\n", " name=\"Paul Graham Essay Assistant\",\n", " instructions=\"You are an assistant that answers questions about Paul Graham.\",\n", - " tools=[{\"type\": \"retrieval\"}],\n", " model=\"gpt-4-turbo-preview\",\n", - " file_ids=[file.id],\n", + " tools=[{\"type\": \"file_search\"}],\n", + " )\n", + "\n", + " vector_store = client.beta.vector_stores.create(name=\"Paul Graham\")\n", + "\n", + " files = [open(\"data/paul_graham_essay.txt\", \"rb\")]\n", + " client.beta.vector_stores.file_batches.upload_and_poll(\n", + " vector_store_id=vector_store.id, files=files\n", + " )\n", + "\n", + " assistant = client.beta.assistants.update(\n", + " assistant_id=assistant.id,\n", + " tool_resources={\"file_search\": {\"vector_store_ids\": [vector_store.id]}},\n", " )\n", "\n", " self.assistant = assistant\n", diff --git a/examples/expositional/models/local_and_OSS_models/Vectara_HHEM_evaluator.ipynb b/examples/expositional/models/local_and_OSS_models/Vectara_HHEM_evaluator.ipynb index 456d721e1..1b4733fd3 100644 --- a/examples/expositional/models/local_and_OSS_models/Vectara_HHEM_evaluator.ipynb +++ b/examples/expositional/models/local_and_OSS_models/Vectara_HHEM_evaluator.ipynb @@ -36,6 +36,18 @@ "# !pip install trulens trulens-providers-huggingface 'langchain==0.0.354' 'langchain-community==0.0.20' 'langchain-core==0.1.23'" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc8c6189", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ[\"HUGGINGFACE_API_KEY\"] = \"...\" " + ] + }, { "cell_type": "markdown", "id": "2d6a8601", @@ -54,8 +66,6 @@ "metadata": {}, "outputs": [], "source": [ - "import getpass\n", - "\n", "from langchain.document_loaders import DirectoryLoader\n", "from langchain.document_loaders import TextLoader\n", "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", @@ -97,16 +107,6 @@ "strong performance on highly competitive text embedding benchmarks without using any labeled data. Furthermore, when fine-tuned with a mixture of synthetic and labeled data, this model sets new state-of-the-art results on the BEIR and MTEB benchmarks.[Improving Text Embeddings with Large Language Models](https://arxiv.org/pdf/2401.00368.pdf). It also requires a unique prompting mechanism." ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "0104dec4-2473-4e28-847e-b129538bf996", - "metadata": {}, - "outputs": [], - "source": [ - "inference_api_key = getpass.getpass(\"Enter your HF Inference API Key:\\n\\n\")" - ] - }, { "cell_type": "code", "execution_count": null, @@ -117,7 +117,7 @@ "from langchain_community.embeddings import HuggingFaceInferenceAPIEmbeddings\n", "\n", "embedding_function = HuggingFaceInferenceAPIEmbeddings(\n", - " api_key=inference_api_key,\n", + " api_key=os.environ[\"HUGGINGFACE_API_KEY\"],\n", " model_name=\"intfloat/multilingual-e5-large-instruct\",\n", ")" ] diff --git a/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb b/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb index 2c7e846d4..066ffb11d 100644 --- a/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb +++ b/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb @@ -32,7 +32,7 @@ "metadata": {}, "outputs": [], "source": [ - "# !pip install trulens trulens-apps-llamaindex trulens-providers-openai llama_index==0.8.4 pymilvus==2.3.0 nltk==3.8.1 html2text==2020.1.16 tenacity==8.2.3" + "# !pip install trulens trulens-apps-llamaindex trulens-providers-openai llama-index llama-index-vector-stores-milvus nltk html2text tenacity" ] }, { @@ -70,12 +70,12 @@ "outputs": [], "source": [ "from langchain.embeddings import HuggingFaceEmbeddings\n", - "from langchain.embeddings.openai import OpenAIEmbeddings\n", - "from llama_index import ServiceContext\n", - "from llama_index import VectorStoreIndex\n", - "from llama_index.llms import OpenAI\n", - "from llama_index.storage.storage_context import StorageContext\n", - "from llama_index.vector_stores import MilvusVectorStore\n", + "from langchain.embeddings.openai import OpenAIEmbeddingst\n", + "from llama_index.core import Settings\n", + "from llama_index.core import VectorStoreIndex\n", + "from llama_index.llms.openai import OpenAI\n", + "from llama_index.core.storage.storage_context import StorageContext\n", + "from llama_index.vector_stores.milvus import MilvusVectorStore\n", "from tenacity import retry\n", "from tenacity import stop_after_attempt\n", "from tenacity import wait_exponential\n", @@ -174,9 +174,13 @@ " model_name=\"sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2\"\n", ")\n", "storage_context = StorageContext.from_defaults(vector_store=vector_store)\n", - "service_context = ServiceContext.from_defaults(embed_model=embed_v12, llm=llm)\n", + "\n", + "\n", + "Settings.llm = llm\n", + "Settings.embed_model = embed_v12\n", + "\n", "index = VectorStoreIndex.from_documents(\n", - " wiki_docs, service_context=service_context, storage_context=storage_context\n", + " wiki_docs, storage_context=storage_context\n", ")\n", "query_engine = index.as_query_engine(top_k=5)\n", "\n", @@ -360,7 +364,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.4 ('milvus')", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -374,11 +378,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "12da0033b6ee0a044900ff965f51baf1f826c79f2500e7fd02d2f79bac1ea7cb" - } } }, "nbformat": 4, diff --git a/examples/expositional/vector_stores/milvus/milvus_simple.ipynb b/examples/expositional/vector_stores/milvus/milvus_simple.ipynb index 8775cb746..c0f5b541b 100644 --- a/examples/expositional/vector_stores/milvus/milvus_simple.ipynb +++ b/examples/expositional/vector_stores/milvus/milvus_simple.ipynb @@ -34,7 +34,7 @@ "metadata": {}, "outputs": [], "source": [ - "# !pip install trulens trulens-apps-llamaindex trulens-providers-openai llama_index==0.8.4 pymilvus==2.3.0 nltk==3.8.1 html2text==2020.1.16" + "# !pip install trulens trulens-apps-llamaindex trulens-providers-openai llama-index llama-index-vector-stores-milvus nltk html2text" ] }, { @@ -71,10 +71,10 @@ "metadata": {}, "outputs": [], "source": [ - "from llama_index import VectorStoreIndex\n", + "from llama_index.core import VectorStoreIndex\n", "from llama_index.readers.web import SimpleWebPageReader\n", - "from llama_index.storage.storage_context import StorageContext\n", - "from llama_index.vector_stores import MilvusVectorStore\n", + "from llama_index.core.storage.storage_context import StorageContext\n", + "from llama_index.vector_stores.milvus import MilvusVectorStore\n", "from trulens.core import Feedback\n", "from trulens.core import TruSession\n", "from trulens.feedback.v2.feedback import Groundedness\n", @@ -280,7 +280,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.4 ('milvus')", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -294,11 +294,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "12da0033b6ee0a044900ff965f51baf1f826c79f2500e7fd02d2f79bac1ea7cb" - } } }, "nbformat": 4, diff --git a/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb b/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb new file mode 100644 index 000000000..60b5fa9d6 --- /dev/null +++ b/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb @@ -0,0 +1,579 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 📓 LangChain Quickstart\n", + "\n", + "In this quickstart you will create a simple LCEL Chain and learn how to log it and get feedback on an LLM response.\n", + "\n", + "For evaluation, we will leverage the RAG triad of groundedness, context relevance and answer relevance.\n", + "\n", + "You'll also learn how to use feedbacks for guardrails, via filtering retrieved context.\n", + "\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/truera/trulens/blob/main/examples/quickstart/langchain_quickstart.ipynb)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "### Add API keys\n", + "For this quickstart you will need Open AI and Huggingface keys" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install trulens trulens-apps-langchain trulens-providers-openai openai langchain langchainhub langchain-openai langchain_community faiss-cpu bs4 tiktoken" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = \"sk-....\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import from LangChain and TruLens" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Imports main tools:\n", + "from trulens.apps.langchain import TruChain\n", + "from trulens.core import TruSession\n", + "\n", + "session = TruSession()\n", + "session.reset_database()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Imports from LangChain to build app\n", + "import bs4\n", + "from langchain import hub\n", + "from langchain.chat_models import ChatOpenAI\n", + "from langchain.document_loaders import WebBaseLoader\n", + "from langchain.schema import StrOutputParser\n", + "from langchain_core.runnables import RunnablePassthrough" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load documents" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "loader = WebBaseLoader(\n", + " web_paths=(\"https://lilianweng.github.io/posts/2023-06-23-agent/\",),\n", + " bs_kwargs=dict(\n", + " parse_only=bs4.SoupStrainer(\n", + " class_=(\"post-content\", \"post-title\", \"post-header\")\n", + " )\n", + " ),\n", + ")\n", + "docs = loader.load()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Vector Store" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_community.vectorstores import FAISS\n", + "from langchain_openai import OpenAIEmbeddings\n", + "from langchain_text_splitters import RecursiveCharacterTextSplitter\n", + "\n", + "embeddings = OpenAIEmbeddings()\n", + "\n", + "\n", + "text_splitter = RecursiveCharacterTextSplitter()\n", + "documents = text_splitter.split_documents(docs)\n", + "vectorstore = FAISS.from_documents(documents, embeddings)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create RAG" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "retriever = vectorstore.as_retriever()\n", + "\n", + "prompt = hub.pull(\"rlm/rag-prompt\")\n", + "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "\n", + "\n", + "def format_docs(docs):\n", + " return \"\\n\\n\".join(doc.page_content for doc in docs)\n", + "\n", + "\n", + "rag_chain = (\n", + " {\"context\": retriever | format_docs, \"question\": RunnablePassthrough()}\n", + " | prompt\n", + " | llm\n", + " | StrOutputParser()\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Send your first request" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rag_chain.invoke(\"What is Task Decomposition?\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialize Feedback Function(s)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from trulens.core import Feedback\n", + "from trulens.providers.openai import OpenAI\n", + "\n", + "# Initialize provider class\n", + "provider = OpenAI()\n", + "\n", + "# select context to be used in feedback. the location of context is app specific.\n", + "context = TruChain.select_context(rag_chain)\n", + "\n", + "# Define a groundedness feedback function\n", + "f_groundedness = (\n", + " Feedback(\n", + " provider.groundedness_measure_with_cot_reasons, name=\"Groundedness\"\n", + " )\n", + " .on(context.collect()) # collect context chunks into a list\n", + " .on_output()\n", + ")\n", + "\n", + "# Question/answer relevance between overall question and answer.\n", + "f_answer_relevance = Feedback(\n", + " provider.relevance_with_cot_reasons, name=\"Answer Relevance\"\n", + ").on_input_output()\n", + "# Context relevance between question and each context chunk.\n", + "f_context_relevance = (\n", + " Feedback(\n", + " provider.context_relevance_with_cot_reasons, name=\"Context Relevance\"\n", + " )\n", + " .on_input()\n", + " .on(context)\n", + " .aggregate(np.mean)\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Instrument chain for logging with TruLens" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tru_recorder = TruChain(\n", + " rag_chain,\n", + " app_name=\"ChatApplication\",\n", + " app_version=\"Chain1\",\n", + " feedbacks=[f_answer_relevance, f_context_relevance, f_groundedness],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with tru_recorder as recording:\n", + " llm_response = rag_chain.invoke(\"What is Task Decomposition?\")\n", + "\n", + "display(llm_response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "session.get_leaderboard()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By looking closer at context relevance, we see that our retriever is returning irrelevant context." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.dashboard.display import get_feedback_result\n", + "\n", + "last_record = recording.records[-1]\n", + "get_feedback_result(last_record, \"Context Relevance\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use guardrails\n", + "\n", + "In addition to making informed iteration, we can also directly use feedback results as guardrails at inference time. In particular, here we show how to use the context relevance score as a guardrail to filter out irrelevant context before it gets passed to the LLM. This both reduces hallucination and improves efficiency.\n", + "\n", + "Below, you can see the TruLens feedback display of each context relevance chunk retrieved by our RAG." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wouldn't it be great if we could automatically filter out context chunks with relevance scores below 0.5?\n", + "\n", + "We can do so with the TruLens guardrail, *WithFeedbackFilterDocuments*. All we have to do is use the method `of_retriever` to create a new filtered retriever, passing in the original retriever along with the feedback function and threshold we want to use." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.apps.langchain import WithFeedbackFilterDocuments\n", + "\n", + "# note: feedback function used for guardrail must only return a score, not also reasons\n", + "f_context_relevance_score = Feedback(provider.context_relevance)\n", + "\n", + "filtered_retriever = WithFeedbackFilterDocuments.of_retriever(\n", + " retriever=retriever, feedback=f_context_relevance_score, threshold=0.75\n", + ")\n", + "\n", + "rag_chain = (\n", + " {\n", + " \"context\": filtered_retriever | format_docs,\n", + " \"question\": RunnablePassthrough(),\n", + " }\n", + " | prompt\n", + " | llm\n", + " | StrOutputParser()\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we can operate as normal" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tru_recorder = TruChain(\n", + " rag_chain,\n", + " app_name=\"ChatApplication_Filtered\",\n", + " app_version=\"Chain1\",\n", + " feedbacks=[f_answer_relevance, f_context_relevance, f_groundedness],\n", + ")\n", + "\n", + "with tru_recorder as recording:\n", + " llm_response = rag_chain.invoke(\"What is Task Decomposition?\")\n", + "\n", + "display(llm_response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## See the power of context filters!\n", + "\n", + "If we inspect the context relevance of our retrieval now, you see only relevant context chunks!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.dashboard.display import get_feedback_result\n", + "\n", + "last_record = recording.records[-1]\n", + "get_feedback_result(last_record, \"Context Relevance\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.dashboard import run_dashboard\n", + "\n", + "run_dashboard(session)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Retrieve records and feedback" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The record of the app invocation can be retrieved from the `recording`:\n", + "\n", + "rec = recording.get() # use .get if only one record\n", + "# recs = recording.records # use .records if multiple\n", + "\n", + "display(rec)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The results of the feedback functions can be rertrieved from\n", + "# `Record.feedback_results` or using the `wait_for_feedback_result` method. The\n", + "# results if retrieved directly are `Future` instances (see\n", + "# `concurrent.futures`). You can use `as_completed` to wait until they have\n", + "# finished evaluating or use the utility method:\n", + "\n", + "for feedback, feedback_result in rec.wait_for_feedback_results().items():\n", + " print(feedback.name, feedback_result.result)\n", + "\n", + "# See more about wait_for_feedback_results:\n", + "# help(rec.wait_for_feedback_results)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "records, feedback = session.get_records_and_feedback()\n", + "\n", + "records.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "session.get_leaderboard()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Explore in a Dashboard" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run_dashboard(session) # open a local streamlit app to explore\n", + "\n", + "# stop_dashboard(session) # stop if needed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Learn more about the call stack" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "json_like = last_record.layout_calls_as_app()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "json_like" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ipytree import Node\n", + "from ipytree import Tree\n", + "\n", + "\n", + "def display_call_stack(data):\n", + " tree = Tree()\n", + " tree.add_node(Node(\"Record ID: {}\".format(data[\"record_id\"])))\n", + " tree.add_node(Node(\"App ID: {}\".format(data[\"app_id\"])))\n", + " tree.add_node(Node(\"Cost: {}\".format(data[\"cost\"])))\n", + " tree.add_node(Node(\"Performance: {}\".format(data[\"perf\"])))\n", + " tree.add_node(Node(\"Timestamp: {}\".format(data[\"ts\"])))\n", + " tree.add_node(Node(\"Tags: {}\".format(data[\"tags\"])))\n", + " tree.add_node(Node(\"Main Input: {}\".format(data[\"main_input\"])))\n", + " tree.add_node(Node(\"Main Output: {}\".format(data[\"main_output\"])))\n", + " tree.add_node(Node(\"Main Error: {}\".format(data[\"main_error\"])))\n", + "\n", + " calls_node = Node(\"Calls\")\n", + " tree.add_node(calls_node)\n", + "\n", + " for call in data[\"calls\"]:\n", + " call_node = Node(\"Call\")\n", + " calls_node.add_node(call_node)\n", + "\n", + " for step in call[\"stack\"]:\n", + " step_node = Node(\"Step: {}\".format(step[\"path\"]))\n", + " call_node.add_node(step_node)\n", + " if \"expanded\" in step:\n", + " expanded_node = Node(\"Expanded\")\n", + " step_node.add_node(expanded_node)\n", + " for expanded_step in step[\"expanded\"]:\n", + " expanded_step_node = Node(\n", + " \"Step: {}\".format(expanded_step[\"path\"])\n", + " )\n", + " expanded_node.add_node(expanded_step_node)\n", + "\n", + " return tree\n", + "\n", + "\n", + "# Usage\n", + "tree = display_call_stack(json_like)\n", + "tree" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pkg_311", + "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" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb b/tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb new file mode 100644 index 000000000..2511fb1dd --- /dev/null +++ b/tests/docs_notebooks/notebooks_to_test/llama_index_quickstart.ipynb @@ -0,0 +1,466 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 📓 LlamaIndex Quickstart\n", + "\n", + "In this quickstart you will create a simple Llama Index app and learn how to log it and get feedback on an LLM response.\n", + "\n", + "You'll also learn how to use feedbacks for guardrails, via filtering retrieved context.\n", + "\n", + "For evaluation, we will leverage the RAG triad of groundedness, context relevance and answer relevance.\n", + "\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/truera/trulens/blob/main/examples/quickstart/llama_index_quickstart.ipynb)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "### Install dependencies\n", + "Let's install some of the dependencies for this notebook if we don't have them already" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install trulens trulens-apps-llamaindex trulens-providers-openai llama_index openai" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Add API keys\n", + "For this quickstart, you will need an Open AI key. The OpenAI key is used for embeddings, completion and evaluation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = \"sk-....\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Import from TruLens" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.core import TruSession\n", + "\n", + "session = TruSession()\n", + "session.reset_database()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Download data\n", + "\n", + "This example uses the text of Paul Graham’s essay, [“What I Worked On”](https://paulgraham.com/worked.html), and is the canonical llama-index example.\n", + "\n", + "The easiest way to get it is to [download it via this link](https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt) and save it in a folder called data. You can do so with the following command:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import urllib.request\n", + "\n", + "url = \"https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt\"\n", + "file_path = \"data/paul_graham_essay.txt\"\n", + "\n", + "if not os.path.exists(\"data\"):\n", + " os.makedirs(\"data\")\n", + "\n", + "if not os.path.exists(file_path):\n", + " urllib.request.urlretrieve(url, file_path)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create Simple LLM Application\n", + "\n", + "This example uses LlamaIndex which internally uses an OpenAI LLM." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from llama_index.core import Settings\n", + "from llama_index.core import SimpleDirectoryReader\n", + "from llama_index.core import VectorStoreIndex\n", + "from llama_index.llms.openai import OpenAI\n", + "\n", + "Settings.chunk_size = 128\n", + "Settings.chunk_overlap = 16\n", + "Settings.llm = OpenAI()\n", + "\n", + "documents = SimpleDirectoryReader(\"data\").load_data()\n", + "index = VectorStoreIndex.from_documents(documents)\n", + "\n", + "query_engine = index.as_query_engine(similarity_top_k=3)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Send your first request" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "response = query_engine.query(\"What did the author do growing up?\")\n", + "print(response)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialize Feedback Function(s)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from trulens.apps.llamaindex import TruLlama\n", + "from trulens.core import Feedback\n", + "from trulens.providers.openai import OpenAI\n", + "\n", + "# Initialize provider class\n", + "provider = OpenAI()\n", + "\n", + "# select context to be used in feedback. the location of context is app specific.\n", + "\n", + "context = TruLlama.select_context(query_engine)\n", + "\n", + "# Define a groundedness feedback function\n", + "f_groundedness = (\n", + " Feedback(\n", + " provider.groundedness_measure_with_cot_reasons, name=\"Groundedness\"\n", + " )\n", + " .on(context.collect()) # collect context chunks into a list\n", + " .on_output()\n", + ")\n", + "\n", + "# Question/answer relevance between overall question and answer.\n", + "f_answer_relevance = Feedback(\n", + " provider.relevance_with_cot_reasons, name=\"Answer Relevance\"\n", + ").on_input_output()\n", + "# Question/statement relevance between question and each context chunk.\n", + "f_context_relevance = (\n", + " Feedback(\n", + " provider.context_relevance_with_cot_reasons, name=\"Context Relevance\"\n", + " )\n", + " .on_input()\n", + " .on(context)\n", + " .aggregate(np.mean)\n", + ")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Instrument app for logging with TruLens" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tru_query_engine_recorder = TruLlama(\n", + " query_engine,\n", + " app_name=\"LlamaIndex_App\",\n", + " app_version=\"base\",\n", + " feedbacks=[f_groundedness, f_answer_relevance, f_context_relevance],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# or as context manager\n", + "with tru_query_engine_recorder as recording:\n", + " query_engine.query(\"What did the author do growing up?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use guardrails\n", + "\n", + "In addition to making informed iteration, we can also directly use feedback results as guardrails at inference time. In particular, here we show how to use the context relevance score as a guardrail to filter out irrelevant context before it gets passed to the LLM. This both reduces hallucination and improves efficiency.\n", + "\n", + "Below, you can see the TruLens feedback display of each context relevance chunk retrieved by our RAG." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.dashboard.display import get_feedback_result\n", + "\n", + "last_record = recording.records[-1]\n", + "get_feedback_result(last_record, \"Context Relevance\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wouldn't it be great if we could automatically filter out context chunks with relevance scores below 0.5?\n", + "\n", + "We can do so with the TruLens guardrail, *WithFeedbackFilterNodes*. All we have to do is use the method `of_query_engine` to create a new filtered retriever, passing in the original retriever along with the feedback function and threshold we want to use." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.apps.llamaindex.guardrails import WithFeedbackFilterNodes\n", + "\n", + "# note: feedback function used for guardrail must only return a score, not also reasons\n", + "f_context_relevance_score = Feedback(provider.context_relevance)\n", + "\n", + "filtered_query_engine = WithFeedbackFilterNodes(\n", + " query_engine, feedback=f_context_relevance_score, threshold=0.5\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we can operate as normal" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tru_recorder = TruLlama(\n", + " filtered_query_engine,\n", + " app_name=\"LlamaIndex_App\",\n", + " app_version=\"filtered\",\n", + " feedbacks=[f_answer_relevance, f_context_relevance, f_groundedness],\n", + ")\n", + "\n", + "with tru_recorder as recording:\n", + " llm_response = filtered_query_engine.query(\n", + " \"What did the author do growing up?\"\n", + " )\n", + "\n", + "display(llm_response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## See the power of context filters!\n", + "\n", + "If we inspect the context relevance of our retrieval now, you see only relevant context chunks!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.dashboard.display import get_feedback_result\n", + "\n", + "last_record = recording.records[-1]\n", + "get_feedback_result(last_record, \"Context Relevance\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "session.get_leaderboard()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Retrieve records and feedback" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The record of the app invocation can be retrieved from the `recording`:\n", + "\n", + "rec = recording.get() # use .get if only one record\n", + "# recs = recording.records # use .records if multiple\n", + "\n", + "display(rec)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from trulens.dashboard import run_dashboard\n", + "\n", + "run_dashboard(session)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The results of the feedback functions can be rertireved from\n", + "# `Record.feedback_results` or using the `wait_for_feedback_result` method. The\n", + "# results if retrieved directly are `Future` instances (see\n", + "# `concurrent.futures`). You can use `as_completed` to wait until they have\n", + "# finished evaluating or use the utility method:\n", + "\n", + "for feedback, feedback_result in rec.wait_for_feedback_results().items():\n", + " print(feedback.name, feedback_result.result)\n", + "\n", + "# See more about wait_for_feedback_results:\n", + "# help(rec.wait_for_feedback_results)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "records, feedback = session.get_records_and_feedback()\n", + "\n", + "records.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "session.get_leaderboard()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Explore in a Dashboard" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "run_dashboard(session) # open a local streamlit app to explore\n", + "\n", + "# stop_dashboard(session) # stop if needed" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, you can run `trulens` from a command line in the same folder to start the dashboard." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pkg_311", + "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" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tests/docs_notebooks/test_notebooks.py b/tests/docs_notebooks/test_notebooks.py index 59f1a9ca5..9a6bfa129 100644 --- a/tests/docs_notebooks/test_notebooks.py +++ b/tests/docs_notebooks/test_notebooks.py @@ -80,7 +80,7 @@ def preprocess_cell(self, cell, resources, index, **kwargs): NOTEBOOKS_TO_TEST = glob.glob( - "./tests/docs_notebooks/notebooks_to_test/**/*.ipynb" + "./tests/docs_notebooks/notebooks_to_test/**/*.ipynb", recursive=True ) From 78617401950aa8a691e4fe15d0b1e6e04b2a1710 Mon Sep 17 00:00:00 2001 From: corey Date: Wed, 30 Oct 2024 09:56:33 -0700 Subject: [PATCH 07/12] replace gpt 3.5 with 4o-mini --- .../langchain/langchain_agents.ipynb | 4 +- .../langchain/langchain_math_agent.ipynb | 15 +-- .../langchain/langchain_retrieval_agent.ipynb | 6 +- .../llama_index/llama_index_agents.ipynb | 19 ++-- .../llama_index_complex_evals.ipynb | 2 +- ...moguardrails_feedback_action_example.ipynb | 2 +- .../nemoguardrails_trurails_example.ipynb | 2 +- .../models/anthropic/claude3_quickstart.ipynb | 2 +- .../iterate_on_rag/1_rag_prototype.ipynb | 2 +- .../iterate_on_rag/2_honest_rag.ipynb | 2 +- .../iterate_on_rag/3_harmless_eval.ipynb | 2 +- .../iterate_on_rag/4_harmless_rag.ipynb | 4 +- .../iterate_on_rag/5_helpful_eval.ipynb | 4 +- .../use_cases/language_verification.ipynb | 12 +-- .../use_cases/model_comparison.ipynb | 40 ++------ .../expositional/use_cases/moderation.ipynb | 12 +-- .../milvus_evals_build_better_rags.ipynb | 4 +- .../pinecone_evals_build_better_rags.ipynb | 4 +- .../pinecone/pinecone_quickstart.ipynb | 2 +- examples/quickstart/custom_stream.ipynb | 2 +- .../quickstart/existing_data_quickstart.ipynb | 6 +- examples/quickstart/groundtruth_evals.ipynb | 2 +- ...undtruth_evals_for_retrieval_systems.ipynb | 2 +- examples/quickstart/human_feedback.ipynb | 2 +- .../quickstart/langchain_quickstart.ipynb | 2 +- examples/quickstart/prototype_evals.ipynb | 2 +- examples/quickstart/quickstart.ipynb | 2 +- .../quickstart/text2text_quickstart.ipynb | 2 +- .../answer_relevance_benchmark_small.ipynb | 34 +++---- .../comprehensiveness_benchmark.ipynb | 92 ++++++------------- .../context_relevance_benchmark.ipynb | 32 ++----- .../context_relevance_benchmark_small.ipynb | 37 ++------ .../benchmark/groundedness_benchmark.ipynb | 36 ++++---- 33 files changed, 135 insertions(+), 258 deletions(-) diff --git a/examples/expositional/frameworks/langchain/langchain_agents.ipynb b/examples/expositional/frameworks/langchain/langchain_agents.ipynb index c1570fc1c..4874f0db9 100644 --- a/examples/expositional/frameworks/langchain/langchain_agents.ipynb +++ b/examples/expositional/frameworks/langchain/langchain_agents.ipynb @@ -124,7 +124,7 @@ " description=\"useful for when you need to answer questions about current events\",\n", ")\n", "\n", - "llm = ChatOpenAI(model=\"gpt-3.5-turbo\", temperature=0)\n", + "llm = ChatOpenAI(model=\"gpt-4o-mini\", temperature=0)\n", "\n", "tools = [search_tool]\n", "\n", @@ -152,7 +152,7 @@ " return (\n", " float(\n", " self.endpoint.client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", diff --git a/examples/expositional/frameworks/langchain/langchain_math_agent.ipynb b/examples/expositional/frameworks/langchain/langchain_math_agent.ipynb index 06be534d4..d3bea8fbd 100644 --- a/examples/expositional/frameworks/langchain/langchain_math_agent.ipynb +++ b/examples/expositional/frameworks/langchain/langchain_math_agent.ipynb @@ -26,7 +26,7 @@ "metadata": {}, "outputs": [], "source": [ - "# !pip install trulens trulens-apps-langchain langchain==0.0.283" + "# !pip install trulens trulens-apps-langchain langchain langchain-openai" ] }, { @@ -35,11 +35,11 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain import LLMMathChain\n", + "from langchain.chains.llm_math.base import LLMMathChain\n", "from langchain.agents import AgentType\n", "from langchain.agents import Tool\n", "from langchain.agents import initialize_agent\n", - "from langchain.chat_models import ChatOpenAI\n", + "from langchain_openai.chat_models import ChatOpenAI\n", "from trulens.core import TruSession\n", "from trulens.apps.langchain import TruChain\n", "\n", @@ -80,7 +80,7 @@ "metadata": {}, "outputs": [], "source": [ - "llm = ChatOpenAI(temperature=0, model=\"gpt-3.5-turbo-0613\")\n", + "llm = ChatOpenAI(temperature=0)\n", "\n", "llm_math_chain = LLMMathChain.from_llm(llm, verbose=True)\n", "\n", @@ -139,7 +139,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.4 ('agents')", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -153,11 +153,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "7d153714b979d5e6d08dd8ec90712dd93bff2c9b6c1f0c118169738af3430cd4" - } } }, "nbformat": 4, diff --git a/examples/expositional/frameworks/langchain/langchain_retrieval_agent.ipynb b/examples/expositional/frameworks/langchain/langchain_retrieval_agent.ipynb index aef73b257..8337be5c4 100644 --- a/examples/expositional/frameworks/langchain/langchain_retrieval_agent.ipynb +++ b/examples/expositional/frameworks/langchain/langchain_retrieval_agent.ipynb @@ -130,7 +130,7 @@ "metadata": {}, "outputs": [], "source": [ - "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo-16k\", temperature=0.0)\n", + "llm = ChatOpenAI(model_name=\"gpt-4o-mini\", temperature=0.0)\n", "\n", "conversational_memory = ConversationSummaryBufferMemory(\n", " k=4,\n", @@ -245,7 +245,7 @@ " return (\n", " float(\n", " self.endpoint.client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", @@ -267,7 +267,7 @@ " return (\n", " float(\n", " self.endpoint.client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", diff --git a/examples/expositional/frameworks/llama_index/llama_index_agents.ipynb b/examples/expositional/frameworks/llama_index/llama_index_agents.ipynb index 7891a4728..0d7485aea 100644 --- a/examples/expositional/frameworks/llama_index/llama_index_agents.ipynb +++ b/examples/expositional/frameworks/llama_index/llama_index_agents.ipynb @@ -145,7 +145,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Create a standalone GPT3.5 for comparison" + "### Create a standalone GPT for comparison" ] }, { @@ -154,9 +154,7 @@ "metadata": {}, "outputs": [], "source": [ - "client = openai.OpenAI()\n", - "\n", - "chat_completion = client.chat.completions.create" + "client = openai.OpenAI()" ] }, { @@ -166,15 +164,15 @@ "outputs": [], "source": [ "from trulens.apps.custom import TruCustomApp\n", - "from trulens.core import instrument\n", + "from trulens.core.instruments import instrument\n", "\n", "\n", "class LLMStandaloneApp:\n", " @instrument\n", " def __call__(self, prompt):\n", " return (\n", - " chat_completion(\n", - " model=\"gpt-3.5-turbo\",\n", + " client.chat.completions.create(\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\"role\": \"system\", \"content\": gordon_ramsay_prompt},\n", " {\"role\": \"user\", \"content\": prompt},\n", @@ -486,7 +484,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -500,11 +498,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "7d153714b979d5e6d08dd8ec90712dd93bff2c9b6c1f0c118169738af3430cd4" - } } }, "nbformat": 4, diff --git a/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb b/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb index 140c71d9f..31418a4d4 100644 --- a/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb +++ b/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb @@ -117,7 +117,7 @@ " original_text_metadata_key=\"original_text\",\n", ")\n", "\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.1)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.1)\n", "sentence_context = ServiceContext.from_defaults(\n", " llm=llm,\n", " embed_model=\"local:BAAI/bge-small-en-v1.5\",\n", diff --git a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb index d77c670da..8082cac55 100644 --- a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb +++ b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb @@ -170,7 +170,7 @@ "models:\n", " - type: main\n", " engine: openai\n", - " model: gpt-3.5-turbo-instruct\n", + " model: gpt-4o-mini\n", "\n", "rails:\n", " output:\n", diff --git a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb index 59ceb766d..6d7112b16 100644 --- a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb +++ b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb @@ -88,7 +88,7 @@ "models:\n", " - type: main\n", " engine: openai\n", - " model: gpt-3.5-turbo-instruct" + " model: gpt-4o-mini" ] }, { diff --git a/examples/expositional/models/anthropic/claude3_quickstart.ipynb b/examples/expositional/models/anthropic/claude3_quickstart.ipynb index 7b957b298..704863f77 100644 --- a/examples/expositional/models/anthropic/claude3_quickstart.ipynb +++ b/examples/expositional/models/anthropic/claude3_quickstart.ipynb @@ -178,7 +178,7 @@ " \"\"\"\n", " completion = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb b/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb index 4f68a9e00..98b49465f 100644 --- a/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb +++ b/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb @@ -92,7 +92,7 @@ "from llama_index.llms.openai import OpenAI\n", "\n", "# initialize llm\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.5)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.5)\n", "\n", "# knowledge store\n", "document = Document(text=\"\\n\\n\".join([doc.text for doc in documents]))\n", diff --git a/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb b/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb index 0b810e4a9..079c5d7ae 100644 --- a/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb +++ b/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb @@ -180,7 +180,7 @@ "from llama_index.llms.openai import OpenAI\n", "\n", "# initialize llm\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.5)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.5)\n", "\n", "# knowledge store\n", "document = Document(text=\"\\n\\n\".join([doc.text for doc in documents]))\n", diff --git a/examples/expositional/use_cases/iterate_on_rag/3_harmless_eval.ipynb b/examples/expositional/use_cases/iterate_on_rag/3_harmless_eval.ipynb index d666984b7..f69b0545f 100644 --- a/examples/expositional/use_cases/iterate_on_rag/3_harmless_eval.ipynb +++ b/examples/expositional/use_cases/iterate_on_rag/3_harmless_eval.ipynb @@ -185,7 +185,7 @@ "from llama_index.llms.openai import OpenAI\n", "\n", "# initialize llm\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.5)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.5)\n", "\n", "# knowledge store\n", "document = Document(text=\"\\n\\n\".join([doc.text for doc in documents]))\n", diff --git a/examples/expositional/use_cases/iterate_on_rag/4_harmless_rag.ipynb b/examples/expositional/use_cases/iterate_on_rag/4_harmless_rag.ipynb index 909b11ecf..d58752339 100644 --- a/examples/expositional/use_cases/iterate_on_rag/4_harmless_rag.ipynb +++ b/examples/expositional/use_cases/iterate_on_rag/4_harmless_rag.ipynb @@ -184,7 +184,7 @@ "from llama_index.llms.openai import OpenAI\n", "\n", "# initialize llm\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.5)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.5)\n", "\n", "# knowledge store\n", "document = Document(text=\"\\n\\n\".join([doc.text for doc in documents]))\n", @@ -274,7 +274,7 @@ "outputs": [], "source": [ "# lower temperature\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.1)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.1)\n", "\n", "sentence_index = build_sentence_window_index(\n", " document,\n", diff --git a/examples/expositional/use_cases/iterate_on_rag/5_helpful_eval.ipynb b/examples/expositional/use_cases/iterate_on_rag/5_helpful_eval.ipynb index bb49e7c1b..a3219d852 100644 --- a/examples/expositional/use_cases/iterate_on_rag/5_helpful_eval.ipynb +++ b/examples/expositional/use_cases/iterate_on_rag/5_helpful_eval.ipynb @@ -153,7 +153,7 @@ "from llama_index.llms.openai import OpenAI\n", "\n", "# initialize llm\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.5)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.5)\n", "\n", "# knowledge store\n", "document = Document(text=\"\\n\\n\".join([doc.text for doc in documents]))\n", @@ -229,7 +229,7 @@ "\n", "\n", "# lower temperature\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.1)\n", + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.1)\n", "\n", "sentence_index = build_sentence_window_index(\n", " document,\n", diff --git a/examples/expositional/use_cases/language_verification.ipynb b/examples/expositional/use_cases/language_verification.ipynb index 244c42927..a843ffc8e 100644 --- a/examples/expositional/use_cases/language_verification.ipynb +++ b/examples/expositional/use_cases/language_verification.ipynb @@ -98,9 +98,9 @@ "metadata": {}, "outputs": [], "source": [ - "def gpt35_turbo(prompt):\n", + "def gpt(prompt):\n", " return openai.ChatCompletion.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", @@ -168,8 +168,8 @@ "source": [ "from trulens.apps.basic import TruBasicApp\n", "\n", - "gpt35_turbo_recorder = TruBasicApp(\n", - " gpt35_turbo, app_name=\"gpt-3.5-turbo\", feedbacks=feedbacks\n", + "openai_recorder = TruBasicApp(\n", + " gpt, app_name=\"OpenAI\", feedbacks=feedbacks\n", ")" ] }, @@ -203,10 +203,10 @@ "metadata": {}, "outputs": [], "source": [ - "with gpt35_turbo_recorder as recording:\n", + "with openai_recorder as recording:\n", " for prompt in prompts:\n", " print(prompt)\n", - " gpt35_turbo_recorder.app(prompt)" + " openai_recorder.app(prompt)" ] }, { diff --git a/examples/expositional/use_cases/model_comparison.ipynb b/examples/expositional/use_cases/model_comparison.ipynb index 73d2afdaa..f509c229c 100644 --- a/examples/expositional/use_cases/model_comparison.ipynb +++ b/examples/expositional/use_cases/model_comparison.ipynb @@ -101,22 +101,9 @@ "metadata": {}, "outputs": [], "source": [ - "def gpt35_turbo(prompt):\n", + "def gpt4o_mini(prompt):\n", " return openai.ChatCompletion.create(\n", - " model=\"gpt-3.5-turbo\",\n", - " messages=[\n", - " {\n", - " \"role\": \"system\",\n", - " \"content\": \"You are a question and answer bot. Answer upbeat.\",\n", - " },\n", - " {\"role\": \"user\", \"content\": prompt},\n", - " ],\n", - " )[\"choices\"][0][\"message\"][\"content\"]\n", - "\n", - "\n", - "def gpt4(prompt):\n", - " return openai.ChatCompletion.create(\n", - " model=\"gpt-4\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", @@ -215,10 +202,7 @@ "source": [ "from trulens.apps.basic import TruBasicApp\n", "\n", - "gpt35_turbo_recorder = TruBasicApp(\n", - " gpt35_turbo, app_name=\"gpt-3.5-turbo\", feedbacks=feedbacks\n", - ")\n", - "gpt4_recorder = TruBasicApp(gpt4, app_name=\"gpt-4-turbo\", feedbacks=feedbacks)\n", + "gpt4o_mini_recorder = TruBasicApp(gpt4o_mini, app_name=\"gpt-4o-mini\", feedbacks=feedbacks)\n", "llama2_recorder = TruBasicApp(\n", " llama2,\n", " app_name=\"llama2\",\n", @@ -267,22 +251,10 @@ "metadata": {}, "outputs": [], "source": [ - "with gpt35_turbo_recorder as recording:\n", - " for prompt in prompts:\n", - " print(prompt)\n", - " gpt35_turbo_recorder.app(prompt)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "with gpt4_recorder as recording:\n", + "with gpt4o_mini_recorder as recording:\n", " for prompt in prompts:\n", " print(prompt)\n", - " gpt4_recorder.app(prompt)" + " gpt4o_mini_recorder.app(prompt)" ] }, { @@ -305,7 +277,7 @@ "source": [ "with mistral7b_recorder as recording:\n", " for prompt in prompts:\n", - " mistral7b_recorder.app(prompt_input)" + " mistral7b_recorder.app(prompt)" ] }, { diff --git a/examples/expositional/use_cases/moderation.ipynb b/examples/expositional/use_cases/moderation.ipynb index e00e93f7b..2ad8b5b2a 100644 --- a/examples/expositional/use_cases/moderation.ipynb +++ b/examples/expositional/use_cases/moderation.ipynb @@ -98,9 +98,9 @@ "metadata": {}, "outputs": [], "source": [ - "def gpt35_turbo(prompt):\n", + "def openai_llm(prompt):\n", " return openai.ChatCompletion.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", @@ -161,8 +161,8 @@ "source": [ "from trulens.apps.basic import TruBasicApp\n", "\n", - "gpt35_turbo_recorder = TruBasicApp(\n", - " gpt35_turbo, app_name=\"gpt-3.5-turbo\", feedbacks=feedbacks\n", + "openai_recorder = TruBasicApp(\n", + " openai_llm, app_name=\"OpenAI GPT\", feedbacks=feedbacks\n", ")" ] }, @@ -185,10 +185,10 @@ "metadata": {}, "outputs": [], "source": [ - "with gpt35_turbo_recorder as recording:\n", + "with openai_recorder as recording:\n", " for prompt in prompts:\n", " print(prompt)\n", - " gpt35_turbo_recorder.app(prompt)" + " openai_recorder.app(prompt)" ] }, { diff --git a/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb b/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb index 066ffb11d..afb40056e 100644 --- a/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb +++ b/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb @@ -169,7 +169,7 @@ " search_params={\"nprobe\": 20},\n", " overwrite=True,\n", ")\n", - "llm = OpenAI(model=\"gpt-3.5-turbo\")\n", + "llm = OpenAI(model=\"gpt-4o-mini\")\n", "embed_v12 = HuggingFaceEmbeddings(\n", " model_name=\"sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2\"\n", ")\n", @@ -290,7 +290,7 @@ " search_params={\"nprobe\": 20},\n", " overwrite=True,\n", " )\n", - " llm = OpenAI(model=\"gpt-3.5-turbo\")\n", + " llm = OpenAI(model=\"gpt-4o-mini\")\n", " storage_context = StorageContext.from_defaults(vector_store=vector_store)\n", " service_context = ServiceContext.from_defaults(\n", " embed_model=embed_model, llm=llm, chunk_size=chunk_size\n", diff --git a/examples/expositional/vector_stores/pinecone/pinecone_evals_build_better_rags.ipynb b/examples/expositional/vector_stores/pinecone/pinecone_evals_build_better_rags.ipynb index 5b2c7ba8d..d6fa8d61e 100644 --- a/examples/expositional/vector_stores/pinecone/pinecone_evals_build_better_rags.ipynb +++ b/examples/expositional/vector_stores/pinecone/pinecone_evals_build_better_rags.ipynb @@ -270,7 +270,7 @@ "from langchain.chat_models import ChatOpenAI\n", "\n", "# completion llm\n", - "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0.0)\n", + "llm = ChatOpenAI(model_name=\"gpt-4o-mini\", temperature=0.0)\n", "\n", "chain_v1 = RetrievalQA.from_chain_type(\n", " llm=llm, chain_type=\"stuff\", retriever=vectorstore.as_retriever()\n", @@ -638,7 +638,7 @@ "# completion llm\n", "from langchain_community.llms import OpenAI\n", "\n", - "llm = OpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "llm = OpenAI(model_name=\"gpt-4o-mini\", temperature=0)\n", "\n", "chain_v5 = RetrievalQA.from_chain_type(\n", " llm=llm, chain_type=\"stuff\", retriever=vectorstore.as_retriever(top_k=1)\n", diff --git a/examples/expositional/vector_stores/pinecone/pinecone_quickstart.ipynb b/examples/expositional/vector_stores/pinecone/pinecone_quickstart.ipynb index 568378060..1a742be22 100644 --- a/examples/expositional/vector_stores/pinecone/pinecone_quickstart.ipynb +++ b/examples/expositional/vector_stores/pinecone/pinecone_quickstart.ipynb @@ -153,7 +153,7 @@ "storage_context = StorageContext.from_defaults(vector_store=vector_store)\n", "\n", "# set service context\n", - "llm = OpenAI(temperature=0, model=\"gpt-3.5-turbo\")\n", + "llm = OpenAI(temperature=0, model=\"gpt-4o-mini\")\n", "service_context = ServiceContext.from_defaults(llm=llm)\n", "\n", "# create index from documents\n", diff --git a/examples/quickstart/custom_stream.ipynb b/examples/quickstart/custom_stream.ipynb index 36d7579e5..ad42a3b26 100644 --- a/examples/quickstart/custom_stream.ipynb +++ b/examples/quickstart/custom_stream.ipynb @@ -101,7 +101,7 @@ " @instrument\n", " def stream_completion(self, prompt):\n", " completion = oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " stream=True,\n", " stream_options={\n", " \"include_usage\": True\n", diff --git a/examples/quickstart/existing_data_quickstart.ipynb b/examples/quickstart/existing_data_quickstart.ipynb index b54b43c01..49303a3fb 100644 --- a/examples/quickstart/existing_data_quickstart.ipynb +++ b/examples/quickstart/existing_data_quickstart.ipynb @@ -28,9 +28,7 @@ "metadata": {}, "outputs": [], "source": [ - "import os\n", - "\n", - "os.environ[\"OPENAI_API_KEY\"] = \"sk-...\"" + "# os.environ[\"OPENAI_API_KEY\"] = \"sk-...\"" ] }, { @@ -267,7 +265,7 @@ ], "metadata": { "kernelspec": { - "display_name": "trucanopy", + "display_name": "pkg_311", "language": "python", "name": "python3" }, diff --git a/examples/quickstart/groundtruth_evals.ipynb b/examples/quickstart/groundtruth_evals.ipynb index 46688289b..b539df7c9 100644 --- a/examples/quickstart/groundtruth_evals.ipynb +++ b/examples/quickstart/groundtruth_evals.ipynb @@ -79,7 +79,7 @@ " def completion(self, prompt):\n", " completion = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/quickstart/groundtruth_evals_for_retrieval_systems.ipynb b/examples/quickstart/groundtruth_evals_for_retrieval_systems.ipynb index 17419a7ad..ebdcb4b14 100644 --- a/examples/quickstart/groundtruth_evals_for_retrieval_systems.ipynb +++ b/examples/quickstart/groundtruth_evals_for_retrieval_systems.ipynb @@ -250,7 +250,7 @@ " # k is needed for specific metrics computation like NDCG@k\n", " completion_str = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/quickstart/human_feedback.ipynb b/examples/quickstart/human_feedback.ipynb index 528f4cc98..35e0728a9 100644 --- a/examples/quickstart/human_feedback.ipynb +++ b/examples/quickstart/human_feedback.ipynb @@ -78,7 +78,7 @@ " def completion(self, prompt):\n", " completion = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/quickstart/langchain_quickstart.ipynb b/examples/quickstart/langchain_quickstart.ipynb index 9c9154f71..e2016ffed 100644 --- a/examples/quickstart/langchain_quickstart.ipynb +++ b/examples/quickstart/langchain_quickstart.ipynb @@ -149,7 +149,7 @@ "retriever = vectorstore.as_retriever()\n", "\n", "prompt = hub.pull(\"rlm/rag-prompt\")\n", - "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "llm = ChatOpenAI(model_name=\"gpt-4o-mini\", temperature=0)\n", "\n", "\n", "def format_docs(docs):\n", diff --git a/examples/quickstart/prototype_evals.ipynb b/examples/quickstart/prototype_evals.ipynb index a98e6179b..265e378cb 100644 --- a/examples/quickstart/prototype_evals.ipynb +++ b/examples/quickstart/prototype_evals.ipynb @@ -96,7 +96,7 @@ " def completion(self, prompt):\n", " completion = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/quickstart/quickstart.ipynb b/examples/quickstart/quickstart.ipynb index 931407495..abd309d8e 100644 --- a/examples/quickstart/quickstart.ipynb +++ b/examples/quickstart/quickstart.ipynb @@ -195,7 +195,7 @@ "\n", " completion = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/quickstart/text2text_quickstart.ipynb b/examples/quickstart/text2text_quickstart.ipynb index 5cc51e72a..2040829a9 100644 --- a/examples/quickstart/text2text_quickstart.ipynb +++ b/examples/quickstart/text2text_quickstart.ipynb @@ -88,7 +88,7 @@ "def llm_standalone(prompt):\n", " return (\n", " client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", diff --git a/src/benchmark/trulens/benchmark/answer_relevance_benchmark_small.ipynb b/src/benchmark/trulens/benchmark/answer_relevance_benchmark_small.ipynb index b3ebc8391..72bed4fdd 100644 --- a/src/benchmark/trulens/benchmark/answer_relevance_benchmark_small.ipynb +++ b/src/benchmark/trulens/benchmark/answer_relevance_benchmark_small.ipynb @@ -9,7 +9,7 @@ "In many ways, feedbacks can be thought of as LLM apps themselves. Given text,\n", "they return some result. Thinking in this way, we can use _TruLens_ to evaluate\n", "and track our feedback quality. We can even do this for different models (e.g.\n", - "gpt-3.5 and gpt-4) or prompting schemes (such as chain-of-thought reasoning).\n", + "gpt-4o) or prompting schemes (such as chain-of-thought reasoning).\n", "\n", "This notebook follows an evaluation of a set of test cases. You are encouraged\n", "to run this on your own and even expand the test cases to evaluate performance\n", @@ -56,19 +56,19 @@ "metadata": {}, "outputs": [], "source": [ - "# GPT 3.5\n", - "turbo = OpenAI(model_engine=\"gpt-3.5-turbo\")\n", + "# GPT 4o Mini\n", + "turbo = OpenAI(model_engine=\"gpt-4o-mini\")\n", "\n", "\n", - "def wrapped_relevance_turbo(input, output):\n", + "def wrapped_relevance_gpt4o_mini(input, output):\n", " return turbo.relevance(input, output)\n", "\n", "\n", - "# GPT 4\n", - "gpt4 = OpenAI(model_engine=\"gpt-4\")\n", + "# GPT 4o\n", + "gpt4 = OpenAI(model_engine=\"gpt-4o\")\n", "\n", "\n", - "def wrapped_relevance_gpt4(input, output):\n", + "def wrapped_relevance_gpt4o(input, output):\n", " return gpt4.relevance(input, output)\n", "\n", "\n", @@ -145,17 +145,17 @@ "metadata": {}, "outputs": [], "source": [ - "tru_wrapped_relevance_turbo = TruBasicApp(\n", - " wrapped_relevance_turbo,\n", + "tru_wrapped_relevance_gpt4o_mini = TruBasicApp(\n", + " wrapped_relevance_gpt4o_mini,\n", " app_name=\"answer relevance\",\n", - " app_version=\"gpt-3.5-turbo\",\n", + " app_version=\"gpt-4o-mini\",\n", " feedbacks=[f_mae],\n", ")\n", "\n", - "tru_wrapped_relevance_gpt4 = TruBasicApp(\n", - " wrapped_relevance_gpt4,\n", + "tru_wrapped_relevance_gpt4o = TruBasicApp(\n", + " wrapped_relevance_gpt4o,\n", " app_name=\"answer relevance\",\n", - " app_version=\"gpt-4\",\n", + " app_version=\"gpt-4o\",\n", " feedbacks=[f_mae],\n", ")\n", "\n", @@ -198,11 +198,11 @@ " prompt = answer_relevance_golden_set[i][\"query\"]\n", " response = answer_relevance_golden_set[i][\"response\"]\n", "\n", - " with tru_wrapped_relevance_turbo as recording:\n", - " tru_wrapped_relevance_turbo.app(prompt, response)\n", + " with tru_wrapped_relevance_gpt4o_mini as recording:\n", + " tru_wrapped_relevance_gpt4o_mini.app(prompt, response)\n", "\n", - " with tru_wrapped_relevance_gpt4 as recording:\n", - " tru_wrapped_relevance_gpt4.app(prompt, response)\n", + " with tru_wrapped_relevance_gpt4o as recording:\n", + " tru_wrapped_relevance_gpt4o.app(prompt, response)\n", "\n", " with tru_wrapped_relevance_commandnightly as recording:\n", " tru_wrapped_relevance_commandnightly.app(prompt, response)\n", diff --git a/src/benchmark/trulens/benchmark/comprehensiveness_benchmark.ipynb b/src/benchmark/trulens/benchmark/comprehensiveness_benchmark.ipynb index 3f0395047..bb91ec71d 100644 --- a/src/benchmark/trulens/benchmark/comprehensiveness_benchmark.ipynb +++ b/src/benchmark/trulens/benchmark/comprehensiveness_benchmark.ipynb @@ -8,8 +8,8 @@ "\n", "In many ways, feedbacks can be thought of as LLM apps themselves. Given text,\n", "they return some result. Thinking in this way, we can use TruLens to evaluate\n", - "and track our feedback quality. We can even do this for different models (e.g.\n", - "gpt-3.5 and gpt-4) or prompting schemes (such as chain-of-thought reasoning).\n", + "and track our feedback quality. We can even do this for different models (e.g. \n", + "gpt-4o) or prompting schemes (such as chain-of-thought reasoning).\n", "\n", "This notebook follows an evaluation of a set of test cases generated from human\n", "annotated datasets. In particular, we generate test cases from\n", @@ -35,7 +35,6 @@ "metadata": {}, "outputs": [], "source": [ - "import csv\n", "import os\n", "\n", "import matplotlib.pyplot as plt\n", @@ -99,11 +98,9 @@ "source": [ "session = TruSession()\n", "\n", - "provider_new_gpt_4o = fOpenAI(model_engine=\"gpt-4o\")\n", + "provider_gpt_4o = fOpenAI(model_engine=\"gpt-4o\")\n", "\n", - "provider_gpt_4 = fOpenAI(model_engine=\"gpt-4-turbo\")\n", - "\n", - "provider_gpt_35 = fOpenAI(model_engine=\"gpt-3.5-turbo\")" + "provider_gpt_4o_mini = fOpenAI(model_engine=\"gpt-4o-mini\")" ] }, { @@ -113,16 +110,13 @@ "outputs": [], "source": [ "# comprehensiveness of summary with transcript as reference\n", - "f_comprehensiveness_openai_gpt_35 = Feedback(\n", - " provider_gpt_35.comprehensiveness_with_cot_reasons\n", - ").on_input_output()\n", "\n", - "f_comprehensiveness_openai_gpt_4 = Feedback(\n", - " provider_gpt_4.comprehensiveness_with_cot_reasons\n", + "f_comprehensiveness_openai_gpt_4o = Feedback(\n", + " provider_gpt_4o.comprehensiveness_with_cot_reasons\n", ").on_input_output()\n", "\n", - "f_comprehensiveness_openai_gpt_4o = Feedback(\n", - " provider_new_gpt_4o.comprehensiveness_with_cot_reasons\n", + "f_comprehensiveness_openai_gpt_4o_mini = Feedback(\n", + " provider_gpt_4o_mini.comprehensiveness_with_cot_reasons\n", ").on_input_output()" ] }, @@ -154,9 +148,8 @@ "metadata": {}, "outputs": [], "source": [ - "scores_gpt_35 = []\n", - "scores_gpt_4 = []\n", "scores_gpt_4o = []\n", + "scores_gpt_4o_mini = []\n", "true_scores = [] # human prefrences / scores\n", "\n", "for i in range(190, len(comprehensiveness_golden_set)):\n", @@ -164,23 +157,20 @@ " summary = comprehensiveness_golden_set[i][\"response\"]\n", " expected_score = comprehensiveness_golden_set[i][\"expected_score\"]\n", "\n", - " feedback_score_gpt_35 = f_comprehensiveness_openai_gpt_35(source, summary)[\n", - " 0\n", - " ]\n", - " feedback_score_gpt_4 = f_comprehensiveness_openai_gpt_4(source, summary)[0]\n", " feedback_score_gpt_4o = f_comprehensiveness_openai_gpt_4o(source, summary)[\n", " 0\n", " ]\n", + " feedback_score_gpt_4o_mini = f_comprehensiveness_openai_gpt_4o_mini(\n", + " source, summary\n", + " )[0]\n", "\n", - " scores_gpt_35.append(feedback_score_gpt_35)\n", - " scores_gpt_4.append(feedback_score_gpt_4)\n", " scores_gpt_4o.append(feedback_score_gpt_4o)\n", + " scores_gpt_4o_mini.append(feedback_score_gpt_4o_mini)\n", " true_scores.append(expected_score)\n", "\n", " df_results = pd.DataFrame({\n", - " \"scores (gpt-3.5-turbo)\": scores_gpt_35,\n", - " \"scores (gpt-4)\": scores_gpt_4,\n", " \"scores (gpt-4o)\": scores_gpt_4o,\n", + " \"scores (gpt-4o-mini)\": scores_gpt_4o_mini,\n", " \"expected score\": true_scores,\n", " })\n", "\n", @@ -196,20 +186,15 @@ "metadata": {}, "outputs": [], "source": [ - "mae_gpt_35 = sum(\n", - " abs(score - true_score)\n", - " for score, true_score in zip(scores_gpt_35, true_scores)\n", - ") / len(scores_gpt_35)\n", - "\n", - "mae_gpt_4 = sum(\n", - " abs(score - true_score)\n", - " for score, true_score in zip(scores_gpt_4, true_scores)\n", - ") / len(scores_gpt_4)\n", - "\n", "mae_gpt_4o = sum(\n", " abs(score - true_score)\n", " for score, true_score in zip(scores_gpt_4o, true_scores)\n", - ") / len(scores_gpt_4o)" + ") / len(scores_gpt_4o)\n", + "\n", + "mae_gpt_4o_mini = sum(\n", + " abs(score - true_score)\n", + " for score, true_score in zip(scores_gpt_4o_mini, true_scores)\n", + ") / len(scores_gpt_4o_mini)" ] }, { @@ -218,9 +203,8 @@ "metadata": {}, "outputs": [], "source": [ - "print(f\"MAE gpt-3.5-turbo: {mae_gpt_35}\")\n", - "print(f\"MAE gpt-4-turbo: {mae_gpt_4}\")\n", - "print(f\"MAE gpt-4o: {mae_gpt_4o}\")" + "print(f\"MAE gpt-4o: {mae_gpt_4o}\")\n", + "print(f\"MAE gpt-4o-mini: {mae_gpt_4o_mini}\")" ] }, { @@ -230,30 +214,6 @@ "## Visualization to help investigation in LLM alignments with (mean) absolute errors" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scores_gpt_4 = []\n", - "true_scores = []\n", - "\n", - "# Open the CSV file and read its contents\n", - "with open(\"./results/results_comprehensiveness_benchmark.csv\", \"r\") as csvfile:\n", - " # Create a CSV reader object\n", - " csvreader = csv.reader(csvfile)\n", - "\n", - " # Skip the header row\n", - " next(csvreader)\n", - "\n", - " # Iterate over each row in the CSV\n", - " for row in csvreader:\n", - " # Append the scores and true_scores to their respective lists\n", - " scores_gpt_4.append(float(row[1]))\n", - " true_scores.append(float(row[-1]))" - ] - }, { "cell_type": "code", "execution_count": null, @@ -264,26 +224,26 @@ "# their corresponding ground truth relevances\n", "\n", "# Calculate the absolute errors\n", - "errors = np.abs(np.array(scores_gpt_4) - np.array(true_scores))\n", + "errors = np.abs(np.array(scores_gpt_4o) - np.array(true_scores))\n", "\n", "# Scatter plot of scores vs true_scores\n", "plt.figure(figsize=(10, 5))\n", "\n", "# First subplot: scatter plot with color-coded errors\n", "plt.subplot(1, 2, 1)\n", - "scatter = plt.scatter(scores_gpt_4, true_scores, c=errors, cmap=\"viridis\")\n", + "scatter = plt.scatter(scores_gpt_4o, true_scores, c=errors, cmap=\"viridis\")\n", "plt.colorbar(scatter, label=\"Absolute Error\")\n", "plt.plot(\n", " [0, 1], [0, 1], \"r--\", label=\"Perfect Alignment\"\n", ") # Line of perfect alignment\n", "plt.xlabel(\"Model Scores\")\n", "plt.ylabel(\"True Scores\")\n", - "plt.title(\"Model (GPT-4-Turbo) Scores vs. True Scores\")\n", + "plt.title(\"Model (GPT-4o) Scores vs. True Scores\")\n", "plt.legend()\n", "\n", "# Second subplot: Error across score ranges\n", "plt.subplot(1, 2, 2)\n", - "plt.scatter(scores_gpt_4, errors, color=\"blue\")\n", + "plt.scatter(scores_gpt_4o, errors, color=\"blue\")\n", "plt.xlabel(\"Model Scores\")\n", "plt.ylabel(\"Absolute Error\")\n", "plt.title(\"Error Across Score Ranges\")\n", diff --git a/src/benchmark/trulens/benchmark/context_relevance_benchmark.ipynb b/src/benchmark/trulens/benchmark/context_relevance_benchmark.ipynb index 8a4f7a251..d042c391c 100644 --- a/src/benchmark/trulens/benchmark/context_relevance_benchmark.ipynb +++ b/src/benchmark/trulens/benchmark/context_relevance_benchmark.ipynb @@ -19,7 +19,7 @@ "Another frequent inquiry from the community concerns the intrinsic semantic\n", "significance, or lack thereof, of feedback scores—for example, how one would\n", "interpret and instrument with a score of 0.9 when assessing context relevance in\n", - "a RAG application or whether a harmfulness score of 0.7 from GPT-3.5 equates to\n", + "a RAG application or whether a harmfulness score of 0.7 from GPT-4o-mini equates to\n", "the same from `Llama-2-7b`.\n", " \n", "For simpler meta-evaluation tasks, when human numerical scores are available in\n", @@ -141,27 +141,11 @@ "from trulens.providers.litellm import LiteLLM\n", "from trulens.providers.openai import OpenAI\n", "\n", - "# GPT 3.5\n", - "gpt3_turbo = OpenAI(model_engine=\"gpt-3.5-turbo\")\n", + "gpt4o_mini = OpenAI(model_engine=\"gpt-4o-mini\")\n", "\n", "\n", - "def wrapped_relevance_turbo(input, output, temperature=0.0):\n", - " return gpt3_turbo.context_relevance(input, output, temperature)\n", - "\n", - "\n", - "gpt4 = OpenAI(model_engine=\"gpt-4-1106-preview\")\n", - "\n", - "\n", - "def wrapped_relevance_gpt4(input, output, temperature=0.0):\n", - " return gpt4.context_relevance(input, output, temperature)\n", - "\n", - "\n", - "# # GPT 4 turbo latest\n", - "gpt4_latest = OpenAI(model_engine=\"gpt-4-0125-preview\")\n", - "\n", - "\n", - "def wrapped_relevance_gpt4_latest(input, output, temperature=0.0):\n", - " return gpt4_latest.context_relevance(input, output, temperature)\n", + "def wrapped_relevance_gpt4o_mini(input, output, temperature=0.0):\n", + " return gpt4o_mini.context_relevance(input, output, temperature)\n", "\n", "\n", "# Anthropic\n", @@ -181,17 +165,13 @@ "\n", "# Define a list of your feedback functions\n", "feedback_functions = {\n", - " \"GPT-3.5-Turbo\": wrapped_relevance_turbo,\n", - " \"GPT-4-Turbo\": wrapped_relevance_gpt4,\n", - " \"GPT-4-Turbo-latest\": wrapped_relevance_gpt4_latest,\n", + " \"GPT-4o-mini\": wrapped_relevance_gpt4o_mini,\n", " \"Claude-2\": wrapped_relevance_claude2,\n", " \"Claude-2.1\": wrapped_relevance_claude21,\n", "}\n", "\n", "backoffs_by_functions = {\n", - " \"GPT-3.5-Turbo\": 0.5,\n", - " \"GPT-4-Turbo\": 0.5,\n", - " \"GPT-4-Turbo-latest\": 0.5,\n", + " \"GPT-4o-mini\": 0.5,\n", " \"Claude-2\": 1,\n", " \"Claude-2.1\": 1,\n", "}" diff --git a/src/benchmark/trulens/benchmark/context_relevance_benchmark_small.ipynb b/src/benchmark/trulens/benchmark/context_relevance_benchmark_small.ipynb index 1831a3e4e..7cd93baf9 100644 --- a/src/benchmark/trulens/benchmark/context_relevance_benchmark_small.ipynb +++ b/src/benchmark/trulens/benchmark/context_relevance_benchmark_small.ipynb @@ -7,7 +7,7 @@ "source": [ "# 📓 Context Relevance Evaluations\n", "\n", - "In many ways, feedbacks can be thought of as LLM apps themselves. Given text, they return some result. Thinking in this way, we can use TruLens to evaluate and track our feedback quality. We can even do this for different models (e.g. gpt-3.5 and gpt-4) or prompting schemes (such as chain-of-thought reasoning).\n", + "In many ways, feedbacks can be thought of as LLM apps themselves. Given text, they return some result. Thinking in this way, we can use TruLens to evaluate and track our feedback quality. We can even do this for different models (e.g. gpt-4o-mini) or prompting schemes (such as chain-of-thought reasoning).\n", "\n", "This notebook follows an evaluation of a set of test cases. You are encouraged to run this on your own and even expand the test cases to evaluate performance on test cases applicable to your scenario or domain." ] @@ -52,20 +52,12 @@ "metadata": {}, "outputs": [], "source": [ - "# GPT 3.5\n", - "turbo = OpenAI(model_engine=\"gpt-3.5-turbo\")\n", + "# GPT 4o Mini\n", + "gpt4o_mini = OpenAI(model_engine=\"gpt-4o-mini\")\n", "\n", "\n", - "def wrapped_relevance_turbo(input, output):\n", - " return turbo.context_relevance(input, output)\n", - "\n", - "\n", - "# GPT 4\n", - "gpt4 = OpenAI(model_engine=\"gpt-4\")\n", - "\n", - "\n", - "def wrapped_relevance_gpt4(input, output):\n", - " return gpt4.context_relevance(input, output)\n", + "def wrapped_relevance_gpt4o_mini(input, output):\n", + " return gpt4o_mini.context_relevance(input, output)\n", "\n", "\n", "# Cohere\n", @@ -134,17 +126,10 @@ "metadata": {}, "outputs": [], "source": [ - "tru_wrapped_relevance_turbo = TruBasicApp(\n", - " wrapped_relevance_turbo,\n", - " app_name=\"context relevance\",\n", - " app_version=\"gpt-3.5-turbo\",\n", - " feedbacks=[f_mae],\n", - ")\n", - "\n", - "tru_wrapped_relevance_gpt4 = TruBasicApp(\n", - " wrapped_relevance_gpt4,\n", + "tru_wrapped_relevance_gpt4o_mini = TruBasicApp(\n", + " wrapped_relevance_gpt4o_mini,\n", " app_name=\"context relevance\",\n", - " app_version=\"gpt-4\",\n", + " app_version=\"gpt-4o-mini\",\n", " feedbacks=[f_mae],\n", ")\n", "\n", @@ -186,11 +171,9 @@ "for i in range(len(context_relevance_golden_set)):\n", " prompt = context_relevance_golden_set[i][\"query\"]\n", " response = context_relevance_golden_set[i][\"response\"]\n", - " with tru_wrapped_relevance_turbo as recording:\n", - " tru_wrapped_relevance_turbo.app(prompt, response)\n", "\n", - " with tru_wrapped_relevance_gpt4 as recording:\n", - " tru_wrapped_relevance_gpt4.app(prompt, response)\n", + " with tru_wrapped_relevance_gpt4o_mini as recording:\n", + " tru_wrapped_relevance_gpt4o_mini.app(prompt, response)\n", "\n", " with tru_wrapped_relevance_commandnightly as recording:\n", " tru_wrapped_relevance_commandnightly.app(prompt, response)\n", diff --git a/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb b/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb index e47e1f236..f0bf802db 100644 --- a/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb +++ b/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb @@ -6,7 +6,7 @@ "source": [ "# 📓 Groundedness Evaluations\n", "\n", - "In many ways, feedbacks can be thought of as LLM apps themselves. Given text, they return some result. Thinking in this way, we can use TruLens to evaluate and track our feedback quality. We can even do this for different models (e.g. gpt-3.5 and gpt-4) or prompting schemes (such as chain-of-thought reasoning).\n", + "In many ways, feedbacks can be thought of as LLM apps themselves. Given text, they return some result. Thinking in this way, we can use TruLens to evaluate and track our feedback quality. We can even do this for different models (e.g. gpt-4o) or prompting schemes (such as chain-of-thought reasoning).\n", "\n", "This notebook follows an evaluation of a set of test cases generated from human annotated datasets. In particular, we generate test cases from [SummEval](https://arxiv.org/abs/2007.12626).\n", "\n", @@ -90,15 +90,11 @@ "from trulens.providers.openai import OpenAI\n", "\n", "openai_provider = OpenAI()\n", - "openai_gpt4_provider = OpenAI(model_engine=\"gpt-4\")\n", "huggingface_provider = Huggingface()\n", "\n", "\n", "groundedness_hug = Groundedness(groundedness_provider=huggingface_provider)\n", "groundedness_openai = Groundedness(groundedness_provider=openai_provider)\n", - "groundedness_openai_gpt4 = Groundedness(\n", - " groundedness_provider=openai_gpt4_provider\n", - ")\n", "\n", "f_groundedness_hug = (\n", " Feedback(\n", @@ -115,10 +111,10 @@ " return np.mean(list(f_groundedness_hug(input, output)[0].values()))\n", "\n", "\n", - "f_groundedness_openai = (\n", + "f_groundedness_openai_gpt4o_mini = (\n", " Feedback(\n", - " OpenAI(model_engine=\"gpt-3.5-turbo\").groundedness_measure,\n", - " name=\"Groundedness OpenAI GPT-3.5\",\n", + " OpenAI(model_engine=\"gpt-4o-mini\").groundedness_measure,\n", + " name=\"Groundedness OpenAI GPT-4o-mini\",\n", " )\n", " .on_input()\n", " .on_output()\n", @@ -126,23 +122,23 @@ ")\n", "\n", "\n", - "def wrapped_groundedness_openai(input, output):\n", - " return f_groundedness_openai(input, output)[0][\"full_doc_score\"]\n", + "def wrapped_groundedness_openai_gpt4o_mini(input, output):\n", + " return f_groundedness_openai_gpt4o_mini(input, output)[0][\"full_doc_score\"]\n", "\n", "\n", - "f_groundedness_openai_gpt4 = (\n", + "f_groundedness_openai_gpt4o = (\n", " Feedback(\n", - " OpenAI(model_engine=\"gpt-3.5-turbo\").groundedness_measure,\n", - " name=\"Groundedness OpenAI GPT-4\",\n", + " OpenAI(model_engine=\"gpt-4o\").groundedness_measure,\n", + " name=\"Groundedness OpenAI GPT-4o\",\n", " )\n", " .on_input()\n", " .on_output()\n", - " .aggregate(groundedness_openai_gpt4.grounded_statements_aggregator)\n", + " .aggregate(groundedness_openai.grounded_statements_aggregator)\n", ")\n", "\n", "\n", - "def wrapped_groundedness_openai_gpt4(input, output):\n", - " return f_groundedness_openai_gpt4(input, output)[0][\"full_doc_score\"]" + "def wrapped_groundedness_openai_gpt4o(input, output):\n", + " return f_groundedness_openai_gpt4o(input, output)[0][\"full_doc_score\"]" ] }, { @@ -175,15 +171,15 @@ " feedbacks=[f_absolute_error],\n", ")\n", "tru_wrapped_groundedness_openai = TruBasicApp(\n", - " wrapped_groundedness_openai,\n", + " wrapped_groundedness_openai_gpt4o_mini,\n", " app_name=\"groundedness\",\n", - " app_version=\"openai gpt-3.5\",\n", + " app_version=\"openai gpt-4o-mini\",\n", " feedbacks=[f_absolute_error],\n", ")\n", "tru_wrapped_groundedness_openai_gpt4 = TruBasicApp(\n", - " wrapped_groundedness_openai_gpt4,\n", + " wrapped_groundedness_openai_gpt4o,\n", " app_name=\"groundedness\",\n", - " app_version=\"openai gpt-4\",\n", + " app_version=\"openai gpt-4o\",\n", " feedbacks=[f_absolute_error],\n", ")" ] From a3c3a527fe642eaf481ebccb6d8ad1067111e867 Mon Sep 17 00:00:00 2001 From: corey Date: Wed, 30 Oct 2024 10:10:00 -0700 Subject: [PATCH 08/12] replace ada with 3-small --- .../models/anthropic/claude3_quickstart.ipynb | 4 ++-- .../models/azure/azure_openai_llama_index.ipynb | 2 +- .../local_vs_remote_huggingface_feedback_functions.ipynb | 4 ++-- .../use_cases/iterate_on_rag/2_honest_rag.ipynb | 2 +- .../milvus/milvus_evals_build_better_rags.ipynb | 8 ++++---- .../vector_stores/mongodb/atlas_quickstart.ipynb | 2 +- examples/quickstart/quickstart.ipynb | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/examples/expositional/models/anthropic/claude3_quickstart.ipynb b/examples/expositional/models/anthropic/claude3_quickstart.ipynb index 704863f77..9d49a3475 100644 --- a/examples/expositional/models/anthropic/claude3_quickstart.ipynb +++ b/examples/expositional/models/anthropic/claude3_quickstart.ipynb @@ -93,7 +93,7 @@ "oai_client = OpenAI()\n", "\n", "oai_client.embeddings.create(\n", - " model=\"text-embedding-ada-002\", input=university_info\n", + " model=\"text-embedding-3-small\", input=university_info\n", ")" ] }, @@ -108,7 +108,7 @@ "\n", "embedding_function = OpenAIEmbeddingFunction(\n", " api_key=os.environ.get(\"OPENAI_API_KEY\"),\n", - " model_name=\"text-embedding-ada-002\",\n", + " model_name=\"text-embedding-3-small\",\n", ")\n", "\n", "\n", diff --git a/examples/expositional/models/azure/azure_openai_llama_index.ipynb b/examples/expositional/models/azure/azure_openai_llama_index.ipynb index 09b6e5a48..a623cdaf8 100644 --- a/examples/expositional/models/azure/azure_openai_llama_index.ipynb +++ b/examples/expositional/models/azure/azure_openai_llama_index.ipynb @@ -118,7 +118,7 @@ "\n", "# You need to deploy your own embedding model as well as your own chat completion model\n", "embed_model = AzureOpenAIEmbedding(\n", - " model=\"text-embedding-ada-002\",\n", + " model=\"text-embedding-3-small\",\n", " deployment_name=\"\",\n", " api_key=os.environ[\"AZURE_OPENAI_API_KEY\"],\n", " azure_endpoint=os.environ[\"AZURE_OPENAI_ENDPOINT\"],\n", diff --git a/examples/expositional/models/local_and_OSS_models/local_vs_remote_huggingface_feedback_functions.ipynb b/examples/expositional/models/local_and_OSS_models/local_vs_remote_huggingface_feedback_functions.ipynb index a967e1bff..524af4c27 100644 --- a/examples/expositional/models/local_and_OSS_models/local_vs_remote_huggingface_feedback_functions.ipynb +++ b/examples/expositional/models/local_and_OSS_models/local_vs_remote_huggingface_feedback_functions.ipynb @@ -92,7 +92,7 @@ "\n", "embedding_function = OpenAIEmbeddingFunction(\n", " api_key=os.environ.get(\"OPENAI_API_KEY\"),\n", - " model_name=\"text-embedding-ada-002\",\n", + " model_name=\"text-embedding-3-small\",\n", ")\n", "\n", "\n", @@ -171,7 +171,7 @@ " \"\"\"\n", " completion = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb b/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb index 079c5d7ae..7cc887052 100644 --- a/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb +++ b/examples/expositional/use_cases/iterate_on_rag/2_honest_rag.ipynb @@ -125,7 +125,7 @@ "from langchain.embeddings.openai import OpenAIEmbeddings\n", "from trulens.feedback.embeddings import Embeddings\n", "\n", - "model_name = \"text-embedding-ada-002\"\n", + "model_name = \"text-embedding-3-small\"\n", "\n", "embed_model = OpenAIEmbeddings(\n", " model=model_name, openai_api_key=os.environ[\"OPENAI_API_KEY\"]\n", diff --git a/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb b/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb index afb40056e..91b7dc81c 100644 --- a/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb +++ b/examples/expositional/vector_stores/milvus/milvus_evals_build_better_rags.ipynb @@ -262,8 +262,8 @@ "embed_ft3_v12 = HuggingFaceEmbeddings(\n", " model_name=\"Sprylab/paraphrase-multilingual-MiniLM-L12-v2-fine-tuned-3\"\n", ")\n", - "embed_ada = OpenAIEmbeddings(model_name=\"text-embedding-ada-002\")\n", - "embed_models = [embed_v12, embed_ada]\n", + "embed_openai = OpenAIEmbeddings(model_name=\"text-embedding-3-small\")\n", + "embed_models = [embed_v12, embed_openai]\n", "top_ks = [1, 3]\n", "chunk_sizes = [200, 500]" ] @@ -283,8 +283,8 @@ " embed_model_name = \"v12\"\n", " elif embed_model == embed_ft3_v12:\n", " embed_model_name = \"ft3_v12\"\n", - " elif embed_model == embed_ada:\n", - " embed_model_name = \"ada\"\n", + " elif embed_model == embed_openai:\n", + " embed_model_name = \"openai\"\n", " vector_store = MilvusVectorStore(\n", " index_params={\"index_type\": index_param, \"metric_type\": \"L2\"},\n", " search_params={\"nprobe\": 20},\n", diff --git a/examples/expositional/vector_stores/mongodb/atlas_quickstart.ipynb b/examples/expositional/vector_stores/mongodb/atlas_quickstart.ipynb index ea9ecd81e..8091a74d5 100644 --- a/examples/expositional/vector_stores/mongodb/atlas_quickstart.ipynb +++ b/examples/expositional/vector_stores/mongodb/atlas_quickstart.ipynb @@ -98,7 +98,7 @@ "outputs": [], "source": [ "Settings.llm = OpenAI()\n", - "Settings.embed_model = OpenAIEmbedding(model=\"text-embedding-ada-002\")\n", + "Settings.embed_model = OpenAIEmbedding(model=\"text-embedding-3-small\")\n", "Settings.chunk_size = 100\n", "Settings.chunk_overlap = 10" ] diff --git a/examples/quickstart/quickstart.ipynb b/examples/quickstart/quickstart.ipynb index abd309d8e..5b1e12498 100644 --- a/examples/quickstart/quickstart.ipynb +++ b/examples/quickstart/quickstart.ipynb @@ -101,7 +101,7 @@ "\n", "embedding_function = OpenAIEmbeddingFunction(\n", " api_key=os.environ.get(\"OPENAI_API_KEY\"),\n", - " model_name=\"text-embedding-ada-002\",\n", + " model_name=\"text-embedding-3-small\",\n", ")\n", "\n", "\n", From 2c093b45ee3f5aaf47c9b87d9767a433ecc1a4a7 Mon Sep 17 00:00:00 2001 From: corey Date: Wed, 30 Oct 2024 10:16:54 -0700 Subject: [PATCH 09/12] more replacements --- docs/blog/posts/release_blog_1dot.md | 2 +- docs/component_guides/instrumentation/langchain.md | 2 +- docs/component_guides/instrumentation/nemo.md | 2 +- examples/experimental/MultiQueryRetrievalLangchain.ipynb | 2 +- examples/experimental/end2end_apps/trubot/App_TruBot.py | 2 +- examples/experimental/end2end_apps/trubot/trubot.py | 2 +- .../experimental/end2end_apps/trubot/trubot_example.ipynb | 2 +- .../end2end_apps/trubot/trubot_example_no_hugs.ipynb | 2 +- examples/experimental/generate_test_set.ipynb | 2 +- examples/experimental/llamaindex_async_stream.ipynb | 2 +- examples/experimental/random_evaluation.ipynb | 4 ++-- examples/expositional/use_cases/app_with_human_feedback.py | 2 +- .../use_cases/iterate_on_rag/1_rag_prototype.ipynb | 2 +- src/apps/langchain/trulens/apps/langchain/tru_chain.py | 2 +- src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb | 2 +- src/core/trulens/core/feedback/provider.py | 2 +- .../langchain/trulens/providers/langchain/provider.py | 4 ++-- src/providers/litellm/trulens/providers/litellm/provider.py | 4 ++-- .../notebooks_to_test/langchain_quickstart.ipynb | 2 +- tests/e2e/test_providers.py | 4 ++-- tests/e2e/test_tru_llama.py | 2 +- 21 files changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/blog/posts/release_blog_1dot.md b/docs/blog/posts/release_blog_1dot.md index 0bf9fe070..bc718dc81 100644 --- a/docs/blog/posts/release_blog_1dot.md +++ b/docs/blog/posts/release_blog_1dot.md @@ -104,7 +104,7 @@ To see the core re-architecture changes in action, we've included some usage exa retriever = vectorstore.as_retriever() prompt = hub.pull("rlm/rag-prompt") - llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) + llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0) rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} diff --git a/docs/component_guides/instrumentation/langchain.md b/docs/component_guides/instrumentation/langchain.md index 85189fd04..c59becbdd 100644 --- a/docs/component_guides/instrumentation/langchain.md +++ b/docs/component_guides/instrumentation/langchain.md @@ -48,7 +48,7 @@ First, this requires loading data into a vector store. retriever = vectorstore.as_retriever() prompt = hub.pull("rlm/rag-prompt") - llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) + llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0) def format_docs(docs): diff --git a/docs/component_guides/instrumentation/nemo.md b/docs/component_guides/instrumentation/nemo.md index 0c7a7ecb6..63dd19d08 100644 --- a/docs/component_guides/instrumentation/nemo.md +++ b/docs/component_guides/instrumentation/nemo.md @@ -38,7 +38,7 @@ Below is a quick example of usage. First, we'll create a standard Nemo app. models: - type: main engine: openai - model: gpt-3.5-turbo-instruct + model: gpt-4o-mini %%writefile config.co # Adapted from NeMo-Guardrails/tests/test_configs/with_kb_openai_embeddings/config.co diff --git a/examples/experimental/MultiQueryRetrievalLangchain.ipynb b/examples/experimental/MultiQueryRetrievalLangchain.ipynb index 30d9933f3..b593738cd 100644 --- a/examples/experimental/MultiQueryRetrievalLangchain.ipynb +++ b/examples/experimental/MultiQueryRetrievalLangchain.ipynb @@ -150,7 +150,7 @@ "# select context to be used in feedback. the location of context is app specific.\n", "\n", "prompt = hub.pull(\"rlm/rag-prompt\")\n", - "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "llm = ChatOpenAI(model_name=\"gpt-4o-mini\", temperature=0)\n", "\n", "\n", "def format_docs(docs):\n", diff --git a/examples/experimental/end2end_apps/trubot/App_TruBot.py b/examples/experimental/end2end_apps/trubot/App_TruBot.py index 6f54f0b0d..8c8bf7a40 100644 --- a/examples/experimental/end2end_apps/trubot/App_TruBot.py +++ b/examples/experimental/end2end_apps/trubot/App_TruBot.py @@ -24,7 +24,7 @@ key_utils.check_keys("PINECONE_API_KEY", "PINECONE_ENV", "OPENAI_API_KEY") # Set up GPT-3 model -model_name = "gpt-3.5-turbo" +model_name = "gpt-4o-mini" app_name = "TruBot" # app_name = "TruBot_langprompt" diff --git a/examples/experimental/end2end_apps/trubot/trubot.py b/examples/experimental/end2end_apps/trubot/trubot.py index d6b4cf4a4..6482eb10c 100644 --- a/examples/experimental/end2end_apps/trubot/trubot.py +++ b/examples/experimental/end2end_apps/trubot/trubot.py @@ -118,7 +118,7 @@ def get_or_make_app( pp.pprint(f"Starting a new conversation with {app_version}.") # Embedding needed for Pinecone vector db. - embedding = OpenAIEmbeddings(model="text-embedding-ada-002") # 1536 dims + embedding = OpenAIEmbeddings(model="text-embedding-3-small") # 1536 dims docsearch = Pinecone.from_existing_index( index_name="llmdemo", embedding=embedding ) diff --git a/examples/experimental/end2end_apps/trubot/trubot_example.ipynb b/examples/experimental/end2end_apps/trubot/trubot_example.ipynb index a5a423fd3..2863bad32 100644 --- a/examples/experimental/end2end_apps/trubot/trubot_example.ipynb +++ b/examples/experimental/end2end_apps/trubot/trubot_example.ipynb @@ -148,7 +148,7 @@ "# db_host = \"pinecone\"\n", "db_host = \"pinecone\"\n", "\n", - "model_name = \"gpt-3.5-turbo\"\n", + "model_name = \"gpt-4o-mini\"\n", "app_name = \"TruBot\"\n", "\n", "# Embedding for vector db.\n", diff --git a/examples/experimental/end2end_apps/trubot/trubot_example_no_hugs.ipynb b/examples/experimental/end2end_apps/trubot/trubot_example_no_hugs.ipynb index 066c1e751..065f17349 100644 --- a/examples/experimental/end2end_apps/trubot/trubot_example_no_hugs.ipynb +++ b/examples/experimental/end2end_apps/trubot/trubot_example_no_hugs.ipynb @@ -107,7 +107,7 @@ "# db_host = \"pinecone\"\n", "db_host = \"hnsw\"\n", "\n", - "model_name = \"gpt-3.5-turbo\"\n", + "model_name = \"gpt-4o-mini\"\n", "app_name = \"TruBot\"\n", "\n", "# Embedding for vector db.\n", diff --git a/examples/experimental/generate_test_set.ipynb b/examples/experimental/generate_test_set.ipynb index 191c466c1..db51c5362 100644 --- a/examples/experimental/generate_test_set.ipynb +++ b/examples/experimental/generate_test_set.ipynb @@ -107,7 +107,7 @@ "retriever = vectorstore.as_retriever()\n", "\n", "prompt = hub.pull(\"rlm/rag-prompt\")\n", - "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "llm = ChatOpenAI(model_name=\"gpt-4o-mini\", temperature=0)\n", "\n", "\n", "def format_docs(docs):\n", diff --git a/examples/experimental/llamaindex_async_stream.ipynb b/examples/experimental/llamaindex_async_stream.ipynb index e5e81bcbc..4067ca186 100644 --- a/examples/experimental/llamaindex_async_stream.ipynb +++ b/examples/experimental/llamaindex_async_stream.ipynb @@ -31,7 +31,7 @@ "\n", "message = \"What did the author do growing up?\"\n", "\n", - "Settings.llm = OpenAI(model=\"gpt-3.5-turbo\", temperature=0.0)\n", + "Settings.llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.0)\n", "Settings.num_output = 64\n", "\n", "documents = SimpleDirectoryReader(\"data\").load_data()\n", diff --git a/examples/experimental/random_evaluation.ipynb b/examples/experimental/random_evaluation.ipynb index 71a37cd69..3d58e2e8d 100644 --- a/examples/experimental/random_evaluation.ipynb +++ b/examples/experimental/random_evaluation.ipynb @@ -92,7 +92,7 @@ "\n", "embedding_function = OpenAIEmbeddingFunction(\n", " api_key=os.environ.get(\"OPENAI_API_KEY\"),\n", - " model_name=\"text-embedding-ada-002\",\n", + " model_name=\"text-embedding-3-small\",\n", ")\n", "\n", "chroma_client = chromadb.Client()\n", @@ -161,7 +161,7 @@ " \"\"\"\n", " completion = (\n", " oai_client.chat.completions.create(\n", - " model=\"gpt-3.5-turbo\",\n", + " model=\"gpt-4o-mini\",\n", " temperature=0,\n", " messages=[\n", " {\n", diff --git a/examples/expositional/use_cases/app_with_human_feedback.py b/examples/expositional/use_cases/app_with_human_feedback.py index 5d1ae824f..9aca68cf4 100644 --- a/examples/expositional/use_cases/app_with_human_feedback.py +++ b/examples/expositional/use_cases/app_with_human_feedback.py @@ -31,7 +31,7 @@ os.environ["OPENAI_API_KEY"] = "..." # Set up GPT-3 model -model_name = "gpt-3.5-turbo" +model_name = "gpt-4o-mini" session = core_session.TruSession() diff --git a/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb b/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb index 98b49465f..6c33f9942 100644 --- a/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb +++ b/examples/expositional/use_cases/iterate_on_rag/1_rag_prototype.ipynb @@ -201,7 +201,7 @@ "from langchain.embeddings.openai import OpenAIEmbeddings\n", "from trulens.feedback.embeddings import Embeddings\n", "\n", - "model_name = \"text-embedding-ada-002\"\n", + "model_name = \"text-embedding-3-small\"\n", "\n", "embed_model = OpenAIEmbeddings(\n", " model=model_name, openai_api_key=os.environ[\"OPENAI_API_KEY\"]\n", diff --git a/src/apps/langchain/trulens/apps/langchain/tru_chain.py b/src/apps/langchain/trulens/apps/langchain/tru_chain.py index db3be5346..fdfc81b12 100644 --- a/src/apps/langchain/trulens/apps/langchain/tru_chain.py +++ b/src/apps/langchain/trulens/apps/langchain/tru_chain.py @@ -151,7 +151,7 @@ class TruChain(core_app.App): retriever = vectorstore.as_retriever() prompt = hub.pull("rlm/rag-prompt") - llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) + llm = ChatOpenAI(model_name="gpt-4o-mini", temperature=0) rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} diff --git a/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb b/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb index f0bf802db..9f5954641 100644 --- a/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb +++ b/src/benchmark/trulens/benchmark/groundedness_benchmark.ipynb @@ -75,7 +75,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Benchmarking various Groundedness feedback function providers (OpenAI GPT-3.5-turbo vs GPT-4 vs Huggingface)" + "### Benchmarking various Groundedness feedback function providers (OpenAI GPT-4o-mini vs GPT-4o vs Huggingface)" ] }, { diff --git a/src/core/trulens/core/feedback/provider.py b/src/core/trulens/core/feedback/provider.py index 067732a67..546812f12 100644 --- a/src/core/trulens/core/feedback/provider.py +++ b/src/core/trulens/core/feedback/provider.py @@ -52,7 +52,7 @@ class and should not be instantiated directly. Rather, it should be subclassed Example: ```python from trulens.providers.openai import OpenAI - provider = OpenAI(model_engine="gpt-3.5-turbo") + provider = OpenAI(model_engine="gpt-4o-mini") provider.relevance(prompt, response) ``` """ diff --git a/src/providers/langchain/trulens/providers/langchain/provider.py b/src/providers/langchain/trulens/providers/langchain/provider.py index fb1c05bdf..4779a79e1 100644 --- a/src/providers/langchain/trulens/providers/langchain/provider.py +++ b/src/providers/langchain/trulens/providers/langchain/provider.py @@ -29,8 +29,8 @@ class Langchain(llm_provider.LLMProvider): from trulens.providers.langchain import LangChain from langchain_community.llms import OpenAI - gpt3_llm = OpenAI(model="gpt-3.5-turbo-instruct") - langchain_provider = LangChain(chain = gpt3_llm) + openai_llm = OpenAI(model="gpt-4o-mini") + langchain_provider = LangChain(chain = openai_llm) ``` Args: diff --git a/src/providers/litellm/trulens/providers/litellm/provider.py b/src/providers/litellm/trulens/providers/litellm/provider.py index 42ed2a5fa..bc09bbdce 100644 --- a/src/providers/litellm/trulens/providers/litellm/provider.py +++ b/src/providers/litellm/trulens/providers/litellm/provider.py @@ -23,10 +23,10 @@ class LiteLLM(llm_provider.LLMProvider): ``` """ - DEFAULT_MODEL_ENGINE: ClassVar[str] = "gpt-3.5-turbo" + DEFAULT_MODEL_ENGINE: ClassVar[str] = "gpt-4o-mini" model_engine: str - """The LiteLLM completion model. Defaults to `gpt-3.5-turbo`.""" + """The LiteLLM completion model. Defaults to `gpt-4o-mini`.""" completion_args: Dict[str, str] = pydantic.Field(default_factory=dict) """Additional arguments to pass to the `litellm.completion` as needed for chosen api.""" diff --git a/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb b/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb index 60b5fa9d6..cf0e4cc06 100644 --- a/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb +++ b/tests/docs_notebooks/notebooks_to_test/langchain_quickstart.ipynb @@ -149,7 +149,7 @@ "retriever = vectorstore.as_retriever()\n", "\n", "prompt = hub.pull(\"rlm/rag-prompt\")\n", - "llm = ChatOpenAI(model_name=\"gpt-3.5-turbo\", temperature=0)\n", + "llm = ChatOpenAI(model_name=\"gpt-4o-mini\", temperature=0)\n", "\n", "\n", "def format_docs(docs):\n", diff --git a/tests/e2e/test_providers.py b/tests/e2e/test_providers.py index c03d51911..37917dc48 100644 --- a/tests/e2e/test_providers.py +++ b/tests/e2e/test_providers.py @@ -579,7 +579,7 @@ def test_llmcompletion(self): function once for each model. """ - models = ["gpt-3.5-turbo"] + models = ["gpt-4o-mini"] provider_models = [ (openai_provider.OpenAI(model_engine=model), model) for model in models @@ -701,7 +701,7 @@ def test_llmcompletion_calibration(self): provider_models = [ (openai_provider.OpenAI(model_engine=model), model) - for model in ["gpt-3.5-turbo", "gpt-4"] + for model in ["gpt-4o-mini", "gpt-4o"] ] for provider, model in provider_models: provider_name = provider.__class__.__name__ diff --git a/tests/e2e/test_tru_llama.py b/tests/e2e/test_tru_llama.py index 0164fc76c..e1d49a748 100644 --- a/tests/e2e/test_tru_llama.py +++ b/tests/e2e/test_tru_llama.py @@ -53,7 +53,7 @@ def setUp(self): if not TestLlamaIndex.DATA_PATH.exists(): os.system(f"wget {TestLlamaIndex.DATA_URL} -P data/") - Settings.llm = OpenAI(model="gpt-3.5-turbo", temperature=0.0) + Settings.llm = OpenAI(model="gpt-4o-mini", temperature=0.0) Settings.num_output = 64 documents = SimpleDirectoryReader("data").load_data() From 3515f40fbc25c2578ec946012444e2c85060004b Mon Sep 17 00:00:00 2001 From: David Kurokawa Date: Wed, 30 Oct 2024 16:56:14 -0700 Subject: [PATCH 10/12] Stop using `snowflake.snowpark.session.Session::sql` and use `snowflake.connector.cursor.SnowflakeCursor::execute` instead as its thread-safe. --- .../snowflake_cortex/arctic_quickstart.ipynb | 26 +++++++++------ .../cortex_finetuning_experiments.ipynb | 32 ++++++++++++------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/examples/expositional/models/snowflake_cortex/arctic_quickstart.ipynb b/examples/expositional/models/snowflake_cortex/arctic_quickstart.ipynb index 0484f65a8..7ea26cdd1 100644 --- a/examples/expositional/models/snowflake_cortex/arctic_quickstart.ipynb +++ b/examples/expositional/models/snowflake_cortex/arctic_quickstart.ipynb @@ -200,14 +200,22 @@ " Given this information, please answer the question: {query}\n", " \"\"\")\n", "\n", - " res = snowflake_session.sql(f\"\"\"SELECT SNOWFLAKE.CORTEX.COMPLETE(\n", - " 'snowflake-arctic',\n", - " [\n", - " {{'role': 'user', 'content': '{prompt}'}}\n", - " ], {{\n", - " 'temperature': 0\n", - " }}\n", - " )\"\"\").collect() \n", + " cursor = snowflake_session.connection.cursor()\n", + " try:\n", + " # We use `snowflake.connector.cursor.SnowflakeCursor::execute` to\n", + " # execute the query instead of\n", + " # `snowflake.snowpark.session.Session::sql` since the latter is not\n", + " # thread-safe.\n", + " res = cursor.execute(f\"\"\"SELECT SNOWFLAKE.CORTEX.COMPLETE(\n", + " 'snowflake-arctic',\n", + " [\n", + " {{'role': 'user', 'content': '{prompt}'}}\n", + " ], {{\n", + " 'temperature': 0\n", + " }}\n", + " )\"\"\").fetchall()\n", + " finally:\n", + " cursor.close()\n", "\n", " if len(res) == 0:\n", " return \"No response from cortex function\"\n", @@ -232,7 +240,7 @@ "source": [ "### Dev Note as of June 2024: \n", "Alternatively, we can use Cortex's Python API ([documentation](https://docs.snowflake.com/user-guide/snowflake-cortex/llm-functions#using-snowflake-cortex-llm-functions-with-python)) directly to have cleaner interface and avoid constructing SQL commands ourselves. \n", - "The reason we are invoking the SQL function directly via `snowflake_session.sql()` is that the response from Cortex's Python API is still experimental and not as feature-rich as the one from SQL function as of the time of writing. i.e. inconsistency issues with structured json outputs and missing usage information have been observed, lack of support for advanced chat-style (multi-message), etc.\n", + "The reason we are invoking the SQL function directly via `cursor.execute()` is that the response from Cortex's Python API is still experimental and not as feature-rich as the one from SQL function as of the time of writing. i.e. inconsistency issues with structured json outputs and missing usage information have been observed, lack of support for advanced chat-style (multi-message), etc.\n", "Below is a minimal example of using Python API instead. \n", "\n", "\n", diff --git a/examples/expositional/models/snowflake_cortex/cortex_finetuning_experiments.ipynb b/examples/expositional/models/snowflake_cortex/cortex_finetuning_experiments.ipynb index 854e39d44..37e3c03fa 100644 --- a/examples/expositional/models/snowflake_cortex/cortex_finetuning_experiments.ipynb +++ b/examples/expositional/models/snowflake_cortex/cortex_finetuning_experiments.ipynb @@ -119,19 +119,27 @@ " escaped_string = escaped_string.replace(\"'\", \"''\")\n", " return escaped_string\n", "\n", - " prompt = escape_string_for_sql(rendered_prompt)\n", + " rendered_prompt = escape_string_for_sql(rendered_prompt)\n", "\n", - " res = snowpark_session.sql(f\"\"\"\n", - " SELECT SNOWFLAKE.CORTEX.COMPLETE(\n", - " '{self.model}',\n", - " [\n", - " {{'role': 'user', 'content': '{rendered_prompt.replace(\"'\", \"''\")}' }}\n", - " ], \n", - " {{\n", - " 'temperature': 0\n", - " }}\n", - " )\n", - " \"\"\").collect() \n", + " cursor = snowpark_session.connection.cursor()\n", + " try:\n", + " # We use `snowflake.connector.cursor.SnowflakeCursor::execute` to\n", + " # execute the query instead of\n", + " # `snowflake.snowpark.session.Session::sql` since the latter is not\n", + " # thread-safe.\n", + " res = cursor.execute(f\"\"\"\n", + " SELECT SNOWFLAKE.CORTEX.COMPLETE(\n", + " '{self.model}',\n", + " [\n", + " {{'role': 'user', 'content': '{rendered_prompt.replace(\"'\", \"''\")}' }}\n", + " ], \n", + " {{\n", + " 'temperature': 0\n", + " }}\n", + " )\n", + " \"\"\").fetchall() \n", + " finally:\n", + " cursor.close()\n", "\n", " if len(res) == 0:\n", " return \"No response from cortex function\"\n", From c6c0a1948fc0c7bf883805a2bbd32cacd132d423 Mon Sep 17 00:00:00 2001 From: corey Date: Thu, 31 Oct 2024 07:10:59 -0700 Subject: [PATCH 11/12] nemo notebook and doc fixes --- Makefile | 4 +- docs/component_guides/instrumentation/nemo.md | 2 +- .../llama_index_complex_evals.ipynb | 23 ++++----- ...moguardrails_feedback_action_example.ipynb | 2 +- .../nemoguardrails_trurails_example.ipynb | 2 +- .../openai_assistants_api.ipynb | 49 ++++++------------- 6 files changed, 31 insertions(+), 51 deletions(-) diff --git a/Makefile b/Makefile index a4be776fa..f9cca6281 100644 --- a/Makefile +++ b/Makefile @@ -69,7 +69,9 @@ env-tests-notebook: env-tests env-tests-optional rank_bm25 \ ipytree \ llama-index-readers-web \ - llama-index-vector-stores-milvus + llama-index-vector-stores-milvus \ + llama-index-retrievers-bm25 \ + llama-index-tools-yelp # Lock the poetry dependencies for all the subprojects. lock: $(POETRY_DIRS) diff --git a/docs/component_guides/instrumentation/nemo.md b/docs/component_guides/instrumentation/nemo.md index 63dd19d08..ef84e3c1b 100644 --- a/docs/component_guides/instrumentation/nemo.md +++ b/docs/component_guides/instrumentation/nemo.md @@ -38,7 +38,7 @@ Below is a quick example of usage. First, we'll create a standard Nemo app. models: - type: main engine: openai - model: gpt-4o-mini + model: "gpt-4o-mini" %%writefile config.co # Adapted from NeMo-Guardrails/tests/test_configs/with_kb_openai_embeddings/config.co diff --git a/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb b/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb index 31418a4d4..54576be5a 100644 --- a/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb +++ b/examples/expositional/frameworks/llama_index/llama_index_complex_evals.ipynb @@ -117,12 +117,7 @@ " original_text_metadata_key=\"original_text\",\n", ")\n", "\n", - "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.1)\n", - "sentence_context = ServiceContext.from_defaults(\n", - " llm=llm,\n", - " embed_model=\"local:BAAI/bge-small-en-v1.5\",\n", - " node_parser=node_parser,\n", - ")" + "llm = OpenAI(model=\"gpt-4o-mini\", temperature=0.1)" ] }, { @@ -137,14 +132,14 @@ "\n", "if not os.path.exists(\"./sentence_index\"):\n", " sentence_index = VectorStoreIndex.from_documents(\n", - " [document], service_context=sentence_context\n", + " [document], llm=llm, embed_model=\"local:BAAI/bge-small-en-v1.5\", node_parser=node_parser\n", " )\n", "\n", " sentence_index.storage_context.persist(persist_dir=\"./sentence_index\")\n", "else:\n", " sentence_index = load_index_from_storage(\n", " StorageContext.from_defaults(persist_dir=\"./sentence_index\"),\n", - " service_context=sentence_context,\n", + " llm=llm, embed_model=\"local:BAAI/bge-small-en-v1.5\", node_parser=node_parser\n", " )" ] }, @@ -154,8 +149,8 @@ "metadata": {}, "outputs": [], "source": [ - "from llama_index.indices.postprocessor import MetadataReplacementPostProcessor\n", - "from llama_index.indices.postprocessor import SentenceTransformerRerank\n", + "from llama_index.core.postprocessor import MetadataReplacementPostProcessor\n", + "from llama_index.core.postprocessor import SentenceTransformerRerank\n", "\n", "sentence_window_engine = sentence_index.as_query_engine(\n", " similarity_top_k=6,\n", @@ -173,9 +168,9 @@ "metadata": {}, "outputs": [], "source": [ - "from llama_index.query_engine import SubQuestionQueryEngine\n", - "from llama_index.tools import QueryEngineTool\n", - "from llama_index.tools import ToolMetadata\n", + "from llama_index.core.query_engine import SubQuestionQueryEngine\n", + "from llama_index.core.tools import QueryEngineTool\n", + "from llama_index.core.tools import ToolMetadata\n", "\n", "sentence_sub_engine = SubQuestionQueryEngine.from_defaults(\n", " [\n", @@ -186,7 +181,7 @@ " ),\n", " )\n", " ],\n", - " service_context=sentence_context,\n", + " llm=llm, \n", " verbose=False,\n", ")" ] diff --git a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb index 8082cac55..7cc6dde0a 100644 --- a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb +++ b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_feedback_action_example.ipynb @@ -170,7 +170,7 @@ "models:\n", " - type: main\n", " engine: openai\n", - " model: gpt-4o-mini\n", + " model: \"gpt-4o-mini\"\n", "\n", "rails:\n", " output:\n", diff --git a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb index 6d7112b16..a756049e1 100644 --- a/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb +++ b/examples/expositional/frameworks/nemoguardrails/nemoguardrails_trurails_example.ipynb @@ -88,7 +88,7 @@ "models:\n", " - type: main\n", " engine: openai\n", - " model: gpt-4o-mini" + " model: \"gpt-4o-mini\"" ] }, { diff --git a/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb b/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb index 3e383ac6a..b29372a79 100644 --- a/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb +++ b/examples/expositional/frameworks/openai_assistants/openai_assistants_api.ipynb @@ -47,7 +47,7 @@ "source": [ "import os\n", "\n", - "os.environ[\"OPENAI_API_KEY\"] = \"sk-...\"" + "os.environ[\"OPENAI_API_KEY\"] = \"sk-....\"" ] }, { @@ -67,7 +67,7 @@ "metadata": {}, "outputs": [], "source": [ - "!wget https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt -P data/" + "!curl --create-dirs -o data/paul_graham_essay.txt https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt" ] }, { @@ -106,35 +106,27 @@ "from openai import OpenAI\n", "\n", "\n", - "class RAG_with_OpenAI_Assistant:\n", - " def __init__(self):\n", - " client = OpenAI()\n", - " self.client = client\n", - "\n", - " # upload the file\\\n", - " \n", + "class AssistantRAG:\n", "\n", - " # create the assistant with access to a retrieval tool\n", - " assistant = client.beta.assistants.create(\n", - " name=\"Paul Graham Essay Assistant\",\n", - " instructions=\"You are an assistant that answers questions about Paul Graham.\",\n", - " model=\"gpt-4-turbo-preview\",\n", - " tools=[{\"type\": \"file_search\"}],\n", - " )\n", + " def __init__(self):\n", + " self.client = OpenAI()\n", "\n", - " vector_store = client.beta.vector_stores.create(name=\"Paul Graham\")\n", + " # Upload the text file to the vector store\n", + " vector_store = self.client.beta.vector_stores.create(name=\"Paul Graham\")\n", "\n", " files = [open(\"data/paul_graham_essay.txt\", \"rb\")]\n", - " client.beta.vector_stores.file_batches.upload_and_poll(\n", + " self.client.beta.vector_stores.file_batches.upload_and_poll(\n", " vector_store_id=vector_store.id, files=files\n", " )\n", "\n", - " assistant = client.beta.assistants.update(\n", - " assistant_id=assistant.id,\n", + " # create the assistant with access to a retrieval tool\n", + " self.assistant = self.client.beta.assistants.create(\n", + " name=\"Paul Graham Essay Assistant\",\n", + " instructions=\"You are an assistant that answers questions about Paul Graham.\",\n", + " model=\"gpt-4-turbo-preview\",\n", " tool_resources={\"file_search\": {\"vector_store_ids\": [vector_store.id]}},\n", " )\n", "\n", - " self.assistant = assistant\n", "\n", " @instrument\n", " def retrieve_and_generate(self, query: str) -> str:\n", @@ -146,21 +138,12 @@ " thread_id=self.thread.id, role=\"user\", content=query\n", " )\n", "\n", - " run = self.client.beta.threads.runs.create(\n", + " run = self.client.beta.threads.runs.create_and_poll(\n", " thread_id=self.thread.id,\n", " assistant_id=self.assistant.id,\n", " instructions=\"Please answer any questions about Paul Graham.\",\n", " )\n", "\n", - " # Wait for the run to complete\n", - " import time\n", - "\n", - " while run.status in [\"queued\", \"in_progress\", \"cancelling\"]:\n", - " time.sleep(1)\n", - " run = self.client.beta.threads.runs.retrieve(\n", - " thread_id=self.thread.id, run_id=run.id\n", - " )\n", - "\n", " if run.status == \"completed\":\n", " messages = self.client.beta.threads.messages.list(\n", " thread_id=self.thread.id\n", @@ -178,7 +161,7 @@ " return response, quote\n", "\n", "\n", - "rag = RAG_with_OpenAI_Assistant()" + "rag = AssistantRAG()" ] }, { @@ -277,7 +260,7 @@ ], "metadata": { "kernelspec": { - "display_name": "genai-prospector", + "display_name": "pkg_311", "language": "python", "name": "python3" }, From 65600f9e81b75b49f03dc1c833bad798fbfa31cb Mon Sep 17 00:00:00 2001 From: corey Date: Mon, 4 Nov 2024 13:09:45 -0800 Subject: [PATCH 12/12] fix missing imports and dependencies --- Makefile | 14 +- .../langchain_model_comparison.ipynb | 78 ++- .../langchain/langchain_summarize.ipynb | 17 +- .../llama_index_hybrid_retriever.ipynb | 2 +- .../llama_index/llama_index_stream.ipynb | 7 +- poetry.lock | 604 +++++++++--------- 6 files changed, 356 insertions(+), 366 deletions(-) diff --git a/Makefile b/Makefile index f9cca6281..fb96165e1 100644 --- a/Makefile +++ b/Makefile @@ -64,14 +64,17 @@ env-tests-db: env-tests env-tests-notebook: env-tests env-tests-optional poetry run pip install \ faiss-cpu \ - langchainhub \ llama-hub \ rank_bm25 \ ipytree \ + sentencepiece \ + langchainhub \ llama-index-readers-web \ llama-index-vector-stores-milvus \ llama-index-retrievers-bm25 \ - llama-index-tools-yelp + llama-index-tools-yelp \ + llama-index-vector-stores-mongodb \ + langchain-huggingface # Lock the poetry dependencies for all the subprojects. lock: $(POETRY_DIRS) @@ -208,9 +211,6 @@ test-%-allow-optional: env test-%-optional: env-tests-optional TEST_OPTIONAL=true make test-$* -test-notebook: env-tests-notebook - make test-notebook-optional - # Run the unit tests, those in the tests/unit. They are run in the CI pipeline # frequently. test-unit: @@ -221,8 +221,8 @@ test-e2e: poetry run pytest -n auto --rootdir=. tests/e2e/* # Runs the notebook test -test-notebook: - poetry run pytest -n auto --rootdir=. tests/docs_notebooks/* +test-notebook: env-tests-notebook + poetry run pytest --rootdir=. tests/docs_notebooks/* install-wheels: pip install dist/*/*.whl diff --git a/examples/expositional/frameworks/langchain/langchain_model_comparison.ipynb b/examples/expositional/frameworks/langchain/langchain_model_comparison.ipynb index 1ffa3adc4..2b33d7a6b 100644 --- a/examples/expositional/frameworks/langchain/langchain_model_comparison.ipynb +++ b/examples/expositional/frameworks/langchain/langchain_model_comparison.ipynb @@ -28,7 +28,7 @@ "metadata": {}, "outputs": [], "source": [ - "# !pip install trulens trulens-providers-huggingface trulens-providers-openai langchain==0.0.283 langchain_community" + "# !pip install trulens trulens-providers-huggingface trulens-providers-openai langchain langchain_community" ] }, { @@ -39,18 +39,14 @@ "source": [ "import os\n", "\n", - "# Imports from langchain to build app. You may need to install langchain first\n", - "# with the following:\n", - "# !pip install langchain>=0.0.170\n", "from langchain.prompts import PromptTemplate\n", "\n", "# Imports main tools:\n", - "# Imports main tools:\n", "from trulens.core import Feedback\n", "from trulens.core import TruSession\n", "from trulens.apps.langchain import TruChain\n", "from trulens.providers.huggingface import Huggingface\n", - "from trulens.providers.openai import OpenAI\n", + "from trulens.providers.openai import OpenAI as fOpenAI\n", "\n", "session = TruSession()" ] @@ -72,7 +68,6 @@ "outputs": [], "source": [ "os.environ[\"HUGGINGFACE_API_KEY\"] = \"...\"\n", - "os.environ[\"HUGGINGFACEHUB_API_TOKEN\"] = \"...\"\n", "os.environ[\"OPENAI_API_KEY\"] = \"...\"" ] }, @@ -112,7 +107,7 @@ "source": [ "# API endpoints for models used in feedback functions:\n", "hugs = Huggingface()\n", - "openai = OpenAI()\n", + "openai = fOpenAI()\n", "\n", "# Question/answer relevance between overall question and answer.\n", "f_qa_relevance = Feedback(openai.relevance).on_input_output()\n", @@ -135,38 +130,62 @@ "metadata": {}, "outputs": [], "source": [ - "from langchain import HuggingFaceHub\n", - "from langchain import LLMChain\n", + "from huggingface_hub import login\n", + "\n", + "login(token=os.environ['HUGGINGFACE_API_KEY'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain.chains.llm import LLMChain\n", + "from langchain_huggingface import HuggingFaceEndpoint\n", + "from langchain_openai import OpenAI\n", "\n", "# initialize the models\n", - "hub_llm_smallflan = HuggingFaceHub(\n", - " repo_id=\"google/flan-t5-small\", model_kwargs={\"temperature\": 1e-10}\n", + "hub_llm_smallflan = HuggingFaceEndpoint(\n", + " model=\"google/flan-t5-small\", \n", + " temperature=1e-10, \n", + " max_new_tokens=250\n", ")\n", "\n", - "hub_llm_largeflan = HuggingFaceHub(\n", - " repo_id=\"google/flan-t5-large\", model_kwargs={\"temperature\": 1e-10}\n", + "gemma_2b = HuggingFaceEndpoint(\n", + " model=\"google/gemma-2-2b\", \n", + " temperature=1e-10\n", ")\n", "\n", - "davinci = OpenAI(model_name=\"text-davinci-003\")\n", + "gpt = OpenAI(model=\"gpt-4o-mini\")\n", "\n", "# create prompt template > LLM chain\n", "smallflan_chain = LLMChain(prompt=prompt, llm=hub_llm_smallflan)\n", "\n", - "largeflan_chain = LLMChain(prompt=prompt, llm=hub_llm_largeflan)\n", + "gemma_2b_chain = LLMChain(prompt=prompt, llm=gemma_2b)\n", "\n", - "davinci_chain = LLMChain(prompt=prompt, llm=davinci)\n", + "openai_gpt_chain = LLMChain(prompt=prompt, llm=gpt)\n", "\n", "# Trulens instrumentation.\n", "smallflan_app_recorder = TruChain(\n", - " app_name=\"small_flan\", app_version=\"v1\", app=smallflan_chain, feedbacks=all_feedbacks\n", + " app_name=\"langchain_model_comparison\", \n", + " app_version=\"small_flan\", \n", + " app=smallflan_chain, \n", + " feedbacks=all_feedbacks\n", ")\n", "\n", - "largeflan_app_recorder = TruChain(\n", - " app_name=\"large_flan\", app_version=\"v1\", app=largeflan_chain, feedbacks=all_feedbacks\n", + "gemma_2b_app_recorder = TruChain(\n", + " app_name=\"langchain_model_comparison\", \n", + " app_version=\"gemma-2b\", \n", + " app=gemma_2b_chain, \n", + " feedbacks=all_feedbacks\n", ")\n", "\n", - "davinci_app_recorder = TruChain(\n", - " app_name=\"davinci\", app_version=\"v1\", app=davinci_chain, feedbacks=all_feedbacks\n", + "openai_gpt_app_recorder = TruChain(\n", + " app_name=\"langchain_model_comparison\", \n", + " app_version=\"GPT-4o-mini\", \n", + " app=openai_gpt_chain, \n", + " feedbacks=all_feedbacks\n", ")" ] }, @@ -193,10 +212,10 @@ "for prompt in prompts:\n", " with smallflan_app_recorder as recording:\n", " smallflan_chain(prompt)\n", - " with largeflan_app_recorder as recording:\n", - " largeflan_chain(prompt)\n", - " with davinci_app_recorder as recording:\n", - " davinci_chain(prompt)" + " with gemma_2b_app_recorder as recording:\n", + " gemma_2b_chain(prompt)\n", + " with openai_gpt_app_recorder as recording:\n", + " openai_gpt_chain(prompt)" ] }, { @@ -221,7 +240,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.4 ('agents')", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -235,11 +254,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "7d153714b979d5e6d08dd8ec90712dd93bff2c9b6c1f0c118169738af3430cd4" - } } }, "nbformat": 4, diff --git a/examples/expositional/frameworks/langchain/langchain_summarize.ipynb b/examples/expositional/frameworks/langchain/langchain_summarize.ipynb index 670221626..12216de09 100644 --- a/examples/expositional/frameworks/langchain/langchain_summarize.ipynb +++ b/examples/expositional/frameworks/langchain/langchain_summarize.ipynb @@ -37,10 +37,10 @@ "source": [ "from langchain.chains.summarize import load_summarize_chain\n", "from langchain.text_splitter import RecursiveCharacterTextSplitter\n", - "from trulens.apps.langchain import Feedback\n", - "from trulens.apps.langchain import FeedbackMode\n", - "from trulens.apps.langchain import Query\n", - "from trulens.apps.langchain import TruSession\n", + "from trulens.core.feedback import Feedback\n", + "from trulens.core.schema.feedback import FeedbackMode\n", + "from trulens.core.schema.select import Select\n", + "from trulens.core import TruSession\n", "from trulens.apps.langchain import TruChain\n", "from trulens.providers.openai import OpenAI\n", "\n", @@ -79,7 +79,7 @@ "\n", "# Define a moderation feedback function using HuggingFace.\n", "mod_not_hate = Feedback(provider.moderation_not_hate).on(\n", - " text=Query.RecordInput[:].page_content\n", + " text=Select.RecordInput[:].page_content\n", ")\n", "\n", "\n", @@ -147,7 +147,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.4 ('agents')", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -161,11 +161,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "7d153714b979d5e6d08dd8ec90712dd93bff2c9b6c1f0c118169738af3430cd4" - } } }, "nbformat": 4, diff --git a/examples/expositional/frameworks/llama_index/llama_index_hybrid_retriever.ipynb b/examples/expositional/frameworks/llama_index/llama_index_hybrid_retriever.ipynb index 6abcb451f..2e8756bdf 100644 --- a/examples/expositional/frameworks/llama_index/llama_index_hybrid_retriever.ipynb +++ b/examples/expositional/frameworks/llama_index/llama_index_hybrid_retriever.ipynb @@ -381,7 +381,7 @@ "metadata": {}, "outputs": [], "source": [ - "from trulens.core.guardrails.llama import WithFeedbackFilterNodes\n", + "from trulens.apps.llamaindex.guardrails import WithFeedbackFilterNodes\n", "\n", "feedback = Feedback(openai.context_relevance)\n", "\n", diff --git a/examples/expositional/frameworks/llama_index/llama_index_stream.ipynb b/examples/expositional/frameworks/llama_index/llama_index_stream.ipynb index f2b5635bd..6bc53aa8b 100644 --- a/examples/expositional/frameworks/llama_index/llama_index_stream.ipynb +++ b/examples/expositional/frameworks/llama_index/llama_index_stream.ipynb @@ -207,7 +207,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3.11.4 ('agents')", + "display_name": "pkg_311", "language": "python", "name": "python3" }, @@ -221,11 +221,6 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" - }, - "vscode": { - "interpreter": { - "hash": "7d153714b979d5e6d08dd8ec90712dd93bff2c9b6c1f0c118169738af3430cd4" - } } }, "nbformat": 4, diff --git a/poetry.lock b/poetry.lock index ec3a09caf..06341e114 100644 --- a/poetry.lock +++ b/poetry.lock @@ -508,17 +508,17 @@ files = [ [[package]] name = "boto3" -version = "1.35.51" +version = "1.35.53" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.35.51-py3-none-any.whl", hash = "sha256:c922f6a18958af9d8af0489d6d8503b517029d8159b26aa4859a8294561c72e9"}, - {file = "boto3-1.35.51.tar.gz", hash = "sha256:a57c6c7012ecb40c43e565a6f7a891f39efa990ff933eab63cd456f7501c2731"}, + {file = "boto3-1.35.53-py3-none-any.whl", hash = "sha256:a9c0955df0b52b43749d81bde159343a40ea2a3537a46049336fe8193871b18e"}, + {file = "boto3-1.35.53.tar.gz", hash = "sha256:f4124548bb831e13504e805f2fbbfcee06df42fffea0655862c6eb9b95d6d1be"}, ] [package.dependencies] -botocore = ">=1.35.51,<1.36.0" +botocore = ">=1.35.53,<1.36.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -527,13 +527,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.35.51" +version = "1.35.53" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.35.51-py3-none-any.whl", hash = "sha256:4d65b00111bd12b98e9f920ecab602cf619cc6a6d0be6e5dd53f517e4b92901c"}, - {file = "botocore-1.35.51.tar.gz", hash = "sha256:a9b3d1da76b3e896ad74605c01d88f596324a3337393d4bfbfa0d6c35822ca9c"}, + {file = "botocore-1.35.53-py3-none-any.whl", hash = "sha256:12869640f2f9fab3152ea312a6906d5bc6ae15522cc74b6367ee1c273269a28b"}, + {file = "botocore-1.35.53.tar.gz", hash = "sha256:e610ae076ad1eaed5680d3990493659bbabdffd67b15c61d8373a23e4bc41062"}, ] [package.dependencies] @@ -1233,13 +1233,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "faker" -version = "30.8.1" +version = "30.8.2" description = "Faker is a Python package that generates fake data for you." optional = false python-versions = ">=3.8" files = [ - {file = "Faker-30.8.1-py3-none-any.whl", hash = "sha256:4f7f133560b9d4d2a915581f4ba86f9a6a83421b89e911f36c4c96cff58135a5"}, - {file = "faker-30.8.1.tar.gz", hash = "sha256:93e8b70813f76d05d98951154681180cb795cfbcff3eced7680d963bcc0da2a9"}, + {file = "Faker-30.8.2-py3-none-any.whl", hash = "sha256:4a82b2908cd19f3bba1a4da2060cc4eb18a40410ccdf9350d071d79dc92fe3ce"}, + {file = "faker-30.8.2.tar.gz", hash = "sha256:aa31b52cdae3673d6a78b4857c7bcdc0e98f201a5cb77d7827fa9e6b5876da94"}, ] [package.dependencies] @@ -2125,84 +2125,84 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jiter" -version = "0.6.1" +version = "0.7.0" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.6.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d08510593cb57296851080018006dfc394070178d238b767b1879dc1013b106c"}, - {file = "jiter-0.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adef59d5e2394ebbad13b7ed5e0306cceb1df92e2de688824232a91588e77aa7"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e02f7a27f2bcc15b7d455c9df05df8ffffcc596a2a541eeda9a3110326e7a3"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed69a7971d67b08f152c17c638f0e8c2aa207e9dd3a5fcd3cba294d39b5a8d2d"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2019d966e98f7c6df24b3b8363998575f47d26471bfb14aade37630fae836a1"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36c0b51a285b68311e207a76c385650322734c8717d16c2eb8af75c9d69506e7"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:220e0963b4fb507c525c8f58cde3da6b1be0bfddb7ffd6798fb8f2531226cdb1"}, - {file = "jiter-0.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa25c7a9bf7875a141182b9c95aed487add635da01942ef7ca726e42a0c09058"}, - {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e90552109ca8ccd07f47ca99c8a1509ced93920d271bb81780a973279974c5ab"}, - {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67723a011964971864e0b484b0ecfee6a14de1533cff7ffd71189e92103b38a8"}, - {file = "jiter-0.6.1-cp310-none-win32.whl", hash = "sha256:33af2b7d2bf310fdfec2da0177eab2fedab8679d1538d5b86a633ebfbbac4edd"}, - {file = "jiter-0.6.1-cp310-none-win_amd64.whl", hash = "sha256:7cea41c4c673353799906d940eee8f2d8fd1d9561d734aa921ae0f75cb9732f4"}, - {file = "jiter-0.6.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b03c24e7da7e75b170c7b2b172d9c5e463aa4b5c95696a368d52c295b3f6847f"}, - {file = "jiter-0.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:47fee1be677b25d0ef79d687e238dc6ac91a8e553e1a68d0839f38c69e0ee491"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0d2f6e01a8a0fb0eab6d0e469058dab2be46ff3139ed2d1543475b5a1d8e7"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b809e39e342c346df454b29bfcc7bca3d957f5d7b60e33dae42b0e5ec13e027"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9ac7c2f092f231f5620bef23ce2e530bd218fc046098747cc390b21b8738a7a"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e51a2d80d5fe0ffb10ed2c82b6004458be4a3f2b9c7d09ed85baa2fbf033f54b"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3343d4706a2b7140e8bd49b6c8b0a82abf9194b3f0f5925a78fc69359f8fc33c"}, - {file = "jiter-0.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82521000d18c71e41c96960cb36e915a357bc83d63a8bed63154b89d95d05ad1"}, - {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c843e7c1633470708a3987e8ce617ee2979ee18542d6eb25ae92861af3f1d62"}, - {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a2e861658c3fe849efc39b06ebb98d042e4a4c51a8d7d1c3ddc3b1ea091d0784"}, - {file = "jiter-0.6.1-cp311-none-win32.whl", hash = "sha256:7d72fc86474862c9c6d1f87b921b70c362f2b7e8b2e3c798bb7d58e419a6bc0f"}, - {file = "jiter-0.6.1-cp311-none-win_amd64.whl", hash = "sha256:3e36a320634f33a07794bb15b8da995dccb94f944d298c8cfe2bd99b1b8a574a"}, - {file = "jiter-0.6.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1fad93654d5a7dcce0809aff66e883c98e2618b86656aeb2129db2cd6f26f867"}, - {file = "jiter-0.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4e6e340e8cd92edab7f6a3a904dbbc8137e7f4b347c49a27da9814015cc0420c"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:691352e5653af84ed71763c3c427cff05e4d658c508172e01e9c956dfe004aba"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:defee3949313c1f5b55e18be45089970cdb936eb2a0063f5020c4185db1b63c9"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26d2bdd5da097e624081c6b5d416d3ee73e5b13f1703bcdadbb1881f0caa1933"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18aa9d1626b61c0734b973ed7088f8a3d690d0b7f5384a5270cd04f4d9f26c86"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a3567c8228afa5ddcce950631c6b17397ed178003dc9ee7e567c4c4dcae9fa0"}, - {file = "jiter-0.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5c0507131c922defe3f04c527d6838932fcdfd69facebafd7d3574fa3395314"}, - {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:540fcb224d7dc1bcf82f90f2ffb652df96f2851c031adca3c8741cb91877143b"}, - {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e7b75436d4fa2032b2530ad989e4cb0ca74c655975e3ff49f91a1a3d7f4e1df2"}, - {file = "jiter-0.6.1-cp312-none-win32.whl", hash = "sha256:883d2ced7c21bf06874fdeecab15014c1c6d82216765ca6deef08e335fa719e0"}, - {file = "jiter-0.6.1-cp312-none-win_amd64.whl", hash = "sha256:91e63273563401aadc6c52cca64a7921c50b29372441adc104127b910e98a5b6"}, - {file = "jiter-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:852508a54fe3228432e56019da8b69208ea622a3069458252f725d634e955b31"}, - {file = "jiter-0.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f491cc69ff44e5a1e8bc6bf2b94c1f98d179e1aaf4a554493c171a5b2316b701"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc56c8f0b2a28ad4d8047f3ae62d25d0e9ae01b99940ec0283263a04724de1f3"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51b58f7a0d9e084a43b28b23da2b09fc5e8df6aa2b6a27de43f991293cab85fd"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f79ce15099154c90ef900d69c6b4c686b64dfe23b0114e0971f2fecd306ec6c"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:03a025b52009f47e53ea619175d17e4ded7c035c6fbd44935cb3ada11e1fd592"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74a8d93718137c021d9295248a87c2f9fdc0dcafead12d2930bc459ad40f885"}, - {file = "jiter-0.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40b03b75f903975f68199fc4ec73d546150919cb7e534f3b51e727c4d6ccca5a"}, - {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:825651a3f04cf92a661d22cad61fc913400e33aa89b3e3ad9a6aa9dc8a1f5a71"}, - {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:928bf25eb69ddb292ab8177fe69d3fbf76c7feab5fce1c09265a7dccf25d3991"}, - {file = "jiter-0.6.1-cp313-none-win32.whl", hash = "sha256:352cd24121e80d3d053fab1cc9806258cad27c53cad99b7a3cac57cf934b12e4"}, - {file = "jiter-0.6.1-cp313-none-win_amd64.whl", hash = "sha256:be7503dd6f4bf02c2a9bacb5cc9335bc59132e7eee9d3e931b13d76fd80d7fda"}, - {file = "jiter-0.6.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:31d8e00e1fb4c277df8ab6f31a671f509ebc791a80e5c61fdc6bc8696aaa297c"}, - {file = "jiter-0.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77c296d65003cd7ee5d7b0965f6acbe6cffaf9d1fa420ea751f60ef24e85fed5"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeeb0c0325ef96c12a48ea7e23e2e86fe4838e6e0a995f464cf4c79fa791ceeb"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a31c6fcbe7d6c25d6f1cc6bb1cba576251d32795d09c09961174fe461a1fb5bd"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59e2b37f3b9401fc9e619f4d4badcab2e8643a721838bcf695c2318a0475ae42"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bae5ae4853cb9644144e9d0755854ce5108d470d31541d83f70ca7ecdc2d1637"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df588e9c830b72d8db1dd7d0175af6706b0904f682ea9b1ca8b46028e54d6e9"}, - {file = "jiter-0.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15f8395e835cf561c85c1adee72d899abf2733d9df72e9798e6d667c9b5c1f30"}, - {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a99d4e0b5fc3b05ea732d67eb2092fe894e95a90e6e413f2ea91387e228a307"}, - {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a311df1fa6be0ccd64c12abcd85458383d96e542531bafbfc0a16ff6feda588f"}, - {file = "jiter-0.6.1-cp38-none-win32.whl", hash = "sha256:81116a6c272a11347b199f0e16b6bd63f4c9d9b52bc108991397dd80d3c78aba"}, - {file = "jiter-0.6.1-cp38-none-win_amd64.whl", hash = "sha256:13f9084e3e871a7c0b6e710db54444088b1dd9fbefa54d449b630d5e73bb95d0"}, - {file = "jiter-0.6.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f1c53615fcfec3b11527c08d19cff6bc870da567ce4e57676c059a3102d3a082"}, - {file = "jiter-0.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f791b6a4da23238c17a81f44f5b55d08a420c5692c1fda84e301a4b036744eb1"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c97e90fec2da1d5f68ef121444c2c4fa72eabf3240829ad95cf6bbeca42a301"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cbc1a66b4e41511209e97a2866898733c0110b7245791ac604117b7fb3fedb7"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e85f9e12cd8418ab10e1fcf0e335ae5bb3da26c4d13a0fd9e6a17a674783b6"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08be33db6dcc374c9cc19d3633af5e47961a7b10d4c61710bd39e48d52a35824"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:677be9550004f5e010d673d3b2a2b815a8ea07a71484a57d3f85dde7f14cf132"}, - {file = "jiter-0.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e8bd065be46c2eecc328e419d6557bbc37844c88bb07b7a8d2d6c91c7c4dedc9"}, - {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bd95375ce3609ec079a97c5d165afdd25693302c071ca60c7ae1cf826eb32022"}, - {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db459ed22d0208940d87f614e1f0ea5a946d29a3cfef71f7e1aab59b6c6b2afb"}, - {file = "jiter-0.6.1-cp39-none-win32.whl", hash = "sha256:d71c962f0971347bd552940ab96aa42ceefcd51b88c4ced8a27398182efa8d80"}, - {file = "jiter-0.6.1-cp39-none-win_amd64.whl", hash = "sha256:d465db62d2d10b489b7e7a33027c4ae3a64374425d757e963f86df5b5f2e7fc5"}, - {file = "jiter-0.6.1.tar.gz", hash = "sha256:e19cd21221fc139fb032e4112986656cb2739e9fe6d84c13956ab30ccc7d4449"}, + {file = "jiter-0.7.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:e14027f61101b3f5e173095d9ecf95c1cac03ffe45a849279bde1d97e559e314"}, + {file = "jiter-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:979ec4711c2e37ac949561858bd42028884c9799516a923e1ff0b501ef341a4a"}, + {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:662d5d3cca58ad6af7a3c6226b641c8655de5beebcb686bfde0df0f21421aafa"}, + {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1d89008fb47043a469f97ad90840b97ba54e7c3d62dc7cbb6cbf938bd0caf71d"}, + {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8b16c35c846a323ce9067170d5ab8c31ea3dbcab59c4f7608bbbf20c2c3b43f"}, + {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e82daaa1b0a68704f9029b81e664a5a9de3e466c2cbaabcda5875f961702e7"}, + {file = "jiter-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43a87a9f586636e1f0dd3651a91f79b491ea0d9fd7cbbf4f5c463eebdc48bda7"}, + {file = "jiter-0.7.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ec05b1615f96cc3e4901678bc863958611584072967d9962f9e571d60711d52"}, + {file = "jiter-0.7.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5cb97e35370bde7aa0d232a7f910f5a0fbbc96bc0a7dbaa044fd5cd6bcd7ec3"}, + {file = "jiter-0.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cb316dacaf48c8c187cea75d0d7f835f299137e6fdd13f691dff8f92914015c7"}, + {file = "jiter-0.7.0-cp310-none-win32.whl", hash = "sha256:243f38eb4072763c54de95b14ad283610e0cd3bf26393870db04e520f60eebb3"}, + {file = "jiter-0.7.0-cp310-none-win_amd64.whl", hash = "sha256:2221d5603c139f6764c54e37e7c6960c469cbcd76928fb10d15023ba5903f94b"}, + {file = "jiter-0.7.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:91cec0ad755bd786c9f769ce8d843af955df6a8e56b17658771b2d5cb34a3ff8"}, + {file = "jiter-0.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:feba70a28a27d962e353e978dbb6afd798e711c04cb0b4c5e77e9d3779033a1a"}, + {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9d866ec066c3616cacb8535dbda38bb1d470b17b25f0317c4540182bc886ce2"}, + {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e7a7a00b6f9f18289dd563596f97ecaba6c777501a8ba04bf98e03087bcbc60"}, + {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9aaf564094c7db8687f2660605e099f3d3e6ea5e7135498486674fcb78e29165"}, + {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4d27e09825c1b3c7a667adb500ce8b840e8fc9f630da8454b44cdd4fb0081bb"}, + {file = "jiter-0.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ca7c287da9c1d56dda88da1d08855a787dbb09a7e2bd13c66a2e288700bd7c7"}, + {file = "jiter-0.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db19a6d160f093cbc8cd5ea2abad420b686f6c0e5fb4f7b41941ebc6a4f83cda"}, + {file = "jiter-0.7.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e46a63c7f877cf7441ffc821c28287cfb9f533ae6ed707bde15e7d4dfafa7ae"}, + {file = "jiter-0.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7ba426fa7ff21cb119fa544b75dd3fbee6a70e55a5829709c0338d07ccd30e6d"}, + {file = "jiter-0.7.0-cp311-none-win32.whl", hash = "sha256:c07f55a64912b0c7982377831210836d2ea92b7bd343fca67a32212dd72e38e0"}, + {file = "jiter-0.7.0-cp311-none-win_amd64.whl", hash = "sha256:ed27b2c43e1b5f6c7fedc5c11d4d8bfa627de42d1143d87e39e2e83ddefd861a"}, + {file = "jiter-0.7.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac7930bcaaeb1e229e35c91c04ed2e9f39025b86ee9fc3141706bbf6fff4aeeb"}, + {file = "jiter-0.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:571feae3e7c901a8eedde9fd2865b0dfc1432fb15cab8c675a8444f7d11b7c5d"}, + {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8af4df8a262fa2778b68c2a03b6e9d1cb4d43d02bea6976d46be77a3a331af1"}, + {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd028d4165097a611eb0c7494d8c1f2aebd46f73ca3200f02a175a9c9a6f22f5"}, + {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6b487247c7836810091e9455efe56a52ec51bfa3a222237e1587d04d3e04527"}, + {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6d28a92f28814e1a9f2824dc11f4e17e1df1f44dc4fdeb94c5450d34bcb2602"}, + {file = "jiter-0.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90443994bbafe134f0b34201dad3ebe1c769f0599004084e046fb249ad912425"}, + {file = "jiter-0.7.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f9abf464f9faac652542ce8360cea8e68fba2b78350e8a170248f9bcc228702a"}, + {file = "jiter-0.7.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db7a8d99fc5f842f7d2852f06ccaed066532292c41723e5dff670c339b649f88"}, + {file = "jiter-0.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:15cf691ebd8693b70c94627d6b748f01e6d697d9a6e9f2bc310934fcfb7cf25e"}, + {file = "jiter-0.7.0-cp312-none-win32.whl", hash = "sha256:9dcd54fa422fb66ca398bec296fed5f58e756aa0589496011cfea2abb5be38a5"}, + {file = "jiter-0.7.0-cp312-none-win_amd64.whl", hash = "sha256:cc989951f73f9375b8eacd571baaa057f3d7d11b7ce6f67b9d54642e7475bfad"}, + {file = "jiter-0.7.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:24cecd18df540963cd27c08ca5ce1d0179f229ff78066d9eecbe5add29361340"}, + {file = "jiter-0.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d41b46236b90b043cca73785674c23d2a67d16f226394079d0953f94e765ed76"}, + {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b160db0987171365c153e406a45dcab0ee613ae3508a77bfff42515cb4ce4d6e"}, + {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d1c8d91e0f0bd78602eaa081332e8ee4f512c000716f5bc54e9a037306d693a7"}, + {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:997706c683195eeff192d2e5285ce64d2a610414f37da3a3f2625dcf8517cf90"}, + {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ea52a8a0ff0229ab2920284079becd2bae0688d432fca94857ece83bb49c541"}, + {file = "jiter-0.7.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d77449d2738cf74752bb35d75ee431af457e741124d1db5e112890023572c7c"}, + {file = "jiter-0.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8203519907a1d81d6cb00902c98e27c2d0bf25ce0323c50ca594d30f5f1fbcf"}, + {file = "jiter-0.7.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41d15ccc53931c822dd7f1aebf09faa3cda2d7b48a76ef304c7dbc19d1302e51"}, + {file = "jiter-0.7.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:febf3179b2fabf71fbd2fd52acb8594163bb173348b388649567a548f356dbf6"}, + {file = "jiter-0.7.0-cp313-none-win32.whl", hash = "sha256:4a8e2d866e7eda19f012444e01b55079d8e1c4c30346aaac4b97e80c54e2d6d3"}, + {file = "jiter-0.7.0-cp313-none-win_amd64.whl", hash = "sha256:7417c2b928062c496f381fb0cb50412eee5ad1d8b53dbc0e011ce45bb2de522c"}, + {file = "jiter-0.7.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9c62c737b5368e51e74960a08fe1adc807bd270227291daede78db24d5fbf556"}, + {file = "jiter-0.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e4640722b1bef0f6e342fe4606aafaae0eb4f4be5c84355bb6867f34400f6688"}, + {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f367488c3b9453eab285424c61098faa1cab37bb49425e69c8dca34f2dfe7d69"}, + {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0cf5d42beb3514236459454e3287db53d9c4d56c4ebaa3e9d0efe81b19495129"}, + {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc5190ea1113ee6f7252fa8a5fe5a6515422e378356c950a03bbde5cafbdbaab"}, + {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ee47a149d698796a87abe445fc8dee21ed880f09469700c76c8d84e0d11efd"}, + {file = "jiter-0.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48592c26ea72d3e71aa4bea0a93454df907d80638c3046bb0705507b6704c0d7"}, + {file = "jiter-0.7.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:79fef541199bd91cfe8a74529ecccb8eaf1aca38ad899ea582ebbd4854af1e51"}, + {file = "jiter-0.7.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d1ef6bb66041f2514739240568136c81b9dcc64fd14a43691c17ea793b6535c0"}, + {file = "jiter-0.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aca4d950863b1c238e315bf159466e064c98743eef3bd0ff9617e48ff63a4715"}, + {file = "jiter-0.7.0-cp38-none-win32.whl", hash = "sha256:897745f230350dcedb8d1ebe53e33568d48ea122c25e6784402b6e4e88169be7"}, + {file = "jiter-0.7.0-cp38-none-win_amd64.whl", hash = "sha256:b928c76a422ef3d0c85c5e98c498ce3421b313c5246199541e125b52953e1bc0"}, + {file = "jiter-0.7.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c9b669ff6f8ba08270dee9ccf858d3b0203b42314a428a1676762f2d390fbb64"}, + {file = "jiter-0.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b5be919bacd73ca93801c3042bce6e95cb9c555a45ca83617b9b6c89df03b9c2"}, + {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a282e1e8a396dabcea82d64f9d05acf7efcf81ecdd925b967020dcb0e671c103"}, + {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:17ecb1a578a56e97a043c72b463776b5ea30343125308f667fb8fce4b3796735"}, + {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b6045fa0527129218cdcd8a8b839f678219686055f31ebab35f87d354d9c36e"}, + {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:189cc4262a92e33c19d4fd24018f5890e4e6da5b2581f0059938877943f8298c"}, + {file = "jiter-0.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c138414839effbf30d185e30475c6dc8a16411a1e3681e5fd4605ab1233ac67a"}, + {file = "jiter-0.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2791604acef33da6b72d5ecf885a32384bcaf9aa1e4be32737f3b8b9588eef6a"}, + {file = "jiter-0.7.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae60ec89037a78d60bbf3d8b127f1567769c8fa24886e0abed3f622791dea478"}, + {file = "jiter-0.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:836f03dea312967635233d826f783309b98cfd9ccc76ac776e224cfcef577862"}, + {file = "jiter-0.7.0-cp39-none-win32.whl", hash = "sha256:ebc30ae2ce4bc4986e1764c404b4ea1924f926abf02ce92516485098f8545374"}, + {file = "jiter-0.7.0-cp39-none-win_amd64.whl", hash = "sha256:abf596f951370c648f37aa9899deab296c42a3829736e598b0dd10b08f77a44d"}, + {file = "jiter-0.7.0.tar.gz", hash = "sha256:c061d9738535497b5509f8970584f20de1e900806b239a39a9994fc191dad630"}, ] [[package]] @@ -2880,13 +2880,13 @@ regex = ["regex"] [[package]] name = "litellm" -version = "1.51.1" +version = "1.51.2" description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "litellm-1.51.1-py3-none-any.whl", hash = "sha256:1a389ca5b8ddd7a98d97ad229118d8323caeaaf9c1c5b79b1072edc2a18e773d"}, - {file = "litellm-1.51.1.tar.gz", hash = "sha256:ef9019bdd8bbad927e49696a300d03ea00b86721ebe7b62621c923f728e50d18"}, + {file = "litellm-1.51.2-py3-none-any.whl", hash = "sha256:a8469d8b037a61fd7ba5041b2c42b7f1ba433d4953081b86c9916b6dd220e51c"}, + {file = "litellm-1.51.2.tar.gz", hash = "sha256:a86e524b5cf9ad2863d835adb81fd92afd206a190c8629f3e86f652b5f405efa"}, ] [package.dependencies] @@ -3815,13 +3815,13 @@ mkdocs = ">=1.0.3" [[package]] name = "mkdocs-material" -version = "9.5.42" +version = "9.5.43" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.42-py3-none-any.whl", hash = "sha256:452a7c5d21284b373f36b981a2cbebfff59263feebeede1bc28652e9c5bbe316"}, - {file = "mkdocs_material-9.5.42.tar.gz", hash = "sha256:92779b5e9b5934540c574c11647131d217dc540dce72b05feeda088c8eb1b8f2"}, + {file = "mkdocs_material-9.5.43-py3-none-any.whl", hash = "sha256:4aae0664c456fd12837a3192e0225c17960ba8bf55d7f0a7daef7e4b0b914a34"}, + {file = "mkdocs_material-9.5.43.tar.gz", hash = "sha256:83be7ff30b65a1e4930dfa4ab911e75780a3afc9583d162692e434581cb46979"}, ] [package.dependencies] @@ -5132,17 +5132,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa typing = ["typing-extensions"] xmp = ["defusedxml"] -[[package]] -name = "pip" -version = "24.3.1" -description = "The PyPA recommended tool for installing Python packages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pip-24.3.1-py3-none-any.whl", hash = "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed"}, - {file = "pip-24.3.1.tar.gz", hash = "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99"}, -] - [[package]] name = "pkginfo" version = "1.10.0" @@ -6370,114 +6359,114 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.20.0" +version = "0.20.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, - {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, - {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, - {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, - {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, - {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, - {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, - {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, - {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, - {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, - {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, - {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, - {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, - {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, - {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, + {file = "rpds_py-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a649dfd735fff086e8a9d0503a9f0c7d01b7912a333c7ae77e1515c08c146dad"}, + {file = "rpds_py-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f16bc1334853e91ddaaa1217045dd7be166170beec337576818461268a3de67f"}, + {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14511a539afee6f9ab492b543060c7491c99924314977a55c98bfa2ee29ce78c"}, + {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ccb8ac2d3c71cda472b75af42818981bdacf48d2e21c36331b50b4f16930163"}, + {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c142b88039b92e7e0cb2552e8967077e3179b22359e945574f5e2764c3953dcf"}, + {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f19169781dddae7478a32301b499b2858bc52fc45a112955e798ee307e294977"}, + {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13c56de6518e14b9bf6edde23c4c39dac5b48dcf04160ea7bce8fca8397cdf86"}, + {file = "rpds_py-0.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:925d176a549f4832c6f69fa6026071294ab5910e82a0fe6c6228fce17b0706bd"}, + {file = "rpds_py-0.20.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:78f0b6877bfce7a3d1ff150391354a410c55d3cdce386f862926a4958ad5ab7e"}, + {file = "rpds_py-0.20.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3dd645e2b0dcb0fd05bf58e2e54c13875847687d0b71941ad2e757e5d89d4356"}, + {file = "rpds_py-0.20.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4f676e21db2f8c72ff0936f895271e7a700aa1f8d31b40e4e43442ba94973899"}, + {file = "rpds_py-0.20.1-cp310-none-win32.whl", hash = "sha256:648386ddd1e19b4a6abab69139b002bc49ebf065b596119f8f37c38e9ecee8ff"}, + {file = "rpds_py-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:d9ecb51120de61e4604650666d1f2b68444d46ae18fd492245a08f53ad2b7711"}, + {file = "rpds_py-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:762703bdd2b30983c1d9e62b4c88664df4a8a4d5ec0e9253b0231171f18f6d75"}, + {file = "rpds_py-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0b581f47257a9fce535c4567782a8976002d6b8afa2c39ff616edf87cbeff712"}, + {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:842c19a6ce894493563c3bd00d81d5100e8e57d70209e84d5491940fdb8b9e3a"}, + {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42cbde7789f5c0bcd6816cb29808e36c01b960fb5d29f11e052215aa85497c93"}, + {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c8e9340ce5a52f95fa7d3b552b35c7e8f3874d74a03a8a69279fd5fca5dc751"}, + {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ba6f89cac95c0900d932c9efb7f0fb6ca47f6687feec41abcb1bd5e2bd45535"}, + {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a916087371afd9648e1962e67403c53f9c49ca47b9680adbeef79da3a7811b0"}, + {file = "rpds_py-0.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:200a23239781f46149e6a415f1e870c5ef1e712939fe8fa63035cd053ac2638e"}, + {file = "rpds_py-0.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58b1d5dd591973d426cbb2da5e27ba0339209832b2f3315928c9790e13f159e8"}, + {file = "rpds_py-0.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6b73c67850ca7cae0f6c56f71e356d7e9fa25958d3e18a64927c2d930859b8e4"}, + {file = "rpds_py-0.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d8761c3c891cc51e90bc9926d6d2f59b27beaf86c74622c8979380a29cc23ac3"}, + {file = "rpds_py-0.20.1-cp311-none-win32.whl", hash = "sha256:cd945871335a639275eee904caef90041568ce3b42f402c6959b460d25ae8732"}, + {file = "rpds_py-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:7e21b7031e17c6b0e445f42ccc77f79a97e2687023c5746bfb7a9e45e0921b84"}, + {file = "rpds_py-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:36785be22066966a27348444b40389f8444671630063edfb1a2eb04318721e17"}, + {file = "rpds_py-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:142c0a5124d9bd0e2976089484af5c74f47bd3298f2ed651ef54ea728d2ea42c"}, + {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbddc10776ca7ebf2a299c41a4dde8ea0d8e3547bfd731cb87af2e8f5bf8962d"}, + {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15a842bb369e00295392e7ce192de9dcbf136954614124a667f9f9f17d6a216f"}, + {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be5ef2f1fc586a7372bfc355986226484e06d1dc4f9402539872c8bb99e34b01"}, + {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbcf360c9e3399b056a238523146ea77eeb2a596ce263b8814c900263e46031a"}, + {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd27a66740ffd621d20b9a2f2b5ee4129a56e27bfb9458a3bcc2e45794c96cb"}, + {file = "rpds_py-0.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0b937b2a1988f184a3e9e577adaa8aede21ec0b38320d6009e02bd026db04fa"}, + {file = "rpds_py-0.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6889469bfdc1eddf489729b471303739bf04555bb151fe8875931f8564309afc"}, + {file = "rpds_py-0.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:19b73643c802f4eaf13d97f7855d0fb527fbc92ab7013c4ad0e13a6ae0ed23bd"}, + {file = "rpds_py-0.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3c6afcf2338e7f374e8edc765c79fbcb4061d02b15dd5f8f314a4af2bdc7feb5"}, + {file = "rpds_py-0.20.1-cp312-none-win32.whl", hash = "sha256:dc73505153798c6f74854aba69cc75953888cf9866465196889c7cdd351e720c"}, + {file = "rpds_py-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:8bbe951244a838a51289ee53a6bae3a07f26d4e179b96fc7ddd3301caf0518eb"}, + {file = "rpds_py-0.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6ca91093a4a8da4afae7fe6a222c3b53ee4eef433ebfee4d54978a103435159e"}, + {file = "rpds_py-0.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b9c2fe36d1f758b28121bef29ed1dee9b7a2453e997528e7d1ac99b94892527c"}, + {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f009c69bc8c53db5dfab72ac760895dc1f2bc1b62ab7408b253c8d1ec52459fc"}, + {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6740a3e8d43a32629bb9b009017ea5b9e713b7210ba48ac8d4cb6d99d86c8ee8"}, + {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32b922e13d4c0080d03e7b62991ad7f5007d9cd74e239c4b16bc85ae8b70252d"}, + {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe00a9057d100e69b4ae4a094203a708d65b0f345ed546fdef86498bf5390982"}, + {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fe9b04b6fa685bd39237d45fad89ba19e9163a1ccaa16611a812e682913496"}, + {file = "rpds_py-0.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa7ac11e294304e615b43f8c441fee5d40094275ed7311f3420d805fde9b07b4"}, + {file = "rpds_py-0.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aa97af1558a9bef4025f8f5d8c60d712e0a3b13a2fe875511defc6ee77a1ab7"}, + {file = "rpds_py-0.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:483b29f6f7ffa6af845107d4efe2e3fa8fb2693de8657bc1849f674296ff6a5a"}, + {file = "rpds_py-0.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37fe0f12aebb6a0e3e17bb4cd356b1286d2d18d2e93b2d39fe647138458b4bcb"}, + {file = "rpds_py-0.20.1-cp313-none-win32.whl", hash = "sha256:a624cc00ef2158e04188df5e3016385b9353638139a06fb77057b3498f794782"}, + {file = "rpds_py-0.20.1-cp313-none-win_amd64.whl", hash = "sha256:b71b8666eeea69d6363248822078c075bac6ed135faa9216aa85f295ff009b1e"}, + {file = "rpds_py-0.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5b48e790e0355865197ad0aca8cde3d8ede347831e1959e158369eb3493d2191"}, + {file = "rpds_py-0.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3e310838a5801795207c66c73ea903deda321e6146d6f282e85fa7e3e4854804"}, + {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2249280b870e6a42c0d972339e9cc22ee98730a99cd7f2f727549af80dd5a963"}, + {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e79059d67bea28b53d255c1437b25391653263f0e69cd7dec170d778fdbca95e"}, + {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b431c777c9653e569986ecf69ff4a5dba281cded16043d348bf9ba505486f36"}, + {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da584ff96ec95e97925174eb8237e32f626e7a1a97888cdd27ee2f1f24dd0ad8"}, + {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a0629ec053fc013808a85178524e3cb63a61dbc35b22499870194a63578fb9"}, + {file = "rpds_py-0.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fbf15aff64a163db29a91ed0868af181d6f68ec1a3a7d5afcfe4501252840bad"}, + {file = "rpds_py-0.20.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:07924c1b938798797d60c6308fa8ad3b3f0201802f82e4a2c41bb3fafb44cc28"}, + {file = "rpds_py-0.20.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4a5a844f68776a7715ecb30843b453f07ac89bad393431efbf7accca3ef599c1"}, + {file = "rpds_py-0.20.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:518d2ca43c358929bf08f9079b617f1c2ca6e8848f83c1225c88caeac46e6cbc"}, + {file = "rpds_py-0.20.1-cp38-none-win32.whl", hash = "sha256:3aea7eed3e55119635a74bbeb80b35e776bafccb70d97e8ff838816c124539f1"}, + {file = "rpds_py-0.20.1-cp38-none-win_amd64.whl", hash = "sha256:7dca7081e9a0c3b6490a145593f6fe3173a94197f2cb9891183ef75e9d64c425"}, + {file = "rpds_py-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b41b6321805c472f66990c2849e152aff7bc359eb92f781e3f606609eac877ad"}, + {file = "rpds_py-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a90c373ea2975519b58dece25853dbcb9779b05cc46b4819cb1917e3b3215b6"}, + {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16d4477bcb9fbbd7b5b0e4a5d9b493e42026c0bf1f06f723a9353f5153e75d30"}, + {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84b8382a90539910b53a6307f7c35697bc7e6ffb25d9c1d4e998a13e842a5e83"}, + {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4888e117dd41b9d34194d9e31631af70d3d526efc363085e3089ab1a62c32ed1"}, + {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5265505b3d61a0f56618c9b941dc54dc334dc6e660f1592d112cd103d914a6db"}, + {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e75ba609dba23f2c95b776efb9dd3f0b78a76a151e96f96cc5b6b1b0004de66f"}, + {file = "rpds_py-0.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1791ff70bc975b098fe6ecf04356a10e9e2bd7dc21fa7351c1742fdeb9b4966f"}, + {file = "rpds_py-0.20.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d126b52e4a473d40232ec2052a8b232270ed1f8c9571aaf33f73a14cc298c24f"}, + {file = "rpds_py-0.20.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c14937af98c4cc362a1d4374806204dd51b1e12dded1ae30645c298e5a5c4cb1"}, + {file = "rpds_py-0.20.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3d089d0b88996df627693639d123c8158cff41c0651f646cd8fd292c7da90eaf"}, + {file = "rpds_py-0.20.1-cp39-none-win32.whl", hash = "sha256:653647b8838cf83b2e7e6a0364f49af96deec64d2a6578324db58380cff82aca"}, + {file = "rpds_py-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:fa41a64ac5b08b292906e248549ab48b69c5428f3987b09689ab2441f267d04d"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7a07ced2b22f0cf0b55a6a510078174c31b6d8544f3bc00c2bcee52b3d613f74"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:68cb0a499f2c4a088fd2f521453e22ed3527154136a855c62e148b7883b99f9a"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa3060d885657abc549b2a0f8e1b79699290e5d83845141717c6c90c2df38311"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95f3b65d2392e1c5cec27cff08fdc0080270d5a1a4b2ea1d51d5f4a2620ff08d"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2cc3712a4b0b76a1d45a9302dd2f53ff339614b1c29603a911318f2357b04dd2"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d4eea0761e37485c9b81400437adb11c40e13ef513375bbd6973e34100aeb06"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f5179583d7a6cdb981151dd349786cbc318bab54963a192692d945dd3f6435d"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fbb0ffc754490aff6dabbf28064be47f0f9ca0b9755976f945214965b3ace7e"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a94e52537a0e0a85429eda9e49f272ada715506d3b2431f64b8a3e34eb5f3e75"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:92b68b79c0da2a980b1c4197e56ac3dd0c8a149b4603747c4378914a68706979"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:93da1d3db08a827eda74356f9f58884adb254e59b6664f64cc04cdff2cc19b0d"}, + {file = "rpds_py-0.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:754bbed1a4ca48479e9d4182a561d001bbf81543876cdded6f695ec3d465846b"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ca449520e7484534a2a44faf629362cae62b660601432d04c482283c47eaebab"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9c4cb04a16b0f199a8c9bf807269b2f63b7b5b11425e4a6bd44bd6961d28282c"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63804105143c7e24cee7db89e37cb3f3941f8e80c4379a0b355c52a52b6780"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:55cd1fa4ecfa6d9f14fbd97ac24803e6f73e897c738f771a9fe038f2f11ff07c"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f8f741b6292c86059ed175d80eefa80997125b7c478fb8769fd9ac8943a16c0"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fc212779bf8411667234b3cdd34d53de6c2b8b8b958e1e12cb473a5f367c338"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ad56edabcdb428c2e33bbf24f255fe2b43253b7d13a2cdbf05de955217313e6"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a3a1e9ee9728b2c1734f65d6a1d376c6f2f6fdcc13bb007a08cc4b1ff576dc5"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e13de156137b7095442b288e72f33503a469aa1980ed856b43c353ac86390519"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:07f59760ef99f31422c49038964b31c4dfcfeb5d2384ebfc71058a7c9adae2d2"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:59240685e7da61fb78f65a9f07f8108e36a83317c53f7b276b4175dc44151684"}, + {file = "rpds_py-0.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:83cba698cfb3c2c5a7c3c6bac12fe6c6a51aae69513726be6411076185a8b24a"}, + {file = "rpds_py-0.20.1.tar.gz", hash = "sha256:e1791c4aabd117653530dccd24108fa03cc6baf21f58b950d0a73c3b3b29a350"}, ] [[package]] @@ -6812,18 +6801,15 @@ files = [ [[package]] name = "simpleeval" -version = "1.0.1" +version = "1.0.2" description = "A simple, safe single expression evaluator library." optional = false python-versions = ">=3.9" files = [ - {file = "simpleeval-1.0.1-py3-none-any.whl", hash = "sha256:1928b4a5528099012e73de532d3293a5c7038c103111dda69da679ba3bee4352"}, - {file = "simpleeval-1.0.1.tar.gz", hash = "sha256:3b95f8b04d35cf1f793749fc3034d332dafb20e71fadf56631b4642fcc84a26a"}, + {file = "simpleeval-1.0.2-py3-none-any.whl", hash = "sha256:d8374ae76b682fc5a0c4eb7dbd4c509313f2d67cacf201f33aca2e0139354c53"}, + {file = "simpleeval-1.0.2.tar.gz", hash = "sha256:ebf6e4a952ef4fc333250ba1b87f62a6cdc949db1a9deb2d40f4e1eae9e531cc"}, ] -[package.dependencies] -pip = ">=24.2" - [[package]] name = "six" version = "1.16.0" @@ -7864,7 +7850,7 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "trulens-apps-langchain" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9,<3.13" @@ -7883,7 +7869,7 @@ url = "src/apps/langchain" [[package]] name = "trulens-apps-llamaindex" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -7902,7 +7888,7 @@ url = "src/apps/llamaindex" [[package]] name = "trulens-apps-nemo" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = ">=3.9,<3.12" @@ -7921,7 +7907,7 @@ url = "src/apps/nemo" [[package]] name = "trulens-benchmark" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -7937,7 +7923,7 @@ url = "src/benchmark" [[package]] name = "trulens-connectors-snowflake" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = ">=3.9,<3.12" @@ -7955,7 +7941,7 @@ url = "src/connectors/snowflake" [[package]] name = "trulens-core" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -7981,7 +7967,7 @@ url = "src/core" [[package]] name = "trulens-dashboard" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9,!=3.9.7" @@ -8008,7 +7994,7 @@ url = "src/dashboard" [[package]] name = "trulens-eval" -version = "1.2.1" +version = "1.2.2" description = "Backwards-compatibility package for API of trulens_eval<1.0.0 using API of trulens-*>=1.0.0." optional = false python-versions = "^3.9,!=3.9.7" @@ -8024,7 +8010,7 @@ url = "src/trulens_eval" [[package]] name = "trulens-feedback" -version = "1.2.1" +version = "1.2.2" description = "A TruLens extension package implementing feedback functions for LLM App evaluation." optional = false python-versions = "^3.9" @@ -8045,7 +8031,7 @@ url = "src/feedback" [[package]] name = "trulens-providers-bedrock" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8064,7 +8050,7 @@ url = "src/providers/bedrock" [[package]] name = "trulens-providers-cortex" -version = "1.2.1" +version = "1.2.2" description = "A TruLens extension package adding Snowflake Cortex support for LLM App evaluation." optional = false python-versions = ">=3.9,<3.12" @@ -8083,7 +8069,7 @@ url = "src/providers/cortex" [[package]] name = "trulens-providers-huggingface" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8105,7 +8091,7 @@ url = "src/providers/huggingface" [[package]] name = "trulens-providers-langchain" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8123,7 +8109,7 @@ url = "src/providers/langchain" [[package]] name = "trulens-providers-litellm" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8141,7 +8127,7 @@ url = "src/providers/litellm" [[package]] name = "trulens-providers-openai" -version = "1.2.1" +version = "1.2.2" description = "Library to systematically track and evaluate LLM based applications." optional = false python-versions = "^3.9" @@ -8557,93 +8543,93 @@ files = [ [[package]] name = "yarl" -version = "1.17.0" +version = "1.17.1" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d8715edfe12eee6f27f32a3655f38d6c7410deb482158c0b7d4b7fad5d07628"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1803bf2a7a782e02db746d8bd18f2384801bc1d108723840b25e065b116ad726"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e66589110e20c2951221a938fa200c7aa134a8bdf4e4dc97e6b21539ff026d4"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7069d411cfccf868e812497e0ec4acb7c7bf8d684e93caa6c872f1e6f5d1664d"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbf70ba16118db3e4b0da69dcde9d4d4095d383c32a15530564c283fa38a7c52"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0bc53cc349675b32ead83339a8de79eaf13b88f2669c09d4962322bb0f064cbc"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6aa18a402d1c80193ce97c8729871f17fd3e822037fbd7d9b719864018df746"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d89c5bc701861cfab357aa0cd039bc905fe919997b8c312b4b0c358619c38d4d"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b728bdf38ca58f2da1d583e4af4ba7d4cd1a58b31a363a3137a8159395e7ecc7"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:5542e57dc15d5473da5a39fbde14684b0cc4301412ee53cbab677925e8497c11"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e564b57e5009fb150cb513804d7e9e9912fee2e48835638f4f47977f88b4a39c"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:eb3c4cff524b4c1c1dba3a6da905edb1dfd2baf6f55f18a58914bbb2d26b59e1"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:05e13f389038842da930d439fbed63bdce3f7644902714cb68cf527c971af804"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:153c38ee2b4abba136385af4467459c62d50f2a3f4bde38c7b99d43a20c143ef"}, - {file = "yarl-1.17.0-cp310-cp310-win32.whl", hash = "sha256:4065b4259d1ae6f70fd9708ffd61e1c9c27516f5b4fae273c41028afcbe3a094"}, - {file = "yarl-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:abf366391a02a8335c5c26163b5fe6f514cc1d79e74d8bf3ffab13572282368e"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19a4fe0279626c6295c5b0c8c2bb7228319d2e985883621a6e87b344062d8135"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cadd0113f4db3c6b56868d6a19ca6286f5ccfa7bc08c27982cf92e5ed31b489a"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60d6693eef43215b1ccfb1df3f6eae8db30a9ff1e7989fb6b2a6f0b468930ee8"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb8bf3843e1fa8cf3fe77813c512818e57368afab7ebe9ef02446fe1a10b492"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2a5b35fd1d8d90443e061d0c8669ac7600eec5c14c4a51f619e9e105b136715"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5bf17b32f392df20ab5c3a69d37b26d10efaa018b4f4e5643c7520d8eee7ac7"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f51b529b958cd06e78158ff297a8bf57b4021243c179ee03695b5dbf9cb6e1"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fcaa06bf788e19f913d315d9c99a69e196a40277dc2c23741a1d08c93f4d430"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:32f3ee19ff0f18a7a522d44e869e1ebc8218ad3ae4ebb7020445f59b4bbe5897"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a4fb69a81ae2ec2b609574ae35420cf5647d227e4d0475c16aa861dd24e840b0"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7bacc8b77670322132a1b2522c50a1f62991e2f95591977455fd9a398b4e678d"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:437bf6eb47a2d20baaf7f6739895cb049e56896a5ffdea61a4b25da781966e8b"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30534a03c87484092080e3b6e789140bd277e40f453358900ad1f0f2e61fc8ec"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b30df4ff98703649915144be6f0df3b16fd4870ac38a09c56d5d9e54ff2d5f96"}, - {file = "yarl-1.17.0-cp311-cp311-win32.whl", hash = "sha256:263b487246858e874ab53e148e2a9a0de8465341b607678106829a81d81418c6"}, - {file = "yarl-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:07055a9e8b647a362e7d4810fe99d8f98421575e7d2eede32e008c89a65a17bd"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84095ab25ba69a8fa3fb4936e14df631b8a71193fe18bd38be7ecbe34d0f5512"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02608fb3f6df87039212fc746017455ccc2a5fc96555ee247c45d1e9f21f1d7b"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13468d291fe8c12162b7cf2cdb406fe85881c53c9e03053ecb8c5d3523822cd9"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8da3f8f368fb7e2f052fded06d5672260c50b5472c956a5f1bd7bf474ae504ab"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec0507ab6523980bed050137007c76883d941b519aca0e26d4c1ec1f297dd646"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08fc76df7fd8360e9ff30e6ccc3ee85b8dbd6ed5d3a295e6ec62bcae7601b932"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d522f390686acb6bab2b917dd9ca06740c5080cd2eaa5aef8827b97e967319d"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:147c527a80bb45b3dcd6e63401af8ac574125d8d120e6afe9901049286ff64ef"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:24cf43bcd17a0a1f72284e47774f9c60e0bf0d2484d5851f4ddf24ded49f33c6"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c28a44b9e0fba49c3857360e7ad1473fc18bc7f6659ca08ed4f4f2b9a52c75fa"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:350cacb2d589bc07d230eb995d88fcc646caad50a71ed2d86df533a465a4e6e1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fd1ab1373274dea1c6448aee420d7b38af163b5c4732057cd7ee9f5454efc8b1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4934e0f96dadc567edc76d9c08181633c89c908ab5a3b8f698560124167d9488"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d0a278170d75c88e435a1ce76557af6758bfebc338435b2eba959df2552163e"}, - {file = "yarl-1.17.0-cp312-cp312-win32.whl", hash = "sha256:61584f33196575a08785bb56db6b453682c88f009cd9c6f338a10f6737ce419f"}, - {file = "yarl-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:9987a439ad33a7712bd5bbd073f09ad10d38640425fa498ecc99d8aa064f8fc4"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8deda7b8eb15a52db94c2014acdc7bdd14cb59ec4b82ac65d2ad16dc234a109e"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56294218b348dcbd3d7fce0ffd79dd0b6c356cb2a813a1181af730b7c40de9e7"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1fab91292f51c884b290ebec0b309a64a5318860ccda0c4940e740425a67b6b7"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf93fa61ff4d9c7d40482ce1a2c9916ca435e34a1b8451e17f295781ccc034f"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:261be774a0d71908c8830c33bacc89eef15c198433a8cc73767c10eeeb35a7d0"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deec9693b67f6af856a733b8a3e465553ef09e5e8ead792f52c25b699b8f9e6e"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c804b07622ba50a765ca7fb8145512836ab65956de01307541def869e4a456c9"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d013a7c9574e98c14831a8f22d27277688ec3b2741d0188ac01a910b009987a"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e2cfcba719bd494c7413dcf0caafb51772dec168c7c946e094f710d6aa70494e"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c068aba9fc5b94dfae8ea1cedcbf3041cd4c64644021362ffb750f79837e881f"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3616df510ffac0df3c9fa851a40b76087c6c89cbcea2de33a835fc80f9faac24"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:755d6176b442fba9928a4df787591a6a3d62d4969f05c406cad83d296c5d4e05"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c18f6e708d1cf9ff5b1af026e697ac73bea9cb70ee26a2b045b112548579bed2"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5b937c216b6dee8b858c6afea958de03c5ff28406257d22b55c24962a2baf6fd"}, - {file = "yarl-1.17.0-cp313-cp313-win32.whl", hash = "sha256:d0131b14cb545c1a7bd98f4565a3e9bdf25a1bd65c83fc156ee5d8a8499ec4a3"}, - {file = "yarl-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:01c96efa4313c01329e88b7e9e9e1b2fc671580270ddefdd41129fa8d0db7696"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d44f67e193f0a7acdf552ecb4d1956a3a276c68e7952471add9f93093d1c30d"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16ea0aa5f890cdcb7ae700dffa0397ed6c280840f637cd07bffcbe4b8d68b985"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf5469dc7dcfa65edf5cc3a6add9f84c5529c6b556729b098e81a09a92e60e51"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e662bf2f6e90b73cf2095f844e2bc1fda39826472a2aa1959258c3f2a8500a2f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8260e88f1446904ba20b558fa8ce5d0ab9102747238e82343e46d056d7304d7e"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dc16477a4a2c71e64c5d3d15d7ae3d3a6bb1e8b955288a9f73c60d2a391282f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46027e326cecd55e5950184ec9d86c803f4f6fe4ba6af9944a0e537d643cdbe0"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc95e46c92a2b6f22e70afe07e34dbc03a4acd07d820204a6938798b16f4014f"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:16ca76c7ac9515320cd09d6cc083d8d13d1803f6ebe212b06ea2505fd66ecff8"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eb1a5b97388f2613f9305d78a3473cdf8d80c7034e554d8199d96dcf80c62ac4"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:41fd5498975418cdc34944060b8fbeec0d48b2741068077222564bea68daf5a6"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:146ca582ed04a5664ad04b0e0603934281eaab5c0115a5a46cce0b3c061a56a1"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:6abb8c06107dbec97481b2392dafc41aac091a5d162edf6ed7d624fe7da0587a"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d14be4613dd4f96c25feb4bd8c0d8ce0f529ab0ae555a17df5789e69d8ec0c5"}, - {file = "yarl-1.17.0-cp39-cp39-win32.whl", hash = "sha256:174d6a6cad1068f7850702aad0c7b1bca03bcac199ca6026f84531335dfc2646"}, - {file = "yarl-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:6af417ca2c7349b101d3fd557ad96b4cd439fdb6ab0d288e3f64a068eea394d0"}, - {file = "yarl-1.17.0-py3-none-any.whl", hash = "sha256:62dd42bb0e49423f4dd58836a04fcf09c80237836796025211bbe913f1524993"}, - {file = "yarl-1.17.0.tar.gz", hash = "sha256:d3f13583f378930377e02002b4085a3d025b00402d5a80911726d43a67911cd9"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da"}, + {file = "yarl-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3"}, + {file = "yarl-1.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f"}, + {file = "yarl-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931"}, + {file = "yarl-1.17.1-cp310-cp310-win32.whl", hash = "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b"}, + {file = "yarl-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988"}, + {file = "yarl-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d"}, + {file = "yarl-1.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4"}, + {file = "yarl-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4"}, + {file = "yarl-1.17.1-cp311-cp311-win32.whl", hash = "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7"}, + {file = "yarl-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d"}, + {file = "yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147"}, + {file = "yarl-1.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c"}, + {file = "yarl-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199"}, + {file = "yarl-1.17.1-cp312-cp312-win32.whl", hash = "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96"}, + {file = "yarl-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374"}, + {file = "yarl-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e"}, + {file = "yarl-1.17.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299"}, + {file = "yarl-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258"}, + {file = "yarl-1.17.1-cp313-cp313-win32.whl", hash = "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2"}, + {file = "yarl-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159"}, + {file = "yarl-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934"}, + {file = "yarl-1.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5"}, + {file = "yarl-1.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f"}, + {file = "yarl-1.17.1-cp39-cp39-win32.whl", hash = "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473"}, + {file = "yarl-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138"}, + {file = "yarl-1.17.1-py3-none-any.whl", hash = "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06"}, + {file = "yarl-1.17.1.tar.gz", hash = "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47"}, ] [package.dependencies]