diff --git a/poetry.lock b/poetry.lock index 7da6dff9e..1f26eead9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiofiles" @@ -192,13 +192,13 @@ files = [ [[package]] name = "anthropic" -version = "0.8.1" +version = "0.13.0" description = "The official Python library for the anthropic API" optional = false python-versions = ">=3.7" files = [ - {file = "anthropic-0.8.1-py3-none-any.whl", hash = "sha256:4578b99d6e140c84ad5f409e460aabc85acffc6e189dfd91378b9277b4c158b7"}, - {file = "anthropic-0.8.1.tar.gz", hash = "sha256:736cf85681b8ed066014b0485d8d5be1f2aae65f86e6a25c76a5d5ebb970eee5"}, + {file = "anthropic-0.13.0-py3-none-any.whl", hash = "sha256:2d4b6a69bf5b31a596669d68820f40f5ed9a9a3333ddaa727166a11ed29275e8"}, + {file = "anthropic-0.13.0.tar.gz", hash = "sha256:b935d2fee12f7dbfcc80398b3da5f20103ece42aecb97d8ce24459e3c4f8ec8a"}, ] [package.dependencies] @@ -210,6 +210,9 @@ sniffio = "*" tokenizers = ">=0.13.0" typing-extensions = ">=4.7,<5" +[package.extras] +vertex = ["google-auth (>=2,<3)"] + [[package]] name = "anyio" version = "4.2.0" @@ -243,23 +246,6 @@ files = [ {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, ] -[[package]] -name = "asgiref" -version = "3.7.2" -description = "ASGI specs, helper code, and adapters" -optional = false -python-versions = ">=3.7" -files = [ - {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, - {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} - -[package.extras] -tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] - [[package]] name = "asttokens" version = "2.4.1" @@ -428,17 +414,17 @@ files = [ [[package]] name = "boto3" -version = "1.34.31" +version = "1.34.32" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.8" files = [ - {file = "boto3-1.34.31-py3-none-any.whl", hash = "sha256:0d800130e43a5d4e71300cc6f91aabcef6fe6f26bc206bc61374bf695049587a"}, - {file = "boto3-1.34.31.tar.gz", hash = "sha256:c4dec7ea9bc9210ec783d39b56d332f5a266b0d1e31a96c5092f6bd5252361ba"}, + {file = "boto3-1.34.32-py3-none-any.whl", hash = "sha256:7bf924c942426839efd7fa5c2c4fe85dba208258393e8017a5ad327c30e5948d"}, + {file = "boto3-1.34.32.tar.gz", hash = "sha256:9e62f42de2873baab96eb822386d6a3b1d77f6715cb9033d7b4e6e9ebb0cdbe7"}, ] [package.dependencies] -botocore = ">=1.34.31,<1.35.0" +botocore = ">=1.34.32,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -447,13 +433,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.31" +version = "1.34.32" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.8" files = [ - {file = "botocore-1.34.31-py3-none-any.whl", hash = "sha256:6ee1ba451ce3d640dccd485906f68a55d9e7f3534553876e4adc75d6060a05ac"}, - {file = "botocore-1.34.31.tar.gz", hash = "sha256:d5a2153dbe9687f510f179e03913bc9b4e266c865cabebe440c4d05ab923faa7"}, + {file = "botocore-1.34.32-py3-none-any.whl", hash = "sha256:aa26a74df83eed3db9542c1cf9108138794c344918b36a506c0723717f1acaab"}, + {file = "botocore-1.34.32.tar.gz", hash = "sha256:466aee158bd0429dbd567c4e2bdf7be9a0a5a74409f8b295c30f34d84c497f9c"}, ] [package.dependencies] @@ -559,30 +545,6 @@ files = [ {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, ] -[[package]] -name = "build" -version = "1.0.3" -description = "A simple, correct Python build frontend" -optional = false -python-versions = ">= 3.7" -files = [ - {file = "build-1.0.3-py3-none-any.whl", hash = "sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f"}, - {file = "build-1.0.3.tar.gz", hash = "sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "os_name == \"nt\""} -importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} -packaging = ">=19.0" -pyproject_hooks = "*" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - -[package.extras] -docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] -test = ["filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"] -typing = ["importlib-metadata (>=5.1)", "mypy (>=1.5.0,<1.6.0)", "tomli", "typing-extensions (>=3.7.4.3)"] -virtualenv = ["virtualenv (>=20.0.35)"] - [[package]] name = "cachetools" version = "5.3.2" @@ -874,38 +836,28 @@ numpy = "*" [[package]] name = "chromadb" -version = "0.4.22" +version = "0.4.13" description = "Chroma." optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "chromadb-0.4.22-py3-none-any.whl", hash = "sha256:ad210b27b4cda2f09d15adc9c83c81bfa66b69f39648a27b637306e40de0680d"}, - {file = "chromadb-0.4.22.tar.gz", hash = "sha256:c793149e1c2bbbb52d77602c6c0594c5752f04cd9be12619250ddad2082af27a"}, + {file = "chromadb-0.4.13-py3-none-any.whl", hash = "sha256:6959dc4aaa6278c7491dd1911724981a0e46816b19e9f86945b9bd875e6a252a"}, + {file = "chromadb-0.4.13.tar.gz", hash = "sha256:99d330b9ac8f2ec81f4b34798d34f2ea9f4656bef1da951efa7e93957ef7e706"}, ] [package.dependencies] bcrypt = ">=4.0.1" -build = ">=1.0.3" chroma-hnswlib = "0.7.3" fastapi = ">=0.95.2" -grpcio = ">=1.58.0" importlib-resources = "*" -kubernetes = ">=28.1.0" -mmh3 = ">=4.0.1" -numpy = ">=1.22.5" +numpy = {version = ">=1.22.5", markers = "python_version >= \"3.8\""} onnxruntime = ">=1.14.1" -opentelemetry-api = ">=1.2.0" -opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" -opentelemetry-instrumentation-fastapi = ">=0.41b0" -opentelemetry-sdk = ">=1.2.0" overrides = ">=7.3.1" posthog = ">=2.4.0" pulsar-client = ">=3.1.0" pydantic = ">=1.9" pypika = ">=0.48.9" -PyYAML = ">=6.0.0" requests = ">=2.28" -tenacity = ">=8.2.3" tokenizers = ">=0.13.2" tqdm = ">=4.65.0" typer = ">=0.9.0" @@ -1315,6 +1267,17 @@ files = [ graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] +[[package]] +name = "dirtyjson" +version = "1.0.8" +description = "JSON decoder for Python that can extract data from the muck" +optional = false +python-versions = "*" +files = [ + {file = "dirtyjson-1.0.8-py3-none-any.whl", hash = "sha256:125e27248435a58acace26d5c2c4c11a1c0de0a9c5124c5a94ba78e517d74f53"}, + {file = "dirtyjson-1.0.8.tar.gz", hash = "sha256:90ca4a18f3ff30ce849d100dcf4a003953c79d3a2348ef056f1d9c22231a25fd"}, +] + [[package]] name = "diskcache" version = "5.6.3" @@ -1554,13 +1517,13 @@ requests = ["requests (>=2.4.0,<3.0.0)"] [[package]] name = "emoji" -version = "2.10.0" +version = "2.10.1" description = "Emoji for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "emoji-2.10.0-py2.py3-none-any.whl", hash = "sha256:aed4332caa23553a7218f032c08b0a325ae53b010f7fb98ad272c0f7841bc1d3"}, - {file = "emoji-2.10.0.tar.gz", hash = "sha256:7e68435eecd2c428c3b4aaa5f72d61a5b1a36c81a5138681cba13d19d94aa3a0"}, + {file = "emoji-2.10.1-py2.py3-none-any.whl", hash = "sha256:11fb369ea79d20c14efa4362c732d67126df294a7959a2c98bfd7447c12a218e"}, + {file = "emoji-2.10.1.tar.gz", hash = "sha256:16287283518fb7141bde00198f9ffff4e1c1cb570efb68b2f1ec50975c3a581d"}, ] [package.extras] @@ -2226,13 +2189,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [[package]] name = "google-api-core" -version = "2.16.0" +version = "2.16.1" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.16.0.tar.gz", hash = "sha256:d1fc42e52aa4042ad812827b7aad858394e2bf73da8329af95ad8efa30bc886b"}, - {file = "google_api_core-2.16.0-py3-none-any.whl", hash = "sha256:c424f9f271c7f55366254708e0d0383963a72376286018af0a04f322be843400"}, + {file = "google-api-core-2.16.1.tar.gz", hash = "sha256:7f668ffa3d5b9f3c6930407e5f5d691c05a376050a5a5fd772b9dc32e70a0c30"}, + {file = "google_api_core-2.16.1-py3-none-any.whl", hash = "sha256:257e9e152cd18da0c6701113c122ade04dca04731e179fc5c7dca48e1396ec4c"}, ] [package.dependencies] @@ -2684,182 +2647,169 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4 [[package]] name = "grpcio" -version = "1.60.0" +version = "1.47.5" description = "HTTP/2-based RPC framework" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "grpcio-1.60.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:d020cfa595d1f8f5c6b343530cd3ca16ae5aefdd1e832b777f9f0eb105f5b139"}, - {file = "grpcio-1.60.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b98f43fcdb16172dec5f4b49f2fece4b16a99fd284d81c6bbac1b3b69fcbe0ff"}, - {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:20e7a4f7ded59097c84059d28230907cd97130fa74f4a8bfd1d8e5ba18c81491"}, - {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452ca5b4afed30e7274445dd9b441a35ece656ec1600b77fff8c216fdf07df43"}, - {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43e636dc2ce9ece583b3e2ca41df5c983f4302eabc6d5f9cd04f0562ee8ec1ae"}, - {file = "grpcio-1.60.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e306b97966369b889985a562ede9d99180def39ad42c8014628dd3cc343f508"}, - {file = "grpcio-1.60.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f897c3b127532e6befdcf961c415c97f320d45614daf84deba0a54e64ea2457b"}, - {file = "grpcio-1.60.0-cp310-cp310-win32.whl", hash = "sha256:b87efe4a380887425bb15f220079aa8336276398dc33fce38c64d278164f963d"}, - {file = "grpcio-1.60.0-cp310-cp310-win_amd64.whl", hash = "sha256:a9c7b71211f066908e518a2ef7a5e211670761651039f0d6a80d8d40054047df"}, - {file = "grpcio-1.60.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:fb464479934778d7cc5baf463d959d361954d6533ad34c3a4f1d267e86ee25fd"}, - {file = "grpcio-1.60.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:4b44d7e39964e808b071714666a812049765b26b3ea48c4434a3b317bac82f14"}, - {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:90bdd76b3f04bdb21de5398b8a7c629676c81dfac290f5f19883857e9371d28c"}, - {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91229d7203f1ef0ab420c9b53fe2ca5c1fbeb34f69b3bc1b5089466237a4a134"}, - {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b36a2c6d4920ba88fa98075fdd58ff94ebeb8acc1215ae07d01a418af4c0253"}, - {file = "grpcio-1.60.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:297eef542156d6b15174a1231c2493ea9ea54af8d016b8ca7d5d9cc65cfcc444"}, - {file = "grpcio-1.60.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:87c9224acba0ad8bacddf427a1c2772e17ce50b3042a789547af27099c5f751d"}, - {file = "grpcio-1.60.0-cp311-cp311-win32.whl", hash = "sha256:95ae3e8e2c1b9bf671817f86f155c5da7d49a2289c5cf27a319458c3e025c320"}, - {file = "grpcio-1.60.0-cp311-cp311-win_amd64.whl", hash = "sha256:467a7d31554892eed2aa6c2d47ded1079fc40ea0b9601d9f79204afa8902274b"}, - {file = "grpcio-1.60.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:a7152fa6e597c20cb97923407cf0934e14224af42c2b8d915f48bc3ad2d9ac18"}, - {file = "grpcio-1.60.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:7db16dd4ea1b05ada504f08d0dca1cd9b926bed3770f50e715d087c6f00ad748"}, - {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:b0571a5aef36ba9177e262dc88a9240c866d903a62799e44fd4aae3f9a2ec17e"}, - {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fd9584bf1bccdfff1512719316efa77be235469e1e3295dce64538c4773840b"}, - {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6a478581b1a1a8fdf3318ecb5f4d0cda41cacdffe2b527c23707c9c1b8fdb55"}, - {file = "grpcio-1.60.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:77c8a317f0fd5a0a2be8ed5cbe5341537d5c00bb79b3bb27ba7c5378ba77dbca"}, - {file = "grpcio-1.60.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1c30bb23a41df95109db130a6cc1b974844300ae2e5d68dd4947aacba5985aa5"}, - {file = "grpcio-1.60.0-cp312-cp312-win32.whl", hash = "sha256:2aef56e85901c2397bd557c5ba514f84de1f0ae5dd132f5d5fed042858115951"}, - {file = "grpcio-1.60.0-cp312-cp312-win_amd64.whl", hash = "sha256:e381fe0c2aa6c03b056ad8f52f8efca7be29fb4d9ae2f8873520843b6039612a"}, - {file = "grpcio-1.60.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:92f88ca1b956eb8427a11bb8b4a0c0b2b03377235fc5102cb05e533b8693a415"}, - {file = "grpcio-1.60.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:e278eafb406f7e1b1b637c2cf51d3ad45883bb5bd1ca56bc05e4fc135dfdaa65"}, - {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:a48edde788b99214613e440fce495bbe2b1e142a7f214cce9e0832146c41e324"}, - {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de2ad69c9a094bf37c1102b5744c9aec6cf74d2b635558b779085d0263166454"}, - {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:073f959c6f570797272f4ee9464a9997eaf1e98c27cb680225b82b53390d61e6"}, - {file = "grpcio-1.60.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c826f93050c73e7769806f92e601e0efdb83ec8d7c76ddf45d514fee54e8e619"}, - {file = "grpcio-1.60.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9e30be89a75ee66aec7f9e60086fadb37ff8c0ba49a022887c28c134341f7179"}, - {file = "grpcio-1.60.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b0fb2d4801546598ac5cd18e3ec79c1a9af8b8f2a86283c55a5337c5aeca4b1b"}, - {file = "grpcio-1.60.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:9073513ec380434eb8d21970e1ab3161041de121f4018bbed3146839451a6d8e"}, - {file = "grpcio-1.60.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:74d7d9fa97809c5b892449b28a65ec2bfa458a4735ddad46074f9f7d9550ad13"}, - {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:1434ca77d6fed4ea312901122dc8da6c4389738bf5788f43efb19a838ac03ead"}, - {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e61e76020e0c332a98290323ecfec721c9544f5b739fab925b6e8cbe1944cf19"}, - {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675997222f2e2f22928fbba640824aebd43791116034f62006e19730715166c0"}, - {file = "grpcio-1.60.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5208a57eae445ae84a219dfd8b56e04313445d146873117b5fa75f3245bc1390"}, - {file = "grpcio-1.60.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:428d699c8553c27e98f4d29fdc0f0edc50e9a8a7590bfd294d2edb0da7be3629"}, - {file = "grpcio-1.60.0-cp38-cp38-win32.whl", hash = "sha256:83f2292ae292ed5a47cdcb9821039ca8e88902923198f2193f13959360c01860"}, - {file = "grpcio-1.60.0-cp38-cp38-win_amd64.whl", hash = "sha256:705a68a973c4c76db5d369ed573fec3367d7d196673fa86614b33d8c8e9ebb08"}, - {file = "grpcio-1.60.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c193109ca4070cdcaa6eff00fdb5a56233dc7610216d58fb81638f89f02e4968"}, - {file = "grpcio-1.60.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:676e4a44e740deaba0f4d95ba1d8c5c89a2fcc43d02c39f69450b1fa19d39590"}, - {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5ff21e000ff2f658430bde5288cb1ac440ff15c0d7d18b5fb222f941b46cb0d2"}, - {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c86343cf9ff7b2514dd229bdd88ebba760bd8973dac192ae687ff75e39ebfab"}, - {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fd3b3968ffe7643144580f260f04d39d869fcc2cddb745deef078b09fd2b328"}, - {file = "grpcio-1.60.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:30943b9530fe3620e3b195c03130396cd0ee3a0d10a66c1bee715d1819001eaf"}, - {file = "grpcio-1.60.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b10241250cb77657ab315270b064a6c7f1add58af94befa20687e7c8d8603ae6"}, - {file = "grpcio-1.60.0-cp39-cp39-win32.whl", hash = "sha256:79a050889eb8d57a93ed21d9585bb63fca881666fc709f5d9f7f9372f5e7fd03"}, - {file = "grpcio-1.60.0-cp39-cp39-win_amd64.whl", hash = "sha256:8a97a681e82bc11a42d4372fe57898d270a2707f36c45c6676e49ce0d5c41353"}, - {file = "grpcio-1.60.0.tar.gz", hash = "sha256:2199165a1affb666aa24adf0c97436686d0a61bc5fc113c037701fb7c7fceb96"}, + {file = "grpcio-1.47.5-cp310-cp310-linux_armv7l.whl", hash = "sha256:acc73289d0c44650aa1f21eccfa967f5623b01c3b5e2b4596fe5f9c5bf10956d"}, + {file = "grpcio-1.47.5-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f3174c798959998876d546944523a558f78a9b9feb22a2cbaaa3822f2e158653"}, + {file = "grpcio-1.47.5-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:64401ee6d54b4d5869bcba4be3cae9f2e335c44a39ba1e29991ad22cfe2abacb"}, + {file = "grpcio-1.47.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39a07eb5e7ec9277e5d124fb0e2d4f51ddbaadc2abdd27e8bbf1716dcf45e581"}, + {file = "grpcio-1.47.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:874b138ca95a6375ae6f6a12c10a348827c9aa8fbd05d025b87b5e050ab55b46"}, + {file = "grpcio-1.47.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90539369afba42fc921cdda9d5f697a421f05a2e82ba58342ffbe88aa586019e"}, + {file = "grpcio-1.47.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b18f970514bbc76547928e26d0cec06996ce3f947a3634b3adbe79d0e48e980"}, + {file = "grpcio-1.47.5-cp310-cp310-win32.whl", hash = "sha256:44c52923be0c4a0f662de43644679c6356960c38c4edf44864c23b998693c7cc"}, + {file = "grpcio-1.47.5-cp310-cp310-win_amd64.whl", hash = "sha256:07761f427551fced386db8c78701d6a167b2a682aa8df808303dd0a0d44bf6c9"}, + {file = "grpcio-1.47.5-cp36-cp36m-linux_armv7l.whl", hash = "sha256:10eb026bf75568de06933366f0340d2b4b207425c74a5640aa1812b8b69e7d9d"}, + {file = "grpcio-1.47.5-cp36-cp36m-macosx_10_10_universal2.whl", hash = "sha256:4f8e7fba6b1150a63aebd04d03be779de4ea4c4a8b28869e7a3c8f0b3ec59edc"}, + {file = "grpcio-1.47.5-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:36d93b19c214bc654fc50ae65cce84b8f7698159191b9d3f21f9ad92ae7bc325"}, + {file = "grpcio-1.47.5-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e59f916bf58528e55893743151c6bd9f0a393fddfe411a6fffd29a300e6acf2"}, + {file = "grpcio-1.47.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18f8b2d316a3be464eb2a20afa7026a235a07a0094be879876611206d8026679"}, + {file = "grpcio-1.47.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:0c3076957cd2aea34fe69384453315fd765948eb6cb73a12f332277308d04b76"}, + {file = "grpcio-1.47.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:007f5ad07d2f3a4a422c1df589a0d25e918b96d8f6069cb6f0254386a5f09262"}, + {file = "grpcio-1.47.5-cp36-cp36m-win32.whl", hash = "sha256:01ac149a5ca9512277b1d2fe85687099f3e442c6f9f924eae003a6700735e23e"}, + {file = "grpcio-1.47.5-cp36-cp36m-win_amd64.whl", hash = "sha256:a32ccc88950f2be619157201161e70a5e5ed9e2427662bb2e60f1a8cea7d0db6"}, + {file = "grpcio-1.47.5-cp37-cp37m-linux_armv7l.whl", hash = "sha256:ec71f15258e086acadb13ec06e4e4c54eb0f5455cd4c618997f847874d5ff9ea"}, + {file = "grpcio-1.47.5-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:4bbf5a63497dbd5e44c4335cab153796a4274be17ca40ec971a7749c3f4fef6a"}, + {file = "grpcio-1.47.5-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:11e1bc97e88232201256b718c63a8a1fd86ec6fca3a501293be5c5e423de9d56"}, + {file = "grpcio-1.47.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e568d84fed80713d2fa3221552beee27ed8034f7eff52bb7871bf5ffe4d4ca78"}, + {file = "grpcio-1.47.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4c838de8e1e7194d3f9a679fd76cc44a1dbe81f18bd39ee233c72347d772bf"}, + {file = "grpcio-1.47.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a74c19baf2f8127b44b3f58e2a5801a17992dae9a20197b4a8fa26e2ea79742b"}, + {file = "grpcio-1.47.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e369ed5ecff11ef85666cabbb5736495604e052c8dc2c03a2104f99dfd0a59e3"}, + {file = "grpcio-1.47.5-cp37-cp37m-win32.whl", hash = "sha256:ccb741fab5117aea981d4ac341d2ce1e588f515f83091807d4e2bb388ed59edd"}, + {file = "grpcio-1.47.5-cp37-cp37m-win_amd64.whl", hash = "sha256:af9d3b075dfcbc343d44b0e98725ba6d56dc0669e61905a4e71e8f4409cfefbd"}, + {file = "grpcio-1.47.5-cp38-cp38-linux_armv7l.whl", hash = "sha256:cac6847a4b9a7e7a1f270a71fef1c17c2e8a6b411c0ca48080ce1e08d284aded"}, + {file = "grpcio-1.47.5-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:54a3e17d155b6fb141e1fbb7c47d30556bec4c940b66ff4d9513536e2e214d4a"}, + {file = "grpcio-1.47.5-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:d1873c0b84a0ffb129f75e7c8be45d2cae427baf0b090d15b9ff46c1841c3f53"}, + {file = "grpcio-1.47.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e209df91cf8dfb335c2e26784702b0e12c20dc4de7b9b6d2cccd968146155f06"}, + {file = "grpcio-1.47.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:350e2627684f93f8b59af9c76a03eeb4aa145ecc589569137d4518486f4f1727"}, + {file = "grpcio-1.47.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:23754807314c5aa4c26eb1c50aaf506801a2f7825951100280d2c013b127436f"}, + {file = "grpcio-1.47.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:503c3fa0045f3ef80aa1ad082eac6a888081da2e1cd793f281ed499831e4c498"}, + {file = "grpcio-1.47.5-cp38-cp38-win32.whl", hash = "sha256:a4eecfbe994c88996461bd1459e43ea460952d4147f53e8c18e089764e6808f5"}, + {file = "grpcio-1.47.5-cp38-cp38-win_amd64.whl", hash = "sha256:941927ae4d589a2fef5c22b9c47df9e5e613c737bd750bafc3a9547cc506017c"}, + {file = "grpcio-1.47.5-cp39-cp39-linux_armv7l.whl", hash = "sha256:9891c77e69bd4109c25c1bea51d78fbc5ba2fcd9445bf99225bb8fb03d849913"}, + {file = "grpcio-1.47.5-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:61e83778d85dbbbd7446451ec28b7261e9ebba489cc8c262dfe8fedc119f769b"}, + {file = "grpcio-1.47.5-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:21ccfc0e989531cbdc93c54a7581ea5f7c46bf585016d9320b4be042f1e02374"}, + {file = "grpcio-1.47.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bea35a0114a39827ffe59f73950d242f95d59a9ac2009ae8da7b065c06f0a57f"}, + {file = "grpcio-1.47.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e75b9e52eeb9d1335aaeecf581cb3cea7fc4bafd7bd675c83f208a386a42a8"}, + {file = "grpcio-1.47.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1fb86f95228827b55e860278d142326af4489c0f4220975780daff325fc87172"}, + {file = "grpcio-1.47.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c9b83183525afe58dd9e7bb249f9e55df326e3c3834d09ea476c7a6bb12f73ee"}, + {file = "grpcio-1.47.5-cp39-cp39-win32.whl", hash = "sha256:00bff7492875ab04ec5ed3d92550d8f8aa423151e187b79684c8a22c7a6f1670"}, + {file = "grpcio-1.47.5-cp39-cp39-win_amd64.whl", hash = "sha256:2b32adae820cc0347e5e44efe91b661b436dbca73f25c5763cadb1cafd1dca10"}, + {file = "grpcio-1.47.5.tar.gz", hash = "sha256:b62b8bea0c94b4603bb4c8332d8a814375120bea3c2dbeb71397213bde5ea832"}, ] +[package.dependencies] +six = ">=1.5.2" + [package.extras] -protobuf = ["grpcio-tools (>=1.60.0)"] +protobuf = ["grpcio-tools (>=1.47.5)"] [[package]] name = "grpcio-health-checking" -version = "1.60.0" +version = "1.47.5" description = "Standard Health Checking Service for gRPC" optional = false python-versions = ">=3.6" files = [ - {file = "grpcio-health-checking-1.60.0.tar.gz", hash = "sha256:478b5300778120fed9f6d134d72b157a59f9c06689789218cbff47fafca2f119"}, - {file = "grpcio_health_checking-1.60.0-py3-none-any.whl", hash = "sha256:13caf28bc93795bd6bdb580b21832ebdd1aa3f5b648ea47ed17362d85bed96d3"}, + {file = "grpcio-health-checking-1.47.5.tar.gz", hash = "sha256:74f36ef2ff704c46965bd74cdea51afc0bbcde641134c9d09ecb5063391db516"}, + {file = "grpcio_health_checking-1.47.5-py3-none-any.whl", hash = "sha256:659b83138cb2b7db71777044d0caf58bab4f958fce972900f8577ebb4edca29d"}, ] [package.dependencies] -grpcio = ">=1.60.0" -protobuf = ">=4.21.6" +grpcio = ">=1.47.5" +protobuf = ">=3.12.0" [[package]] name = "grpcio-reflection" -version = "1.60.0" +version = "1.47.5" description = "Standard Protobuf Reflection Service for gRPC" optional = false python-versions = ">=3.6" files = [ - {file = "grpcio-reflection-1.60.0.tar.gz", hash = "sha256:3f6c0c73ba8f20d1420c5e72fc4dd0389fac346ed8fb32a28e6e1967b44fff35"}, - {file = "grpcio_reflection-1.60.0-py3-none-any.whl", hash = "sha256:f7a347ebd6cecf347fc836fd520fd1f0b3411912981649c7fb34d62a3a15aa4e"}, + {file = "grpcio-reflection-1.47.5.tar.gz", hash = "sha256:ac391ec327861f16bc870638101fee80799eccf39c5b09e9ddd776d6854b9873"}, + {file = "grpcio_reflection-1.47.5-py3-none-any.whl", hash = "sha256:8cfd222f2116b7e1bcd55bd2a1fcb168c5a9cd20310151d6278563f516e8ae1e"}, ] [package.dependencies] -grpcio = ">=1.60.0" -protobuf = ">=4.21.6" +grpcio = ">=1.47.5" +protobuf = ">=3.12.0" [[package]] name = "grpcio-status" -version = "1.60.0" +version = "1.47.5" description = "Status proto mapping for gRPC" optional = false python-versions = ">=3.6" files = [ - {file = "grpcio-status-1.60.0.tar.gz", hash = "sha256:f10e0b6db3adc0fdc244b71962814ee982996ef06186446b5695b9fa635aa1ab"}, - {file = "grpcio_status-1.60.0-py3-none-any.whl", hash = "sha256:7d383fa36e59c1e61d380d91350badd4d12ac56e4de2c2b831b050362c3c572e"}, + {file = "grpcio-status-1.47.5.tar.gz", hash = "sha256:671bb4c0819697a699c12a8785a78d6847eafb6a83b2437bbae13989b04e5c25"}, + {file = "grpcio_status-1.47.5-py3-none-any.whl", hash = "sha256:24549a84fa37ca5de1e0f6be96b4c2c3623b1e2b7359aa16b3de5aa0563795f1"}, ] [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.60.0" -protobuf = ">=4.21.6" +grpcio = ">=1.47.5" +protobuf = ">=3.12.0" [[package]] name = "grpcio-tools" -version = "1.60.0" +version = "1.47.5" description = "Protobuf code generator for gRPC" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "grpcio-tools-1.60.0.tar.gz", hash = "sha256:ed30499340228d733ff69fcf4a66590ed7921f94eb5a2bf692258b1280b9dac7"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:6807b7a3f3e6e594566100bd7fe04a2c42ce6d5792652677f1aaf5aa5adaef3d"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:857c5351e9dc33a019700e171163f94fcc7e3ae0f6d2b026b10fda1e3c008ef1"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:ec0e401e9a43d927d216d5169b03c61163fb52b665c5af2fed851357b15aef88"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e68dc4474f30cad11a965f0eb5d37720a032b4720afa0ec19dbcea2de73b5aae"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbf0ed772d2ae7e8e5d7281fcc00123923ab130b94f7a843eee9af405918f924"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c771b19dce2bfe06899247168c077d7ab4e273f6655d8174834f9a6034415096"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e5614cf0960456d21d8a0f4902e3e5e3bcacc4e400bf22f196e5dd8aabb978b7"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-win32.whl", hash = "sha256:87cf439178f3eb45c1a889b2e4a17cbb4c450230d92c18d9c57e11271e239c55"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-win_amd64.whl", hash = "sha256:687f576d7ff6ce483bc9a196d1ceac45144e8733b953620a026daed8e450bc38"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2a8a758701f3ac07ed85f5a4284c6a9ddefcab7913a8e552497f919349e72438"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:7c1cde49631732356cb916ee1710507967f19913565ed5f9991e6c9cb37e3887"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:d941749bd8dc3f8be58fe37183143412a27bec3df8482d5abd6b4ec3f1ac2924"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ee35234f1da8fba7ddbc544856ff588243f1128ea778d7a1da3039be829a134"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8f7a5094adb49e85db13ea3df5d99a976c2bdfd83b0ba26af20ebb742ac6786"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:24c4ead4a03037beaeb8ef2c90d13d70101e35c9fae057337ed1a9144ef10b53"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:811abb9c4fb6679e0058dfa123fb065d97b158b71959c0e048e7972bbb82ba0f"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-win32.whl", hash = "sha256:bd2a17b0193fbe4793c215d63ce1e01ae00a8183d81d7c04e77e1dfafc4b2b8a"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-win_amd64.whl", hash = "sha256:b22b1299b666eebd5752ba7719da536075eae3053abcf2898b65f763c314d9da"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:74025fdd6d1cb7ba4b5d087995339e9a09f0c16cf15dfe56368b23e41ffeaf7a"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:5a907a4f1ffba86501b2cdb8682346249ea032b922fc69a92f082ba045cca548"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:1fbb9554466d560472f07d906bfc8dcaf52f365c2a407015185993e30372a886"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f10ef47460ce3c6fd400f05fe757b90df63486c9b84d1ecad42dcc5f80c8ac14"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:321b18f42a70813545e416ddcb8bf20defa407a8114906711c9710a69596ceda"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:081336d8258f1a56542aa8a7a5dec99a2b38d902e19fbdd744594783301b0210"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:addc9b23d6ff729d9f83d4a2846292d4c84f5eb2ec38f08489a6a0d66ac2b91e"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-win32.whl", hash = "sha256:e87cabac7969bdde309575edc2456357667a1b28262b2c1f12580ef48315b19d"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-win_amd64.whl", hash = "sha256:e70d867c120d9849093b0ac24d861e378bc88af2552e743d83b9f642d2caa7c2"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:559ce714fe212aaf4abbe1493c5bb8920def00cc77ce0d45266f4fd9d8b3166f"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:7a5263a0f2ddb7b1cfb2349e392cfc4f318722e0f48f886393e06946875d40f3"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:18976684a931ca4bcba65c78afa778683aefaae310f353e198b1823bf09775a0"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5c519a0d4ba1ab44a004fa144089738c59278233e2010b2cf4527dc667ff297"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6170873b1e5b6580ebb99e87fb6e4ea4c48785b910bd7af838cc6e44b2bccb04"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fb4df80868b3e397d5fbccc004c789d2668b622b51a9d2387b4c89c80d31e2c5"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dba6e32c87b4af29b5f475fb2f470f7ee3140bfc128644f17c6c59ddeb670680"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f610384dee4b1ca705e8da66c5b5fe89a2de3d165c5282c3d1ddf40cb18924e4"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:4041538f55aad5b3ae7e25ab314d7995d689e968bfc8aa169d939a3160b1e4c6"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:2fb4cf74bfe1e707cf10bc9dd38a1ebaa145179453d150febb121c7e9cd749bf"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2fd1671c52f96e79a2302c8b1c1f78b8a561664b8b3d6946f20d8f1cc6b4225a"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd1e68c232fe01dd5312a8dbe52c50ecd2b5991d517d7f7446af4ba6334ba872"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17a32b3da4fc0798cdcec0a9c974ac2a1e98298f151517bf9148294a3b1a5742"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9970d384fb0c084b00945ef57d98d57a8d32be106d8f0bd31387f7cbfe411b5b"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5ce6bbd4936977ec1114f2903eb4342781960d521b0d82f73afedb9335251f6f"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-win32.whl", hash = "sha256:2e00de389729ca8d8d1a63c2038703078a887ff738dc31be640b7da9c26d0d4f"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-win_amd64.whl", hash = "sha256:6192184b1f99372ff1d9594bd4b12264e3ff26440daba7eb043726785200ff77"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:eae27f9b16238e2aaee84c77b5923c6924d6dccb0bdd18435bf42acc8473ae1a"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b96981f3a31b85074b73d97c8234a5ed9053d65a36b18f4a9c45a2120a5b7a0a"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:1748893efd05cf4a59a175d7fa1e4fbb652f4d84ccaa2109f7869a2be48ed25e"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a6fe752205caae534f29fba907e2f59ff79aa42c6205ce9a467e9406cbac68c"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3456df087ea61a0972a5bc165aed132ed6ddcc63f5749e572f9fff84540bdbad"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f3d916606dcf5610d4367918245b3d9d8cd0d2ec0b7043d1bbb8c50fe9815c3a"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fc01bc1079279ec342f0f1b6a107b3f5dc3169c33369cf96ada6e2e171f74e86"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-win32.whl", hash = "sha256:2dd01257e4feff986d256fa0bac9f56de59dc735eceeeb83de1c126e2e91f653"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-win_amd64.whl", hash = "sha256:1b93ae8ffd18e9af9a965ebca5fa521e89066267de7abdde20721edc04e42721"}, + {file = "grpcio-tools-1.47.5.tar.gz", hash = "sha256:62ced60566a4cbcf35c57e887e2e68b4f108b3474ef3ec0022d38cd579345f92"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-linux_armv7l.whl", hash = "sha256:9f92c561b245a562110bd84d3b64b016c8af5afde39febf1f71553ae56f6e8e4"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:a0a991844a024705ad177cb858d36e3e6b329ea4a78b7f4c597b2817fc2692e7"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:935976d5436d4306de052d1e00848fa25abc667e185aaaffcd367915f33a67c7"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2481dba6a30d415a4756cd88cc380780e3f00bb41d56b8f6547bc3c09c6f4e7f"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62176978faa96b21e4e821e7070b0feed919726ff730c0b3b7e8d106ddb45bf"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:728eb1f4ef6d380366a2de9940d1f910ece8bf4e44de5ca935cd16d4394e82ff"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d58982c747e107f65c7307ec1646cce105b0785088287bf209f545377aeedaf4"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-win32.whl", hash = "sha256:ea6d8f07b087bc2d579b7727daee2abf38fe5dc475c9e7c4f16b4a2c31895319"}, + {file = "grpcio_tools-1.47.5-cp310-cp310-win_amd64.whl", hash = "sha256:5e7a4e68072639fa767bde1011f5d83f4461a8e60651ea202af597777ee1ffd7"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-linux_armv7l.whl", hash = "sha256:bb1e066fc50ef7503b024924858658692d3e98582a9727b156f2f845da70e11e"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-macosx_10_10_universal2.whl", hash = "sha256:7d3e397a27e652ae6579f1f7dc3fc0c771db977ccaaded1fe113e882df425c15"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-manylinux_2_17_aarch64.whl", hash = "sha256:b19d8f1e8422826d49fc428acc66b69aa450c70f7090681df32d535188edf524"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0e017bd1022bc981fa1629e757e0d3d4a1991f999fb90ec714c2683fe05b8fa"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb56ea33c4a33ee3b707f62339fd579e1a8dbbfeb7665d7ff85ee837cf64794"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:02882ff2f703b75d343991608b39104f1621508cf407e427a75c1794ed0fac95"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:84395aacae4f8a3358ad648a8bacf6b15bbb8946d8cf73f47dc77cfe1a154d48"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-win32.whl", hash = "sha256:de8901c64a1091cc474318e7a013af8c30feba34c7954c29ca8f477baf07db28"}, + {file = "grpcio_tools-1.47.5-cp36-cp36m-win_amd64.whl", hash = "sha256:37cb5c3d94ba1efef0d17a66e5e69b177fc934389eda8b76b161a6623e45e714"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-linux_armv7l.whl", hash = "sha256:5c2d3a35e9341ea9c68afe289054bd8604eda4214e6d916f97b19a316537a296"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:89733edb89ec28e52dd9cc25e90b78248b6edd265f564726be2a9c4b4ee78479"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:489f41535d779287759942c6cced93c4219ea53dad46ebdc4faca6220e1dba88"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:072c84f561912400363b81af6bf5424c38fab80f0c9436c0fe19b2e7c2bcf15c"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c650233420279f943bd1dcf286742aaeb4db7cc5f6554a5e8c16c2e4fa19a28f"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dab220aba6b5777b16df5c5b3a30f831cdbc4f493eabdaf9f6585691bad5496a"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:309ca8508f361895ef2d4f533611272228d2412c8cae754b695673c7c65a2f8b"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-win32.whl", hash = "sha256:f8ce5fb65e97866257943cbf6d504195ab55e01ef467988d86322a36041b6de8"}, + {file = "grpcio_tools-1.47.5-cp37-cp37m-win_amd64.whl", hash = "sha256:b9154a18b0ad2bc4b9ceadedd7b67bb65b500b3427495b4d224a1a835aa55ce6"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-linux_armv7l.whl", hash = "sha256:aaa4063bc05a18f32ae98e414e2472477468b966b9a1425c41eec160250beff2"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:093da28f8ce3a0eedd5370b9f09f815fb6c01fd663d60734eab5b300b9a305ec"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:0771f57585b9070086dec509b02fa2804a9d4c395e95cd7a6cb42d8f4b5683f7"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68d4cdc674c8596da8e25cf37741aab3f07bdf38731510a92019e5ec57f5fcea"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08fdce5549acca9fd7a45084c62e8ab0a1ca1c530bcbfa089625e9523f224023"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8431b9ee083bec444ca6d48705b89774f97ba0a75e8c33ef3b9a2dc6ed2aa584"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf37376da0062155d728fb9a1d522ea8f5039ebf774885d269f7772cbc3a2e6"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-win32.whl", hash = "sha256:b65a59698f938fa59fd756799cd641c3755fb09cb95de008e4d67a9e5b1af6d5"}, + {file = "grpcio_tools-1.47.5-cp38-cp38-win_amd64.whl", hash = "sha256:17c2b5ce8b3100c8da4ae5070d8d2c2466f174e66d8127fb85ef8a7937a03853"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-linux_armv7l.whl", hash = "sha256:9070301f079fef76fb0d51b84f393c6738587f3a16a2f0ced303362b0cc0ecf6"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:5bcf01116a4d3bed2faf832f8c5618d1c69473576f3925240e3c5042dfbc115e"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b555b954aa213eac8efe7df507a178c3ab7323df9f501846a1bbccdf81354831"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7604e08530b3edc688e41aa8af46051478d417b08afdf6fc2eafb5eb90528a26"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d3f80818a560abee8189c4f0b074f45c16309b4596e013cb6ce105a022c5965"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c801ebd7fa2304ff85aa15147f134aefe33132d85308c43e46f6a5be78b5a8a8"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:235adfc22e9c703533573344de1d2394ddd92b27c82eb259bb5fb46f885159b8"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-win32.whl", hash = "sha256:d659c257cbb48c843931b584d3c3da5473fa17275e0d04af79c9e9fdd6077179"}, + {file = "grpcio_tools-1.47.5-cp39-cp39-win_amd64.whl", hash = "sha256:9d121c63ff2fddeae2c65f6675eb944f47808a242b647d80b4661b2c5e1e6732"}, ] [package.dependencies] -grpcio = ">=1.60.0" -protobuf = ">=4.21.6,<5.0dev" +grpcio = ">=1.47.5" +protobuf = ">=3.12.0,<4.0dev" setuptools = "*" [[package]] @@ -3301,12 +3251,12 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jina" -version = "3.8.2" +version = "3.10.1" description = "Build cross-modal and multi-modal applications on the cloud · Neural Search · Creative AI · Cloud Native · MLOps" optional = false python-versions = "*" files = [ - {file = "jina-3.8.2.tar.gz", hash = "sha256:1645da74fdf47d3266f76fdd8cd857a3b5fc43fb17a45fe9d9c983a1e82b8137"}, + {file = "jina-3.10.1.tar.gz", hash = "sha256:876d06e9c6879aefdb337a7c96b82ec44bc40371f745be6ed307b3e22f989cb6"}, ] [package.dependencies] @@ -3315,22 +3265,22 @@ aiohttp = "*" aiostream = "*" cryptography = "*" docarray = [ - {version = ">=0.16.1", extras = ["common"]}, - {version = ">=0.16.1"}, + {version = ">=0.16.4"}, + {version = ">=0.16.3", extras = ["common"]}, ] docker = "*" fastapi = ">=0.76.0" filelock = "*" -grpcio = ">=1.46.0" -grpcio-health-checking = ">=1.46.0" -grpcio-reflection = ">=1.46.0" +grpcio = ">=1.46.0,<1.48.1" +grpcio-health-checking = ">=1.46.0,<1.48.1" +grpcio-reflection = ">=1.46.0,<1.48.1" jcloud = ">=0.0.35" -jina-hubble-sdk = ">=0.15.1" +jina-hubble-sdk = ">=0.19.0" numpy = "*" packaging = ">=20.0" pathspec = "*" prometheus_client = "*" -protobuf = ">=3.13.0" +protobuf = ">=3.20.0" pydantic = "*" python-multipart = "*" pyyaml = ">=5.3.1" @@ -3343,25 +3293,25 @@ websockets = "*" aiofiles = ["aiofiles"] aiohttp = ["aiohttp"] aiostream = ["aiostream"] -all = ["Pillow", "aiofiles", "aiohttp", "aiostream", "black (==22.3.0)", "bs4", "coverage (==6.2)", "cryptography", "docarray (>=0.16.1)", "docarray[common] (>=0.16.1)", "docker", "fastapi (>=0.76.0)", "filelock", "flaky", "grpcio (>=1.46.0)", "grpcio-health-checking (>=1.46.0)", "grpcio-reflection (>=1.46.0)", "jcloud (>=0.0.35)", "jina-hubble-sdk (>=0.15.1)", "jsonschema", "kubernetes (>=18.20.0)", "mock", "numpy", "packaging (>=20.0)", "pathspec", "portforward (>=0.2.4)", "prometheus_client", "protobuf (>=3.13.0)", "psutil", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-custom_exit_code", "pytest-kind (==21.1.3)", "pytest-lazy-fixture", "pytest-mock", "pytest-repeat", "pytest-reraise", "pytest-timeout", "python-multipart", "pyyaml (>=5.3.1)", "requests", "requests-mock", "scipy (>=1.6.1)", "sgqlc", "strawberry-graphql (>=0.96.0)", "tensorflow (>=2.0)", "torch", "uvicorn[standard]", "uvloop", "websockets"] +all = ["Pillow", "aiofiles", "aiohttp", "aiostream", "black (==22.3.0)", "bs4", "coverage (==6.2)", "cryptography", "docarray (>=0.16.4)", "docarray[common] (>=0.16.3)", "docker", "fastapi (>=0.76.0)", "filelock", "flaky", "grpcio (>=1.46.0,<1.48.1)", "grpcio-health-checking (>=1.46.0,<1.48.1)", "grpcio-reflection (>=1.46.0,<1.48.1)", "jcloud (>=0.0.35)", "jina-hubble-sdk (>=0.19.0)", "jsonschema", "kubernetes (>=18.20.0)", "mock", "numpy", "packaging (>=20.0)", "pathspec", "portforward (>=0.2.4)", "prometheus_client", "protobuf (>=3.20.0)", "psutil", "pydantic", "pytest", "pytest-asyncio", "pytest-cov", "pytest-custom_exit_code", "pytest-kind (==21.1.3)", "pytest-lazy-fixture", "pytest-mock", "pytest-repeat", "pytest-reraise", "pytest-timeout", "python-multipart", "pyyaml (>=5.3.1)", "requests", "requests-mock", "scipy (>=1.6.1)", "sgqlc", "strawberry-graphql (>=0.96.0)", "tensorflow (>=2.0)", "torch", "uvicorn[standard]", "uvloop", "websockets"] black = ["black (==22.3.0)"] bs4 = ["bs4"] cicd = ["bs4", "jsonschema", "portforward (>=0.2.4)", "sgqlc", "strawberry-graphql (>=0.96.0)", "tensorflow (>=2.0)", "torch"] -core = ["docarray (>=0.16.1)", "grpcio (>=1.46.0)", "grpcio-health-checking (>=1.46.0)", "grpcio-reflection (>=1.46.0)", "jcloud (>=0.0.35)", "jina-hubble-sdk (>=0.15.1)", "numpy", "packaging (>=20.0)", "protobuf (>=3.13.0)", "pyyaml (>=5.3.1)"] +core = ["docarray (>=0.16.4)", "grpcio (>=1.46.0,<1.48.1)", "grpcio-health-checking (>=1.46.0,<1.48.1)", "grpcio-reflection (>=1.46.0,<1.48.1)", "jcloud (>=0.0.35)", "jina-hubble-sdk (>=0.19.0)", "numpy", "packaging (>=20.0)", "protobuf (>=3.20.0)", "pyyaml (>=5.3.1)"] coverage = ["coverage (==6.2)"] cryptography = ["cryptography"] -devel = ["aiofiles", "aiohttp", "aiostream", "cryptography", "docarray[common] (>=0.16.1)", "docker", "fastapi (>=0.76.0)", "filelock", "pathspec", "prometheus_client", "pydantic", "python-multipart", "requests", "sgqlc", "strawberry-graphql (>=0.96.0)", "uvicorn[standard]", "uvloop", "websockets"] -docarray = ["docarray (>=0.16.1)"] -"docarray[common" = ["docarray[common] (>=0.16.1)"] +devel = ["aiofiles", "aiohttp", "aiostream", "cryptography", "docarray[common] (>=0.16.3)", "docker", "fastapi (>=0.76.0)", "filelock", "pathspec", "prometheus_client", "pydantic", "python-multipart", "requests", "sgqlc", "strawberry-graphql (>=0.96.0)", "uvicorn[standard]", "uvloop", "websockets"] +docarray = ["docarray (>=0.16.4)"] +"docarray[common" = ["docarray[common] (>=0.16.3)"] docker = ["docker"] fastapi = ["fastapi (>=0.76.0)"] filelock = ["filelock"] flaky = ["flaky"] -grpcio = ["grpcio (>=1.46.0)"] -grpcio-health-checking = ["grpcio-health-checking (>=1.46.0)"] -grpcio-reflection = ["grpcio-reflection (>=1.46.0)"] +grpcio = ["grpcio (>=1.46.0,<1.48.1)"] +grpcio-health-checking = ["grpcio-health-checking (>=1.46.0,<1.48.1)"] +grpcio-reflection = ["grpcio-reflection (>=1.46.0,<1.48.1)"] jcloud = ["jcloud (>=0.0.35)"] -jina-hubble-sdk = ["jina-hubble-sdk (>=0.15.1)"] +jina-hubble-sdk = ["jina-hubble-sdk (>=0.19.0)"] jsonschema = ["jsonschema"] kubernetes = ["kubernetes (>=18.20.0)"] mock = ["mock"] @@ -3372,7 +3322,7 @@ perf = ["prometheus_client", "uvloop"] pillow = ["Pillow"] portforward = ["portforward (>=0.2.4)"] prometheus-client = ["prometheus_client"] -protobuf = ["protobuf (>=3.13.0)"] +protobuf = ["protobuf (>=3.20.0)"] psutil = ["psutil"] pydantic = ["pydantic"] pytest = ["pytest"] @@ -3391,7 +3341,7 @@ requests = ["requests"] requests-mock = ["requests-mock"] scipy = ["scipy (>=1.6.1)"] sgqlc = ["sgqlc"] -standard = ["aiofiles", "aiohttp", "aiostream", "cryptography", "docarray[common] (>=0.16.1)", "docker", "fastapi (>=0.76.0)", "filelock", "pathspec", "prometheus_client", "pydantic", "python-multipart", "requests", "uvicorn[standard]", "uvloop", "websockets"] +standard = ["aiofiles", "aiohttp", "aiostream", "cryptography", "docarray[common] (>=0.16.3)", "docker", "fastapi (>=0.76.0)", "filelock", "pathspec", "prometheus_client", "pydantic", "python-multipart", "requests", "uvicorn[standard]", "uvloop", "websockets"] strawberry-graphql = ["strawberry-graphql (>=0.96.0)"] tensorflow = ["tensorflow (>=2.0)"] test = ["Pillow", "black (==22.3.0)", "coverage (==6.2)", "flaky", "kubernetes (>=18.20.0)", "mock", "psutil", "pytest", "pytest-asyncio", "pytest-cov", "pytest-custom_exit_code", "pytest-kind (==21.1.3)", "pytest-lazy-fixture", "pytest-mock", "pytest-repeat", "pytest-reraise", "pytest-timeout", "requests-mock", "scipy (>=1.6.1)"] @@ -3659,41 +3609,15 @@ sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=2.8.0)"] -[[package]] -name = "kubernetes" -version = "29.0.0" -description = "Kubernetes python client" -optional = false -python-versions = ">=3.6" -files = [ - {file = "kubernetes-29.0.0-py2.py3-none-any.whl", hash = "sha256:ab8cb0e0576ccdfb71886366efb102c6a20f268d817be065ce7f9909c631e43e"}, - {file = "kubernetes-29.0.0.tar.gz", hash = "sha256:c4812e227ae74d07d53c88293e564e54b850452715a59a927e7e1bc6b9a60459"}, -] - -[package.dependencies] -certifi = ">=14.05.14" -google-auth = ">=1.0.1" -oauthlib = ">=3.2.2" -python-dateutil = ">=2.5.3" -pyyaml = ">=5.4.1" -requests = "*" -requests-oauthlib = "*" -six = ">=1.9.0" -urllib3 = ">=1.24.2" -websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" - -[package.extras] -adal = ["adal (>=1.0.2)"] - [[package]] name = "langchain" -version = "0.0.354" +version = "0.1.4" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langchain-0.0.354-py3-none-any.whl", hash = "sha256:8d28283a2891422a685b0605dd23b5a1cd6a15ab57a8e359b37a3151a322bad4"}, - {file = "langchain-0.0.354.tar.gz", hash = "sha256:419c48735b803d70c0dee985e0afcfd7c88528b8c1cd918c57eb23e53d94ea87"}, + {file = "langchain-0.1.4-py3-none-any.whl", hash = "sha256:6befdd6221f5f326092e31a3c19efdc7ce3d7d1f2e2cab065141071451730ed7"}, + {file = "langchain-0.1.4.tar.gz", hash = "sha256:8767a9461e2b717ce9a35b1fa20659de89ea86ba9c2a4ff516e05d47ab2d195d"}, ] [package.dependencies] @@ -3701,9 +3625,9 @@ aiohttp = ">=3.8.3,<4.0.0" async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} dataclasses-json = ">=0.5.7,<0.7" jsonpatch = ">=1.33,<2.0" -langchain-community = ">=0.0.8,<0.1" -langchain-core = ">=0.1.5,<0.2" -langsmith = ">=0.0.77,<0.1.0" +langchain-community = ">=0.0.14,<0.1" +langchain-core = ">=0.1.16,<0.2" +langsmith = ">=0.0.83,<0.1" numpy = ">=1,<2" pydantic = ">=1,<3" PyYAML = ">=5.3" @@ -3718,7 +3642,7 @@ cli = ["typer (>=0.9.0,<0.10.0)"] cohere = ["cohere (>=4,<5)"] docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"] embeddings = ["sentence-transformers (>=2,<3)"] -extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<5)", "couchbase (>=4.1.9,<5.0.0)", "dashvector (>=1.0.1,<2.0.0)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] +extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<5)", "couchbase (>=4.1.9,<5.0.0)", "dashvector (>=1.0.1,<2.0.0)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "langchain-openai (>=0.0.2,<0.1)", "lxml (>=4.9.2,<5.0.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0)", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] javascript = ["esprima (>=4.0.1,<5.0.0)"] llms = ["clarifai (>=9.1.0)", "cohere (>=4,<5)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (<2)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"] openai = ["openai (<2)", "tiktoken (>=0.3.2,<0.6.0)"] @@ -3777,18 +3701,18 @@ extended-testing = ["jinja2 (>=3,<4)"] [[package]] name = "langchain-experimental" -version = "0.0.47" +version = "0.0.49" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "langchain_experimental-0.0.47-py3-none-any.whl", hash = "sha256:d5b6930c4e0a6f280cbb7d327d03d86f555f6168e185a1df64ba4a52b1059f65"}, - {file = "langchain_experimental-0.0.47.tar.gz", hash = "sha256:0fdba89a438287c14fa0632c6adf87acffd55158a2f66c7a12be7721a7882a0e"}, + {file = "langchain_experimental-0.0.49-py3-none-any.whl", hash = "sha256:7ddfeab733524785545a09657a482ab3ce866d2bd0984e757768d07ac55fcdcd"}, + {file = "langchain_experimental-0.0.49.tar.gz", hash = "sha256:b36ef864f8464055e9063f94ee568c0d28cd1f029d23d02a7b4d8ff0f115e69f"}, ] [package.dependencies] -langchain = ">=0.0.350,<0.1" -langchain-core = ">=0.1,<0.2" +langchain = ">=0.1,<0.2" +langchain-core = ">=0.1.7,<0.2.0" [package.extras] extended-testing = ["faker (>=19.3.1,<20.0.0)", "jinja2 (>=3,<4)", "presidio-analyzer (>=2.2.33,<3.0.0)", "presidio-anonymizer (>=2.2.33,<3.0.0)", "sentence-transformers (>=2,<3)", "vowpal-wabbit-next (==0.6.0)"] @@ -3808,6 +3732,23 @@ files = [ google-generativeai = ">=0.3.1,<0.4.0" langchain-core = ">=0.1,<0.2" +[[package]] +name = "langchain-openai" +version = "0.0.2.post1" +description = "An integration package connecting OpenAI and LangChain" +optional = false +python-versions = ">=3.8.1,<4.0" +files = [ + {file = "langchain_openai-0.0.2.post1-py3-none-any.whl", hash = "sha256:ba468b94c23da9d8ccefe5d5a3c1c65b4b9702292523e53acc689a9110022e26"}, + {file = "langchain_openai-0.0.2.post1.tar.gz", hash = "sha256:f8e78db4a663feeac71d9f036b9422406c199ea3ef4c97d99ff392c93530e073"}, +] + +[package.dependencies] +langchain-core = ">=0.1.7,<0.2" +numpy = ">=1,<2" +openai = ">=1.6.1,<2.0.0" +tiktoken = ">=0.5.2,<0.6.0" + [[package]] name = "langdetect" version = "1.0.9" @@ -3882,12 +3823,12 @@ regex = ["regex"] [[package]] name = "llama-cpp-python" -version = "0.2.37" +version = "0.2.38" description = "Python bindings for the llama.cpp library" optional = true python-versions = ">=3.8" files = [ - {file = "llama_cpp_python-0.2.37.tar.gz", hash = "sha256:a8f7c8d27334c6b38afac9a33f02a90a8a6c3eed15309e4b9315ac13a3cb3c04"}, + {file = "llama_cpp_python-0.2.38.tar.gz", hash = "sha256:5acf5dd43e7e36e012924c92cb27612cd116571fe5849528758a2d6b301b7139"}, ] [package.dependencies] @@ -3904,19 +3845,20 @@ test = ["httpx (>=0.24.1)", "pytest (>=7.4.0)", "scipy (>=1.10)"] [[package]] name = "llama-index" -version = "0.9.39" +version = "0.9.40" description = "Interface between LLMs and your data" optional = false python-versions = ">=3.8.1,<4.0" files = [ - {file = "llama_index-0.9.39-py3-none-any.whl", hash = "sha256:73e19bf664b0643e3c1b88229d4bcaad841f4c6e882a63b27f637386c54d5353"}, - {file = "llama_index-0.9.39.tar.gz", hash = "sha256:c0d4093cd1c6d6056275f96d6acba56f383ef98925c9ce3fc8cde9fb4dee1f75"}, + {file = "llama_index-0.9.40-py3-none-any.whl", hash = "sha256:9fd192c574026b3e5eb95c8aed82506c48b46b5acb3401e98e0864d6f485f7a9"}, + {file = "llama_index-0.9.40.tar.gz", hash = "sha256:bbe8b9584393a90bfb5246333d63df1c34d0989d19737f76f26baed6080b25dc"}, ] [package.dependencies] aiohttp = ">=3.8.6,<4.0.0" dataclasses-json = "*" deprecated = ">=1.2.9.3" +dirtyjson = ">=1.0.8,<2.0.0" fsspec = ">=2023.5.0" httpx = "*" nest-asyncio = ">=1.5.8,<2.0.0" @@ -4277,98 +4219,6 @@ files = [ [package.dependencies] requests = "*" -[[package]] -name = "mmh3" -version = "4.1.0" -description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." -optional = false -python-versions = "*" -files = [ - {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be5ac76a8b0cd8095784e51e4c1c9c318c19edcd1709a06eb14979c8d850c31a"}, - {file = "mmh3-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98a49121afdfab67cd80e912b36404139d7deceb6773a83620137aaa0da5714c"}, - {file = "mmh3-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5259ac0535874366e7d1a5423ef746e0d36a9e3c14509ce6511614bdc5a7ef5b"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5950827ca0453a2be357696da509ab39646044e3fa15cad364eb65d78797437"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1dd0f652ae99585b9dd26de458e5f08571522f0402155809fd1dc8852a613a39"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99d25548070942fab1e4a6f04d1626d67e66d0b81ed6571ecfca511f3edf07e6"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53db8d9bad3cb66c8f35cbc894f336273f63489ce4ac416634932e3cbe79eb5b"}, - {file = "mmh3-4.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75da0f615eb55295a437264cc0b736753f830b09d102aa4c2a7d719bc445ec05"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b926b07fd678ea84b3a2afc1fa22ce50aeb627839c44382f3d0291e945621e1a"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c5b053334f9b0af8559d6da9dc72cef0a65b325ebb3e630c680012323c950bb6"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bf33dc43cd6de2cb86e0aa73a1cc6530f557854bbbe5d59f41ef6de2e353d7b"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fa7eacd2b830727ba3dd65a365bed8a5c992ecd0c8348cf39a05cc77d22f4970"}, - {file = "mmh3-4.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:42dfd6742b9e3eec599f85270617debfa0bbb913c545bb980c8a4fa7b2d047da"}, - {file = "mmh3-4.1.0-cp310-cp310-win32.whl", hash = "sha256:2974ad343f0d39dcc88e93ee6afa96cedc35a9883bc067febd7ff736e207fa47"}, - {file = "mmh3-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:74699a8984ded645c1a24d6078351a056f5a5f1fe5838870412a68ac5e28d865"}, - {file = "mmh3-4.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:f0dc874cedc23d46fc488a987faa6ad08ffa79e44fb08e3cd4d4cf2877c00a00"}, - {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3280a463855b0eae64b681cd5b9ddd9464b73f81151e87bb7c91a811d25619e6"}, - {file = "mmh3-4.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:97ac57c6c3301769e757d444fa7c973ceb002cb66534b39cbab5e38de61cd896"}, - {file = "mmh3-4.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7b6502cdb4dbd880244818ab363c8770a48cdccecf6d729ade0241b736b5ec0"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52ba2da04671a9621580ddabf72f06f0e72c1c9c3b7b608849b58b11080d8f14"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a5fef4c4ecc782e6e43fbeab09cff1bac82c998a1773d3a5ee6a3605cde343e"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5135358a7e00991f73b88cdc8eda5203bf9de22120d10a834c5761dbeb07dd13"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cff9ae76a54f7c6fe0167c9c4028c12c1f6de52d68a31d11b6790bb2ae685560"}, - {file = "mmh3-4.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f02576a4d106d7830ca90278868bf0983554dd69183b7bbe09f2fcd51cf54f"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:073d57425a23721730d3ff5485e2da489dd3c90b04e86243dd7211f889898106"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:71e32ddec7f573a1a0feb8d2cf2af474c50ec21e7a8263026e8d3b4b629805db"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7cbb20b29d57e76a58b40fd8b13a9130db495a12d678d651b459bf61c0714cea"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a42ad267e131d7847076bb7e31050f6c4378cd38e8f1bf7a0edd32f30224d5c9"}, - {file = "mmh3-4.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a013979fc9390abadc445ea2527426a0e7a4495c19b74589204f9b71bcaafeb"}, - {file = "mmh3-4.1.0-cp311-cp311-win32.whl", hash = "sha256:1d3b1cdad7c71b7b88966301789a478af142bddcb3a2bee563f7a7d40519a00f"}, - {file = "mmh3-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dc6dc32eb03727467da8e17deffe004fbb65e8b5ee2b502d36250d7a3f4e2ec"}, - {file = "mmh3-4.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:9ae3a5c1b32dda121c7dc26f9597ef7b01b4c56a98319a7fe86c35b8bc459ae6"}, - {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0033d60c7939168ef65ddc396611077a7268bde024f2c23bdc283a19123f9e9c"}, - {file = "mmh3-4.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d6af3e2287644b2b08b5924ed3a88c97b87b44ad08e79ca9f93d3470a54a41c5"}, - {file = "mmh3-4.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d82eb4defa245e02bb0b0dc4f1e7ee284f8d212633389c91f7fba99ba993f0a2"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba245e94b8d54765e14c2d7b6214e832557e7856d5183bc522e17884cab2f45d"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb04e2feeabaad6231e89cd43b3d01a4403579aa792c9ab6fdeef45cc58d4ec0"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e3b1a27def545ce11e36158ba5d5390cdbc300cfe456a942cc89d649cf7e3b2"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce0ab79ff736d7044e5e9b3bfe73958a55f79a4ae672e6213e92492ad5e734d5"}, - {file = "mmh3-4.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b02268be6e0a8eeb8a924d7db85f28e47344f35c438c1e149878bb1c47b1cd3"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:deb887f5fcdaf57cf646b1e062d56b06ef2f23421c80885fce18b37143cba828"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99dd564e9e2b512eb117bd0cbf0f79a50c45d961c2a02402787d581cec5448d5"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:08373082dfaa38fe97aa78753d1efd21a1969e51079056ff552e687764eafdfe"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:54b9c6a2ea571b714e4fe28d3e4e2db37abfd03c787a58074ea21ee9a8fd1740"}, - {file = "mmh3-4.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a7b1edf24c69e3513f879722b97ca85e52f9032f24a52284746877f6a7304086"}, - {file = "mmh3-4.1.0-cp312-cp312-win32.whl", hash = "sha256:411da64b951f635e1e2284b71d81a5a83580cea24994b328f8910d40bed67276"}, - {file = "mmh3-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:bebc3ecb6ba18292e3d40c8712482b4477abd6981c2ebf0e60869bd90f8ac3a9"}, - {file = "mmh3-4.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:168473dd608ade6a8d2ba069600b35199a9af837d96177d3088ca91f2b3798e3"}, - {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:372f4b7e1dcde175507640679a2a8790185bb71f3640fc28a4690f73da986a3b"}, - {file = "mmh3-4.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:438584b97f6fe13e944faf590c90fc127682b57ae969f73334040d9fa1c7ffa5"}, - {file = "mmh3-4.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6e27931b232fc676675fac8641c6ec6b596daa64d82170e8597f5a5b8bdcd3b6"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:571a92bad859d7b0330e47cfd1850b76c39b615a8d8e7aa5853c1f971fd0c4b1"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a69d6afe3190fa08f9e3a58e5145549f71f1f3fff27bd0800313426929c7068"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afb127be0be946b7630220908dbea0cee0d9d3c583fa9114a07156f98566dc28"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:940d86522f36348ef1a494cbf7248ab3f4a1638b84b59e6c9e90408bd11ad729"}, - {file = "mmh3-4.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3dcccc4935686619a8e3d1f7b6e97e3bd89a4a796247930ee97d35ea1a39341"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01bb9b90d61854dfc2407c5e5192bfb47222d74f29d140cb2dd2a69f2353f7cc"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bcb1b8b951a2c0b0fb8a5426c62a22557e2ffc52539e0a7cc46eb667b5d606a9"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6477a05d5e5ab3168e82e8b106e316210ac954134f46ec529356607900aea82a"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:da5892287e5bea6977364b15712a2573c16d134bc5fdcdd4cf460006cf849278"}, - {file = "mmh3-4.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:99180d7fd2327a6fffbaff270f760576839dc6ee66d045fa3a450f3490fda7f5"}, - {file = "mmh3-4.1.0-cp38-cp38-win32.whl", hash = "sha256:9b0d4f3949913a9f9a8fb1bb4cc6ecd52879730aab5ff8c5a3d8f5b593594b73"}, - {file = "mmh3-4.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:598c352da1d945108aee0c3c3cfdd0e9b3edef74108f53b49d481d3990402169"}, - {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:475d6d1445dd080f18f0f766277e1237fa2914e5fe3307a3b2a3044f30892103"}, - {file = "mmh3-4.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5ca07c41e6a2880991431ac717c2a049056fff497651a76e26fc22224e8b5732"}, - {file = "mmh3-4.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ebe052fef4bbe30c0548d12ee46d09f1b69035ca5208a7075e55adfe091be44"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaefd42e85afb70f2b855a011f7b4d8a3c7e19c3f2681fa13118e4d8627378c5"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0ae43caae5a47afe1b63a1ae3f0986dde54b5fb2d6c29786adbfb8edc9edfb"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6218666f74c8c013c221e7f5f8a693ac9cf68e5ac9a03f2373b32d77c48904de"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac59294a536ba447b5037f62d8367d7d93b696f80671c2c45645fa9f1109413c"}, - {file = "mmh3-4.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:086844830fcd1e5c84fec7017ea1ee8491487cfc877847d96f86f68881569d2e"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e42b38fad664f56f77f6fbca22d08450f2464baa68acdbf24841bf900eb98e87"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d08b790a63a9a1cde3b5d7d733ed97d4eb884bfbc92f075a091652d6bfd7709a"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:73ea4cc55e8aea28c86799ecacebca09e5f86500414870a8abaedfcbaf74d288"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:f90938ff137130e47bcec8dc1f4ceb02f10178c766e2ef58a9f657ff1f62d124"}, - {file = "mmh3-4.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:aa1f13e94b8631c8cd53259250556edcf1de71738936b60febba95750d9632bd"}, - {file = "mmh3-4.1.0-cp39-cp39-win32.whl", hash = "sha256:a3b680b471c181490cf82da2142029edb4298e1bdfcb67c76922dedef789868d"}, - {file = "mmh3-4.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:fefef92e9c544a8dbc08f77a8d1b6d48006a750c4375bbcd5ff8199d761e263b"}, - {file = "mmh3-4.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:8e2c1f6a2b41723a4f82bd5a762a777836d29d664fc0095f17910bea0adfd4a6"}, - {file = "mmh3-4.1.0.tar.gz", hash = "sha256:a1cf25348b9acd229dda464a094d6170f47d2850a1fcb762a3b6172d2ce6ca4a"}, -] - -[package.extras] -test = ["mypy (>=1.0)", "pytest (>=7.0.0)"] - [[package]] name = "monotonic" version = "1.6" @@ -4922,22 +4772,6 @@ files = [ {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, ] -[[package]] -name = "oauthlib" -version = "3.2.2" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -optional = false -python-versions = ">=3.6" -files = [ - {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, - {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, -] - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - [[package]] name = "olefile" version = "0.46" @@ -4972,35 +4806,36 @@ full = ["XLMMacroDeobfuscator"] [[package]] name = "onnxruntime" -version = "1.16.3" +version = "1.17.0" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" files = [ - {file = "onnxruntime-1.16.3-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:3bc41f323ac77acfed190be8ffdc47a6a75e4beeb3473fbf55eeb075ccca8df2"}, - {file = "onnxruntime-1.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:212741b519ee61a4822c79c47147d63a8b0ffde25cd33988d3d7be9fbd51005d"}, - {file = "onnxruntime-1.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f91f5497fe3df4ceee2f9e66c6148d9bfeb320cd6a71df361c66c5b8bac985a"}, - {file = "onnxruntime-1.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b1fc269cabd27f129fb9058917d6fdc89b188c49ed8700f300b945c81f889"}, - {file = "onnxruntime-1.16.3-cp310-cp310-win32.whl", hash = "sha256:f36b56a593b49a3c430be008c2aea6658d91a3030115729609ec1d5ffbaab1b6"}, - {file = "onnxruntime-1.16.3-cp310-cp310-win_amd64.whl", hash = "sha256:3c467eaa3d2429c026b10c3d17b78b7f311f718ef9d2a0d6938e5c3c2611b0cf"}, - {file = "onnxruntime-1.16.3-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:a225bb683991001d111f75323d355b3590e75e16b5e0f07a0401e741a0143ea1"}, - {file = "onnxruntime-1.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9aded21fe3d898edd86be8aa2eb995aa375e800ad3dfe4be9f618a20b8ee3630"}, - {file = "onnxruntime-1.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00cccc37a5195c8fca5011b9690b349db435986bd508eb44c9fce432da9228a4"}, - {file = "onnxruntime-1.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e253e572021563226a86f1c024f8f70cdae28f2fb1cc8c3a9221e8b1ce37db5"}, - {file = "onnxruntime-1.16.3-cp311-cp311-win32.whl", hash = "sha256:a82a8f0b4c978d08f9f5c7a6019ae51151bced9fd91e5aaa0c20a9e4ac7a60b6"}, - {file = "onnxruntime-1.16.3-cp311-cp311-win_amd64.whl", hash = "sha256:78d81d9af457a1dc90db9a7da0d09f3ccb1288ea1236c6ab19f0ca61f3eee2d3"}, - {file = "onnxruntime-1.16.3-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:04ebcd29c20473596a1412e471524b2fb88d55e6301c40b98dd2407b5911595f"}, - {file = "onnxruntime-1.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9996bab0f202a6435ab867bc55598f15210d0b72794d5de83712b53d564084ae"}, - {file = "onnxruntime-1.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b8f5083f903408238883821dd8c775f8120cb4a604166dbdabe97f4715256d5"}, - {file = "onnxruntime-1.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c2dcf1b70f8434abb1116fe0975c00e740722aaf321997195ea3618cc00558e"}, - {file = "onnxruntime-1.16.3-cp38-cp38-win32.whl", hash = "sha256:d4a0151e1accd04da6711f6fd89024509602f82c65a754498e960b032359b02d"}, - {file = "onnxruntime-1.16.3-cp38-cp38-win_amd64.whl", hash = "sha256:e8aa5bba78afbd4d8a2654b14ec7462ff3ce4a6aad312a3c2d2c2b65009f2541"}, - {file = "onnxruntime-1.16.3-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:6829dc2a79d48c911fedaf4c0f01e03c86297d32718a3fdee7a282766dfd282a"}, - {file = "onnxruntime-1.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:76f876c53bfa912c6c242fc38213a6f13f47612d4360bc9d599bd23753e53161"}, - {file = "onnxruntime-1.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4137e5d443e2dccebe5e156a47f1d6d66f8077b03587c35f11ee0c7eda98b533"}, - {file = "onnxruntime-1.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c56695c1a343c7c008b647fff3df44da63741fbe7b6003ef576758640719be7b"}, - {file = "onnxruntime-1.16.3-cp39-cp39-win32.whl", hash = "sha256:985a029798744ce4743fcf8442240fed35c8e4d4d30ec7d0c2cdf1388cd44408"}, - {file = "onnxruntime-1.16.3-cp39-cp39-win_amd64.whl", hash = "sha256:28ff758b17ce3ca6bcad3d936ec53bd7f5482e7630a13f6dcae518eba8f71d85"}, + {file = "onnxruntime-1.17.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d2b22a25a94109cc983443116da8d9805ced0256eb215c5e6bc6dcbabefeab96"}, + {file = "onnxruntime-1.17.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4c87d83c6f58d1af2675fc99e3dc810f2dbdb844bcefd0c1b7573632661f6fc"}, + {file = "onnxruntime-1.17.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dba55723bf9b835e358f48c98a814b41692c393eb11f51e02ece0625c756b797"}, + {file = "onnxruntime-1.17.0-cp310-cp310-win32.whl", hash = "sha256:ee48422349cc500273beea7607e33c2237909f58468ae1d6cccfc4aecd158565"}, + {file = "onnxruntime-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f34cc46553359293854e38bdae2ab1be59543aad78a6317e7746d30e311110c3"}, + {file = "onnxruntime-1.17.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:16d26badd092c8c257fa57c458bb600d96dc15282c647ccad0ed7b2732e6c03b"}, + {file = "onnxruntime-1.17.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f1273bebcdb47ed932d076c85eb9488bc4768fcea16d5f2747ca692fad4f9d3"}, + {file = "onnxruntime-1.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cb60fd3c2c1acd684752eb9680e89ae223e9801a9b0e0dc7b28adabe45a2e380"}, + {file = "onnxruntime-1.17.0-cp311-cp311-win32.whl", hash = "sha256:4b038324586bc905299e435f7c00007e6242389c856b82fe9357fdc3b1ef2bdc"}, + {file = "onnxruntime-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:93d39b3fa1ee01f034f098e1c7769a811a21365b4883f05f96c14a2b60c6028b"}, + {file = "onnxruntime-1.17.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:90c0890e36f880281c6c698d9bc3de2afbeee2f76512725ec043665c25c67d21"}, + {file = "onnxruntime-1.17.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7466724e809a40e986b1637cba156ad9fc0d1952468bc00f79ef340bc0199552"}, + {file = "onnxruntime-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d47bee7557a8b99c8681b6882657a515a4199778d6d5e24e924d2aafcef55b0a"}, + {file = "onnxruntime-1.17.0-cp312-cp312-win32.whl", hash = "sha256:bb1bf1ee575c665b8bbc3813ab906e091a645a24ccc210be7932154b8260eca1"}, + {file = "onnxruntime-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:ac2f286da3494b29b4186ca193c7d4e6a2c1f770c4184c7192c5da142c3dec28"}, + {file = "onnxruntime-1.17.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1ec485643b93e0a3896c655eb2426decd63e18a278bb7ccebc133b340723624f"}, + {file = "onnxruntime-1.17.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83c35809cda898c5a11911c69ceac8a2ac3925911854c526f73bad884582f911"}, + {file = "onnxruntime-1.17.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fa464aa4d81df818375239e481887b656e261377d5b6b9a4692466f5f3261edc"}, + {file = "onnxruntime-1.17.0-cp38-cp38-win32.whl", hash = "sha256:b7b337cd0586f7836601623cbd30a443df9528ef23965860d11c753ceeb009f2"}, + {file = "onnxruntime-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:fbb9faaf51d01aa2c147ef52524d9326744c852116d8005b9041809a71838878"}, + {file = "onnxruntime-1.17.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:5a06ab84eaa350bf64b1d747b33ccf10da64221ed1f38f7287f15eccbec81603"}, + {file = "onnxruntime-1.17.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d3d11db2c8242766212a68d0b139745157da7ce53bd96ba349a5c65e5a02357"}, + {file = "onnxruntime-1.17.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5632077c3ab8b0cd4f74b0af9c4e924be012b1a7bcd7daa845763c6c6bf14b7d"}, + {file = "onnxruntime-1.17.0-cp39-cp39-win32.whl", hash = "sha256:61a12732cba869b3ad2d4e29ab6cb62c7a96f61b8c213f7fcb961ba412b70b37"}, + {file = "onnxruntime-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:461fa0fc7d9c392c352b6cccdedf44d818430f3d6eacd924bb804fdea2dcfd02"}, ] [package.dependencies] @@ -5034,171 +4869,6 @@ typing-extensions = ">=4.7,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -[[package]] -name = "opentelemetry-api" -version = "1.22.0" -description = "OpenTelemetry Python API" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_api-1.22.0-py3-none-any.whl", hash = "sha256:43621514301a7e9f5d06dd8013a1b450f30c2e9372b8e30aaeb4562abf2ce034"}, - {file = "opentelemetry_api-1.22.0.tar.gz", hash = "sha256:15ae4ca925ecf9cfdfb7a709250846fbb08072260fca08ade78056c502b86bed"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<7.0" - -[[package]] -name = "opentelemetry-exporter-otlp-proto-common" -version = "1.22.0" -description = "OpenTelemetry Protobuf encoding" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_exporter_otlp_proto_common-1.22.0-py3-none-any.whl", hash = "sha256:3f2538bec5312587f8676c332b3747f54c89fe6364803a807e217af4603201fa"}, - {file = "opentelemetry_exporter_otlp_proto_common-1.22.0.tar.gz", hash = "sha256:71ae2f81bc6d6fe408d06388826edc8933759b2ca3a97d24054507dc7cfce52d"}, -] - -[package.dependencies] -backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""} -opentelemetry-proto = "1.22.0" - -[[package]] -name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.22.0" -description = "OpenTelemetry Collector Protobuf over gRPC Exporter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_exporter_otlp_proto_grpc-1.22.0-py3-none-any.whl", hash = "sha256:b5bcadc129272004316a455e9081216d3380c1fc2231a928ea6a70aa90e173fb"}, - {file = "opentelemetry_exporter_otlp_proto_grpc-1.22.0.tar.gz", hash = "sha256:1e0e5aa4bbabc74942f06f268deffd94851d12a8dc30b02527472ef1729fe5b1"}, -] - -[package.dependencies] -backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""} -deprecated = ">=1.2.6" -googleapis-common-protos = ">=1.52,<2.0" -grpcio = ">=1.0.0,<2.0.0" -opentelemetry-api = ">=1.15,<2.0" -opentelemetry-exporter-otlp-proto-common = "1.22.0" -opentelemetry-proto = "1.22.0" -opentelemetry-sdk = ">=1.22.0,<1.23.0" - -[package.extras] -test = ["pytest-grpc"] - -[[package]] -name = "opentelemetry-instrumentation" -version = "0.43b0" -description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_instrumentation-0.43b0-py3-none-any.whl", hash = "sha256:0ff1334d7e359e27640e9d420024efeb73eacae464309c2e14ede7ba6c93967e"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.4,<2.0" -setuptools = ">=16.0" -wrapt = ">=1.0.0,<2.0.0" - -[[package]] -name = "opentelemetry-instrumentation-asgi" -version = "0.43b0" -description = "ASGI instrumentation for OpenTelemetry" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_instrumentation_asgi-0.43b0-py3-none-any.whl", hash = "sha256:1f593829fa039e9367820736fb063e92acd15c25b53d7bcb5d319971b8e93fd7"}, - {file = "opentelemetry_instrumentation_asgi-0.43b0.tar.gz", hash = "sha256:3f6f19333dca31ef696672e4e36cb1c2613c71dc7e847c11ff36a37e1130dadc"}, -] - -[package.dependencies] -asgiref = ">=3.0,<4.0" -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.43b0" -opentelemetry-semantic-conventions = "0.43b0" -opentelemetry-util-http = "0.43b0" - -[package.extras] -instruments = ["asgiref (>=3.0,<4.0)"] -test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-utils (==0.43b0)"] - -[[package]] -name = "opentelemetry-instrumentation-fastapi" -version = "0.43b0" -description = "OpenTelemetry FastAPI Instrumentation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_instrumentation_fastapi-0.43b0-py3-none-any.whl", hash = "sha256:b79c044df68a52e07b35fa12a424e7cc0dd27ff0a171c5fdcc41dea9de8fc938"}, - {file = "opentelemetry_instrumentation_fastapi-0.43b0.tar.gz", hash = "sha256:2afaaf470622e1a2732182c68f6d2431ffe5e026a7edacd0f83605632b66347f"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.43b0" -opentelemetry-instrumentation-asgi = "0.43b0" -opentelemetry-semantic-conventions = "0.43b0" -opentelemetry-util-http = "0.43b0" - -[package.extras] -instruments = ["fastapi (>=0.58,<1.0)"] -test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils (==0.43b0)", "requests (>=2.23,<3.0)"] - -[[package]] -name = "opentelemetry-proto" -version = "1.22.0" -description = "OpenTelemetry Python Proto" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_proto-1.22.0-py3-none-any.whl", hash = "sha256:ce7188d22c75b6d0fe53e7fb58501613d0feade5139538e79dedd9420610fa0c"}, - {file = "opentelemetry_proto-1.22.0.tar.gz", hash = "sha256:9ec29169286029f17ca34ec1f3455802ffb90131642d2f545ece9a63e8f69003"}, -] - -[package.dependencies] -protobuf = ">=3.19,<5.0" - -[[package]] -name = "opentelemetry-sdk" -version = "1.22.0" -description = "OpenTelemetry Python SDK" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_sdk-1.22.0-py3-none-any.whl", hash = "sha256:a730555713d7c8931657612a88a141e3a4fe6eb5523d9e2d5a8b1e673d76efa6"}, - {file = "opentelemetry_sdk-1.22.0.tar.gz", hash = "sha256:45267ac1f38a431fc2eb5d6e0c0d83afc0b78de57ac345488aa58c28c17991d0"}, -] - -[package.dependencies] -opentelemetry-api = "1.22.0" -opentelemetry-semantic-conventions = "0.43b0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.43b0" -description = "OpenTelemetry Semantic Conventions" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_semantic_conventions-0.43b0-py3-none-any.whl", hash = "sha256:291284d7c1bf15fdaddf309b3bd6d3b7ce12a253cec6d27144439819a15d8445"}, - {file = "opentelemetry_semantic_conventions-0.43b0.tar.gz", hash = "sha256:b9576fb890df479626fa624e88dde42d3d60b8b6c8ae1152ad157a8b97358635"}, -] - -[[package]] -name = "opentelemetry-util-http" -version = "0.43b0" -description = "Web util for OpenTelemetry" -optional = false -python-versions = ">=3.7" -files = [ - {file = "opentelemetry_util_http-0.43b0-py3-none-any.whl", hash = "sha256:f25a820784b030f6cb86b3d76e5676c769b75ed3f55a210bcdae0a5e175ebadb"}, - {file = "opentelemetry_util_http-0.43b0.tar.gz", hash = "sha256:3ff6ab361dbe99fc81200d625603c0fb890c055c6e416a3e6d661ddf47a6c7f7"}, -] - [[package]] name = "orjson" version = "3.9.3" @@ -5564,18 +5234,18 @@ grpc = ["googleapis-common-protos (>=1.53.0)", "grpc-gateway-protoc-gen-openapiv [[package]] name = "platformdirs" -version = "4.1.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" @@ -5698,22 +5368,33 @@ testing = ["google-api-core[grpc] (>=1.31.5)"] [[package]] name = "protobuf" -version = "4.25.2" -description = "" +version = "3.20.3" +description = "Protocol Buffers" optional = false -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, - {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, - {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, - {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, - {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, - {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, - {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, - {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, - {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, - {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, - {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, + {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, + {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, + {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, + {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, + {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, + {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, + {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, + {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, + {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, + {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, + {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, + {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, + {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, + {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, + {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, + {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, + {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, + {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, + {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, ] [[package]] @@ -6444,20 +6125,6 @@ files = [ {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, ] -[[package]] -name = "pyproject-hooks" -version = "1.0.0" -description = "Wrappers to call pyproject.toml-based build backend hooks." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyproject_hooks-1.0.0-py3-none-any.whl", hash = "sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8"}, - {file = "pyproject_hooks-1.0.0.tar.gz", hash = "sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"}, -] - -[package.dependencies] -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - [[package]] name = "pyreadline3" version = "3.4.1" @@ -6899,13 +6566,13 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "qdrant-client" -version = "1.7.1" +version = "1.7.2" description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.8" files = [ - {file = "qdrant_client-1.7.1-py3-none-any.whl", hash = "sha256:b6b52007d7dce339007f6fa676a611fbc61609d374aa00d8596b62ea45d831d7"}, - {file = "qdrant_client-1.7.1.tar.gz", hash = "sha256:7e3660b540e5bddda555a1638dd7905df9963fefe2061712fc5f48bfd78d734d"}, + {file = "qdrant_client-1.7.2-py3-none-any.whl", hash = "sha256:d00cf0b7b7d6f06847c9bb0126b234151f78f75caf0b920ad976487808bb71ce"}, + {file = "qdrant_client-1.7.2.tar.gz", hash = "sha256:ec8286cd3a6556d3f033d3b687225af1e715d47767ee27f119aee3c8354c0e07"}, ] [package.dependencies] @@ -7216,24 +6883,6 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "requests-oauthlib" -version = "1.3.1" -description = "OAuthlib authentication support for Requests." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, - {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, -] - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - [[package]] name = "rich" version = "13.7.0" @@ -9031,39 +8680,22 @@ files = [ [[package]] name = "weaviate-client" -version = "4.4b6" +version = "3.26.2" description = "A python native Weaviate client" optional = false python-versions = ">=3.8" files = [ - {file = "weaviate-client-4.4b6.tar.gz", hash = "sha256:40b4ba7f3300ba537566697ed806b34cefb559285acbd4f0c2602dc71e5794e3"}, - {file = "weaviate_client-4.4b6-py3-none-any.whl", hash = "sha256:abb6140071ae83c4987176ae928328ad367eedccf7f2d06cb733d12a50ab445e"}, + {file = "weaviate-client-3.26.2.tar.gz", hash = "sha256:63ec70839b64909810a64aa7b3e5b85088462e93c7e2ed3c32ebefb702f36723"}, + {file = "weaviate_client-3.26.2-py3-none-any.whl", hash = "sha256:ca43bfb9c06b8ae3fd938dc9158acd93d4cbf4622192e173333e1ff63cf97164"}, ] [package.dependencies] authlib = ">=1.2.1,<2.0.0" -grpcio = ">=1.57.0,<2.0.0" -grpcio-health-checking = ">=1.57.0,<2.0.0" -grpcio-tools = ">=1.57.0,<2.0.0" -pydantic = ">=2.1.1,<3.0.0" requests = ">=2.30.0,<3.0.0" validators = ">=0.21.2,<1.0.0" -[[package]] -name = "websocket-client" -version = "1.7.0" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.8" -files = [ - {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, - {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, -] - [package.extras] -docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] +grpc = ["grpcio (>=1.57.0,<2.0.0)", "grpcio-tools (>=1.57.0,<2.0.0)"] [[package]] name = "websockets" @@ -9484,4 +9116,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.11" -content-hash = "c6027e40345267e1d1c3100267db82df68931ebc1c64f940efdbfa7db46ba0ae" +content-hash = "d147aff39506a7f2ca9b8774a8c4340f9221bd9037ef1c484c37840247ff89a4" diff --git a/pyproject.toml b/pyproject.toml index cd0831e44..30a0c9dee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langflow" -version = "0.6.5a12" +version = "0.6.5a13" description = "A Python package with a built-in web application" authors = ["Logspace "] maintainers = [ @@ -25,8 +25,6 @@ documentation = "https://docs.langflow.org" langflow = "langflow.__main__:main" [tool.poetry.dependencies] - - python = ">=3.9,<3.11" fastapi = "^0.108.0" uvicorn = "^0.25.0" @@ -35,9 +33,9 @@ google-search-results = "^2.4.1" google-api-python-client = "^2.79.0" typer = "^0.9.0" gunicorn = "^21.2.0" -langchain = "~0.0.345" -openai = "^1.6.1" -duckdb = "*" +langchain = "~0.1.0" +openai = "^1.10.0" +duckdb = "^0.9.2" pandas = "2.0.3" chromadb = "^0.4.0" huggingface-hub = { version = "^0.19.0", extras = ["inference"] } @@ -56,7 +54,7 @@ tiktoken = "~0.5.0" wikipedia = "^1.4.0" qdrant-client = "^1.7.0" websockets = "^10.3" -weaviate-client = { version = "^4.4b6", allow-prereleases = true } +weaviate-client = "*" jina = "*" sentence-transformers = { version = "^2.2.2", optional = true } ctransformers = { version = "^0.2.10", optional = true } @@ -64,7 +62,7 @@ cohere = "^4.39.0" python-multipart = "^0.0.6" sqlmodel = "^0.0.14" faiss-cpu = "^1.7.4" -anthropic = "^0.8.0" +anthropic = "^0.13.0" orjson = "3.9.3" multiprocess = "^0.70.14" cachetools = "^5.3.1" @@ -99,7 +97,7 @@ markupsafe = "^2.1.3" extract-msg = "^0.45.0" # jq is not available for windows jq = { version = "^1.6.0", markers = "sys_platform != 'win32'" } -boto3 = "^1.28.63" +boto3 = "^1.34.0" numexpr = "^2.8.6" qianfan = "0.2.0" pgvector = "^0.2.3" @@ -108,12 +106,13 @@ langchain-google-genai = "^0.0.2" elasticsearch = "^8.11.1" pytube = "^15.0.0" llama-index = "^0.9.24" +langchain-openai = "^0.0.2" [tool.poetry.group.dev.dependencies] pytest-asyncio = "^0.23.1" types-redis = "^4.6.0.5" ipykernel = "^6.27.0" -mypy = "^1.7.1" +mypy = "^1.8.0" ruff = "^0.1.5" httpx = "*" pytest = "^7.4.2" @@ -155,7 +154,8 @@ exclude = ["src/backend/langflow/alembic/*"] line-length = 120 [tool.mypy] -plugins = "pydantic.mypy" +plugins = ["pydantic.mypy"] +follow_imports = "silent" [build-system] requires = ["poetry-core"] diff --git a/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py b/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py index e24d5a72f..8a2e90abc 100644 --- a/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py +++ b/src/backend/langflow/alembic/versions/b2fa308044b5_add_unique_constraints.py @@ -28,7 +28,7 @@ def upgrade() -> None: batch_op.add_column(sa.Column('folder', sqlmodel.sql.sqltypes.AutoString(), nullable=True)) batch_op.add_column(sa.Column('user_id', sqlmodel.sql.sqltypes.GUID(), nullable=True)) batch_op.create_index(batch_op.f('ix_flow_user_id'), ['user_id'], unique=False) - batch_op.create_foreign_key(None, 'user', ['user_id'], ['id']) + batch_op.create_foreign_key('fk_flow_user_id_user', 'user', ['user_id'], ['id']) except Exception: pass # ### end Alembic commands ### @@ -38,7 +38,7 @@ def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### try: with op.batch_alter_table('flow', schema=None) as batch_op: - batch_op.drop_constraint(None, type_='foreignkey') + batch_op.drop_constraint('fk_flow_user_id_user', type_='foreignkey') batch_op.drop_index(batch_op.f('ix_flow_user_id')) batch_op.drop_column('user_id') batch_op.drop_column('folder') diff --git a/src/backend/langflow/components/agents/CSVAgent.py b/src/backend/langflow/components/agents/CSVAgent.py new file mode 100644 index 000000000..b54e5d90d --- /dev/null +++ b/src/backend/langflow/components/agents/CSVAgent.py @@ -0,0 +1,23 @@ +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, AgentExecutor +from langchain_experimental.agents.agent_toolkits.csv.base import create_csv_agent + + +class CSVAgentComponent(CustomComponent): + display_name = "CSVAgent" + description = "Construct a CSV agent from a CSV and tools." + documentation = "https://python.langchain.com/docs/modules/agents/toolkits/csv" + + def build_config(self): + return { + "llm": {"display_name": "LLM", "type": BaseLanguageModel}, + "path": {"display_name": "Path", "field_type": "file", "suffixes": [".csv"], "file_types": [".csv"]}, + } + + def build( + self, + llm: BaseLanguageModel, + path: str, + ) -> AgentExecutor: + # Instantiate and return the CSV agent class with the provided llm and path + return create_csv_agent(llm=llm, path=path) diff --git a/src/backend/langflow/components/agents/JsonAgent.py b/src/backend/langflow/components/agents/JsonAgent.py new file mode 100644 index 000000000..0197b9210 --- /dev/null +++ b/src/backend/langflow/components/agents/JsonAgent.py @@ -0,0 +1,24 @@ +from langflow import CustomComponent +from langchain.agents import AgentExecutor, create_json_agent +from langflow.field_typing import ( + BaseLanguageModel, +) +from langchain_community.agent_toolkits.json.toolkit import JsonToolkit + + +class JsonAgentComponent(CustomComponent): + display_name = "JsonAgent" + description = "Construct a json agent from an LLM and tools." + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + "toolkit": {"display_name": "Toolkit"}, + } + + def build( + self, + llm: BaseLanguageModel, + toolkit: JsonToolkit, + ) -> AgentExecutor: + return create_json_agent(llm=llm, toolkit=toolkit) diff --git a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py index 66ff0f275..1a06e25fb 100644 --- a/src/backend/langflow/components/agents/OpenAIConversationalAgent.py +++ b/src/backend/langflow/components/agents/OpenAIConversationalAgent.py @@ -3,7 +3,7 @@ from typing import List, Optional from langchain.agents.agent import AgentExecutor from langchain.agents.agent_toolkits.conversational_retrieval.openai_functions import _get_default_system_message from langchain.agents.openai_functions_agent.base import OpenAIFunctionsAgent -from langchain.chat_models import ChatOpenAI +from langchain_community.chat_models import ChatOpenAI from langchain.memory.token_buffer import ConversationTokenBufferMemory from langchain.prompts import SystemMessagePromptTemplate from langchain.prompts.chat import MessagesPlaceholder diff --git a/src/backend/langflow/components/agents/SQLAgent.py b/src/backend/langflow/components/agents/SQLAgent.py new file mode 100644 index 000000000..42b1b48f3 --- /dev/null +++ b/src/backend/langflow/components/agents/SQLAgent.py @@ -0,0 +1,29 @@ +from langflow import CustomComponent +from typing import Union, Callable +from langchain.agents import AgentExecutor +from langflow.field_typing import BaseLanguageModel +from langchain_community.agent_toolkits.sql.base import create_sql_agent +from langchain.sql_database import SQLDatabase +from langchain_community.agent_toolkits import SQLDatabaseToolkit + + +class SQLAgentComponent(CustomComponent): + display_name = "SQLAgent" + description = "Construct an SQL agent from an LLM and tools." + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + "database_uri": {"display_name": "Database URI"}, + "verbose": {"display_name": "Verbose", "value": False, "advanced": True}, + } + + def build( + self, + llm: BaseLanguageModel, + database_uri: str, + verbose: bool = False, + ) -> Union[AgentExecutor, Callable]: + db = SQLDatabase.from_uri(database_uri) + toolkit = SQLDatabaseToolkit(db=db, llm=llm) + return create_sql_agent(llm=llm, toolkit=toolkit) diff --git a/src/backend/langflow/components/agents/VectorStoreAgent.py b/src/backend/langflow/components/agents/VectorStoreAgent.py new file mode 100644 index 000000000..b70ea4d59 --- /dev/null +++ b/src/backend/langflow/components/agents/VectorStoreAgent.py @@ -0,0 +1,23 @@ +from langflow import CustomComponent +from langchain.agents import AgentExecutor, create_vectorstore_agent +from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreToolkit +from typing import Union, Callable +from langflow.field_typing import BaseLanguageModel + + +class VectorStoreAgentComponent(CustomComponent): + display_name = "VectorStoreAgent" + description = "Construct an agent from a Vector Store." + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + "vector_store_toolkit": {"display_name": "Vector Store Info"}, + } + + def build( + self, + llm: BaseLanguageModel, + vector_store_toolkit: VectorStoreToolkit, + ) -> Union[AgentExecutor, Callable]: + return create_vectorstore_agent(llm=llm, toolkit=vector_store_toolkit) diff --git a/src/backend/langflow/components/agents/VectorStoreRouterAgent.py b/src/backend/langflow/components/agents/VectorStoreRouterAgent.py new file mode 100644 index 000000000..3174d9513 --- /dev/null +++ b/src/backend/langflow/components/agents/VectorStoreRouterAgent.py @@ -0,0 +1,19 @@ +from langflow import CustomComponent +from langchain_core.language_models.base import BaseLanguageModel +from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreRouterToolkit +from langchain.agents import create_vectorstore_router_agent +from typing import Callable + + +class VectorStoreRouterAgentComponent(CustomComponent): + display_name = "VectorStoreRouterAgent" + description = "Construct an agent from a Vector Store Router." + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + "vectorstoreroutertoolkit": {"display_name": "Vector Store Router Toolkit"}, + } + + def build(self, llm: BaseLanguageModel, vectorstoreroutertoolkit: VectorStoreRouterToolkit) -> Callable: + return create_vectorstore_router_agent(llm=llm, toolkit=vectorstoreroutertoolkit) diff --git a/src/backend/langflow/components/chains/LLMChain.py b/src/backend/langflow/components/chains/LLMChain.py index 8a62a8c55..8596dd0c9 100644 --- a/src/backend/langflow/components/chains/LLMChain.py +++ b/src/backend/langflow/components/chains/LLMChain.py @@ -1,7 +1,6 @@ from typing import Callable, Optional, Union from langchain.chains import LLMChain - from langflow import CustomComponent from langflow.field_typing import BaseLanguageModel, BaseMemory, BasePromptTemplate, Chain, Text diff --git a/src/backend/langflow/components/chains/LLMCheckerChain.py b/src/backend/langflow/components/chains/LLMCheckerChain.py new file mode 100644 index 000000000..cf5effac8 --- /dev/null +++ b/src/backend/langflow/components/chains/LLMCheckerChain.py @@ -0,0 +1,24 @@ +from langflow import CustomComponent +from langchain.chains import LLMCheckerChain +from typing import Union, Callable +from langflow.field_typing import ( + BaseLanguageModel, + Chain, +) + + +class LLMCheckerChainComponent(CustomComponent): + display_name = "LLMCheckerChain" + description = "" + documentation = "https://python.langchain.com/docs/modules/chains/additional/llm_checker" + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + } + + def build( + self, + llm: BaseLanguageModel, + ) -> Union[Chain, Callable]: + return LLMCheckerChain(llm=llm) diff --git a/src/backend/langflow/components/chains/LLMMathChain.py b/src/backend/langflow/components/chains/LLMMathChain.py new file mode 100644 index 000000000..28f430e6d --- /dev/null +++ b/src/backend/langflow/components/chains/LLMMathChain.py @@ -0,0 +1,31 @@ +from typing import Callable, Optional, Union + +from langchain.chains import LLMChain, LLMMathChain + +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, BaseMemory, Chain + + +class LLMMathChainComponent(CustomComponent): + display_name = "LLMMathChain" + description = "Chain that interprets a prompt and executes python code to do math." + documentation = "https://python.langchain.com/docs/modules/chains/additional/llm_math" + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + "llm_chain": {"display_name": "LLM Chain"}, + "memory": {"display_name": "Memory"}, + "input_key": {"display_name": "Input Key"}, + "output_key": {"display_name": "Output Key"}, + } + + def build( + self, + llm: BaseLanguageModel, + llm_chain: LLMChain, + input_key: str = "question", + output_key: str = "answer", + memory: Optional[BaseMemory] = None, + ) -> Union[LLMMathChain, Callable, Chain]: + return LLMMathChain(llm=llm, llm_chain=llm_chain, input_key=input_key, output_key=output_key, memory=memory) diff --git a/src/backend/langflow/components/chains/RetrievalQA.py b/src/backend/langflow/components/chains/RetrievalQA.py new file mode 100644 index 000000000..5f1232443 --- /dev/null +++ b/src/backend/langflow/components/chains/RetrievalQA.py @@ -0,0 +1,39 @@ +from typing import Callable, Optional, Union + +from langchain.chains.combine_documents.base import BaseCombineDocumentsChain +from langchain.chains.retrieval_qa.base import BaseRetrievalQA, RetrievalQA +from langflow import CustomComponent +from langflow.field_typing import BaseMemory, BaseRetriever + + +class RetrievalQAComponent(CustomComponent): + display_name = "RetrievalQA" + description = "Chain for question-answering against an index." + + def build_config(self): + return { + "combine_documents_chain": {"display_name": "Combine Documents Chain"}, + "retriever": {"display_name": "Retriever"}, + "memory": {"display_name": "Memory", "required": False}, + "input_key": {"display_name": "Input Key", "advanced": True}, + "output_key": {"display_name": "Output Key", "advanced": True}, + "return_source_documents": {"display_name": "Return Source Documents"}, + } + + def build( + self, + combine_documents_chain: BaseCombineDocumentsChain, + retriever: BaseRetriever, + memory: Optional[BaseMemory] = None, + input_key: str = "query", + output_key: str = "result", + return_source_documents: bool = True, + ) -> Union[BaseRetrievalQA, Callable]: + return RetrievalQA( + combine_documents_chain=combine_documents_chain, + retriever=retriever, + memory=memory, + input_key=input_key, + output_key=output_key, + return_source_documents=return_source_documents, + ) diff --git a/src/backend/langflow/components/chains/RetrievalQAWithSourcesChain.py b/src/backend/langflow/components/chains/RetrievalQAWithSourcesChain.py new file mode 100644 index 000000000..3c46cd8bd --- /dev/null +++ b/src/backend/langflow/components/chains/RetrievalQAWithSourcesChain.py @@ -0,0 +1,42 @@ +from typing import Optional + +from langchain.chains import RetrievalQAWithSourcesChain +from langchain.chains.qa_with_sources.base import BaseQAWithSourcesChain +from langchain.chains.combine_documents.base import BaseCombineDocumentsChain + +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, BaseMemory, BaseRetriever + + +class RetrievalQAWithSourcesChainComponent(CustomComponent): + display_name = "RetrievalQAWithSourcesChain" + description = "Question-answering with sources over an index." + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + "chain_type": { + "display_name": "Chain Type", + "options": ["stuff", "map_reduce", "map_rerank", "refine"], + }, + "memory": {"display_name": "Memory"}, + "return_source_documents": {"display_name": "Return Source Documents"}, + } + + def build( + self, + retriever: BaseRetriever, + llm: BaseLanguageModel, + combine_documents_chain: BaseCombineDocumentsChain, + chain_type: str, + memory: Optional[BaseMemory] = None, + return_source_documents: Optional[bool] = True, + ) -> BaseQAWithSourcesChain: + return RetrievalQAWithSourcesChain.from_chain_type( + llm=llm, + chain_type=chain_type, + combine_documents_chain=combine_documents_chain, + memory=memory, + return_source_documents=return_source_documents, + retriever=retriever, + ) diff --git a/src/backend/langflow/components/chains/SQLDatabaseChain.py b/src/backend/langflow/components/chains/SQLDatabaseChain.py new file mode 100644 index 000000000..56bd433ba --- /dev/null +++ b/src/backend/langflow/components/chains/SQLDatabaseChain.py @@ -0,0 +1,25 @@ +from langflow import CustomComponent +from typing import Callable, Union +from langflow.field_typing import BasePromptTemplate, BaseLanguageModel, Chain +from langchain_community.utilities.sql_database import SQLDatabase +from langchain_experimental.sql.base import SQLDatabaseChain + + +class SQLDatabaseChainComponent(CustomComponent): + display_name = "SQLDatabaseChain" + description = "" + + def build_config(self): + return { + "db": {"display_name": "Database"}, + "llm": {"display_name": "LLM"}, + "prompt": {"display_name": "Prompt"}, + } + + def build( + self, + db: SQLDatabase, + llm: BaseLanguageModel, + prompt: BasePromptTemplate, + ) -> Union[Chain, Callable, SQLDatabaseChain]: + return SQLDatabaseChain.from_llm(llm=llm, db=db, prompt=prompt) diff --git a/src/backend/langflow/components/documentloaders/DirectoryLoader.py b/src/backend/langflow/components/documentloaders/DirectoryLoader.py new file mode 100644 index 000000000..0b214dd34 --- /dev/null +++ b/src/backend/langflow/components/documentloaders/DirectoryLoader.py @@ -0,0 +1,42 @@ +from langflow import CustomComponent +from langchain.docstore.document import Document +from typing import Optional, Dict, Any + + +class DirectoryLoaderComponent(CustomComponent): + display_name = "DirectoryLoader" + description = "Load from a directory." + + def build_config(self) -> Dict[str, Any]: + return { + "glob": {"display_name": "Glob Pattern", "value": "**/*.txt"}, + "load_hidden": {"display_name": "Load Hidden Files", "value": False, "advanced": True}, + "max_concurrency": {"display_name": "Max Concurrency", "value": 10, "advanced": True}, + "metadata": {"display_name": "Metadata", "value": {}}, + "path": {"display_name": "Local Directory"}, + "recursive": {"display_name": "Recursive", "value": True, "advanced": True}, + "silent_errors": {"display_name": "Silent Errors", "value": False, "advanced": True}, + "use_multithreading": {"display_name": "Use Multithreading", "value": True, "advanced": True}, + } + + def build( + self, + glob: str, + path: str, + load_hidden: Optional[bool] = False, + max_concurrency: Optional[int] = 10, + metadata: Optional[dict] = {}, + recursive: Optional[bool] = True, + silent_errors: Optional[bool] = False, + use_multithreading: Optional[bool] = True, + ) -> Document: + return Document( + glob=glob, + path=path, + load_hidden=load_hidden, + max_concurrency=max_concurrency, + metadata=metadata, + recursive=recursive, + silent_errors=silent_errors, + use_multithreading=use_multithreading, + ) diff --git a/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py b/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py index e4fdd8738..09b03e17b 100644 --- a/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py +++ b/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py @@ -1,7 +1,8 @@ -from langflow import CustomComponent from langchain.embeddings.base import Embeddings from langchain_community.embeddings import AzureOpenAIEmbeddings +from langflow import CustomComponent + class AzureOpenAIEmbeddingsComponent(CustomComponent): display_name: str = "AzureOpenAIEmbeddings" @@ -53,9 +54,9 @@ class AzureOpenAIEmbeddingsComponent(CustomComponent): try: embeddings = AzureOpenAIEmbeddings( azure_endpoint=azure_endpoint, - deployment=azure_deployment, - openai_api_version=api_version, - openai_api_key=api_key, + azure_deployment=azure_deployment, + api_version=api_version, + api_key=api_key, ) except Exception as e: diff --git a/src/backend/langflow/components/embeddings/CohereEmbeddings.py b/src/backend/langflow/components/embeddings/CohereEmbeddings.py new file mode 100644 index 000000000..049525b39 --- /dev/null +++ b/src/backend/langflow/components/embeddings/CohereEmbeddings.py @@ -0,0 +1,36 @@ +from typing import Optional + +from langchain_community.embeddings.cohere import CohereEmbeddings +from langflow import CustomComponent + + +class CohereEmbeddingsComponent(CustomComponent): + display_name = "CohereEmbeddings" + description = "Cohere embedding models." + + def build_config(self): + return { + "cohere_api_key": {"display_name": "Cohere API Key", "password": True}, + "model": {"display_name": "Model", "default": "embed-english-v2.0", "advanced": True}, + "truncate": {"display_name": "Truncate", "advanced": True}, + "max_retries": {"display_name": "Max Retries", "advanced": True}, + "user_agent": {"display_name": "User Agent", "advanced": True}, + } + + def build( + self, + request_timeout: Optional[float] = None, + cohere_api_key: str = "", + max_retries: Optional[int] = None, + model: str = "embed-english-v2.0", + truncate: Optional[str] = None, + user_agent: str = "langchain", + ) -> CohereEmbeddings: + return CohereEmbeddings( # type: ignore + max_retries=max_retries, + user_agent=user_agent, + request_timeout=request_timeout, + cohere_api_key=cohere_api_key, + model=model, + truncate=truncate, + ) diff --git a/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py b/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py new file mode 100644 index 000000000..6f3540358 --- /dev/null +++ b/src/backend/langflow/components/embeddings/HuggingFaceEmbeddings.py @@ -0,0 +1,36 @@ +from langflow import CustomComponent +from typing import Optional, Dict +from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings + + +class HuggingFaceEmbeddingsComponent(CustomComponent): + display_name = "HuggingFaceEmbeddings" + description = "HuggingFace sentence_transformers embedding models." + documentation = ( + "https://python.langchain.com/docs/modules/data_connection/text_embedding/integrations/sentence_transformers" + ) + + def build_config(self): + return { + "cache_folder": {"display_name": "Cache Folder", "advanced": True}, + "encode_kwargs": {"display_name": "Encode Kwargs", "advanced": True, "field_type": "dict"}, + "model_kwargs": {"display_name": "Model Kwargs", "field_type": "dict", "advanced": True}, + "model_name": {"display_name": "Model Name"}, + "multi_process": {"display_name": "Multi Process", "advanced": True}, + } + + def build( + self, + cache_folder: Optional[str] = None, + encode_kwargs: Optional[Dict] = {}, + model_kwargs: Optional[Dict] = {}, + model_name: str = "sentence-transformers/all-mpnet-base-v2", + multi_process: bool = False, + ) -> HuggingFaceEmbeddings: + return HuggingFaceEmbeddings( + cache_folder=cache_folder, + encode_kwargs=encode_kwargs, + model_kwargs=model_kwargs, + model_name=model_name, + multi_process=multi_process, + ) diff --git a/src/backend/langflow/components/embeddings/OpenAIEmbeddings.py b/src/backend/langflow/components/embeddings/OpenAIEmbeddings.py new file mode 100644 index 000000000..555d45570 --- /dev/null +++ b/src/backend/langflow/components/embeddings/OpenAIEmbeddings.py @@ -0,0 +1,117 @@ +from typing import Any, Callable, Dict, List, Optional, Union + +from langchain_openai.embeddings.base import OpenAIEmbeddings + +from langflow import CustomComponent +from langflow.field_typing import NestedDict + + +class OpenAIEmbeddingsComponent(CustomComponent): + display_name = "OpenAIEmbeddings" + description = "OpenAI embedding models" + + def build_config(self): + return { + "allowed_special": { + "display_name": "Allowed Special", + "advanced": True, + "field_type": "str", + "is_list": True, + }, + "default_headers": { + "display_name": "Default Headers", + "advanced": True, + "field_type": "dict", + }, + "default_query": { + "display_name": "Default Query", + "advanced": True, + "field_type": "NestedDict", + }, + "disallowed_special": { + "display_name": "Disallowed Special", + "advanced": True, + "field_type": "str", + "is_list": True, + }, + "chunk_size": {"display_name": "Chunk Size", "advanced": True}, + "client": {"display_name": "Client", "advanced": True}, + "deployment": {"display_name": "Deployment", "advanced": True}, + "embedding_ctx_length": { + "display_name": "Embedding Context Length", + "advanced": True, + }, + "max_retries": {"display_name": "Max Retries", "advanced": True}, + "model": {"display_name": "Model", "advanced": True}, + "model_kwargs": {"display_name": "Model Kwargs", "advanced": True}, + "openai_api_base": {"display_name": "OpenAI API Base", "password": True, "advanced": True}, + "openai_api_key": {"display_name": "OpenAI API Key", "password": True}, + "openai_api_type": {"display_name": "OpenAI API Type", "advanced": True, "password": True}, + "openai_api_version": { + "display_name": "OpenAI API Version", + "advanced": True, + }, + "openai_organization": { + "display_name": "OpenAI Organization", + "advanced": True, + }, + "openai_proxy": {"display_name": "OpenAI Proxy", "advanced": True}, + "request_timeout": {"display_name": "Request Timeout", "advanced": True}, + "show_progress_bar": { + "display_name": "Show Progress Bar", + "advanced": True, + }, + "skip_empty": {"display_name": "Skip Empty", "advanced": True}, + "tiktoken_model_name": {"display_name": "TikToken Model Name"}, + "tikToken_enable": {"display_name": "TikToken Enable"}, + } + + def build( + self, + default_headers: Optional[Dict[str, str]] = None, + default_query: Optional[NestedDict] = {}, + allowed_special: List[str] = [], + disallowed_special: List[str] = ["all"], + chunk_size: int = 1000, + client: Optional[Any] = None, + deployment: str = "text-embedding-ada-002", + embedding_ctx_length: int = 8191, + max_retries: int = 6, + model: str = "text-embedding-ada-002", + model_kwargs: NestedDict = {}, + openai_api_base: Optional[str] = None, + openai_api_key: Optional[str] = "", + openai_api_type: Optional[str] = None, + openai_api_version: Optional[str] = None, + openai_organization: Optional[str] = None, + openai_proxy: Optional[str] = None, + request_timeout: Optional[float] = None, + show_progress_bar: bool = False, + skip_empty: bool = False, + tikToken_enable: bool = True, + tiktoken_model_name: Optional[str] = None, + ) -> Union[OpenAIEmbeddings, Callable]: + return OpenAIEmbeddings( + tiktoken_enabled=tikToken_enable, + default_headers=default_headers, + default_query=default_query, + allowed_special=set(allowed_special), + disallowed_special=set(disallowed_special), + chunk_size=chunk_size, + client=client, + deployment=deployment, + embedding_ctx_length=embedding_ctx_length, + max_retries=max_retries, + model=model, + model_kwargs=model_kwargs, + base_url=openai_api_base, + api_key=openai_api_key, + openai_api_type=openai_api_type, + api_version=openai_api_version, + organization=openai_organization, + openai_proxy=openai_proxy, + timeout=request_timeout, + show_progress_bar=show_progress_bar, + skip_empty=skip_empty, + tiktoken_model_name=tiktoken_model_name, + ) diff --git a/src/backend/langflow/components/embeddings/VertexAIEmbeddings.py b/src/backend/langflow/components/embeddings/VertexAIEmbeddings.py new file mode 100644 index 000000000..053fd6c7f --- /dev/null +++ b/src/backend/langflow/components/embeddings/VertexAIEmbeddings.py @@ -0,0 +1,60 @@ +from langflow import CustomComponent +from langchain.embeddings import VertexAIEmbeddings +from typing import Optional, List + + +class VertexAIEmbeddingsComponent(CustomComponent): + display_name = "VertexAIEmbeddings" + description = "Google Cloud VertexAI embedding models." + + def build_config(self): + return { + "credentials": {"display_name": "Credentials", "value": "", "file_types": [".json"], "field_type": "file"}, + "instance": {"display_name": "instance", "advanced": True, "field_type": "dict"}, + "location": {"display_name": "Location", "value": "us-central1", "advanced": True}, + "max_output_tokens": {"display_name": "Max Output Tokens", "value": 128}, + "max_retries": {"display_name": "Max Retries", "value": 6, "advanced": True}, + "model_name": {"display_name": "Model Name", "value": "textembedding-gecko"}, + "n": {"display_name": "N", "value": 1, "advanced": True}, + "project": {"display_name": "Project", "advanced": True}, + "request_parallelism": {"display_name": "Request Parallelism", "value": 5, "advanced": True}, + "stop": {"display_name": "Stop", "advanced": True}, + "streaming": {"display_name": "Streaming", "value": False, "advanced": True}, + "temperature": {"display_name": "Temperature", "value": 0.0}, + "top_k": {"display_name": "Top K", "value": 40, "advanced": True}, + "top_p": {"display_name": "Top P", "value": 0.95, "advanced": True}, + } + + def build( + self, + instance: Optional[str] = None, + credentials: Optional[str] = None, + location: str = "us-central1", + max_output_tokens: int = 128, + max_retries: int = 6, + model_name: str = "textembedding-gecko", + n: int = 1, + project: Optional[str] = None, + request_parallelism: int = 5, + stop: Optional[List[str]] = None, + streaming: bool = False, + temperature: float = 0.0, + top_k: int = 40, + top_p: float = 0.95, + ) -> VertexAIEmbeddings: + return VertexAIEmbeddings( + instance=instance, + credentials=credentials, + location=location, + max_output_tokens=max_output_tokens, + max_retries=max_retries, + model_name=model_name, + n=n, + project=project, + request_parallelism=request_parallelism, + stop=stop, + streaming=streaming, + temperature=temperature, + top_k=top_k, + top_p=top_p, + ) diff --git a/src/backend/langflow/components/llms/Anthropic.py b/src/backend/langflow/components/llms/Anthropic.py new file mode 100644 index 000000000..c1b776617 --- /dev/null +++ b/src/backend/langflow/components/llms/Anthropic.py @@ -0,0 +1,48 @@ +from typing import Optional + +from langchain_community.llms.anthropic import Anthropic +from pydantic.v1 import SecretStr + +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, NestedDict + + +class AnthropicComponent(CustomComponent): + display_name = "Anthropic" + description = "Anthropic large language models." + + def build_config(self): + return { + "anthropic_api_key": { + "display_name": "Anthropic API Key", + "type": str, + "password": True, + }, + "anthropic_api_url": { + "display_name": "Anthropic API URL", + "type": str, + }, + "model_kwargs": { + "display_name": "Model Kwargs", + "field_type": "NestedDict", + "advanced": True, + }, + "temperature": { + "display_name": "Temperature", + "field_type": "float", + }, + } + + def build( + self, + anthropic_api_key: str, + anthropic_api_url: str, + model_kwargs: NestedDict = {}, + temperature: Optional[float] = None, + ) -> BaseLanguageModel: + return Anthropic( + anthropic_api_key=SecretStr(anthropic_api_key), + anthropic_api_url=anthropic_api_url, + model_kwargs=model_kwargs, + temperature=temperature, + ) diff --git a/src/backend/langflow/components/llms/AnthropicLLM.py b/src/backend/langflow/components/llms/AnthropicLLM.py index 2b9c758e5..94c4ed8f5 100644 --- a/src/backend/langflow/components/llms/AnthropicLLM.py +++ b/src/backend/langflow/components/llms/AnthropicLLM.py @@ -1,6 +1,6 @@ from typing import Optional -from langchain.chat_models.anthropic import ChatAnthropic +from langchain_community.chat_models.anthropic import ChatAnthropic from langchain.llms.base import BaseLanguageModel from pydantic.v1 import SecretStr diff --git a/src/backend/langflow/components/llms/AzureChatOpenAI.py b/src/backend/langflow/components/llms/AzureChatOpenAI.py index 1bce563bf..d43abb3dc 100644 --- a/src/backend/langflow/components/llms/AzureChatOpenAI.py +++ b/src/backend/langflow/components/llms/AzureChatOpenAI.py @@ -1,7 +1,7 @@ from typing import Optional from langflow import CustomComponent from langchain.llms.base import BaseLanguageModel -from langchain.chat_models.azure_openai import AzureChatOpenAI +from langchain_community.chat_models.azure_openai import AzureChatOpenAI class AzureChatOpenAIComponent(CustomComponent): diff --git a/src/backend/langflow/components/llms/BaiduQianfanChatEndpoints.py b/src/backend/langflow/components/llms/BaiduQianfanChatEndpoints.py index 8c828dc64..fd7341e15 100644 --- a/src/backend/langflow/components/llms/BaiduQianfanChatEndpoints.py +++ b/src/backend/langflow/components/llms/BaiduQianfanChatEndpoints.py @@ -1,6 +1,6 @@ from typing import Optional -from langchain.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint +from langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpoint from langchain.llms.base import BaseLLM from pydantic.v1 import SecretStr diff --git a/src/backend/langflow/components/llms/CTransformers.py b/src/backend/langflow/components/llms/CTransformers.py new file mode 100644 index 000000000..a0668814e --- /dev/null +++ b/src/backend/langflow/components/llms/CTransformers.py @@ -0,0 +1,33 @@ +from typing import Dict, Optional + +from langchain_community.llms.ctransformers import CTransformers + +from langflow import CustomComponent + + +class CTransformersComponent(CustomComponent): + display_name = "CTransformers" + description = "C Transformers LLM models" + documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/ctransformers" + + def build_config(self): + return { + "model": {"display_name": "Model", "required": True}, + "model_file": { + "display_name": "Model File", + "required": False, + "field_type": "file", + "file_types": [".bin"], + }, + "model_type": {"display_name": "Model Type", "required": True}, + "config": { + "display_name": "Config", + "advanced": True, + "required": False, + "field_type": "dict", + "value": '{"top_k":40,"top_p":0.95,"temperature":0.8,"repetition_penalty":1.1,"last_n_tokens":64,"seed":-1,"max_new_tokens":256,"stop":"","stream":"False","reset":"True","batch_size":8,"threads":-1,"context_length":-1,"gpu_layers":0}', + }, + } + + def build(self, model: str, model_file: str, model_type: str, config: Optional[Dict] = None) -> CTransformers: + return CTransformers(model=model, model_file=model_file, model_type=model_type, config=config) # type: ignore diff --git a/src/backend/langflow/components/llms/ChatAnthropic.py b/src/backend/langflow/components/llms/ChatAnthropic.py new file mode 100644 index 000000000..0bce33ab8 --- /dev/null +++ b/src/backend/langflow/components/llms/ChatAnthropic.py @@ -0,0 +1,47 @@ +from pydantic import SecretStr +from langflow import CustomComponent +from typing import Optional, Union, Callable +from langflow.field_typing import BaseLanguageModel +from langchain_community.chat_models.anthropic import ChatAnthropic + + +class ChatAnthropicComponent(CustomComponent): + display_name = "ChatAnthropic" + description = "`Anthropic` chat large language models." + documentation = "https://python.langchain.com/docs/modules/model_io/models/chat/integrations/anthropic" + + def build_config(self): + return { + "anthropic_api_key": { + "display_name": "Anthropic API Key", + "field_type": "str", + "password": True, + }, + "anthropic_api_url": { + "display_name": "Anthropic API URL", + "field_type": "str", + }, + "model_kwargs": { + "display_name": "Model Kwargs", + "field_type": "dict", + "advanced": True, + }, + "temperature": { + "display_name": "Temperature", + "field_type": "float", + }, + } + + def build( + self, + anthropic_api_key: str, + anthropic_api_url: Optional[str] = None, + model_kwargs: dict = {}, + temperature: Optional[float] = None, + ) -> Union[BaseLanguageModel, Callable]: + return ChatAnthropic( + anthropic_api_key=SecretStr(anthropic_api_key), + anthropic_api_url=anthropic_api_url, + model_kwargs=model_kwargs, + temperature=temperature, + ) diff --git a/src/backend/langflow/components/llms/ChatOllamaEndpoint.py b/src/backend/langflow/components/llms/ChatOllamaEndpoint.py index 3201ff432..34e9e0bd7 100644 --- a/src/backend/langflow/components/llms/ChatOllamaEndpoint.py +++ b/src/backend/langflow/components/llms/ChatOllamaEndpoint.py @@ -1,8 +1,8 @@ from typing import Any, Dict, List, Optional # from langchain_community.chat_models import ChatOllama -from langchain.chat_models import ChatOllama -from langchain.chat_models.base import BaseChatModel +from langchain_community.chat_models import ChatOllama +from langchain_core.language_models.chat_models import BaseChatModel # from langchain.chat_models import ChatOllama from langflow import CustomComponent diff --git a/src/backend/langflow/components/llms/ChatOpenAI.py b/src/backend/langflow/components/llms/ChatOpenAI.py new file mode 100644 index 000000000..19ca4f41d --- /dev/null +++ b/src/backend/langflow/components/llms/ChatOpenAI.py @@ -0,0 +1,84 @@ +from typing import Optional, Union + +from langchain.llms import BaseLLM +from langchain_community.chat_models.openai import ChatOpenAI +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, NestedDict + + +class ChatOpenAIComponent(CustomComponent): + display_name = "ChatOpenAI" + description = "`OpenAI` Chat large language models API." + + def build_config(self): + return { + "max_tokens": { + "display_name": "Max Tokens", + "field_type": "int", + "advanced": False, + "required": False, + }, + "model_kwargs": { + "display_name": "Model Kwargs", + "field_type": "NestedDict", + "advanced": True, + "required": False, + }, + "model_name": { + "display_name": "Model Name", + "field_type": "str", + "advanced": False, + "required": False, + "options": [ + "gpt-4-1106-preview", + "gpt-4", + "gpt-4-32k", + "gpt-3.5-turbo", + "gpt-3.5-turbo-16k", + ], + }, + "openai_api_base": { + "display_name": "OpenAI API Base", + "field_type": "str", + "advanced": False, + "required": False, + "info": ( + "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n\n" + "You can change this to use other APIs like JinaChat, LocalAI and Prem." + ), + }, + "openai_api_key": { + "display_name": "OpenAI API Key", + "field_type": "str", + "advanced": False, + "required": False, + "password": True, + }, + "temperature": { + "display_name": "Temperature", + "field_type": "float", + "advanced": False, + "required": False, + "value": 0.7, + }, + } + + def build( + self, + max_tokens: Optional[int] = 256, + model_kwargs: NestedDict = {}, + model_name: str = "gpt-4-1106-preview", + openai_api_base: Optional[str] = None, + openai_api_key: Optional[str] = None, + temperature: float = 0.7, + ) -> Union[BaseLanguageModel, BaseLLM]: + if not openai_api_base: + openai_api_base = "https://api.openai.com/v1" + return ChatOpenAI( + max_tokens=max_tokens, + model_kwargs=model_kwargs, + model=model_name, + base_url=openai_api_base, + api_key=openai_api_key, + temperature=temperature, + ) diff --git a/src/backend/langflow/components/llms/ChatVertexAI.py b/src/backend/langflow/components/llms/ChatVertexAI.py new file mode 100644 index 000000000..66235a1d8 --- /dev/null +++ b/src/backend/langflow/components/llms/ChatVertexAI.py @@ -0,0 +1,87 @@ +from typing import List, Optional, Union + +from langchain.llms import BaseLLM +from langchain_community.chat_models.vertexai import ChatVertexAI +from langchain_core.messages.base import BaseMessage +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel + + +class ChatVertexAIComponent(CustomComponent): + display_name = "ChatVertexAI" + description = "`Vertex AI` Chat large language models API." + + def build_config(self): + return { + "credentials": { + "display_name": "Credentials", + "field_type": "file", + "file_types": [".json"], + "file_path": None, + }, + "examples": { + "display_name": "Examples", + "multiline": True, + }, + "location": { + "display_name": "Location", + "value": "us-central1", + }, + "max_output_tokens": { + "display_name": "Max Output Tokens", + "value": 128, + "advanced": True, + }, + "model_name": { + "display_name": "Model Name", + "value": "chat-bison", + }, + "project": { + "display_name": "Project", + }, + "temperature": { + "display_name": "Temperature", + "value": 0.0, + }, + "top_k": { + "display_name": "Top K", + "value": 40, + "advanced": True, + }, + "top_p": { + "display_name": "Top P", + "value": 0.95, + "advanced": True, + }, + "verbose": { + "display_name": "Verbose", + "value": False, + "advanced": True, + }, + } + + def build( + self, + credentials: Optional[str], + project: str, + examples: Optional[List[BaseMessage]] = [], + location: str = "us-central1", + max_output_tokens: int = 128, + model_name: str = "chat-bison", + temperature: float = 0.0, + top_k: int = 40, + top_p: float = 0.95, + verbose: bool = False, + ) -> Union[BaseLanguageModel, BaseLLM]: + return ChatVertexAI( + credentials=credentials, + examples=examples, + location=location, + max_output_tokens=max_output_tokens, + model_name=model_name, + project=project, + temperature=temperature, + top_k=top_k, + top_p=top_p, + verbose=verbose, + ) diff --git a/src/backend/langflow/components/llms/Cohere.py b/src/backend/langflow/components/llms/Cohere.py new file mode 100644 index 000000000..3b74fc9b4 --- /dev/null +++ b/src/backend/langflow/components/llms/Cohere.py @@ -0,0 +1,24 @@ +from langchain_community.llms.cohere import Cohere +from langchain_core.language_models.base import BaseLanguageModel +from langflow import CustomComponent + + +class CohereComponent(CustomComponent): + display_name = "Cohere" + description = "Cohere large language models." + documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/cohere" + + def build_config(self): + return { + "cohere_api_key": {"display_name": "Cohere API Key", "type": "password", "password": True}, + "max_tokens": {"display_name": "Max Tokens", "default": 256, "type": "int", "show": True}, + "temperature": {"display_name": "Temperature", "default": 0.75, "type": "float", "show": True}, + } + + def build( + self, + cohere_api_key: str, + max_tokens: int = 256, + temperature: float = 0.75, + ) -> BaseLanguageModel: + return Cohere(cohere_api_key=cohere_api_key, max_tokens=max_tokens, temperature=temperature) # type: ignore diff --git a/src/backend/langflow/components/llms/LlamaCpp.py b/src/backend/langflow/components/llms/LlamaCpp.py new file mode 100644 index 000000000..831665bfa --- /dev/null +++ b/src/backend/langflow/components/llms/LlamaCpp.py @@ -0,0 +1,129 @@ +from typing import Optional, List, Dict, Any +from langflow import CustomComponent +from langchain_community.llms.llamacpp import LlamaCpp + + +class LlamaCppComponent(CustomComponent): + display_name = "LlamaCpp" + description = "llama.cpp model." + documentation = "https://python.langchain.com/docs/modules/model_io/models/llms/integrations/llamacpp" + + def build_config(self): + return { + "grammar": {"display_name": "Grammar", "advanced": True}, + "cache": {"display_name": "Cache", "advanced": True}, + "client": {"display_name": "Client", "advanced": True}, + "echo": {"display_name": "Echo", "advanced": True}, + "f16_kv": {"display_name": "F16 KV", "advanced": True}, + "grammar_path": {"display_name": "Grammar Path", "advanced": True}, + "last_n_tokens_size": {"display_name": "Last N Tokens Size", "advanced": True}, + "logits_all": {"display_name": "Logits All", "advanced": True}, + "logprobs": {"display_name": "Logprobs", "advanced": True}, + "lora_base": {"display_name": "Lora Base", "advanced": True}, + "lora_path": {"display_name": "Lora Path", "advanced": True}, + "max_tokens": {"display_name": "Max Tokens", "advanced": True}, + "metadata": {"display_name": "Metadata", "advanced": True}, + "model_kwargs": {"display_name": "Model Kwargs", "advanced": True}, + "model_path": { + "display_name": "Model Path", + "field_type": "file", + "file_types": [".bin"], + "required": True, + }, + "n_batch": {"display_name": "N Batch", "advanced": True}, + "n_ctx": {"display_name": "N Ctx", "advanced": True}, + "n_gpu_layers": {"display_name": "N GPU Layers", "advanced": True}, + "n_parts": {"display_name": "N Parts", "advanced": True}, + "n_threads": {"display_name": "N Threads", "advanced": True}, + "repeat_penalty": {"display_name": "Repeat Penalty", "advanced": True}, + "rope_freq_base": {"display_name": "Rope Freq Base", "advanced": True}, + "rope_freq_scale": {"display_name": "Rope Freq Scale", "advanced": True}, + "seed": {"display_name": "Seed", "advanced": True}, + "stop": {"display_name": "Stop", "advanced": True}, + "streaming": {"display_name": "Streaming", "advanced": True}, + "suffix": {"display_name": "Suffix", "advanced": True}, + "tags": {"display_name": "Tags", "advanced": True}, + "temperature": {"display_name": "Temperature"}, + "top_k": {"display_name": "Top K", "advanced": True}, + "top_p": {"display_name": "Top P", "advanced": True}, + "use_mlock": {"display_name": "Use Mlock", "advanced": True}, + "use_mmap": {"display_name": "Use Mmap", "advanced": True}, + "verbose": {"display_name": "Verbose", "advanced": True}, + "vocab_only": {"display_name": "Vocab Only", "advanced": True}, + } + + def build( + self, + model_path: str, + grammar: Optional[str] = None, + cache: Optional[bool] = None, + client: Optional[Any] = None, + echo: Optional[bool] = False, + f16_kv: bool = True, + grammar_path: Optional[str] = None, + last_n_tokens_size: Optional[int] = 64, + logits_all: bool = False, + logprobs: Optional[int] = None, + lora_base: Optional[str] = None, + lora_path: Optional[str] = None, + max_tokens: Optional[int] = 256, + metadata: Optional[Dict] = None, + model_kwargs: Dict = {}, + n_batch: Optional[int] = 8, + n_ctx: int = 512, + n_gpu_layers: Optional[int] = 1, + n_parts: int = -1, + n_threads: Optional[int] = 1, + repeat_penalty: Optional[float] = 1.1, + rope_freq_base: float = 10000.0, + rope_freq_scale: float = 1.0, + seed: int = -1, + stop: Optional[List[str]] = [], + streaming: bool = True, + suffix: Optional[str] = "", + tags: Optional[List[str]] = [], + temperature: Optional[float] = 0.8, + top_k: Optional[int] = 40, + top_p: Optional[float] = 0.95, + use_mlock: bool = False, + use_mmap: Optional[bool] = True, + verbose: bool = True, + vocab_only: bool = False, + ) -> LlamaCpp: + return LlamaCpp( + model_path=model_path, + grammar=grammar, + cache=cache, + client=client, + echo=echo, + f16_kv=f16_kv, + grammar_path=grammar_path, + last_n_tokens_size=last_n_tokens_size, + logits_all=logits_all, + logprobs=logprobs, + lora_base=lora_base, + lora_path=lora_path, + max_tokens=max_tokens, + metadata=metadata, + model_kwargs=model_kwargs, + n_batch=n_batch, + n_ctx=n_ctx, + n_gpu_layers=n_gpu_layers, + n_parts=n_parts, + n_threads=n_threads, + repeat_penalty=repeat_penalty, + rope_freq_base=rope_freq_base, + rope_freq_scale=rope_freq_scale, + seed=seed, + stop=stop, + streaming=streaming, + suffix=suffix, + tags=tags, + temperature=temperature, + top_k=top_k, + top_p=top_p, + use_mlock=use_mlock, + use_mmap=use_mmap, + verbose=verbose, + vocab_only=vocab_only, + ) diff --git a/src/backend/langflow/components/llms/OllamaLLM.py b/src/backend/langflow/components/llms/OllamaLLM.py index fae8e1917..eb5c52975 100644 --- a/src/backend/langflow/components/llms/OllamaLLM.py +++ b/src/backend/langflow/components/llms/OllamaLLM.py @@ -1,7 +1,7 @@ -from typing import Optional, List +from typing import List, Optional -from langchain.llms import Ollama from langchain.llms.base import BaseLLM +from langchain_community.llms.ollama import Ollama from langflow import CustomComponent @@ -133,29 +133,25 @@ class OllamaLLM(CustomComponent): mirostat_eta = None mirostat_tau = None - llm_params = { - "base_url": base_url, - "model": model, - "mirostat": mirostat_value, - "mirostat_eta": mirostat_eta, - "mirostat_tau": mirostat_tau, - "num_ctx": num_ctx, - "num_gpu": num_gpu, - "num_thread": num_thread, - "repeat_last_n": repeat_last_n, - "repeat_penalty": repeat_penalty, - "temperature": temperature, - "stop": stop, - "tfs_z": tfs_z, - "top_k": top_k, - "top_p": top_p, - } - - # None Value remove - llm_params = {k: v for k, v in llm_params.items() if v is not None} - try: - llm = Ollama(**llm_params) + llm = Ollama( + base_url=base_url, + model=model, + mirostat=mirostat_value, + mirostat_eta=mirostat_eta, + mirostat_tau=mirostat_tau, + num_ctx=num_ctx, + num_gpu=num_gpu, + num_thread=num_thread, + repeat_last_n=repeat_last_n, + repeat_penalty=repeat_penalty, + temperature=temperature, + stop=stop, + tfs_z=tfs_z, + top_k=top_k, + top_p=top_p, + ) + except Exception as e: raise ValueError("Could not connect to Ollama.") from e diff --git a/src/backend/langflow/components/llms/VertexAI.py b/src/backend/langflow/components/llms/VertexAI.py new file mode 100644 index 000000000..008451bc8 --- /dev/null +++ b/src/backend/langflow/components/llms/VertexAI.py @@ -0,0 +1,147 @@ +from langflow import CustomComponent +from langchain.llms import BaseLLM +from typing import Optional, Union, Callable, Dict +from langchain_community.llms.vertexai import VertexAI + + +class VertexAIComponent(CustomComponent): + display_name = "VertexAI" + description = "Google Vertex AI large language models" + + def build_config(self): + return { + "credentials": { + "display_name": "Credentials", + "field_type": "file", + "file_types": [".json"], + "required": False, + "value": None, + }, + "location": { + "display_name": "Location", + "type": "str", + "advanced": True, + "value": "us-central1", + "required": False, + }, + "max_output_tokens": { + "display_name": "Max Output Tokens", + "field_type": "int", + "value": 128, + "required": False, + "advanced": True, + }, + "max_retries": { + "display_name": "Max Retries", + "type": "int", + "value": 6, + "required": False, + "advanced": True, + }, + "metadata": { + "display_name": "Metadata", + "field_type": "dict", + "required": False, + "default": {}, + }, + "model_name": { + "display_name": "Model Name", + "type": "str", + "value": "text-bison", + "required": False, + }, + "n": { + "advanced": True, + "display_name": "N", + "field_type": "int", + "value": 1, + "required": False, + }, + "project": { + "display_name": "Project", + "type": "str", + "required": False, + "default": None, + }, + "request_parallelism": { + "display_name": "Request Parallelism", + "field_type": "int", + "value": 5, + "required": False, + "advanced": True, + }, + "streaming": { + "display_name": "Streaming", + "field_type": "bool", + "value": False, + "required": False, + "advanced": True, + }, + "temperature": { + "display_name": "Temperature", + "field_type": "float", + "value": 0.0, + "required": False, + "advanced": True, + }, + "top_k": {"display_name": "Top K", "type": "int", "default": 40, "required": False, "advanced": True}, + "top_p": { + "display_name": "Top P", + "field_type": "float", + "value": 0.95, + "required": False, + "advanced": True, + }, + "tuned_model_name": { + "display_name": "Tuned Model Name", + "type": "str", + "required": False, + "value": None, + "advanced": True, + }, + "verbose": { + "display_name": "Verbose", + "field_type": "bool", + "value": False, + "required": False, + }, + "name": {"display_name": "Name", "field_type": "str"}, + } + + def build( + self, + credentials: Optional[str] = None, + location: str = "us-central1", + max_output_tokens: int = 128, + max_retries: int = 6, + metadata: Dict = {}, + model_name: str = "text-bison", + n: int = 1, + name: Optional[str] = None, + project: Optional[str] = None, + request_parallelism: int = 5, + streaming: bool = False, + temperature: float = 0.0, + top_k: int = 40, + top_p: float = 0.95, + tuned_model_name: Optional[str] = None, + verbose: bool = False, + ) -> Union[BaseLLM, Callable]: + return VertexAI( + credentials=credentials, + location=location, + max_output_tokens=max_output_tokens, + max_retries=max_retries, + metadata=metadata, + model_name=model_name, + n=n, + name=name, + project=project, + request_parallelism=request_parallelism, + streaming=streaming, + temperature=temperature, + top_k=top_k, + top_p=top_p, + tuned_model_name=tuned_model_name, + verbose=verbose, + ) diff --git a/src/backend/langflow/components/retrievers/MultiQueryRetriever.py b/src/backend/langflow/components/retrievers/MultiQueryRetriever.py new file mode 100644 index 000000000..d2c12d7a5 --- /dev/null +++ b/src/backend/langflow/components/retrievers/MultiQueryRetriever.py @@ -0,0 +1,49 @@ +from typing import Callable, Optional, Union + +from langchain.retrievers import MultiQueryRetriever +from langflow import CustomComponent +from langflow.field_typing import BaseLLM, BaseRetriever, PromptTemplate + + +class MultiQueryRetrieverComponent(CustomComponent): + display_name = "MultiQueryRetriever" + description = "Initialize from llm using default template." + documentation = "https://python.langchain.com/docs/modules/data_connection/retrievers/how_to/MultiQueryRetriever" + + def build_config(self): + return { + "llm": {"display_name": "LLM"}, + "prompt": { + "display_name": "Prompt", + "default": { + "input_variables": ["question"], + "input_types": {}, + "output_parser": None, + "partial_variables": {}, + "template": "You are an AI language model assistant. Your task is \n" + "to generate 3 different versions of the given user \n" + "question to retrieve relevant documents from a vector database. \n" + "By generating multiple perspectives on the user question, \n" + "your goal is to help the user overcome some of the limitations \n" + "of distance-based similarity search. Provide these alternative \n" + "questions separated by newlines. Original question: {question}", + "template_format": "f-string", + "validate_template": False, + "_type": "prompt", + }, + }, + "retriever": {"display_name": "Retriever"}, + "parser_key": {"display_name": "Parser Key", "default": "lines"}, + } + + def build( + self, + llm: BaseLLM, + retriever: BaseRetriever, + prompt: Optional[PromptTemplate] = None, + parser_key: str = "lines", + ) -> Union[Callable, MultiQueryRetriever]: + if not prompt: + return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, parser_key=parser_key) + else: + return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, prompt=prompt, parser_key=parser_key) diff --git a/src/backend/langflow/components/textsplitters/CharacterTextSplitter.py b/src/backend/langflow/components/textsplitters/CharacterTextSplitter.py new file mode 100644 index 000000000..d65c28dab --- /dev/null +++ b/src/backend/langflow/components/textsplitters/CharacterTextSplitter.py @@ -0,0 +1,30 @@ +from langflow import CustomComponent +from langchain.text_splitter import CharacterTextSplitter +from langchain_core.documents.base import Document +from typing import List + + +class CharacterTextSplitterComponent(CustomComponent): + display_name = "CharacterTextSplitter" + description = "Splitting text that looks at characters." + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "chunk_overlap": {"display_name": "Chunk Overlap", "default": 200}, + "chunk_size": {"display_name": "Chunk Size", "default": 1000}, + "separator": {"display_name": "Separator", "default": "\n"}, + } + + def build( + self, + documents: List[Document], + chunk_overlap: int = 200, + chunk_size: int = 1000, + separator: str = "\n", + ) -> List[Document]: + return CharacterTextSplitter( + chunk_overlap=chunk_overlap, + chunk_size=chunk_size, + separator=separator, + ).split_documents(documents) diff --git a/src/backend/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py b/src/backend/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py index 636eb427e..1cea7a29b 100644 --- a/src/backend/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py +++ b/src/backend/langflow/components/textsplitters/LanguageRecursiveTextSplitter.py @@ -1,7 +1,9 @@ from typing import Optional -from langflow import CustomComponent -from langchain.text_splitter import Language + from langchain.schema import Document +from langchain.text_splitter import Language + +from langflow import CustomComponent class LanguageRecursiveTextSplitterComponent(CustomComponent): @@ -48,7 +50,7 @@ class LanguageRecursiveTextSplitterComponent(CustomComponent): documents: list[Document], chunk_size: Optional[int] = 1000, chunk_overlap: Optional[int] = 200, - separator_type: Optional[str] = "Python", + separator_type: str = "Python", ) -> list[Document]: """ Split text into chunks of a specified length. diff --git a/src/backend/langflow/components/toolkits/JsonToolkit.py b/src/backend/langflow/components/toolkits/JsonToolkit.py new file mode 100644 index 000000000..ec9e49621 --- /dev/null +++ b/src/backend/langflow/components/toolkits/JsonToolkit.py @@ -0,0 +1,16 @@ +from langflow import CustomComponent +from langchain_community.tools.json.tool import JsonSpec +from langchain_community.agent_toolkits.json.toolkit import JsonToolkit + + +class JsonToolkitComponent(CustomComponent): + display_name = "JsonToolkit" + description = "Toolkit for interacting with a JSON spec." + + def build_config(self): + return { + "spec": {"display_name": "Spec", "type": JsonSpec}, + } + + def build(self, spec: JsonSpec) -> JsonToolkit: + return JsonToolkit(spec=spec) diff --git a/src/backend/langflow/components/toolkits/OpenAPIToolkit.py b/src/backend/langflow/components/toolkits/OpenAPIToolkit.py new file mode 100644 index 000000000..2d9a860a0 --- /dev/null +++ b/src/backend/langflow/components/toolkits/OpenAPIToolkit.py @@ -0,0 +1,23 @@ +from langflow import CustomComponent +from langflow.field_typing import AgentExecutor +from typing import Callable +from langchain_community.utilities.requests import TextRequestsWrapper +from langchain_community.agent_toolkits.openapi.toolkit import OpenAPIToolkit + + +class OpenAPIToolkitComponent(CustomComponent): + display_name = "OpenAPIToolkit" + description = "Toolkit for interacting with an OpenAPI API." + + def build_config(self): + return { + "json_agent": {"display_name": "JSON Agent"}, + "requests_wrapper": {"display_name": "Text Requests Wrapper"}, + } + + def build( + self, + json_agent: AgentExecutor, + requests_wrapper: TextRequestsWrapper, + ) -> Callable: + return OpenAPIToolkit(json_agent=json_agent, requests_wrapper=requests_wrapper) diff --git a/src/backend/langflow/components/toolkits/VectorStoreInfo.py b/src/backend/langflow/components/toolkits/VectorStoreInfo.py new file mode 100644 index 000000000..ec2323bfd --- /dev/null +++ b/src/backend/langflow/components/toolkits/VectorStoreInfo.py @@ -0,0 +1,26 @@ +from typing import Callable, Union + +from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreInfo +from langchain_community.vectorstores import VectorStore + +from langflow import CustomComponent + + +class VectorStoreInfoComponent(CustomComponent): + display_name = "VectorStoreInfo" + description = "Information about a VectorStore" + + def build_config(self): + return { + "vectorstore": {"display_name": "VectorStore"}, + "description": {"display_name": "Description", "multiline": True}, + "name": {"display_name": "Name"}, + } + + def build( + self, + vectorstore: VectorStore, + description: str, + name: str, + ) -> Union[VectorStoreInfo, Callable]: + return VectorStoreInfo(vectorstore=vectorstore, description=description, name=name) diff --git a/src/backend/langflow/components/toolkits/VectorStoreRouterToolkit.py b/src/backend/langflow/components/toolkits/VectorStoreRouterToolkit.py new file mode 100644 index 000000000..ed8797044 --- /dev/null +++ b/src/backend/langflow/components/toolkits/VectorStoreRouterToolkit.py @@ -0,0 +1,23 @@ +from langflow import CustomComponent +from typing import List, Union +from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreRouterToolkit +from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreInfo +from langflow.field_typing import BaseLanguageModel, Tool + + +class VectorStoreRouterToolkitComponent(CustomComponent): + display_name = "VectorStoreRouterToolkit" + description = "Toolkit for routing between Vector Stores." + + def build_config(self): + return { + "vectorstores": {"display_name": "Vector Stores"}, + "llm": {"display_name": "LLM"}, + } + + def build( + self, vectorstores: List[VectorStoreInfo], llm: BaseLanguageModel + ) -> Union[Tool, VectorStoreRouterToolkit]: + print("vectorstores", vectorstores) + print("llm", llm) + return VectorStoreRouterToolkit(vectorstores=vectorstores, llm=llm) diff --git a/src/backend/langflow/components/toolkits/VectorStoreToolkit.py b/src/backend/langflow/components/toolkits/VectorStoreToolkit.py new file mode 100644 index 000000000..38b9c9171 --- /dev/null +++ b/src/backend/langflow/components/toolkits/VectorStoreToolkit.py @@ -0,0 +1,28 @@ +from langflow import CustomComponent +from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreToolkit +from langchain.agents.agent_toolkits.vectorstore.toolkit import VectorStoreInfo +from langflow.field_typing import ( + BaseLanguageModel, +) +from langflow.field_typing import ( + Tool, +) +from typing import Union + + +class VectorStoreToolkitComponent(CustomComponent): + display_name = "VectorStoreToolkit" + description = "Toolkit for interacting with a Vector Store." + + def build_config(self): + return { + "vectorstore_info": {"display_name": "Vector Store Info"}, + "llm": {"display_name": "LLM"}, + } + + def build( + self, + vectorstore_info: VectorStoreInfo, + llm: BaseLanguageModel, + ) -> Union[Tool, VectorStoreToolkit]: + return VectorStoreToolkit(vectorstore_info=vectorstore_info, llm=llm) diff --git a/src/backend/langflow/components/utilities/BingSearchAPIWrapper.py b/src/backend/langflow/components/utilities/BingSearchAPIWrapper.py new file mode 100644 index 000000000..b9dc4a2ef --- /dev/null +++ b/src/backend/langflow/components/utilities/BingSearchAPIWrapper.py @@ -0,0 +1,31 @@ +from langflow import CustomComponent + +# Assuming `BingSearchAPIWrapper` is a class that exists in the context +# and has the appropriate methods and attributes. +# We need to make sure this class is importable from the context where this code will be running. +from langchain_community.utilities.bing_search import BingSearchAPIWrapper + + +class BingSearchAPIWrapperComponent(CustomComponent): + display_name = "BingSearchAPIWrapper" + description = "Wrapper for Bing Search API." + + def build_config(self): + return { + "bing_search_url": {"display_name": "Bing Search URL"}, + "bing_subscription_key": { + "display_name": "Bing Subscription Key", + "password": True, + }, + "k": {"display_name": "Number of results", "advanced": True}, + # 'k' is not included as it is not shown (show=False) + } + + def build( + self, + bing_search_url: str, + bing_subscription_key: str, + k: int = 10, + ) -> BingSearchAPIWrapper: + # 'k' has a default value and is not shown (show=False), so it is hardcoded here + return BingSearchAPIWrapper(bing_search_url=bing_search_url, bing_subscription_key=bing_subscription_key, k=k) diff --git a/src/backend/langflow/components/utilities/GoogleSearchAPIWrapper.py b/src/backend/langflow/components/utilities/GoogleSearchAPIWrapper.py new file mode 100644 index 000000000..37e9afff6 --- /dev/null +++ b/src/backend/langflow/components/utilities/GoogleSearchAPIWrapper.py @@ -0,0 +1,21 @@ +from langflow import CustomComponent +from typing import Union, Callable +from langchain_community.utilities.google_search import GoogleSearchAPIWrapper + + +class GoogleSearchAPIWrapperComponent(CustomComponent): + display_name = "GoogleSearchAPIWrapper" + description = "Wrapper for Google Search API." + + def build_config(self): + return { + "google_api_key": {"display_name": "Google API Key", "password": True}, + "google_cse_id": {"display_name": "Google CSE ID", "password": True}, + } + + def build( + self, + google_api_key: str, + google_cse_id: str, + ) -> Union[GoogleSearchAPIWrapper, Callable]: + return GoogleSearchAPIWrapper(google_api_key=google_api_key, google_cse_id=google_cse_id) diff --git a/src/backend/langflow/components/utilities/GoogleSerperAPIWrapper.py b/src/backend/langflow/components/utilities/GoogleSerperAPIWrapper.py new file mode 100644 index 000000000..84fefedad --- /dev/null +++ b/src/backend/langflow/components/utilities/GoogleSerperAPIWrapper.py @@ -0,0 +1,47 @@ +from langflow import CustomComponent +from typing import Dict, Optional + +# Assuming the existence of GoogleSerperAPIWrapper class in the serper module +# If this class does not exist, you would need to create it or import the appropriate class from another module +from langchain_community.utilities.google_serper import GoogleSerperAPIWrapper + + +class GoogleSerperAPIWrapperComponent(CustomComponent): + display_name = "GoogleSerperAPIWrapper" + description = "Wrapper around the Serper.dev Google Search API." + + def build_config(self) -> Dict[str, Dict]: + return { + "result_key_for_type": { + "display_name": "Result Key for Type", + "show": True, + "multiline": False, + "password": False, + "name": "result_key_for_type", + "advanced": False, + "dynamic": False, + "info": "", + "field_type": "dict", + "list": False, + "value": {"news": "news", "places": "places", "images": "images", "search": "organic"}, + }, + "serper_api_key": { + "display_name": "Serper API Key", + "show": True, + "multiline": False, + "password": True, + "name": "serper_api_key", + "advanced": False, + "dynamic": False, + "info": "", + "type": "str", + "list": False, + }, + } + + def build( + self, + serper_api_key: str, + result_key_for_type: Optional[Dict[str, str]] = None, + ) -> GoogleSerperAPIWrapper: + return GoogleSerperAPIWrapper(result_key_for_type=result_key_for_type, serper_api_key=serper_api_key) diff --git a/src/backend/langflow/components/utilities/SearxSearchWrapper.py b/src/backend/langflow/components/utilities/SearxSearchWrapper.py new file mode 100644 index 000000000..b406f3882 --- /dev/null +++ b/src/backend/langflow/components/utilities/SearxSearchWrapper.py @@ -0,0 +1,33 @@ +from langflow import CustomComponent +from typing import Optional, Dict +from langchain_community.utilities.searx_search import SearxSearchWrapper + + +class SearxSearchWrapperComponent(CustomComponent): + display_name = "SearxSearchWrapper" + description = "Wrapper for Searx API." + + def build_config(self): + return { + "headers": { + "field_type": "dict", + "display_name": "Headers", + "multiline": True, + "value": '{"Authorization": "Bearer "}', + }, + "k": {"display_name": "k", "advanced": True, "field_type": "int", "value": 10}, + "searx_host": { + "display_name": "Searx Host", + "field_type": "str", + "value": "https://searx.example.com", + "advanced": True, + }, + } + + def build( + self, + k: int = 10, + headers: Optional[Dict[str, str]] = None, + searx_host: str = "https://searx.example.com", + ) -> SearxSearchWrapper: + return SearxSearchWrapper(headers=headers, k=k, searx_host=searx_host) diff --git a/src/backend/langflow/components/utilities/SerpAPIWrapper.py b/src/backend/langflow/components/utilities/SerpAPIWrapper.py new file mode 100644 index 000000000..924f5628d --- /dev/null +++ b/src/backend/langflow/components/utilities/SerpAPIWrapper.py @@ -0,0 +1,31 @@ +from typing import Callable, Union + +from langchain_community.utilities.serpapi import SerpAPIWrapper +from langflow import CustomComponent + + +class SerpAPIWrapperComponent(CustomComponent): + display_name = "SerpAPIWrapper" + description = "Wrapper around SerpAPI" + + def build_config(self): + return { + "serpapi_api_key": {"display_name": "SerpAPI API Key", "type": "str", "password": True}, + "params": { + "display_name": "Parameters", + "type": "dict", + "advanced": True, + "multiline": True, + "value": '{"engine": "google","google_domain": "google.com","gl": "us","hl": "en"}', + }, + } + + def build( + self, + serpapi_api_key: str, + params: dict, + ) -> Union[SerpAPIWrapper, Callable]: # Removed quotes around SerpAPIWrapper + return SerpAPIWrapper( # type: ignore + serpapi_api_key=serpapi_api_key, + params=params, + ) diff --git a/src/backend/langflow/components/utilities/WikipediaAPIWrapper.py b/src/backend/langflow/components/utilities/WikipediaAPIWrapper.py new file mode 100644 index 000000000..00820881b --- /dev/null +++ b/src/backend/langflow/components/utilities/WikipediaAPIWrapper.py @@ -0,0 +1,30 @@ +from typing import Callable, Union + +from langchain_community.utilities.wikipedia import WikipediaAPIWrapper +from langflow import CustomComponent + +# Assuming WikipediaAPIWrapper is a class that needs to be imported. +# The import statement is not included as it is not provided in the JSON +# and the actual implementation details are unknown. + + +class WikipediaAPIWrapperComponent(CustomComponent): + display_name = "WikipediaAPIWrapper" + description = "Wrapper around WikipediaAPI." + + def build_config(self): + return {} + + def build( + self, + top_k_results: int = 3, + lang: str = "en", + load_all_available_meta: bool = False, + doc_content_chars_max: int = 4000, + ) -> Union[WikipediaAPIWrapper, Callable]: + return WikipediaAPIWrapper( # type: ignore + top_k_results=top_k_results, + lang=lang, + load_all_available_meta=load_all_available_meta, + doc_content_chars_max=doc_content_chars_max, + ) diff --git a/src/backend/langflow/components/utilities/WolframAlphaAPIWrapper.py b/src/backend/langflow/components/utilities/WolframAlphaAPIWrapper.py new file mode 100644 index 000000000..2e71a161c --- /dev/null +++ b/src/backend/langflow/components/utilities/WolframAlphaAPIWrapper.py @@ -0,0 +1,18 @@ +from typing import Callable, Union + +from langchain_community.utilities.wolfram_alpha import WolframAlphaAPIWrapper +from langflow import CustomComponent + +# Since all the fields in the JSON have show=False, we will only create a basic component +# without any configurable fields. + + +class WolframAlphaAPIWrapperComponent(CustomComponent): + display_name = "WolframAlphaAPIWrapper" + description = "Wrapper for Wolfram Alpha." + + def build_config(self): + return {"appid": {"display_name": "App ID", "type": "str", "password": True}} + + def build(self, appid: str) -> Union[Callable, WolframAlphaAPIWrapper]: + return WolframAlphaAPIWrapper(wolfram_alpha_appid=appid) # type: ignore diff --git a/src/backend/langflow/components/vectorstores/Chroma.py b/src/backend/langflow/components/vectorstores/Chroma.py index f546eb361..8f25548a8 100644 --- a/src/backend/langflow/components/vectorstores/Chroma.py +++ b/src/backend/langflow/components/vectorstores/Chroma.py @@ -3,9 +3,8 @@ from typing import List, Optional, Union import chromadb # type: ignore from langchain.embeddings.base import Embeddings from langchain.schema import BaseRetriever, Document -from langchain.vectorstores import Chroma -from langchain.vectorstores.base import VectorStore - +from langchain_community.vectorstores import VectorStore +from langchain_community.vectorstores.chroma import Chroma from langflow import CustomComponent diff --git a/src/backend/langflow/components/vectorstores/FAISS.py b/src/backend/langflow/components/vectorstores/FAISS.py new file mode 100644 index 000000000..dec14f6db --- /dev/null +++ b/src/backend/langflow/components/vectorstores/FAISS.py @@ -0,0 +1,26 @@ +from typing import List, Union + +from langchain.schema import BaseRetriever +from langchain_community.vectorstores import VectorStore +from langchain_community.vectorstores.faiss import FAISS +from langflow import CustomComponent +from langflow.field_typing import Document, Embeddings + + +class FAISSComponent(CustomComponent): + display_name = "FAISS" + description = "Construct FAISS wrapper from raw documents." + documentation = "https://python.langchain.com/docs/modules/data_connection/vectorstores/integrations/faiss" + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "embedding": {"display_name": "Embedding"}, + } + + def build( + self, + embedding: Embeddings, + documents: List[Document], + ) -> Union[VectorStore, FAISS, BaseRetriever]: + return FAISS.from_documents(documents=documents, embedding=embedding) diff --git a/src/backend/langflow/components/vectorstores/MongoDBAtlasVectorSearch.py b/src/backend/langflow/components/vectorstores/MongoDBAtlasVectorSearch.py new file mode 100644 index 000000000..d2d215f2b --- /dev/null +++ b/src/backend/langflow/components/vectorstores/MongoDBAtlasVectorSearch.py @@ -0,0 +1,47 @@ +from typing import List, Optional + +from langchain_community.vectorstores import MongoDBAtlasVectorSearch + +from langflow import CustomComponent +from langflow.field_typing import ( + Document, + Embeddings, + NestedDict, +) + + +class MongoDBAtlasComponent(CustomComponent): + display_name = "MongoDB Atlas" + description = "Construct a `MongoDB Atlas Vector Search` vector store from raw documents." + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "embedding": {"display_name": "Embedding"}, + "collection_name": {"display_name": "Collection Name"}, + "db_name": {"display_name": "Database Name"}, + "index_name": {"display_name": "Index Name"}, + "mongodb_atlas_cluster_uri": {"display_name": "MongoDB Atlas Cluster URI"}, + "search_kwargs": {"display_name": "Search Kwargs", "advanced": True}, + } + + def build( + self, + documents: List[Document], + embedding: Embeddings, + collection_name: str = "", + db_name: str = "", + index_name: str = "", + mongodb_atlas_cluster_uri: str = "", + search_kwargs: Optional[NestedDict] = None, + ) -> MongoDBAtlasVectorSearch: + search_kwargs = search_kwargs or {} + return MongoDBAtlasVectorSearch( + documents=documents, + embedding=embedding, + collection_name=collection_name, + db_name=db_name, + index_name=index_name, + mongodb_atlas_cluster_uri=mongodb_atlas_cluster_uri, + search_kwargs=search_kwargs, + ) diff --git a/src/backend/langflow/components/vectorstores/Pinecone.py b/src/backend/langflow/components/vectorstores/Pinecone.py new file mode 100644 index 000000000..c4613948a --- /dev/null +++ b/src/backend/langflow/components/vectorstores/Pinecone.py @@ -0,0 +1,62 @@ +import os +from typing import List, Optional, Union + +import pinecone # type: ignore +from langchain.schema import BaseRetriever +from langchain_community.vectorstores import VectorStore +from langchain_community.vectorstores.pinecone import Pinecone + +from langflow import CustomComponent +from langflow.field_typing import Document, Embeddings + + +class PineconeComponent(CustomComponent): + display_name = "Pinecone" + description = "Construct Pinecone wrapper from raw documents." + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "embedding": {"display_name": "Embedding"}, + "index_name": {"display_name": "Index Name"}, + "namespace": {"display_name": "Namespace"}, + "pinecone_api_key": {"display_name": "Pinecone API Key", "default": "", "password": True, "required": True}, + "pinecone_env": {"display_name": "Pinecone Environment", "default": "", "required": True}, + "search_kwargs": {"display_name": "Search Kwargs", "default": "{}"}, + "pool_threads": {"display_name": "Pool Threads", "default": 1, "advanced": True}, + } + + def build( + self, + embedding: Embeddings, + pinecone_env: str, + documents: List[Document], + index_name: Optional[str] = None, + pinecone_api_key: Optional[str] = None, + text_key: Optional[str] = "text", + namespace: Optional[str] = "default", + pool_threads: Optional[int] = None, + ) -> Union[VectorStore, Pinecone, BaseRetriever]: + if pinecone_api_key is None or pinecone_env is None: + raise ValueError("Pinecone API Key and Environment are required.") + if os.getenv("PINECONE_API_KEY") is None and pinecone_api_key is None: + raise ValueError("Pinecone API Key is required.") + + pinecone.init(api_key=pinecone_api_key, environment=pinecone_env) # type: ignore + if documents: + return Pinecone.from_documents( + documents=documents, + embedding=embedding, + index_name=index_name, + pool_threads=pool_threads, + namespace=namespace, + text_key=text_key, + ) + + return Pinecone.from_existing_index( + index_name=index_name, + embedding=embedding, + text_key=text_key, + namespace=namespace, + pool_threads=pool_threads, + ) diff --git a/src/backend/langflow/components/vectorstores/Qdrant.py b/src/backend/langflow/components/vectorstores/Qdrant.py new file mode 100644 index 000000000..ee38406df --- /dev/null +++ b/src/backend/langflow/components/vectorstores/Qdrant.py @@ -0,0 +1,76 @@ +from typing import List, Optional, Union + +from langchain.schema import BaseRetriever +from langchain_community.vectorstores import VectorStore +from langchain_community.vectorstores.qdrant import Qdrant +from langflow import CustomComponent +from langflow.field_typing import Document, Embeddings, NestedDict + + +class QdrantComponent(CustomComponent): + display_name = "Qdrant" + description = "Construct Qdrant wrapper from a list of texts." + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "embedding": {"display_name": "Embedding"}, + "api_key": {"display_name": "API Key", "password": True}, + "collection_name": {"display_name": "Collection Name"}, + "content_payload_key": {"display_name": "Content Payload Key", "advanced": True}, + "distance_func": {"display_name": "Distance Function", "advanced": True}, + "grpc_port": {"display_name": "gRPC Port", "advanced": True}, + "host": {"display_name": "Host", "advanced": True}, + "https": {"display_name": "HTTPS", "advanced": True}, + "location": {"display_name": "Location", "advanced": True}, + "metadata_payload_key": {"display_name": "Metadata Payload Key", "advanced": True}, + "path": {"display_name": "Path", "advanced": True}, + "port": {"display_name": "Port", "advanced": True}, + "prefer_grpc": {"display_name": "Prefer gRPC", "advanced": True}, + "prefix": {"display_name": "Prefix", "advanced": True}, + "search_kwargs": {"display_name": "Search Kwargs", "advanced": True}, + "timeout": {"display_name": "Timeout", "advanced": True}, + "url": {"display_name": "URL", "advanced": True}, + } + + def build( + self, + embedding: Embeddings, + documents: List[Document], + api_key: Optional[str] = None, + collection_name: Optional[str] = None, + content_payload_key: str = "page_content", + distance_func: str = "Cosine", + grpc_port: Optional[int] = 6334, + host: Optional[str] = None, + https: bool = False, + location: str = ":memory:", + metadata_payload_key: str = "metadata", + path: Optional[str] = None, + port: Optional[int] = 6333, + prefer_grpc: bool = False, + prefix: Optional[str] = None, + search_kwargs: Optional[NestedDict] = None, + timeout: Optional[float] = None, + url: Optional[str] = None, + ) -> Union[VectorStore, Qdrant, BaseRetriever]: + return Qdrant.from_documents( + documents=documents, + embedding=embedding, + api_key=api_key, + collection_name=collection_name, + content_payload_key=content_payload_key, + distance_func=distance_func, + grpc_port=grpc_port, + host=host, + https=https, + location=location, + metadata_payload_key=metadata_payload_key, + path=path, + port=port, + prefer_grpc=prefer_grpc, + prefix=prefix, + search_kwargs=search_kwargs, + timeout=timeout, + url=url, + ) diff --git a/src/backend/langflow/components/vectorstores/Redis.py b/src/backend/langflow/components/vectorstores/Redis.py index f13428829..6a4e9db2a 100644 --- a/src/backend/langflow/components/vectorstores/Redis.py +++ b/src/backend/langflow/components/vectorstores/Redis.py @@ -1,10 +1,10 @@ from typing import Optional -from langflow import CustomComponent -from langchain.vectorstores.redis import Redis -from langchain.schema import Document -from langchain.vectorstores.base import VectorStore from langchain.embeddings.base import Embeddings +from langchain.schema import Document +from langchain_community.vectorstores import VectorStore +from langchain_community.vectorstores.redis import Redis +from langflow import CustomComponent class RedisComponent(CustomComponent): diff --git a/src/backend/langflow/components/vectorstores/SupabaseVectorStore.py b/src/backend/langflow/components/vectorstores/SupabaseVectorStore.py new file mode 100644 index 000000000..2ec6dfabc --- /dev/null +++ b/src/backend/langflow/components/vectorstores/SupabaseVectorStore.py @@ -0,0 +1,44 @@ +from typing import List, Union + +from langchain.schema import BaseRetriever +from langchain_community.vectorstores import VectorStore +from langchain_community.vectorstores.supabase import SupabaseVectorStore +from langflow import CustomComponent +from langflow.field_typing import Document, Embeddings, NestedDict +from supabase.client import Client, create_client + + +class SupabaseComponent(CustomComponent): + display_name = "Supabase" + description = "Return VectorStore initialized from texts and embeddings." + + def build_config(self): + return { + "documents": {"display_name": "Documents"}, + "embedding": {"display_name": "Embedding"}, + "query_name": {"display_name": "Query Name"}, + "search_kwargs": {"display_name": "Search Kwargs", "advanced": True}, + "supabase_service_key": {"display_name": "Supabase Service Key"}, + "supabase_url": {"display_name": "Supabase URL"}, + "table_name": {"display_name": "Table Name", "advanced": True}, + } + + def build( + self, + embedding: Embeddings, + documents: List[Document], + query_name: str = "", + search_kwargs: NestedDict = {}, + supabase_service_key: str = "", + supabase_url: str = "", + table_name: str = "", + ) -> Union[VectorStore, SupabaseVectorStore, BaseRetriever]: + supabase: Client = create_client(supabase_url, supabase_key=supabase_service_key) + return SupabaseVectorStore.from_documents( + documents=documents, + embedding=embedding, + query_name=query_name, + search_kwargs=search_kwargs, + client=supabase, + table_name=table_name, + ) diff --git a/src/backend/langflow/components/vectorstores/Vectara.py b/src/backend/langflow/components/vectorstores/Vectara.py index e3555e6f1..af828c49e 100644 --- a/src/backend/langflow/components/vectorstores/Vectara.py +++ b/src/backend/langflow/components/vectorstores/Vectara.py @@ -1,14 +1,13 @@ -from typing import Optional, Union, List -from langflow import CustomComponent import tempfile -import urllib.request import urllib +import urllib.request +from typing import List, Optional, Union -from langchain.vectorstores import Vectara -from langchain.schema import Document -from langchain.vectorstores.base import VectorStore -from langchain.schema import BaseRetriever from langchain.embeddings import FakeEmbeddings +from langchain.schema import BaseRetriever, Document +from langchain_community.vectorstores import Vectara, VectorStore + +from langflow import CustomComponent class VectaraComponent(CustomComponent): diff --git a/src/backend/langflow/components/vectorstores/Weaviate.py b/src/backend/langflow/components/vectorstores/Weaviate.py index bab1322f7..9b4967c36 100644 --- a/src/backend/langflow/components/vectorstores/Weaviate.py +++ b/src/backend/langflow/components/vectorstores/Weaviate.py @@ -1,12 +1,11 @@ -import weaviate # type: ignore from typing import Optional, Union -from langflow import CustomComponent -from langchain.vectorstores import Weaviate -from langchain.schema import Document -from langchain.vectorstores.base import VectorStore -from langchain.schema import BaseRetriever +import weaviate # type: ignore from langchain.embeddings.base import Embeddings +from langchain.schema import BaseRetriever, Document +from langchain_community.vectorstores import VectorStore, Weaviate + +from langflow import CustomComponent class WeaviateVectorStore(CustomComponent): @@ -45,7 +44,7 @@ class WeaviateVectorStore(CustomComponent): search_by_text: bool = False, api_key: Optional[str] = None, index_name: Optional[str] = None, - text_key: Optional[str] = "text", + text_key: str = "text", embedding: Optional[Embeddings] = None, documents: Optional[Document] = None, attributes: Optional[list] = None, diff --git a/src/backend/langflow/components/vectorstores/pgvector.py b/src/backend/langflow/components/vectorstores/pgvector.py index 4e0c2eb4d..786629dd0 100644 --- a/src/backend/langflow/components/vectorstores/pgvector.py +++ b/src/backend/langflow/components/vectorstores/pgvector.py @@ -1,10 +1,10 @@ -from typing import Optional, List -from langflow import CustomComponent +from typing import List, Optional -from langchain.vectorstores.pgvector import PGVector -from langchain.schema import Document -from langchain.vectorstores.base import VectorStore from langchain.embeddings.base import Embeddings +from langchain.schema import Document +from langchain_community.vectorstores import VectorStore +from langchain_community.vectorstores.pgvector import PGVector +from langflow import CustomComponent class PostgresqlVectorComponent(CustomComponent): diff --git a/src/backend/langflow/field_typing/constants.py b/src/backend/langflow/field_typing/constants.py index 4a478bfec..ed0c0e442 100644 --- a/src/backend/langflow/field_typing/constants.py +++ b/src/backend/langflow/field_typing/constants.py @@ -12,7 +12,7 @@ from langchain.schema.language_model import BaseLanguageModel from langchain.schema.memory import BaseMemory from langchain.text_splitter import TextSplitter from langchain.tools import Tool -from langchain.vectorstores.base import VectorStore +from langchain_community.vectorstores import VectorStore # Type alias for more complex dicts NestedDict = Dict[str, Union[str, Dict]] diff --git a/src/backend/langflow/graph/graph/constants.py b/src/backend/langflow/graph/graph/constants.py index b18761de8..f85761ed4 100644 --- a/src/backend/langflow/graph/graph/constants.py +++ b/src/backend/langflow/graph/graph/constants.py @@ -12,7 +12,6 @@ from langflow.interface.retrievers.base import retriever_creator from langflow.interface.text_splitters.base import textsplitter_creator from langflow.interface.toolkits.base import toolkits_creator from langflow.interface.tools.base import tool_creator -from langflow.interface.vector_store.base import vectorstore_creator from langflow.interface.wrappers.base import wrapper_creator from langflow.utils.lazy_load import LazyLoadDictBase @@ -45,7 +44,7 @@ class VertexTypesDict(LazyLoadDictBase): **{t: types.LLMVertex for t in llm_creator.to_list()}, **{t: types.MemoryVertex for t in memory_creator.to_list()}, **{t: types.EmbeddingVertex for t in embedding_creator.to_list()}, - **{t: types.VectorStoreVertex for t in vectorstore_creator.to_list()}, + # **{t: types.VectorStoreVertex for t in vectorstore_creator.to_list()}, **{t: types.DocumentLoaderVertex for t in documentloader_creator.to_list()}, **{t: types.TextSplitterVertex for t in textsplitter_creator.to_list()}, **{t: types.OutputParserVertex for t in output_parser_creator.to_list()}, diff --git a/src/backend/langflow/interface/agents/custom.py b/src/backend/langflow/interface/agents/custom.py index 5df96e584..608a98a9b 100644 --- a/src/backend/langflow/interface/agents/custom.py +++ b/src/backend/langflow/interface/agents/custom.py @@ -2,14 +2,10 @@ from typing import Any, Optional from langchain.agents import AgentExecutor, ZeroShotAgent from langchain.agents.agent_toolkits import ( - SQLDatabaseToolkit, VectorStoreInfo, VectorStoreRouterToolkit, VectorStoreToolkit, ) -from langchain.agents.agent_toolkits.json.prompt import JSON_PREFIX, JSON_SUFFIX -from langchain.agents.agent_toolkits.json.toolkit import JsonToolkit -from langchain.agents.agent_toolkits.sql.prompt import SQL_PREFIX, SQL_SUFFIX from langchain.agents.agent_toolkits.vectorstore.prompt import PREFIX as VECTORSTORE_PREFIX from langchain.agents.agent_toolkits.vectorstore.prompt import ROUTER_PREFIX as VECTORSTORE_ROUTER_PREFIX from langchain.agents.mrkl.prompt import FORMAT_INSTRUCTIONS @@ -17,9 +13,14 @@ from langchain.base_language import BaseLanguageModel from langchain.chains.llm import LLMChain from langchain.sql_database import SQLDatabase from langchain.tools.sql_database.prompt import QUERY_CHECKER +from langchain_community.agent_toolkits import SQLDatabaseToolkit +from langchain_community.agent_toolkits.json.prompt import JSON_PREFIX, JSON_SUFFIX +from langchain_community.agent_toolkits.json.toolkit import JsonToolkit +from langchain_community.agent_toolkits.sql.prompt import SQL_PREFIX, SQL_SUFFIX from langchain_experimental.agents.agent_toolkits.pandas.prompt import PREFIX as PANDAS_PREFIX from langchain_experimental.agents.agent_toolkits.pandas.prompt import SUFFIX_WITH_DF as PANDAS_SUFFIX from langchain_experimental.tools.python.tool import PythonAstREPLTool + from langflow.interface.base import CustomAgentExecutor diff --git a/src/backend/langflow/interface/custom/directory_reader/directory_reader.py b/src/backend/langflow/interface/custom/directory_reader/directory_reader.py index 9c50e0181..d6cca5c83 100644 --- a/src/backend/langflow/interface/custom/directory_reader/directory_reader.py +++ b/src/backend/langflow/interface/custom/directory_reader/directory_reader.py @@ -66,18 +66,18 @@ class DirectoryReader: def filter_loaded_components(self, data: dict, with_errors: bool) -> dict: from langflow.interface.custom.utils import build_component - items = [ - { - "name": menu["name"], - "path": menu["path"], - "components": [ - (*build_component(component), component) - for component in menu["components"] - if (component["error"] if with_errors else not component["error"]) - ], - } - for menu in data["menu"] - ] + items = [] + for menu in data["menu"]: + components = [] + for component in menu["components"]: + try: + if component["error"] if with_errors else not component["error"]: + component_tuple = (*build_component(component), component) + components.append(component_tuple) + except Exception as e: + logger.error(f"Error while loading component: {e}") + continue + items.append({"name": menu["name"], "path": menu["path"], "components": components}) filtered = [menu for menu in items if menu["components"]] logger.debug(f'Filtered components {"with errors" if with_errors else ""}: {len(filtered)}') return {"menu": filtered} diff --git a/src/backend/langflow/interface/custom_lists.py b/src/backend/langflow/interface/custom_lists.py index 80a46c856..3cff26099 100644 --- a/src/backend/langflow/interface/custom_lists.py +++ b/src/backend/langflow/interface/custom_lists.py @@ -1,9 +1,10 @@ import inspect from typing import Any -from langchain import document_loaders, embeddings, llms, memory, requests, text_splitter -from langchain.agents import agent_toolkits -from langchain.chat_models import AzureChatOpenAI, ChatAnthropic, ChatOpenAI, ChatVertexAI +from langchain import llms, memory, requests, text_splitter +from langchain_community.chat_models import AzureChatOpenAI, ChatAnthropic, ChatOpenAI, ChatVertexAI +from langchain_community import agent_toolkits, document_loaders, embeddings + from langflow.interface.agents.custom import CUSTOM_AGENTS from langflow.interface.chains.custom import CUSTOM_CHAINS from langflow.interface.importing.utils import import_class @@ -24,14 +25,14 @@ llm_type_to_cls_dict["vertexai-chat"] = ChatVertexAI # type: ignore # Toolkits toolkit_type_to_loader_dict: dict[str, Any] = { - toolkit_name: import_class(f"langchain.agents.agent_toolkits.{toolkit_name}") + toolkit_name: import_class(f"langchain_community.agent_toolkits.{toolkit_name}") # if toolkit_name is lower case it is a loader for toolkit_name in agent_toolkits.__all__ if toolkit_name.islower() } toolkit_type_to_cls_dict: dict[str, Any] = { - toolkit_name: import_class(f"langchain.agents.agent_toolkits.{toolkit_name}") + toolkit_name: import_class(f"langchain_community.agent_toolkits.{toolkit_name}") # if toolkit_name is not lower case it is a class for toolkit_name in agent_toolkits.__all__ if not toolkit_name.islower() @@ -47,13 +48,14 @@ wrapper_type_to_cls_dict: dict[str, Any] = {wrapper.__name__: wrapper for wrappe # Embeddings embedding_type_to_cls_dict: dict[str, Any] = { - embedding_name: import_class(f"langchain.embeddings.{embedding_name}") for embedding_name in embeddings.__all__ + embedding_name: import_class(f"langchain_community.embeddings.{embedding_name}") + for embedding_name in embeddings.__all__ } # Document Loaders documentloaders_type_to_cls_dict: dict[str, Any] = { - documentloader_name: import_class(f"langchain.document_loaders.{documentloader_name}") + documentloader_name: import_class(f"langchain_community.document_loaders.{documentloader_name}") for documentloader_name in document_loaders.__all__ } diff --git a/src/backend/langflow/interface/importing/utils.py b/src/backend/langflow/interface/importing/utils.py index f3276d952..9d7305f16 100644 --- a/src/backend/langflow/interface/importing/utils.py +++ b/src/backend/langflow/interface/importing/utils.py @@ -6,9 +6,9 @@ from typing import Any, Type from langchain.agents import Agent from langchain.base_language import BaseLanguageModel from langchain.chains.base import Chain -from langchain.chat_models.base import BaseChatModel from langchain.prompts import PromptTemplate from langchain.tools import BaseTool +from langchain_core.language_models.chat_models import BaseChatModel from langflow.interface.custom.custom_component import CustomComponent from langflow.interface.wrappers.base import wrapper_creator from langflow.utils import validate @@ -71,7 +71,7 @@ def import_output_parser(output_parser: str) -> Any: def import_chat_llm(llm: str) -> BaseChatModel: """Import chat llm from llm name""" - return import_class(f"langchain.chat_models.{llm}") + return import_class(f"langchain_community.chat_models.{llm}") def import_retriever(retriever: str) -> Any: @@ -148,17 +148,17 @@ def import_chain(chain: str) -> Type[Chain]: def import_embedding(embedding: str) -> Any: """Import embedding from embedding name""" - return import_class(f"langchain.embeddings.{embedding}") + return import_class(f"langchain_community.embeddings.{embedding}") def import_vectorstore(vectorstore: str) -> Any: """Import vectorstore from vectorstore name""" - return import_class(f"langchain.vectorstores.{vectorstore}") + return import_class(f"langchain_community.vectorstores.{vectorstore}") def import_documentloader(documentloader: str) -> Any: """Import documentloader from documentloader name""" - return import_class(f"langchain.document_loaders.{documentloader}") + return import_class(f"langchain_community.document_loaders.{documentloader}") def import_textsplitter(textsplitter: str) -> Any: @@ -169,8 +169,8 @@ def import_textsplitter(textsplitter: str) -> Any: def import_utility(utility: str) -> Any: """Import utility from utility name""" if utility == "SQLDatabase": - return import_class(f"langchain.sql_database.{utility}") - return import_class(f"langchain.utilities.{utility}") + return import_class(f"langchain_community.sql_database.{utility}") + return import_class(f"langchain_community.utilities.{utility}") def get_function(code): diff --git a/src/backend/langflow/interface/initialize/loading.py b/src/backend/langflow/interface/initialize/loading.py index d09c239d6..f273af6ae 100644 --- a/src/backend/langflow/interface/initialize/loading.py +++ b/src/backend/langflow/interface/initialize/loading.py @@ -10,7 +10,7 @@ from langchain.agents.tools import BaseTool from langchain.chains.base import Chain from langchain.document_loaders.base import BaseLoader from langchain.schema import Document -from langchain.vectorstores.base import VectorStore +from langchain_community.vectorstores import VectorStore from loguru import logger from pydantic import ValidationError diff --git a/src/backend/langflow/interface/initialize/vector_store.py b/src/backend/langflow/interface/initialize/vector_store.py index a0adf85e3..0163cdcc3 100644 --- a/src/backend/langflow/interface/initialize/vector_store.py +++ b/src/backend/langflow/interface/initialize/vector_store.py @@ -1,18 +1,18 @@ -from typing import Any, Callable, Dict, Type -from langchain.vectorstores import ( - Pinecone, - ElasticsearchStore, - Qdrant, - Chroma, - FAISS, - Weaviate, - SupabaseVectorStore, - MongoDBAtlasVectorSearch, -) -from langchain.schema import Document import os +from typing import Any, Callable, Dict, Type import orjson +from langchain.schema import Document +from langchain_community.vectorstores import ( + FAISS, + Chroma, + ElasticsearchStore, + MongoDBAtlasVectorSearch, + Pinecone, + Qdrant, + SupabaseVectorStore, + Weaviate, +) def docs_in_params(params: dict) -> bool: @@ -27,8 +27,8 @@ def initialize_mongodb(class_object: Type[MongoDBAtlasVectorSearch], params: dic MONGODB_ATLAS_CLUSTER_URI = params.pop("mongodb_atlas_cluster_uri") if not MONGODB_ATLAS_CLUSTER_URI: raise ValueError("Mongodb atlas cluster uri must be provided in the params") - from pymongo import MongoClient import certifi + from pymongo import MongoClient client: MongoClient = MongoClient(MONGODB_ATLAS_CLUSTER_URI, tlsCAFile=certifi.where()) db_name = params.pop("db_name", None) diff --git a/src/backend/langflow/interface/retrievers/base.py b/src/backend/langflow/interface/retrievers/base.py index 2439708a3..a6813e76c 100644 --- a/src/backend/langflow/interface/retrievers/base.py +++ b/src/backend/langflow/interface/retrievers/base.py @@ -1,14 +1,12 @@ from typing import Any, ClassVar, Dict, List, Optional, Type -from langchain import retrievers - +from langchain_community import retrievers from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class from langflow.services.deps import get_settings_service - from langflow.template.frontend_node.retrievers import RetrieverFrontendNode +from langflow.utils.util import build_template_from_class, build_template_from_method from loguru import logger -from langflow.utils.util import build_template_from_method, build_template_from_class class RetrieverCreator(LangChainTypeCreator): @@ -27,7 +25,7 @@ class RetrieverCreator(LangChainTypeCreator): def type_to_loader_dict(self) -> Dict: if self.type_dict is None: self.type_dict: dict[str, Any] = { - retriever_name: import_class(f"langchain.retrievers.{retriever_name}") + retriever_name: import_class(f"langchain_community.retrievers.{retriever_name}") for retriever_name in retrievers.__all__ } return self.type_dict diff --git a/src/backend/langflow/interface/tools/constants.py b/src/backend/langflow/interface/tools/constants.py index dc1bfe0c1..0ac37a0a4 100644 --- a/src/backend/langflow/interface/tools/constants.py +++ b/src/backend/langflow/interface/tools/constants.py @@ -1,18 +1,9 @@ from langchain import tools from langchain.agents import Tool -from langchain.agents.load_tools import ( - _BASE_TOOLS, - _EXTRA_LLM_TOOLS, - _EXTRA_OPTIONAL_TOOLS, - _LLM_TOOLS, -) +from langchain.agents.load_tools import _BASE_TOOLS, _EXTRA_LLM_TOOLS, _EXTRA_OPTIONAL_TOOLS, _LLM_TOOLS from langchain.tools.json.tool import JsonSpec - from langflow.interface.importing.utils import import_class -from langflow.interface.tools.custom import ( - PythonFunctionTool, - PythonFunction, -) +from langflow.interface.tools.custom import PythonFunction, PythonFunctionTool FILE_TOOLS = {"JsonSpec": JsonSpec} CUSTOM_TOOLS = { @@ -21,7 +12,7 @@ CUSTOM_TOOLS = { "PythonFunction": PythonFunction, } -OTHER_TOOLS = {tool: import_class(f"langchain.tools.{tool}") for tool in tools.__all__} +OTHER_TOOLS = {tool: import_class(f"langchain_community.tools.{tool}") for tool in tools.__all__} ALL_TOOLS_NAMES = { **_BASE_TOOLS, diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py index 7f44be3ec..39c68889f 100644 --- a/src/backend/langflow/interface/types.py +++ b/src/backend/langflow/interface/types.py @@ -1,4 +1,5 @@ from cachetools import LRUCache, cached + from langflow.interface.agents.base import agent_creator from langflow.interface.chains.base import chain_creator from langflow.interface.custom.directory_reader.utils import merge_nested_dicts_with_renaming @@ -14,7 +15,6 @@ from langflow.interface.text_splitters.base import textsplitter_creator from langflow.interface.toolkits.base import toolkits_creator from langflow.interface.tools.base import tool_creator from langflow.interface.utilities.base import utility_creator -from langflow.interface.vector_store.base import vectorstore_creator from langflow.interface.wrappers.base import wrapper_creator @@ -46,7 +46,7 @@ def build_langchain_types_dict(): # sourcery skip: dict-assign-update-to-union toolkits_creator, wrapper_creator, embedding_creator, - vectorstore_creator, + # vectorstore_creator, documentloader_creator, textsplitter_creator, utility_creator, diff --git a/src/backend/langflow/interface/utilities/base.py b/src/backend/langflow/interface/utilities/base.py index cfebf83a4..0a58ef1bc 100644 --- a/src/backend/langflow/interface/utilities/base.py +++ b/src/backend/langflow/interface/utilities/base.py @@ -1,6 +1,6 @@ from typing import Dict, List, Optional, Type -from langchain import utilities +from langchain_community import utilities from loguru import logger from langflow.custom.customs import get_custom_nodes @@ -30,7 +30,7 @@ class UtilityCreator(LangChainTypeCreator): self.type_dict = {} for utility_name in utilities.__all__: try: - imported = import_class(f"langchain.utilities.{utility_name}") + imported = import_class(f"langchain_community.utilities.{utility_name}") self.type_dict[utility_name] = imported except Exception: pass diff --git a/src/backend/langflow/interface/vector_store/base.py b/src/backend/langflow/interface/vector_store/base.py index d04689469..893c78fca 100644 --- a/src/backend/langflow/interface/vector_store/base.py +++ b/src/backend/langflow/interface/vector_store/base.py @@ -1,13 +1,12 @@ from typing import Any, Dict, List, Optional, Type from langchain import vectorstores +from loguru import logger from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class from langflow.services.deps import get_settings_service - from langflow.template.frontend_node.vectorstores import VectorStoreFrontendNode -from loguru import logger from langflow.utils.util import build_template_from_method @@ -22,7 +21,7 @@ class VectorstoreCreator(LangChainTypeCreator): def type_to_loader_dict(self) -> Dict: if self.type_dict is None: self.type_dict: dict[str, Any] = { - vectorstore_name: import_class(f"langchain.vectorstores.{vectorstore_name}") + vectorstore_name: import_class(f"langchain_community.vectorstores.{vectorstore_name}") for vectorstore_name in vectorstores.__all__ } return self.type_dict diff --git a/src/backend/langflow/interface/wrappers/base.py b/src/backend/langflow/interface/wrappers/base.py index 38d61af78..469559ad9 100644 --- a/src/backend/langflow/interface/wrappers/base.py +++ b/src/backend/langflow/interface/wrappers/base.py @@ -1,9 +1,9 @@ from typing import ClassVar, Dict, List, Optional -from langchain.utilities import requests, sql_database +from langchain_community.utilities import requests, sql_database +from loguru import logger from langflow.interface.base import LangChainTypeCreator -from loguru import logger from langflow.utils.util import build_template_from_class, build_template_from_method diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py index 600ca2a0c..6a12fa00e 100644 --- a/src/backend/langflow/processing/process.py +++ b/src/backend/langflow/processing/process.py @@ -4,7 +4,7 @@ from typing import Any, Coroutine, Dict, List, Optional, Tuple, Union from langchain.agents import AgentExecutor from langchain.chains.base import Chain from langchain.schema import AgentAction, Document -from langchain.vectorstores.base import VectorStore +from langchain_community.vectorstores import VectorStore from langchain_core.messages import AIMessage from langchain_core.runnables.base import Runnable from langflow.graph.graph.base import Graph diff --git a/src/backend/langflow/utils/constants.py b/src/backend/langflow/utils/constants.py index b2d00f8e6..0704f2ec9 100644 --- a/src/backend/langflow/utils/constants.py +++ b/src/backend/langflow/utils/constants.py @@ -68,110 +68,110 @@ LOADERS_INFO: List[Dict[str, Any]] = [ { "loader": "AirbyteJSONLoader", "name": "Airbyte JSON (.jsonl)", - "import": "langchain.document_loaders.AirbyteJSONLoader", + "import": "langchain_community.document_loaders.AirbyteJSONLoader", "defaultFor": ["jsonl"], "allowdTypes": ["jsonl"], }, { "loader": "JSONLoader", "name": "JSON (.json)", - "import": "langchain.document_loaders.JSONLoader", + "import": "langchain_community.document_loaders.JSONLoader", "defaultFor": ["json"], "allowdTypes": ["json"], }, { "loader": "BSHTMLLoader", "name": "BeautifulSoup4 HTML (.html, .htm)", - "import": "langchain.document_loaders.BSHTMLLoader", + "import": "langchain_community.document_loaders.BSHTMLLoader", "allowdTypes": ["html", "htm"], }, { "loader": "CSVLoader", "name": "CSV (.csv)", - "import": "langchain.document_loaders.CSVLoader", + "import": "langchain_community.document_loaders.CSVLoader", "defaultFor": ["csv"], "allowdTypes": ["csv"], }, { "loader": "CoNLLULoader", "name": "CoNLL-U (.conllu)", - "import": "langchain.document_loaders.CoNLLULoader", + "import": "langchain_community.document_loaders.CoNLLULoader", "defaultFor": ["conllu"], "allowdTypes": ["conllu"], }, { "loader": "EverNoteLoader", "name": "EverNote (.enex)", - "import": "langchain.document_loaders.EverNoteLoader", + "import": "langchain_community.document_loaders.EverNoteLoader", "defaultFor": ["enex"], "allowdTypes": ["enex"], }, { "loader": "FacebookChatLoader", "name": "Facebook Chat (.json)", - "import": "langchain.document_loaders.FacebookChatLoader", + "import": "langchain_community.document_loaders.FacebookChatLoader", "allowdTypes": ["json"], }, { "loader": "OutlookMessageLoader", "name": "Outlook Message (.msg)", - "import": "langchain.document_loaders.OutlookMessageLoader", + "import": "langchain_community.document_loaders.OutlookMessageLoader", "defaultFor": ["msg"], "allowdTypes": ["msg"], }, { "loader": "PyPDFLoader", "name": "PyPDF (.pdf)", - "import": "langchain.document_loaders.PyPDFLoader", + "import": "langchain_community.document_loaders.PyPDFLoader", "defaultFor": ["pdf"], "allowdTypes": ["pdf"], }, { "loader": "STRLoader", "name": "Subtitle (.str)", - "import": "langchain.document_loaders.STRLoader", + "import": "langchain_community.document_loaders.STRLoader", "defaultFor": ["str"], "allowdTypes": ["str"], }, { "loader": "TextLoader", "name": "Text (.txt)", - "import": "langchain.document_loaders.TextLoader", + "import": "langchain_community.document_loaders.TextLoader", "defaultFor": ["txt"], "allowdTypes": ["txt"], }, { "loader": "UnstructuredEmailLoader", "name": "Unstructured Email (.eml)", - "import": "langchain.document_loaders.UnstructuredEmailLoader", + "import": "langchain_community.document_loaders.UnstructuredEmailLoader", "defaultFor": ["eml"], "allowdTypes": ["eml"], }, { "loader": "UnstructuredHTMLLoader", "name": "Unstructured HTML (.html, .htm)", - "import": "langchain.document_loaders.UnstructuredHTMLLoader", + "import": "langchain_community.document_loaders.UnstructuredHTMLLoader", "defaultFor": ["html", "htm"], "allowdTypes": ["html", "htm"], }, { "loader": "UnstructuredMarkdownLoader", "name": "Unstructured Markdown (.md)", - "import": "langchain.document_loaders.UnstructuredMarkdownLoader", + "import": "langchain_community.document_loaders.UnstructuredMarkdownLoader", "defaultFor": ["md"], "allowdTypes": ["md"], }, { "loader": "UnstructuredPowerPointLoader", "name": "Unstructured PowerPoint (.pptx)", - "import": "langchain.document_loaders.UnstructuredPowerPointLoader", + "import": "langchain_community.document_loaders.UnstructuredPowerPointLoader", "defaultFor": ["pptx"], "allowdTypes": ["pptx"], }, { "loader": "UnstructuredWordLoader", "name": "Unstructured Word (.docx)", - "import": "langchain.document_loaders.UnstructuredWordLoader", + "import": "langchain_community.document_loaders.UnstructuredWordLoader", "defaultFor": ["docx"], "allowdTypes": ["docx"], }, diff --git a/src/frontend/tests/custom_component_full.ts b/src/frontend/tests/custom_component_full.ts index 443c3fd85..be24deba3 100644 --- a/src/frontend/tests/custom_component_full.ts +++ b/src/frontend/tests/custom_component_full.ts @@ -4,7 +4,7 @@ from langchain.llms.base import BaseLLM from langchain.chains import LLMChain from langchain.prompts import PromptTemplate from langchain.schema import Document -from langchain.field_typing import NestedDict +from langflow.field_typing import NestedDict import requests diff --git a/tests/locust/locustfile.py b/tests/locust/locustfile.py index 1fc91ee2c..856e3f6dd 100644 --- a/tests/locust/locustfile.py +++ b/tests/locust/locustfile.py @@ -1,11 +1,12 @@ -from locust import FastHttpUser, task, between import random import time -import orjson -from rich import print -import httpx from pathlib import Path +import httpx +import orjson +from locust import FastHttpUser, between, task +from rich import print + class NameTest(FastHttpUser): wait_time = between(1, 5) @@ -13,7 +14,7 @@ class NameTest(FastHttpUser): with open("names.txt", "r") as file: names = [line.strip() for line in file.readlines()] - headers = {} + headers: dict = {} def poll_task(self, task_id, sleep_time=1): while True: diff --git a/tests/test_agents_template.py b/tests/test_agents_template.py deleted file mode 100644 index e354d4a16..000000000 --- a/tests/test_agents_template.py +++ /dev/null @@ -1,269 +0,0 @@ -from fastapi.testclient import TestClient - - -def test_zero_shot_agent(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - agents = json_response["agents"] - - zero_shot_agent = agents["ZeroShotAgent"] - assert set(zero_shot_agent["base_classes"]) == { - "ZeroShotAgent", - "BaseSingleActionAgent", - "Agent", - "function", - } - template = zero_shot_agent["template"] - - assert template["tools"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "tools", - "type": "BaseTool", - "list": True, - "advanced": False, - "info": "", - } - - # Additional assertions for other template variables - assert template["callback_manager"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "callback_manager", - "type": "BaseCallbackManager", - "list": False, - "advanced": False, - "info": "", - } - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - assert template["output_parser"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "output_parser", - "type": "AgentOutputParser", - "list": False, - "advanced": False, - "info": "", - } - assert template["input_variables"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "input_variables", - "type": "str", - "list": True, - "advanced": False, - "info": "", - } - assert template["prefix"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": True, - "value": "Answer the following questions as best you can. You have access to the following tools:", - "password": False, - "name": "prefix", - "type": "str", - "list": False, - "advanced": False, - "info": "", - } - assert template["suffix"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": True, - "value": "Begin!\n\nQuestion: {input}\nThought:{agent_scratchpad}", - "password": False, - "name": "suffix", - "type": "str", - "list": False, - "advanced": False, - "info": "", - } - - -def test_json_agent(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - agents = json_response["agents"] - - json_agent = agents["JsonAgent"] - assert json_agent["base_classes"] == ["AgentExecutor"] - template = json_agent["template"] - - assert template["toolkit"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "toolkit", - "type": "BaseToolkit", - "list": False, - "advanced": False, - "info": "", - } - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "display_name": "LLM", - "info": "", - } - - -def test_csv_agent(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - agents = json_response["agents"] - - csv_agent = agents["CSVAgent"] - assert csv_agent["base_classes"] == ["AgentExecutor"] - template = csv_agent["template"] - - assert template["path"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "", - "suffixes": [".csv"], - "fileTypes": ["csv"], - "password": False, - "name": "path", - "type": "file", - "list": False, - "file_path": None, - "advanced": False, - "info": "", - } - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "display_name": "LLM", - "info": "", - } - - -def test_initialize_agent(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - agents = json_response["agents"] - - initialize_agent = agents["AgentInitializer"] - assert initialize_agent["base_classes"] == ["AgentExecutor", "function"] - template = initialize_agent["template"] - - assert template["agent"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "zero-shot-react-description", - "password": False, - "options": [ - "zero-shot-react-description", - "react-docstore", - "self-ask-with-search", - "conversational-react-description", - "openai-functions", - "openai-multi-functions", - ], - "name": "agent", - "type": "str", - "list": True, - "advanced": False, - "info": "", - } - assert template["memory"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "memory", - "type": "BaseChatMemory", - "list": False, - "advanced": False, - "info": "", - } - assert template["tools"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "tools", - "type": "Tool", - "list": True, - "advanced": False, - "info": "", - } - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "display_name": "LLM", - "info": "", - } diff --git a/tests/test_chains_template.py b/tests/test_chains_template.py deleted file mode 100644 index 970c0f315..000000000 --- a/tests/test_chains_template.py +++ /dev/null @@ -1,437 +0,0 @@ -from fastapi.testclient import TestClient - -# def test_chains_settings(client: TestClient, logged_in_headers): -# response = client.get("api/v1/all", headers=logged_in_headers) -# assert response.status_code == 200 -# json_response = response.json() -# chains = json_response["chains"] -# assert set(chains.keys()) == set(settings.chains) - - -# Test the ConversationChain object -def test_conversation_chain(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - chains = json_response["chains"] - - chain = chains["ConversationChain"] - # Test the base classes, template, memory, verbose, llm, input_key, output_key, and _type objects - assert set(chain["base_classes"]) == {"Callable", "Chain"} - - template = chain["template"] - assert template["memory"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "memory", - "type": "BaseMemory", - "list": False, - "advanced": False, - "info": "", - } - assert template["verbose"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "verbose", - "type": "bool", - "list": False, - "advanced": True, - "info": "", - } - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - assert template["input_key"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "input", - "password": False, - "name": "input_key", - "type": "str", - "list": False, - "advanced": True, - "info": "", - } - assert template["output_key"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "response", - "password": False, - "name": "output_key", - "type": "str", - "list": False, - "advanced": True, - "info": "", - } - assert template["_type"] == "ConversationChain" - - # Test the description object - assert chain["description"] == "Chain to have a conversation and load context from memory." - - -def test_llm_chain(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - chains = json_response["chains"] - chain = chains["LLMChain"] - - # Test the base classes, template, memory, verbose, llm, input_key, output_key, and _type objects - assert set(chain["base_classes"]) == {"function", "LLMChain", "Chain", "Text"} - - template = chain["template"] - assert template["memory"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "memory", - "type": "BaseMemory", - "list": False, - "advanced": False, - "info": "", - } - assert template["verbose"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": False, - "password": False, - "name": "verbose", - "type": "bool", - "list": False, - "advanced": True, - "info": "", - } - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - assert template["output_key"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "text", - "password": False, - "name": "output_key", - "type": "str", - "list": False, - "advanced": True, - "info": "", - } - - -def test_llm_checker_chain(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - chains = json_response["chains"] - chain = chains["LLMCheckerChain"] - - # Test the base classes, template, memory, verbose, llm, input_key, output_key, and _type objects - assert set(chain["base_classes"]) == { - "function", - "LLMCheckerChain", - "Chain", - "Text", - } - - template = chain["template"] - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - assert template["_type"] == "LLMCheckerChain" - - # Test the description object - assert chain["description"] == "" - - -def test_llm_math_chain(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - chains = json_response["chains"] - - chain = chains["LLMMathChain"] - # Test the base classes, template, memory, verbose, llm, input_key, output_key, and _type objects - assert set(chain["base_classes"]) == {"function", "LLMMathChain", "Chain", "Text"} - - template = chain["template"] - assert template["memory"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "memory", - "type": "BaseMemory", - "list": False, - "advanced": False, - "info": "", - } - assert template["verbose"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": False, - "password": False, - "name": "verbose", - "type": "bool", - "list": False, - "advanced": True, - "info": "", - } - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - assert template["input_key"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "question", - "password": False, - "name": "input_key", - "type": "str", - "list": False, - "advanced": True, - "info": "", - } - assert template["output_key"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "answer", - "password": False, - "name": "output_key", - "type": "str", - "list": False, - "advanced": True, - "info": "", - } - assert template["_type"] == "LLMMathChain" - - # Test the description object - assert chain["description"] == "Chain that interprets a prompt and executes python code to do math." - - -def test_series_character_chain(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - chains = json_response["chains"] - - chain = chains["SeriesCharacterChain"] - - # Test the base classes, template, memory, verbose, llm, input_key, output_key, and _type objects - assert set(chain["base_classes"]) == { - "function", - "LLMChain", - "BaseCustomChain", - "Chain", - "ConversationChain", - "SeriesCharacterChain", - } - template = chain["template"] - - assert template["llm"] == { - "required": True, - "dynamic": False, - "display_name": "LLM", - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - assert template["character"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "character", - "type": "str", - "list": False, - "advanced": False, - "info": "", - } - assert template["series"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "series", - "type": "str", - "list": False, - "advanced": False, - "info": "", - } - assert template["_type"] == "SeriesCharacterChain" - - # Test the description object - assert ( - chain["description"] - == "SeriesCharacterChain is a chain you can use to have a conversation with a character from a series." - ) - - -def test_mid_journey_prompt_chain(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - chains = json_response["chains"] - chain = chains["MidJourneyPromptChain"] - assert isinstance(chain, dict) - - # Test the base_classes object - assert set(chain["base_classes"]) == { - "LLMChain", - "BaseCustomChain", - "Chain", - "ConversationChain", - "MidJourneyPromptChain", - } - - # Test the template object - template = chain["template"] - - assert template["llm"] == { - "required": True, - "dynamic": False, - "display_name": "LLM", - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - # Test the description object - assert chain["description"] == "MidJourneyPromptChain is a chain you can use to generate new MidJourney prompts." - - -def test_time_travel_guide_chain(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - chains = json_response["chains"] - chain = chains["TimeTravelGuideChain"] - assert isinstance(chain, dict) - - # Test the base_classes object - assert set(chain["base_classes"]) == { - "LLMChain", - "BaseCustomChain", - "TimeTravelGuideChain", - "Chain", - "ConversationChain", - } - - # Test the template object - template = chain["template"] - - assert template["llm"] == { - "required": True, - "dynamic": False, - "placeholder": "", - "display_name": "LLM", - "show": True, - "multiline": False, - "password": False, - "name": "llm", - "type": "BaseLanguageModel", - "list": False, - "advanced": False, - "info": "", - } - assert template["memory"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "memory", - "type": "BaseChatMemory", - "list": False, - "advanced": False, - "info": "", - } - - assert chain["description"] == "Time travel guide chain." diff --git a/tests/test_llms_template.py b/tests/test_llms_template.py deleted file mode 100644 index d63d1d016..000000000 --- a/tests/test_llms_template.py +++ /dev/null @@ -1,522 +0,0 @@ -from fastapi.testclient import TestClient - - -def test_openai(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - language_models = json_response["llms"] - - model = language_models["OpenAI"] - template = model["template"] - - assert template["cache"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "cache", - "type": "bool", - "list": False, - "advanced": False, - "info": "", - } - assert template["verbose"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "verbose", - "type": "bool", - "list": False, - "advanced": False, - "info": "", - } - assert template["client"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "client", - "type": "Any", - "list": False, - "advanced": False, - "info": "", - } - assert template["model_name"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "text-davinci-003", - "password": False, - "options": [ - "text-davinci-003", - "text-davinci-002", - "text-curie-001", - "text-babbage-001", - "text-ada-001", - ], - "name": "model_name", - "type": "str", - "list": True, - "advanced": False, - "info": "", - } - # Add more assertions for other properties here - assert template["temperature"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": 0.7, - "password": False, - "name": "temperature", - "type": "float", - "list": False, - "advanced": False, - "info": "", - } - assert template["max_tokens"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": 256, - "password": True, - "name": "max_tokens", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - assert template["top_p"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 1, - "password": False, - "name": "top_p", - "type": "float", - "list": False, - "advanced": False, - "info": "", - } - assert template["frequency_penalty"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 0, - "password": False, - "name": "frequency_penalty", - "type": "float", - "list": False, - "advanced": False, - "info": "", - } - assert template["presence_penalty"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 0, - "password": False, - "name": "presence_penalty", - "type": "float", - "list": False, - "advanced": False, - "info": "", - } - assert template["n"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 1, - "password": False, - "name": "n", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - assert template["best_of"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 1, - "password": False, - "name": "best_of", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - assert template["model_kwargs"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "model_kwargs", - "type": "dict", - "list": False, - "advanced": True, - "info": "", - } - assert template["openai_api_key"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "", - "password": True, - "name": "openai_api_key", - "display_name": "OpenAI API Key", - "type": "str", - "list": False, - "advanced": False, - "info": "", - } - assert template["batch_size"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 20, - "password": False, - "name": "batch_size", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - assert template["request_timeout"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "request_timeout", - "type": "float", - "list": False, - "advanced": False, - "info": "", - } - assert template["logit_bias"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "logit_bias", - "type": "dict", - "list": False, - "advanced": False, - "info": "", - } - assert template["max_retries"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 6, - "password": False, - "name": "max_retries", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - assert template["streaming"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": False, - "password": False, - "name": "streaming", - "type": "bool", - "list": False, - "advanced": False, - "info": "", - } - - -def test_chat_open_ai(client: TestClient, logged_in_headers): - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - language_models = json_response["llms"] - - model = language_models["ChatOpenAI"] - template = model["template"] - - assert template["verbose"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": False, - "password": False, - "name": "verbose", - "type": "bool", - "list": False, - "advanced": False, - "info": "", - } - assert template["client"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "client", - "type": "Any", - "list": False, - "advanced": False, - "info": "", - } - assert template["model_name"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "gpt-3.5-turbo-0613", - "password": False, - "options": [ - "gpt-4-1106-preview", - "gpt-4", - "gpt-4-32k", - "gpt-3.5-turbo", - "gpt-3.5-turbo-16k", - ], - "name": "model_name", - "type": "str", - "list": True, - "advanced": False, - "info": "", - } - assert template["temperature"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": 0.7, - "password": False, - "name": "temperature", - "type": "float", - "list": False, - "advanced": False, - "info": "", - } - assert template["model_kwargs"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": False, - "name": "model_kwargs", - "type": "dict", - "list": False, - "advanced": True, - "info": "", - } - assert template["openai_api_key"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "value": "", - "password": True, - "name": "openai_api_key", - "display_name": "OpenAI API Key", - "type": "str", - "list": False, - "advanced": False, - "info": "", - } - assert template["request_timeout"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "password": False, - "name": "request_timeout", - "type": "float", - "list": False, - "advanced": False, - "info": "", - } - assert template["max_retries"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 6, - "password": False, - "name": "max_retries", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - assert template["streaming"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": False, - "password": False, - "name": "streaming", - "type": "bool", - "list": False, - "advanced": False, - "info": "", - } - assert template["n"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": False, - "multiline": False, - "value": 1, - "password": False, - "name": "n", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - - assert template["max_tokens"] == { - "required": False, - "dynamic": False, - "placeholder": "", - "show": True, - "multiline": False, - "password": True, - "name": "max_tokens", - "type": "int", - "list": False, - "advanced": False, - "info": "", - } - assert template["_type"] == "ChatOpenAI" - assert ( - model["description"] == "`OpenAI` Chat large language models API." # noqa E501 - ) - assert set(model["base_classes"]) == { - "BaseLLM", - "BaseChatModel", - "ChatOpenAI", - "BaseLanguageModel", - } - - -# Commenting this out for now, as it requires to activate the nodes -# def test_azure_open_ai(client: TestClient): -# response = client.get("/all") -# assert response.status_code == 200 -# json_response = response.json() -# language_models = json_response["llms"] - -# model = language_models["AzureOpenAI"] -# template = model["template"] - -# assert template["model_name"]["show"] is False -# assert template["deployment_name"] == { -# "required": False, -# "placeholder": "", -# "show": True, -# "multiline": False, -# "value": "", -# "password": False, -# "name": "deployment_name", -# "advanced": False, -# "type": "str", -# "list": False, -# } - - -# def test_azure_chat_open_ai(client: TestClient): -# response = client.get("/all") -# assert response.status_code == 200 -# json_response = response.json() -# language_models = json_response["llms"] - -# model = language_models["AzureChatOpenAI"] -# template = model["template"] - -# assert template["model_name"]["show"] is False -# assert template["deployment_name"] == { -# "required": False, -# "placeholder": "", -# "show": True, -# "multiline": False, -# "value": "", -# "password": False, -# "name": "deployment_name", -# "advanced": False, -# "type": "str", -# "list": False, -# } -# assert template["openai_api_type"] == { -# "required": False, -# "placeholder": "", -# "show": False, -# "multiline": False, -# "value": "azure", -# "password": False, -# "name": "openai_api_type", -# "display_name": "OpenAI API Type", -# "advanced": False, -# "type": "str", -# "list": False, -# } -# assert template["openai_api_version"] == { -# "required": False, -# "placeholder": "", -# "show": True, -# "multiline": False, -# "value": "2023-03-15-preview", -# "password": False, -# "name": "openai_api_version", -# "display_name": "OpenAI API Version", -# "advanced": False, -# "type": "str", -# "list": False, -# } diff --git a/tests/test_vectorstore_template.py b/tests/test_vectorstore_template.py deleted file mode 100644 index 3b5c7ed42..000000000 --- a/tests/test_vectorstore_template.py +++ /dev/null @@ -1,14 +0,0 @@ -from fastapi.testclient import TestClient -from langflow.services.deps import get_settings_service - - -# check that all agents are in settings.agents -# are in json_response["agents"] -def test_vectorstores_settings(client: TestClient, logged_in_headers): - settings_service = get_settings_service() - response = client.get("api/v1/all", headers=logged_in_headers) - assert response.status_code == 200 - json_response = response.json() - vectorstores = json_response["vectorstores"] - settings_vecs = set(settings_service.settings.VECTORSTORES) - assert all(vs in vectorstores for vs in settings_vecs)