From 5c36c3f533de17261acd9b9a9b5c893c6dcbc78d Mon Sep 17 00:00:00 2001 From: souzatharsis Date: Fri, 22 Nov 2024 15:33:58 -0300 Subject: [PATCH] v1 of structured_output chapter --- poetry.lock | 929 +++++++++++++++++- pyproject.toml | 3 + .../_build/.doctrees/environment.pickle | Bin 487226 -> 754367 bytes .../markdown/markdown-notebooks.doctree | Bin 0 -> 9584 bytes .../.doctrees/markdown/markdown.doctree | Bin 0 -> 12903 bytes .../markdown/output_size_limit-NOTES.doctree | Bin 0 -> 46072 bytes .../markdown/structured_output.doctree | Bin 0 -> 41871 bytes .../_build/.doctrees/markdown/toc.doctree | Bin 23582 -> 23708 bytes .../.doctrees/nondeterminism-NOTES.doctree | Bin 0 -> 34686 bytes .../.doctrees/notebooks/notebooks.doctree | Bin 0 -> 10010 bytes .../notebooks/structured_output.doctree | Bin 55472 -> 74511 bytes tamingllms/_build/html/.buildinfo | 2 +- .../_sources/markdown/markdown-notebooks.md | 53 + .../_build/html/_sources/markdown/markdown.md | 55 ++ .../markdown/output_size_limit-NOTES.md | 187 ++++ .../_sources/markdown/structured_output.md | 319 ++++++ .../_build/html/_sources/markdown/toc.md | 3 +- .../html/_sources/nondeterminism-NOTES.md | 157 +++ .../html/_sources/notebooks/notebooks.ipynb | 122 +++ .../notebooks/structured_output.ipynb | 377 +++++-- tamingllms/_build/html/genindex.html | 3 +- tamingllms/_build/html/markdown/intro.html | 9 +- .../html/markdown/markdown-notebooks.html | 227 +++++ tamingllms/_build/html/markdown/markdown.html | 240 +++++ .../markdown/output_size_limit-NOTES.html | 410 ++++++++ .../html/markdown/structured_output.html | 535 ++++++++++ tamingllms/_build/html/markdown/toc.html | 12 +- .../_build/html/nondeterminism-NOTES.html | 392 ++++++++ .../_build/html/notebooks/nondeterminism.html | 3 +- .../_build/html/notebooks/notebooks.html | 259 +++++ .../html/notebooks/output_size_limit.html | 3 +- .../html/notebooks/structured_output.html | 242 ++++- tamingllms/_build/html/objects.inv | Bin 406 -> 469 bytes tamingllms/_build/html/search.html | 3 +- tamingllms/_build/html/searchindex.js | 2 +- .../markdown/markdown-notebooks.ipynb | 85 ++ .../jupyter_execute/notebooks/notebooks.ipynb | 122 +++ .../notebooks/structured_output.ipynb | 377 +++++-- tamingllms/_config.yml | 7 +- tamingllms/markdown/toc.md | 3 +- tamingllms/notebooks/structured_output.ipynb | 377 +++++-- tamingllms/references.bib | 11 + 42 files changed, 5290 insertions(+), 239 deletions(-) create mode 100644 tamingllms/_build/.doctrees/markdown/markdown-notebooks.doctree create mode 100644 tamingllms/_build/.doctrees/markdown/markdown.doctree create mode 100644 tamingllms/_build/.doctrees/markdown/output_size_limit-NOTES.doctree create mode 100644 tamingllms/_build/.doctrees/markdown/structured_output.doctree create mode 100644 tamingllms/_build/.doctrees/nondeterminism-NOTES.doctree create mode 100644 tamingllms/_build/.doctrees/notebooks/notebooks.doctree create mode 100644 tamingllms/_build/html/_sources/markdown/markdown-notebooks.md create mode 100644 tamingllms/_build/html/_sources/markdown/markdown.md create mode 100644 tamingllms/_build/html/_sources/markdown/output_size_limit-NOTES.md create mode 100644 tamingllms/_build/html/_sources/markdown/structured_output.md create mode 100644 tamingllms/_build/html/_sources/nondeterminism-NOTES.md create mode 100644 tamingllms/_build/html/_sources/notebooks/notebooks.ipynb create mode 100644 tamingllms/_build/html/markdown/markdown-notebooks.html create mode 100644 tamingllms/_build/html/markdown/markdown.html create mode 100644 tamingllms/_build/html/markdown/output_size_limit-NOTES.html create mode 100644 tamingllms/_build/html/markdown/structured_output.html create mode 100644 tamingllms/_build/html/nondeterminism-NOTES.html create mode 100644 tamingllms/_build/html/notebooks/notebooks.html create mode 100644 tamingllms/_build/jupyter_execute/markdown/markdown-notebooks.ipynb create mode 100644 tamingllms/_build/jupyter_execute/notebooks/notebooks.ipynb diff --git a/poetry.lock b/poetry.lock index 090469c..0af657c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -140,6 +140,17 @@ files = [ [package.dependencies] frozenlist = ">=1.1.0" +[[package]] +name = "airportsdata" +version = "20241001" +description = "Extensive database of location and timezone data for nearly every airport and landing strip in the world." +optional = false +python-versions = ">=3.9" +files = [ + {file = "airportsdata-20241001-py3-none-any.whl", hash = "sha256:67d71cf2c5378cc17ff66b62b1e11aa2444043949c894543ac8fd8dafce192fd"}, + {file = "airportsdata-20241001.tar.gz", hash = "sha256:fa0bd143b4f4be3557cb892fa0612ef210fd91a92bd720b4d8221de576a4fa00"}, +] + [[package]] name = "alabaster" version = "0.7.16" @@ -660,6 +671,48 @@ files = [ marshmallow = ">=3.18.0,<4.0.0" typing-inspect = ">=0.4.0,<1" +[[package]] +name = "datasets" +version = "2.14.4" +description = "HuggingFace community-driven open-source library of datasets" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "datasets-2.14.4-py3-none-any.whl", hash = "sha256:29336bd316a7d827ccd4da2236596279b20ca2ac78f64c04c9483da7cbc2459b"}, + {file = "datasets-2.14.4.tar.gz", hash = "sha256:ef29c2b5841de488cd343cfc26ab979bff77efa4d2285af51f1ad7db5c46a83b"}, +] + +[package.dependencies] +aiohttp = "*" +dill = ">=0.3.0,<0.3.8" +fsspec = {version = ">=2021.11.1", extras = ["http"]} +huggingface-hub = ">=0.14.0,<1.0.0" +multiprocess = "*" +numpy = ">=1.17" +packaging = "*" +pandas = "*" +pyarrow = ">=8.0.0" +pyyaml = ">=5.1" +requests = ">=2.19.0" +tqdm = ">=4.62.1" +xxhash = "*" + +[package.extras] +apache-beam = ["apache-beam (>=2.26.0,<2.44.0)"] +audio = ["librosa", "soundfile (>=0.12.1)"] +benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"] +dev = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "black (>=23.1,<24.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "pyyaml (>=5.3.1)", "rarfile (>=4.0)", "ruff (>=0.0.241)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "zstandard"] +docs = ["s3fs", "tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow-macos", "torch", "transformers"] +jax = ["jax (>=0.2.8,!=0.3.2,<=0.3.25)", "jaxlib (>=0.1.65,<=0.3.25)"] +metrics-tests = ["Werkzeug (>=1.0.1)", "accelerate", "bert-score (>=0.3.6)", "jiwer", "langdetect", "mauve-text", "nltk", "requests-file (>=1.5.1)", "rouge-score", "sacrebleu", "sacremoses", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "spacy (>=3.0.0)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "typer (<0.5.0)"] +quality = ["black (>=23.1,<24.0)", "pyyaml (>=5.3.1)", "ruff (>=0.0.241)"] +s3 = ["s3fs"] +tensorflow = ["tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)", "tensorflow-macos"] +tensorflow-gpu = ["tensorflow-gpu (>=2.2.0,!=2.6.0,!=2.6.1)"] +tests = ["Pillow (>=6.2.1)", "absl-py", "apache-beam (>=2.26.0,<2.44.0)", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "py7zr", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "sqlalchemy (<2.0.0)", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "tensorflow-macos", "tiktoken", "torch", "transformers", "zstandard"] +torch = ["torch"] +vision = ["Pillow (>=6.2.1)"] + [[package]] name = "debugpy" version = "1.8.8" @@ -717,6 +770,31 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +[[package]] +name = "dill" +version = "0.3.7" +description = "serialize all of Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "dill-0.3.7-py3-none-any.whl", hash = "sha256:76b122c08ef4ce2eedcd4d1abd8e641114bfc6c2867f49f3c41facf65bf19f5e"}, + {file = "dill-0.3.7.tar.gz", hash = "sha256:cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + +[[package]] +name = "diskcache" +version = "5.6.3" +description = "Disk Cache -- Disk and file backed persistent cache." +optional = false +python-versions = ">=3" +files = [ + {file = "diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19"}, + {file = "diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc"}, +] + [[package]] name = "distributed" version = "2024.11.2" @@ -934,6 +1012,9 @@ files = [ {file = "fsspec-2024.10.0.tar.gz", hash = "sha256:eda2d8a4116d4f2429db8550f2457da57279247dd930bb12f821b58391359493"}, ] +[package.dependencies] +aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""} + [package.extras] abfs = ["adlfs"] adl = ["adlfs"] @@ -1246,6 +1327,17 @@ docutils = ">=0.18" jinja2 = ">=2.11" sphinx = ">=5" +[[package]] +name = "interegular" +version = "0.3.3" +description = "a regex intersection checker" +optional = false +python-versions = ">=3.7" +files = [ + {file = "interegular-0.3.3-py37-none-any.whl", hash = "sha256:b0c07007d48c89d6d19f7204972d369b2a77222722e126b6aa63aa721dc3b19c"}, + {file = "interegular-0.3.3.tar.gz", hash = "sha256:d9b697b21b34884711399ba0f0376914b81899ce670032486d0d048344a76600"}, +] + [[package]] name = "ipykernel" version = "6.29.5" @@ -1807,6 +1899,22 @@ PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10.0.0" typing-extensions = ">=4.7" +[[package]] +name = "langchain-openai" +version = "0.2.9" +description = "An integration package connecting OpenAI and LangChain" +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "langchain_openai-0.2.9-py3-none-any.whl", hash = "sha256:2723015e56879f9e5edfcb175fdbec6c296c1b3bf65caad28579ce9c4d1bd652"}, + {file = "langchain_openai-0.2.9.tar.gz", hash = "sha256:38a0f2004f17cdad622d46d4dcfb92d75adbf51909dadc76d0360dd94b0d4f70"}, +] + +[package.dependencies] +langchain-core = ">=0.3.17,<0.4.0" +openai = ">=1.54.0,<2.0.0" +tiktoken = ">=0.7,<1" + [[package]] name = "langchain-text-splitters" version = "0.3.2" @@ -1842,6 +1950,23 @@ pydantic = [ requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" +[[package]] +name = "lark" +version = "1.2.2" +description = "a modern parsing library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c"}, + {file = "lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80"}, +] + +[package.extras] +atomic-cache = ["atomicwrites"] +interegular = ["interegular (>=0.3.1,<0.4.0)"] +nearley = ["js2py"] +regex = ["regex"] + [[package]] name = "latexcodec" version = "3.0.0" @@ -2105,6 +2230,23 @@ files = [ {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + [[package]] name = "msgpack" version = "1.1.0" @@ -2279,6 +2421,34 @@ files = [ {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, ] +[[package]] +name = "multiprocess" +version = "0.70.15" +description = "better multiprocessing and multithreading in Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multiprocess-0.70.15-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:aa36c7ed16f508091438687fe9baa393a7a8e206731d321e443745e743a0d4e5"}, + {file = "multiprocess-0.70.15-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:20e024018c46d0d1602024c613007ac948f9754659e3853b0aa705e83f6931d8"}, + {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_i686.whl", hash = "sha256:e576062981c91f0fe8a463c3d52506e598dfc51320a8dd8d78b987dfca91c5db"}, + {file = "multiprocess-0.70.15-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:e73f497e6696a0f5433ada2b3d599ae733b87a6e8b008e387c62ac9127add177"}, + {file = "multiprocess-0.70.15-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73db2e7b32dcc7f9b0f075c2ffa45c90b6729d3f1805f27e88534c8d321a1be5"}, + {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_i686.whl", hash = "sha256:4271647bd8a49c28ecd6eb56a7fdbd3c212c45529ad5303b40b3c65fc6928e5f"}, + {file = "multiprocess-0.70.15-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:cf981fb998d6ec3208cb14f0cf2e9e80216e834f5d51fd09ebc937c32b960902"}, + {file = "multiprocess-0.70.15-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:18f9f2c7063346d1617bd1684fdcae8d33380ae96b99427260f562e1a1228b67"}, + {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_i686.whl", hash = "sha256:0eac53214d664c49a34695e5824872db4006b1a465edd7459a251809c3773370"}, + {file = "multiprocess-0.70.15-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:1a51dd34096db47fb21fa2b839e615b051d51b97af9a67afbcdaa67186b44883"}, + {file = "multiprocess-0.70.15-py310-none-any.whl", hash = "sha256:7dd58e33235e83cf09d625e55cffd7b0f0eede7ee9223cdd666a87624f60c21a"}, + {file = "multiprocess-0.70.15-py311-none-any.whl", hash = "sha256:134f89053d82c9ed3b73edd3a2531eb791e602d4f4156fc92a79259590bd9670"}, + {file = "multiprocess-0.70.15-py37-none-any.whl", hash = "sha256:f7d4a1629bccb433114c3b4885f69eccc200994323c80f6feee73b0edc9199c5"}, + {file = "multiprocess-0.70.15-py38-none-any.whl", hash = "sha256:bee9afba476c91f9ebee7beeee0601face9eff67d822e893f9a893725fbd6316"}, + {file = "multiprocess-0.70.15-py39-none-any.whl", hash = "sha256:3e0953f5d52b4c76f1c973eaf8214554d146f2be5decb48e928e55c7a2d19338"}, + {file = "multiprocess-0.70.15.tar.gz", hash = "sha256:f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e"}, +] + +[package.dependencies] +dill = ">=0.3.7" + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -2461,6 +2631,25 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] +[[package]] +name = "networkx" +version = "3.4.2" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.10" +files = [ + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, +] + +[package.extras] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + [[package]] name = "numpy" version = "1.26.4" @@ -2506,6 +2695,161 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[package]] +name = "nvidia-cublas-cu12" +version = "12.4.5.8" +description = "CUBLAS native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0f8aa1706812e00b9f19dfe0cdb3999b092ccb8ca168c0db5b8ea712456fd9b3"}, + {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl", hash = "sha256:2fc8da60df463fdefa81e323eef2e36489e1c94335b5358bcb38360adf75ac9b"}, + {file = "nvidia_cublas_cu12-12.4.5.8-py3-none-win_amd64.whl", hash = "sha256:5a796786da89203a0657eda402bcdcec6180254a8ac22d72213abc42069522dc"}, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.4.127" +description = "CUDA profiling tools runtime libs." +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:79279b35cf6f91da114182a5ce1864997fd52294a87a16179ce275773799458a"}, + {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9dec60f5ac126f7bb551c055072b69d85392b13311fcc1bcda2202d172df30fb"}, + {file = "nvidia_cuda_cupti_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:5688d203301ab051449a2b1cb6690fbe90d2b372f411521c86018b950f3d7922"}, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.4.127" +description = "NVRTC native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0eedf14185e04b76aa05b1fea04133e59f465b6f960c0cbf4e37c3cb6b0ea198"}, + {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a178759ebb095827bd30ef56598ec182b85547f1508941a3d560eb7ea1fbf338"}, + {file = "nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:a961b2f1d5f17b14867c619ceb99ef6fcec12e46612711bcec78eb05068a60ec"}, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.4.127" +description = "CUDA Runtime native Libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:961fe0e2e716a2a1d967aab7caee97512f71767f852f67432d572e36cb3a11f3"}, + {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:64403288fa2136ee8e467cdc9c9427e0434110899d07c779f25b5c068934faa5"}, + {file = "nvidia_cuda_runtime_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:09c2e35f48359752dfa822c09918211844a3d93c100a715d79b59591130c5e1e"}, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.1.0.70" +description = "cuDNN runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"}, + {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.2.1.3" +description = "CUFFT native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5dad8008fc7f92f5ddfa2101430917ce2ffacd86824914c82e28990ad7f00399"}, + {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f083fc24912aa410be21fa16d157fed2055dab1cc4b6934a0e03cba69eb242b9"}, + {file = "nvidia_cufft_cu12-11.2.1.3-py3-none-win_amd64.whl", hash = "sha256:d802f4954291101186078ccbe22fc285a902136f974d369540fd4a5333d1440b"}, +] + +[package.dependencies] +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-curand-cu12" +version = "10.3.5.147" +description = "CURAND native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1f173f09e3e3c76ab084aba0de819c49e56614feae5c12f69883f4ae9bb5fad9"}, + {file = "nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a88f583d4e0bb643c49743469964103aa59f7f708d862c3ddb0fc07f851e3b8b"}, + {file = "nvidia_curand_cu12-10.3.5.147-py3-none-win_amd64.whl", hash = "sha256:f307cc191f96efe9e8f05a87096abc20d08845a841889ef78cb06924437f6771"}, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.6.1.9" +description = "CUDA solver native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_aarch64.whl", hash = "sha256:d338f155f174f90724bbde3758b7ac375a70ce8e706d70b018dd3375545fc84e"}, + {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl", hash = "sha256:19e33fa442bcfd085b3086c4ebf7e8debc07cfe01e11513cc6d332fd918ac260"}, + {file = "nvidia_cusolver_cu12-11.6.1.9-py3-none-win_amd64.whl", hash = "sha256:e77314c9d7b694fcebc84f58989f3aa4fb4cb442f12ca1a9bde50f5e8f6d1b9c"}, +] + +[package.dependencies] +nvidia-cublas-cu12 = "*" +nvidia-cusparse-cu12 = "*" +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.3.1.170" +description = "CUSPARSE native runtime libraries" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_aarch64.whl", hash = "sha256:9d32f62896231ebe0480efd8a7f702e143c98cfaa0e8a76df3386c1ba2b54df3"}, + {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl", hash = "sha256:ea4f11a2904e2a8dc4b1833cc1b5181cde564edd0d5cd33e3c168eff2d1863f1"}, + {file = "nvidia_cusparse_cu12-12.3.1.170-py3-none-win_amd64.whl", hash = "sha256:9bc90fb087bc7b4c15641521f31c0371e9a612fc2ba12c338d3ae032e6b6797f"}, +] + +[package.dependencies] +nvidia-nvjitlink-cu12 = "*" + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.21.5" +description = "NVIDIA Collective Communication Library (NCCL) Runtime" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nccl_cu12-2.21.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8579076d30a8c24988834445f8d633c697d42397e92ffc3f63fa26766d25e0a0"}, +] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.4.127" +description = "Nvidia JIT LTO Library" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4abe7fef64914ccfa909bc2ba39739670ecc9e820c83ccc7a6ed414122599b83"}, + {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:06b3b9b25bf3f8af351d664978ca26a16d2c5127dbd53c0497e28d1fb9611d57"}, + {file = "nvidia_nvjitlink_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:fd9020c501d27d135f983c6d3e244b197a7ccad769e34df53a42e276b0e25fa1"}, +] + +[[package]] +name = "nvidia-nvtx-cu12" +version = "12.4.127" +description = "NVIDIA Tools Extension" +optional = false +python-versions = ">=3" +files = [ + {file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7959ad635db13edf4fc65c06a6e9f9e55fc2f92596db928d169c0bb031e88ef3"}, + {file = "nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a"}, + {file = "nvidia_nvtx_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:641dccaaa1139f3ffb0d3164b4b84f9d253397e38246a4f2f36728b48566d485"}, +] + [[package]] name = "openai" version = "1.54.4" @@ -2597,6 +2941,100 @@ files = [ {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, ] +[[package]] +name = "outlines" +version = "0.1.5" +description = "Probabilistic Generative Model Programming" +optional = false +python-versions = ">=3.9" +files = [ + {file = "outlines-0.1.5-py3-none-any.whl", hash = "sha256:072443e6d3064c8b705ea2956d52bc7947a7c7310a17c07b9ef2133aec64bece"}, + {file = "outlines-0.1.5.tar.gz", hash = "sha256:f0e0efc382d70abe6d5782283fd7fb4eca8380ae3f554df3bce10998452b2115"}, +] + +[package.dependencies] +airportsdata = "*" +cloudpickle = "*" +datasets = "*" +diskcache = "*" +interegular = "*" +jinja2 = "*" +jsonschema = "*" +lark = "*" +nest_asyncio = "*" +numpy = "<2.0.0" +outlines_core = "0.1.17" +pycountry = "*" +pydantic = ">=2.0" +referencing = "*" +requests = "*" +torch = "*" +tqdm = "*" +typing_extensions = "*" + +[package.extras] +serve = ["fastapi", "pydantic (>=2.0)", "uvicorn", "vllm (>=0.3.0)"] +test = ["accelerate", "beartype (<0.16.0)", "coverage[toml] (>=5.1)", "diff-cover", "exllamav2", "huggingface_hub", "llama-cpp-python", "mlx-lm", "openai (>=1.0.0)", "pillow", "pre-commit", "pytest", "pytest-benchmark", "pytest-cov", "pytest-mock", "responses", "transformers", "vllm"] + +[[package]] +name = "outlines-core" +version = "0.1.17" +description = "Structured Text Generation in Rust" +optional = false +python-versions = ">=3.8" +files = [ + {file = "outlines_core-0.1.17-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8406ff855d0b6a46a90df51b1250345de917ed688a393f0f6471ad7ea0360522"}, + {file = "outlines_core-0.1.17-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8602b6ffc10a0e1bd3e7f41669bdf155a2dfe8bb1bca93deab36354e7f5c1d5a"}, + {file = "outlines_core-0.1.17-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d381e7ff0be6797dbbb6a5d6b3c60dd8fb862bf829ccdd45de86b8886e5e9a00"}, + {file = "outlines_core-0.1.17-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:661b4f5ba19119eaa98ffbbcb466b6fa34bae20353e6c61f155571f0a1937b67"}, + {file = "outlines_core-0.1.17-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ca47e609daec4c855ac1eb23697764d34efe58824d7a1b191b4adfa9248d1a"}, + {file = "outlines_core-0.1.17-cp310-cp310-win32.whl", hash = "sha256:8477aa967d37a0257046b997c06e2229a981269e25b71738cf90b8dd68a939ce"}, + {file = "outlines_core-0.1.17-cp310-cp310-win_amd64.whl", hash = "sha256:b6ffc681a3f6511dabbf1ec9a121f65a57a17358c7c757fdc7a019835385ba62"}, + {file = "outlines_core-0.1.17-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ca85ef745f512c288b5eb9911414c1fa78dd83c160d1a3e8b0ef6d1d8c17129"}, + {file = "outlines_core-0.1.17-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:543234e0679bb933ce5eea8b20b952b0d3a41ec0e428c47910517812c54a8626"}, + {file = "outlines_core-0.1.17-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1da1a47e9eae006b7ac75d92a1efed85056aa6e13c4fd0580dc6c72f9c090c31"}, + {file = "outlines_core-0.1.17-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46a0c4db4cda55d1e4c14fefc88ee89351078d3a9d9a73bcceb1ef22cb8767de"}, + {file = "outlines_core-0.1.17-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cc3fa10a7673c64afcabc1ce60c14af99c64d2faca6be3d6593ccc7d93b86683"}, + {file = "outlines_core-0.1.17-cp311-cp311-win32.whl", hash = "sha256:47978a58cfd54fda9e9f7080644f1a91c3ea1ac7a19661dd904505463191f4ac"}, + {file = "outlines_core-0.1.17-cp311-cp311-win_amd64.whl", hash = "sha256:0e2d3ac5b549931743b413659eb702fdb2251350c595c9057f1c219f88ae23bd"}, + {file = "outlines_core-0.1.17-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1056bc12c62d5f85ca1768b087d73fcebecd4b5613b1af699a46d9fc92c28f26"}, + {file = "outlines_core-0.1.17-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c7df3872c9db77f4f6086ca4315a2cd6d60a50ac1d96be3e6f6445ef5d0ff29b"}, + {file = "outlines_core-0.1.17-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e38896880ef1681d94ad270fbfe831ea6ccfe46a4e7a70c9e47d35b20e4ebd5d"}, + {file = "outlines_core-0.1.17-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a64c62a9ee73c368e5f058a3ca59834b87259820fe2a0639d2fa02fed7bad01"}, + {file = "outlines_core-0.1.17-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1ba904fdef09fc52fcddca0d7ae24729be35d2f2bdde787a6ec628408c487677"}, + {file = "outlines_core-0.1.17-cp312-cp312-win32.whl", hash = "sha256:5624dfa129ddf348596040e2122b2fc1d2cfb20b2d0cc2868df8c101b5781327"}, + {file = "outlines_core-0.1.17-cp312-cp312-win_amd64.whl", hash = "sha256:f930e9c0bf5939047a76aee23cf984a83aaf859aedd988ae5249134ff8a2577b"}, + {file = "outlines_core-0.1.17-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5c70efcdfff7d5017cb8635789e43050e616a8144dab6ab854420cda3ae5b967"}, + {file = "outlines_core-0.1.17-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bab703fb11aad79c58f1ea158caae2489c7ff9b1898ec25d802662502ee0844a"}, + {file = "outlines_core-0.1.17-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a0973b8bfd3432627d0fa76d1c1d2f5c1ab3b838a4559c69c10b80b1ace52b8"}, + {file = "outlines_core-0.1.17-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de2a3082af9995c45552c2bb42db02abf60328bc2d5371d0a5924a7453410145"}, + {file = "outlines_core-0.1.17-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:47adcad14d4d2a3093ef7af2b8ae4c750192ba3947f7d3e85b8e11cb118fc7fd"}, + {file = "outlines_core-0.1.17-cp313-cp313-win32.whl", hash = "sha256:88b83d497d272a3244a598ef029c572cc5a354fb48d115a94f2bb39db47fc2b0"}, + {file = "outlines_core-0.1.17-cp313-cp313-win_amd64.whl", hash = "sha256:a7ab7a4534172e949814609d3152c70a305244445bdfba51204d99e6c658ab64"}, + {file = "outlines_core-0.1.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:35e4aeb7e05d4afe5c8c8b9e90993406d91d86ef86bb7f629947adf903345165"}, + {file = "outlines_core-0.1.17-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26a235d304e3ca84deda377cf51efb47f13f9abaa21c0ff9930037f7a87a5b68"}, + {file = "outlines_core-0.1.17-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d8350947367caa0f99dfa99cfe4cf19c517ca0b0ddeb78bbb2a34fd0e3f9b42"}, + {file = "outlines_core-0.1.17-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdda0cb1525853cb85a10cb73facf18b6b44e5dcdf385068eea2a814230704f5"}, + {file = "outlines_core-0.1.17-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7cdf6f8cc5b5ba90d059ad5d351251a63cf06b3d6d62e6ab3ba49079c344d472"}, + {file = "outlines_core-0.1.17-cp38-cp38-win32.whl", hash = "sha256:b6c2f1d3df66b592fc889bf90c871bbb878fdc03355a4a4092ffe086fa962e8a"}, + {file = "outlines_core-0.1.17-cp38-cp38-win_amd64.whl", hash = "sha256:f66e576ffa0f07857289dd35cf524225fec04a75c66b8d99d8dfda0f3d763d8a"}, + {file = "outlines_core-0.1.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a83e52437954f1fc39fbc3d78182890284b495580b9246c4e9ca0c1b61fa54a"}, + {file = "outlines_core-0.1.17-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:624ae80f4bf3faa16b9654df0fb9bc5aec38e537f07b0d64c99a4358ae597ab5"}, + {file = "outlines_core-0.1.17-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cca7897d65400481a763b88a889fae41032d2340325c76dc5af9458d474e1b2"}, + {file = "outlines_core-0.1.17-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7157749b0105aa1c5c50974ab6d2badde8660176a3ec5eacedee4fb2137f94e7"}, + {file = "outlines_core-0.1.17-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f146d76d73e3f43604752b6e4324d38cfdbe9197ffe661482d0e1d7368fb06a"}, + {file = "outlines_core-0.1.17-cp39-cp39-win32.whl", hash = "sha256:466d3817fc50268d82084efde5524a345f884339d9fe21773afd47e1a65e2671"}, + {file = "outlines_core-0.1.17-cp39-cp39-win_amd64.whl", hash = "sha256:b4d7db5ce2a88b9399e7c492e8a34da740d3dc86f0ddf80538903c31d05a12d4"}, + {file = "outlines_core-0.1.17.tar.gz", hash = "sha256:0925a12ab1e8818c6f1896feefdb4d4d8c922e6461515062d1bd3e60459b0281"}, +] + +[package.dependencies] +interegular = "*" +jsonschema = "*" + +[package.extras] +test = ["accelerate", "asv", "beartype (<0.16.0)", "coverage[toml] (>=5.1)", "datasets", "diff-cover", "huggingface-hub", "numpy", "pillow", "pre-commit", "pydantic", "pytest", "pytest-benchmark", "pytest-cov", "pytest-mock", "scipy", "setuptools-rust", "torch", "transformers"] + [[package]] name = "overrides" version = "7.7.0" @@ -2968,6 +3406,60 @@ files = [ [package.extras] tests = ["pytest"] +[[package]] +name = "pyarrow" +version = "18.0.0" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pyarrow-18.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2333f93260674e185cfbf208d2da3007132572e56871f451ba1a556b45dae6e2"}, + {file = "pyarrow-18.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:4c381857754da44326f3a49b8b199f7f87a51c2faacd5114352fc78de30d3aba"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:603cd8ad4976568954598ef0a6d4ed3dfb78aff3d57fa8d6271f470f0ce7d34f"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58a62549a3e0bc9e03df32f350e10e1efb94ec6cf63e3920c3385b26663948ce"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bc97316840a349485fbb137eb8d0f4d7057e1b2c1272b1a20eebbbe1848f5122"}, + {file = "pyarrow-18.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:2e549a748fa8b8715e734919923f69318c953e077e9c02140ada13e59d043310"}, + {file = "pyarrow-18.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:606e9a3dcb0f52307c5040698ea962685fb1c852d72379ee9412be7de9c5f9e2"}, + {file = "pyarrow-18.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:d5795e37c0a33baa618c5e054cd61f586cf76850a251e2b21355e4085def6280"}, + {file = "pyarrow-18.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:5f0510608ccd6e7f02ca8596962afb8c6cc84c453e7be0da4d85f5f4f7b0328a"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616ea2826c03c16e87f517c46296621a7c51e30400f6d0a61be645f203aa2b93"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1824f5b029ddd289919f354bc285992cb4e32da518758c136271cf66046ef22"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6dd1b52d0d58dd8f685ced9971eb49f697d753aa7912f0a8f50833c7a7426319"}, + {file = "pyarrow-18.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:320ae9bd45ad7ecc12ec858b3e8e462578de060832b98fc4d671dee9f10d9954"}, + {file = "pyarrow-18.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2c992716cffb1088414f2b478f7af0175fd0a76fea80841b1706baa8fb0ebaad"}, + {file = "pyarrow-18.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:e7ab04f272f98ebffd2a0661e4e126036f6936391ba2889ed2d44c5006237802"}, + {file = "pyarrow-18.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:03f40b65a43be159d2f97fd64dc998f769d0995a50c00f07aab58b0b3da87e1f"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be08af84808dff63a76860847c48ec0416928a7b3a17c2f49a072cac7c45efbd"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70c1965cde991b711a98448ccda3486f2a336457cf4ec4dca257a926e149c9"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:00178509f379415a3fcf855af020e3340254f990a8534294ec3cf674d6e255fd"}, + {file = "pyarrow-18.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a71ab0589a63a3e987beb2bc172e05f000a5c5be2636b4b263c44034e215b5d7"}, + {file = "pyarrow-18.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe92efcdbfa0bcf2fa602e466d7f2905500f33f09eb90bf0bcf2e6ca41b574c8"}, + {file = "pyarrow-18.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:907ee0aa8ca576f5e0cdc20b5aeb2ad4d3953a3b4769fc4b499e00ef0266f02f"}, + {file = "pyarrow-18.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:66dcc216ebae2eb4c37b223feaf82f15b69d502821dde2da138ec5a3716e7463"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc1daf7c425f58527900876354390ee41b0ae962a73ad0959b9d829def583bb1"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:871b292d4b696b09120ed5bde894f79ee2a5f109cb84470546471df264cae136"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:082ba62bdcb939824ba1ce10b8acef5ab621da1f4c4805e07bfd153617ac19d4"}, + {file = "pyarrow-18.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:2c664ab88b9766413197733c1720d3dcd4190e8fa3bbdc3710384630a0a7207b"}, + {file = "pyarrow-18.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:dc892be34dbd058e8d189b47db1e33a227d965ea8805a235c8a7286f7fd17d3a"}, + {file = "pyarrow-18.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:28f9c39a56d2c78bf6b87dcc699d520ab850919d4a8c7418cd20eda49874a2ea"}, + {file = "pyarrow-18.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:f1a198a50c409ab2d009fbf20956ace84567d67f2c5701511d4dd561fae6f32e"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5bd7fd32e3ace012d43925ea4fc8bd1b02cc6cc1e9813b518302950e89b5a22"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:336addb8b6f5208be1b2398442c703a710b6b937b1a046065ee4db65e782ff5a"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:45476490dd4adec5472c92b4d253e245258745d0ccaabe706f8d03288ed60a79"}, + {file = "pyarrow-18.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b46591222c864e7da7faa3b19455196416cd8355ff6c2cc2e65726a760a3c420"}, + {file = "pyarrow-18.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:eb7e3abcda7e1e6b83c2dc2909c8d045881017270a119cc6ee7fdcfe71d02df8"}, + {file = "pyarrow-18.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:09f30690b99ce34e0da64d20dab372ee54431745e4efb78ac938234a282d15f9"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5ca5d707e158540312e09fd907f9f49bacbe779ab5236d9699ced14d2293b8"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6331f280c6e4521c69b201a42dd978f60f7e129511a55da9e0bfe426b4ebb8d"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3ac24b2be732e78a5a3ac0b3aa870d73766dd00beba6e015ea2ea7394f8b4e55"}, + {file = "pyarrow-18.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b30a927c6dff89ee702686596f27c25160dd6c99be5bcc1513a763ae5b1bfc03"}, + {file = "pyarrow-18.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:8f40ec677e942374e3d7f2fad6a67a4c2811a8b975e8703c6fd26d3b168a90e2"}, + {file = "pyarrow-18.0.0.tar.gz", hash = "sha256:a6aa027b1a9d2970cf328ccd6dbe4a996bc13c39fd427f502782f5bdb9ca20f5"}, +] + +[package.extras] +test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] + [[package]] name = "pybtex" version = "0.24.0" @@ -3002,6 +3494,17 @@ files = [ docutils = ">=0.14" pybtex = ">=0.16" +[[package]] +name = "pycountry" +version = "24.6.1" +description = "ISO country, subdivision, language, currency and script definitions and their translations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycountry-24.6.1-py3-none-any.whl", hash = "sha256:f1a4fb391cd7214f8eefd39556d740adcc233c778a27f8942c8dca351d6ce06f"}, + {file = "pycountry-24.6.1.tar.gz", hash = "sha256:b61b3faccea67f87d10c1f2b0fc0be714409e8fcdcc1315613174f6466c10221"}, +] + [[package]] name = "pycparser" version = "2.22" @@ -3779,6 +4282,138 @@ files = [ {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, ] +[[package]] +name = "safetensors" +version = "0.4.5" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7"}, + {file = "safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27"}, + {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6885016f34bef80ea1085b7e99b3c1f92cb1be78a49839203060f67b40aee761"}, + {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:133620f443450429322f238fda74d512c4008621227fccf2f8cf4a76206fea7c"}, + {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4fb3e0609ec12d2a77e882f07cced530b8262027f64b75d399f1504ffec0ba56"}, + {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0f1dd769f064adc33831f5e97ad07babbd728427f98e3e1db6902e369122737"}, + {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6d156bdb26732feada84f9388a9f135528c1ef5b05fae153da365ad4319c4c5"}, + {file = "safetensors-0.4.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e347d77e2c77eb7624400ccd09bed69d35c0332f417ce8c048d404a096c593b"}, + {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9f556eea3aec1d3d955403159fe2123ddd68e880f83954ee9b4a3f2e15e716b6"}, + {file = "safetensors-0.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9483f42be3b6bc8ff77dd67302de8ae411c4db39f7224dec66b0eb95822e4163"}, + {file = "safetensors-0.4.5-cp310-none-win32.whl", hash = "sha256:7389129c03fadd1ccc37fd1ebbc773f2b031483b04700923c3511d2a939252cc"}, + {file = "safetensors-0.4.5-cp310-none-win_amd64.whl", hash = "sha256:e98ef5524f8b6620c8cdef97220c0b6a5c1cef69852fcd2f174bb96c2bb316b1"}, + {file = "safetensors-0.4.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:21f848d7aebd5954f92538552d6d75f7c1b4500f51664078b5b49720d180e47c"}, + {file = "safetensors-0.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bb07000b19d41e35eecef9a454f31a8b4718a185293f0d0b1c4b61d6e4487971"}, + {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09dedf7c2fda934ee68143202acff6e9e8eb0ddeeb4cfc24182bef999efa9f42"}, + {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:59b77e4b7a708988d84f26de3ebead61ef1659c73dcbc9946c18f3b1786d2688"}, + {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d3bc83e14d67adc2e9387e511097f254bd1b43c3020440e708858c684cbac68"}, + {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39371fc551c1072976073ab258c3119395294cf49cdc1f8476794627de3130df"}, + {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6c19feda32b931cae0acd42748a670bdf56bee6476a046af20181ad3fee4090"}, + {file = "safetensors-0.4.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a659467495de201e2f282063808a41170448c78bada1e62707b07a27b05e6943"}, + {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bad5e4b2476949bcd638a89f71b6916fa9a5cae5c1ae7eede337aca2100435c0"}, + {file = "safetensors-0.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a3a315a6d0054bc6889a17f5668a73f94f7fe55121ff59e0a199e3519c08565f"}, + {file = "safetensors-0.4.5-cp311-none-win32.whl", hash = "sha256:a01e232e6d3d5cf8b1667bc3b657a77bdab73f0743c26c1d3c5dd7ce86bd3a92"}, + {file = "safetensors-0.4.5-cp311-none-win_amd64.whl", hash = "sha256:cbd39cae1ad3e3ef6f63a6f07296b080c951f24cec60188378e43d3713000c04"}, + {file = "safetensors-0.4.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:473300314e026bd1043cef391bb16a8689453363381561b8a3e443870937cc1e"}, + {file = "safetensors-0.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:801183a0f76dc647f51a2d9141ad341f9665602a7899a693207a82fb102cc53e"}, + {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1524b54246e422ad6fb6aea1ac71edeeb77666efa67230e1faf6999df9b2e27f"}, + {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3139098e3e8b2ad7afbca96d30ad29157b50c90861084e69fcb80dec7430461"}, + {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65573dc35be9059770808e276b017256fa30058802c29e1038eb1c00028502ea"}, + {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd33da8e9407559f8779c82a0448e2133737f922d71f884da27184549416bfed"}, + {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3685ce7ed036f916316b567152482b7e959dc754fcc4a8342333d222e05f407c"}, + {file = "safetensors-0.4.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dde2bf390d25f67908278d6f5d59e46211ef98e44108727084d4637ee70ab4f1"}, + {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7469d70d3de970b1698d47c11ebbf296a308702cbaae7fcb993944751cf985f4"}, + {file = "safetensors-0.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a6ba28118636a130ccbb968bc33d4684c48678695dba2590169d5ab03a45646"}, + {file = "safetensors-0.4.5-cp312-none-win32.whl", hash = "sha256:c859c7ed90b0047f58ee27751c8e56951452ed36a67afee1b0a87847d065eec6"}, + {file = "safetensors-0.4.5-cp312-none-win_amd64.whl", hash = "sha256:b5a8810ad6a6f933fff6c276eae92c1da217b39b4d8b1bc1c0b8af2d270dc532"}, + {file = "safetensors-0.4.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:25e5f8e2e92a74f05b4ca55686234c32aac19927903792b30ee6d7bd5653d54e"}, + {file = "safetensors-0.4.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:81efb124b58af39fcd684254c645e35692fea81c51627259cdf6d67ff4458916"}, + {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:585f1703a518b437f5103aa9cf70e9bd437cb78eea9c51024329e4fb8a3e3679"}, + {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b99fbf72e3faf0b2f5f16e5e3458b93b7d0a83984fe8d5364c60aa169f2da89"}, + {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b17b299ca9966ca983ecda1c0791a3f07f9ca6ab5ded8ef3d283fff45f6bcd5f"}, + {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76ded72f69209c9780fdb23ea89e56d35c54ae6abcdec67ccb22af8e696e449a"}, + {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2783956926303dcfeb1de91a4d1204cd4089ab441e622e7caee0642281109db3"}, + {file = "safetensors-0.4.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d94581aab8c6b204def4d7320f07534d6ee34cd4855688004a4354e63b639a35"}, + {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:67e1e7cb8678bb1b37ac48ec0df04faf689e2f4e9e81e566b5c63d9f23748523"}, + {file = "safetensors-0.4.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:dbd280b07e6054ea68b0cb4b16ad9703e7d63cd6890f577cb98acc5354780142"}, + {file = "safetensors-0.4.5-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:77d9b228da8374c7262046a36c1f656ba32a93df6cc51cd4453af932011e77f1"}, + {file = "safetensors-0.4.5-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:500cac01d50b301ab7bb192353317035011c5ceeef0fca652f9f43c000bb7f8d"}, + {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75331c0c746f03158ded32465b7d0b0e24c5a22121743662a2393439c43a45cf"}, + {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670e95fe34e0d591d0529e5e59fd9d3d72bc77b1444fcaa14dccda4f36b5a38b"}, + {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:098923e2574ff237c517d6e840acada8e5b311cb1fa226019105ed82e9c3b62f"}, + {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13ca0902d2648775089fa6a0c8fc9e6390c5f8ee576517d33f9261656f851e3f"}, + {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f0032bedc869c56f8d26259fe39cd21c5199cd57f2228d817a0e23e8370af25"}, + {file = "safetensors-0.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4b15f51b4f8f2a512341d9ce3475cacc19c5fdfc5db1f0e19449e75f95c7dc8"}, + {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f6594d130d0ad933d885c6a7b75c5183cb0e8450f799b80a39eae2b8508955eb"}, + {file = "safetensors-0.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:60c828a27e852ded2c85fc0f87bf1ec20e464c5cd4d56ff0e0711855cc2e17f8"}, + {file = "safetensors-0.4.5-cp37-none-win32.whl", hash = "sha256:6d3de65718b86c3eeaa8b73a9c3d123f9307a96bbd7be9698e21e76a56443af5"}, + {file = "safetensors-0.4.5-cp37-none-win_amd64.whl", hash = "sha256:5a2d68a523a4cefd791156a4174189a4114cf0bf9c50ceb89f261600f3b2b81a"}, + {file = "safetensors-0.4.5-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:e7a97058f96340850da0601a3309f3d29d6191b0702b2da201e54c6e3e44ccf0"}, + {file = "safetensors-0.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:63bfd425e25f5c733f572e2246e08a1c38bd6f2e027d3f7c87e2e43f228d1345"}, + {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3664ac565d0e809b0b929dae7ccd74e4d3273cd0c6d1220c6430035befb678e"}, + {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:313514b0b9b73ff4ddfb4edd71860696dbe3c1c9dc4d5cc13dbd74da283d2cbf"}, + {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31fa33ee326f750a2f2134a6174773c281d9a266ccd000bd4686d8021f1f3dac"}, + {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:09566792588d77b68abe53754c9f1308fadd35c9f87be939e22c623eaacbed6b"}, + {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309aaec9b66cbf07ad3a2e5cb8a03205663324fea024ba391594423d0f00d9fe"}, + {file = "safetensors-0.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:53946c5813b8f9e26103c5efff4a931cc45d874f45229edd68557ffb35ffb9f8"}, + {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:868f9df9e99ad1e7f38c52194063a982bc88fedc7d05096f4f8160403aaf4bd6"}, + {file = "safetensors-0.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9cc9449bd0b0bc538bd5e268221f0c5590bc5c14c1934a6ae359d44410dc68c4"}, + {file = "safetensors-0.4.5-cp38-none-win32.whl", hash = "sha256:83c4f13a9e687335c3928f615cd63a37e3f8ef072a3f2a0599fa09f863fb06a2"}, + {file = "safetensors-0.4.5-cp38-none-win_amd64.whl", hash = "sha256:b98d40a2ffa560653f6274e15b27b3544e8e3713a44627ce268f419f35c49478"}, + {file = "safetensors-0.4.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cf727bb1281d66699bef5683b04d98c894a2803442c490a8d45cd365abfbdeb2"}, + {file = "safetensors-0.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:96f1d038c827cdc552d97e71f522e1049fef0542be575421f7684756a748e457"}, + {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:139fbee92570ecea774e6344fee908907db79646d00b12c535f66bc78bd5ea2c"}, + {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c36302c1c69eebb383775a89645a32b9d266878fab619819ce660309d6176c9b"}, + {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d641f5b8149ea98deb5ffcf604d764aad1de38a8285f86771ce1abf8e74c4891"}, + {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4db6a61d968de73722b858038c616a1bebd4a86abe2688e46ca0cc2d17558f2"}, + {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b75a616e02f21b6f1d5785b20cecbab5e2bd3f6358a90e8925b813d557666ec1"}, + {file = "safetensors-0.4.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:788ee7d04cc0e0e7f944c52ff05f52a4415b312f5efd2ee66389fb7685ee030c"}, + {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87bc42bd04fd9ca31396d3ca0433db0be1411b6b53ac5a32b7845a85d01ffc2e"}, + {file = "safetensors-0.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4037676c86365a721a8c9510323a51861d703b399b78a6b4486a54a65a975fca"}, + {file = "safetensors-0.4.5-cp39-none-win32.whl", hash = "sha256:1500418454529d0ed5c1564bda376c4ddff43f30fce9517d9bee7bcce5a8ef50"}, + {file = "safetensors-0.4.5-cp39-none-win_amd64.whl", hash = "sha256:9d1a94b9d793ed8fe35ab6d5cea28d540a46559bafc6aae98f30ee0867000cab"}, + {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdadf66b5a22ceb645d5435a0be7a0292ce59648ca1d46b352f13cff3ea80410"}, + {file = "safetensors-0.4.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d42ffd4c2259f31832cb17ff866c111684c87bd930892a1ba53fed28370c918c"}, + {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd8a1f6d2063a92cd04145c7fd9e31a1c7d85fbec20113a14b487563fdbc0597"}, + {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:951d2fcf1817f4fb0ef0b48f6696688a4e852a95922a042b3f96aaa67eedc920"}, + {file = "safetensors-0.4.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ac85d9a8c1af0e3132371d9f2d134695a06a96993c2e2f0bbe25debb9e3f67a"}, + {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e3cec4a29eb7fe8da0b1c7988bc3828183080439dd559f720414450de076fcab"}, + {file = "safetensors-0.4.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:21742b391b859e67b26c0b2ac37f52c9c0944a879a25ad2f9f9f3cd61e7fda8f"}, + {file = "safetensors-0.4.5-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7db3006a4915151ce1913652e907cdede299b974641a83fbc092102ac41b644"}, + {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f68bf99ea970960a237f416ea394e266e0361895753df06e3e06e6ea7907d98b"}, + {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8158938cf3324172df024da511839d373c40fbfaa83e9abf467174b2910d7b4c"}, + {file = "safetensors-0.4.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:540ce6c4bf6b58cb0fd93fa5f143bc0ee341c93bb4f9287ccd92cf898cc1b0dd"}, + {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bfeaa1a699c6b9ed514bd15e6a91e74738b71125a9292159e3d6b7f0a53d2cde"}, + {file = "safetensors-0.4.5-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:01c8f00da537af711979e1b42a69a8ec9e1d7112f208e0e9b8a35d2c381085ef"}, + {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a0dd565f83b30f2ca79b5d35748d0d99dd4b3454f80e03dfb41f0038e3bdf180"}, + {file = "safetensors-0.4.5-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:023b6e5facda76989f4cba95a861b7e656b87e225f61811065d5c501f78cdb3f"}, + {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9633b663393d5796f0b60249549371e392b75a0b955c07e9c6f8708a87fc841f"}, + {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78dd8adfb48716233c45f676d6e48534d34b4bceb50162c13d1f0bdf6f78590a"}, + {file = "safetensors-0.4.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8e8deb16c4321d61ae72533b8451ec4a9af8656d1c61ff81aa49f966406e4b68"}, + {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:52452fa5999dc50c4decaf0c53aa28371f7f1e0fe5c2dd9129059fbe1e1599c7"}, + {file = "safetensors-0.4.5-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d5f23198821e227cfc52d50fa989813513db381255c6d100927b012f0cfec63d"}, + {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f4beb84b6073b1247a773141a6331117e35d07134b3bb0383003f39971d414bb"}, + {file = "safetensors-0.4.5-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68814d599d25ed2fdd045ed54d370d1d03cf35e02dce56de44c651f828fb9b7b"}, + {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b6453c54c57c1781292c46593f8a37254b8b99004c68d6c3ce229688931a22"}, + {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:adaa9c6dead67e2dd90d634f89131e43162012479d86e25618e821a03d1eb1dc"}, + {file = "safetensors-0.4.5-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73e7d408e9012cd17511b382b43547850969c7979efc2bc353f317abaf23c84c"}, + {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:775409ce0fcc58b10773fdb4221ed1eb007de10fe7adbdf8f5e8a56096b6f0bc"}, + {file = "safetensors-0.4.5-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:834001bed193e4440c4a3950a31059523ee5090605c907c66808664c932b549c"}, + {file = "safetensors-0.4.5.tar.gz", hash = "sha256:d73de19682deabb02524b3d5d1f8b3aaba94c72f1bbfc7911b9b9d5d391c0310"}, +] + +[package.extras] +all = ["safetensors[jax]", "safetensors[numpy]", "safetensors[paddlepaddle]", "safetensors[pinned-tf]", "safetensors[quality]", "safetensors[testing]", "safetensors[torch]"] +dev = ["safetensors[all]"] +jax = ["flax (>=0.6.3)", "jax (>=0.3.25)", "jaxlib (>=0.3.25)", "safetensors[numpy]"] +mlx = ["mlx (>=0.0.9)"] +numpy = ["numpy (>=1.21.6)"] +paddlepaddle = ["paddlepaddle (>=2.4.1)", "safetensors[numpy]"] +pinned-tf = ["safetensors[numpy]", "tensorflow (==2.11.0)"] +quality = ["black (==22.3)", "click (==8.0.4)", "flake8 (>=3.8.3)", "isort (>=5.5.4)"] +tensorflow = ["safetensors[numpy]", "tensorflow (>=2.11.0)"] +testing = ["h5py (>=3.7.0)", "huggingface-hub (>=0.12.1)", "hypothesis (>=6.70.2)", "pytest (>=7.2.0)", "pytest-benchmark (>=4.0.0)", "safetensors[numpy]", "setuptools-rust (>=1.5.2)"] +torch = ["safetensors[numpy]", "torch (>=1.10)"] + [[package]] name = "send2trash" version = "1.8.3" @@ -4362,6 +4997,23 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] +[[package]] +name = "sympy" +version = "1.13.1" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.13.1-py3-none-any.whl", hash = "sha256:db36cdc64bf61b9b24578b6f7bab1ecdd2452cf008f34faa33776680c26d66f8"}, + {file = "sympy-1.13.1.tar.gz", hash = "sha256:9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f"}, +] + +[package.dependencies] +mpmath = ">=1.1.0,<1.4" + +[package.extras] +dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] + [[package]] name = "tabulate" version = "0.9.0" @@ -4628,6 +5280,58 @@ files = [ {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, ] +[[package]] +name = "torch" +version = "2.5.1" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "torch-2.5.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:71328e1bbe39d213b8721678f9dcac30dfc452a46d586f1d514a6aa0a99d4744"}, + {file = "torch-2.5.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:34bfa1a852e5714cbfa17f27c49d8ce35e1b7af5608c4bc6e81392c352dbc601"}, + {file = "torch-2.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:32a037bd98a241df6c93e4c789b683335da76a2ac142c0973675b715102dc5fa"}, + {file = "torch-2.5.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:23d062bf70776a3d04dbe74db950db2a5245e1ba4f27208a87f0d743b0d06e86"}, + {file = "torch-2.5.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:de5b7d6740c4b636ef4db92be922f0edc425b65ed78c5076c43c42d362a45457"}, + {file = "torch-2.5.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:340ce0432cad0d37f5a31be666896e16788f1adf8ad7be481196b503dad675b9"}, + {file = "torch-2.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:603c52d2fe06433c18b747d25f5c333f9c1d58615620578c326d66f258686f9a"}, + {file = "torch-2.5.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:31f8c39660962f9ae4eeec995e3049b5492eb7360dd4f07377658ef4d728fa4c"}, + {file = "torch-2.5.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ed231a4b3a5952177fafb661213d690a72caaad97d5824dd4fc17ab9e15cec03"}, + {file = "torch-2.5.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:3f4b7f10a247e0dcd7ea97dc2d3bfbfc90302ed36d7f3952b0008d0df264e697"}, + {file = "torch-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:73e58e78f7d220917c5dbfad1a40e09df9929d3b95d25e57d9f8558f84c9a11c"}, + {file = "torch-2.5.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:8c712df61101964eb11910a846514011f0b6f5920c55dbf567bff8a34163d5b1"}, + {file = "torch-2.5.1-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:9b61edf3b4f6e3b0e0adda8b3960266b9009d02b37555971f4d1c8f7a05afed7"}, + {file = "torch-2.5.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1f3b7fb3cf7ab97fae52161423f81be8c6b8afac8d9760823fd623994581e1a3"}, + {file = "torch-2.5.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:7974e3dce28b5a21fb554b73e1bc9072c25dde873fa00d54280861e7a009d7dc"}, + {file = "torch-2.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:46c817d3ea33696ad3b9df5e774dba2257e9a4cd3c4a3afbf92f6bb13ac5ce2d"}, + {file = "torch-2.5.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:8046768b7f6d35b85d101b4b38cba8aa2f3cd51952bc4c06a49580f2ce682291"}, +] + +[package.dependencies] +filelock = "*" +fsspec = "*" +jinja2 = "*" +networkx = "*" +nvidia-cublas-cu12 = {version = "12.4.5.8", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-cupti-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-nvrtc-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cuda-runtime-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cudnn-cu12 = {version = "9.1.0.70", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cufft-cu12 = {version = "11.2.1.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-curand-cu12 = {version = "10.3.5.147", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusolver-cu12 = {version = "11.6.1.9", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-cusparse-cu12 = {version = "12.3.1.170", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nccl-cu12 = {version = "2.21.5", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvjitlink-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +nvidia-nvtx-cu12 = {version = "12.4.127", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +setuptools = {version = "*", markers = "python_version >= \"3.12\""} +sympy = {version = "1.13.1", markers = "python_version >= \"3.9\""} +triton = {version = "3.1.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\""} +typing-extensions = ">=4.8.0" + +[package.extras] +opt-einsum = ["opt-einsum (>=3.3)"] +optree = ["optree (>=0.12.0)"] + [[package]] name = "tornado" version = "6.4.1" @@ -4684,6 +5388,97 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "transformers" +version = "4.46.3" +description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "transformers-4.46.3-py3-none-any.whl", hash = "sha256:a12ef6f52841fd190a3e5602145b542d03507222f2c64ebb7ee92e8788093aef"}, + {file = "transformers-4.46.3.tar.gz", hash = "sha256:8ee4b3ae943fe33e82afff8e837f4b052058b07ca9be3cb5b729ed31295f72cc"}, +] + +[package.dependencies] +filelock = "*" +huggingface-hub = ">=0.23.2,<1.0" +numpy = ">=1.17" +packaging = ">=20.0" +pyyaml = ">=5.1" +regex = "!=2019.12.17" +requests = "*" +safetensors = ">=0.4.1" +tokenizers = ">=0.20,<0.21" +tqdm = ">=4.27" + +[package.extras] +accelerate = ["accelerate (>=0.26.0)"] +agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision"] +audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +benchmark = ["optimum-benchmark (>=0.3.0)"] +codecarbon = ["codecarbon (==1.2.0)"] +deepspeed = ["accelerate (>=0.26.0)", "deepspeed (>=0.9.3)"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.26.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.20,<0.21)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] +flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +ftfy = ["ftfy"] +integrations = ["optuna", "ray[tune] (>=2.7.0)", "sigopt"] +ja = ["fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "rhoknp (>=1.1.0,<1.3.1)", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)"] +modelcreation = ["cookiecutter (==1.7.3)"] +natten = ["natten (>=0.14.6,<0.15.0)"] +onnx = ["onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "tf2onnx"] +onnxruntime = ["onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)"] +optuna = ["optuna"] +quality = ["GitPython (<3.1.19)", "datasets (!=2.5.0)", "isort (>=5.5.4)", "libcst", "rich", "ruff (==0.5.1)", "urllib3 (<2.0.0)"] +ray = ["ray[tune] (>=2.7.0)"] +retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] +ruff = ["ruff (==0.5.1)"] +sagemaker = ["sagemaker (>=2.31.0)"] +sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] +serving = ["fastapi", "pydantic", "starlette", "uvicorn"] +sigopt = ["sigopt"] +sklearn = ["scikit-learn"] +speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "parameterized", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] +tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] +tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] +tiktoken = ["blobfile", "tiktoken"] +timm = ["timm (<=0.9.16)"] +tokenizers = ["tokenizers (>=0.20,<0.21)"] +torch = ["accelerate (>=0.26.0)", "torch"] +torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] +torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] +torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.20,<0.21)", "torch", "tqdm (>=4.27)"] +video = ["av (==9.2.0)"] +vision = ["Pillow (>=10.0.1,<=15.0)"] + +[[package]] +name = "triton" +version = "3.1.0" +description = "A language and compiler for custom Deep Learning operations" +optional = false +python-versions = "*" +files = [ + {file = "triton-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b0dd10a925263abbe9fa37dcde67a5e9b2383fc269fdf59f5657cac38c5d1d8"}, + {file = "triton-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f34f6e7885d1bf0eaaf7ba875a5f0ce6f3c13ba98f9503651c1e6dc6757ed5c"}, + {file = "triton-3.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8182f42fd8080a7d39d666814fa36c5e30cc00ea7eeeb1a2983dbb4c99a0fdc"}, + {file = "triton-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dadaca7fc24de34e180271b5cf864c16755702e9f63a16f62df714a8099126a"}, + {file = "triton-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aafa9a20cd0d9fee523cd4504aa7131807a864cd77dcf6efe7e981f18b8c6c11"}, +] + +[package.dependencies] +filelock = "*" + +[package.extras] +build = ["cmake (>=3.20)", "lit"] +tests = ["autopep8", "flake8", "isort", "llnl-hatchet", "numpy", "pytest", "scipy (>=1.7.1)"] +tutorials = ["matplotlib", "pandas", "tabulate"] + [[package]] name = "types-python-dateutil" version = "2.9.0.20241003" @@ -4840,6 +5635,138 @@ files = [ [package.extras] test = ["pytest (>=6.0.0)", "setuptools (>=65)"] +[[package]] +name = "xxhash" +version = "3.5.0" +description = "Python binding for xxHash" +optional = false +python-versions = ">=3.7" +files = [ + {file = "xxhash-3.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ece616532c499ee9afbb83078b1b952beffef121d989841f7f4b3dc5ac0fd212"}, + {file = "xxhash-3.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3171f693dbc2cef6477054a665dc255d996646b4023fe56cb4db80e26f4cc520"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c5d3e570ef46adaf93fc81b44aca6002b5a4d8ca11bd0580c07eac537f36680"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7cb29a034301e2982df8b1fe6328a84f4b676106a13e9135a0d7e0c3e9f806da"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d0d307d27099bb0cbeea7260eb39ed4fdb99c5542e21e94bb6fd29e49c57a23"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0342aafd421795d740e514bc9858ebddfc705a75a8c5046ac56d85fe97bf196"}, + {file = "xxhash-3.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dbbd9892c5ebffeca1ed620cf0ade13eb55a0d8c84e0751a6653adc6ac40d0c"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4cc2d67fdb4d057730c75a64c5923abfa17775ae234a71b0200346bfb0a7f482"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ec28adb204b759306a3d64358a5e5c07d7b1dd0ccbce04aa76cb9377b7b70296"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1328f6d8cca2b86acb14104e381225a3d7b42c92c4b86ceae814e5c400dbb415"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8d47ebd9f5d9607fd039c1fbf4994e3b071ea23eff42f4ecef246ab2b7334198"}, + {file = "xxhash-3.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b96d559e0fcddd3343c510a0fe2b127fbff16bf346dd76280b82292567523442"}, + {file = "xxhash-3.5.0-cp310-cp310-win32.whl", hash = "sha256:61c722ed8d49ac9bc26c7071eeaa1f6ff24053d553146d5df031802deffd03da"}, + {file = "xxhash-3.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9bed5144c6923cc902cd14bb8963f2d5e034def4486ab0bbe1f58f03f042f9a9"}, + {file = "xxhash-3.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:893074d651cf25c1cc14e3bea4fceefd67f2921b1bb8e40fcfeba56820de80c6"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1"}, + {file = "xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a"}, + {file = "xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d"}, + {file = "xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839"}, + {file = "xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da"}, + {file = "xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58"}, + {file = "xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00"}, + {file = "xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6"}, + {file = "xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab"}, + {file = "xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e"}, + {file = "xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8"}, + {file = "xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e"}, + {file = "xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6"}, + {file = "xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb"}, + {file = "xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7"}, + {file = "xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c"}, + {file = "xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637"}, + {file = "xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43"}, + {file = "xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b"}, + {file = "xxhash-3.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6e5f70f6dca1d3b09bccb7daf4e087075ff776e3da9ac870f86ca316736bb4aa"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e76e83efc7b443052dd1e585a76201e40b3411fe3da7af4fe434ec51b2f163b"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33eac61d0796ca0591f94548dcfe37bb193671e0c9bcf065789b5792f2eda644"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ec70a89be933ea49222fafc3999987d7899fc676f688dd12252509434636622"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86b8e7f703ec6ff4f351cfdb9f428955859537125904aa8c963604f2e9d3e7"}, + {file = "xxhash-3.5.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0adfbd36003d9f86c8c97110039f7539b379f28656a04097e7434d3eaf9aa131"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:63107013578c8a730419adc05608756c3fa640bdc6abe806c3123a49fb829f43"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:683b94dbd1ca67557850b86423318a2e323511648f9f3f7b1840408a02b9a48c"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5d2a01dcce81789cf4b12d478b5464632204f4c834dc2d064902ee27d2d1f0ee"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:a9d360a792cbcce2fe7b66b8d51274ec297c53cbc423401480e53b26161a290d"}, + {file = "xxhash-3.5.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f0b48edbebea1b7421a9c687c304f7b44d0677c46498a046079d445454504737"}, + {file = "xxhash-3.5.0-cp37-cp37m-win32.whl", hash = "sha256:7ccb800c9418e438b44b060a32adeb8393764da7441eb52aa2aa195448935306"}, + {file = "xxhash-3.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c3bc7bf8cb8806f8d1c9bf149c18708cb1c406520097d6b0a73977460ea03602"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:74752ecaa544657d88b1d1c94ae68031e364a4d47005a90288f3bab3da3c970f"}, + {file = "xxhash-3.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dee1316133c9b463aa81aca676bc506d3f80d8f65aeb0bba2b78d0b30c51d7bd"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602d339548d35a8579c6b013339fb34aee2df9b4e105f985443d2860e4d7ffaa"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:695735deeddfb35da1677dbc16a083445360e37ff46d8ac5c6fcd64917ff9ade"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1030a39ba01b0c519b1a82f80e8802630d16ab95dc3f2b2386a0b5c8ed5cbb10"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5bc08f33c4966f4eb6590d6ff3ceae76151ad744576b5fc6c4ba8edd459fdec"}, + {file = "xxhash-3.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:160e0c19ee500482ddfb5d5570a0415f565d8ae2b3fd69c5dcfce8a58107b1c3"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f1abffa122452481a61c3551ab3c89d72238e279e517705b8b03847b1d93d738"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:d5e9db7ef3ecbfc0b4733579cea45713a76852b002cf605420b12ef3ef1ec148"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:23241ff6423378a731d84864bf923a41649dc67b144debd1077f02e6249a0d54"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:82b833d5563fefd6fceafb1aed2f3f3ebe19f84760fdd289f8b926731c2e6e91"}, + {file = "xxhash-3.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0a80ad0ffd78bef9509eee27b4a29e56f5414b87fb01a888353e3d5bda7038bd"}, + {file = "xxhash-3.5.0-cp38-cp38-win32.whl", hash = "sha256:50ac2184ffb1b999e11e27c7e3e70cc1139047e7ebc1aa95ed12f4269abe98d4"}, + {file = "xxhash-3.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:392f52ebbb932db566973693de48f15ce787cabd15cf6334e855ed22ea0be5b3"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc8cdd7f33d57f0468b0614ae634cc38ab9202c6957a60e31d285a71ebe0301"}, + {file = "xxhash-3.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0c48b6300cd0b0106bf49169c3e0536408dfbeb1ccb53180068a18b03c662ab"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe1a92cfbaa0a1253e339ccec42dbe6db262615e52df591b68726ab10338003f"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:33513d6cc3ed3b559134fb307aae9bdd94d7e7c02907b37896a6c45ff9ce51bd"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eefc37f6138f522e771ac6db71a6d4838ec7933939676f3753eafd7d3f4c40bc"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a606c8070ada8aa2a88e181773fa1ef17ba65ce5dd168b9d08038e2a61b33754"}, + {file = "xxhash-3.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42eca420c8fa072cc1dd62597635d140e78e384a79bb4944f825fbef8bfeeef6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:604253b2143e13218ff1ef0b59ce67f18b8bd1c4205d2ffda22b09b426386898"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6e93a5ad22f434d7876665444a97e713a8f60b5b1a3521e8df11b98309bff833"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7a46e1d6d2817ba8024de44c4fd79913a90e5f7265434cef97026215b7d30df6"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:30eb2efe6503c379b7ab99c81ba4a779748e3830241f032ab46bd182bf5873af"}, + {file = "xxhash-3.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c8aa771ff2c13dd9cda8166d685d7333d389fae30a4d2bb39d63ab5775de8606"}, + {file = "xxhash-3.5.0-cp39-cp39-win32.whl", hash = "sha256:5ed9ebc46f24cf91034544b26b131241b699edbfc99ec5e7f8f3d02d6eb7fba4"}, + {file = "xxhash-3.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:220f3f896c6b8d0316f63f16c077d52c412619e475f9372333474ee15133a558"}, + {file = "xxhash-3.5.0-cp39-cp39-win_arm64.whl", hash = "sha256:a7b1d8315d9b5e9f89eb2933b73afae6ec9597a258d52190944437158b49d38e"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:2014c5b3ff15e64feecb6b713af12093f75b7926049e26a580e94dcad3c73d8c"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fab81ef75003eda96239a23eda4e4543cedc22e34c373edcaf744e721a163986"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e2febf914ace002132aa09169cc572e0d8959d0f305f93d5828c4836f9bc5a6"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d3a10609c51da2a1c0ea0293fc3968ca0a18bd73838455b5bca3069d7f8e32b"}, + {file = "xxhash-3.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a74f23335b9689b66eb6dbe2a931a88fcd7a4c2cc4b1cb0edba8ce381c7a1da"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b4154c00eb22e4d543f472cfca430e7962a0f1d0f3778334f2e08a7ba59363c"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d30bbc1644f726b825b3278764240f449d75f1a8bdda892e641d4a688b1494ae"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0b72f2423e2aa53077e54a61c28e181d23effeaafd73fcb9c494e60930c8e"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13de2b76c1835399b2e419a296d5b38dc4855385d9e96916299170085ef72f57"}, + {file = "xxhash-3.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0691bfcc4f9c656bcb96cc5db94b4d75980b9d5589f2e59de790091028580837"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:297595fe6138d4da2c8ce9e72a04d73e58725bb60f3a19048bc96ab2ff31c692"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc1276d369452040cbb943300dc8abeedab14245ea44056a2943183822513a18"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2061188a1ba352fc699c82bff722f4baacb4b4b8b2f0c745d2001e56d0dfb514"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38c384c434021e4f62b8d9ba0bc9467e14d394893077e2c66d826243025e1f81"}, + {file = "xxhash-3.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e6a4dd644d72ab316b580a1c120b375890e4c52ec392d4aef3c63361ec4d77d1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:531af8845aaadcadf951b7e0c1345c6b9c68a990eeb74ff9acd8501a0ad6a1c9"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ce379bcaa9fcc00f19affa7773084dd09f5b59947b3fb47a1ceb0179f91aaa1"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd1b2281d01723f076df3c8188f43f2472248a6b63118b036e641243656b1b0f"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c770750cc80e8694492244bca7251385188bc5597b6a39d98a9f30e8da984e0"}, + {file = "xxhash-3.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b150b8467852e1bd844387459aa6fbe11d7f38b56e901f9f3b3e6aba0d660240"}, + {file = "xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f"}, +] + [[package]] name = "yarl" version = "1.17.2" @@ -4969,4 +5896,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "d3a6478a7fc388a3ef71279b755eb0e060ba481c886f715132bbbbb00cb520b8" +content-hash = "bd9b688e072d8a786268e7f57caeee2a11b567c1d3f277afda3566acdb207d6b" diff --git a/pyproject.toml b/pyproject.toml index 7f651a6..80f78b1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,9 @@ sphinx-tojupyter = "^0.3.0" sphinx-togglebutton = "^0.3.2" insipid-sphinx-theme = "^0.4.2" sphinx-press-theme = "^0.9.1" +langchain-openai = "^0.2.9" +outlines = "^0.1.5" +transformers = "^4.46.3" [build-system] diff --git a/tamingllms/_build/.doctrees/environment.pickle b/tamingllms/_build/.doctrees/environment.pickle index 006485c1ccc83df4ca42bc043d128924e49a44be..6aa3d0e641087efc1c3a4b59e0d45d2cffbd6fe2 100644 GIT binary patch literal 754367 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 z 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�pF56K15kYozo?hA`(>x;1dS(;m{$i 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 literal 0 HcmV?d00001 diff --git a/tamingllms/_build/.doctrees/markdown/markdown.doctree b/tamingllms/_build/.doctrees/markdown/markdown.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3fd3d19ed76eebce4a7c321c8867e0bef7e72d36 GIT binary patch literal 12903 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 hbXg${fhwj@i&}$_eU{C(QMja$ literal 0 HcmV?d00001 diff --git a/tamingllms/_build/.doctrees/markdown/structured_output.doctree b/tamingllms/_build/.doctrees/markdown/structured_output.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f8e5a0e275c0fb203185910bc7d708b8138cf12c GIT binary patch literal 41871 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 literal 0 HcmV?d00001 diff --git a/tamingllms/_build/.doctrees/markdown/toc.doctree b/tamingllms/_build/.doctrees/markdown/toc.doctree index c33e2b42cb9e618af87f9621a35a3c1c2b5e86f9..97ef0da5eb5c49b24ef58fccd910d428062364e7 100644 GIT binary patch literal 23708 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 literal 23582 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 diff --git a/tamingllms/_build/.doctrees/nondeterminism-NOTES.doctree b/tamingllms/_build/.doctrees/nondeterminism-NOTES.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9e05494ec5803ec0786fde9e9361e438f360ca2d GIT binary patch literal 34686 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 literal 0 HcmV?d00001 diff --git a/tamingllms/_build/.doctrees/notebooks/structured_output.doctree b/tamingllms/_build/.doctrees/notebooks/structured_output.doctree index 4a8e2223045b87f9e882eb311efda748c8df1323..30bb9a441049efb8a8459d73f3b2596aa864f1ad 100644 GIT binary patch literal 74511 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 u^Dy;zqkhbsXrnZOg7Ymh;ZBNfJ!j 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 Sj%4##Is8ESp(n;68~R_PgR61? diff --git a/tamingllms/_build/html/.buildinfo b/tamingllms/_build/html/.buildinfo index 2510a76..9807090 100644 --- a/tamingllms/_build/html/.buildinfo +++ b/tamingllms/_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 36945de024d591eca72cb43977f35263 +config: d5b2da7e1983f3da43c754f98d2e7fad tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/tamingllms/_build/html/_sources/markdown/markdown-notebooks.md b/tamingllms/_build/html/_sources/markdown/markdown-notebooks.md new file mode 100644 index 0000000..a057a32 --- /dev/null +++ b/tamingllms/_build/html/_sources/markdown/markdown-notebooks.md @@ -0,0 +1,53 @@ +--- +jupytext: + formats: md:myst + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.11.5 +kernelspec: + display_name: Python 3 + language: python + name: python3 +--- + +# Notebooks with MyST Markdown + +Jupyter Book also lets you write text-based notebooks using MyST Markdown. +See [the Notebooks with MyST Markdown documentation](https://jupyterbook.org/file-types/myst-notebooks.html) for more detailed instructions. +This page shows off a notebook written in MyST Markdown. + +## An example cell + +With MyST Markdown, you can define code cells with a directive like so: + +```{code-cell} +print(2 + 2) +``` + +When your book is built, the contents of any `{code-cell}` blocks will be +executed with your default Jupyter kernel, and their outputs will be displayed +in-line with the rest of your content. + +```{seealso} +Jupyter Book uses [Jupytext](https://jupytext.readthedocs.io/en/latest/) to convert text-based files to notebooks, and can support [many other text-based notebook files](https://jupyterbook.org/file-types/jupytext.html). +``` + +## Create a notebook with MyST Markdown + +MyST Markdown notebooks are defined by two things: + +1. YAML metadata that is needed to understand if / how it should convert text files to notebooks (including information about the kernel needed). + See the YAML at the top of this page for example. +2. The presence of `{code-cell}` directives, which will be executed with your book. + +That's all that is needed to get started! + +## Quickly add YAML metadata for MyST Notebooks + +If you have a markdown file and you'd like to quickly add YAML metadata to it, so that Jupyter Book will treat it as a MyST Markdown Notebook, run the following command: + +``` +jupyter-book myst init path/to/markdownfile.md +``` diff --git a/tamingllms/_build/html/_sources/markdown/markdown.md b/tamingllms/_build/html/_sources/markdown/markdown.md new file mode 100644 index 0000000..faeea60 --- /dev/null +++ b/tamingllms/_build/html/_sources/markdown/markdown.md @@ -0,0 +1,55 @@ +# Markdown Files + +Whether you write your book's content in Jupyter Notebooks (`.ipynb`) or +in regular markdown files (`.md`), you'll write in the same flavor of markdown +called **MyST Markdown**. +This is a simple file to help you get started and show off some syntax. + +## What is MyST? + +MyST stands for "Markedly Structured Text". It +is a slight variation on a flavor of markdown called "CommonMark" markdown, +with small syntax extensions to allow you to write **roles** and **directives** +in the Sphinx ecosystem. + +For more about MyST, see [the MyST Markdown Overview](https://jupyterbook.org/content/myst.html). + +## Sample Roles and Directives + +Roles and directives are two of the most powerful tools in Jupyter Book. They +are like functions, but written in a markup language. They both +serve a similar purpose, but **roles are written in one line**, whereas +**directives span many lines**. They both accept different kinds of inputs, +and what they do with those inputs depends on the specific role or directive +that is being called. + +Here is a "note" directive: + +```{note} +Here is a note +``` + +It will be rendered in a special box when you build your book. + +Here is an inline directive to refer to a document: {doc}`markdown-notebooks`. + + +## Citations + +You can also cite references that are stored in a `bibtex` file. For example, +the following syntax: `` {cite}`holdgraf_evidence_2014` `` will render like +this: {cite}`holdgraf_evidence_2014`. + +Moreover, you can insert a bibliography into your page with this syntax: +The `{bibliography}` directive must be used for all the `{cite}` roles to +render properly. +For example, if the references for your book are stored in `references.bib`, +then the bibliography is inserted with: + +```{bibliography} +``` + +## Learn more + +This is just a simple starter to get you started. +You can learn a lot more at [jupyterbook.org](https://jupyterbook.org). diff --git a/tamingllms/_build/html/_sources/markdown/output_size_limit-NOTES.md b/tamingllms/_build/html/_sources/markdown/output_size_limit-NOTES.md new file mode 100644 index 0000000..901e348 --- /dev/null +++ b/tamingllms/_build/html/_sources/markdown/output_size_limit-NOTES.md @@ -0,0 +1,187 @@ +# Output Size Limitations + +## What are Token Limits? + +Tokens are the basic units that LLMs process text with. A token can be as short as a single character or as long as a complete word. In English, a general rule of thumb is that 1 token ≈ 4 characters or ¾ of a word. + +The `max_output_tokens` is parameter often available in modern LLMs that determines the maximum length of text that an LLM can generate in a single response. Contrary to what one might expect, the model does not "summarizes the answer" such that it does not surpass `max_output_tokens` limit. Instead, it will stop once it reaches this limit, even mid-sentence, i.e. the response may be truncated. + +| **Token Cost and Length Limitation Comparison Across Key Models** | | | | | +| Model | max_output_tokens | max_input_tokens | input_cost_per_token | output_cost_per_token | +|------------------------------|-------------------|------------------|----------------------|-----------------------| +| meta.llama3-2-11b-instruct-v1:0 | 4096 | 128000 | 3.5e-7 | 3.5e-7 | +| claude-3-5-sonnet-20241022 | 8192 | 200000 | 3e-6 | 1.5e-5 | +| gpt-4-0613 | 4096 | 8192 | 3e-5 | 6e-5 | +| gpt-4-turbo-2024-04-09 | 4096 | 128000 | 1e-5 | 3e-5 | +| gpt-4o-mini | 16384 | 128000 | 1.5e-7 | 6e-7 | +| gemini/gemini-1.5-flash-002 | 8192 | 1048576 | 7.5e-8 | 3e-7 | +| gemini/gemini-1.5-pro-002 | 8192 | 2097152 | 3.5e-6 | 1.05e-5 | + +## Problem Statement + +The `max_output_tokens` limit in LLMs poses a significant challenge for users who need to generate long outputs, as it may result in truncated content and/or incomplete information. + +1. **Truncated Content**: Users aiming to generate extensive content, such as detailed reports or comprehensive articles, may find their outputs abruptly cut off due to the `max_output_tokens` limit. This truncation can result in incomplete information and disrupt the flow of the content. + +2. **Shallow Responses**: When users expect a complete and thorough response but receive only a partial output, it can lead to dissatisfaction and frustration. This is especially true in applications where the completeness of information is critical, such as in educational tools or content creation platforms. + +To effectively address these challenges, developers need to implement robust solutions that balance user expectations with technical and cost constraints, ensuring that long-form content generation remains feasible and efficient. + +### Content Chunking with Contextual Linking + +Content chunking with contextual linking is a technique used to manage the `max_output_tokens` limitation by breaking down long-form content into smaller, manageable chunks. This approach allows the LLM to focus on smaller sections of the input, enabling it to generate more complete and detailed responses for each chunk while maintaining coherence and context across the entire output. + +1. **Chunking the Content**: The input content is split into smaller chunks. This allows the LLM to process each chunk individually, focusing on generating a complete and detailed response for that specific section of the input. + +2. **Maintaining Context**: Each chunk is linked with contextual information from the previous chunks. This helps in maintaining the flow and coherence of the content across multiple chunks. + +3. **Generating Linked Prompts**: For each chunk, a prompt is generated that includes the chunk's content and its context. This prompt is then used to generate the output for that chunk. + +4. **Combining the Outputs**: The outputs of all chunks are combined to form the final long-form content. + +By following these steps, developers can effectively manage the `max_output_tokens` limitation and generate coherent long-form content without truncation. + +Let's examine a robust solution for handling long-form content generation: + +```python +from typing import List, Dict +import json + +class ConversationGenerator: + def __init__(self, api_client): + self.api_client = api_client + + def chunk_content(self, input_content: str, chunk_size: int = 1000) -> List[str]: + """Split input content into manageable chunks while preserving context.""" + sentences = input_content.split('. ') + chunks = [] + current_chunk = [] + current_length = 0 + + for sentence in sentences: + sentence_length = len(sentence) + if current_length + sentence_length > chunk_size and current_chunk: + chunks.append('. '.join(current_chunk) + '.') + current_chunk = [] + current_length = 0 + current_chunk.append(sentence) + current_length += sentence_length + + if current_chunk: + chunks.append('. '.join(current_chunk) + '.') + return chunks + + def generate_conversation_prompts(self, content_chunks: List[str]) -> List[Dict]: + """Generate linked conversation prompts.""" + prompts = [] + for i, chunk in enumerate(content_chunks): + prompt = { + "part": i + 1, + "total_parts": len(content_chunks), + "content": chunk, + "context": self._get_context(i, prompts) + } + prompts.append(prompt) + return prompts + + def _get_context(self, part_index: int, previous_prompts: List[Dict]) -> str: + """Generate context from previous parts.""" + if part_index == 0: + return "Start of conversation" + return f"Continuing from part {part_index}" +``` + +### Testing the Implementation + +Here's how to test the chunking functionality: + +```python +import pytest +from conversation_generator import ConversationGenerator + +def test_content_chunking(): + generator = ConversationGenerator(None) + long_content = "First sentence. Second sentence. " * 100 + chunks = generator.chunk_content(long_content, chunk_size=100) + + assert len(chunks) > 1 + for chunk in chunks: + assert len(chunk) <= 100 + assert chunk.endswith('.') + +def test_prompt_generation(): + generator = ConversationGenerator(None) + chunks = ["Chunk 1.", "Chunk 2.", "Chunk 3."] + prompts = generator.generate_conversation_prompts(chunks) + + assert len(prompts) == 3 + assert prompts[0]["part"] == 1 + assert prompts[1]["context"] != prompts[0]["context"] +``` + +## Best Practices + +1. **Always Monitor Token Usage** +```python +def estimate_tokens(text: str) -> int: + """Rough token count estimation.""" + return len(text.split()) * 1.3 +``` + +2. **Implement Graceful Fallbacks** +```python +def generate_with_fallback(prompt: str, max_retries: int = 3): + for attempt in range(max_retries): + try: + return generate_full_response(prompt) + except TokenLimitError: + prompt = truncate_prompt(prompt) + return generate_summary(prompt) +``` + +3. **Use Efficient Prompt Templates** +- Keep system prompts concise +- Remove redundant context +- Use compression techniques for long contexts + +## Implications + +Implementing context chunking with contextual linking is a practical solution to manage the output size limitations of LLMs. However, this approach comes with its own set of implications that developers must consider. + +1. **Increased Development Complexity**: Implementing strategies to overcome the maximum output token length introduces additional layers of complexity to the application design. It necessitates meticulous management of context across multiple outputs to maintain coherence. Ensuring that each chunk retains the necessary context for the conversation or document can be challenging and often requires advanced logic to handle transitions seamlessly. + +2. **Cost Implications**: Attempting to circumvent the `max_output_tokens` limitation by making multiple requests can increase the number of tokens processed, thereby raising the operational costs associated with using LLM services. Each additional request contributes to the overall token usage, which can quickly escalate costs, especially for applications with high-frequency interactions or large volumes of data. + +3. **Performance Bottlenecks**: Generating long outputs in segments can lead to performance bottlenecks, as each segment may require additional processing time and resources, impacting the overall efficiency of the application. The need to manage and link multiple chunks can introduce latency and reduce the responsiveness of the system, which is critical for real-time applications. + +By understanding these implications, developers can better prepare for the challenges associated with context chunking and contextual linking, ensuring that their applications remain efficient, cost-effective, and user-friendly. + + +## Future Considerations + +As models evolve, we can expect several advancements that will significantly impact how we handle output size limitations: + +1. **Contextual Awareness**: Future LLMs will likely have improved contextual awareness - or as Mustafa Suleyman would call "infinite memory", enabling them to better understand and manage the context of a conversation or document over long interactions. This will reduce the need for repetitive context setting and improve the overall user experience. + +2. **More Efficient Token Usage**: Advances in model architecture and tokenization strategies will lead to more efficient token usage. This means that models will be able to convey the same amount of information using fewer tokens, reducing costs and improving performance. + +3. **Improved Compression Techniques**: As research progresses, we can expect the development of more sophisticated compression techniques that allow models to retain essential information while reducing the number of tokens required. This will be particularly useful for applications that need to summarize or condense large amounts of data. + +4. **Adaptive Token Limits**: Future models may implement adaptive token limits that dynamically adjust based on the complexity and requirements of the task at hand. This will provide more flexibility and efficiency in handling diverse use cases. + +5. **Enhanced Memory Management**: Innovations in memory management will allow models to handle larger outputs without a significant increase in computational resources. This will make it feasible to deploy advanced LLMs in resource-constrained environments. + +These advancements will collectively enhance the capabilities of LLMs, making them more powerful and versatile tools for a wide range of applications. However, they will also introduce new challenges and considerations that developers and researchers will need to address to fully harness their potential. + + +## Conclusion + +In conclusion, while managing output size limitations in LLMs presents significant challenges, it also drives innovation in application design and optimization strategies. By implementing techniques such as context chunking, efficient prompt templates, and graceful fallbacks, developers can mitigate these limitations and enhance the performance and cost-effectiveness of their applications. As the technology evolves, advancements in contextual awareness, token efficiency, and memory management will further empower developers to build more robust and scalable LLM-powered systems. It is crucial to stay informed about these developments and continuously adapt to leverage the full potential of LLMs while addressing their inherent constraints. + + +## References + +1. OpenAI Token Limits Documentation +2. Anthropic Claude Documentation +3. Google PaLM 2 Technical Specifications +4. Research papers on context window management \ No newline at end of file diff --git a/tamingllms/_build/html/_sources/markdown/structured_output.md b/tamingllms/_build/html/_sources/markdown/structured_output.md new file mode 100644 index 0000000..5c4fa88 --- /dev/null +++ b/tamingllms/_build/html/_sources/markdown/structured_output.md @@ -0,0 +1,319 @@ +# Wrestling with Structured Output + +## The Structured Output Challenges + +Large language models (LLMs) excel at generating human-like text, but they often struggle to produce output in a structured format consistently. This poses a significant challenge when we need LLMs to generate data that can be easily processed by other systems, such as databases, APIs, or other software applications. + +Sometimes, even with a well-crafted prompt, an LLM might produce an unstructured response when a structured one is expected. This can be particularly challenging when integrating LLMs into systems that require specific data formats. + + ```python + import openai + + # Define the prompt expecting a structured JSON response + prompt = """ + Give me the name and capital of 5 random countries in a JSON object with the following keys: + - name: a string representing the name the country + - capital: a string representing the capital of the country + """ + + # Call the OpenAI API + response = openai.Completion.create( + engine="text-davinci-003", + prompt=prompt, + max_tokens=100 + ) + + # Print the response + print(response.choices[0].text.strip()) + ``` + +In this example, despite the prompt clearly asking for a JSON object, the LLM generates a natural language sentence instead. This highlights the inconsistency and unpredictability of LLMs when it comes to producing structured output. + +## Problem Statement + +Obtaining structured output from LLMs presents several significant challenges: + +* **Inconsistency**: LLMs often produce unpredictable results, sometimes generating well-structured output and other times deviating from the expected format. +* **Lack of Type Safety**: LLMs do not inherently understand data types, which can lead to errors when their output is integrated with systems requiring specific data formats. +* **Prompt Engineering Complexity**: Crafting prompts that effectively guide LLMs to produce the correct structured output is complex and requires extensive experimentation. + +## Solutions + +Several strategies and tools can be employed to address the challenges of structured output from LLMs. + +### Strategies + +* **Schema Guidance**: Providing the LLM with a clear schema or blueprint of the desired output structure helps to constrain its generation and improve consistency. This can be achieved by using tools like Pydantic to define the expected data structure and then using that definition to guide the LLM's output. +* **Output Parsing**: When LLMs don't natively support structured output, parsing their text output using techniques like regular expressions or dedicated parsing libraries can extract the desired information. For example, you can use regular expressions to extract specific patterns from the LLM's output, or you can use libraries like Pydantic to parse the output into structured data objects. +* **Type Enforcement**: Using tools that enforce data types, such as Pydantic in Python, can ensure that the LLM output adheres to the required data formats. This can help to prevent errors when integrating the LLM's output with other systems. + +### Tools + +* **One-Shot Prompts**: In one-shot prompting, you provide a single example of the desired output format within the prompt. While simple, this approach may not be sufficient for complex structures. + ```python + prompt = """A "whatpu" is a small, furry animal native to Tanzania. An example of a sentence that uses the word whatpu is: We were traveling in Africa and we saw these very cute whatpus. To do a "farduddle" means to jump up and down really fast. An example of a sentence that uses the word farduddle is:""" + # The LLM should now be able to generate a sentence using "farduddle" correctly. + ``` +* **Gemini-Specific Structured Outputs**: Google's Gemini API offers features specifically designed for generating JSON output. You can provide a schema either within the prompt or through model configuration. Gemini also supports using enums to restrict the model's output to specific options. + ```python + import enum + from typing_extensions import TypedDict + import google.generativeai as genai + + class Grade(enum.Enum): + A_PLUS = "a+" + A = "a" + B = "b" + C = "c" + D = "d" + F = "f" + + class Recipe(TypedDict): + recipe_name: str + grade: Grade + + model = genai.GenerativeModel("gemini-1.5-pro-latest") + result = model.generate_content( + "List about 10 cookie recipes, grade them based on popularity", + generation_config=genai.GenerationConfig( + response_mime_type="application/json", + response_schema=list[Recipe] + ), + ) + print(result) + # Example Output: [{"grade": "a+", "recipe_name": "Chocolate Chip Cookies"}, ...] + ``` +* **LangChain**: LangChain is a framework designed to simplify the development of LLM applications. It offers several tools for parsing structured output, including: + * **`with_structured_output`**: This method is used with LLMs that support structured output APIs, allowing you to enforce a schema directly within the prompt. + ```python + from langchain.llms import OpenAI + from langchain.prompts import PromptTemplate + from langchain.output_parsers import PydanticOutputParser + from pydantic import BaseModel, Field + + class WeatherForecast(BaseModel): + city: str = Field(description="City for the forecast") + date: str = Field(description="Date of the forecast") + condition: str = Field(description="Weather condition") + temperature: int = Field(description="Temperature in Celsius") + + # Define your LLM + llm = OpenAI(temperature=0) + + # Define the prompt template + template = """Provide the weather forecast for the following city: {city} + Format your response like this: + ```json + {{ + "city": "...", + "date": "...", + "condition": "...", + "temperature": ... + }} + ```""" + prompt = PromptTemplate(template=template, input_variables=["city"]) + + # Define the output parser + parser = PydanticOutputParser(pydantic_object=WeatherForecast) + + # Create a chain + chain = prompt | llm.bind(parser=parser) + + # Run the chain + result = chain.invoke({"city": "London"}) + print(result) + ``` + * **`PydanticOutputParser`**: This class leverages Pydantic models to enforce type safety and validate LLM output against a predefined schema. + ```python + from langchain.llms import OpenAI + from langchain.prompts import PromptTemplate + from langchain.output_parsers import PydanticOutputParser + from pydantic import BaseModel, Field + + class Movie(BaseModel): + title: str + director: str + runtime_minutes: int + + class FilmFestival(BaseModel): + name: str + movies: list[Movie] + + # Define your LLM + llm = OpenAI(temperature=0) + + # Define the prompt template + template = """Tell me about the movies playing at {festival_name} film festival. + Provide the title, director, and runtime in minutes for each movie.""" + prompt = PromptTemplate(template=template, input_variables=["festival_name"]) + + # Define the output parser + parser = PydanticOutputParser(pydantic_object=FilmFestival) + + # Create a chain + chain = prompt | llm.bind(parser=parser) + + # Run the chain + result = chain.invoke({"festival_name": "Cannes"}) + print(result) + ``` + * **`StructuredOutputParser`**: This class offers flexibility in defining custom schemas using `ResponseSchema` objects, making it suitable for extracting information that doesn't fit into pre-built structures. + ```python + from langchain.llms import OpenAI + from langchain.prompts import PromptTemplate + from langchain.output_parsers import StructuredOutputParser, ResponseSchema + + # Define your LLM + llm = OpenAI(temperature=0) + + # Define the output parser + parser = StructuredOutputParser.from_response_schemas([ + ResponseSchema(name="recipe", description="The name of the recipe."), + ResponseSchema(name="ingredients", description="A list of ingredients."), + ]) + + # Define the prompt template + format_instructions = parser.get_format_instructions() + prompt = PromptTemplate( + template="Provide a recipe and its ingredients. {format_instructions}", + input_variables=["format_instructions"], + partial_variables={"format_instructions": format_instructions} + ) + + # Create a chain + chain = prompt | llm | parser + + # Run the chain + result = chain.invoke({}) + print(result) + ``` +* **Outlines**: Outlines is a library specifically focused on structured text generation from LLMs. It provides several powerful features: + * **Multiple Choice Generation**: Restrict the LLM output to a predefined set of options. + ```python + import outlines + + model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct") + + prompt = """You are a sentiment-labelling assistant. + + Is the following review positive or negative? + + Review: This restaurant is just awesome! + + """ + + generator = outlines.generate.choice(model, ["Positive", "Negative"]) + + answer = generator(prompt) + ``` + * **Type Constraints**: Force the output to be integers, floats, or other specific types. + ```python + import outlines + + model = outlines.models.transformers("WizardLM/WizardMath-7B-V1.1") + + prompt = "result of 9 + 9 = 18result of 1 + 2 = " + + answer = outlines.generate.format(model, int)(prompt) + + print(answer) + + # Output: 3 + ``` + * **Regex-Structured Generation**: Efficiently extract information using regular expressions. + ```python + import outlines + + model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct") + + prompt = "What is the IP address of the Google DNS servers? " + + generator = outlines.generate.regex( + model, + r"((25|2\d|?\d\d?)\.){3}(25|2\d|?\d\d?)", + ) + + structured = generator(prompt, max_tokens=30) + + print(structured) + + # Example Output: 8.8.8.8 + ``` + * **JSON Generation with Pydantic or JSON Schema**: Guarantee that the output conforms to a given Pydantic model or JSON schema. + ```python + from enum import Enum + from pydantic import BaseModel, constr + import outlines + + class Weapon(str, Enum): + sword = "sword" + axe = "axe" + mace = "mace" + spear = "spear" + bow = "bow" + crossbow = "crossbow" + + class Armor(str, Enum): + leather = "leather" + chainmail = "chainmail" + plate = "plate" + + class Character(BaseModel): + name: constr(max_length=10) + age: int + armor: Armor + weapon: Weapon + strength: int + + model = outlines.models.transformers("microsoft/Phi-3-mini-4k-instruct") + + generator = outlines.generate.json(model, Character) + + character = generator("Give me a character description") + + print(repr(character)) + + # Example Output: Character(name='Aaliyah', age=35, armor=, weapon=, strength=10) + ``` + * **Context-Free Grammar (CFG) Guidance**: Use formal grammars to define the valid structure of the output. + ```python + import outlines + + arithmetic_grammar = """ + ?start: expression + ?expression: term (("+" | "-") term)* + ?term: factor (("*" | "/") factor)* + ?factor: NUMBER + | "-" factor + | "(" expression ")" + %import common.NUMBER + """ + + model = outlines.models.transformers("WizardLM/WizardMath-7B-V1.1") + + generator = outlines.generate.cfg(model, arithmetic_grammar) + + sequence = generator("Alice had 4 apples and Bob ate 2. Write an expression for Alice's apples:") + + print(sequence) + + # Output: 4-2 + ``` + +### Comparing Solutions + +* **Simplicity vs. Control**: One-shot prompts are simple but offer limited control. Dedicated tools like Gemini's structured output features, LangChain, and Outlines provide greater control but might have a steeper learning curve. +* **Native LLM Support**: `with_structured_output` in LangChain relies on the LLM having built-in support for structured output APIs. Other methods, like parsing or using Outlines, are more broadly applicable. +* **Flexibility**: Outlines and LangChain's `StructuredOutputParser` offer the most flexibility for defining custom output structures. + +## Best Practices + +* **Clear Schema Definition**: Define the desired output structure clearly, using schemas, types, or grammars as appropriate. This ensures the LLM knows exactly what format is expected. +* **Descriptive Naming**: Use meaningful names for fields and elements in your schema. This makes the output more understandable and easier to work with. +* **Detailed Prompting**: Guide the LLM with well-crafted prompts that include examples and clear instructions. A well-structured prompt improves the chances of getting the desired output. +* **Error Handling**: Implement mechanisms to handle cases where the LLM deviates from the expected structure. LLMs are not perfect, so having error handling ensures your application remains robust. +* **Testing and Iteration**: Thoroughly test your structured output generation process and refine your prompts and schemas based on the results. Continuous testing and refinement are key to achieving reliable structured output. + +## Conclusion + +Extracting structured output from LLMs is crucial for integrating them into real-world applications. By understanding the challenges and employing appropriate strategies and tools, developers can improve the reliability and usability of LLM-powered systems, unlocking their potential to automate complex tasks and generate valuable insights. diff --git a/tamingllms/_build/html/_sources/markdown/toc.md b/tamingllms/_build/html/_sources/markdown/toc.md index 7839a3c..2c425f8 100644 --- a/tamingllms/_build/html/_sources/markdown/toc.md +++ b/tamingllms/_build/html/_sources/markdown/toc.md @@ -4,7 +4,8 @@ author: "Tharsis T. P. Souza" date: "2024-11-22" --- -# Taming Large Language Models: A Practical Guide to LLM Pitfalls with Python Examples +# Taming Large Language Models +*A Practical Guide to LLM Pitfalls with Python Examples* ## Chapter 1: Introduction - The Hidden Challenges of LLMs diff --git a/tamingllms/_build/html/_sources/nondeterminism-NOTES.md b/tamingllms/_build/html/_sources/nondeterminism-NOTES.md new file mode 100644 index 0000000..ebe9245 --- /dev/null +++ b/tamingllms/_build/html/_sources/nondeterminism-NOTES.md @@ -0,0 +1,157 @@ +# The Blessing and Curse of Non-determinism + +One of the most fundamental challenges when building products with Large Language Models (LLMs) is their non-deterministic nature. Unlike traditional software systems where the same input reliably produces the same output, LLMs can generate different responses each time they're queried - even with identical prompts. This characteristic is both a strength and a significant engineering challenge. + +## Understanding the Challenge + +### What is Non-determinism in LLMs? + +When you ask ChatGPT or any other LLM the same question multiple times, you'll likely get different responses. This isn't a bug - it's a fundamental feature of how these models work. The "temperature" parameter, which controls the randomness of outputs, allows models to be creative and generate diverse responses. However, this same feature makes it incredibly difficult to build reliable, testable systems. + +### Real-world Impact + +Consider a financial services company using LLMs to generate investment advice summaries. The non-deterministic nature of these models means that: +- The same market data could yield different analysis conclusions +- Testing becomes exponentially more complex +- Regulatory compliance becomes challenging to guarantee +- User trust may be affected by inconsistent responses + +## Technical Deep-dive: Sources of Non-determinism + +### Temperature and Sampling + +The primary source of non-determinism in LLMs comes from their sampling strategies. During text generation, the model: +1. Calculates probability distributions for each next token +2. Samples from these distributions based on temperature settings +3. Uses techniques like nucleus sampling to balance creativity and coherence + +### The Temperature Spectrum + +- Temperature = 0: Most deterministic, but potentially repetitive +- Temperature = 1: Balanced creativity and coherence +- Temperature > 1: Increased randomness, potentially incoherent + + + +### Evals + +### Building Meaningful Evals +Evaluating LLM outputs requires a thoughtful approach that goes beyond simple accuracy metrics. Key considerations include: +- Defining clear success criteria aligned with business goals +- Creating comprehensive test suites that cover edge cases +- Establishing baseline performance metrics + +### Real-world Use Case Alignment +Evaluations must reflect actual usage patterns: +- Collect and incorporate real user queries +- Consider domain-specific requirements +- Account for different user personas and contexts + +### Testing Frameworks +A robust testing framework should include: +- Unit tests for individual components +- Integration tests for the full pipeline +- Load testing for performance validation +- Regression testing to catch degradation + +### Continuous Evaluation +Implement ongoing monitoring: +- Automated testing pipelines +- Regular model performance reviews +- User feedback collection and analysis +- A/B testing of model variations + +### Metrics That Matter +Focus on meaningful metrics: +- Response consistency scores +- Semantic similarity measures +- Business impact metrics (conversion, user satisfaction) +- Error rates and recovery metrics + +### Implementation Examples + +## Practical Solutions and Implementation Patterns + +### 1. Deterministic Workflows + +When consistency is crucial, consider: +- Caching responses for identical inputs +- Implementing approval workflows for critical content +- Using lower temperature settings for factual responses +- Maintaining versioned prompt templates + +### 2. Embracing Controlled Variation + +In some cases, non-determinism can be beneficial: +- A/B testing different response styles +- Generating creative content variations +- Personalizing user experiences + +### 3. Hybrid Approaches + +Combine deterministic and non-deterministic components: +- Use traditional logic for critical business rules +- Leverage LLM creativity for content generation +- Implement validation layers for output consistency + +## Testing Strategies + +### 1. Statistical Testing + +Rather than expecting exact matches: +- Test for semantic similarity across multiple runs +- Establish acceptable variance thresholds +- Use embedding-based comparison methods + +### 2. Property-Based Testing + +Focus on invariant properties: +- Output length constraints +- Required information presence +- Format consistency +- Tone and style guidelines + +### 3. Regression Testing + +Develop sophisticated regression frameworks: +- Record and replay capabilities +- Semantic drift detection +- Performance baseline monitoring + +## Cost and Performance Considerations + +### Operational Costs + +Non-determinism can impact costs through: +- Increased testing requirements +- Higher storage needs for response variations +- Additional validation layers +- Backup generation attempts + +### Performance Optimization + +Balance reliability and resource usage: +- Implement smart caching strategies +- Use tiered validation approaches +- Optimize temperature settings per use case + +## Looking Ahead: Future Developments + +The challenge of non-determinism in LLMs remains an active area of research and development: +- Emerging techniques for controlled generation +- New testing methodologies for AI systems +- Improved metrics for response consistency + +## Call to Action + +As practitioners building with LLMs, we must: +1. Design systems that embrace or control non-determinism appropriately +2. Develop robust testing strategies beyond traditional approaches +3. Balance the benefits of creative variation with the need for reliability +4. Contribute to the growing body of best practices in this space + +## References + +1. Holtzman, A., et al. (2019). "The Curious Case of Neural Text Degeneration" +2. Brown, T., et al. (2020). "Language Models are Few-Shot Learners" +3. Zhao, Z., et al. (2021). "Calibrate Before Use: Improving Few-Shot Performance of Language Models" diff --git a/tamingllms/_build/html/_sources/notebooks/notebooks.ipynb b/tamingllms/_build/html/_sources/notebooks/notebooks.ipynb new file mode 100644 index 0000000..fdb7176 --- /dev/null +++ b/tamingllms/_build/html/_sources/notebooks/notebooks.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Content with notebooks\n", + "\n", + "You can also create content with Jupyter Notebooks. This means that you can include\n", + "code blocks and their outputs in your book.\n", + "\n", + "## Markdown + notebooks\n", + "\n", + "As it is markdown, you can embed images, HTML, etc into your posts!\n", + "\n", + "![](https://myst-parser.readthedocs.io/en/latest/_static/logo-wide.svg)\n", + "\n", + "You can also $add_{math}$ and\n", + "\n", + "$$\n", + "math^{blocks}\n", + "$$\n", + "\n", + "or\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\mbox{mean} la_{tex} \\\\ \\\\\n", + "math blocks\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "But make sure you \\$Escape \\$your \\$dollar signs \\$you want to keep!\n", + "\n", + "## MyST markdown\n", + "\n", + "MyST markdown works in Jupyter Notebooks as well. For more information about MyST markdown, check\n", + "out [the MyST guide in Jupyter Book](https://jupyterbook.org/content/myst.html),\n", + "or see [the MyST markdown documentation](https://myst-parser.readthedocs.io/en/latest/).\n", + "\n", + "## Code blocks and outputs\n", + "\n", + "Jupyter Book will also embed your code blocks and output in your book.\n", + "For example, here's some sample Matplotlib code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib import rcParams, cycler\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "plt.ion()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fixing random state for reproducibility\n", + "np.random.seed(19680801)\n", + "\n", + "N = 10\n", + "data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]\n", + "data = np.array(data).T\n", + "cmap = plt.cm.coolwarm\n", + "rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))\n", + "\n", + "\n", + "from matplotlib.lines import Line2D\n", + "custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),\n", + " Line2D([0], [0], color=cmap(.5), lw=4),\n", + " Line2D([0], [0], color=cmap(1.), lw=4)]\n", + "\n", + "fig, ax = plt.subplots(figsize=(10, 5))\n", + "lines = ax.plot(data)\n", + "ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is a lot more that you can do with outputs (such as including interactive outputs)\n", + "with your book. For more information about this, see [the Jupyter Book documentation](https://jupyterbook.org)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.0" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/tamingllms/_build/html/_sources/notebooks/structured_output.ipynb b/tamingllms/_build/html/_sources/notebooks/structured_output.ipynb index fe0c83c..2fbd144 100644 --- a/tamingllms/_build/html/_sources/notebooks/structured_output.ipynb +++ b/tamingllms/_build/html/_sources/notebooks/structured_output.ipynb @@ -13,21 +13,55 @@ "Sometimes, even with a well-crafted prompt, an LLM might produce an unstructured response when a structured one is expected. This can be particularly challenging when integrating LLMs into systems that require specific data formats." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Throughout this notebook, we will consider as input a segment of a sample SEC filing of Apple Inc." + ] + }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], + "source": [ + "MAX_LENGTH = 10000\n", + "with open('../data/apple.txt', 'r') as file:\n", + " sec_filing = file.read() " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "from dotenv import load_dotenv\n", "import os\n", "\n", "# Load environment variables from .env file\n", - "load_dotenv()\n", - "\n", - "from openai import OpenAI\n", - "\n", - "client = OpenAI()" + "load_dotenv(override=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from openai import OpenAI" ] }, { @@ -36,13 +70,11 @@ "metadata": {}, "outputs": [], "source": [ + "client = OpenAI()\n", "# Define the prompt expecting a structured JSON response\n", - "MAX_LENGTH = 10000\n", - "with open('../data/apple.txt', 'r') as file:\n", - " sec_filing = file.read() \n", "prompt = f\"\"\"\n", "Generate a two-person discussion about the key financial data from the following text in JSON format.\n", - "TEXT: {sec_filing[:MAX_LENGTH]}\n", + "TEXT: {sec_filing}\n", "\"\"\"\n", "\n", "response = client.chat.completions.create(\n", @@ -81,20 +113,9 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 3, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "False" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import json\n", "\n", @@ -103,9 +124,24 @@ " json.loads(myjson)\n", " except ValueError as e:\n", " return False\n", - " return True\n", - "\n", - "is_json(response_content)\n" + " return True" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n" + ] + } + ], + "source": [ + "is_json(response_content)" ] }, { @@ -124,7 +160,9 @@ "Obtaining structured output from LLMs presents several significant challenges:\n", "\n", "* **Inconsistency**: LLMs often produce unpredictable results, sometimes generating well-structured output and other times deviating from the expected format.\n", + "\n", "* **Lack of Type Safety**: LLMs do not inherently understand data types, which can lead to errors when their output is integrated with systems requiring specific data formats.\n", + "\n", "* **Prompt Engineering Complexity**: Crafting prompts that effectively guide LLMs to produce the correct structured output is complex and requires extensive experimentation.\n", "\n", "## Solutions\n", @@ -134,7 +172,9 @@ "### Strategies\n", "\n", "* **Schema Guidance**: Providing the LLM with a clear schema or blueprint of the desired output structure helps to constrain its generation and improve consistency. This can be achieved by using tools like Pydantic to define the expected data structure and then using that definition to guide the LLM's output. \n", + "\n", "* **Output Parsing**: When LLMs don't natively support structured output, parsing their text output using techniques like regular expressions or dedicated parsing libraries can extract the desired information. For example, you can use regular expressions to extract specific patterns from the LLM's output, or you can use libraries like Pydantic to parse the output into structured data objects.\n", + "\n", "* **Type Enforcement**: Using tools that enforce data types, such as Pydantic in Python, can ensure that the LLM output adheres to the required data formats. This can help to prevent errors when integrating the LLM's output with other systems." ] }, @@ -238,11 +278,14 @@ "source": [ "#### Structured Output with Provider-Specific APIs\n", "\n", - "Simple techniques such as one-shot prompting can lead to material improvements though may not be sufficient for complex (e.g. nested) structures and / or when the model's output needs to be restricted to a specific set of options or types.\n", + "One-shot prompting is a simple technique that can lead to material improvements in structured output, though may not be sufficient for complex (e.g. nested) structures and / or when the model's output needs to be restricted to a specific set of options or types.\n", + "\n", + "Provider-specific APIs can offer ways to handle those challenges. We will explore two approaches here using OpenAI's API:\n", "\n", - "Provider-specific APIs can offer ways to handle those challenges. For example, OpenAI's API offers features specifically designed for generating JSON output or structured outputs, in general.\n", + "* **JSON Mode**: Some LLM APIs offer features specifically designed for generating JSON output.\n", + "* **Structured Outputs**: Some LLM APIs offer features specifically designed for generating structured outputs with type safety.\n", "\n", - "**JSON Mode**\n", + "#### JSON Mode\n", "\n", "JSON mode is a feature provided by some LLM APIs, such as OpenAI's, that allows the model to generate output in JSON format. This is particularly useful when you need structured data as a result, such as when parsing the output programmatically or integrating it with other systems that require JSON input.\n", "\n", @@ -259,7 +302,7 @@ "source": [ "prompt = f\"\"\"\n", "Generate a two-person discussion about the key financial data from the following text in JSON format.\n", - "TEXT: {sec_filing[:MAX_LENGTH]}\n", + "TEXT: {sec_filing}\n", "\"\"\"\n", "response = client.chat.completions.create(\n", " model=\"gpt-3.5-turbo\",\n", @@ -315,7 +358,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "JSON mode will not guarantee the output matches any specific schema, only that it is valid and parses without errors. For that purpose, we can leverage a new feature some modern LLM API offer called \"Structured Outputs\" to ensure the output data matches a target schema/typing.\n" + "This example solution is specific to OpenAI's API. Other LLM providers offer similar functionality, for example:\n", + "\n", + "* Google's Vertex AI offers a `parse` method for structured outputs.\n", + "* Anthropic offers a `structured` method for structured outputs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "JSON mode will not guarantee the output matches any specific schema, only that it is valid and parses without errors. For that purpose, we can leverage a new feature recently released by OpenAI called \"Structured Outputs\" to ensure the output data matches a target schema with type safety.\n" ] }, { @@ -336,36 +389,33 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here's a Python example demonstrating how to use the OpenAI API to generate a structured output in the form of a two-person conversation discussing financial statements from an input SEC filing. This example uses the `response_format` parameter within the OpenAI API call. This functionality is supported by GPT-4o models, specifically `gpt-4o-mini-2024-07-18`, `gpt-4o-2024-08-06`, and later versions." + "Here's a Python example demonstrating how to use the OpenAI API to generate a structured output. In this example, we aim at extracting structured data from our sample SEC filing, in particular: (i) entities and (ii) places mentioned in the input doc. This example uses the `response_format` parameter within the OpenAI API call. This functionality is supported by GPT-4o models, specifically `gpt-4o-mini-2024-07-18`, `gpt-4o-2024-08-06`, and later versions." ] }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from pydantic import BaseModel\n", "from openai import OpenAI\n", "\n", - "client = OpenAI()\n", - "\n", "class SECExtraction(BaseModel):\n", " mentioned_entities: list[str]\n", " mentioned_places: list[str]\n", "\n", - "def extract_from_sec_filing(sec_filing_text: str) -> SECExtraction:\n", + "def extract_from_sec_filing(sec_filing_text: str, prompt: str) -> SECExtraction:\n", " \"\"\"\n", " Extracts structured data from an input SEC filing text.\n", " \"\"\"\n", + " client = OpenAI()\n", " completion = client.beta.chat.completions.parse(\n", - " model=\"gpt-4o-mini-2024-07-18\",\n", + " model=\"gpt-4o-mini\",\n", " messages=[\n", " {\n", " \"role\": \"system\",\n", - " \"content\": (\n", - " \"You are an expert at structured data extraction. You will be given unstructured text from a SEC filing and extracted names of mentioned entities and places and should convert the response into the given structure.\"\n", - " )\n", + " \"content\": prompt\n", " },\n", " {\"role\": \"user\", \"content\": sec_filing_text}\n", " ],\n", @@ -380,9 +430,9 @@ "source": [ "**Explanation:**\n", "\n", - "* **Data Structures:** The code defines two Pydantic models, `DialogueTurn` and `FinancialStatementDiscussion`, to represent the structured output of the conversation. These models provide type hints and structure for the conversation.\n", - "* **API Interaction:** The `generate_conversation` function uses the OpenAI client to send a chat completion request to the `gpt-4o-2024-08-06` model. The prompt instructs the model to simulate a dialogue about financial statements. The `response_format` is set to `FinancialStatementDiscussion`, ensuring the response conforms to the Pydantic model.\n", - "* **Output Processing:** The returned response is parsed into the `FinancialStatementDiscussion` model. The code then iterates through the dialogue turns and prints the speaker and content of each turn." + "* **Data Structures:** The code defines one Pydantic model, `SECExtraction`, to represent the structured output of our parser. This model provide type hints and structure for the response.\n", + "* **API Interaction:** The `extract_from_sec_filing` function uses the OpenAI client to send a chat completion request to the `gpt-4o-mini-2024-07-18` model. The prompt instructs the model to extract our target attributes from input text. The `response_format` is set to `SECExtraction`, ensuring the response conforms to the specified Pydantic model.\n", + "* **Output Processing:** The returned response is parsed into the `SECExtraction` model. The code then returns the parsed data." ] }, { @@ -391,7 +441,8 @@ "metadata": {}, "outputs": [], "source": [ - "conversation = extract_from_sec_filing(sec_filing[:MAX_LENGTH])" + "prompt_extraction = \"You are an expert at structured data extraction. You will be given unstructured text from a SEC filing and extracted names of mentioned entities and places and should convert the response into the given structure.\"\n", + "sec_extraction = extract_from_sec_filing(sec_filing, prompt_extraction)" ] }, { @@ -409,8 +460,15 @@ } ], "source": [ - "print(\"Extracted entities:\", conversation.mentioned_entities)\n", - "print(\"Extracted places:\", conversation.mentioned_places)\n" + "print(\"Extracted entities:\", sec_extraction.mentioned_entities)\n", + "print(\"Extracted places:\", sec_extraction.mentioned_places)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We observe that the model was able to extract the entities and places from the input text, and return them in the specified format." ] }, { @@ -420,9 +478,12 @@ "**Benefits**\n", "\n", "* **Structured Output:** The use of Pydantic models and the `response_format` parameter enforces the structure of the model's output, making it more reliable and easier to process.\n", + "\n", "* **Schema Adherence:** Structured Outputs in OpenAI API guarantee that the response adheres to the provided schema.\n", "\n", - "This structured approach improves the reliability and usability of your application by ensuring consistent, predictable output from the OpenAI API." + "This structured approach improves the reliability and usability of your application by ensuring consistent, predictable output from the OpenAI API.\n", + "\n", + "This example solution is specific to OpenAI's API. That begs the question: How can we solve this problem generally for widely available LLM providers? In the next sections, we will explore how `LangChain` and `Outlines` may serve as general purpose tools that can help us do just that.\n" ] }, { @@ -431,9 +492,85 @@ "source": [ "### LangChain\n", "\n", - "LangChain is a framework designed to simplify the development of LLM applications. It offers several tools for parsing structured output, including:\n", + "LangChain is a framework designed to simplify the development of LLM applications. It provider an abstraction layer over many LLM providers, including OpenAI, that offers several tools for parsing structured output.\n", + "\n", + "In particular, LangChain offers the `with_structured_output` method, which can be used with LLMs that support structured output APIs, allowing you to enforce a schema directly within the prompt.\n", + "\n", + "> `with_structured_output` takes a schema as input which specifies the names, types, and descriptions of the desired output attributes. The method returns a model-like Runnable, except that instead of outputting strings or messages it outputs objects corresponding to the given schema. The schema can be specified as a TypedDict class, JSON Schema or a Pydantic class. If TypedDict or JSON Schema are used then a dictionary will be returned by the Runnable, and if a Pydantic class is used then a Pydantic object will be returned.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```bash\n", + "pip install -qU langchain-openai\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_openai import ChatOpenAI\n", + "from langchain_core.prompts import ChatPromptTemplate\n", + "def extract_from_sec_filing_langchain(sec_filing_text: str, prompt: str) -> SECExtraction:\n", + " \"\"\"\n", + " Extracts structured data from an input SEC filing text using LangChain.\n", + " \"\"\"\n", + " llm = ChatOpenAI(model=\"gpt-4o-mini\")\n", + "\n", + " structured_llm = llm.with_structured_output(SECExtraction)\n", + "\n", + " prompt_template = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\"system\", prompt),\n", + " (\"human\", \"{sec_filing_text}\"),\n", + " ]\n", + " )\n", + "\n", + " llm_chain = prompt_template | structured_llm\n", + " \n", + " return llm_chain.invoke(sec_filing_text)" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [], + "source": [ "\n", - "* **`with_structured_output`**: This method is used with LLMs that support structured output APIs, allowing you to enforce a schema directly within the prompt." + "prompt_extraction = \"You are an expert at structured data extraction. You will be given unstructured text from a SEC filing and extracted names of mentioned entities and places and should convert the response into the given structure.\"\n", + "sec_extraction_langchain = extract_from_sec_filing_langchain(sec_filing, prompt_extraction)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracted entities: ['Apple Inc.']\n", + "Extracted places: ['California', 'Cupertino']\n" + ] + } + ], + "source": [ + "print(\"Extracted entities:\", sec_extraction_langchain.mentioned_entities)\n", + "print(\"Extracted places:\", sec_extraction_langchain.mentioned_places)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We observe that the model was able to extract the entities and places from the input text, and return them in the specified format. A full list of models that support `.with_structured_output()` can be found [here](https://python.langchain.com/docs/integrations/chat/#featured-providers)." ] }, { @@ -444,7 +581,129 @@ "\n", "Outlines is a library specifically focused on structured text generation from LLMs. It provides several powerful features:\n", "\n", - "* **Multiple Choice Generation**: Restrict the LLM output to a predefined set of options." + "* **Multiple Choice Generation**: Restrict the LLM output to a predefined set of options.\n", + "* **Regex-based structured generation**: Guide the generation process using regular expressions.\n", + "* **Pydantic model**: Ensure the LLM output follows a Pydantic model.\n", + "* **JSON Schema**: Ensure the LLM output follows a JSON Schema." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Outlines supports the OpenAI API. However, one of its key advantages is the ability to ensure structured output for Open Source models, which often lack such guarantees by default." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```bash\n", + "pip install outlines\n", + "pip install transformers\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we will use a Qwen2.5-0.5B model, which is a Open Source model that we can run locally via Hugging Face's `transformers` library." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "import outlines\n", + "\n", + "model = outlines.models.transformers(\"Qwen/Qwen2.5-0.5B-Instruct\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### A Simple Example: Multiple Choice Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Negative\n" + ] + } + ], + "source": [ + "TOP = 100\n", + "prompt = f\"\"\"You are a sentiment-labelling assistant specialized in Financial Statements.\n", + "Is the following document positive or negative?\n", + "\n", + "Document: {sec_filing[:TOP]}\n", + "\"\"\"\n", + "\n", + "generator = outlines.generate.choice(model, [\"Positive\", \"Negative\"])\n", + "answer = generator(prompt)\n", + "print(answer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Pydantic model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Outlines allows to guide the generation process so the output is guaranteed to follow a JSON schema or Pydantic model. Now we will go back to our example of extracting entities and places from a SEC filing. In order to do so, we simply need to pass our Pydantic model to the `json` method in Outlines' `generate` module." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "prompt = f\"You are an expert at structured data extraction. You will be given unstructured text from a SEC filing and extracted names of mentioned entities and places and should convert the response into the given structure. Document: {sec_filing[:TOP]} \"\n", + "generator = outlines.generate.json(model, SECExtraction)\n", + "sec_extraction_outlines = generator(prompt)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extracted entities: ['Zsp', 'ZiCorp']\n", + "Extracted places: ['California']\n" + ] + } + ], + "source": [ + "print(\"Extracted entities:\", sec_extraction_outlines.mentioned_entities)\n", + "print(\"Extracted places:\", sec_extraction_outlines.mentioned_places)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We observe that the model was able to extract the entities and places from the input text, and return them in the specified format. However, it is interesting to see that the model hallucinates a few entities, a phenomenon that is common for smaller Open Source models that were not fine-tuned on the task of entity extraction." ] }, { @@ -453,9 +712,13 @@ "source": [ "### Comparing Solutions\n", "\n", - "* **Simplicity vs. Control**: One-shot prompts are simple but offer limited control. Dedicated tools like Gemini's structured output features, LangChain, and Outlines provide greater control but might have a steeper learning curve.\n", - "* **Native LLM Support**: `with_structured_output` in LangChain relies on the LLM having built-in support for structured output APIs. Other methods, like parsing or using Outlines, are more broadly applicable.\n", - "* **Flexibility**: Outlines and LangChain's `StructuredOutputParser` offer the most flexibility for defining custom output structures." + "* **Simplicity vs. Control**: One-shot prompts are simple but offer limited control. `LangChain`, and Outlines provide greater control but might have a steeper learning curve though quite manageable.\n", + "\n", + "* **Native LLM Support**: `with_structured_output` in LangChain relies on the underlying LLM having built-in support for structured output APIs, i.e. LangChain is just a wrapper around the LLM's structured output API. Other methods, like parsing or using Outlines, are more broadly applicable with the fomer enabling a wider range of Open Source models.\n", + "\n", + "* **Flexibility**: Outlines and LangChain's `StructuredOutputParser` offer the most flexibility for defining custom output structures.\n", + "\n", + "* **Performance**: Outlines' may offer performance benefits as it introduces no overhead during inference a feature not necessiraly shared by other methods." ] }, { @@ -465,13 +728,13 @@ "## Best Practices\n", "\n", "\n", - "* **Clear Schema Definition**: Define the desired output structure clearly, using schemas, types, or grammars as appropriate. This ensures the LLM knows exactly what format is expected.\n", + "* **Clear Schema Definition**: Define the desired output structure clearly. This can be done in several ways including schemas, types, or Pydantic models as appropriate. This ensures the LLM knows exactly what format is expected.\n", + "\n", "* **Descriptive Naming**: Use meaningful names for fields and elements in your schema. This makes the output more understandable and easier to work with.\n", + "\n", "* **Detailed Prompting**: Guide the LLM with well-crafted prompts that include examples and clear instructions. A well-structured prompt improves the chances of getting the desired output.\n", - "* **Error Handling**: Implement mechanisms to handle cases where the LLM deviates from the expected structure. LLMs are not perfect, so having error handling ensures your application remains robust.\n", - "* **Testing and Iteration**: Thoroughly test your structured output generation process and refine your prompts and schemas based on the results. Continuous testing and refinement are key to achieving reliable structured output.\n", - "* **Structured Response**: If you want to structure the model's output when it responds to the user, then you should consider using a structured response_format (e.g. JSON format).\n", - "* **Function Calling**: If you are connecting the model to tools, functions, data, etc. in your system, then you should use a typed structured output. \n", + "\n", + "* **Integration**: If you are connecting the model to tools, functions, data, etc. in your system, then you are highly encouraged to use a typed structured output (e.g. Pydantic models) to ensure the model's output can be processed correctly by downstream systems.\n", "\n" ] }, diff --git a/tamingllms/_build/html/genindex.html b/tamingllms/_build/html/genindex.html index e6b926e..428e3f8 100644 --- a/tamingllms/_build/html/genindex.html +++ b/tamingllms/_build/html/genindex.html @@ -84,7 +84,7 @@