From ac632ddaf82d3cb0e97fceae7e41a49be82c148b Mon Sep 17 00:00:00 2001 From: Ivar Flakstad <69173633+ivarflakstad@users.noreply.github.com> Date: Tue, 12 Mar 2024 14:46:02 +0100 Subject: [PATCH 01/19] Add groq to deps and introduce new groq module --- dsp/modules/groq.py | 1 + poetry.lock | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 dsp/modules/groq.py diff --git a/dsp/modules/groq.py b/dsp/modules/groq.py new file mode 100644 index 0000000000..8526f49786 --- /dev/null +++ b/dsp/modules/groq.py @@ -0,0 +1 @@ +# stub for groq \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 4101cd486c..c0f89cf9ba 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -460,7 +460,7 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, @@ -1395,6 +1395,25 @@ files = [ [package.dependencies] colorama = ">=0.4" +[[package]] +name = "groq" +version = "0.4.2" +description = "The official Python library for the groq API" +optional = false +python-versions = ">=3.7" +files = [ + {file = "groq-0.4.2-py3-none-any.whl", hash = "sha256:5b2b472c64d9f35210e0487db465415d47162da3a114031ecbfc8843d26302a5"}, + {file = "groq-0.4.2.tar.gz", hash = "sha256:42e8b0abd0f2b2da024b9a747d28960d62951a5364f078e1537c9fceeca8259d"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +typing-extensions = ">=4.7,<5" + [[package]] name = "grpcio" version = "1.62.1" @@ -3744,7 +3763,7 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycparser" version = "2.21" description = "C parser in Python" -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, From 8d206e098168f743870f2291ff2547dc9bcd8517 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Wed, 13 Mar 2024 14:02:14 +0530 Subject: [PATCH 02/19] making predictinos fast --- dsp/modules/__init__.py | 2 + dsp/modules/groq.py | 1 - dsp/modules/groq_client.py | 166 +++++++++++++++++++++++++++++++++++++ dspy/__init__.py | 2 + poetry.lock | 15 ++-- pyproject.toml | 2 +- 6 files changed, 178 insertions(+), 10 deletions(-) delete mode 100644 dsp/modules/groq.py create mode 100644 dsp/modules/groq_client.py diff --git a/dsp/modules/__init__.py b/dsp/modules/__init__.py index 79e51402d5..b52d663cd5 100644 --- a/dsp/modules/__init__.py +++ b/dsp/modules/__init__.py @@ -8,6 +8,7 @@ from .databricks import * from .google import * from .gpt3 import * +from .groq_client import * from .hf import HFModel from .hf_client import Anyscale, HFClientTGI, Together from .mistral import * @@ -15,3 +16,4 @@ from .pyserini import * from .sbert import * from .sentence_vectorizer import * + diff --git a/dsp/modules/groq.py b/dsp/modules/groq.py deleted file mode 100644 index 8526f49786..0000000000 --- a/dsp/modules/groq.py +++ /dev/null @@ -1 +0,0 @@ -# stub for groq \ No newline at end of file diff --git a/dsp/modules/groq_client.py b/dsp/modules/groq_client.py new file mode 100644 index 0000000000..44c5915383 --- /dev/null +++ b/dsp/modules/groq_client.py @@ -0,0 +1,166 @@ +import logging +import os +import json +from typing import Any, Literal, Optional +import backoff +from groq import Groq, AsyncGroq +import groq +import functools + + +import dsp +from dsp.modules.cache_utils import CacheMemory, NotebookCacheMemory, cache_turn_on +from dsp.modules.lm import LM + + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format="%(message)s", + handlers=[logging.FileHandler("groq_usage.log")], +) + + + +def backoff_hdlr(details): + """Handler from https://pypi.org/project/backoff/""" + print( + "Backing off {wait:0.1f} seconds after {tries} tries " + "calling function {target} with kwargs " + "{kwargs}".format(**details), + ) + + +class GroqLM(LM): + """Wrapper around groq's API. + + Args: + model (str, optional): groq supported LLM model to use. Defaults to "mixtral-8x7b-32768". + api_key (Optional[str], optional): API provider Authentication token. use Defaults to None. + **kwargs: Additional arguments to pass to the API provider. + """ + + def __init__( + self, + model: str = "mixtral-8x7b-32768", + api_key: Optional[str] = None, + **kwargs, + ): + super().__init__(model) + + if api_key: + self.api_key = api_key + self.client = Groq(api_key = api_key) + + self.kwargs = { + "temperature": 0.0, + "max_tokens": 150, + "top_p": 1, + "frequency_penalty": 0, + "presence_penalty": 0, + "n": 1, + **kwargs, + } + models = self.client.models.list().data + if models is not None: + if model in [m.id for m in models]: + self.kwargs["model"] = model + self.history: list[dict[str, Any]] = [] + + + def log_usage(self, response): + """Log the total tokens from the Groq API response.""" + usage_data = response.get("usage") + if usage_data: + total_tokens = usage_data.get("total_tokens") + logging.info(f"{total_tokens}") + + def basic_request(self, prompt: str, **kwargs): + raw_kwargs = kwargs + + kwargs = {**self.kwargs, **kwargs} + + kwargs["messages"] = [{"role": "user", "content": prompt}] + response = self.chat_request(**kwargs) + + history = { + "prompt": prompt, + "response": response, + "kwargs": kwargs, + "raw_kwargs": raw_kwargs, + } + + self.history.append(history) + + return response + + @backoff.on_exception( + backoff.expo, + groq.RateLimitError, + max_time=1000, + on_backoff=backoff_hdlr, + ) + def request(self, prompt: str, **kwargs): + """Handles retreival of model completions whilst handling rate limiting and caching.""" + if "model_type" in kwargs: + del kwargs["model_type"] + + return self.basic_request(prompt, **kwargs) + + def _get_choice_text(self, choice) -> str: + return choice.message.content + + def chat_request(self, **kwargs): + """Handles retreival of model completions whilst handling rate limiting and caching.""" + response = self.client.chat.completions.create(**kwargs) + return response + + def __call__( + self, + prompt: str, + only_completed: bool = True, + return_sorted: bool = False, + **kwargs, + ) -> list[dict[str, Any]]: + """Retrieves completions from model. + + Args: + prompt (str): prompt to send to model + only_completed (bool, optional): return only completed responses and ignores completion due to length. Defaults to True. + return_sorted (bool, optional): sort the completion choices using the returned probabilities. Defaults to False. + + Returns: + list[dict[str, Any]]: list of completion choices + """ + + assert only_completed, "for now" + assert return_sorted is False, "for now" + response = self.request(prompt, **kwargs) + + if dsp.settings.log_openai_usage: + self.log_usage(response) + + choices = response.choices + + completions = [self._get_choice_text(c) for c in choices] + if return_sorted and kwargs.get("n", 1) > 1: + scored_completions = [] + + for c in choices: + tokens, logprobs = ( + c["logprobs"]["tokens"], + c["logprobs"]["token_logprobs"], + ) + + if "<|endoftext|>" in tokens: + index = tokens.index("<|endoftext|>") + 1 + tokens, logprobs = tokens[:index], logprobs[:index] + + avglog = sum(logprobs) / len(logprobs) + scored_completions.append((avglog, self._get_choice_text(c))) + + scored_completions = sorted(scored_completions, reverse=True) + completions = [c for _, c in scored_completions] + + return completions + diff --git a/dspy/__init__.py b/dspy/__init__.py index f2edcbfce6..558917744e 100644 --- a/dspy/__init__.py +++ b/dspy/__init__.py @@ -21,10 +21,12 @@ Pyserini = dsp.PyseriniRetriever Clarifai = dsp.ClarifaiLLM Google = dsp.Google +GROQ = dsp.GroqLM HFClientTGI = dsp.HFClientTGI HFClientVLLM = HFClientVLLM + Anyscale = dsp.Anyscale Together = dsp.Together HFModel = dsp.HFModel diff --git a/poetry.lock b/poetry.lock index c0f89cf9ba..625eefaa7b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3119,16 +3119,15 @@ files = [ ] [package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -tqdm = ">4" -typing-extensions = ">=4.7,<5" +aiohttp = "*" +requests = ">=2.20" +tqdm = "*" [package.extras] -datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +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"] [[package]] name = "opentelemetry-api" diff --git a/pyproject.toml b/pyproject.toml index 85ea9a1691..8094beb2a4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,7 +82,7 @@ python = ">=3.9,<3.12" pydantic = ">=2.5.0,<=2.7" backoff = "^2.2.1" joblib = "^1.3.2" -openai = ">=0.28.1,<2.0.0" +openai = "0.28.1" pandas = "^2.1.1" regex = "^2023.10.3" ujson = "^5.8.0" From f34fc1dba8e545fa54ab6d43bd7dcf4be92caab3 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Wed, 13 Mar 2024 14:31:40 +0530 Subject: [PATCH 03/19] making version compatible --- dspy/__init__.py | 1 - poetry.lock | 24 +++++++++++++++++------- pyproject.toml | 3 ++- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/dspy/__init__.py b/dspy/__init__.py index 558917744e..75d2332815 100644 --- a/dspy/__init__.py +++ b/dspy/__init__.py @@ -26,7 +26,6 @@ HFClientTGI = dsp.HFClientTGI HFClientVLLM = HFClientVLLM - Anyscale = dsp.Anyscale Together = dsp.Together HFModel = dsp.HFModel diff --git a/poetry.lock b/poetry.lock index 625eefaa7b..11a8a21f70 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3119,15 +3119,16 @@ files = [ ] [package.dependencies] -aiohttp = "*" -requests = ">=2.20" -tqdm = "*" +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.7,<5" [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.*)", "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"] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "opentelemetry-api" @@ -6383,13 +6384,22 @@ multidict = ">=4.0" [[package]] name = "zipp" +<<<<<<< HEAD version = "3.18.1" +======= +version = "3.18.0" +>>>>>>> cb6e2588 (making version compatible) description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ +<<<<<<< HEAD {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, +======= + {file = "zipp-3.18.0-py3-none-any.whl", hash = "sha256:c1bb803ed69d2cce2373152797064f7e79bc43f0a3748eb494096a867e0ebf79"}, + {file = "zipp-3.18.0.tar.gz", hash = "sha256:df8d042b02765029a09b157efd8e820451045890acc30f8e37dd2f94a060221f"}, +>>>>>>> cb6e2588 (making version compatible) ] [package.extras] diff --git a/pyproject.toml b/pyproject.toml index 8094beb2a4..c4550e20b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,6 +57,7 @@ docs = [ "autodoc_pydantic", "sphinx-reredirects>=0.1.2", "sphinx-automodapi==0.16.0", + ] dev = ["pytest>=6.2.5"] @@ -82,7 +83,7 @@ python = ">=3.9,<3.12" pydantic = ">=2.5.0,<=2.7" backoff = "^2.2.1" joblib = "^1.3.2" -openai = "0.28.1" +openai = ">=0.28.1,<2.0.0" pandas = "^2.1.1" regex = "^2023.10.3" ujson = "^5.8.0" From 9f4b07af115fd194556e6574786904e7026db546 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Wed, 13 Mar 2024 17:08:28 +0530 Subject: [PATCH 04/19] adding the inspect_history --- dsp/modules/groq_client.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dsp/modules/groq_client.py b/dsp/modules/groq_client.py index 44c5915383..14b1b70962 100644 --- a/dsp/modules/groq_client.py +++ b/dsp/modules/groq_client.py @@ -1,7 +1,7 @@ import logging import os import json -from typing import Any, Literal, Optional +from typing import Any, Literal, Optional, Required import backoff from groq import Groq, AsyncGroq import groq @@ -42,15 +42,18 @@ class GroqLM(LM): def __init__( self, + api_key: str, model: str = "mixtral-8x7b-32768", - api_key: Optional[str] = None, **kwargs, ): super().__init__(model) - + self.provider = "groq" if api_key: self.api_key = api_key self.client = Groq(api_key = api_key) + else: + raise ValueError("api_key is required for groq") + self.kwargs = { "temperature": 0.0, @@ -85,7 +88,7 @@ def basic_request(self, prompt: str, **kwargs): history = { "prompt": prompt, - "response": response, + "response": response.choices[0].message.content, "kwargs": kwargs, "raw_kwargs": raw_kwargs, } From c1fe9ace00f7f724e83e87b179b5b3fb4cc78ac0 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Thu, 14 Mar 2024 10:13:58 +0530 Subject: [PATCH 05/19] adding groq documentation --- docs/api/language_model_clients/Groq.md | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/api/language_model_clients/Groq.md diff --git a/docs/api/language_model_clients/Groq.md b/docs/api/language_model_clients/Groq.md new file mode 100644 index 0000000000..5f48accf4b --- /dev/null +++ b/docs/api/language_model_clients/Groq.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 9 +--- + +# dspy.GROQ + +### Usage + +```python +lm = dspy.GROQ(model='mixtral-8x7b-32768', api_key ="gsk_***" ) +``` + +### Constructor + +The constructor initializes the base class `LM` and verifies the provided arguments like the `api_key` for GROQ api retriver. The `kwargs` attribute is initialized with default values for relevant text generation parameters needed for communicating with the GPT API, such as `temperature`, `max_tokens`, `top_p`, `frequency_penalty`, `presence_penalty`, and `n`. + +```python +class GroqLM(LM): + def __init__( + self, + api_key: str, + model: str = "mixtral-8x7b-32768", + **kwargs, + ): +``` + + + +**Parameters:** +- `api_key` str: API provider authentication token. Defaults to None. +- `model` str: model name. Defaults to "mixtral-8x7b-32768' options: ['llama2-70b-4096', 'gemma-7b-it'] +- `**kwargs`: Additional language model arguments to pass to the API provider. + +### Methods + +#### `def __call__(self, prompt: str, only_completed: bool = True, return_sorted: bool = False, **kwargs, ) -> list[dict[str, Any]]:` + +Retrieves completions from GROQ by calling `request`. + +Internally, the method handles the specifics of preparing the request prompt and corresponding payload to obtain the response. + +After generation, the generated content look like `choice["message"]["content"]`. + +**Parameters:** +- `prompt` (_str_): Prompt to send to OpenAI. +- `only_completed` (_bool_, _optional_): Flag to return only completed responses and ignore completion due to length. Defaults to True. +- `return_sorted` (_bool_, _optional_): Flag to sort the completion choices using the returned averaged log-probabilities. Defaults to False. +- `**kwargs`: Additional keyword arguments for completion request. + +**Returns:** +- `List[Dict[str, Any]]`: List of completion choices. \ No newline at end of file From 60a7cb054d1344c5cbd83efa8aad6a96537f11ee Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Thu, 14 Mar 2024 19:20:15 +0530 Subject: [PATCH 06/19] comm remove --- dsp/modules/lm.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dsp/modules/lm.py b/dsp/modules/lm.py index 796d8b11bf..4af1dc80ec 100644 --- a/dsp/modules/lm.py +++ b/dsp/modules/lm.py @@ -77,9 +77,11 @@ def inspect_history(self, n: int = 1, skip: int = 0): if provider == "cohere": text = choices elif provider == "openai" or provider == "ollama": - text = " " + self._get_choice_text(choices[0]).strip() - elif provider == "clarifai": - text = choices + text = ' ' + self._get_choice_text(choices[0]).strip() + elif provider == "clarifai" or provider == "claude" : + text=choices + elif provider == "groq": + text = ' ' + choices elif provider == "google": text = choices[0].parts[0].text elif provider == "mistral": From d873bd77085f4c6319f8badd9bff766886a2395b Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Mon, 18 Mar 2024 11:13:03 +0530 Subject: [PATCH 07/19] unused imports removed and ruff check fixed --- dsp/modules/groq_client.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/dsp/modules/groq_client.py b/dsp/modules/groq_client.py index 14b1b70962..5b6b13734d 100644 --- a/dsp/modules/groq_client.py +++ b/dsp/modules/groq_client.py @@ -1,18 +1,13 @@ import logging -import os -import json -from typing import Any, Literal, Optional, Required +from typing import Any + import backoff -from groq import Groq, AsyncGroq import groq -import functools - +from groq import Groq import dsp -from dsp.modules.cache_utils import CacheMemory, NotebookCacheMemory, cache_turn_on from dsp.modules.lm import LM - # Configure logging logging.basicConfig( level=logging.INFO, @@ -165,5 +160,4 @@ def __call__( scored_completions = sorted(scored_completions, reverse=True) completions = [c for _, c in scored_completions] - return completions - + return completions \ No newline at end of file From b7883e88de6fd82f8f2427cff1bce77bf945bfa4 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Tue, 19 Mar 2024 10:50:32 +0530 Subject: [PATCH 08/19] poetry lock , imports resolved --- dsp/modules/groq_client.py | 12 +++++-- poetry.lock | 68 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/dsp/modules/groq_client.py b/dsp/modules/groq_client.py index 5b6b13734d..0f1d2ffe40 100644 --- a/dsp/modules/groq_client.py +++ b/dsp/modules/groq_client.py @@ -2,8 +2,14 @@ from typing import Any import backoff -import groq -from groq import Groq + +try: + import groq + from groq import Groq + groq_api_error = (groq.APIError, groq.RateLimitError) +except ImportError: + groq_api_error = (Exception) + import dsp from dsp.modules.lm import LM @@ -94,7 +100,7 @@ def basic_request(self, prompt: str, **kwargs): @backoff.on_exception( backoff.expo, - groq.RateLimitError, + groq_api_error, max_time=1000, on_backoff=backoff_hdlr, ) diff --git a/poetry.lock b/poetry.lock index 11a8a21f70..9b9501a9df 100644 --- a/poetry.lock +++ b/poetry.lock @@ -460,7 +460,7 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, @@ -1809,13 +1809,22 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", [[package]] name = "importlib-resources" +<<<<<<< HEAD version = "6.4.0" +======= +version = "6.3.1" +>>>>>>> a5434475 (poetry lock , imports resolved) description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ +<<<<<<< HEAD {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, +======= + {file = "importlib_resources-6.3.1-py3-none-any.whl", hash = "sha256:4811639ca7fa830abdb8e9ca0a104dc6ad13de691d9fe0d3173a71304f068159"}, + {file = "importlib_resources-6.3.1.tar.gz", hash = "sha256:29a3d16556e330c3c8fb8202118c5ff41241cc34cbfb25989bbad226d99b7995"}, +>>>>>>> a5434475 (poetry lock , imports resolved) ] [package.dependencies] @@ -2431,13 +2440,22 @@ mkdocs = ">=1.0.3" [[package]] name = "mkdocs-material" +<<<<<<< HEAD version = "9.5.15" +======= +version = "9.5.14" +>>>>>>> a5434475 (poetry lock , imports resolved) description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ +<<<<<<< HEAD {file = "mkdocs_material-9.5.15-py3-none-any.whl", hash = "sha256:e5c96dec3d19491de49ca643fc1dbb92b278e43cdb816c775bc47db77d9b62fb"}, {file = "mkdocs_material-9.5.15.tar.gz", hash = "sha256:39f03cca45e82bf54eb7456b5a18bd252eabfdd67f237a229471484a0a4d4635"}, +======= + {file = "mkdocs_material-9.5.14-py3-none-any.whl", hash = "sha256:a45244ac221fda46ecf8337f00ec0e5cb5348ab9ffb203ca2a0c313b0d4dbc27"}, + {file = "mkdocs_material-9.5.14.tar.gz", hash = "sha256:2a1f8e67cda2587ab93ecea9ba42d0ca61d1d7b5fad8cf690eeaeb39dcd4b9af"}, +>>>>>>> a5434475 (poetry lock , imports resolved) ] [package.dependencies] @@ -3109,13 +3127,22 @@ sympy = "*" [[package]] name = "openai" +<<<<<<< HEAD version = "1.14.3" +======= +version = "1.14.1" +>>>>>>> a5434475 (poetry lock , imports resolved) description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ +<<<<<<< HEAD {file = "openai-1.14.3-py3-none-any.whl", hash = "sha256:7a465994a7ccf677a110c6cc2ef9d86229bad42c060b585b67049aa749f3b774"}, {file = "openai-1.14.3.tar.gz", hash = "sha256:37b514e9c0ff45383ec9b242abd0f7859b1080d4b54b61393ed341ecad1b8eb9"}, +======= + {file = "openai-1.14.1-py3-none-any.whl", hash = "sha256:f9322b0bf3b82bbd06930fad535369a023f35a3a96d3ef0b827644a15d7aae97"}, + {file = "openai-1.14.1.tar.gz", hash = "sha256:1fab5dd623cdc0c7c6e7da5d8d11fa6900f94191c2dfb6510d7eac33195fa175"}, +>>>>>>> a5434475 (poetry lock , imports resolved) ] [package.dependencies] @@ -3763,7 +3790,7 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycparser" version = "2.21" description = "C parser in Python" -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, @@ -4570,11 +4597,16 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" +<<<<<<< HEAD version = "0.3.4" +======= +version = "0.3.3" +>>>>>>> a5434475 (poetry lock , imports resolved) description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ +<<<<<<< HEAD {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, @@ -4592,6 +4624,25 @@ files = [ {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, +======= + {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:973a0e388b7bc2e9148c7f9be8b8c6ae7471b9be37e1cc732f8f44a6f6d7720d"}, + {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfa60d23269d6e2031129b053fdb4e5a7b0637fc6c9c0586737b962b2f834493"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eca7ff7a47043cf6ce5c7f45f603b09121a7cc047447744b029d1b719278eb5"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7d3f6762217c1da954de24b4a1a70515630d29f71e268ec5000afe81377642d"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b24c19e8598916d9c6f5a5437671f55ee93c212a2c4c569605dc3842b6820386"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5a6cbf216b69c7090f0fe4669501a27326c34e119068c1494f35aaf4cc683778"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352e95ead6964974b234e16ba8a66dad102ec7bf8ac064a23f95371d8b198aab"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d6ab88c81c4040a817aa432484e838aaddf8bfd7ca70e4e615482757acb64f8"}, + {file = "ruff-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79bca3a03a759cc773fca69e0bdeac8abd1c13c31b798d5bb3c9da4a03144a9f"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2700a804d5336bcffe063fd789ca2c7b02b552d2e323a336700abb8ae9e6a3f8"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd66469f1a18fdb9d32e22b79f486223052ddf057dc56dea0caaf1a47bdfaf4e"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:45817af234605525cdf6317005923bf532514e1ea3d9270acf61ca2440691376"}, + {file = "ruff-0.3.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0da458989ce0159555ef224d5b7c24d3d2e4bf4c300b85467b08c3261c6bc6a8"}, + {file = "ruff-0.3.3-py3-none-win32.whl", hash = "sha256:f2831ec6a580a97f1ea82ea1eda0401c3cdf512cf2045fa3c85e8ef109e87de0"}, + {file = "ruff-0.3.3-py3-none-win_amd64.whl", hash = "sha256:be90bcae57c24d9f9d023b12d627e958eb55f595428bafcb7fec0791ad25ddfc"}, + {file = "ruff-0.3.3-py3-none-win_arm64.whl", hash = "sha256:0171aab5fecdc54383993389710a3d1227f2da124d76a2784a7098e818f92d61"}, + {file = "ruff-0.3.3.tar.gz", hash = "sha256:38671be06f57a2f8aba957d9f701ea889aa5736be806f18c0cd03d6ff0cbca8d"}, +>>>>>>> a5434475 (poetry lock , imports resolved) ] [[package]] @@ -6385,14 +6436,19 @@ multidict = ">=4.0" [[package]] name = "zipp" <<<<<<< HEAD +<<<<<<< HEAD version = "3.18.1" ======= version = "3.18.0" >>>>>>> cb6e2588 (making version compatible) +======= +version = "3.18.1" +>>>>>>> a5434475 (poetry lock , imports resolved) description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ +<<<<<<< HEAD <<<<<<< HEAD {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, @@ -6400,6 +6456,10 @@ files = [ {file = "zipp-3.18.0-py3-none-any.whl", hash = "sha256:c1bb803ed69d2cce2373152797064f7e79bc43f0a3748eb494096a867e0ebf79"}, {file = "zipp-3.18.0.tar.gz", hash = "sha256:df8d042b02765029a09b157efd8e820451045890acc30f8e37dd2f94a060221f"}, >>>>>>> cb6e2588 (making version compatible) +======= + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, +>>>>>>> a5434475 (poetry lock , imports resolved) ] [package.extras] @@ -6418,4 +6478,8 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" +<<<<<<< HEAD content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" +======= +content-hash = "01ebe9c08886c5a57ce146d6437016fb2bb0abeaea96ae3e41469f4320332b76" +>>>>>>> a5434475 (poetry lock , imports resolved) From 35697546420d9b967899fdada8074b2227b7ec83 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Wed, 20 Mar 2024 11:41:11 +0530 Subject: [PATCH 09/19] adding it as optino --- poetry.lock | 75 +---------------------------------------------------- 1 file changed, 1 insertion(+), 74 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9b9501a9df..aa6318fa99 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1809,22 +1809,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", [[package]] name = "importlib-resources" -<<<<<<< HEAD version = "6.4.0" -======= -version = "6.3.1" ->>>>>>> a5434475 (poetry lock , imports resolved) description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ -<<<<<<< HEAD {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, -======= - {file = "importlib_resources-6.3.1-py3-none-any.whl", hash = "sha256:4811639ca7fa830abdb8e9ca0a104dc6ad13de691d9fe0d3173a71304f068159"}, - {file = "importlib_resources-6.3.1.tar.gz", hash = "sha256:29a3d16556e330c3c8fb8202118c5ff41241cc34cbfb25989bbad226d99b7995"}, ->>>>>>> a5434475 (poetry lock , imports resolved) ] [package.dependencies] @@ -2440,22 +2431,13 @@ mkdocs = ">=1.0.3" [[package]] name = "mkdocs-material" -<<<<<<< HEAD version = "9.5.15" -======= -version = "9.5.14" ->>>>>>> a5434475 (poetry lock , imports resolved) description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ -<<<<<<< HEAD {file = "mkdocs_material-9.5.15-py3-none-any.whl", hash = "sha256:e5c96dec3d19491de49ca643fc1dbb92b278e43cdb816c775bc47db77d9b62fb"}, {file = "mkdocs_material-9.5.15.tar.gz", hash = "sha256:39f03cca45e82bf54eb7456b5a18bd252eabfdd67f237a229471484a0a4d4635"}, -======= - {file = "mkdocs_material-9.5.14-py3-none-any.whl", hash = "sha256:a45244ac221fda46ecf8337f00ec0e5cb5348ab9ffb203ca2a0c313b0d4dbc27"}, - {file = "mkdocs_material-9.5.14.tar.gz", hash = "sha256:2a1f8e67cda2587ab93ecea9ba42d0ca61d1d7b5fad8cf690eeaeb39dcd4b9af"}, ->>>>>>> a5434475 (poetry lock , imports resolved) ] [package.dependencies] @@ -3127,22 +3109,13 @@ sympy = "*" [[package]] name = "openai" -<<<<<<< HEAD version = "1.14.3" -======= -version = "1.14.1" ->>>>>>> a5434475 (poetry lock , imports resolved) description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ -<<<<<<< HEAD {file = "openai-1.14.3-py3-none-any.whl", hash = "sha256:7a465994a7ccf677a110c6cc2ef9d86229bad42c060b585b67049aa749f3b774"}, {file = "openai-1.14.3.tar.gz", hash = "sha256:37b514e9c0ff45383ec9b242abd0f7859b1080d4b54b61393ed341ecad1b8eb9"}, -======= - {file = "openai-1.14.1-py3-none-any.whl", hash = "sha256:f9322b0bf3b82bbd06930fad535369a023f35a3a96d3ef0b827644a15d7aae97"}, - {file = "openai-1.14.1.tar.gz", hash = "sha256:1fab5dd623cdc0c7c6e7da5d8d11fa6900f94191c2dfb6510d7eac33195fa175"}, ->>>>>>> a5434475 (poetry lock , imports resolved) ] [package.dependencies] @@ -4597,16 +4570,11 @@ pyasn1 = ">=0.1.3" [[package]] name = "ruff" -<<<<<<< HEAD version = "0.3.4" -======= -version = "0.3.3" ->>>>>>> a5434475 (poetry lock , imports resolved) description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ -<<<<<<< HEAD {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, @@ -4624,25 +4592,6 @@ files = [ {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, -======= - {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:973a0e388b7bc2e9148c7f9be8b8c6ae7471b9be37e1cc732f8f44a6f6d7720d"}, - {file = "ruff-0.3.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:cfa60d23269d6e2031129b053fdb4e5a7b0637fc6c9c0586737b962b2f834493"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eca7ff7a47043cf6ce5c7f45f603b09121a7cc047447744b029d1b719278eb5"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7d3f6762217c1da954de24b4a1a70515630d29f71e268ec5000afe81377642d"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b24c19e8598916d9c6f5a5437671f55ee93c212a2c4c569605dc3842b6820386"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5a6cbf216b69c7090f0fe4669501a27326c34e119068c1494f35aaf4cc683778"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352e95ead6964974b234e16ba8a66dad102ec7bf8ac064a23f95371d8b198aab"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d6ab88c81c4040a817aa432484e838aaddf8bfd7ca70e4e615482757acb64f8"}, - {file = "ruff-0.3.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79bca3a03a759cc773fca69e0bdeac8abd1c13c31b798d5bb3c9da4a03144a9f"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2700a804d5336bcffe063fd789ca2c7b02b552d2e323a336700abb8ae9e6a3f8"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:fd66469f1a18fdb9d32e22b79f486223052ddf057dc56dea0caaf1a47bdfaf4e"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:45817af234605525cdf6317005923bf532514e1ea3d9270acf61ca2440691376"}, - {file = "ruff-0.3.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0da458989ce0159555ef224d5b7c24d3d2e4bf4c300b85467b08c3261c6bc6a8"}, - {file = "ruff-0.3.3-py3-none-win32.whl", hash = "sha256:f2831ec6a580a97f1ea82ea1eda0401c3cdf512cf2045fa3c85e8ef109e87de0"}, - {file = "ruff-0.3.3-py3-none-win_amd64.whl", hash = "sha256:be90bcae57c24d9f9d023b12d627e958eb55f595428bafcb7fec0791ad25ddfc"}, - {file = "ruff-0.3.3-py3-none-win_arm64.whl", hash = "sha256:0171aab5fecdc54383993389710a3d1227f2da124d76a2784a7098e818f92d61"}, - {file = "ruff-0.3.3.tar.gz", hash = "sha256:38671be06f57a2f8aba957d9f701ea889aa5736be806f18c0cd03d6ff0cbca8d"}, ->>>>>>> a5434475 (poetry lock , imports resolved) ] [[package]] @@ -6435,31 +6384,13 @@ multidict = ">=4.0" [[package]] name = "zipp" -<<<<<<< HEAD -<<<<<<< HEAD version = "3.18.1" -======= -version = "3.18.0" ->>>>>>> cb6e2588 (making version compatible) -======= -version = "3.18.1" ->>>>>>> a5434475 (poetry lock , imports resolved) description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ -<<<<<<< HEAD -<<<<<<< HEAD - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, -======= - {file = "zipp-3.18.0-py3-none-any.whl", hash = "sha256:c1bb803ed69d2cce2373152797064f7e79bc43f0a3748eb494096a867e0ebf79"}, - {file = "zipp-3.18.0.tar.gz", hash = "sha256:df8d042b02765029a09b157efd8e820451045890acc30f8e37dd2f94a060221f"}, ->>>>>>> cb6e2588 (making version compatible) -======= {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ->>>>>>> a5434475 (poetry lock , imports resolved) ] [package.extras] @@ -6478,8 +6409,4 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -<<<<<<< HEAD -content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" -======= -content-hash = "01ebe9c08886c5a57ce146d6437016fb2bb0abeaea96ae3e41469f4320332b76" ->>>>>>> a5434475 (poetry lock , imports resolved) +content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" \ No newline at end of file From c8758bda24186885412a47a8ba864854ec03af3f Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Wed, 20 Mar 2024 11:43:06 +0530 Subject: [PATCH 10/19] adding poetry lock --- poetry.lock | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/poetry.lock b/poetry.lock index aa6318fa99..be2cbdc074 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1399,7 +1399,7 @@ colorama = ">=0.4" name = "groq" version = "0.4.2" description = "The official Python library for the groq API" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "groq-0.4.2-py3-none-any.whl", hash = "sha256:5b2b472c64d9f35210e0487db465415d47162da3a114031ecbfc8843d26302a5"}, @@ -5758,26 +5758,15 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)" [[package]] name = "validators" -version = "0.22.0" +version = "0.23.2" description = "Python Data Validation for Humans™" optional = true python-versions = ">=3.8" files = [ - {file = "validators-0.22.0-py3-none-any.whl", hash = "sha256:61cf7d4a62bbae559f2e54aed3b000cea9ff3e2fdbe463f51179b92c58c9585a"}, - {file = "validators-0.22.0.tar.gz", hash = "sha256:77b2689b172eeeb600d9605ab86194641670cdb73b60afd577142a9397873370"}, + {file = "validators-0.23.2-py3-none-any.whl", hash = "sha256:cb68e489f946f4934dbd3c203f08486c53493ab1c204f39d13b13c209f60e2c1"}, + {file = "validators-0.23.2.tar.gz", hash = "sha256:397ec4a1e86192e6e904b5afe8c12da0e6eaa3db088c0cc426e00cfee2ef07a8"}, ] -[package.extras] -docs-offline = ["myst-parser (>=2.0.0)", "pypandoc-binary (>=1.11)", "sphinx (>=7.1.1)"] -docs-online = ["mkdocs (>=1.5.2)", "mkdocs-git-revision-date-localized-plugin (>=1.2.0)", "mkdocs-material (>=9.2.6)", "mkdocstrings[python] (>=0.22.0)", "pyaml (>=23.7.0)"] -hooks = ["pre-commit (>=3.3.3)"] -package = ["build (>=1.0.0)", "twine (>=4.0.2)"] -runner = ["tox (>=4.11.1)"] -sast = ["bandit[toml] (>=1.7.5)"] -testing = ["pytest (>=7.4.0)"] -tooling = ["black (>=23.7.0)", "pyright (>=1.1.325)", "ruff (>=0.0.287)"] -tooling-extras = ["pyaml (>=23.7.0)", "pypandoc-binary (>=1.11)", "pytest (>=7.4.0)"] - [[package]] name = "verspec" version = "0.1.0" @@ -6409,4 +6398,4 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" \ No newline at end of file +content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" From 47d112ec3a7120f555ba73554252e2889aec1c22 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Fri, 15 Mar 2024 16:21:20 +0530 Subject: [PATCH 11/19] adding the together fix --- dsp/modules/hf_client.py | 49 +++++++++++++++++++++++---------------- poetry.lock | 50 ++++++++++++++++++++-------------------- 2 files changed, 54 insertions(+), 45 deletions(-) diff --git a/dsp/modules/hf_client.py b/dsp/modules/hf_client.py index 56bbbb2ab9..c850c46d8c 100644 --- a/dsp/modules/hf_client.py +++ b/dsp/modules/hf_client.py @@ -218,11 +218,11 @@ def run_server(self, port, model_name=None, model_path=None, env_variable=None, docker_process.wait() class Together(HFModel): - def __init__(self, model, **kwargs): + def __init__(self, model, api_key , **kwargs): super().__init__(model=model, is_client=True) self.session = requests.Session() - self.api_base = os.getenv("TOGETHER_API_BASE") - self.token = os.getenv("TOGETHER_API_KEY") + self.api_base = "https://api.together.xyz/v1/" + self.token = api_key self.model = model self.use_inst_template = False @@ -248,11 +248,9 @@ def __init__(self, model, **kwargs): max_time=1000, on_backoff=backoff_hdlr, ) - def _generate(self, prompt, use_chat_api=False, **kwargs): + def _generate(self, prompt, use_chat_api=True, **kwargs): url = f"{self.api_base}" - kwargs = {**self.kwargs, **kwargs} - stop = kwargs.get("stop") temperature = kwargs.get("temperature") max_tokens = kwargs.get("max_tokens", 150) @@ -272,10 +270,10 @@ def _generate(self, prompt, use_chat_api=False, **kwargs): "messages": messages, "temperature": temperature, "max_tokens": max_tokens, - "top_p": top_p, - "top_k": top_k, - "repetition_penalty": repetition_penalty, - "stop": stop, + # "top_p": top_p, + # "top_k": top_k, + # "repetition_penalty": repetition_penalty, + # "stop": stop, } else: body = { @@ -283,26 +281,37 @@ def _generate(self, prompt, use_chat_api=False, **kwargs): "prompt": prompt, "temperature": temperature, "max_tokens": max_tokens, - "top_p": top_p, - "top_k": top_k, - "repetition_penalty": repetition_penalty, - "stop": stop, + # "top_p": top_p, + # "top_k": top_k, + # "repetition_penalty": repetition_penalty, + # "stop": stop, } - headers = {"Authorization": f"Bearer {self.token}"} + headers = { + "Authorization": f"Bearer {self.token}", + "Content-Type": "application/json" + } + + try: + # print(url, headers, body) + # resp = requests.post(url, headers = headers , json = body) + # print(resp.text) + # return resp.json() - try: with self.session.post(url, headers=headers, json=body) as resp: + print(resp) resp_json = resp.json() + print(resp_json) if use_chat_api: - completions = [resp_json['output'].get('choices', [])[0].get('message', {}).get('content', "")] + completions = [resp_json.get('choices', [])[0].get('message', {}).get('content', "")] else: - completions = [resp_json['output'].get('choices', [])[0].get('text', "")] + completions = [resp_json.get('choices', [])[0].get('content', "")] response = {"prompt": prompt, "choices": [{"text": c} for c in completions]} return response except Exception as e: - if resp_json: - print(f"resp_json:{resp_json}") + pass + # if resp_json: + # print(f"resp_json:{resp_json}") print(f"Failed to parse JSON response: {e}") raise Exception("Received invalid JSON response from server") diff --git a/poetry.lock b/poetry.lock index be2cbdc074..2eeb7de0cb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -201,7 +201,7 @@ trio = ["trio (>=0.23)"] name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, @@ -212,7 +212,7 @@ files = [ name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" -optional = true +optional = false python-versions = "*" files = [ {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, @@ -767,7 +767,7 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] name = "comm" version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, @@ -882,7 +882,7 @@ vision = ["Pillow (>=6.2.1)"] name = "debugpy" version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, @@ -913,7 +913,7 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, @@ -1023,7 +1023,7 @@ test = ["pytest (>=6)"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, @@ -1840,7 +1840,7 @@ files = [ name = "ipykernel" version = "6.29.3" description = "IPython Kernel for Jupyter" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, @@ -1873,7 +1873,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio name = "ipython" version = "8.18.1" description = "IPython: Productive Interactive Computing" -optional = true +optional = false python-versions = ">=3.9" files = [ {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, @@ -1910,7 +1910,7 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, @@ -2019,7 +2019,7 @@ testing = ["coverage", "ipykernel", "jupytext", "matplotlib", "nbdime", "nbforma name = "jupyter-client" version = "8.6.1" description = "Jupyter protocol implementation and client libraries" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, @@ -2042,7 +2042,7 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-core" version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, @@ -2282,7 +2282,7 @@ urllib3 = "*" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, @@ -2776,7 +2776,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.6.0" description = "Patch asyncio to allow nested event loops" -optional = true +optional = false python-versions = ">=3.5" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, @@ -3344,7 +3344,7 @@ xml = ["lxml (>=4.9.2)"] name = "parso" version = "0.8.3" description = "A Python Parser" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, @@ -3370,7 +3370,7 @@ files = [ name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -optional = true +optional = false python-versions = "*" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, @@ -3512,7 +3512,7 @@ virtualenv = ">=20.10.0" name = "prompt-toolkit" version = "3.0.43" description = "Library for building powerful interactive command lines in Python" -optional = true +optional = false python-versions = ">=3.7.0" files = [ {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, @@ -3546,7 +3546,7 @@ files = [ name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." -optional = true +optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, @@ -3596,7 +3596,7 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -optional = true +optional = false python-versions = "*" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -3654,7 +3654,7 @@ functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "promet name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -optional = true +optional = false python-versions = "*" files = [ {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, @@ -4051,7 +4051,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -optional = true +optional = false python-versions = "*" files = [ {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, @@ -4148,7 +4148,7 @@ pyyaml = "*" name = "pyzmq" version = "25.1.2" description = "Python bindings for 0MQ" -optional = true +optional = false python-versions = ">=3.6" files = [ {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, @@ -5107,7 +5107,7 @@ sqlcipher = ["sqlcipher3_binary"] name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -optional = true +optional = false python-versions = "*" files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, @@ -5410,7 +5410,7 @@ optree = ["optree (>=0.9.1)"] name = "tornado" version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = true +optional = false python-versions = ">= 3.8" files = [ {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, @@ -5450,7 +5450,7 @@ telegram = ["requests"] name = "traitlets" version = "5.14.2" description = "Traitlets Python configuration system" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, @@ -5933,7 +5933,7 @@ anyio = ">=3.0.0" name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -optional = true +optional = false python-versions = "*" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, From 202e465548ec507e19da929b64a1c1143c748b40 Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Tue, 19 Mar 2024 12:54:33 +0530 Subject: [PATCH 12/19] adding together stuff --- dsp/modules/__init__.py | 1 + dsp/modules/together_client.py | 171 +++++++++++++++++++++++++++++++++ dspy/__init__.py | 2 +- 3 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 dsp/modules/together_client.py diff --git a/dsp/modules/__init__.py b/dsp/modules/__init__.py index b52d663cd5..db33ca29b0 100644 --- a/dsp/modules/__init__.py +++ b/dsp/modules/__init__.py @@ -9,6 +9,7 @@ from .google import * from .gpt3 import * from .groq_client import * +from .together_client import * from .hf import HFModel from .hf_client import Anyscale, HFClientTGI, Together from .mistral import * diff --git a/dsp/modules/together_client.py b/dsp/modules/together_client.py new file mode 100644 index 0000000000..4dc29ad658 --- /dev/null +++ b/dsp/modules/together_client.py @@ -0,0 +1,171 @@ +import logging +import os +import json +from typing import Any, Literal, Optional, Required +import backoff +import together +import functools +import openai + + + +import dsp +from dsp.modules.cache_utils import CacheMemory, NotebookCacheMemory, cache_turn_on +from dsp.modules.lm import LM + + +# Configure logging +logging.basicConfig( + level=logging.INFO, + format="%(message)s", + handlers=[logging.FileHandler("together_usage.log")], +) + +def backoff_hdlr(details): + """Handler from https://pypi.org/project/backoff/""" + print( + "Backing off {wait:0.1f} seconds after {tries} tries " + "calling function {target} with kwargs " + "{kwargs}".format(**details), + ) + + +class TogetherLM(LM): + """Wrapper around groq's API. + + Args: + model (str, optional): groq supported LLM model to use. Defaults to "mixtral-8x7b-32768". + api_key (Optional[str], optional): API provider Authentication token. use Defaults to None. + **kwargs: Additional arguments to pass to the API provider. + """ + + def __init__( + self, + api_key: str, + model: str = "mistralai/Mistral-7B-Instruct-v0.1", + **kwargs, + ): + super().__init__(model) + self.provider = "together" + if api_key: + self.client = openai.OpenAI( + api_key=api_key, + base_url="https://api.together.xyz/v1", + ) + + else: + raise ValueError("api_key is required for groq") + + + self.kwargs = { + "temperature": 0.0, + "max_tokens": 150, + "top_p": 1, + "frequency_penalty": 0, + "presence_penalty": 0, + "n": 1, + **kwargs, + } + # models = self.client.models.list().data + # if models is not None: + # if model in [m.id for m in models]: + self.kwargs["model"] = model + self.history: list[dict[str, Any]] = [] + + + def log_usage(self, response): + """Log the total tokens from the Groq API response.""" + usage_data = response.get("usage") + if usage_data: + total_tokens = usage_data.get("total_tokens") + logging.info(f"{total_tokens}") + + def basic_request(self, prompt: str, **kwargs): + raw_kwargs = kwargs + + kwargs = {**self.kwargs, **kwargs} + + kwargs["messages"] = [{"role": "user", "content": prompt}] + response = self.chat_request(**kwargs) + + history = { + "prompt": prompt, + "response": response.choices[0].message.content, + "kwargs": kwargs, + "raw_kwargs": raw_kwargs, + } + + self.history.append(history) + + return response + + @backoff.on_exception( + backoff.expo, + openai.RateLimitError, + max_time=1000, + on_backoff=backoff_hdlr, + ) + def request(self, prompt: str, **kwargs): + """Handles retreival of model completions whilst handling rate limiting and caching.""" + if "model_type" in kwargs: + del kwargs["model_type"] + + return self.basic_request(prompt, **kwargs) + + def _get_choice_text(self, choice) -> str: + return choice.message.content + + def chat_request(self, **kwargs): + """Handles retreival of model completions whilst handling rate limiting and caching.""" + response = self.client.chat.completions.create(**kwargs) + return response + + def __call__( + self, + prompt: str, + only_completed: bool = True, + return_sorted: bool = False, + **kwargs, + ) -> list[dict[str, Any]]: + """Retrieves completions from model. + + Args: + prompt (str): prompt to send to model + only_completed (bool, optional): return only completed responses and ignores completion due to length. Defaults to True. + return_sorted (bool, optional): sort the completion choices using the returned probabilities. Defaults to False. + + Returns: + list[dict[str, Any]]: list of completion choices + """ + + assert only_completed, "for now" + assert return_sorted is False, "for now" + response = self.request(prompt, **kwargs) + + if dsp.settings.log_openai_usage: + self.log_usage(response) + + choices = response.choices + + completions = [self._get_choice_text(c) for c in choices] + if return_sorted and kwargs.get("n", 1) > 1: + scored_completions = [] + + for c in choices: + tokens, logprobs = ( + c["logprobs"]["tokens"], + c["logprobs"]["token_logprobs"], + ) + + if "<|endoftext|>" in tokens: + index = tokens.index("<|endoftext|>") + 1 + tokens, logprobs = tokens[:index], logprobs[:index] + + avglog = sum(logprobs) / len(logprobs) + scored_completions.append((avglog, self._get_choice_text(c))) + + scored_completions = sorted(scored_completions, reverse=True) + completions = [c for _, c in scored_completions] + + return completions + diff --git a/dspy/__init__.py b/dspy/__init__.py index 75d2332815..6a5fdf7256 100644 --- a/dspy/__init__.py +++ b/dspy/__init__.py @@ -27,7 +27,7 @@ HFClientVLLM = HFClientVLLM Anyscale = dsp.Anyscale -Together = dsp.Together +Together = dsp.TogetherLM HFModel = dsp.HFModel OllamaLocal = dsp.OllamaLocal Bedrock = dsp.Bedrock From 50815ed036716caeab86cf4cc4b6bf06dca1925a Mon Sep 17 00:00:00 2001 From: Somesh Fengade Date: Tue, 26 Mar 2024 10:40:43 +0530 Subject: [PATCH 13/19] poetry lock changes --- poetry.lock | 53 ++++++++++++++++++++++++++--------------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2eeb7de0cb..dfa6004be2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -201,7 +201,7 @@ trio = ["trio (>=0.23)"] name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, @@ -212,7 +212,7 @@ files = [ name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" -optional = false +optional = true python-versions = "*" files = [ {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, @@ -767,7 +767,7 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] name = "comm" version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, @@ -882,7 +882,7 @@ vision = ["Pillow (>=6.2.1)"] name = "debugpy" version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "debugpy-1.8.1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741"}, @@ -913,7 +913,7 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -optional = false +optional = true python-versions = ">=3.5" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, @@ -1023,7 +1023,7 @@ test = ["pytest (>=6)"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" -optional = false +optional = true python-versions = ">=3.5" files = [ {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, @@ -1840,7 +1840,7 @@ files = [ name = "ipykernel" version = "6.29.3" description = "IPython Kernel for Jupyter" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, @@ -1873,7 +1873,7 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio name = "ipython" version = "8.18.1" description = "IPython: Productive Interactive Computing" -optional = false +optional = true python-versions = ">=3.9" files = [ {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, @@ -1910,7 +1910,7 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, @@ -2019,7 +2019,7 @@ testing = ["coverage", "ipykernel", "jupytext", "matplotlib", "nbdime", "nbforma name = "jupyter-client" version = "8.6.1" description = "Jupyter protocol implementation and client libraries" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, @@ -2042,7 +2042,7 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-core" version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, @@ -2282,7 +2282,7 @@ urllib3 = "*" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -optional = false +optional = true python-versions = ">=3.5" files = [ {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, @@ -2776,7 +2776,7 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nest-asyncio" version = "1.6.0" description = "Patch asyncio to allow nested event loops" -optional = false +optional = true python-versions = ">=3.5" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, @@ -3344,7 +3344,7 @@ xml = ["lxml (>=4.9.2)"] name = "parso" version = "0.8.3" description = "A Python Parser" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, @@ -3370,7 +3370,7 @@ files = [ name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -optional = false +optional = true python-versions = "*" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, @@ -3512,7 +3512,7 @@ virtualenv = ">=20.10.0" name = "prompt-toolkit" version = "3.0.43" description = "Library for building powerful interactive command lines in Python" -optional = false +optional = true python-versions = ">=3.7.0" files = [ {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, @@ -3546,7 +3546,7 @@ files = [ name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." -optional = false +optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, @@ -3596,7 +3596,7 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -optional = false +optional = true python-versions = "*" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, @@ -3654,7 +3654,7 @@ functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "promet name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -optional = false +optional = true python-versions = "*" files = [ {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, @@ -4051,7 +4051,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -optional = false +optional = true python-versions = "*" files = [ {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, @@ -4095,7 +4095,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4148,7 +4147,7 @@ pyyaml = "*" name = "pyzmq" version = "25.1.2" description = "Python bindings for 0MQ" -optional = false +optional = true python-versions = ">=3.6" files = [ {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, @@ -5107,7 +5106,7 @@ sqlcipher = ["sqlcipher3_binary"] name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -optional = false +optional = true python-versions = "*" files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, @@ -5410,7 +5409,7 @@ optree = ["optree (>=0.9.1)"] name = "tornado" version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false +optional = true python-versions = ">= 3.8" files = [ {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, @@ -5450,7 +5449,7 @@ telegram = ["requests"] name = "traitlets" version = "5.14.2" description = "Traitlets Python configuration system" -optional = false +optional = true python-versions = ">=3.8" files = [ {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, @@ -5933,7 +5932,7 @@ anyio = ">=3.0.0" name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -optional = false +optional = true python-versions = "*" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, From ac1c248b023b0b706eeded833384fc02a5faf6ea Mon Sep 17 00:00:00 2001 From: Somesh <42097653+someshfengde@users.noreply.github.com> Date: Tue, 26 Mar 2024 22:29:44 +0530 Subject: [PATCH 14/19] Update __init__.py --- dsp/modules/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dsp/modules/__init__.py b/dsp/modules/__init__.py index db33ca29b0..b52d663cd5 100644 --- a/dsp/modules/__init__.py +++ b/dsp/modules/__init__.py @@ -9,7 +9,6 @@ from .google import * from .gpt3 import * from .groq_client import * -from .together_client import * from .hf import HFModel from .hf_client import Anyscale, HFClientTGI, Together from .mistral import * From 1ebbbde380762a600af80850c6264783633c2b28 Mon Sep 17 00:00:00 2001 From: Somesh <42097653+someshfengde@users.noreply.github.com> Date: Tue, 26 Mar 2024 17:12:10 +0000 Subject: [PATCH 15/19] making the fix --- dsp/modules/hf_client.py | 51 ++++------ dsp/modules/together_client.py | 171 --------------------------------- dspy/__init__.py | 2 +- poetry.lock | 3 +- 4 files changed, 24 insertions(+), 203 deletions(-) delete mode 100644 dsp/modules/together_client.py diff --git a/dsp/modules/hf_client.py b/dsp/modules/hf_client.py index c850c46d8c..4e9ed472e8 100644 --- a/dsp/modules/hf_client.py +++ b/dsp/modules/hf_client.py @@ -218,11 +218,11 @@ def run_server(self, port, model_name=None, model_path=None, env_variable=None, docker_process.wait() class Together(HFModel): - def __init__(self, model, api_key , **kwargs): + def __init__(self, model, **kwargs): super().__init__(model=model, is_client=True) self.session = requests.Session() - self.api_base = "https://api.together.xyz/v1/" - self.token = api_key + self.api_base = os.getenv("TOGETHER_API_BASE") + self.token = os.getenv("TOGETHER_API_KEY") self.model = model self.use_inst_template = False @@ -248,9 +248,11 @@ def __init__(self, model, api_key , **kwargs): max_time=1000, on_backoff=backoff_hdlr, ) - def _generate(self, prompt, use_chat_api=True, **kwargs): + def _generate(self, prompt, use_chat_api=False, **kwargs): url = f"{self.api_base}" + kwargs = {**self.kwargs, **kwargs} + stop = kwargs.get("stop") temperature = kwargs.get("temperature") max_tokens = kwargs.get("max_tokens", 150) @@ -270,10 +272,10 @@ def _generate(self, prompt, use_chat_api=True, **kwargs): "messages": messages, "temperature": temperature, "max_tokens": max_tokens, - # "top_p": top_p, - # "top_k": top_k, - # "repetition_penalty": repetition_penalty, - # "stop": stop, + "top_p": top_p, + "top_k": top_k, + "repetition_penalty": repetition_penalty, + "stop": stop, } else: body = { @@ -281,37 +283,26 @@ def _generate(self, prompt, use_chat_api=True, **kwargs): "prompt": prompt, "temperature": temperature, "max_tokens": max_tokens, - # "top_p": top_p, - # "top_k": top_k, - # "repetition_penalty": repetition_penalty, - # "stop": stop, + "top_p": top_p, + "top_k": top_k, + "repetition_penalty": repetition_penalty, + "stop": stop, } - headers = { - "Authorization": f"Bearer {self.token}", - "Content-Type": "application/json" - } - - try: - # print(url, headers, body) - # resp = requests.post(url, headers = headers , json = body) - # print(resp.text) - # return resp.json() + headers = {"Authorization": f"Bearer {self.token}"} + try: with self.session.post(url, headers=headers, json=body) as resp: - print(resp) resp_json = resp.json() - print(resp_json) if use_chat_api: - completions = [resp_json.get('choices', [])[0].get('message', {}).get('content', "")] + completions = [resp_json['output'].get('choices', [])[0].get('message', {}).get('content', "")] else: - completions = [resp_json.get('choices', [])[0].get('content', "")] + completions = [resp_json['output'].get('choices', [])[0].get('text', "")] response = {"prompt": prompt, "choices": [{"text": c} for c in completions]} return response except Exception as e: - pass - # if resp_json: - # print(f"resp_json:{resp_json}") + if resp_json: + print(f"resp_json:{resp_json}") print(f"Failed to parse JSON response: {e}") raise Exception("Received invalid JSON response from server") @@ -444,4 +435,4 @@ def _generate(self, prompt, **kwargs): @CacheMemory.cache def send_hfsglang_request_v00(arg, **kwargs): - return requests.post(arg, **kwargs) + return requests.post(arg, **kwargs) \ No newline at end of file diff --git a/dsp/modules/together_client.py b/dsp/modules/together_client.py deleted file mode 100644 index 4dc29ad658..0000000000 --- a/dsp/modules/together_client.py +++ /dev/null @@ -1,171 +0,0 @@ -import logging -import os -import json -from typing import Any, Literal, Optional, Required -import backoff -import together -import functools -import openai - - - -import dsp -from dsp.modules.cache_utils import CacheMemory, NotebookCacheMemory, cache_turn_on -from dsp.modules.lm import LM - - -# Configure logging -logging.basicConfig( - level=logging.INFO, - format="%(message)s", - handlers=[logging.FileHandler("together_usage.log")], -) - -def backoff_hdlr(details): - """Handler from https://pypi.org/project/backoff/""" - print( - "Backing off {wait:0.1f} seconds after {tries} tries " - "calling function {target} with kwargs " - "{kwargs}".format(**details), - ) - - -class TogetherLM(LM): - """Wrapper around groq's API. - - Args: - model (str, optional): groq supported LLM model to use. Defaults to "mixtral-8x7b-32768". - api_key (Optional[str], optional): API provider Authentication token. use Defaults to None. - **kwargs: Additional arguments to pass to the API provider. - """ - - def __init__( - self, - api_key: str, - model: str = "mistralai/Mistral-7B-Instruct-v0.1", - **kwargs, - ): - super().__init__(model) - self.provider = "together" - if api_key: - self.client = openai.OpenAI( - api_key=api_key, - base_url="https://api.together.xyz/v1", - ) - - else: - raise ValueError("api_key is required for groq") - - - self.kwargs = { - "temperature": 0.0, - "max_tokens": 150, - "top_p": 1, - "frequency_penalty": 0, - "presence_penalty": 0, - "n": 1, - **kwargs, - } - # models = self.client.models.list().data - # if models is not None: - # if model in [m.id for m in models]: - self.kwargs["model"] = model - self.history: list[dict[str, Any]] = [] - - - def log_usage(self, response): - """Log the total tokens from the Groq API response.""" - usage_data = response.get("usage") - if usage_data: - total_tokens = usage_data.get("total_tokens") - logging.info(f"{total_tokens}") - - def basic_request(self, prompt: str, **kwargs): - raw_kwargs = kwargs - - kwargs = {**self.kwargs, **kwargs} - - kwargs["messages"] = [{"role": "user", "content": prompt}] - response = self.chat_request(**kwargs) - - history = { - "prompt": prompt, - "response": response.choices[0].message.content, - "kwargs": kwargs, - "raw_kwargs": raw_kwargs, - } - - self.history.append(history) - - return response - - @backoff.on_exception( - backoff.expo, - openai.RateLimitError, - max_time=1000, - on_backoff=backoff_hdlr, - ) - def request(self, prompt: str, **kwargs): - """Handles retreival of model completions whilst handling rate limiting and caching.""" - if "model_type" in kwargs: - del kwargs["model_type"] - - return self.basic_request(prompt, **kwargs) - - def _get_choice_text(self, choice) -> str: - return choice.message.content - - def chat_request(self, **kwargs): - """Handles retreival of model completions whilst handling rate limiting and caching.""" - response = self.client.chat.completions.create(**kwargs) - return response - - def __call__( - self, - prompt: str, - only_completed: bool = True, - return_sorted: bool = False, - **kwargs, - ) -> list[dict[str, Any]]: - """Retrieves completions from model. - - Args: - prompt (str): prompt to send to model - only_completed (bool, optional): return only completed responses and ignores completion due to length. Defaults to True. - return_sorted (bool, optional): sort the completion choices using the returned probabilities. Defaults to False. - - Returns: - list[dict[str, Any]]: list of completion choices - """ - - assert only_completed, "for now" - assert return_sorted is False, "for now" - response = self.request(prompt, **kwargs) - - if dsp.settings.log_openai_usage: - self.log_usage(response) - - choices = response.choices - - completions = [self._get_choice_text(c) for c in choices] - if return_sorted and kwargs.get("n", 1) > 1: - scored_completions = [] - - for c in choices: - tokens, logprobs = ( - c["logprobs"]["tokens"], - c["logprobs"]["token_logprobs"], - ) - - if "<|endoftext|>" in tokens: - index = tokens.index("<|endoftext|>") + 1 - tokens, logprobs = tokens[:index], logprobs[:index] - - avglog = sum(logprobs) / len(logprobs) - scored_completions.append((avglog, self._get_choice_text(c))) - - scored_completions = sorted(scored_completions, reverse=True) - completions = [c for _, c in scored_completions] - - return completions - diff --git a/dspy/__init__.py b/dspy/__init__.py index 6a5fdf7256..75d2332815 100644 --- a/dspy/__init__.py +++ b/dspy/__init__.py @@ -27,7 +27,7 @@ HFClientVLLM = HFClientVLLM Anyscale = dsp.Anyscale -Together = dsp.TogetherLM +Together = dsp.Together HFModel = dsp.HFModel OllamaLocal = dsp.OllamaLocal Bedrock = dsp.Bedrock diff --git a/poetry.lock b/poetry.lock index dfa6004be2..be2cbdc074 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -4095,6 +4095,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, From 1ee9ee52507d852376a295aae31c006d2bb24fb2 Mon Sep 17 00:00:00 2001 From: Somesh <42097653+someshfengde@users.noreply.github.com> Date: Sun, 31 Mar 2024 00:04:57 +0530 Subject: [PATCH 16/19] Update poetry.lock --- poetry.lock | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/poetry.lock b/poetry.lock index be2cbdc074..ab94b9d689 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1395,25 +1395,6 @@ files = [ [package.dependencies] colorama = ">=0.4" -[[package]] -name = "groq" -version = "0.4.2" -description = "The official Python library for the groq API" -optional = true -python-versions = ">=3.7" -files = [ - {file = "groq-0.4.2-py3-none-any.whl", hash = "sha256:5b2b472c64d9f35210e0487db465415d47162da3a114031ecbfc8843d26302a5"}, - {file = "groq-0.4.2.tar.gz", hash = "sha256:42e8b0abd0f2b2da024b9a747d28960d62951a5364f078e1537c9fceeca8259d"}, -] - -[package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -typing-extensions = ">=4.7,<5" - [[package]] name = "grpcio" version = "1.62.1" From 601a3d958c6d6003ec279243ac1861bc7734f2e2 Mon Sep 17 00:00:00 2001 From: Somesh <42097653+someshfengde@users.noreply.github.com> Date: Wed, 3 Apr 2024 13:21:15 +0530 Subject: [PATCH 17/19] poetry fix --- poetry.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index ab94b9d689..baea7bc2af 100644 --- a/poetry.lock +++ b/poetry.lock @@ -6379,4 +6379,4 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" +content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" \ No newline at end of file From 3e0e15b0f27af9b8a67936bfd40e1477bf836292 Mon Sep 17 00:00:00 2001 From: Arnav Singhvi Date: Thu, 4 Apr 2024 12:50:52 -0700 Subject: [PATCH 18/19] update all poetry.lock errors --- poetry.lock | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index baea7bc2af..940c72855e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -5739,15 +5739,26 @@ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)" [[package]] name = "validators" -version = "0.23.2" +version = "0.22.0" description = "Python Data Validation for Humans™" optional = true python-versions = ">=3.8" files = [ - {file = "validators-0.23.2-py3-none-any.whl", hash = "sha256:cb68e489f946f4934dbd3c203f08486c53493ab1c204f39d13b13c209f60e2c1"}, - {file = "validators-0.23.2.tar.gz", hash = "sha256:397ec4a1e86192e6e904b5afe8c12da0e6eaa3db088c0cc426e00cfee2ef07a8"}, + {file = "validators-0.22.0-py3-none-any.whl", hash = "sha256:61cf7d4a62bbae559f2e54aed3b000cea9ff3e2fdbe463f51179b92c58c9585a"}, + {file = "validators-0.22.0.tar.gz", hash = "sha256:77b2689b172eeeb600d9605ab86194641670cdb73b60afd577142a9397873370"}, ] +[package.extras] +docs-offline = ["myst-parser (>=2.0.0)", "pypandoc-binary (>=1.11)", "sphinx (>=7.1.1)"] +docs-online = ["mkdocs (>=1.5.2)", "mkdocs-git-revision-date-localized-plugin (>=1.2.0)", "mkdocs-material (>=9.2.6)", "mkdocstrings[python] (>=0.22.0)", "pyaml (>=23.7.0)"] +hooks = ["pre-commit (>=3.3.3)"] +package = ["build (>=1.0.0)", "twine (>=4.0.2)"] +runner = ["tox (>=4.11.1)"] +sast = ["bandit[toml] (>=1.7.5)"] +testing = ["pytest (>=7.4.0)"] +tooling = ["black (>=23.7.0)", "pyright (>=1.1.325)", "ruff (>=0.0.287)"] +tooling-extras = ["pyaml (>=23.7.0)", "pypandoc-binary (>=1.11)", "pytest (>=7.4.0)"] + [[package]] name = "verspec" version = "0.1.0" @@ -6379,4 +6390,4 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" \ No newline at end of file +content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" From 969220be352b1e1f94b65c9dbfcf2b0902d40c15 Mon Sep 17 00:00:00 2001 From: Arnav Singhvi Date: Thu, 4 Apr 2024 13:01:55 -0700 Subject: [PATCH 19/19] updated with groq dependency --- poetry.lock | 21 ++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 940c72855e..7f9f47924a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1395,6 +1395,25 @@ files = [ [package.dependencies] colorama = ">=0.4" +[[package]] +name = "groq" +version = "0.4.2" +description = "The official Python library for the groq API" +optional = true +python-versions = ">=3.7" +files = [ + {file = "groq-0.4.2-py3-none-any.whl", hash = "sha256:5b2b472c64d9f35210e0487db465415d47162da3a114031ecbfc8843d26302a5"}, + {file = "groq-0.4.2.tar.gz", hash = "sha256:42e8b0abd0f2b2da024b9a747d28960d62951a5364f078e1537c9fceeca8259d"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +typing-extensions = ">=4.7,<5" + [[package]] name = "grpcio" version = "1.62.1" @@ -6390,4 +6409,4 @@ weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "8ebefcbe706bfffbdc30518bc8c6cada8214d126dc625824b481113b109b4ec1" +content-hash = "b7b84c9bb4cf7f4776774afdd39a2498bee716b978aa1fd23d14c7e0057bd557" diff --git a/pyproject.toml b/pyproject.toml index c4550e20b3..146b4cfa0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -109,6 +109,7 @@ sphinx_rtd_theme = { version = "*", optional = true } autodoc_pydantic = { version = "*", optional = true } sphinx-reredirects = { version = "^0.1.2", optional = true } sphinx-automodapi = { version = "0.16.0", optional = true } +groq = {version = "^0.4.2", optional = true } rich = "^13.7.1" psycopg2 = {version = "^2.9.9", optional = true} pgvector = {version = "^0.2.5", optional = true}