From 1ae5a9c7a3bb354b3f2bb23895d9ddde6a0c7031 Mon Sep 17 00:00:00 2001 From: olgavrou Date: Fri, 18 Aug 2023 05:45:21 -0400 Subject: [PATCH 1/6] fix lock, imports, deps, test w deps, typo, formatting --- .../langchain/chains/rl_chain/base.py | 31 +- .../langchain/chains/rl_chain/metrics.py | 5 +- .../chains/rl_chain/model_repository.py | 17 +- .../chains/rl_chain/pick_best_chain.py | 22 +- libs/langchain/poetry.lock | 500 ++---------------- libs/langchain/pyproject.toml | 1 + .../rl_chain/test_pick_best_chain_call.py | 28 +- .../rl_chain/test_pick_best_text_embedder.py | 29 +- .../rl_chain/test_rl_chain_base_embedder.py | 25 +- 9 files changed, 153 insertions(+), 505 deletions(-) diff --git a/libs/langchain/langchain/chains/rl_chain/base.py b/libs/langchain/langchain/chains/rl_chain/base.py index 4b6ff1490ac..2d0a1036793 100644 --- a/libs/langchain/langchain/chains/rl_chain/base.py +++ b/libs/langchain/langchain/chains/rl_chain/base.py @@ -2,25 +2,22 @@ from __future__ import annotations import logging import os -from typing import Any, Dict, List, Optional, Tuple, Union, Sequence from abc import ABC, abstractmethod - -import vowpal_wabbit_next as vw -from langchain.chains.rl_chain.vw_logger import VwLogger -from langchain.chains.rl_chain.model_repository import ModelRepository -from langchain.chains.rl_chain.metrics import MetricsTracker -from langchain.prompts import BasePromptTemplate - -from langchain.pydantic_v1 import Extra, BaseModel, root_validator +from typing import Any, Dict, List, Optional, Sequence, Tuple, Union from langchain.callbacks.manager import CallbackManagerForChainRun from langchain.chains.base import Chain from langchain.chains.llm import LLMChain +from langchain.chains.rl_chain.metrics import MetricsTracker +from langchain.chains.rl_chain.model_repository import ModelRepository +from langchain.chains.rl_chain.vw_logger import VwLogger from langchain.prompts import ( + BasePromptTemplate, ChatPromptTemplate, - SystemMessagePromptTemplate, HumanMessagePromptTemplate, + SystemMessagePromptTemplate, ) +from langchain.pydantic_v1 import BaseModel, Extra, root_validator logger = logging.getLogger(__name__) @@ -87,7 +84,9 @@ def EmbedAndKeep(anything): # helper functions -def parse_lines(parser: vw.TextFormatParser, input_str: str) -> List[vw.Example]: +def parse_lines(parser: "vw.TextFormatParser", input_str: str) -> List["vw.Example"]: + import vowpal_wabbit_next as vw + return [parser.parse_line(line) for line in input_str.split("\n")] @@ -100,7 +99,8 @@ def get_based_on_and_to_select_from(inputs: Dict[str, Any]): if not to_select_from: raise ValueError( - "No variables using 'ToSelectFrom' found in the inputs. Please include at least one variable containing a list to select from." + "No variables using 'ToSelectFrom' found in the inputs. \ + Please include at least one variable containing a list to select from." ) based_on = { @@ -173,14 +173,17 @@ class VwPolicy(Policy): self.vw_logger = vw_logger def predict(self, event: Event) -> Any: + import vowpal_wabbit_next as vw + text_parser = vw.TextFormatParser(self.workspace) return self.workspace.predict_one( parse_lines(text_parser, self.feature_embedder.format(event)) ) def learn(self, event: Event): - vw_ex = self.feature_embedder.format(event) + import vowpal_wabbit_next as vw + vw_ex = self.feature_embedder.format(event) text_parser = vw.TextFormatParser(self.workspace) multi_ex = parse_lines(text_parser, vw_ex) self.workspace.learn_one(multi_ex) @@ -216,7 +219,7 @@ class AutoSelectionScorer(SelectionScorer, BaseModel): @staticmethod def get_default_system_prompt() -> SystemMessagePromptTemplate: return SystemMessagePromptTemplate.from_template( - "PLEASE RESPOND ONLY WITH A SIGNLE FLOAT AND NO OTHER TEXT EXPLANATION\n You are a strict judge that is called on to rank a response based on given criteria.\ + "PLEASE RESPOND ONLY WITH A SINGLE FLOAT AND NO OTHER TEXT EXPLANATION\n You are a strict judge that is called on to rank a response based on given criteria.\ You must respond with your ranking by providing a single float within the range [0, 1], 0 being very bad response and 1 being very good response." ) diff --git a/libs/langchain/langchain/chains/rl_chain/metrics.py b/libs/langchain/langchain/chains/rl_chain/metrics.py index eefc6bc4ded..973b778911c 100644 --- a/libs/langchain/langchain/chains/rl_chain/metrics.py +++ b/libs/langchain/langchain/chains/rl_chain/metrics.py @@ -1,4 +1,3 @@ -import pandas as pd from typing import Optional @@ -23,5 +22,7 @@ class MetricsTracker: if self._step > 0 and self._i % self._step == 0: self._history.append({"step": self._i, "score": self.score}) - def to_pandas(self) -> pd.DataFrame: + def to_pandas(self) -> "pd.DataFrame": + import pandas as pd + return pd.DataFrame(self._history) diff --git a/libs/langchain/langchain/chains/rl_chain/model_repository.py b/libs/langchain/langchain/chains/rl_chain/model_repository.py index 3f3f4c1063d..992fca45186 100644 --- a/libs/langchain/langchain/chains/rl_chain/model_repository.py +++ b/libs/langchain/langchain/chains/rl_chain/model_repository.py @@ -1,11 +1,10 @@ -from pathlib import Path -import shutil import datetime -import vowpal_wabbit_next as vw -from typing import Union, Sequence -import os import glob import logging +import os +import shutil +from pathlib import Path +from typing import Sequence, Union logger = logging.getLogger(__name__) @@ -35,14 +34,18 @@ class ModelRepository: def has_history(self) -> bool: return len(glob.glob(str(self.folder / "model-????????-??????.vw"))) > 0 - def save(self, workspace: vw.Workspace) -> None: + def save(self, workspace: "vw.Workspace") -> None: + import vowpal_wabbit_next as vw + with open(self.model_path, "wb") as f: logger.info(f"storing rl_chain model in: {self.model_path}") f.write(workspace.serialize()) if self.with_history: # write history shutil.copyfile(self.model_path, self.folder / f"model-{self.get_tag()}.vw") - def load(self, commandline: Sequence[str]) -> vw.Workspace: + def load(self, commandline: Sequence[str]) -> "vw.Workspace": + import vowpal_wabbit_next as vw + model_data = None if self.model_path.exists(): with open(self.model_path, "rb") as f: diff --git a/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py b/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py index 28c0f509f02..3df1d7f9d9f 100644 --- a/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py +++ b/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py @@ -1,19 +1,15 @@ from __future__ import annotations -import langchain.chains.rl_chain.base as base +import logging +from typing import Any, Dict, List, Optional, Tuple +import langchain.chains.rl_chain.base as base +from langchain.base_language import BaseLanguageModel from langchain.callbacks.manager import CallbackManagerForChainRun from langchain.chains.base import Chain -from typing import Any, Dict, List, Optional, Tuple, Union - -import numpy as np -from langchain.base_language import BaseLanguageModel from langchain.chains.llm import LLMChain -from sentence_transformers import SentenceTransformer from langchain.prompts import BasePromptTemplate -import logging - logger = logging.getLogger(__name__) # sentinel object used to distinguish between user didn't supply anything or user explicitly supplied None @@ -23,7 +19,7 @@ SENTINEL = object() class PickBestFeatureEmbedder(base.Embedder): """ Contextual Bandit Text Embedder class that embeds the based_on and to_select_from into a format that can be used by VW - + Attributes: model name (Any, optional): The type of embeddings to be used for feature representation. Defaults to BERT SentenceTransformer. """ @@ -32,6 +28,8 @@ class PickBestFeatureEmbedder(base.Embedder): super().__init__(*args, **kwargs) if model is None: + from sentence_transformers import SentenceTransformer + model = SentenceTransformer("bert-base-nli-mean-tokens") self.model = model @@ -67,7 +65,7 @@ class PickBestFeatureEmbedder(base.Embedder): ) example_string = "" - example_string += f"shared " + example_string += "shared " for context_item in context_emb: for ns, based_on in context_item.items(): example_string += f"|{ns} {' '.join(based_on) if isinstance(based_on, list) else based_on} " @@ -190,6 +188,8 @@ class PickBest(base.RLChain): def _call_after_predict_before_llm( self, inputs: Dict[str, Any], event: Event, prediction: List[Tuple[int, float]] ) -> Tuple[Dict[str, Any], PickBest.Event]: + import numpy as np + prob_sum = sum(prob for _, prob in prediction) probabilities = [prob / prob_sum for _, prob in prediction] ## sample from the pmf @@ -237,7 +237,7 @@ class PickBest(base.RLChain): Attributes: inputs: (Dict, required) The inputs to the chain. The inputs must contain a input variables that are wrapped in BasedOn and ToSelectFrom. BasedOn is the based_on that will be used for selecting an ToSelectFrom action that will be passed to the LLM prompt. run_manager: (CallbackManagerForChainRun, optional) The callback manager to use for this run. If not provided, a default callback manager is used. - + Returns: A dictionary containing: - `response`: The response generated by the LLM (Language Model). diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index a0a76d09799..75ae888efdb 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "absl-py" version = "1.4.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -16,7 +15,6 @@ files = [ name = "aioboto3" version = "11.2.0" description = "Async boto3 wrapper" -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -35,7 +33,6 @@ s3cse = ["cryptography (>=2.3.1)"] name = "aiobotocore" version = "2.5.0" description = "Async client for aws services using botocore and aiohttp" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -58,7 +55,6 @@ boto3 = ["boto3 (>=1.26.76,<1.26.77)"] name = "aiodns" version = "3.0.0" description = "Simple DNS resolver for asyncio" -category = "main" optional = true python-versions = "*" files = [ @@ -73,7 +69,6 @@ pycares = ">=4.0.0" name = "aiofiles" version = "23.1.0" description = "File support for asyncio." -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -85,7 +80,6 @@ files = [ name = "aiohttp" version = "3.8.4" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -194,7 +188,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiohttp-retry" version = "2.8.3" description = "Simple retry client for aiohttp" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -209,7 +202,6 @@ aiohttp = "*" name = "aioitertools" version = "0.11.0" description = "itertools and builtins for AsyncIO and mixed iterables" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -224,7 +216,6 @@ typing_extensions = {version = ">=4.0", markers = "python_version < \"3.10\""} name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -239,7 +230,6 @@ frozenlist = ">=1.1.0" name = "aleph-alpha-client" version = "2.17.0" description = "python client to interact with Aleph Alpha api endpoints" -category = "main" optional = true python-versions = "*" files = [ @@ -267,7 +257,6 @@ types = ["mypy", "types-Pillow", "types-requests"] name = "altair" version = "4.2.2" description = "Altair: A declarative statistical visualization library for Python." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -290,7 +279,6 @@ dev = ["black", "docutils", "flake8", "ipython", "m2r", "mistune (<2.0.0)", "pyt name = "amadeus" version = "8.1.0" description = "Python module for the Amadeus travel APIs" -category = "main" optional = true python-versions = ">=3.4.8" files = [ @@ -301,7 +289,6 @@ files = [ name = "amazon-textract-caller" version = "0.0.29" description = "Amazon Textract Caller tools" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -321,7 +308,6 @@ testing = ["amazon-textract-response-parser", "pytest"] name = "amazon-textract-response-parser" version = "1.0.0" description = "Easily parse JSON returned by Amazon Textract." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -337,7 +323,6 @@ marshmallow = ">=3.14,<4" name = "anyio" version = "3.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -359,7 +344,6 @@ trio = ["trio (<0.22)"] name = "appdirs" version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = true python-versions = "*" files = [ @@ -371,7 +355,6 @@ files = [ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "dev" optional = false python-versions = "*" files = [ @@ -383,7 +366,6 @@ files = [ name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -403,7 +385,6 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -441,7 +422,6 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -456,7 +436,6 @@ python-dateutil = ">=2.7.0" name = "arxiv" version = "1.4.7" description = "Python wrapper for the arXiv API: http://arxiv.org/help/api/" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -471,7 +450,6 @@ feedparser = "*" name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" -category = "dev" optional = false python-versions = "*" files = [ @@ -489,7 +467,6 @@ test = ["astroid", "pytest"] name = "astunparse" version = "1.6.3" description = "An AST unparser for Python" -category = "main" optional = true python-versions = "*" files = [ @@ -505,7 +482,6 @@ wheel = ">=0.23.0,<1.0" name = "async-timeout" version = "4.0.2" description = "Timeout context manager for asyncio programs" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -517,7 +493,6 @@ files = [ name = "atlassian-python-api" version = "3.39.0" description = "Python Atlassian REST API Wrapper" -category = "main" optional = true python-versions = "*" files = [ @@ -538,7 +513,6 @@ kerberos = ["requests-kerberos"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -557,7 +531,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "audioread" version = "3.0.0" description = "multi-library, cross-platform audio decoding" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -568,7 +541,6 @@ files = [ name = "authlib" version = "1.2.0" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." -category = "main" optional = true python-versions = "*" files = [ @@ -583,7 +555,6 @@ cryptography = ">=3.2" name = "awadb" version = "0.3.9" description = "AI Native database for embedding vectors" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -611,7 +582,6 @@ test = ["pytest (>=6.0)"] name = "azure-ai-formrecognizer" version = "3.2.1" description = "Microsoft Azure Form Recognizer Client Library for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -629,7 +599,6 @@ typing-extensions = ">=4.0.1" name = "azure-ai-vision" version = "0.11.1b1" description = "Microsoft Azure AI Vision SDK for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -641,7 +610,6 @@ files = [ name = "azure-cognitiveservices-speech" version = "1.29.0" description = "Microsoft Cognitive Services Speech SDK for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -657,7 +625,6 @@ files = [ name = "azure-common" version = "1.1.28" description = "Microsoft Azure Client Library for Python (Common)" -category = "main" optional = true python-versions = "*" files = [ @@ -669,7 +636,6 @@ files = [ name = "azure-core" version = "1.27.1" description = "Microsoft Azure Core Library for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -689,7 +655,6 @@ aio = ["aiohttp (>=3.0)"] name = "azure-cosmos" version = "4.4.0" description = "Microsoft Azure Cosmos Client Library for Python" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -704,7 +669,6 @@ azure-core = ">=1.23.0,<2.0.0" name = "azure-identity" version = "1.13.0" description = "Microsoft Azure Identity Library for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -723,7 +687,6 @@ six = ">=1.12.0" name = "azure-search-documents" version = "11.4.0b6" description = "Microsoft Azure Cognitive Search Client Library for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -740,7 +703,6 @@ isodate = ">=0.6.0" name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "dev" optional = false python-versions = "*" files = [ @@ -752,7 +714,6 @@ files = [ name = "backoff" version = "2.2.1" description = "Function decoration for backoff and retry" -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -764,7 +725,6 @@ files = [ name = "backports-zoneinfo" version = "0.2.1" description = "Backport of the standard library zoneinfo module" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -793,7 +753,6 @@ tzdata = ["tzdata"] name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -812,7 +771,6 @@ lxml = ["lxml"] name = "bibtexparser" version = "1.4.0" description = "Bibtex parser for python 3" -category = "main" optional = true python-versions = "*" files = [ @@ -826,7 +784,6 @@ pyparsing = ">=2.0.3" name = "black" version = "23.3.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -876,7 +833,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -895,7 +851,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "blinker" version = "1.6.2" description = "Fast, simple object-to-object and broadcast signaling" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -907,7 +862,6 @@ files = [ name = "boto3" version = "1.26.76" description = "The AWS SDK for Python" -category = "main" optional = true python-versions = ">= 3.7" files = [ @@ -927,7 +881,6 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] name = "botocore" version = "1.29.76" description = "Low-level, data-driven core of boto 3." -category = "main" optional = true python-versions = ">= 3.7" files = [ @@ -947,7 +900,6 @@ crt = ["awscrt (==0.16.9)"] name = "brotli" version = "1.0.9" description = "Python bindings for the Brotli compression library" -category = "main" optional = true python-versions = "*" files = [ @@ -1039,7 +991,6 @@ files = [ name = "brotlicffi" version = "1.0.9.2" description = "Python CFFI bindings to the Brotli library" -category = "main" optional = true python-versions = "*" files = [ @@ -1082,7 +1033,6 @@ cffi = ">=1.0.0" name = "build" version = "0.10.0" description = "A simple, correct Python build frontend" -category = "main" optional = true python-versions = ">= 3.7" files = [ @@ -1106,7 +1056,6 @@ virtualenv = ["virtualenv (>=20.0.35)"] name = "cachetools" version = "5.3.1" description = "Extensible memoizing collections and decorators" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1118,7 +1067,6 @@ files = [ name = "cassandra-driver" version = "3.28.0" description = "DataStax Driver for Apache Cassandra" -category = "main" optional = false python-versions = "*" files = [ @@ -1170,7 +1118,6 @@ graph = ["gremlinpython (==3.4.6)"] name = "cassio" version = "0.0.7" description = "A framework-agnostic Python library to seamlessly integrate Apache Cassandra with ML/LLM/genAI workloads." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1186,7 +1133,6 @@ numpy = ">=1.0" name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1198,7 +1144,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -1275,7 +1220,6 @@ pycparser = "*" name = "chardet" version = "5.1.0" description = "Universal encoding detector for Python 3" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1287,7 +1231,6 @@ files = [ name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -1372,7 +1315,6 @@ files = [ name = "clarifai" version = "9.1.0" description = "Clarifai Python Utilities" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1387,7 +1329,6 @@ clarifai-grpc = ">=9.1.0" name = "clarifai-grpc" version = "9.1.1" description = "Clarifai gRPC API Client" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1405,7 +1346,6 @@ requests = ">=2.25.1" name = "click" version = "8.1.3" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1420,7 +1360,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-plugins" version = "1.1.1" description = "An extension module for click to enable registering CLI commands via setuptools entry-points." -category = "main" optional = true python-versions = "*" files = [ @@ -1438,7 +1377,6 @@ dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] name = "clickhouse-connect" version = "0.5.25" description = "ClickHouse core driver, SqlAlchemy, and Superset libraries" -category = "main" optional = true python-versions = "~=3.7" files = [ @@ -1528,7 +1466,6 @@ superset = ["apache-superset (>=1.4.1)"] name = "cligj" version = "0.7.2" description = "Click params for commmand line interfaces to GeoJSON" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, <4" files = [ @@ -1546,7 +1483,6 @@ test = ["pytest-cov"] name = "codespell" version = "2.2.5" description = "Codespell" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1564,7 +1500,6 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "cohere" version = "4.18.0" description = "" -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -1584,7 +1519,6 @@ urllib3 = ">=1.26,<3" name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -1596,7 +1530,6 @@ files = [ name = "colored" version = "1.4.4" description = "Simple library for color and formatting to terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -1607,7 +1540,6 @@ files = [ name = "comm" version = "0.1.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1627,7 +1559,6 @@ typing = ["mypy (>=0.990)"] name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1703,7 +1634,6 @@ toml = ["tomli"] name = "cryptography" version = "41.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1745,7 +1675,6 @@ test-randomorder = ["pytest-randomly"] name = "cssselect" version = "1.2.0" description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1757,7 +1686,6 @@ files = [ name = "dataclasses-json" version = "0.5.8" description = "Easily serialize dataclasses to and from JSON" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1777,7 +1705,6 @@ dev = ["flake8", "hypothesis", "ipython", "mypy (>=0.710)", "portray", "pytest ( name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1805,7 +1732,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1817,7 +1743,6 @@ files = [ name = "deeplake" version = "3.6.11" description = "Activeloop Deep Lake" -category = "main" optional = true python-versions = "*" files = [ @@ -1855,7 +1780,6 @@ visualizer = ["IPython", "flask"] name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1867,7 +1791,6 @@ files = [ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1885,7 +1808,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "deprecation" version = "2.1.0" description = "A library to handle automated deprecations" -category = "main" optional = true python-versions = "*" files = [ @@ -1900,7 +1822,6 @@ packaging = "*" name = "dill" version = "0.3.6" description = "serialize all of python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1915,7 +1836,6 @@ graph = ["objgraph (>=1.7.2)"] name = "dnspython" version = "2.3.0" description = "DNS toolkit" -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -1936,7 +1856,6 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"] name = "docarray" version = "0.32.1" description = "The data structure for multimodal data" -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -1975,7 +1894,6 @@ web = ["fastapi (>=0.87.0)"] name = "docker" version = "6.1.3" description = "A Python library for the Docker Engine API." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1997,7 +1915,6 @@ ssh = ["paramiko (>=2.4.3)"] name = "docopt" version = "0.6.2" description = "Pythonic argument parser, that will make you smile" -category = "main" optional = true python-versions = "*" files = [ @@ -2008,7 +1925,6 @@ files = [ name = "duckdb" version = "0.8.1" description = "DuckDB embedded database" -category = "dev" optional = false python-versions = "*" files = [ @@ -2070,7 +1986,6 @@ files = [ name = "duckdb-engine" version = "0.7.3" description = "SQLAlchemy driver for duckdb" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2087,7 +2002,6 @@ sqlalchemy = ">=1.3.22" name = "duckduckgo-search" version = "3.8.3" description = "Search for words, documents, images, news, maps and text translation using the DuckDuckGo.com search engine." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2105,7 +2019,6 @@ lxml = ">=4.9.2" name = "elastic-transport" version = "8.4.0" description = "Transport classes and utilities shared among Python Elastic client libraries" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2124,7 +2037,6 @@ develop = ["aiohttp", "mock", "pytest", "pytest-asyncio", "pytest-cov", "pytest- name = "elasticsearch" version = "8.8.0" description = "Python client for Elasticsearch" -category = "main" optional = true python-versions = ">=3.6, <4" files = [ @@ -2143,7 +2055,6 @@ requests = ["requests (>=2.4.0,<3.0.0)"] name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2155,7 +2066,6 @@ files = [ name = "esprima" version = "4.0.1" description = "ECMAScript parsing infrastructure for multipurpose analysis in Python" -category = "main" optional = true python-versions = "*" files = [ @@ -2166,7 +2076,6 @@ files = [ name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2181,7 +2090,6 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = "*" files = [ @@ -2196,7 +2104,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "faiss-cpu" version = "1.7.4" description = "A library for efficient similarity search and clustering of dense vectors." -category = "main" optional = true python-versions = "*" files = [ @@ -2231,7 +2138,6 @@ files = [ name = "fastavro" version = "1.7.4" description = "Fast read/write of AVRO files" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2278,7 +2184,6 @@ zstandard = ["zstandard"] name = "fastjsonschema" version = "2.17.1" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ @@ -2293,7 +2198,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "feedfinder2" version = "0.0.4" description = "Find the feed URLs for a website." -category = "main" optional = true python-versions = "*" files = [ @@ -2309,7 +2213,6 @@ six = "*" name = "feedparser" version = "6.0.10" description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2324,7 +2227,6 @@ sgmllib3k = "*" name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2340,7 +2242,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "fiona" version = "1.9.4.post1" description = "Fiona reads and writes spatial data files" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2385,7 +2286,6 @@ test = ["Fiona[s3]", "pytest (>=7)", "pytest-cov", "pytz"] name = "flatbuffers" version = "23.5.26" description = "The FlatBuffers serialization format for Python" -category = "main" optional = true python-versions = "*" files = [ @@ -2397,7 +2297,6 @@ files = [ name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -2409,7 +2308,6 @@ files = [ name = "freezegun" version = "1.2.2" description = "Let your Python tests travel through time" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2424,7 +2322,6 @@ python-dateutil = ">=2.7" name = "frozenlist" version = "1.3.3" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2508,7 +2405,6 @@ files = [ name = "fsspec" version = "2023.6.0" description = "File-system specification" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2544,7 +2440,6 @@ tqdm = ["tqdm"] name = "future" version = "0.18.3" description = "Clean single-source support for Python 3 and 2" -category = "main" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2555,7 +2450,6 @@ files = [ name = "gast" version = "0.4.0" description = "Python AST that abstracts the underlying Python version" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2567,7 +2461,6 @@ files = [ name = "geojson" version = "2.5.0" description = "Python bindings and utilities for GeoJSON" -category = "main" optional = true python-versions = "*" files = [ @@ -2579,7 +2472,6 @@ files = [ name = "geomet" version = "0.2.1.post1" description = "GeoJSON <-> WKT/WKB conversion utilities" -category = "main" optional = false python-versions = ">2.6, !=3.3.*, <4" files = [ @@ -2595,7 +2487,6 @@ six = "*" name = "geopandas" version = "0.13.2" description = "Geographic pandas extensions" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2614,7 +2505,6 @@ shapely = ">=1.7.1" name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2629,7 +2519,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.32" description = "GitPython is a Python library used to interact with Git repositories" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2644,7 +2533,6 @@ gitdb = ">=4.0.1,<5" name = "google-api-core" version = "2.11.1" description = "Google API client core library" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2667,7 +2555,6 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] name = "google-api-python-client" version = "2.70.0" description = "Google API Client Library for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2676,7 +2563,7 @@ files = [ ] [package.dependencies] -google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev" google-auth = ">=1.19.0,<3.0.0dev" google-auth-httplib2 = ">=0.1.0" httplib2 = ">=0.15.0,<1dev" @@ -2686,7 +2573,6 @@ uritemplate = ">=3.0.1,<5" name = "google-auth" version = "2.20.0" description = "Google Authentication Library" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2712,7 +2598,6 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] name = "google-auth-httplib2" version = "0.1.0" description = "Google Authentication Library: httplib2 transport" -category = "main" optional = true python-versions = "*" files = [ @@ -2729,7 +2614,6 @@ six = "*" name = "google-auth-oauthlib" version = "0.4.6" description = "Google Authentication Library" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2748,7 +2632,6 @@ tool = ["click (>=6.0.0)"] name = "google-pasta" version = "0.2.0" description = "pasta is an AST-based Python refactoring library" -category = "main" optional = true python-versions = "*" files = [ @@ -2764,7 +2647,6 @@ six = "*" name = "google-search-results" version = "2.4.2" description = "Scrape and search localized results from Google, Bing, Baidu, Yahoo, Yandex, Ebay, Homedepot, youtube at scale using SerpApi.com" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -2778,7 +2660,6 @@ requests = "*" name = "googleapis-common-protos" version = "1.59.1" description = "Common protobufs used in Google APIs" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2796,7 +2677,6 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] name = "gptcache" version = "0.1.32" description = "GPTCache, a powerful caching library that can be used to speed up and lower the cost of chat applications that rely on the LLM service. GPTCache works as a memcache for AIGC applications, similar to how Redis works for traditional applications." -category = "main" optional = true python-versions = ">=3.8.1" files = [ @@ -2813,7 +2693,6 @@ requests = "*" name = "gql" version = "3.4.1" description = "GraphQL client for Python" -category = "main" optional = true python-versions = "*" files = [ @@ -2840,7 +2719,6 @@ websockets = ["websockets (>=10,<11)", "websockets (>=9,<10)"] name = "graphql-core" version = "3.2.3" description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." -category = "main" optional = true python-versions = ">=3.6,<4" files = [ @@ -2852,7 +2730,6 @@ files = [ name = "greenlet" version = "2.0.2" description = "Lightweight in-process concurrent programming" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -2926,7 +2803,6 @@ test = ["objgraph", "psutil"] name = "grpcio" version = "1.47.5" description = "HTTP/2-based RPC framework" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2988,7 +2864,6 @@ protobuf = ["grpcio-tools (>=1.47.5)"] name = "grpcio-tools" version = "1.47.5" description = "Protobuf code generator for gRPC" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3049,7 +2924,6 @@ setuptools = "*" name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3061,7 +2935,6 @@ files = [ name = "h2" version = "4.1.0" description = "HTTP/2 State-Machine based protocol implementation" -category = "main" optional = true python-versions = ">=3.6.1" files = [ @@ -3077,7 +2950,6 @@ hyperframe = ">=6.0,<7" name = "h5py" version = "3.8.0" description = "Read and write HDF5 files from Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3115,7 +2987,6 @@ numpy = ">=1.14.5" name = "hnswlib" version = "0.7.0" description = "hnswlib" -category = "main" optional = true python-versions = "*" files = [ @@ -3129,7 +3000,6 @@ numpy = "*" name = "hpack" version = "4.0.0" description = "Pure-Python HPACK header compression" -category = "main" optional = true python-versions = ">=3.6.1" files = [ @@ -3141,7 +3011,6 @@ files = [ name = "html2text" version = "2020.1.16" description = "Turn HTML into equivalent Markdown-structured text." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -3153,7 +3022,6 @@ files = [ name = "httpcore" version = "0.17.2" description = "A minimal low-level HTTP client." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3165,17 +3033,16 @@ files = [ anyio = ">=3.0,<5.0" certifi = "*" h11 = ">=0.13,<0.15" -sniffio = ">=1.0.0,<2.0.0" +sniffio = "==1.*" [package.extras] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "httplib2" version = "0.22.0" description = "A comprehensive HTTP client library." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3190,7 +3057,6 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0 name = "httpx" version = "0.24.1" description = "The next generation HTTP client." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3206,19 +3072,18 @@ h2 = {version = ">=3,<5", optional = true, markers = "extra == \"http2\""} httpcore = ">=0.15.0,<0.18.0" idna = "*" sniffio = "*" -socksio = {version = ">=1.0.0,<2.0.0", optional = true, markers = "extra == \"socks\""} +socksio = {version = "==1.*", optional = true, markers = "extra == \"socks\""} [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "huggingface-hub" version = "0.15.1" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -3250,7 +3115,6 @@ typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "t name = "humbug" version = "0.3.1" description = "Humbug: Do you build developer tools? Humbug helps you know your users." -category = "main" optional = true python-versions = "*" files = [ @@ -3270,7 +3134,6 @@ profile = ["GPUtil", "psutil", "types-psutil"] name = "hyperframe" version = "6.0.1" description = "HTTP/2 framing layer for Python" -category = "main" optional = true python-versions = ">=3.6.1" files = [ @@ -3282,7 +3145,6 @@ files = [ name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3294,7 +3156,6 @@ files = [ name = "importlib-metadata" version = "6.0.1" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3314,7 +3175,6 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3333,7 +3193,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3345,7 +3204,6 @@ files = [ name = "ipykernel" version = "6.23.2" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3359,7 +3217,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -3379,7 +3237,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" name = "ipython" version = "8.12.2" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3419,7 +3276,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "dev" optional = false python-versions = "*" files = [ @@ -3431,7 +3287,6 @@ files = [ name = "ipywidgets" version = "8.0.6" description = "Jupyter interactive widgets" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3453,7 +3308,6 @@ test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] name = "isodate" version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = true python-versions = "*" files = [ @@ -3468,7 +3322,6 @@ six = "*" name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3483,7 +3336,6 @@ arrow = ">=0.15.0" name = "jaraco-context" version = "4.3.0" description = "Context managers by jaraco" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3499,7 +3351,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3519,7 +3370,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jieba3k" version = "0.35.1" description = "Chinese Words Segementation Utilities" -category = "main" optional = true python-versions = "*" files = [ @@ -3530,7 +3380,6 @@ files = [ name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3548,7 +3397,6 @@ i18n = ["Babel (>=2.7)"] name = "jmespath" version = "1.0.1" description = "JSON Matching Expressions" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3560,7 +3408,6 @@ files = [ name = "joblib" version = "1.2.0" description = "Lightweight pipelining with Python functions" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3572,7 +3419,6 @@ files = [ name = "jq" version = "1.4.1" description = "jq is a lightweight and flexible JSON processor." -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -3637,7 +3483,6 @@ files = [ name = "jsonable" version = "0.3.1" description = "An abstract class that supports jsonserialization/deserialization." -category = "main" optional = true python-versions = "*" files = [ @@ -3649,7 +3494,6 @@ files = [ name = "jsonlines" version = "3.1.0" description = "Library with helpers for the jsonlines file format" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3664,18 +3508,17 @@ attrs = ">=19.2.0" name = "jsonpointer" version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] [[package]] name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3705,7 +3548,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jupyter" version = "1.0.0" description = "Jupyter metapackage. Install all the Jupyter components in one go." -category = "dev" optional = false python-versions = "*" files = [ @@ -3726,7 +3568,6 @@ qtconsole = "*" name = "jupyter-client" version = "7.4.9" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3751,7 +3592,6 @@ test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-com name = "jupyter-console" version = "6.6.3" description = "Jupyter terminal console" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3763,7 +3603,7 @@ files = [ ipykernel = ">=6.14" ipython = "*" jupyter-client = ">=7.0.0" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" prompt-toolkit = ">=3.0.30" pygments = "*" pyzmq = ">=17" @@ -3776,7 +3616,6 @@ test = ["flaky", "pexpect", "pytest"] name = "jupyter-core" version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3797,7 +3636,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3822,7 +3660,6 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-server" version = "2.6.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3835,7 +3672,7 @@ anyio = ">=3.1.0" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" jupyter-events = ">=0.6.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" @@ -3859,7 +3696,6 @@ test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", " name = "jupyter-server-terminals" version = "0.4.4" description = "A Jupyter Server Extension Providing Terminals." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3879,7 +3715,6 @@ test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3891,7 +3726,6 @@ files = [ name = "jupyterlab-widgets" version = "3.0.7" description = "Jupyter interactive widgets for JupyterLab" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3903,7 +3737,6 @@ files = [ name = "keras" version = "2.11.0" description = "Deep learning for humans." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3914,7 +3747,6 @@ files = [ name = "lancedb" version = "0.1.8" description = "lancedb" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3937,7 +3769,6 @@ tests = ["doctest", "pytest", "pytest-mock"] name = "langkit" version = "0.0.6" description = "A collection of text metric udfs for whylogs profiling and monitoring in WhyLabs" -category = "main" optional = true python-versions = ">=3.8,<4.0" files = [ @@ -3957,7 +3788,6 @@ all = ["datasets (>=2.12.0,<3.0.0)", "nltk (>=3.8.1,<4.0.0)", "openai (>=0.27.6, name = "langsmith" version = "0.0.22" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." -category = "main" optional = false python-versions = ">=3.8.1,<4.0" files = [ @@ -3973,7 +3803,6 @@ requests = ">=2,<3" name = "lark" version = "1.1.5" description = "a modern parsing library" -category = "main" optional = false python-versions = "*" files = [ @@ -3990,7 +3819,6 @@ regex = ["regex"] name = "lazy-loader" version = "0.3" description = "lazy_loader" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4006,7 +3834,6 @@ test = ["pytest (>=7.4)", "pytest-cov (>=4.1)"] name = "libclang" version = "16.0.0" description = "Clang Python Bindings, mirrored from the official LLVM repo: https://github.com/llvm/llvm-project/tree/main/clang/bindings/python, to make the installation process easier." -category = "main" optional = true python-versions = "*" files = [ @@ -4024,7 +3851,6 @@ files = [ name = "libdeeplake" version = "0.0.60" description = "C++ backend for Deep Lake" -category = "main" optional = true python-versions = "*" files = [ @@ -4057,7 +3883,6 @@ numpy = "*" name = "librosa" version = "0.10.0.post2" description = "Python module for audio and music processing" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4082,14 +3907,13 @@ typing-extensions = ">=4.1.1" [package.extras] display = ["matplotlib (>=3.3.0)"] -docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (>=0.51)", "numpydoc", "presets", "sphinx (!=1.3.1,<6)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (>=1.0.0,<2.0.0)", "sphinxcontrib-svg2pdfconverter"] +docs = ["ipython (>=7.0)", "matplotlib (>=3.3.0)", "mir-eval (>=0.5)", "numba (>=0.51)", "numpydoc", "presets", "sphinx (!=1.3.1,<6)", "sphinx-gallery (>=0.7)", "sphinx-multiversion (>=0.2.3)", "sphinx-rtd-theme (==1.*)", "sphinxcontrib-svg2pdfconverter"] tests = ["matplotlib (>=3.3.0)", "packaging (>=20.0)", "pytest", "pytest-cov", "pytest-mpl", "resampy (>=0.2.2)", "samplerate", "types-decorator"] [[package]] name = "llvmlite" version = "0.40.1" description = "lightweight wrapper around basic LLVM functionality" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4123,7 +3947,6 @@ files = [ name = "loguru" version = "0.7.0" description = "Python logging made (stupidly) simple" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -4142,7 +3965,6 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu name = "lxml" version = "4.9.2" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ @@ -4235,7 +4057,6 @@ source = ["Cython (>=0.29.7)"] name = "lz4" version = "4.3.2" description = "LZ4 Bindings for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4285,7 +4106,6 @@ tests = ["psutil", "pytest (!=3.3.0)", "pytest-cov"] name = "manifest-ml" version = "0.0.1" description = "Manifest for Prompt Programming Foundation Models." -category = "main" optional = true python-versions = ">=3.8.0" files = [ @@ -4309,7 +4129,6 @@ dev = ["autopep8 (>=1.6.0)", "black (>=22.3.0)", "docformatter (>=1.4)", "flake8 name = "markdown" version = "3.4.3" description = "Python implementation of John Gruber's Markdown." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4324,7 +4143,6 @@ testing = ["coverage", "pyyaml"] name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4349,7 +4167,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4409,7 +4226,6 @@ files = [ name = "marqo" version = "1.2.4" description = "Tensor search for humans" -category = "main" optional = true python-versions = ">=3" files = [ @@ -4428,7 +4244,6 @@ urllib3 = "*" name = "marshmallow" version = "3.19.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4449,7 +4264,6 @@ tests = ["pytest", "pytz", "simplejson"] name = "marshmallow-enum" version = "1.5.1" description = "Enum field for Marshmallow" -category = "main" optional = false python-versions = "*" files = [ @@ -4464,7 +4278,6 @@ marshmallow = ">=2.0.0" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -4479,7 +4292,6 @@ traitlets = "*" name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4491,7 +4303,6 @@ files = [ name = "mistune" version = "2.0.5" description = "A sane Markdown parser with useful plugins and renderers" -category = "dev" optional = false python-versions = "*" files = [ @@ -4503,7 +4314,6 @@ files = [ name = "mmh3" version = "3.1.0" description = "Python wrapper for MurmurHash (MurmurHash3), a set of fast and robust hash functions." -category = "main" optional = true python-versions = "*" files = [ @@ -4548,7 +4358,6 @@ files = [ name = "momento" version = "1.6.0" description = "SDK for Momento" -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -4565,7 +4374,6 @@ pyjwt = ">=2.4.0,<3.0.0" name = "momento-wire-types" version = "0.64.1" description = "Momento Client Proto Generated Files" -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -4581,7 +4389,6 @@ protobuf = ">=3,<5" name = "more-itertools" version = "9.1.0" description = "More routines for operating on iterables, beyond itertools" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4593,7 +4400,6 @@ files = [ name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" -category = "main" optional = true python-versions = "*" files = [ @@ -4611,7 +4417,6 @@ tests = ["pytest (>=4.6)"] name = "msal" version = "1.22.0" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." -category = "main" optional = true python-versions = "*" files = [ @@ -4631,7 +4436,6 @@ broker = ["pymsalruntime (>=0.13.2,<0.14)"] name = "msal-extensions" version = "1.0.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." -category = "main" optional = true python-versions = "*" files = [ @@ -4650,7 +4454,6 @@ portalocker = [ name = "msgpack" version = "1.0.5" description = "MessagePack serializer" -category = "main" optional = true python-versions = "*" files = [ @@ -4723,7 +4526,6 @@ files = [ name = "msrest" version = "0.7.1" description = "AutoRest swagger generator Python client runtime." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -4745,7 +4547,6 @@ async = ["aiodns", "aiohttp (>=3.0)"] name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4829,7 +4630,6 @@ files = [ name = "multiprocess" version = "0.70.14" description = "better multiprocessing and multithreading in python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4856,7 +4656,6 @@ dill = ">=0.3.6" name = "mwcli" version = "0.0.3" description = "Utilities for processing MediaWiki on the command line." -category = "main" optional = true python-versions = "*" files = [ @@ -4873,7 +4672,6 @@ para = "*" name = "mwparserfromhell" version = "0.6.4" description = "MWParserFromHell is a parser for MediaWiki wikicode." -category = "main" optional = true python-versions = ">= 3.6" files = [ @@ -4911,7 +4709,6 @@ files = [ name = "mwtypes" version = "0.3.2" description = "A set of types for processing MediaWiki data." -category = "main" optional = true python-versions = "*" files = [ @@ -4926,7 +4723,6 @@ jsonable = ">=0.3.0" name = "mwxml" version = "0.3.3" description = "A set of utilities for processing MediaWiki XML dump data." -category = "main" optional = true python-versions = "*" files = [ @@ -4944,7 +4740,6 @@ para = ">=0.0.1" name = "mypy" version = "0.991" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4995,7 +4790,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -5007,7 +4801,6 @@ files = [ name = "mypy-protobuf" version = "3.3.0" description = "Generate mypy stub files from protobuf specs" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5023,7 +4816,6 @@ types-protobuf = ">=3.19.12" name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5059,7 +4851,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p name = "nbclient" version = "0.7.4" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -5069,7 +4860,7 @@ files = [ [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" traitlets = ">=5.3" @@ -5082,7 +4873,6 @@ test = ["flaky", "ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "p name = "nbconvert" version = "7.5.0" description = "Converting Jupyter Notebooks" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5121,7 +4911,6 @@ webpdf = ["pyppeteer (>=1,<1.1)"] name = "nbformat" version = "5.9.0" description = "The Jupyter Notebook format" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -5143,7 +4932,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nebula3-python" version = "3.4.0" description = "Python client for NebulaGraph V3.4" -category = "main" optional = true python-versions = "*" files = [ @@ -5161,7 +4949,6 @@ six = ">=1.16.0" name = "neo4j" version = "5.9.0" description = "Neo4j Bolt driver for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5179,7 +4966,6 @@ pandas = ["numpy (>=1.7.0,<2.0.0)", "pandas (>=1.1.0,<3.0.0)"] name = "nest-asyncio" version = "1.5.6" description = "Patch asyncio to allow nested event loops" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -5191,7 +4977,6 @@ files = [ name = "networkx" version = "2.8.8" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -5210,7 +4995,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "newspaper3k" version = "0.2.8" description = "Simplified python article discovery & extraction." -category = "main" optional = true python-versions = "*" files = [ @@ -5237,7 +5021,6 @@ tldextract = ">=2.0.1" name = "nlpcloud" version = "1.0.42" description = "Python client for the NLP Cloud API" -category = "main" optional = true python-versions = "*" files = [ @@ -5252,7 +5035,6 @@ requests = "*" name = "nltk" version = "3.8.1" description = "Natural Language Toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5278,7 +5060,6 @@ twitter = ["twython"] name = "nomic" version = "1.1.14" description = "The offical Nomic python client." -category = "main" optional = true python-versions = "*" files = [ @@ -5306,7 +5087,6 @@ gpt4all = ["peft (==0.3.0.dev0)", "sentencepiece", "torch", "transformers (==4.2 name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5341,7 +5121,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5359,7 +5138,6 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numba" version = "0.57.1" description = "compiling Python code using LLVM" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -5391,14 +5169,13 @@ files = [ [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -llvmlite = ">=0.40.0dev0,<0.41" +llvmlite = "==0.40.*" numpy = ">=1.21,<1.25" [[package]] name = "numcodecs" version = "0.11.0" description = "A Python package providing buffer compression and transformation codecs for use" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -5431,7 +5208,6 @@ zfpy = ["zfpy (>=1.0.0)"] name = "numexpr" version = "2.8.4" description = "Fast numerical expression evaluator for NumPy" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5474,7 +5250,6 @@ numpy = ">=1.13.3" name = "numpy" version = "1.24.3" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5512,7 +5287,6 @@ files = [ name = "nvidia-cublas-cu11" version = "11.10.3.66" description = "CUBLAS native runtime libraries" -category = "main" optional = true python-versions = ">=3" files = [ @@ -5528,7 +5302,6 @@ wheel = "*" name = "nvidia-cuda-nvrtc-cu11" version = "11.7.99" description = "NVRTC native runtime libraries" -category = "main" optional = true python-versions = ">=3" files = [ @@ -5545,7 +5318,6 @@ wheel = "*" name = "nvidia-cuda-runtime-cu11" version = "11.7.99" description = "CUDA Runtime native Libraries" -category = "main" optional = true python-versions = ">=3" files = [ @@ -5561,7 +5333,6 @@ wheel = "*" name = "nvidia-cudnn-cu11" version = "8.5.0.96" description = "cuDNN runtime libraries" -category = "main" optional = true python-versions = ">=3" files = [ @@ -5577,7 +5348,6 @@ wheel = "*" name = "o365" version = "2.0.27" description = "Microsoft Graph and Office 365 API made easy" -category = "main" optional = true python-versions = ">=3.4" files = [ @@ -5598,7 +5368,6 @@ tzlocal = ">=4.0,<5.0" name = "oauthlib" version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -5615,7 +5384,6 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] name = "openai" version = "0.27.8" description = "Python client library for the OpenAI API" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -5630,7 +5398,7 @@ tqdm = "*" [package.extras] datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -dev = ["black (>=21.6b0,<22.0)", "pytest (>=6.0.0,<7.0.0)", "pytest-asyncio", "pytest-mock"] +dev = ["black (>=21.6b0,<22.0)", "pytest (==6.*)", "pytest-asyncio", "pytest-mock"] embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"] wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] @@ -5638,7 +5406,6 @@ wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1 name = "openapi-schema-pydantic" version = "1.2.4" description = "OpenAPI (v3) specification schema as pydantic class" -category = "main" optional = true python-versions = ">=3.6.1" files = [ @@ -5653,7 +5420,6 @@ pydantic = ">=1.8.2" name = "openlm" version = "0.0.5" description = "Drop-in OpenAI-compatible that can call LLMs from other providers" -category = "main" optional = true python-versions = ">=3.8.1,<4.0" files = [ @@ -5668,7 +5434,6 @@ requests = ">=2,<3" name = "opensearch-py" version = "2.2.0" description = "Python client for OpenSearch" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" files = [ @@ -5693,7 +5458,6 @@ kerberos = ["requests-kerberos"] name = "opt-einsum" version = "3.3.0" description = "Optimizing numpys einsum function" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -5712,7 +5476,6 @@ tests = ["pytest", "pytest-cov", "pytest-pep8"] name = "orjson" version = "3.9.1" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5768,7 +5531,6 @@ files = [ name = "overrides" version = "7.3.1" description = "A decorator to automatically detect mismatch when overriding a method." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -5780,7 +5542,6 @@ files = [ name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5792,7 +5553,6 @@ files = [ name = "pandas" version = "2.0.2" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5826,8 +5586,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -5860,7 +5620,6 @@ xml = ["lxml (>=4.6.3)"] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -5872,7 +5631,6 @@ files = [ name = "para" version = "0.0.8" description = "a set utilities that ake advantage of python's 'multiprocessing' module to distribute CPU-intensive tasks" -category = "main" optional = true python-versions = "*" files = [ @@ -5884,7 +5642,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -5900,7 +5657,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathos" version = "0.3.0" description = "parallel graph management and execution in heterogeneous computing" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5918,7 +5674,6 @@ ppft = ">=1.7.6.6" name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5930,7 +5685,6 @@ files = [ name = "pdfminer-six" version = "20221105" description = "PDF parser and analyzer" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -5951,7 +5705,6 @@ image = ["Pillow"] name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -5966,7 +5719,6 @@ ptyprocess = ">=0.5" name = "pgvector" version = "0.1.8" description = "pgvector support for Python" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -5980,7 +5732,6 @@ numpy = "*" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" optional = false python-versions = "*" files = [ @@ -5992,7 +5743,6 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6072,7 +5822,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "pinecone-client" version = "2.2.2" description = "Pinecone client and SDK" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -6098,7 +5847,6 @@ grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv name = "pinecone-text" version = "0.4.2" description = "Text utilities library by Pinecone.io" -category = "main" optional = true python-versions = ">=3.8,<4.0" files = [ @@ -6118,7 +5866,6 @@ wget = ">=3.2,<4.0" name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6130,7 +5877,6 @@ files = [ name = "platformdirs" version = "3.6.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6146,7 +5892,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "playwright" version = "1.35.0" description = "A high-level API to automate web browsers" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6168,7 +5913,6 @@ typing-extensions = {version = "*", markers = "python_version <= \"3.8\""} name = "pluggy" version = "1.0.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -6184,7 +5928,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pooch" version = "1.6.0" description = "\"Pooch manages your Python library's sample data files: it automatically downloads and stores them in a local directory, with support for versioning and corruption checks.\"" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -6206,7 +5949,6 @@ xxhash = ["xxhash (>=1.4.3)"] name = "portalocker" version = "2.7.0" description = "Wraps the portalocker recipe for easy usage" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -6226,7 +5968,6 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p name = "pox" version = "0.3.2" description = "utilities for filesystem exploration and automated builds" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6238,7 +5979,6 @@ files = [ name = "ppft" version = "1.7.6.6" description = "distributed and parallel python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6253,7 +5993,6 @@ dill = ["dill (>=0.3.6)"] name = "prometheus-client" version = "0.17.0" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -6268,7 +6007,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.38" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -6283,7 +6021,6 @@ wcwidth = "*" name = "protobuf" version = "3.19.6" description = "Protocol Buffers" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -6318,7 +6055,6 @@ files = [ name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -6345,7 +6081,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psychicapi" version = "0.8.0" description = "Psychic.dev is an open-source data integration platform for LLMs. This is the Python client for Psychic" -category = "main" optional = true python-versions = "*" files = [ @@ -6360,7 +6095,6 @@ requests = "*" name = "psycopg2-binary" version = "2.9.6" description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -6432,7 +6166,6 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -6444,7 +6177,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "dev" optional = false python-versions = "*" files = [ @@ -6459,7 +6191,6 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -6471,7 +6202,6 @@ files = [ name = "py-trello" version = "0.19.0" description = "Python wrapper around the Trello API" -category = "main" optional = true python-versions = "*" files = [ @@ -6488,7 +6218,6 @@ requests-oauthlib = ">=0.4.1" name = "py4j" version = "0.10.9.7" description = "Enables Python programs to dynamically access arbitrary Java objects" -category = "main" optional = true python-versions = "*" files = [ @@ -6500,7 +6229,6 @@ files = [ name = "pyaes" version = "1.6.1" description = "Pure-Python Implementation of the AES block-cipher and common modes of operation" -category = "main" optional = true python-versions = "*" files = [ @@ -6511,7 +6239,6 @@ files = [ name = "pyarrow" version = "12.0.1" description = "Python library for Apache Arrow" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6549,7 +6276,6 @@ numpy = ">=1.16.6" name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -6561,7 +6287,6 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -category = "main" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -6576,7 +6301,6 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycares" version = "4.3.0" description = "Python interface for c-ares" -category = "main" optional = true python-versions = "*" files = [ @@ -6644,7 +6368,6 @@ idna = ["idna (>=2.1)"] name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -6656,7 +6379,6 @@ files = [ name = "pydantic" version = "1.10.12" description = "Data validation and settings management using python type hints" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6709,7 +6431,6 @@ email = ["email-validator (>=1.0.3)"] name = "pydeck" version = "0.8.0" description = "Widget for deck.gl maps" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6729,7 +6450,6 @@ jupyter = ["ipykernel (>=5.1.2)", "ipython (>=5.8.0)", "ipywidgets (>=7,<8)", "t name = "pyee" version = "9.0.4" description = "A port of node.js's EventEmitter to python." -category = "dev" optional = false python-versions = "*" files = [ @@ -6744,7 +6464,6 @@ typing-extensions = "*" name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6759,7 +6478,6 @@ plugins = ["importlib-metadata"] name = "pyjwt" version = "2.7.0" description = "JSON Web Token implementation in Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6780,7 +6498,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pylance" version = "0.4.21" description = "python wrapper for lance-rs" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -6802,7 +6519,6 @@ tests = ["duckdb", "polars[pandas,pyarrow]", "pytest"] name = "pymongo" version = "4.3.3" description = "Python driver for MongoDB " -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6897,7 +6613,6 @@ zstd = ["zstandard"] name = "pympler" version = "1.0.1" description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -6909,7 +6624,6 @@ files = [ name = "pymupdf" version = "1.22.3" description = "Python bindings for the PDF toolkit and renderer MuPDF" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6949,7 +6663,6 @@ files = [ name = "pyowm" version = "3.3.0" description = "A Python wrapper around OpenWeatherMap web APIs" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6969,7 +6682,6 @@ requests = [ name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = true python-versions = ">=3.6.8" files = [ @@ -6984,7 +6696,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pypdf" version = "3.9.1" description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -7006,7 +6717,6 @@ image = ["Pillow"] name = "pypdfium2" version = "4.15.0" description = "Python bindings to PDFium" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -7028,7 +6738,6 @@ files = [ name = "pyphen" version = "0.14.0" description = "Pure Python module to hyphenate text" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7044,7 +6753,6 @@ test = ["flake8", "isort", "pytest"] name = "pyproj" version = "3.5.0" description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -7092,7 +6800,6 @@ certifi = "*" name = "pyproject-hooks" version = "1.0.0" description = "Wrappers to call pyproject.toml-based build backend hooks." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7107,7 +6814,6 @@ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7144,7 +6850,6 @@ files = [ name = "pysocks" version = "1.7.1" description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -7157,7 +6862,6 @@ files = [ name = "pyspark" version = "3.4.0" description = "Apache Spark Python API" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7178,7 +6882,6 @@ sql = ["numpy (>=1.15)", "pandas (>=1.0.5)", "pyarrow (>=1.0.0)"] name = "pytesseract" version = "0.3.10" description = "Python-tesseract is a python wrapper for Google's Tesseract-OCR" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7194,7 +6897,6 @@ Pillow = ">=8.0.0" name = "pytest" version = "7.3.2" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7217,7 +6919,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-asyncio" version = "0.20.3" description = "Pytest support for asyncio" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7236,7 +6937,6 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy name = "pytest-cov" version = "4.1.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7255,7 +6955,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-dotenv" version = "0.5.2" description = "A py.test plugin that parses environment files before running tests" -category = "dev" optional = false python-versions = "*" files = [ @@ -7271,7 +6970,6 @@ python-dotenv = ">=0.9.1" name = "pytest-mock" version = "3.11.1" description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7289,7 +6987,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "pytest-socket" version = "0.6.0" description = "Pytest Plugin to disable socket calls during tests" -category = "dev" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -7304,7 +7001,6 @@ pytest = ">=3.6.3" name = "pytest-vcr" version = "1.0.2" description = "Plugin for managing VCR.py cassettes" -category = "dev" optional = false python-versions = "*" files = [ @@ -7320,7 +7016,6 @@ vcrpy = "*" name = "pytest-watcher" version = "0.2.6" description = "Continiously runs pytest on changes in *.py files" -category = "dev" optional = false python-versions = ">=3.7.0,<4.0.0" files = [ @@ -7335,7 +7030,6 @@ watchdog = ">=2.0.0" name = "python-arango" version = "7.5.9" description = "Python Driver for ArangoDB" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -7359,7 +7053,6 @@ dev = ["black (>=22.3.0)", "flake8 (>=4.0.1)", "isort (>=5.10.1)", "mock", "mypy name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -7374,7 +7067,6 @@ six = ">=1.5" name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7389,7 +7081,6 @@ cli = ["click (>=5.0)"] name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -7401,7 +7092,6 @@ files = [ name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -7413,7 +7103,6 @@ files = [ name = "pytz-deprecation-shim" version = "0.1.0.post0" description = "Shims to make deprecation of pytz easier" -category = "main" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -7429,7 +7118,6 @@ tzdata = {version = "*", markers = "python_version >= \"3.6\""} name = "pyvespa" version = "0.33.0" description = "Python API for vespa.ai" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -7454,7 +7142,6 @@ ml = ["keras-tuner", "tensorflow", "tensorflow-ranking", "torch (<1.13)", "trans name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -7478,7 +7165,6 @@ files = [ name = "pywinpty" version = "2.0.10" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7494,7 +7180,6 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7544,7 +7229,6 @@ files = [ name = "pyzmq" version = "25.1.0" description = "Python bindings for 0MQ" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -7634,7 +7318,6 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "qdrant-client" version = "1.4.0" description = "Client library for the Qdrant vector search engine" -category = "main" optional = true python-versions = ">=3.7,<3.12" files = [ @@ -7655,7 +7338,6 @@ urllib3 = ">=1.26.14,<2.0.0" name = "qtconsole" version = "5.4.3" description = "Jupyter Qt console" -category = "dev" optional = false python-versions = ">= 3.7" files = [ @@ -7682,7 +7364,6 @@ test = ["flaky", "pytest", "pytest-qt"] name = "qtpy" version = "2.3.1" description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7700,7 +7381,6 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] name = "rank-bm25" version = "0.2.2" description = "Various BM25 algorithms for document ranking" -category = "main" optional = true python-versions = "*" files = [ @@ -7718,7 +7398,6 @@ dev = ["pytest"] name = "rapidfuzz" version = "3.1.1" description = "rapid fuzzy string matching" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7823,7 +7502,6 @@ full = ["numpy"] name = "ratelimiter" version = "1.2.0.post0" description = "Simple python rate limiting object" -category = "main" optional = true python-versions = "*" files = [ @@ -7838,7 +7516,6 @@ test = ["pytest (>=3.0)", "pytest-asyncio"] name = "rdflib" version = "6.3.2" description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." -category = "main" optional = true python-versions = ">=3.7,<4.0" files = [ @@ -7860,7 +7537,6 @@ networkx = ["networkx (>=2.0.0,<3.0.0)"] name = "redis" version = "4.5.5" description = "Python client for Redis database and key-value store" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7879,7 +7555,6 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" name = "regex" version = "2023.6.3" description = "Alternative regular expression module, to replace re." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7977,7 +7652,6 @@ files = [ name = "requests" version = "2.28.2" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -8000,7 +7674,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-file" version = "1.5.1" description = "File transport adapter for Requests" -category = "main" optional = true python-versions = "*" files = [ @@ -8016,7 +7689,6 @@ six = "*" name = "requests-oauthlib" version = "1.3.1" description = "OAuthlib authentication support for Requests." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -8035,7 +7707,6 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -8050,7 +7721,6 @@ requests = ">=2.0.1,<3.0.0" name = "responses" version = "0.22.0" description = "A utility library for mocking out the `requests` Python library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -8071,7 +7741,6 @@ tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asy name = "retry" version = "0.9.2" description = "Easy to use retry decorator." -category = "main" optional = true python-versions = "*" files = [ @@ -8087,7 +7756,6 @@ py = ">=1.4.26,<2.0.0" name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -8102,7 +7770,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -8114,7 +7781,6 @@ files = [ name = "rich" version = "13.4.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -8134,7 +7800,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -category = "main" optional = true python-versions = ">=3.6,<4" files = [ @@ -8149,7 +7814,6 @@ pyasn1 = ">=0.1.3" name = "ruff" version = "0.0.249" description = "An extremely fast Python linter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -8176,7 +7840,6 @@ files = [ name = "s3transfer" version = "0.6.1" description = "An Amazon S3 Transfer Manager" -category = "main" optional = true python-versions = ">= 3.7" files = [ @@ -8194,7 +7857,6 @@ crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] name = "safetensors" version = "0.3.1" description = "Fast and Safe Tensor serialization" -category = "main" optional = true python-versions = "*" files = [ @@ -8255,7 +7917,6 @@ torch = ["torch (>=1.10)"] name = "scikit-learn" version = "1.2.2" description = "A set of python modules for machine learning and data mining" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -8298,7 +7959,6 @@ tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy ( name = "scipy" version = "1.9.3" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -8337,7 +7997,6 @@ test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "sciki name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -8354,7 +8013,6 @@ win32 = ["pywin32"] name = "sentence-transformers" version = "2.2.2" description = "Multilingual text embeddings" -category = "main" optional = true python-versions = ">=3.6.0" files = [ @@ -8377,7 +8035,6 @@ transformers = ">=4.6.0,<5.0.0" name = "sentencepiece" version = "0.1.99" description = "SentencePiece python wrapper" -category = "main" optional = true python-versions = "*" files = [ @@ -8432,7 +8089,6 @@ files = [ name = "setuptools" version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8449,7 +8105,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "sgmllib3k" version = "1.0.0" description = "Py3k port of sgmllib." -category = "main" optional = true python-versions = "*" files = [ @@ -8460,7 +8115,6 @@ files = [ name = "shapely" version = "2.0.1" description = "Manipulation and analysis of geometric objects" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -8508,14 +8162,13 @@ files = [ numpy = ">=1.14" [package.extras] -docs = ["matplotlib", "numpydoc (>=1.1.0,<1.2.0)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] +docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] test = ["pytest", "pytest-cov"] [[package]] name = "singlestoredb" version = "0.7.1" description = "Interface to the SingleStore database and cluster management APIs" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -8548,7 +8201,6 @@ sqlalchemy = ["sqlalchemy-singlestoredb"] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -8560,7 +8212,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -8572,7 +8223,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8584,7 +8234,6 @@ files = [ name = "socksio" version = "1.0.0" description = "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -8596,7 +8245,6 @@ files = [ name = "soundfile" version = "0.12.1" description = "An audio library based on libsndfile, CFFI and NumPy" -category = "main" optional = true python-versions = "*" files = [ @@ -8620,7 +8268,6 @@ numpy = ["numpy"] name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8632,7 +8279,6 @@ files = [ name = "soxr" version = "0.3.5" description = "High quality, one-dimensional sample-rate conversion library" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -8677,7 +8323,6 @@ test = ["pytest"] name = "sqlalchemy" version = "2.0.16" description = "Database Abstraction Library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8756,7 +8401,6 @@ sqlcipher = ["sqlcipher3-binary"] name = "sqlitedict" version = "2.1.0" description = "Persistent dict in Python, backed up by sqlite3 and pickle, multithread-safe." -category = "main" optional = true python-versions = "*" files = [ @@ -8767,7 +8411,6 @@ files = [ name = "sqlparams" version = "5.1.0" description = "Convert between various DB API 2.0 parameter styles." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -8779,7 +8422,6 @@ files = [ name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "dev" optional = false python-versions = "*" files = [ @@ -8799,7 +8441,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "streamlit" version = "1.22.0" description = "A faster way to build and share data apps" -category = "main" optional = true python-versions = ">=3.7, !=3.9.7" files = [ @@ -8840,7 +8481,6 @@ snowflake = ["snowflake-snowpark-python"] name = "stringcase" version = "1.2.0" description = "String case converter." -category = "main" optional = true python-versions = "*" files = [ @@ -8851,7 +8491,6 @@ files = [ name = "sympy" version = "1.12" description = "Computer algebra system (CAS) in Python" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -8866,7 +8505,6 @@ mpmath = ">=0.19" name = "syrupy" version = "4.0.2" description = "Pytest Snapshot Test Utility" -category = "dev" optional = false python-versions = ">=3.8.1,<4" files = [ @@ -8882,7 +8520,6 @@ pytest = ">=7.0.0,<8.0.0" name = "telethon" version = "1.28.5" description = "Full-featured Telegram client library for Python 3" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -8901,7 +8538,6 @@ cryptg = ["cryptg"] name = "tenacity" version = "8.2.2" description = "Retry code until it succeeds" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -8916,7 +8552,6 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] name = "tensorboard" version = "2.11.2" description = "TensorBoard lets you watch Tensors Flow" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -8942,7 +8577,6 @@ wheel = ">=0.26" name = "tensorboard-data-server" version = "0.6.1" description = "Fast data loading for TensorBoard" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -8955,7 +8589,6 @@ files = [ name = "tensorboard-plugin-wit" version = "1.8.1" description = "What-If Tool TensorBoard plugin." -category = "main" optional = true python-versions = "*" files = [ @@ -8966,7 +8599,6 @@ files = [ name = "tensorflow" version = "2.11.1" description = "TensorFlow is an open source machine learning framework for everyone." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9011,7 +8643,6 @@ wrapt = ">=1.11.0" name = "tensorflow-estimator" version = "2.11.0" description = "TensorFlow Estimator." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9022,7 +8653,6 @@ files = [ name = "tensorflow-hub" version = "0.13.0" description = "TensorFlow Hub is a library to foster the publication, discovery, and consumption of reusable parts of machine learning models." -category = "main" optional = true python-versions = "*" files = [ @@ -9041,7 +8671,6 @@ make-nearest-neighbour-index = ["annoy", "apache-beam"] name = "tensorflow-io-gcs-filesystem" version = "0.32.0" description = "TensorFlow IO" -category = "main" optional = true python-versions = ">=3.7, <3.12" files = [ @@ -9072,7 +8701,6 @@ tensorflow-rocm = ["tensorflow-rocm (>=2.12.0,<2.13.0)"] name = "tensorflow-macos" version = "2.11.0" description = "TensorFlow is an open source machine learning framework for everyone." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9110,7 +8738,6 @@ wrapt = ">=1.11.0" name = "tensorflow-text" version = "2.11.0" description = "TF.Text is a TensorFlow library of text related ops, modules, and subgraphs." -category = "main" optional = true python-versions = "*" files = [ @@ -9137,7 +8764,6 @@ tests = ["absl-py", "pytest", "tensorflow-datasets (>=3.2.0)"] name = "termcolor" version = "2.3.0" description = "ANSI color formatting for output in terminal" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9152,7 +8778,6 @@ tests = ["pytest", "pytest-cov"] name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -9173,7 +8798,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "textstat" version = "0.7.3" description = "Calculate statistical features from text" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -9188,7 +8812,6 @@ pyphen = "*" name = "threadpoolctl" version = "3.1.0" description = "threadpoolctl" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -9200,7 +8823,6 @@ files = [ name = "tigrisdb" version = "1.0.0b6" description = "Python SDK for Tigris " -category = "main" optional = true python-versions = ">=3.8,<4.0" files = [ @@ -9216,7 +8838,6 @@ protobuf = ">=3.19.6" name = "tiktoken" version = "0.3.3" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -9262,7 +8883,6 @@ blobfile = ["blobfile (>=2)"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -9281,7 +8901,6 @@ test = ["flake8", "isort", "pytest"] name = "tinysegmenter" version = "0.3" description = "Very compact Japanese tokenizer" -category = "main" optional = true python-versions = "*" files = [ @@ -9292,7 +8911,6 @@ files = [ name = "tldextract" version = "3.4.4" description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9310,7 +8928,6 @@ requests-file = ">=1.4" name = "tokenizers" version = "0.13.3" description = "Fast and Customizable Tokenizers" -category = "main" optional = true python-versions = "*" files = [ @@ -9365,7 +8982,6 @@ testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -9377,7 +8993,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9389,7 +9004,6 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -9401,7 +9015,6 @@ files = [ name = "torch" version = "1.13.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -9442,7 +9055,6 @@ opt-einsum = ["opt-einsum (>=3.3)"] name = "torchvision" version = "0.14.1" description = "image and video datasets and models for torch deep learning" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9469,7 +9081,7 @@ files = [ [package.dependencies] numpy = "*" -pillow = ">=5.3.0,<8.3.0 || >=8.4.0" +pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" requests = "*" torch = "1.13.1" typing-extensions = "*" @@ -9481,7 +9093,6 @@ scipy = ["scipy"] name = "tornado" version = "6.3.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" optional = false python-versions = ">= 3.8" files = [ @@ -9502,7 +9113,6 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9523,7 +9133,6 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -9539,7 +9148,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "transformers" version = "4.30.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -9609,7 +9217,6 @@ vision = ["Pillow"] name = "types-chardet" version = "5.0.4.6" description = "Typing stubs for chardet" -category = "dev" optional = false python-versions = "*" files = [ @@ -9621,7 +9228,6 @@ files = [ name = "types-protobuf" version = "4.23.0.1" description = "Typing stubs for protobuf" -category = "dev" optional = false python-versions = "*" files = [ @@ -9633,7 +9239,6 @@ files = [ name = "types-pyopenssl" version = "23.2.0.0" description = "Typing stubs for pyOpenSSL" -category = "dev" optional = false python-versions = "*" files = [ @@ -9648,7 +9253,6 @@ cryptography = ">=35.0.0" name = "types-pytz" version = "2023.3.0.0" description = "Typing stubs for pytz" -category = "dev" optional = false python-versions = "*" files = [ @@ -9660,7 +9264,6 @@ files = [ name = "types-pyyaml" version = "6.0.12.10" description = "Typing stubs for PyYAML" -category = "dev" optional = false python-versions = "*" files = [ @@ -9672,7 +9275,6 @@ files = [ name = "types-redis" version = "4.5.5.2" description = "Typing stubs for redis" -category = "dev" optional = false python-versions = "*" files = [ @@ -9688,7 +9290,6 @@ types-pyOpenSSL = "*" name = "types-requests" version = "2.31.0.1" description = "Typing stubs for requests" -category = "main" optional = false python-versions = "*" files = [ @@ -9703,7 +9304,6 @@ types-urllib3 = "*" name = "types-toml" version = "0.10.8.6" description = "Typing stubs for toml" -category = "dev" optional = false python-versions = "*" files = [ @@ -9715,7 +9315,6 @@ files = [ name = "types-urllib3" version = "1.26.25.13" description = "Typing stubs for urllib3" -category = "main" optional = false python-versions = "*" files = [ @@ -9727,7 +9326,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9739,7 +9337,6 @@ files = [ name = "typing-inspect" version = "0.9.0" description = "Runtime inspection utilities for typing module." -category = "main" optional = false python-versions = "*" files = [ @@ -9755,7 +9352,6 @@ typing-extensions = ">=3.7.4" name = "tzdata" version = "2023.3" description = "Provider of IANA time zone data" -category = "main" optional = false python-versions = ">=2" files = [ @@ -9767,7 +9363,6 @@ files = [ name = "tzlocal" version = "4.3" description = "tzinfo object for the local timezone" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9787,7 +9382,6 @@ devenv = ["black", "check-manifest", "flake8", "pyroma", "pytest (>=4.3)", "pyte name = "uri-template" version = "1.2.0" description = "RFC 6570 URI Template Processor" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -9802,7 +9396,6 @@ dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas name = "uritemplate" version = "4.1.1" description = "Implementation of RFC 6570 URI Templates" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -9814,7 +9407,6 @@ files = [ name = "urllib3" version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -9831,7 +9423,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." -category = "main" optional = true python-versions = ">=3.4" files = [ @@ -9848,7 +9439,6 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] name = "vcrpy" version = "4.3.1" description = "Automatically mock your HTTP interactions to simplify and speed up testing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -9863,11 +9453,37 @@ urllib3 = {version = "<2", markers = "python_version < \"3.10\""} wrapt = "*" yarl = "*" +[[package]] +name = "vowpal-wabbit-next" +version = "0.6.0" +description = "Experimental python bindings for VowpalWabbit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "vowpal-wabbit-next-0.6.0.tar.gz", hash = "sha256:f0381614d99fac6a0f52e995ee0bfc7b681054f397bea7ff08b8a523d5315a54"}, + {file = "vowpal_wabbit_next-0.6.0-cp310-cp310-macosx_10_13_universal2.whl", hash = "sha256:cfbb831cfe9eb81185aff7cdca437ae17c6d9aca8d74e26c326e3ef4ee8e81e7"}, + {file = "vowpal_wabbit_next-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d31829778f9c600f5c121f614516ca1bc9ede5d1bc77b1eb3b59b32d9138db9"}, + {file = "vowpal_wabbit_next-0.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:714347606ab302a2f72870b6ae6dce58de4bec1b489f4bd65d80a8e326e1db8a"}, + {file = "vowpal_wabbit_next-0.6.0-cp311-cp311-macosx_10_13_universal2.whl", hash = "sha256:3a8482d5c0b9357fdb36b62d659e6b74e93aeab165b910292572a98e91d7a014"}, + {file = "vowpal_wabbit_next-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e4349099b938102f51fb6fedf035bc1deacb2971cd2a48641ca7d45186efda0"}, + {file = "vowpal_wabbit_next-0.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:c8f58cdc49f270b1bed6f0fdd7520c8ba1b328de5cd8a2760c0ec70a630de92e"}, + {file = "vowpal_wabbit_next-0.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8b7052ce7212fd1cae8ffd966e240c814f3c1df08fd612437d48f0f23e7694c"}, + {file = "vowpal_wabbit_next-0.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d24d9c380d0e9b41151337c7f9e2a33ec5bfd738fdee9f65c1a40e486234aca3"}, + {file = "vowpal_wabbit_next-0.6.0-cp38-cp38-macosx_10_13_universal2.whl", hash = "sha256:0d77a8c55249ec9a7f404939ecc6948db0527e522e8a7ae149ec7cd29b3ade04"}, + {file = "vowpal_wabbit_next-0.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa2f52f1267fbc26c7757335f9c76a0f00b112971e04c85b8a9bc9e82300597"}, + {file = "vowpal_wabbit_next-0.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d04f91200ecae73196d9f5601853d63afce8c1c8a0d310a608e8ddfa3b190cb"}, + {file = "vowpal_wabbit_next-0.6.0-cp39-cp39-macosx_10_13_universal2.whl", hash = "sha256:2df4a652729c0db34afd8fb4fc49b0090d6f061e2d49899e5f092fd4c3d23253"}, + {file = "vowpal_wabbit_next-0.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c289a260ab759f04903b441701cff66ea74d6c061d966caaba0c65ac12d05528"}, + {file = "vowpal_wabbit_next-0.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d022cab07274f227df159a81bccf034def7dd54ad70392ee98743ffa4953072"}, +] + +[package.dependencies] +numpy = "*" + [[package]] name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9907,7 +9523,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -9919,7 +9534,6 @@ files = [ name = "weaviate-client" version = "3.20.1" description = "A python native Weaviate client" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -9940,7 +9554,6 @@ grpc = ["grpcio", "grpcio-tools"] name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -9956,7 +9569,6 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -9968,7 +9580,6 @@ files = [ name = "websocket-client" version = "1.6.0" description = "WebSocket client for Python with low level API options" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9985,7 +9596,6 @@ test = ["websockets"] name = "werkzeug" version = "2.3.6" description = "The comprehensive WSGI web application library." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -10003,7 +9613,6 @@ watchdog = ["watchdog (>=2.3)"] name = "wget" version = "3.2" description = "pure python download utility" -category = "main" optional = true python-versions = "*" files = [ @@ -10014,7 +9623,6 @@ files = [ name = "wheel" version = "0.40.0" description = "A built-package format for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -10029,7 +9637,6 @@ test = ["pytest (>=6.0.0)"] name = "whylabs-client" version = "0.5.1" description = "WhyLabs API client" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -10045,7 +9652,6 @@ urllib3 = ">=1.25.3" name = "whylogs" version = "1.2.3" description = "Profile and monitor your ML data pipeline end-to-end" -category = "main" optional = true python-versions = ">=3.7.1,<4" files = [ @@ -10079,7 +9685,6 @@ viz = ["Pillow (>=9.2.0,<10.0.0)", "ipython", "numpy", "numpy (>=1.23.2)", "pyba name = "whylogs-sketching" version = "3.4.1.dev3" description = "sketching library of whylogs" -category = "main" optional = true python-versions = "*" files = [ @@ -10120,7 +9725,6 @@ files = [ name = "widgetsnbextension" version = "4.0.7" description = "Jupyter interactive widgets for Jupyter Notebook" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -10132,7 +9736,6 @@ files = [ name = "wikipedia" version = "1.4.0" description = "Wikipedia API for Python" -category = "main" optional = true python-versions = "*" files = [ @@ -10147,7 +9750,6 @@ requests = ">=2.0.0,<3.0.0" name = "win32-setctime" version = "1.1.0" description = "A small Python utility to set file creation time on Windows" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -10162,7 +9764,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] name = "wolframalpha" version = "5.0.0" description = "Wolfram|Alpha 2.0 API client" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -10183,7 +9784,6 @@ testing = ["keyring", "pmxbot", "pytest (>=3.5,!=3.7.3)", "pytest-black (>=0.3.7 name = "wonderwords" version = "2.2.0" description = "A python package for random words and sentences in the english language" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -10198,7 +9798,6 @@ cli = ["rich (==9.10.0)"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -10283,7 +9882,6 @@ files = [ name = "xata" version = "1.0.0a7" description = "Python client for Xata.io" -category = "main" optional = true python-versions = ">=3.8,<4.0" files = [ @@ -10301,7 +9899,6 @@ requests = ">=2.28.1,<3.0.0" name = "xmltodict" version = "0.13.0" description = "Makes working with XML feel like you are working with JSON" -category = "main" optional = true python-versions = ">=3.4" files = [ @@ -10313,7 +9910,6 @@ files = [ name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10401,7 +9997,6 @@ multidict = ">=4.0" name = "zipp" version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10417,7 +10012,6 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more name = "zstandard" version = "0.21.0" description = "Zstandard bindings for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -10479,7 +10073,7 @@ clarifai = ["clarifai"] cohere = ["cohere"] docarray = ["docarray"] embeddings = ["sentence-transformers"] -extended-testing = ["amazon-textract-caller", "atlassian-python-api", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "faiss-cpu", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "openapi-schema-pydantic", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "streamlit", "sympy", "telethon", "tqdm", "xata", "xmltodict"] +extended-testing = ["amazon-textract-caller", "atlassian-python-api", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "faiss-cpu", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "openapi-schema-pydantic", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "streamlit", "sympy", "telethon", "tqdm", "vowpal-wabbit-next", "xata", "xmltodict"] javascript = ["esprima"] llms = ["clarifai", "cohere", "huggingface_hub", "manifest-ml", "nlpcloud", "openai", "openlm", "torch", "transformers"] openai = ["openai", "tiktoken"] @@ -10489,4 +10083,4 @@ text-helpers = ["chardet"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "0247674f3f274fd2249ceb02c23a468f911a7c482796ea67252b203d1ab938ae" +content-hash = "505c324e9a84f481084f62ebccf3091e18a165b753d96bd43ec60344c33dc01d" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 25087bf228e..575b0ba0895 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -338,6 +338,7 @@ extended_testing = [ "xmltodict", "faiss-cpu", "openapi-schema-pydantic", + "vowpal-wabbit-next" ] [tool.ruff] diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py index e0e5f5dc21e..0a5ba9dd314 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py @@ -1,13 +1,15 @@ -import langchain.chains.rl_chain.pick_best_chain as pick_best_chain -import langchain.chains.rl_chain.base as rl_chain -from test_utils import MockEncoder import pytest -from langchain.prompts.prompt import PromptTemplate +from test_utils import MockEncoder + +import langchain.chains.rl_chain.base as rl_chain +import langchain.chains.rl_chain.pick_best_chain as pick_best_chain from langchain.chat_models import FakeListChatModel +from langchain.prompts.prompt import PromptTemplate encoded_text = "[ e n c o d e d ] " +@pytest.mark.requires("vowpal_wabbit_next") def setup(): _PROMPT_TEMPLATE = """This is a dummy prompt that will be ignored by the fake llm""" PROMPT = PromptTemplate(input_variables=[], template=_PROMPT_TEMPLATE) @@ -16,6 +18,7 @@ def setup(): return llm, PROMPT +@pytest.mark.requires("vowpal_wabbit_next") def test_multiple_ToSelectFrom_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) @@ -28,6 +31,7 @@ def test_multiple_ToSelectFrom_throws(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_missing_basedOn_from_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) @@ -36,6 +40,7 @@ def test_missing_basedOn_from_throws(): chain.run(action=rl_chain.ToSelectFrom(actions)) +@pytest.mark.requires("vowpal_wabbit_next") def test_ToSelectFrom_not_a_list_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) @@ -47,6 +52,7 @@ def test_ToSelectFrom_not_a_list_throws(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_update_with_delayed_score_with_auto_validator_throws(): llm, PROMPT = setup() # this LLM returns a number so that the auto validator will return that @@ -68,6 +74,7 @@ def test_update_with_delayed_score_with_auto_validator_throws(): chain.update_with_delayed_score(event=selection_metadata, score=100) +@pytest.mark.requires("vowpal_wabbit_next") def test_update_with_delayed_score_force(): llm, PROMPT = setup() # this LLM returns a number so that the auto validator will return that @@ -91,6 +98,7 @@ def test_update_with_delayed_score_force(): assert selection_metadata.selected.score == 100.0 +@pytest.mark.requires("vowpal_wabbit_next") def test_update_with_delayed_score(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm( @@ -108,6 +116,7 @@ def test_update_with_delayed_score(): assert selection_metadata.selected.score == 100.0 +@pytest.mark.requires("vowpal_wabbit_next") def test_user_defined_scorer(): llm, PROMPT = setup() @@ -129,6 +138,7 @@ def test_user_defined_scorer(): assert selection_metadata.selected.score == 200.0 +@pytest.mark.requires("vowpal_wabbit_next") def test_default_embeddings(): llm, PROMPT = setup() feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -162,6 +172,7 @@ def test_default_embeddings(): assert vw_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_default_embeddings_off(): llm, PROMPT = setup() feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -187,6 +198,7 @@ def test_default_embeddings_off(): assert vw_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_default_embeddings_mixed_w_explicit_user_embeddings(): llm, PROMPT = setup() feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -221,6 +233,7 @@ def test_default_embeddings_mixed_w_explicit_user_embeddings(): assert vw_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_default_no_scorer_specified(): _, PROMPT = setup() chain_llm = FakeListChatModel(responses=[100]) @@ -235,6 +248,7 @@ def test_default_no_scorer_specified(): assert selection_metadata.selected.score == 100.0 +@pytest.mark.requires("vowpal_wabbit_next") def test_explicitly_no_scorer(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm( @@ -250,6 +264,7 @@ def test_explicitly_no_scorer(): assert selection_metadata.selected.score == None +@pytest.mark.requires("vowpal_wabbit_next") def test_auto_scorer_with_user_defined_llm(): llm, PROMPT = setup() scorer_llm = FakeListChatModel(responses=[300]) @@ -268,15 +283,14 @@ def test_auto_scorer_with_user_defined_llm(): assert selection_metadata.selected.score == 300.0 +@pytest.mark.requires("vowpal_wabbit_next") def test_calling_chain_w_reserved_inputs_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) with pytest.raises(ValueError): chain.run( User=rl_chain.BasedOn("Context"), - rl_chain_selected_based_on=rl_chain.ToSelectFrom( - ["0", "1", "2"] - ), + rl_chain_selected_based_on=rl_chain.ToSelectFrom(["0", "1", "2"]), ) with pytest.raises(ValueError): diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py index 22097c6ef36..501700a69ad 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py @@ -1,12 +1,13 @@ -import langchain.chains.rl_chain.pick_best_chain as pick_best_chain -import langchain.chains.rl_chain.base as rl_chain +import pytest from test_utils import MockEncoder -import pytest +import langchain.chains.rl_chain.base as rl_chain +import langchain.chains.rl_chain.pick_best_chain as pick_best_chain encoded_text = "[ e n c o d e d ] " +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_missing_context_throws(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_action = {"action": ["0", "1", "2"]} @@ -17,6 +18,7 @@ def test_pickbest_textembedder_missing_context_throws(): feature_embedder.format(event) +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_missing_actions_throws(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) event = pick_best_chain.PickBest.Event( @@ -26,6 +28,7 @@ def test_pickbest_textembedder_missing_actions_throws(): feature_embedder.format(event) +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_no_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": ["0", "1", "2"]} @@ -37,6 +40,7 @@ def test_pickbest_textembedder_no_label_no_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_w_label_no_score_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": ["0", "1", "2"]} @@ -52,6 +56,7 @@ def test_pickbest_textembedder_w_label_no_score_no_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_w_full_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": ["0", "1", "2"]} @@ -69,6 +74,7 @@ def test_pickbest_textembedder_w_full_label_no_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_w_full_label_w_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) str1 = "0" @@ -92,6 +98,7 @@ def test_pickbest_textembedder_w_full_label_w_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_w_full_label_w_embed_and_keep(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) str1 = "0" @@ -115,6 +122,7 @@ def test_pickbest_textembedder_w_full_label_w_embed_and_keep(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_more_namespaces_no_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": [{"a": "0", "b": "0"}, "1", "2"]} @@ -127,6 +135,7 @@ def test_pickbest_textembedder_more_namespaces_no_label_no_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_more_namespaces_w_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": [{"a": "0", "b": "0"}, "1", "2"]} @@ -140,6 +149,7 @@ def test_pickbest_textembedder_more_namespaces_w_label_no_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_more_namespaces_w_full_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": [{"a": "0", "b": "0"}, "1", "2"]} @@ -153,6 +163,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_no_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -168,9 +179,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_emb(): encoded_ctx_str_1 = encoded_text + " ".join(char for char in ctx_str_1) encoded_ctx_str_2 = encoded_text + " ".join(char for char in ctx_str_2) - named_actions = { - "action1": rl_chain.Embed([{"a": str1, "b": str1}, str2, str3]) - } + named_actions = {"action1": rl_chain.Embed([{"a": str1, "b": str1}, str2, str3])} context = { "context1": rl_chain.Embed(ctx_str_1), "context2": rl_chain.Embed(ctx_str_2), @@ -185,6 +194,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_embed_and_keep(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -201,9 +211,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_embed_and_kee encoded_ctx_str_2 = encoded_text + " ".join(char for char in ctx_str_2) named_actions = { - "action1": rl_chain.EmbedAndKeep( - [{"a": str1, "b": str1}, str2, str3] - ) + "action1": rl_chain.EmbedAndKeep([{"a": str1, "b": str1}, str2, str3]) } context = { "context1": rl_chain.EmbedAndKeep(ctx_str_1), @@ -219,6 +227,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_embed_and_kee assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -252,6 +261,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_emb(): assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_embed_and_keep(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -288,6 +298,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_embed_and_ assert vw_ex_str == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_raw_features_underscored(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) str1 = "this is a long string" diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_rl_chain_base_embedder.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_rl_chain_base_embedder.py index fc3d02d9b07..895fa8ebb60 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_rl_chain_base_embedder.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_rl_chain_base_embedder.py @@ -1,16 +1,18 @@ -import langchain.chains.rl_chain.base as base +import pytest from test_utils import MockEncoder -import pytest +import langchain.chains.rl_chain.base as base encoded_text = "[ e n c o d e d ] " +@pytest.mark.requires("vowpal_wabbit_next") def test_simple_context_str_no_emb(): expected = [{"a_namespace": "test"}] assert base.embed("test", MockEncoder(), "a_namespace") == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_simple_context_str_w_emb(): str1 = "test" encoded_str1 = " ".join(char for char in str1) @@ -25,6 +27,7 @@ def test_simple_context_str_w_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_simple_context_str_w_nested_emb(): # nested embeddings, innermost wins str1 = "test" @@ -42,11 +45,13 @@ def test_simple_context_str_w_nested_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_context_w_namespace_no_emb(): expected = [{"test_namespace": "test"}] assert base.embed({"test_namespace": "test"}, MockEncoder()) == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_context_w_namespace_w_emb(): str1 = "test" encoded_str1 = " ".join(char for char in str1) @@ -61,6 +66,7 @@ def test_context_w_namespace_w_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_context_w_namespace_w_emb2(): str1 = "test" encoded_str1 = " ".join(char for char in str1) @@ -75,6 +81,7 @@ def test_context_w_namespace_w_emb2(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_context_w_namespace_w_some_emb(): str1 = "test1" str2 = "test2" @@ -103,6 +110,7 @@ def test_context_w_namespace_w_some_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_simple_action_strlist_no_emb(): str1 = "test1" str2 = "test2" @@ -111,6 +119,7 @@ def test_simple_action_strlist_no_emb(): assert base.embed([str1, str2, str3], MockEncoder(), "a_namespace") == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_simple_action_strlist_w_emb(): str1 = "test1" str2 = "test2" @@ -138,6 +147,7 @@ def test_simple_action_strlist_w_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_simple_action_strlist_w_some_emb(): str1 = "test1" str2 = "test2" @@ -170,6 +180,7 @@ def test_simple_action_strlist_w_some_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_action_w_namespace_no_emb(): str1 = "test1" str2 = "test2" @@ -192,6 +203,7 @@ def test_action_w_namespace_no_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_action_w_namespace_w_emb(): str1 = "test1" str2 = "test2" @@ -233,6 +245,7 @@ def test_action_w_namespace_w_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_action_w_namespace_w_emb2(): str1 = "test1" str2 = "test2" @@ -278,6 +291,7 @@ def test_action_w_namespace_w_emb2(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_action_w_namespace_w_some_emb(): str1 = "test1" str2 = "test2" @@ -318,6 +332,7 @@ def test_action_w_namespace_w_some_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_action_w_namespace_w_emb_w_more_than_one_item_in_first_dict(): str1 = "test1" str2 = "test2" @@ -368,6 +383,7 @@ def test_action_w_namespace_w_emb_w_more_than_one_item_in_first_dict(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_one_namespace_w_list_of_features_no_emb(): str1 = "test1" str2 = "test2" @@ -375,6 +391,7 @@ def test_one_namespace_w_list_of_features_no_emb(): assert base.embed({"test_namespace": [str1, str2]}, MockEncoder()) == expected +@pytest.mark.requires("vowpal_wabbit_next") def test_one_namespace_w_list_of_features_w_some_emb(): str1 = "test1" str2 = "test2" @@ -386,21 +403,25 @@ def test_one_namespace_w_list_of_features_w_some_emb(): ) +@pytest.mark.requires("vowpal_wabbit_next") def test_nested_list_features_throws(): with pytest.raises(ValueError): base.embed({"test_namespace": [[1, 2], [3, 4]]}, MockEncoder()) +@pytest.mark.requires("vowpal_wabbit_next") def test_dict_in_list_throws(): with pytest.raises(ValueError): base.embed({"test_namespace": [{"a": 1}, {"b": 2}]}, MockEncoder()) +@pytest.mark.requires("vowpal_wabbit_next") def test_nested_dict_throws(): with pytest.raises(ValueError): base.embed({"test_namespace": {"a": {"b": 1}}}, MockEncoder()) +@pytest.mark.requires("vowpal_wabbit_next") def test_list_of_tuples_throws(): with pytest.raises(ValueError): base.embed({"test_namespace": [("a", 1), ("b", 2)]}, MockEncoder()) From a2f807e0554924217133675d7c3a6e4ac875b2b2 Mon Sep 17 00:00:00 2001 From: olgavrou Date: Fri, 18 Aug 2023 05:51:26 -0400 Subject: [PATCH 2/6] make vw dependency optional --- libs/langchain/poetry.lock | 4 ++-- libs/langchain/pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index 75ae888efdb..84d87636469 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -9457,7 +9457,7 @@ yarl = "*" name = "vowpal-wabbit-next" version = "0.6.0" description = "Experimental python bindings for VowpalWabbit" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "vowpal-wabbit-next-0.6.0.tar.gz", hash = "sha256:f0381614d99fac6a0f52e995ee0bfc7b681054f397bea7ff08b8a523d5315a54"}, @@ -10083,4 +10083,4 @@ text-helpers = ["chardet"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "505c324e9a84f481084f62ebccf3091e18a165b753d96bd43ec60344c33dc01d" +content-hash = "eba7c01296c1948ab432ca2bc70e274e79a4135d66b4c189d6bb95b5e0c41198" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 575b0ba0895..3d48a559685 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -125,7 +125,7 @@ newspaper3k = {version = "^0.2.8", optional = true} amazon-textract-caller = {version = "<2", optional = true} xata = {version = "^1.0.0a7", optional = true} xmltodict = {version = "^0.13.0", optional = true} -vowpal-wabbit-next = "0.6.0" +vowpal-wabbit-next = {version = "0.6.0", optional = true} [tool.poetry.group.test.dependencies] From 5aafb3bc46b5e1b436281aa5b2b7536385a8a352 Mon Sep 17 00:00:00 2001 From: olgavrou Date: Fri, 18 Aug 2023 07:09:30 -0400 Subject: [PATCH 3/6] resolving linting and formatting errors --- .../langchain/chains/rl_chain/__init__.py | 26 +++-- .../langchain/chains/rl_chain/base.py | 98 +++++++++++-------- .../langchain/chains/rl_chain/metrics.py | 5 +- .../chains/rl_chain/model_repository.py | 7 +- .../chains/rl_chain/pick_best_chain.py | 82 ++++++++-------- .../langchain/chains/rl_chain/vw_logger.py | 4 +- .../rl_chain/test_pick_best_chain_call.py | 6 +- .../rl_chain/test_pick_best_text_embedder.py | 8 +- 8 files changed, 132 insertions(+), 104 deletions(-) diff --git a/libs/langchain/langchain/chains/rl_chain/__init__.py b/libs/langchain/langchain/chains/rl_chain/__init__.py index d485c5d5063..e71de1da6cc 100644 --- a/libs/langchain/langchain/chains/rl_chain/__init__.py +++ b/libs/langchain/langchain/chains/rl_chain/__init__.py @@ -1,16 +1,16 @@ -from langchain.chains.rl_chain.pick_best_chain import PickBest +import logging + from langchain.chains.rl_chain.base import ( - Embed, - BasedOn, - ToSelectFrom, - SelectionScorer, AutoSelectionScorer, + BasedOn, + Embed, Embedder, Policy, + SelectionScorer, + ToSelectFrom, VwPolicy, ) - -import logging +from langchain.chains.rl_chain.pick_best_chain import PickBest def configure_logger(): @@ -26,3 +26,15 @@ def configure_logger(): configure_logger() + +__all__ = [ + "PickBest", + "Embed", + "BasedOn", + "ToSelectFrom", + "SelectionScorer", + "AutoSelectionScorer", + "Embedder", + "Policy", + "VwPolicy", +] diff --git a/libs/langchain/langchain/chains/rl_chain/base.py b/libs/langchain/langchain/chains/rl_chain/base.py index 2d0a1036793..437053f2dc1 100644 --- a/libs/langchain/langchain/chains/rl_chain/base.py +++ b/libs/langchain/langchain/chains/rl_chain/base.py @@ -3,7 +3,7 @@ from __future__ import annotations import logging import os from abc import ABC, abstractmethod -from typing import Any, Dict, List, Optional, Sequence, Tuple, Union +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Sequence, Tuple, Union from langchain.callbacks.manager import CallbackManagerForChainRun from langchain.chains.base import Chain @@ -19,6 +19,9 @@ from langchain.prompts import ( ) from langchain.pydantic_v1 import BaseModel, Extra, root_validator +if TYPE_CHECKING: + import vowpal_wabbit_next as vw + logger = logging.getLogger(__name__) @@ -85,8 +88,6 @@ def EmbedAndKeep(anything): def parse_lines(parser: "vw.TextFormatParser", input_str: str) -> List["vw.Example"]: - import vowpal_wabbit_next as vw - return [parser.parse_line(line) for line in input_str.split("\n")] @@ -113,8 +114,11 @@ def get_based_on_and_to_select_from(inputs: Dict[str, Any]): def prepare_inputs_for_autoembed(inputs: Dict[str, Any]): - # go over all the inputs and if something is either wrapped in _ToSelectFrom or _BasedOn, and if - # their inner values are not already _Embed, then wrap them in EmbedAndKeep while retaining their _ToSelectFrom or _BasedOn status + """ + go over all the inputs and if something is either wrapped in _ToSelectFrom or _BasedOn, and if their inner values are not already _Embed, + then wrap them in EmbedAndKeep while retaining their _ToSelectFrom or _BasedOn status + """ # noqa: E501 + next_inputs = inputs.copy() for k, v in next_inputs.items(): if isinstance(v, _ToSelectFrom) or isinstance(v, _BasedOn): @@ -219,13 +223,18 @@ class AutoSelectionScorer(SelectionScorer, BaseModel): @staticmethod def get_default_system_prompt() -> SystemMessagePromptTemplate: return SystemMessagePromptTemplate.from_template( - "PLEASE RESPOND ONLY WITH A SINGLE FLOAT AND NO OTHER TEXT EXPLANATION\n You are a strict judge that is called on to rank a response based on given criteria.\ - You must respond with your ranking by providing a single float within the range [0, 1], 0 being very bad response and 1 being very good response." + "PLEASE RESPOND ONLY WITH A SINGLE FLOAT AND NO OTHER TEXT EXPLANATION\n \ + You are a strict judge that is called on to rank a response based on \ + given criteria. You must respond with your ranking by providing a \ + single float within the range [0, 1], 0 being very bad \ + response and 1 being very good response." ) @staticmethod def get_default_prompt() -> ChatPromptTemplate: - human_template = 'Given this based_on "{rl_chain_selected_based_on}" as the most important attribute, rank how good or bad this text is: "{llm_response}".' + human_template = 'Given this based_on "{rl_chain_selected_based_on}" \ + as the most important attribute, rank how good or bad this text is: \ + "{llm_response}".' human_message_prompt = HumanMessagePromptTemplate.from_template(human_template) default_system_prompt = AutoSelectionScorer.get_default_system_prompt() chat_prompt = ChatPromptTemplate.from_messages( @@ -260,25 +269,36 @@ class AutoSelectionScorer(SelectionScorer, BaseModel): return resp except Exception as e: raise RuntimeError( - f"The llm did not manage to rank the response as expected, there is always the option to try again or tweak the reward prompt. Error: {e}" + f"The auto selection scorer did not manage to score the response, \ + there is always the option to try again or tweak the reward prompt.\ + Error: {e}" ) class RLChain(Chain): """ - RLChain class that utilizes the Vowpal Wabbit (VW) model for personalization. + The `RLChain` class leverages the Vowpal Wabbit (VW) model as a learned policy for reinforcement learning. Attributes: - model_loading (bool, optional): If set to True, the chain will attempt to load an existing VW model from the latest checkpoint file in the {model_save_dir} directory (current directory if none specified). If set to False, it will start training from scratch, potentially overwriting existing files. Defaults to True. - large_action_spaces (bool, optional): If set to True and vw_cmd has not been specified in the constructor, it will enable large action spaces - vw_cmd (List[str], optional): Advanced users can set the VW command line to whatever they want, as long as it is compatible with the Type that is specified (Type Enum) - model_save_dir (str, optional): The directory to save the VW model to. Defaults to the current directory. - selection_scorer (SelectionScorer): If set, the chain will check the response using the provided selection_scorer and the VW model will be updated with the result. Defaults to None. + - llm_chain (Chain): Represents the underlying Language Model chain. + - prompt (BasePromptTemplate): The template for the base prompt. + - selection_scorer (Union[SelectionScorer, None]): Scorer for the selection. Can be set to None. + - policy (Optional[Policy]): The policy used by the chain to learn to populate a dynamic prompt. + - auto_embed (bool): Determines if embedding should be automatic. Default is True. + - metrics (Optional[MetricsTracker]): Tracker for metrics, can be set to None. + + Initialization Attributes: + - feature_embedder (Embedder): Embedder used for the `BasedOn` and `ToSelectFrom` inputs. + - model_save_dir (str, optional): Directory for saving the VW model. Default is the current directory. + - reset_model (bool): If set to True, the model starts training from scratch. Default is False. + - vw_cmd (List[str], optional): Command line arguments for the VW model. + - policy (VwPolicy): Policy used by the chain. + - vw_logs (Optional[Union[str, os.PathLike]]): Path for the VW logs. + - metrics_step (int): Step for the metrics tracker. Default is -1. Notes: - The class creates a VW model instance using the provided arguments. Before the chain object is destroyed the save_progress() function can be called. If it is called, the learned VW model is saved to a file in the current directory named `model-.vw`. Checkpoints start at 1 and increment monotonically. - When making predictions, VW is first called to choose action(s) which are then passed into the prompt with the key `{actions}`. After action selection, the LLM (Language Model) is called with the prompt populated by the chosen action(s), and the response is returned. - """ + The class initializes the VW model using the provided arguments. If `selection_scorer` is not provided, a warning is logged, indicating that no reinforcement learning will occur unless the `update_with_delayed_score` method is called. + """ # noqa: E501 llm_chain: Chain @@ -306,7 +326,9 @@ class RLChain(Chain): super().__init__(*args, **kwargs) if self.selection_scorer is None: logger.warning( - "No response validator provided, which means that no reinforcement learning will be done in the RL chain unless update_with_delayed_score is called." + "No selection scorer provided, which means that no \ + reinforcement learning will be done in the RL chain \ + unless update_with_delayed_score is called." ) self.policy = policy( model_repo=ModelRepository( @@ -346,7 +368,9 @@ class RLChain(Chain): or self.selected_based_on_input_key in inputs.keys() ): raise ValueError( - f"The rl chain does not accept '{self.selected_input_key}' or '{self.selected_based_on_input_key}' as input keys, they are reserved for internal use during auto reward." + f"The rl chain does not accept '{self.selected_input_key}' \ + or '{self.selected_based_on_input_key}' as input keys, \ + they are reserved for internal use during auto reward." ) @abstractmethod @@ -375,13 +399,13 @@ class RLChain(Chain): self, score: float, event: Event, force_score=False ) -> None: """ - Learn will be called with the score specified and the actions/embeddings/etc stored in event - + Updates the learned policy with the score provided. Will raise an error if selection_scorer is set, and force_score=True was not provided during the method call - """ + """ # noqa: E501 if self.selection_scorer and not force_score: raise RuntimeError( - "The selection scorer is set, and force_score was not set to True. Please set force_score=True to use this function." + "The selection scorer is set, and force_score was not set to True. \ + Please set force_score=True to use this function." ) self.metrics.on_feedback(score) self._call_after_scoring_before_learning(event=event, score=score) @@ -390,10 +414,7 @@ class RLChain(Chain): def set_auto_embed(self, auto_embed: bool) -> None: """ - Set whether the chain should auto embed the inputs or not. If set to False, the inputs will not be embedded and the user will need to embed the inputs themselves before calling run. - - Args: - auto_embed (bool): Whether the chain should auto embed the inputs or not. + Sets whether the chain should auto embed the inputs or not. """ self.auto_embed = auto_embed @@ -438,7 +459,8 @@ class RLChain(Chain): ) except Exception as e: logger.info( - f"The LLM was not able to rank and the chain was not able to adjust to this response, error: {e}" + f"The selection scorer was not able to score, \ + and the chain was not able to adjust to this response, error: {e}" ) self.metrics.on_feedback(score) event = self._call_after_scoring_before_learning(score=score, event=event) @@ -449,16 +471,7 @@ class RLChain(Chain): def save_progress(self) -> None: """ - This function should be called whenever there is a need to save the progress of the VW (Vowpal Wabbit) model within the chain. It saves the current state of the VW model to a file. - - File Naming Convention: - The file will be named using the pattern `model-.vw`, where `` is a monotonically increasing number. The numbering starts from 1, and increments by 1 for each subsequent save. If there are already saved checkpoints, the number used for `` will be the next in the sequence. - - Example: - If there are already two saved checkpoints, `model-1.vw` and `model-2.vw`, the next time this function is called, it will save the model as `model-3.vw`. - - Note: - Be cautious when deleting or renaming checkpoint files manually, as this could cause the function to reuse checkpoint numbers. + This function should be called to save the state of the Vowpal Wabbit model. """ self.policy.save() @@ -493,7 +506,8 @@ def embed_string_type( if namespace is None: raise ValueError( - "The default namespace must be provided when embedding a string or _Embed object." + "The default namespace must be \ + provided when embedding a string or _Embed object." ) return {namespace: keep_str + join_char.join(map(str, encoded))} @@ -533,7 +547,7 @@ def embed( namespace: Optional[str] = None, ) -> List[Dict[str, Union[str, List[str]]]]: """ - Embeds the actions or context using the SentenceTransformer model + Embeds the actions or context using the SentenceTransformer model (or a model that has an `encode` function) Attributes: to_embed: (Union[Union(str, _Embed(str)), Dict, List[Union(str, _Embed(str))], List[Dict]], required) The text to be embedded, either a string, a list of strings or a dictionary or a list of dictionaries. @@ -541,7 +555,7 @@ def embed( model: (Any, required) The model to use for embedding Returns: List[Dict[str, str]]: A list of dictionaries where each dictionary has the namespace as the key and the embedded string as the value - """ + """ # noqa: E501 if (isinstance(to_embed, _Embed) and isinstance(to_embed.value, str)) or isinstance( to_embed, str ): diff --git a/libs/langchain/langchain/chains/rl_chain/metrics.py b/libs/langchain/langchain/chains/rl_chain/metrics.py index 973b778911c..b7ec949c9ea 100644 --- a/libs/langchain/langchain/chains/rl_chain/metrics.py +++ b/libs/langchain/langchain/chains/rl_chain/metrics.py @@ -1,4 +1,7 @@ -from typing import Optional +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + import pandas as pd class MetricsTracker: diff --git a/libs/langchain/langchain/chains/rl_chain/model_repository.py b/libs/langchain/langchain/chains/rl_chain/model_repository.py index 992fca45186..eea866d1cf3 100644 --- a/libs/langchain/langchain/chains/rl_chain/model_repository.py +++ b/libs/langchain/langchain/chains/rl_chain/model_repository.py @@ -4,7 +4,10 @@ import logging import os import shutil from pathlib import Path -from typing import Sequence, Union +from typing import TYPE_CHECKING, Sequence, Union + +if TYPE_CHECKING: + import vowpal_wabbit_next as vw logger = logging.getLogger(__name__) @@ -35,8 +38,6 @@ class ModelRepository: return len(glob.glob(str(self.folder / "model-????????-??????.vw"))) > 0 def save(self, workspace: "vw.Workspace") -> None: - import vowpal_wabbit_next as vw - with open(self.model_path, "wb") as f: logger.info(f"storing rl_chain model in: {self.model_path}") f.write(workspace.serialize()) diff --git a/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py b/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py index 3df1d7f9d9f..6e1a1a5eff7 100644 --- a/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py +++ b/libs/langchain/langchain/chains/rl_chain/pick_best_chain.py @@ -12,17 +12,18 @@ from langchain.prompts import BasePromptTemplate logger = logging.getLogger(__name__) -# sentinel object used to distinguish between user didn't supply anything or user explicitly supplied None +# sentinel object used to distinguish between +# user didn't supply anything or user explicitly supplied None SENTINEL = object() class PickBestFeatureEmbedder(base.Embedder): """ - Contextual Bandit Text Embedder class that embeds the based_on and to_select_from into a format that can be used by VW + Text Embedder class that embeds the `BasedOn` and `ToSelectFrom` inputs into a format that can be used by the learning policy Attributes: model name (Any, optional): The type of embeddings to be used for feature representation. Defaults to BERT SentenceTransformer. - """ + """ # noqa E501 def __init__(self, model: Optional[Any] = None, *args, **kwargs): super().__init__(*args, **kwargs) @@ -36,7 +37,7 @@ class PickBestFeatureEmbedder(base.Embedder): def format(self, event: PickBest.Event) -> str: """ - Converts the based_on and to_select_from into a format that can be used by VW + Converts the `BasedOn` and `ToSelectFrom` into a format that can be used by VW """ cost = None @@ -68,14 +69,20 @@ class PickBestFeatureEmbedder(base.Embedder): example_string += "shared " for context_item in context_emb: for ns, based_on in context_item.items(): - example_string += f"|{ns} {' '.join(based_on) if isinstance(based_on, list) else based_on} " + e = " ".join(based_on) if isinstance(based_on, list) else based_on + example_string += f"|{ns} {e} " example_string += "\n" for i, action in enumerate(action_embs): if cost is not None and chosen_action == i: example_string += f"{chosen_action}:{cost}:{prob} " for ns, action_embedding in action.items(): - example_string += f"|{ns} {' '.join(action_embedding) if isinstance(action_embedding, list) else action_embedding} " + e = ( + " ".join(action_embedding) + if isinstance(action_embedding, list) + else action_embedding + ) + example_string += f"|{ns} {e} " example_string += "\n" # Strip the last newline return example_string[:-1] @@ -83,33 +90,31 @@ class PickBestFeatureEmbedder(base.Embedder): class PickBest(base.RLChain): """ - PickBest class that utilizes the Vowpal Wabbit (VW) model for personalization. + `PickBest` is a class designed to leverage the Vowpal Wabbit (VW) model for reinforcement learning with a context, with the goal of modifying the prompt before the LLM call. - The Chain is initialized with a set of potential to_select_from. For each call to the Chain, a specific action will be chosen based on an input based_on. - This chosen action is then passed to the prompt that will be utilized in the subsequent call to the LLM (Language Model). + Each invocation of the chain's `run()` method should be equipped with a set of potential actions (`ToSelectFrom`) and will result in the selection of a specific action based on the `BasedOn` input. This chosen action then informs the LLM (Language Model) prompt for the subsequent response generation. - The flow of this chain is: - - Chain is initialized - - Chain is called input containing the based_on and the List of potential to_select_from - - Chain chooses an action based on the based_on - - Chain calls the LLM with the chosen action - - LLM returns a response - - If the selection_scorer is specified, the response is checked against the selection_scorer - - The internal model will be updated with the based_on, action, and reward of the response (how good or bad the response was) - - The response is returned + The standard operation flow of this Chain includes: + 1. The Chain is invoked with inputs containing the `BasedOn` criteria and a list of potential actions (`ToSelectFrom`). + 2. An action is selected based on the `BasedOn` input. + 3. The LLM is called with the dynamic prompt, producing a response. + 4. If a `selection_scorer` is provided, it is used to score the selection. + 5. The internal Vowpal Wabbit model is updated with the `BasedOn` input, the chosen `ToSelectFrom` action, and the resulting score from the scorer. + 6. The final response is returned. + + Expected input dictionary format: + - At least one variable encapsulated within `BasedOn` to serve as the selection criteria. + - A single list variable within `ToSelectFrom`, representing potential actions for the VW model. This list can take the form of: + - A list of strings, e.g., `action = ToSelectFrom(["action1", "action2", "action3"])` + - A list of list of strings e.g. `action = ToSelectFrom([["action1", "another identifier of action1"], ["action2", "another identifier of action2"]])` + - A list of dictionaries, where each dictionary represents an action with namespace names as keys and corresponding action strings as values. For instance, `action = ToSelectFrom([{"namespace1": ["action1", "another identifier of action1"], "namespace2": "action2"}, {"namespace1": "action3", "namespace2": "action4"}])`. - input dictionary expects: - - at least one variable wrapped in BasedOn which will be the based_on to use for personalization - - one variable of a list wrapped in ToSelectFrom which will be the list of to_select_from for the Vowpal Wabbit model to choose from. - This list can either be a List of str's or a List of Dict's. - - Actions provided as a list of strings e.g. to_select_from = ["action1", "action2", "action3"] - - If to_select_from are provided as a list of dictionaries, each action should be a dictionary where the keys are namespace names and the values are the corresponding action strings e.g. to_select_from = [{"namespace1": "action1", "namespace2": "action2"}, {"namespace1": "action3", "namespace2": "action4"}] Extends: RLChain Attributes: - feature_embedder: (PickBestFeatureEmbedder, optional) The text embedder to use for embedding the based_on and the to_select_from. If not provided, a default embedder is used. - """ + feature_embedder (PickBestFeatureEmbedder, optional): Is an advanced attribute. Responsible for embedding the `BasedOn` and `ToSelectFrom` inputs. If omitted, a default embedder is utilized. + """ # noqa E501 class Selected(base.Selected): index: Optional[int] @@ -169,17 +174,23 @@ class PickBest(base.RLChain): context, actions = base.get_based_on_and_to_select_from(inputs=inputs) if not actions: raise ValueError( - "No variables using 'ToSelectFrom' found in the inputs. Please include at least one variable containing a list to select from." + "No variables using 'ToSelectFrom' found in the inputs. \ + Please include at least one variable containing \ + a list to select from." ) if len(list(actions.values())) > 1: raise ValueError( - "Only one variable using 'ToSelectFrom' can be provided in the inputs for the PickBest chain. Please provide only one variable containing a list to select from." + "Only one variable using 'ToSelectFrom' can be provided in the inputs \ + for the PickBest chain. Please provide only one variable \ + containing a list to select from." ) if not context: raise ValueError( - "No variables using 'BasedOn' found in the inputs. Please include at least one variable containing information to base the selected of ToSelectFrom on." + "No variables using 'BasedOn' found in the inputs. \ + Please include at least one variable containing information \ + to base the selected of ToSelectFrom on." ) event = PickBest.Event(inputs=inputs, to_select_from=actions, based_on=context) @@ -231,19 +242,6 @@ class PickBest(base.RLChain): inputs: Dict[str, Any], run_manager: Optional[CallbackManagerForChainRun] = None, ) -> Dict[str, Any]: - """ - When chain.run() is called with the given inputs, this function is called. It is responsible for calling the VW model to choose an action (ToSelectFrom) based on the (BasedOn) based_on, and then calling the LLM (Language Model) with the chosen action to generate a response. - - Attributes: - inputs: (Dict, required) The inputs to the chain. The inputs must contain a input variables that are wrapped in BasedOn and ToSelectFrom. BasedOn is the based_on that will be used for selecting an ToSelectFrom action that will be passed to the LLM prompt. - run_manager: (CallbackManagerForChainRun, optional) The callback manager to use for this run. If not provided, a default callback manager is used. - - Returns: - A dictionary containing: - - `response`: The response generated by the LLM (Language Model). - - `selection_metadata`: A Event object containing all the information needed to learn the reward for the chosen action at a later point. If an automatic selection_scorer is not provided, then this object can be used at a later point with the `update_with_delayed_score()` function to learn the delayed reward and update the Vowpal Wabbit model. - - the `score` in the `selection_metadata` object is set to None if an automatic selection_scorer is not provided or if the selection_scorer failed (e.g. LLM timeout or LLM failed to rank correctly). - """ return super()._call(run_manager=run_manager, inputs=inputs) @property diff --git a/libs/langchain/langchain/chains/rl_chain/vw_logger.py b/libs/langchain/langchain/chains/rl_chain/vw_logger.py index 0d4cce21446..4fa47175395 100644 --- a/libs/langchain/langchain/chains/rl_chain/vw_logger.py +++ b/libs/langchain/langchain/chains/rl_chain/vw_logger.py @@ -1,6 +1,6 @@ -from typing import Union, Optional -from pathlib import Path from os import PathLike +from pathlib import Path +from typing import Optional, Union class VwLogger: diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py index 0a5ba9dd314..1d8045e7c91 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py @@ -111,7 +111,7 @@ def test_update_with_delayed_score(): ) assert response["response"] == "hey" selection_metadata = response["selection_metadata"] - assert selection_metadata.selected.score == None + assert selection_metadata.selected.score is None chain.update_with_delayed_score(event=selection_metadata, score=100) assert selection_metadata.selected.score == 100.0 @@ -157,7 +157,7 @@ def test_default_embeddings(): ctx_str_2 = "context2" encoded_ctx_str_1 = encoded_text + " ".join(char for char in ctx_str_1) - encoded_ctx_str_2 = encoded_text + " ".join(char for char in ctx_str_2) + encoded_text + " ".join(char for char in ctx_str_2) expected = f"""shared |User {ctx_str_1 + " " + encoded_ctx_str_1} \n|action {str1 + " " + encoded_str1} \n|action {str2 + " " + encoded_str2} \n|action {str3 + " " + encoded_str3} """ @@ -261,7 +261,7 @@ def test_explicitly_no_scorer(): # chain llm used for both basic prompt and for scoring assert response["response"] == "hey" selection_metadata = response["selection_metadata"] - assert selection_metadata.selected.score == None + assert selection_metadata.selected.score is None @pytest.mark.requires("vowpal_wabbit_next") diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py index 501700a69ad..2eda4b4488b 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py @@ -235,12 +235,12 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_emb(): str2 = "1" str3 = "2" encoded_str1 = encoded_text + " ".join(char for char in str1) - encoded_str2 = encoded_text + " ".join(char for char in str2) + encoded_text + " ".join(char for char in str2) encoded_str3 = encoded_text + " ".join(char for char in str3) ctx_str_1 = "context1" ctx_str_2 = "context2" - encoded_ctx_str_1 = encoded_text + " ".join(char for char in ctx_str_1) + encoded_text + " ".join(char for char in ctx_str_1) encoded_ctx_str_2 = encoded_text + " ".join(char for char in ctx_str_2) named_actions = { @@ -269,12 +269,12 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_embed_and_ str2 = "1" str3 = "2" encoded_str1 = encoded_text + " ".join(char for char in str1) - encoded_str2 = encoded_text + " ".join(char for char in str2) + encoded_text + " ".join(char for char in str2) encoded_str3 = encoded_text + " ".join(char for char in str3) ctx_str_1 = "context1" ctx_str_2 = "context2" - encoded_ctx_str_1 = encoded_text + " ".join(char for char in ctx_str_1) + encoded_text + " ".join(char for char in ctx_str_1) encoded_ctx_str_2 = encoded_text + " ".join(char for char in ctx_str_2) named_actions = { From e276ae26160693dd6a1ce14b353453c7e9938a2b Mon Sep 17 00:00:00 2001 From: olgavrou Date: Fri, 18 Aug 2023 07:12:39 -0400 Subject: [PATCH 4/6] linting and formatting --- .../rl_chain/test_pick_best_chain_call.py | 6 +++--- .../rl_chain/test_pick_best_text_embedder.py | 20 +++++++++---------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py index 1d8045e7c91..e42818ea8c9 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py @@ -159,7 +159,7 @@ def test_default_embeddings(): encoded_ctx_str_1 = encoded_text + " ".join(char for char in ctx_str_1) encoded_text + " ".join(char for char in ctx_str_2) - expected = f"""shared |User {ctx_str_1 + " " + encoded_ctx_str_1} \n|action {str1 + " " + encoded_str1} \n|action {str2 + " " + encoded_str2} \n|action {str3 + " " + encoded_str3} """ + expected = f"""shared |User {ctx_str_1 + " " + encoded_ctx_str_1} \n|action {str1 + " " + encoded_str1} \n|action {str2 + " " + encoded_str2} \n|action {str3 + " " + encoded_str3} """ # noqa actions = [str1, str2, str3] @@ -185,7 +185,7 @@ def test_default_embeddings_off(): str3 = "2" ctx_str_1 = "context1" - expected = f"""shared |User {ctx_str_1} \n|action {str1} \n|action {str2} \n|action {str3} """ + expected = f"""shared |User {ctx_str_1} \n|action {str1} \n|action {str2} \n|action {str3} """ # noqa actions = [str1, str2, str3] @@ -219,7 +219,7 @@ def test_default_embeddings_mixed_w_explicit_user_embeddings(): encoded_ctx_str_1 = encoded_text + " ".join(char for char in ctx_str_1) encoded_ctx_str_2 = encoded_text + " ".join(char for char in ctx_str_2) - expected = f"""shared |User {encoded_ctx_str_1} |User2 {ctx_str_2 + " " + encoded_ctx_str_2} \n|action {str1 + " " + encoded_str1} \n|action {str2 + " " + encoded_str2} \n|action {encoded_str3} """ + expected = f"""shared |User {encoded_ctx_str_1} |User2 {ctx_str_2 + " " + encoded_ctx_str_2} \n|action {str1 + " " + encoded_str1} \n|action {str2 + " " + encoded_str2} \n|action {encoded_str3} """ # noqa actions = [str1, str2, rl_chain.Embed(str3)] diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py index 2eda4b4488b..d8ea85c6ebc 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_text_embedder.py @@ -89,7 +89,7 @@ def test_pickbest_textembedder_w_full_label_w_emb(): named_actions = {"action1": rl_chain.Embed([str1, str2, str3])} context = {"context": rl_chain.Embed(ctx_str_1)} - expected = f"""shared |context {encoded_ctx_str_1} \n0:-0.0:1.0 |action1 {encoded_str1} \n|action1 {encoded_str2} \n|action1 {encoded_str3} """ + expected = f"""shared |context {encoded_ctx_str_1} \n0:-0.0:1.0 |action1 {encoded_str1} \n|action1 {encoded_str2} \n|action1 {encoded_str3} """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0, score=0.0) event = pick_best_chain.PickBest.Event( inputs={}, to_select_from=named_actions, based_on=context, selected=selected @@ -113,7 +113,7 @@ def test_pickbest_textembedder_w_full_label_w_embed_and_keep(): named_actions = {"action1": rl_chain.EmbedAndKeep([str1, str2, str3])} context = {"context": rl_chain.EmbedAndKeep(ctx_str_1)} - expected = f"""shared |context {ctx_str_1 + " " + encoded_ctx_str_1} \n0:-0.0:1.0 |action1 {str1 + " " + encoded_str1} \n|action1 {str2 + " " + encoded_str2} \n|action1 {str3 + " " + encoded_str3} """ + expected = f"""shared |context {ctx_str_1 + " " + encoded_ctx_str_1} \n0:-0.0:1.0 |action1 {str1 + " " + encoded_str1} \n|action1 {str2 + " " + encoded_str2} \n|action1 {str3 + " " + encoded_str3} """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0, score=0.0) event = pick_best_chain.PickBest.Event( inputs={}, to_select_from=named_actions, based_on=context, selected=selected @@ -127,7 +127,7 @@ def test_pickbest_textembedder_more_namespaces_no_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": [{"a": "0", "b": "0"}, "1", "2"]} context = {"context1": "context1", "context2": "context2"} - expected = """shared |context1 context1 |context2 context2 \n|a 0 |b 0 \n|action1 1 \n|action1 2 """ + expected = """shared |context1 context1 |context2 context2 \n|a 0 |b 0 \n|action1 1 \n|action1 2 """ # noqa: E501 event = pick_best_chain.PickBest.Event( inputs={}, to_select_from=named_actions, based_on=context ) @@ -140,7 +140,7 @@ def test_pickbest_textembedder_more_namespaces_w_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": [{"a": "0", "b": "0"}, "1", "2"]} context = {"context1": "context1", "context2": "context2"} - expected = """shared |context1 context1 |context2 context2 \n|a 0 |b 0 \n|action1 1 \n|action1 2 """ + expected = """shared |context1 context1 |context2 context2 \n|a 0 |b 0 \n|action1 1 \n|action1 2 """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0) event = pick_best_chain.PickBest.Event( inputs={}, to_select_from=named_actions, based_on=context, selected=selected @@ -154,7 +154,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_no_emb(): feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) named_actions = {"action1": [{"a": "0", "b": "0"}, "1", "2"]} context = {"context1": "context1", "context2": "context2"} - expected = """shared |context1 context1 |context2 context2 \n0:-0.0:1.0 |a 0 |b 0 \n|action1 1 \n|action1 2 """ + expected = """shared |context1 context1 |context2 context2 \n0:-0.0:1.0 |a 0 |b 0 \n|action1 1 \n|action1 2 """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0, score=0.0) event = pick_best_chain.PickBest.Event( inputs={}, to_select_from=named_actions, based_on=context, selected=selected @@ -184,7 +184,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_emb(): "context1": rl_chain.Embed(ctx_str_1), "context2": rl_chain.Embed(ctx_str_2), } - expected = f"""shared |context1 {encoded_ctx_str_1} |context2 {encoded_ctx_str_2} \n0:-0.0:1.0 |a {encoded_str1} |b {encoded_str1} \n|action1 {encoded_str2} \n|action1 {encoded_str3} """ + expected = f"""shared |context1 {encoded_ctx_str_1} |context2 {encoded_ctx_str_2} \n0:-0.0:1.0 |a {encoded_str1} |b {encoded_str1} \n|action1 {encoded_str2} \n|action1 {encoded_str3} """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0, score=0.0) event = pick_best_chain.PickBest.Event( @@ -217,7 +217,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_full_embed_and_kee "context1": rl_chain.EmbedAndKeep(ctx_str_1), "context2": rl_chain.EmbedAndKeep(ctx_str_2), } - expected = f"""shared |context1 {ctx_str_1 + " " + encoded_ctx_str_1} |context2 {ctx_str_2 + " " + encoded_ctx_str_2} \n0:-0.0:1.0 |a {str1 + " " + encoded_str1} |b {str1 + " " + encoded_str1} \n|action1 {str2 + " " + encoded_str2} \n|action1 {str3 + " " + encoded_str3} """ + expected = f"""shared |context1 {ctx_str_1 + " " + encoded_ctx_str_1} |context2 {ctx_str_2 + " " + encoded_ctx_str_2} \n0:-0.0:1.0 |a {str1 + " " + encoded_str1} |b {str1 + " " + encoded_str1} \n|action1 {str2 + " " + encoded_str2} \n|action1 {str3 + " " + encoded_str3} """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0, score=0.0) event = pick_best_chain.PickBest.Event( @@ -251,7 +251,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_emb(): ] } context = {"context1": ctx_str_1, "context2": rl_chain.Embed(ctx_str_2)} - expected = f"""shared |context1 {ctx_str_1} |context2 {encoded_ctx_str_2} \n0:-0.0:1.0 |a {str1} |b {encoded_str1} \n|action1 {str2} \n|action1 {encoded_str3} """ + expected = f"""shared |context1 {ctx_str_1} |context2 {encoded_ctx_str_2} \n0:-0.0:1.0 |a {str1} |b {encoded_str1} \n|action1 {str2} \n|action1 {encoded_str3} """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0, score=0.0) event = pick_best_chain.PickBest.Event( @@ -288,7 +288,7 @@ def test_pickbest_textembedder_more_namespaces_w_full_label_w_partial_embed_and_ "context1": ctx_str_1, "context2": rl_chain.EmbedAndKeep(ctx_str_2), } - expected = f"""shared |context1 {ctx_str_1} |context2 {ctx_str_2 + " " + encoded_ctx_str_2} \n0:-0.0:1.0 |a {str1} |b {str1 + " " + encoded_str1} \n|action1 {str2} \n|action1 {str3 + " " + encoded_str3} """ + expected = f"""shared |context1 {ctx_str_1} |context2 {ctx_str_2 + " " + encoded_ctx_str_2} \n0:-0.0:1.0 |a {str1} |b {str1 + " " + encoded_str1} \n|action1 {str2} \n|action1 {str3 + " " + encoded_str3} """ # noqa: E501 selected = pick_best_chain.PickBest.Selected(index=0, probability=1.0, score=0.0) event = pick_best_chain.PickBest.Event( @@ -334,7 +334,7 @@ def test_raw_features_underscored(): # Embeddings and raw features named_actions = {"action": rl_chain.EmbedAndKeep([str1])} context = {"context": rl_chain.EmbedAndKeep(ctx_str)} - expected_embed_and_keep = f"""shared |context {ctx_str_underscored + " " + encoded_ctx_str} \n|action {str1_underscored + " " + encoded_str1} """ + expected_embed_and_keep = f"""shared |context {ctx_str_underscored + " " + encoded_ctx_str} \n|action {str1_underscored + " " + encoded_str1} """ # noqa: E501 event = pick_best_chain.PickBest.Event( inputs={}, to_select_from=named_actions, based_on=context ) From 44badd07077879d092fdd53ae29fc8fc8f418756 Mon Sep 17 00:00:00 2001 From: olgavrou Date: Fri, 18 Aug 2023 07:19:56 -0400 Subject: [PATCH 5/6] add dependency requirements to test file --- .../langchain/chains/rl_chain/base.py | 2 +- .../rl_chain/test_pick_best_chain_call.py | 30 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/libs/langchain/langchain/chains/rl_chain/base.py b/libs/langchain/langchain/chains/rl_chain/base.py index 437053f2dc1..28baf898d2c 100644 --- a/libs/langchain/langchain/chains/rl_chain/base.py +++ b/libs/langchain/langchain/chains/rl_chain/base.py @@ -471,7 +471,7 @@ class RLChain(Chain): def save_progress(self) -> None: """ - This function should be called to save the state of the Vowpal Wabbit model. + This function should be called to save the state of the learned policy model. """ self.policy.save() diff --git a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py index e42818ea8c9..3fad1667d91 100644 --- a/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py +++ b/libs/langchain/tests/unit_tests/chains/rl_chain/test_pick_best_chain_call.py @@ -9,7 +9,7 @@ from langchain.prompts.prompt import PromptTemplate encoded_text = "[ e n c o d e d ] " -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def setup(): _PROMPT_TEMPLATE = """This is a dummy prompt that will be ignored by the fake llm""" PROMPT = PromptTemplate(input_variables=[], template=_PROMPT_TEMPLATE) @@ -18,7 +18,7 @@ def setup(): return llm, PROMPT -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_multiple_ToSelectFrom_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) @@ -31,7 +31,7 @@ def test_multiple_ToSelectFrom_throws(): ) -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_missing_basedOn_from_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) @@ -40,7 +40,7 @@ def test_missing_basedOn_from_throws(): chain.run(action=rl_chain.ToSelectFrom(actions)) -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_ToSelectFrom_not_a_list_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) @@ -52,7 +52,7 @@ def test_ToSelectFrom_not_a_list_throws(): ) -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_update_with_delayed_score_with_auto_validator_throws(): llm, PROMPT = setup() # this LLM returns a number so that the auto validator will return that @@ -74,7 +74,7 @@ def test_update_with_delayed_score_with_auto_validator_throws(): chain.update_with_delayed_score(event=selection_metadata, score=100) -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_update_with_delayed_score_force(): llm, PROMPT = setup() # this LLM returns a number so that the auto validator will return that @@ -98,7 +98,7 @@ def test_update_with_delayed_score_force(): assert selection_metadata.selected.score == 100.0 -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_update_with_delayed_score(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm( @@ -116,7 +116,7 @@ def test_update_with_delayed_score(): assert selection_metadata.selected.score == 100.0 -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_user_defined_scorer(): llm, PROMPT = setup() @@ -138,7 +138,7 @@ def test_user_defined_scorer(): assert selection_metadata.selected.score == 200.0 -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_default_embeddings(): llm, PROMPT = setup() feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -172,7 +172,7 @@ def test_default_embeddings(): assert vw_str == expected -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_default_embeddings_off(): llm, PROMPT = setup() feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -198,7 +198,7 @@ def test_default_embeddings_off(): assert vw_str == expected -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_default_embeddings_mixed_w_explicit_user_embeddings(): llm, PROMPT = setup() feature_embedder = pick_best_chain.PickBestFeatureEmbedder(model=MockEncoder()) @@ -233,7 +233,7 @@ def test_default_embeddings_mixed_w_explicit_user_embeddings(): assert vw_str == expected -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_default_no_scorer_specified(): _, PROMPT = setup() chain_llm = FakeListChatModel(responses=[100]) @@ -248,7 +248,7 @@ def test_default_no_scorer_specified(): assert selection_metadata.selected.score == 100.0 -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_explicitly_no_scorer(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm( @@ -264,7 +264,7 @@ def test_explicitly_no_scorer(): assert selection_metadata.selected.score is None -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_auto_scorer_with_user_defined_llm(): llm, PROMPT = setup() scorer_llm = FakeListChatModel(responses=[300]) @@ -283,7 +283,7 @@ def test_auto_scorer_with_user_defined_llm(): assert selection_metadata.selected.score == 300.0 -@pytest.mark.requires("vowpal_wabbit_next") +@pytest.mark.requires("vowpal_wabbit_next", "sentence_transformers") def test_calling_chain_w_reserved_inputs_throws(): llm, PROMPT = setup() chain = pick_best_chain.PickBest.from_llm(llm=llm, prompt=PROMPT) From c9e9c0eeae8c80dcf5babeca8b9223c8c0079810 Mon Sep 17 00:00:00 2001 From: olgavrou Date: Fri, 18 Aug 2023 07:56:20 -0400 Subject: [PATCH 6/6] add sentence transformers to extended test deps --- libs/langchain/poetry.lock | 4 ++-- libs/langchain/pyproject.toml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index 84d87636469..cff786972e6 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -10073,7 +10073,7 @@ clarifai = ["clarifai"] cohere = ["cohere"] docarray = ["docarray"] embeddings = ["sentence-transformers"] -extended-testing = ["amazon-textract-caller", "atlassian-python-api", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "faiss-cpu", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "openapi-schema-pydantic", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "streamlit", "sympy", "telethon", "tqdm", "vowpal-wabbit-next", "xata", "xmltodict"] +extended-testing = ["amazon-textract-caller", "atlassian-python-api", "beautifulsoup4", "bibtexparser", "cassio", "chardet", "esprima", "faiss-cpu", "feedparser", "geopandas", "gitpython", "gql", "html2text", "jinja2", "jq", "lxml", "mwparserfromhell", "mwxml", "newspaper3k", "openai", "openai", "openapi-schema-pydantic", "pandas", "pdfminer-six", "pgvector", "psychicapi", "py-trello", "pymupdf", "pypdf", "pypdfium2", "pyspark", "rank-bm25", "rapidfuzz", "requests-toolbelt", "scikit-learn", "sentence-transformers", "streamlit", "sympy", "telethon", "tqdm", "vowpal-wabbit-next", "xata", "xmltodict"] javascript = ["esprima"] llms = ["clarifai", "cohere", "huggingface_hub", "manifest-ml", "nlpcloud", "openai", "openlm", "torch", "transformers"] openai = ["openai", "tiktoken"] @@ -10083,4 +10083,4 @@ text-helpers = ["chardet"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "eba7c01296c1948ab432ca2bc70e274e79a4135d66b4c189d6bb95b5e0c41198" +content-hash = "706edba1e67116864e3245fe5851902ce987283b4f143fd9e15f094ecad87deb" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index 3d48a559685..f60ef26af9e 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -338,7 +338,8 @@ extended_testing = [ "xmltodict", "faiss-cpu", "openapi-schema-pydantic", - "vowpal-wabbit-next" + "vowpal-wabbit-next", + "sentence-transformers" ] [tool.ruff]