From fd6367ca25d3ca6e78bf7af472eced0f3f037a54 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Wed, 16 Aug 2023 11:19:05 -0700 Subject: [PATCH] adding additional ways of doing testing --- dist/litellm-0.1.401-py3-none-any.whl | Bin 0 -> 50003 bytes dist/litellm-0.1.401.tar.gz | Bin 0 -> 46900 bytes litellm/testing.py | 105 ++- litellm/tests/test_load_test_model.py | 15 +- poetry.lock | 914 +++----------------------- pyproject.toml | 2 +- 6 files changed, 185 insertions(+), 851 deletions(-) create mode 100644 dist/litellm-0.1.401-py3-none-any.whl create mode 100644 dist/litellm-0.1.401.tar.gz diff --git a/dist/litellm-0.1.401-py3-none-any.whl b/dist/litellm-0.1.401-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..a412dff57b306d0af361558b0c35fc00f194b597 GIT binary patch literal 50003 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ΜuR^F$s6K`8wr0HwN$1 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 1 else kwargs.get("messages") - results = [] - completions = [] - exceptions = [] - times = [] - with ThreadPoolExecutor() as executor: - for message_list in batch_messages: - if len(args) > 1: - args_modified = list(args) - args_modified[1] = message_list - future = executor.submit(litellm.completion, *args_modified) - else: - kwargs_modified = dict(kwargs) - kwargs_modified["messages"] = message_list - future = executor.submit(litellm.completion, *args, **kwargs_modified) - completions.append(future) - - # Retrieve the results and calculate elapsed time for each completion call - for future in completions: - start_time = time.time() - try: - result = future.result() - end_time = time.time() - elapsed_time = end_time - start_time - result_dict = {"status": "succeeded", "response": future.result(), "response_time": elapsed_time} - results.append(result_dict) - except Exception as e: - end_time = time.time() - elapsed_time = end_time - start_time - result_dict = {"status": "succeeded", "response": e, "response_time": elapsed_time} - results.append(result_dict) - - return results +def testing_batch_completion(*args, **kwargs): + try: + batch_models = args[0] if len(args) > 0 else kwargs.pop("models") ## expected input format- ["gpt-3.5-turbo", {"model": "qvv0xeq", "custom_llm_provider"="baseten"}...] + batch_messages = args[1] if len(args) > 1 else kwargs.pop("messages") + results = [] + completions = [] + exceptions = [] + times = [] + with ThreadPoolExecutor() as executor: + for model in batch_models: + kwargs_modified = dict(kwargs) + args_modified = list(args) + if len(args) > 0: + args_modified[0] = model["model"] + else: + kwargs_modified["model"] = model["model"] if isinstance(model, dict) and "model" in model else model # if model is a dictionary get it's value else assume it's a string + kwargs_modified["custom_llm_provider"] = model["custom_llm_provider"] if isinstance(model, dict) and "model" in model else None + for message_list in batch_messages: + if len(args) > 1: + args_modified[1] = message_list + future = executor.submit(litellm.completion, *args_modified, **kwargs_modified) + else: + kwargs_modified["messages"] = message_list + future = executor.submit(litellm.completion, *args_modified, **kwargs_modified) + completions.append(future) + + # Retrieve the results and calculate elapsed time for each completion call + for future in completions: + start_time = time.time() + try: + result = future.result() + end_time = time.time() + elapsed_time = end_time - start_time + result_dict = {"status": "succeeded", "response": future.result(), "response_time": elapsed_time} + results.append(result_dict) + except Exception as e: + end_time = time.time() + elapsed_time = end_time - start_time + result_dict = {"status": "succeeded", "response": e, "response_time": elapsed_time} + results.append(result_dict) + return results + except: + traceback.print_exc() -def load_test_model(model: str, custom_llm_provider: str = None, custom_api_base: str = None, prompt: str = None, num_calls: int = None, force_timeout: int = None): +def duration_test_model(original_function): + def wrapper_function(*args, **kwargs): + # Code to be executed before the original function + duration = kwargs.pop("duration", None) + interval = kwargs.pop("interval", None) + results = [] + if duration and interval: + start_time = time.time() + end_time = start_time + duration # default to 1hr duration + while time.time() < end_time: + result = original_function(*args, **kwargs) + results.append(result) + time.sleep(interval) + else: + result = original_function(*args, **kwargs) + results = result + return results + + # Return the wrapper function + return wrapper_function + +@duration_test_model +def load_test_model(model: str, custom_llm_provider: str = None, custom_api_base: str = None, prompt: str = None, num_calls: int = None, request_timeout: int = None): test_prompt = "Hey, how's it going" test_calls = 100 if prompt: @@ -47,11 +79,12 @@ def load_test_model(model: str, custom_llm_provider: str = None, custom_api_base messages = [[{"role": "user", "content": test_prompt}] for _ in range(test_calls)] start_time = time.time() try: - results = batch_completion(model=model, messages=messages, custom_llm_provider=custom_llm_provider, custom_api_base = custom_api_base, force_timeout=force_timeout) + results = testing_batch_completion(models=[model], messages=messages, custom_llm_provider=custom_llm_provider, custom_api_base = custom_api_base, force_timeout=request_timeout) end_time = time.time() response_time = end_time - start_time return {"total_response_time": response_time, "calls_made": test_calls, "prompt": test_prompt, "results": results} except Exception as e: + traceback.print_exc() end_time = time.time() response_time = end_time - start_time return {"total_response_time": response_time, "calls_made": test_calls, "prompt": test_prompt, "exception": e} \ No newline at end of file diff --git a/litellm/tests/test_load_test_model.py b/litellm/tests/test_load_test_model.py index 373da1a6d..49f657c34 100644 --- a/litellm/tests/test_load_test_model.py +++ b/litellm/tests/test_load_test_model.py @@ -2,8 +2,21 @@ import sys, os import traceback sys.path.insert(0, os.path.abspath('../..')) # Adds the parent directory to the system path import litellm -from litellm import load_test_model +from litellm import load_test_model, testing_batch_completion +## Load Test Model model="gpt-3.5-turbo" result = load_test_model(model=model, num_calls=5) +print(result) +print(len(result["results"])) + +## Duration Test Model +model="gpt-3.5-turbo" +result = load_test_model(model=model, num_calls=5, duration=15, interval=15) # duration test the model for 2 minutes, sending 5 calls every 15s +print(result) + +## Quality Test across Model +models = ["gpt-3.5-turbo", "gpt-3.5-turbo-16k", "gpt-4", "claude-instant-1", {"model": "replicate/llama-2-70b-chat:58d078176e02c219e11eb4da5a02a7830a283b14cf8f94537af893ccff5ee781", "custom_llm_provider": "replicate"}] +messages = [[{"role": "user", "content": "What is your name?"}]] +result = testing_batch_completion(models=models, messages=messages) print(result) \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 8f839788d..3edf35bb2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -113,7 +112,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -125,64 +123,20 @@ files = [ frozenlist = ">=1.1.0" [[package]] -name = "anthropic" -version = "0.3.8" -description = "Client library for the anthropic API" -category = "main" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "anthropic-0.3.8-py3-none-any.whl", hash = "sha256:97ffe1bacc4214dc89b19f496cf2769746971e86f7c835a05aa21b76f260d279"}, - {file = "anthropic-0.3.8.tar.gz", hash = "sha256:6651099807456c3b95b3879f5ad7d00f7e7e4f7649a2394d18032ab8be54ef16"}, -] - -[package.dependencies] -anyio = ">=3.5.0,<4" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -pydantic = ">=1.9.0,<2.0.0" -tokenizers = ">=0.13.0" -typing-extensions = ">=4.1.1,<5" - -[[package]] -name = "anyio" -version = "3.7.1" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.7" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "async-timeout" -version = "4.0.2" -description = "Timeout context manager for asyncio programs" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, - {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] [[package]] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -197,23 +151,10 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -[[package]] -name = "backoff" -version = "2.2.1" -description = "Function decoration for backoff and retry" -category = "main" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, - {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, -] - [[package]] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -225,7 +166,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 = [ @@ -306,31 +246,10 @@ files = [ {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] -[[package]] -name = "cohere" -version = "4.19.2" -description = "" -category = "main" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "cohere-4.19.2-py3-none-any.whl", hash = "sha256:0b6a4fe04380a481a8e975ebcc9bb6433febe4d3eb583b6d6e04342a5e998345"}, - {file = "cohere-4.19.2.tar.gz", hash = "sha256:a0b0fa698b3d3983fb328bb90d68fcf08faaa2268f3772ebc6bfea6ba55acf27"}, -] - -[package.dependencies] -aiohttp = ">=3.0,<4.0" -backoff = ">=2.0,<3.0" -fastavro = {version = "1.8.2", markers = "python_version >= \"3.8\""} -importlib_metadata = ">=6.0,<7.0" -requests = ">=2.25.0,<3.0.0" -urllib3 = ">=1.26,<3" - [[package]] 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 = [ @@ -338,91 +257,10 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "distro" -version = "1.8.0" -description = "Distro - an OS platform information API" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "distro-1.8.0-py3-none-any.whl", hash = "sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff"}, - {file = "distro-1.8.0.tar.gz", hash = "sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8"}, -] - -[[package]] -name = "et-xmlfile" -version = "1.1.0" -description = "An implementation of lxml.xmlfile for the standard library" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, - {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.1.2" -description = "Backport of PEP 654 (exception groups)" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastavro" -version = "1.8.2" -description = "Fast read/write of AVRO files" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastavro-1.8.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:0e08964b2e9a455d831f2557402a683d4c4d45206f2ab9ade7c69d3dc14e0e58"}, - {file = "fastavro-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:401a70b1e5c7161420c6019e0c8afa88f7c8a373468591f5ec37639a903c2509"}, - {file = "fastavro-1.8.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef1ed3eaa4240c05698d02d8d0c010b9a03780eda37b492da6cd4c9d37e04ec"}, - {file = "fastavro-1.8.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:543185a672ff6306beb329b57a7b8a3a2dd1eb21a5ccc530150623d58d48bb98"}, - {file = "fastavro-1.8.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ffbf8bae1edb50fe7beeffc3afa8e684686550c2e5d31bf01c25cfa213f581e1"}, - {file = "fastavro-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:bb545eb9d876bc7b785e27e98e7720ada7eee7d7a1729798d2ed51517f13500a"}, - {file = "fastavro-1.8.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b837d3038c651046252bc92c1b9899bf21c7927a148a1ff89599c36c2a331ca"}, - {file = "fastavro-1.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3510e96c0a47e4e914bd1a29c954eb662bfa24849ad92e597cb97cc79f21af7"}, - {file = "fastavro-1.8.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccc0e74f2c2ab357f39bb73d67fcdb6dc10e23fdbbd399326139f72ec0fb99a3"}, - {file = "fastavro-1.8.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:add51c70d0ab1175601c75cd687bbe9d16ae312cd8899b907aafe0d79ee2bc1d"}, - {file = "fastavro-1.8.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d9e2662f57e6453e9a2c9fb4f54b2a9e62e3e46f5a412ac00558112336d23883"}, - {file = "fastavro-1.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:fea75cf53a93c56dd56e68abce8d314ef877b27451c870cd7ede7582d34c08a7"}, - {file = "fastavro-1.8.2-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:f489020bb8664c2737c03457ad5dbd490579ddab6f0a7b5c17fecfe982715a89"}, - {file = "fastavro-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a547625c138efd5e61300119241041906ee8cb426fc7aa789900f87af7ed330d"}, - {file = "fastavro-1.8.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53beb458f30c9ad4aa7bff4a42243ff990ffb713b6ce0cd9b360cbc3d648fe52"}, - {file = "fastavro-1.8.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7b1b2cbd2dd851452306beed0ab9bdaeeab1cc8ad46f84b47cd81eeaff6dd6b8"}, - {file = "fastavro-1.8.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d29e9baee0b2f37ecd09bde3b487cf900431fd548c85be3e4fe1b9a0b2a917f1"}, - {file = "fastavro-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:66e132c710663230292bc63e2cb79cf95b16ccb94a5fc99bb63694b24e312fc5"}, - {file = "fastavro-1.8.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38aca63ce604039bcdf2edd14912d00287bdbf8b76f9aa42b28e6ca0bf950092"}, - {file = "fastavro-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9787835f6449ee94713e7993a700432fce3763024791ffa8a58dc91ef9d1f950"}, - {file = "fastavro-1.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:536cb448bc83811056be02749fd9df37a69621678f02597d272970a769e9b40c"}, - {file = "fastavro-1.8.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e9d5027cf7d9968f8f819958b41bfedb933323ea6d6a0485eefacaa1afd91f54"}, - {file = "fastavro-1.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:792adfc0c80c7f1109e0ab4b0decef20691fdf0a45091d397a0563872eb56d42"}, - {file = "fastavro-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:650b22766259f7dd7519dfa4e4658f0e233c319efa130b9cf0c36a500e09cc57"}, - {file = "fastavro-1.8.2.tar.gz", hash = "sha256:ab9d9226d4b66b6b3d0661a57cd45259b0868fed1c0cd4fac95249b9e0973320"}, -] - -[package.extras] -codecs = ["lz4", "python-snappy", "zstandard"] -lz4 = ["lz4"] -snappy = ["python-snappy"] -zstandard = ["zstandard"] - [[package]] name = "frozenlist" version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -489,69 +327,10 @@ files = [ {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, ] -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httpcore" -version = "0.17.3" -description = "A minimal low-level HTTP client." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, - {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, -] - -[package.dependencies] -anyio = ">=3.0,<5.0" -certifi = "*" -h11 = ">=0.13,<0.15" -sniffio = ">=1.0.0,<2.0.0" - -[package.extras] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] - -[[package]] -name = "httpx" -version = "0.24.1" -description = "The next generation HTTP client." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, - {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, -] - -[package.dependencies] -certifi = "*" -httpcore = ">=0.15.0,<0.18.0" -idna = "*" -sniffio = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] - [[package]] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -559,43 +338,10 @@ files = [ {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, ] -[[package]] -name = "importlib-metadata" -version = "6.8.0" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - [[package]] name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -675,49 +421,10 @@ files = [ {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, ] -[[package]] -name = "numpy" -version = "1.24.4" -description = "Fundamental package for array computing in Python" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, - {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, - {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, - {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, - {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, - {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, - {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, - {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, - {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, - {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, - {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, -] - [[package]] name = "openai" version = "0.27.8" description = "Python client library for the OpenAI API" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -727,242 +434,19 @@ files = [ [package.dependencies] aiohttp = "*" -numpy = {version = "*", optional = true, markers = "extra == \"datalib\""} -openpyxl = {version = ">=3.0.7", optional = true, markers = "extra == \"datalib\""} -pandas = {version = ">=1.2.3", optional = true, markers = "extra == \"datalib\""} -pandas-stubs = {version = ">=1.1.0.11", optional = true, markers = "extra == \"datalib\""} requests = ">=2.20" 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"] -[[package]] -name = "openpyxl" -version = "3.1.2" -description = "A Python library to read/write Excel 2010 xlsx/xlsm files" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, - {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, -] - -[package.dependencies] -et-xmlfile = "*" - -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - -[[package]] -name = "pandas" -version = "2.0.3" -description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, - {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, - {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, - {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, - {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, - {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, - {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, - {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, - {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, - {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, - {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, -] - -[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\""}, -] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.1" - -[package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] -aws = ["s3fs (>=2021.08.0)"] -clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] -compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] -computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2021.07.0)"] -gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] -hdf5 = ["tables (>=3.6.1)"] -html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] -mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] -spss = ["pyreadstat (>=1.1.2)"] -sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.6.3)"] - -[[package]] -name = "pandas-stubs" -version = "2.0.2.230605" -description = "Type annotations for pandas" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pandas_stubs-2.0.2.230605-py3-none-any.whl", hash = "sha256:39106b602f3cb6dc5f728b84e1b32bde6ecf41ee34ee714c66228009609fbada"}, - {file = "pandas_stubs-2.0.2.230605.tar.gz", hash = "sha256:624c7bb06d38145a44b61be459ccd19b038e0bf20364a025ecaab78fea65e858"}, -] - -[package.dependencies] -numpy = ">=1.24.3" -types-pytz = ">=2022.1.1" - -[[package]] -name = "pluggy" -version = "1.2.0" -description = "plugin and hook calling mechanisms for python" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -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 = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pytest" -version = "7.4.0" -description = "pytest: simple powerful testing with Python" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -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 = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, -] - -[package.dependencies] -six = ">=1.5" - [[package]] 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 = [ @@ -973,141 +457,107 @@ files = [ [package.extras] cli = ["click (>=5.0)"] -[[package]] -name = "pytz" -version = "2023.3" -description = "World timezone definitions, modern and historical" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, -] - [[package]] name = "regex" -version = "2023.6.3" +version = "2023.8.8" description = "Alternative regular expression module, to replace re." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"}, - {file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"}, - {file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"}, - {file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"}, - {file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"}, - {file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"}, - {file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"}, - {file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"}, - {file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"}, - {file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"}, - {file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"}, - {file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"}, - {file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"}, - {file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"}, - {file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"}, - {file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"}, - {file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"}, - {file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"}, - {file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"}, - {file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"}, - {file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"}, - {file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"}, - {file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"}, - {file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"}, - {file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"}, - {file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"}, - {file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"}, - {file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"}, - {file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"}, - {file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"}, - {file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"}, - {file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb"}, + {file = "regex-2023.8.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61"}, + {file = "regex-2023.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db"}, + {file = "regex-2023.8.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7"}, + {file = "regex-2023.8.8-cp310-cp310-win32.whl", hash = "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb"}, + {file = "regex-2023.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71"}, + {file = "regex-2023.8.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559"}, + {file = "regex-2023.8.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7"}, + {file = "regex-2023.8.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd"}, + {file = "regex-2023.8.8-cp311-cp311-win32.whl", hash = "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8"}, + {file = "regex-2023.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb"}, + {file = "regex-2023.8.8-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61"}, + {file = "regex-2023.8.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235"}, + {file = "regex-2023.8.8-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b"}, + {file = "regex-2023.8.8-cp36-cp36m-win32.whl", hash = "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7"}, + {file = "regex-2023.8.8-cp36-cp36m-win_amd64.whl", hash = "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236"}, + {file = "regex-2023.8.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116"}, + {file = "regex-2023.8.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684"}, + {file = "regex-2023.8.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7"}, + {file = "regex-2023.8.8-cp37-cp37m-win32.whl", hash = "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3"}, + {file = "regex-2023.8.8-cp37-cp37m-win_amd64.whl", hash = "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675"}, + {file = "regex-2023.8.8-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9"}, + {file = "regex-2023.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586"}, + {file = "regex-2023.8.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882"}, + {file = "regex-2023.8.8-cp38-cp38-win32.whl", hash = "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7"}, + {file = "regex-2023.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3"}, + {file = "regex-2023.8.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033"}, + {file = "regex-2023.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf"}, + {file = "regex-2023.8.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6"}, + {file = "regex-2023.8.8-cp39-cp39-win32.whl", hash = "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e"}, + {file = "regex-2023.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb"}, + {file = "regex-2023.8.8.tar.gz", hash = "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"}, ] -[[package]] -name = "replicate" -version = "0.10.0" -description = "Python client for Replicate" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "replicate-0.10.0-py3-none-any.whl", hash = "sha256:71464d62259b22a17f5383e83ebaf158cace69ba0153a9de21061283ac2c3a4b"}, - {file = "replicate-0.10.0.tar.gz", hash = "sha256:f714944be0c65eef7b3ebf740eb132d573a52e811a02f0031b9f1ae077a50696"}, -] - -[package.dependencies] -packaging = "*" -pydantic = ">1" -requests = ">2" - -[package.extras] -dev = ["black", "mypy", "pytest", "responses", "ruff"] - [[package]] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1125,50 +575,10 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -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 = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -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 = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] - -[[package]] -name = "tenacity" -version = "8.2.2" -description = "Retry code until it succeeds" -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, - {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, -] - -[package.extras] -doc = ["reno", "sphinx", "tornado (>=4.5)"] - [[package]] name = "tiktoken" version = "0.4.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1210,135 +620,30 @@ requests = ">=2.26.0" [package.extras] blobfile = ["blobfile (>=2)"] -[[package]] -name = "tokenizers" -version = "0.13.3" -description = "Fast and Customizable Tokenizers" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "tokenizers-0.13.3-cp310-cp310-macosx_10_11_x86_64.whl", hash = "sha256:f3835c5be51de8c0a092058a4d4380cb9244fb34681fd0a295fbf0a52a5fdf33"}, - {file = "tokenizers-0.13.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4ef4c3e821730f2692489e926b184321e887f34fb8a6b80b8096b966ba663d07"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5fd1a6a25353e9aa762e2aae5a1e63883cad9f4e997c447ec39d071020459bc"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee0b1b311d65beab83d7a41c56a1e46ab732a9eed4460648e8eb0bd69fc2d059"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ef4215284df1277dadbcc5e17d4882bda19f770d02348e73523f7e7d8b8d396"}, - {file = "tokenizers-0.13.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4d53976079cff8a033f778fb9adca2d9d69d009c02fa2d71a878b5f3963ed30"}, - {file = "tokenizers-0.13.3-cp310-cp310-win32.whl", hash = "sha256:1f0e3b4c2ea2cd13238ce43548959c118069db7579e5d40ec270ad77da5833ce"}, - {file = "tokenizers-0.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:89649c00d0d7211e8186f7a75dfa1db6996f65edce4b84821817eadcc2d3c79e"}, - {file = "tokenizers-0.13.3-cp311-cp311-macosx_10_11_universal2.whl", hash = "sha256:56b726e0d2bbc9243872b0144515ba684af5b8d8cd112fb83ee1365e26ec74c8"}, - {file = "tokenizers-0.13.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc5c022ce692e1f499d745af293ab9ee6f5d92538ed2faf73f9708c89ee59ce6"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55c981ac44ba87c93e847c333e58c12abcbb377a0c2f2ef96e1a266e4184ff2"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f247eae99800ef821a91f47c5280e9e9afaeed9980fc444208d5aa6ba69ff148"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b3e3215d048e94f40f1c95802e45dcc37c5b05eb46280fc2ccc8cd351bff839"}, - {file = "tokenizers-0.13.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ba2b0bf01777c9b9bc94b53764d6684554ce98551fec496f71bc5be3a03e98b"}, - {file = "tokenizers-0.13.3-cp311-cp311-win32.whl", hash = "sha256:cc78d77f597d1c458bf0ea7c2a64b6aa06941c7a99cb135b5969b0278824d808"}, - {file = "tokenizers-0.13.3-cp311-cp311-win_amd64.whl", hash = "sha256:ecf182bf59bd541a8876deccf0360f5ae60496fd50b58510048020751cf1724c"}, - {file = "tokenizers-0.13.3-cp37-cp37m-macosx_10_11_x86_64.whl", hash = "sha256:0527dc5436a1f6bf2c0327da3145687d3bcfbeab91fed8458920093de3901b44"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07cbb2c307627dc99b44b22ef05ff4473aa7c7cc1fec8f0a8b37d8a64b1a16d2"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4560dbdeaae5b7ee0d4e493027e3de6d53c991b5002d7ff95083c99e11dd5ac0"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64064bd0322405c9374305ab9b4c07152a1474370327499911937fd4a76d004b"}, - {file = "tokenizers-0.13.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8c6e2ab0f2e3d939ca66aa1d596602105fe33b505cd2854a4c1717f704c51de"}, - {file = "tokenizers-0.13.3-cp37-cp37m-win32.whl", hash = "sha256:6cc29d410768f960db8677221e497226e545eaaea01aa3613fa0fdf2cc96cff4"}, - {file = "tokenizers-0.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fc2a7fdf864554a0dacf09d32e17c0caa9afe72baf9dd7ddedc61973bae352d8"}, - {file = "tokenizers-0.13.3-cp38-cp38-macosx_10_11_x86_64.whl", hash = "sha256:8791dedba834c1fc55e5f1521be325ea3dafb381964be20684b92fdac95d79b7"}, - {file = "tokenizers-0.13.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:d607a6a13718aeb20507bdf2b96162ead5145bbbfa26788d6b833f98b31b26e1"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3791338f809cd1bf8e4fee6b540b36822434d0c6c6bc47162448deee3f77d425"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2f35f30e39e6aab8716f07790f646bdc6e4a853816cc49a95ef2a9016bf9ce6"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310204dfed5aa797128b65d63538a9837cbdd15da2a29a77d67eefa489edda26"}, - {file = "tokenizers-0.13.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0f9b92ea052305166559f38498b3b0cae159caea712646648aaa272f7160963"}, - {file = "tokenizers-0.13.3-cp38-cp38-win32.whl", hash = "sha256:9a3fa134896c3c1f0da6e762d15141fbff30d094067c8f1157b9fdca593b5806"}, - {file = "tokenizers-0.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:8e7b0cdeace87fa9e760e6a605e0ae8fc14b7d72e9fc19c578116f7287bb873d"}, - {file = "tokenizers-0.13.3-cp39-cp39-macosx_10_11_x86_64.whl", hash = "sha256:00cee1e0859d55507e693a48fa4aef07060c4bb6bd93d80120e18fea9371c66d"}, - {file = "tokenizers-0.13.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:a23ff602d0797cea1d0506ce69b27523b07e70f6dda982ab8cf82402de839088"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ce07445050b537d2696022dafb115307abdffd2a5c106f029490f84501ef97"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:280ffe95f50eaaf655b3a1dc7ff1d9cf4777029dbbc3e63a74e65a056594abc3"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97acfcec592f7e9de8cadcdcda50a7134423ac8455c0166b28c9ff04d227b371"}, - {file = "tokenizers-0.13.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd7730c98a3010cd4f523465867ff95cd9d6430db46676ce79358f65ae39797b"}, - {file = "tokenizers-0.13.3-cp39-cp39-win32.whl", hash = "sha256:48625a108029cb1ddf42e17a81b5a3230ba6888a70c9dc14e81bc319e812652d"}, - {file = "tokenizers-0.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:bc0a6f1ba036e482db6453571c9e3e60ecd5489980ffd95d11dc9f960483d783"}, - {file = "tokenizers-0.13.3.tar.gz", hash = "sha256:2e546dbb68b623008a5442353137fbb0123d311a6d7ba52f2667c8862a75af2e"}, -] - -[package.extras] -dev = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] -docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] -testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - [[package]] name = "tqdm" -version = "4.65.0" +version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, - {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] -[[package]] -name = "types-pytz" -version = "2023.3.0.0" -description = "Typing stubs for pytz" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "types-pytz-2023.3.0.0.tar.gz", hash = "sha256:ecdc70d543aaf3616a7e48631543a884f74205f284cefd6649ddf44c6a820aac"}, - {file = "types_pytz-2023.3.0.0-py3-none-any.whl", hash = "sha256:4fc2a7fbbc315f0b6630e0b899fd6c743705abe1094d007b0e612d10da15e0f3"}, -] - -[[package]] -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 = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - -[[package]] -name = "tzdata" -version = "2023.3" -description = "Provider of IANA time zone data" -category = "main" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, -] - [[package]] name = "urllib3" version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1356,7 +661,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1440,23 +744,7 @@ files = [ idna = ">=2.0" multidict = ">=4.0" -[[package]] -name = "zipp" -version = "3.16.2" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] - [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "59b35d97e5b8fd2fb7e10a769ea08062bb54636e3c8a0278c5e30ca1a692aab8" +content-hash = "fe7d88d91250950917244f8a6ffc8eba7bfc9aa84314ed6498131172ae4ef3cf" diff --git a/pyproject.toml b/pyproject.toml index 9edb2a2ab..851197166 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm" -version = "0.1.401" +version = "0.1.402" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] license = "MIT License"