From d2cd43601b0c903ec03fe5dac908ea6a8d3a281a Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Tue, 15 Oct 2024 13:11:23 -0700 Subject: [PATCH 01/84] infra: add databricks api build (#27374) --- .github/workflows/api_doc_build.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/api_doc_build.yml b/.github/workflows/api_doc_build.yml index 9faaaa1c20ad3..6973e64f742e6 100644 --- a/.github/workflows/api_doc_build.yml +++ b/.github/workflows/api_doc_build.yml @@ -73,6 +73,10 @@ jobs: with: repository: langchain-ai/langchain-unstructured path: langchain-unstructured + - uses: actions/checkout@v4 + with: + repository: langchain-ai/langchain-databricks + path: langchain-databricks - name: Set Git config @@ -97,7 +101,8 @@ jobs: langchain/libs/standard-tests \ langchain/libs/experimental \ langchain/libs/partners/milvus \ - langchain/libs/partners/unstructured + langchain/libs/partners/unstructured \ + langchain/libs/databricks mv langchain-google/libs/genai langchain/libs/partners/google-genai mv langchain-google/libs/vertexai langchain/libs/partners/google-vertexai mv langchain-google/libs/community langchain/libs/partners/google-community @@ -113,6 +118,7 @@ jobs: mv langchain-experimental/libs/experimental langchain/libs/experimental mv langchain-milvus/libs/milvus langchain/libs/partners/milvus mv langchain-unstructured/libs/unstructured langchain/libs/partners/unstructured + mv langchain-databricks/libs/databricks langchain/libs/partners/databricks - name: Rm old html run: From edf6d0a0fb4887238f1c3d8063ddc4c0cb5189ca Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Tue, 15 Oct 2024 14:51:05 -0700 Subject: [PATCH 02/84] partners/couchbase: release 0.2.0 (attempt 2) (#27375) --- libs/partners/couchbase/poetry.lock | 1758 +++++++++++++----------- libs/partners/couchbase/pyproject.toml | 4 +- 2 files changed, 970 insertions(+), 792 deletions(-) diff --git a/libs/partners/couchbase/poetry.lock b/libs/partners/couchbase/poetry.lock index 14f0353635bb0..39ad5dce0b999 100644 --- a/libs/partners/couchbase/poetry.lock +++ b/libs/partners/couchbase/poetry.lock @@ -1,100 +1,127 @@ -# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "aiohappyeyeballs" +version = "2.4.3" +description = "Happy Eyeballs for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohappyeyeballs-2.4.3-py3-none-any.whl", hash = "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572"}, + {file = "aiohappyeyeballs-2.4.3.tar.gz", hash = "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586"}, +] [[package]] name = "aiohttp" -version = "3.9.5" +version = "3.10.10" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, + {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f"}, + {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9"}, + {file = "aiohttp-3.10.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026"}, + {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc"}, + {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68"}, + {file = "aiohttp-3.10.10-cp310-cp310-win32.whl", hash = "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257"}, + {file = "aiohttp-3.10.10-cp310-cp310-win_amd64.whl", hash = "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6"}, + {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f"}, + {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb"}, + {file = "aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7"}, + {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1"}, + {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a"}, + {file = "aiohttp-3.10.10-cp311-cp311-win32.whl", hash = "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94"}, + {file = "aiohttp-3.10.10-cp311-cp311-win_amd64.whl", hash = "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959"}, + {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c"}, + {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28"}, + {file = "aiohttp-3.10.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16"}, + {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a"}, + {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205"}, + {file = "aiohttp-3.10.10-cp312-cp312-win32.whl", hash = "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628"}, + {file = "aiohttp-3.10.10-cp312-cp312-win_amd64.whl", hash = "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf"}, + {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28"}, + {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d"}, + {file = "aiohttp-3.10.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e"}, + {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67"}, + {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b"}, + {file = "aiohttp-3.10.10-cp313-cp313-win32.whl", hash = "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8"}, + {file = "aiohttp-3.10.10-cp313-cp313-win_amd64.whl", hash = "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151"}, + {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486"}, + {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb"}, + {file = "aiohttp-3.10.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d"}, + {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a"}, + {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b"}, + {file = "aiohttp-3.10.10-cp38-cp38-win32.whl", hash = "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c"}, + {file = "aiohttp-3.10.10-cp38-cp38-win_amd64.whl", hash = "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce"}, + {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24"}, + {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc"}, + {file = "aiohttp-3.10.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762"}, + {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab"}, + {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91"}, + {file = "aiohttp-3.10.10-cp39-cp39-win32.whl", hash = "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983"}, + {file = "aiohttp-3.10.10-cp39-cp39-win_amd64.whl", hash = "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23"}, + {file = "aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a"}, ] [package.dependencies] +aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" +yarl = ">=1.12.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] +speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] [[package]] name = "aiosignal" @@ -123,13 +150,13 @@ files = [ [[package]] name = "anyio" -version = "4.4.0" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -139,9 +166,9 @@ sniffio = ">=1.1" typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] [[package]] name = "async-timeout" @@ -156,131 +183,146 @@ files = [ [[package]] name = "attrs" -version = "23.2.0" +version = "24.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, + {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, + {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] [package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -313,36 +355,42 @@ files = [ [[package]] name = "couchbase" -version = "4.3.0" +version = "4.3.2" description = "Python Client for Couchbase" optional = false python-versions = ">=3.7" files = [ - {file = "couchbase-4.3.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c55a036b84eb2e248c4c581e6b867087f361eaa7d86d2d5dfdaf991f12666ee0"}, - {file = "couchbase-4.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f8e9c379ddd304ebbedf51d541935ca433609236d4e8b6ae6dda383ae0f83852"}, - {file = "couchbase-4.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:043ae64f6d4df9ca753cfa507873ca525eaa9bd5fa8c63a37569e844ff1da676"}, - {file = "couchbase-4.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:84c0ab168d62b19df4314e781f8b34d276ac08c5a34738a5451d49070895e1b4"}, - {file = "couchbase-4.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:af3a05e6e7f03d3711062896f1ef4572d92b1df138bd2cbe8c359449d32f51ac"}, - {file = "couchbase-4.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fbeec2297e64d251476fbc4d082b317ef87ce7a09b2315267d0db34b6c3a78f1"}, - {file = "couchbase-4.3.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:b04f542610e99691cf76bf7fe3a2106f48211d94c8841db3fdf32a6d28ec0b39"}, - {file = "couchbase-4.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9f599e13e949a6c1b5763de37845b9daaefd945c509f11adefa8c01ccd5b65f1"}, - {file = "couchbase-4.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4fd502d5a42eefd9715ac4b70c8888f9c0d7f53c072328b61908edab8f1cba28"}, - {file = "couchbase-4.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:758954ab6f6eb613dcf198e2f843790b49843a5ff881bd2ef7e8d52135001b3e"}, - {file = "couchbase-4.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fecdd3cb13d3faee3114d5361d7a0b59f0baaeedee56cf65fcc7d6c3adb3234f"}, - {file = "couchbase-4.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:2201862ce7acbe5026da6bb44a4b5a65a1ad42aab5b3a27b47311b511676bf36"}, - {file = "couchbase-4.3.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:e45f56483dcc17ff38dd871ed477edbf5d590ade75bf56aca4d4faae59a04abc"}, - {file = "couchbase-4.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:01372e361cd1157f3de82b914d04a9065e0c5e9e7c13437a27f596ed680825ac"}, - {file = "couchbase-4.3.0-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4a7f0d9fd6251cf32a17a5cde666a902fcad0da440c47beba6a15b129f76d4e5"}, - {file = "couchbase-4.3.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:63cc1bd3d7b8748e478229b622a0d247ab80357e32f2b8d52bc01321701094c2"}, - {file = "couchbase-4.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c687aa2e24ca83c75b6544830eec82dc5733e40c8faeabe7f69dff51b4cd5013"}, - {file = "couchbase-4.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:38cb3734d7e77cd4fff287feb1f424d8626963b7e878317e8ca43346c37ff52c"}, - {file = "couchbase-4.3.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:35da8ffd1f02ffd1d1bd44f07546e06ce72a163a0989d0554e8c3ab5a5602bef"}, - {file = "couchbase-4.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b65ad1fd1f1ef790698feb8cadfc20d7694826bd1cbc32516c9bd5ebf16a0db8"}, - {file = "couchbase-4.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c2527f78dcc7013a9c3946f50e5377d98efc77d0d9936ddc1561c0f46d08c1f9"}, - {file = "couchbase-4.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0679715dedd057d5dae7dfee07eb833d0bd3d951a82d1a76590db534186c1d5c"}, - {file = "couchbase-4.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2335517a5e772530e67a496b308b97939360bd388deced850bde1cba2229f7de"}, - {file = "couchbase-4.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:685cf11f9d44f25ee144c17a28f459976507066493e367ba4d899bb57c475f2a"}, - {file = "couchbase-4.3.0.tar.gz", hash = "sha256:70f6bbbc4818413c4c63eed411ba65c8b980e138c6093ac0eb38f1d7c9ea3bc2"}, + {file = "couchbase-4.3.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:85df43305f2646203192d67a9433abb5e1098390cba6adec8c4f675ba9ba7fdc"}, + {file = "couchbase-4.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b8ee78c7a4b7451db6fcd534dc24462f2cd0e863f16495e687a23b7aecf8296"}, + {file = "couchbase-4.3.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2841b86eb80454279548d8102ce6e71f5bc791eb4a83cb3575b7cf4104c374b2"}, + {file = "couchbase-4.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:540545fd867de02985eb16733c1b16228b0e09461e44a9c2bfad0200fdf7d09a"}, + {file = "couchbase-4.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:52cdcd65fb6565f51ea4540fe823143f0fb9d650136b96b904b1650b05a06746"}, + {file = "couchbase-4.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fb88b9f52c2099a4e25fbc30f27734c3da5c86af930de1f4102d03a3df8e77a"}, + {file = "couchbase-4.3.2-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:b12288e15326b6fae027a419467403d6c9f3f9641cd9cfee0ab0930a9d2315cd"}, + {file = "couchbase-4.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:86e2713759b26ee279574d740151ba4b0ad859a45fc7ac1d13fcdd39d8ee2951"}, + {file = "couchbase-4.3.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6a43ce67ffe90bbb5460da5c95d778e804bcd81c037cc8a347f2966afc6c4b5a"}, + {file = "couchbase-4.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:401a7d5a442196bf805746b8354636753ec12c788fba918245345c32211bdf0c"}, + {file = "couchbase-4.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:aac415f89c38482ac076b4b766537701e99f728cc1c5b2de8c16fa28ce7caa53"}, + {file = "couchbase-4.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:220fe6b75ebbda4651a8e0370642c0f5db5da7f3b0acd9fc8e2b5b31427f9fb1"}, + {file = "couchbase-4.3.2-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:bf5814a8e9efe405c9c81145c8afca7e55b964543984c9d8dc340163597b09b2"}, + {file = "couchbase-4.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd93d352ccb35c86eec9e5b4d1de015c26c15b52c80204f75189bde627b8b529"}, + {file = "couchbase-4.3.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bbefa6111be033587b04b2586f5fc8d6db9a76ec138fea5288c8698c8f294bc2"}, + {file = "couchbase-4.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:419a79b2a98bf3d168b264e0dfc1a0949727a2c3ef455e2ffe8e734a2fdc6e7a"}, + {file = "couchbase-4.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:30115cde63fc18abe587d167bbb0d37e8c253f7430e08e69f64eaca2eb7e4ca0"}, + {file = "couchbase-4.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:5b4eccd4a0ac30d58ea0570a1882a8c0e367a9d54d80c0f6a288e348d1b2b41e"}, + {file = "couchbase-4.3.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:c18b7c937e63e6d869371d9c4b0a0f9cc1a87dba48950a4276e294c091d76ce5"}, + {file = "couchbase-4.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46e492814163162a43d5cbf867eac0d685ea73c803f3238f65c0068ea4a2ce61"}, + {file = "couchbase-4.3.2-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:11ce688ed46edf8387bf51866618c7b4e06399e7fb34a6df002764996c109d1f"}, + {file = "couchbase-4.3.2-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a4b964dd2b804036c57b670734b7aa02985dc5cf6d1a8f9f7d4af8feaf012fef"}, + {file = "couchbase-4.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:687cb157c89822f463fd5373356e38ee7ebecf6306c9da9cae5b54cedad2b66d"}, + {file = "couchbase-4.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:6dcff2c9907ee506e63814c417212e9b51760b914609771dff92508888031dfa"}, + {file = "couchbase-4.3.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:1f0bf68a2a67958db87a81da4d30d63915f39598482d62cd7fe9752b625dcb19"}, + {file = "couchbase-4.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c50ae993c81d81ed0f02a37cbe034825408195b9fe29980b3379e2e05b2e1bec"}, + {file = "couchbase-4.3.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:841c59deff25a3185469726d96cce0e120e6b062e724cb6981d1a2c1e2a629e5"}, + {file = "couchbase-4.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c139c594118e1df6932491c26b825ac777fd201f49cda303892065e607f9c3ef"}, + {file = "couchbase-4.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6f820249b9d71593b29fb0ab3eff66ba36914076e00486ca0b99ce6ac6fd1ce9"}, + {file = "couchbase-4.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:032a180afd6621358b2c73543b9c5db9939b442fc3ad6d54417c36c8a8f65838"}, + {file = "couchbase-4.3.2.tar.gz", hash = "sha256:6f3c2fc874a8b6ca7e6c8b3aaebcbfa4e14937afdb470aaa9b16724c4746b8d5"}, ] [[package]] @@ -447,69 +495,84 @@ files = [ [[package]] name = "greenlet" -version = "3.0.3" +version = "3.1.1" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.7" files = [ - {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, - {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, - {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, - {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, - {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, - {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, - {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, - {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, - {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, - {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, - {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, - {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, - {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, - {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, - {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, - {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, + {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, + {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, + {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, + {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, + {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, + {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, + {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, + {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, + {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, + {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, + {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, + {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, + {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, + {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, + {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, + {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, + {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, + {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, + {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, + {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, + {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, + {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, + {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, + {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, + {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, + {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, + {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, + {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, + {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, + {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, + {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, + {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, + {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, ] [package.extras] @@ -529,13 +592,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.5" +version = "1.0.6" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, + {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, + {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, ] [package.dependencies] @@ -546,7 +609,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" @@ -575,15 +638,18 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "idna" -version = "3.7" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -622,19 +688,19 @@ files = [ [[package]] name = "langchain" -version = "0.3.0" +version = "0.3.3" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "langchain-0.3.0-py3-none-any.whl", hash = "sha256:59a75a6a1eb7bfd2a6bf0c7a5816409a8fdc9046187b07af287b23b9899617af"}, - {file = "langchain-0.3.0.tar.gz", hash = "sha256:a7c23892440bd1f5b9e029ff0dd709dd881ae927c4c0a3210ac64dba9bbf3f7f"}, + {file = "langchain-0.3.3-py3-none-any.whl", hash = "sha256:05ac98c674853c2386d043172820e37ceac9b913aaaf1e51217f0fc424112c72"}, + {file = "langchain-0.3.3.tar.gz", hash = "sha256:6435882996a029a60c61c356bbe51bab4a8f43a54210f5f03e3c4474d19d1842"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.3.0,<0.4.0" +langchain-core = ">=0.3.10,<0.4.0" langchain-text-splitters = ">=0.3.0,<0.4.0" langsmith = ">=0.1.17,<0.2.0" numpy = [ @@ -649,7 +715,7 @@ tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" [[package]] name = "langchain-core" -version = "0.3.0" +version = "0.3.10" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -658,14 +724,14 @@ develop = true [package.dependencies] jsonpatch = "^1.33" -langsmith = "^0.1.117" +langsmith = "^0.1.125" packaging = ">=23.2,<25" pydantic = [ {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] PyYAML = ">=5.3" -tenacity = "^8.1.0,!=8.4.0" +tenacity = ">=8.1.0,!=8.4.0,<10.0.0" typing-extensions = ">=4.7" [package.source] @@ -688,13 +754,13 @@ langchain-core = ">=0.3.0,<0.4.0" [[package]] name = "langsmith" -version = "0.1.120" +version = "0.1.135" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.120-py3-none-any.whl", hash = "sha256:54d2785e301646c0988e0a69ebe4d976488c87b41928b358cb153b6ddd8db62b"}, - {file = "langsmith-0.1.120.tar.gz", hash = "sha256:25499ca187b41bd89d784b272b97a8d76f60e0e21bdf20336e8a2aa6a9b23ac9"}, + {file = "langsmith-0.1.135-py3-none-any.whl", hash = "sha256:b1d1ca3bad483a4239745c57e9b9157b4d099fbf3149be21e3d112c94ede06ac"}, + {file = "langsmith-0.1.135.tar.gz", hash = "sha256:7abed7e141386af99a2177f0b3600b124ae3ad1b482879ba0724ce92ef998a11"}, ] [package.dependencies] @@ -705,146 +771,157 @@ pydantic = [ {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] requests = ">=2,<3" +requests-toolbelt = ">=1.0.0,<2.0.0" [[package]] name = "multidict" -version = "6.0.5" +version = "6.1.0" description = "multidict implementation" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, - {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, - {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, - {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, - {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, - {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, - {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, - {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, - {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, - {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, - {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, - {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, - {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, - {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, - {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, - {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, + {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, + {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, + {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, + {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, + {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, + {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, + {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, + {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, + {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, + {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, + {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, + {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, + {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, + {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, + {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, + {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, + {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, + {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, + {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, + {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, + {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, + {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, + {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, + {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, + {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, + {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, + {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, + {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, + {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, + {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, + {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, + {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} + [[package]] name = "mypy" -version = "1.10.1" +version = "1.12.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e36f229acfe250dc660790840916eb49726c928e8ce10fbdf90715090fe4ae02"}, - {file = "mypy-1.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:51a46974340baaa4145363b9e051812a2446cf583dfaeba124af966fa44593f7"}, - {file = "mypy-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:901c89c2d67bba57aaaca91ccdb659aa3a312de67f23b9dfb059727cce2e2e0a"}, - {file = "mypy-1.10.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0cd62192a4a32b77ceb31272d9e74d23cd88c8060c34d1d3622db3267679a5d9"}, - {file = "mypy-1.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a2cbc68cb9e943ac0814c13e2452d2046c2f2b23ff0278e26599224cf164e78d"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd6f629b67bb43dc0d9211ee98b96d8dabc97b1ad38b9b25f5e4c4d7569a0c6a"}, - {file = "mypy-1.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1bbb3a6f5ff319d2b9d40b4080d46cd639abe3516d5a62c070cf0114a457d84"}, - {file = "mypy-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8edd4e9bbbc9d7b79502eb9592cab808585516ae1bcc1446eb9122656c6066f"}, - {file = "mypy-1.10.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6166a88b15f1759f94a46fa474c7b1b05d134b1b61fca627dd7335454cc9aa6b"}, - {file = "mypy-1.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:5bb9cd11c01c8606a9d0b83ffa91d0b236a0e91bc4126d9ba9ce62906ada868e"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d8681909f7b44d0b7b86e653ca152d6dff0eb5eb41694e163c6092124f8246d7"}, - {file = "mypy-1.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:378c03f53f10bbdd55ca94e46ec3ba255279706a6aacaecac52ad248f98205d3"}, - {file = "mypy-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bacf8f3a3d7d849f40ca6caea5c055122efe70e81480c8328ad29c55c69e93e"}, - {file = "mypy-1.10.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:701b5f71413f1e9855566a34d6e9d12624e9e0a8818a5704d74d6b0402e66c04"}, - {file = "mypy-1.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c4c2992f6ea46ff7fce0072642cfb62af7a2484efe69017ed8b095f7b39ef31"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:604282c886497645ffb87b8f35a57ec773a4a2721161e709a4422c1636ddde5c"}, - {file = "mypy-1.10.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37fd87cab83f09842653f08de066ee68f1182b9b5282e4634cdb4b407266bade"}, - {file = "mypy-1.10.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8addf6313777dbb92e9564c5d32ec122bf2c6c39d683ea64de6a1fd98b90fe37"}, - {file = "mypy-1.10.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5cc3ca0a244eb9a5249c7c583ad9a7e881aa5d7b73c35652296ddcdb33b2b9c7"}, - {file = "mypy-1.10.1-cp38-cp38-win_amd64.whl", hash = "sha256:1b3a2ffce52cc4dbaeee4df762f20a2905aa171ef157b82192f2e2f368eec05d"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe85ed6836165d52ae8b88f99527d3d1b2362e0cb90b005409b8bed90e9059b3"}, - {file = "mypy-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2ae450d60d7d020d67ab440c6e3fae375809988119817214440033f26ddf7bf"}, - {file = "mypy-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be84c06e6abd72f960ba9a71561c14137a583093ffcf9bbfaf5e613d63fa531"}, - {file = "mypy-1.10.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2189ff1e39db399f08205e22a797383613ce1cb0cb3b13d8bcf0170e45b96cc3"}, - {file = "mypy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:97a131ee36ac37ce9581f4220311247ab6cba896b4395b9c87af0675a13a755f"}, - {file = "mypy-1.10.1-py3-none-any.whl", hash = "sha256:71d8ac0b906354ebda8ef1673e5fde785936ac1f29ff6987c7483cfbd5a4235a"}, - {file = "mypy-1.10.1.tar.gz", hash = "sha256:1f8f492d7db9e3593ef42d4f115f04e556130f2819ad33ab84551403e97dd4c0"}, + {file = "mypy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4397081e620dc4dc18e2f124d5e1d2c288194c2c08df6bdb1db31c38cd1fe1ed"}, + {file = "mypy-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:684a9c508a283f324804fea3f0effeb7858eb03f85c4402a967d187f64562469"}, + {file = "mypy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cabe4cda2fa5eca7ac94854c6c37039324baaa428ecbf4de4567279e9810f9e"}, + {file = "mypy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:060a07b10e999ac9e7fa249ce2bdcfa9183ca2b70756f3bce9df7a92f78a3c0a"}, + {file = "mypy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:0eff042d7257f39ba4ca06641d110ca7d2ad98c9c1fb52200fe6b1c865d360ff"}, + {file = "mypy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b86de37a0da945f6d48cf110d5206c5ed514b1ca2614d7ad652d4bf099c7de7"}, + {file = "mypy-1.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20c7c5ce0c1be0b0aea628374e6cf68b420bcc772d85c3c974f675b88e3e6e57"}, + {file = "mypy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a64ee25f05fc2d3d8474985c58042b6759100a475f8237da1f4faf7fcd7e6309"}, + {file = "mypy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:faca7ab947c9f457a08dcb8d9a8664fd438080e002b0fa3e41b0535335edcf7f"}, + {file = "mypy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:5bc81701d52cc8767005fdd2a08c19980de9ec61a25dbd2a937dfb1338a826f9"}, + {file = "mypy-1.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8462655b6694feb1c99e433ea905d46c478041a8b8f0c33f1dab00ae881b2164"}, + {file = "mypy-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:923ea66d282d8af9e0f9c21ffc6653643abb95b658c3a8a32dca1eff09c06475"}, + {file = "mypy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ebf9e796521f99d61864ed89d1fb2926d9ab6a5fab421e457cd9c7e4dd65aa9"}, + {file = "mypy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e478601cc3e3fa9d6734d255a59c7a2e5c2934da4378f3dd1e3411ea8a248642"}, + {file = "mypy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:c72861b7139a4f738344faa0e150834467521a3fba42dc98264e5aa9507dd601"}, + {file = "mypy-1.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52b9e1492e47e1790360a43755fa04101a7ac72287b1a53ce817f35899ba0521"}, + {file = "mypy-1.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:48d3e37dd7d9403e38fa86c46191de72705166d40b8c9f91a3de77350daa0893"}, + {file = "mypy-1.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f106db5ccb60681b622ac768455743ee0e6a857724d648c9629a9bd2ac3f721"}, + {file = "mypy-1.12.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:233e11b3f73ee1f10efada2e6da0f555b2f3a5316e9d8a4a1224acc10e7181d3"}, + {file = "mypy-1.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:4ae8959c21abcf9d73aa6c74a313c45c0b5a188752bf37dace564e29f06e9c1b"}, + {file = "mypy-1.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eafc1b7319b40ddabdc3db8d7d48e76cfc65bbeeafaa525a4e0fa6b76175467f"}, + {file = "mypy-1.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9b9ce1ad8daeb049c0b55fdb753d7414260bad8952645367e70ac91aec90e07e"}, + {file = "mypy-1.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfe012b50e1491d439172c43ccb50db66d23fab714d500b57ed52526a1020bb7"}, + {file = "mypy-1.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c40658d4fa1ab27cb53d9e2f1066345596af2f8fe4827defc398a09c7c9519b"}, + {file = "mypy-1.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:dee78a8b9746c30c1e617ccb1307b351ded57f0de0d287ca6276378d770006c0"}, + {file = "mypy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b5df6c8a8224f6b86746bda716bbe4dbe0ce89fd67b1fa4661e11bfe38e8ec8"}, + {file = "mypy-1.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5feee5c74eb9749e91b77f60b30771563327329e29218d95bedbe1257e2fe4b0"}, + {file = "mypy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:77278e8c6ffe2abfba6db4125de55f1024de9a323be13d20e4f73b8ed3402bd1"}, + {file = "mypy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dcfb754dea911039ac12434d1950d69a2f05acd4d56f7935ed402be09fad145e"}, + {file = "mypy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:06de0498798527451ffb60f68db0d368bd2bae2bbfb5237eae616d4330cc87aa"}, + {file = "mypy-1.12.0-py3-none-any.whl", hash = "sha256:fd313226af375d52e1e36c383f39bf3836e1f192801116b31b090dfcd3ec5266"}, + {file = "mypy-1.12.0.tar.gz", hash = "sha256:65a22d87e757ccd95cbbf6f7e181e6caa87128255eb2b6be901bb71b26d8a99d"}, ] [package.dependencies] mypy-extensions = ">=1.0.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = ">=4.1.0" +typing-extensions = ">=4.6.0" [package.extras] dmypy = ["psutil (>=4.0)"] @@ -910,62 +987,68 @@ files = [ [[package]] name = "orjson" -version = "3.10.6" +version = "3.10.7" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.6-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:fb0ee33124db6eaa517d00890fc1a55c3bfe1cf78ba4a8899d71a06f2d6ff5c7"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c1c4b53b24a4c06547ce43e5fee6ec4e0d8fe2d597f4647fc033fd205707365"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eadc8fd310edb4bdbd333374f2c8fec6794bbbae99b592f448d8214a5e4050c0"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61272a5aec2b2661f4fa2b37c907ce9701e821b2c1285d5c3ab0207ebd358d38"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57985ee7e91d6214c837936dc1608f40f330a6b88bb13f5a57ce5257807da143"}, - {file = "orjson-3.10.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:633a3b31d9d7c9f02d49c4ab4d0a86065c4a6f6adc297d63d272e043472acab5"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1c680b269d33ec444afe2bdc647c9eb73166fa47a16d9a75ee56a374f4a45f43"}, - {file = "orjson-3.10.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f759503a97a6ace19e55461395ab0d618b5a117e8d0fbb20e70cfd68a47327f2"}, - {file = "orjson-3.10.6-cp310-none-win32.whl", hash = "sha256:95a0cce17f969fb5391762e5719575217bd10ac5a189d1979442ee54456393f3"}, - {file = "orjson-3.10.6-cp310-none-win_amd64.whl", hash = "sha256:df25d9271270ba2133cc88ee83c318372bdc0f2cd6f32e7a450809a111efc45c"}, - {file = "orjson-3.10.6-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b1ec490e10d2a77c345def52599311849fc063ae0e67cf4f84528073152bb2ba"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d43d3feb8f19d07e9f01e5b9be4f28801cf7c60d0fa0d279951b18fae1932b"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac3045267e98fe749408eee1593a142e02357c5c99be0802185ef2170086a863"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c27bc6a28ae95923350ab382c57113abd38f3928af3c80be6f2ba7eb8d8db0b0"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d27456491ca79532d11e507cadca37fb8c9324a3976294f68fb1eff2dc6ced5a"}, - {file = "orjson-3.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05ac3d3916023745aa3b3b388e91b9166be1ca02b7c7e41045da6d12985685f0"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1335d4ef59ab85cab66fe73fd7a4e881c298ee7f63ede918b7faa1b27cbe5212"}, - {file = "orjson-3.10.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4bbc6d0af24c1575edc79994c20e1b29e6fb3c6a570371306db0993ecf144dc5"}, - {file = "orjson-3.10.6-cp311-none-win32.whl", hash = "sha256:450e39ab1f7694465060a0550b3f6d328d20297bf2e06aa947b97c21e5241fbd"}, - {file = "orjson-3.10.6-cp311-none-win_amd64.whl", hash = "sha256:227df19441372610b20e05bdb906e1742ec2ad7a66ac8350dcfd29a63014a83b"}, - {file = "orjson-3.10.6-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ea2977b21f8d5d9b758bb3f344a75e55ca78e3ff85595d248eee813ae23ecdfb"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6f3d167d13a16ed263b52dbfedff52c962bfd3d270b46b7518365bcc2121eed"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f710f346e4c44a4e8bdf23daa974faede58f83334289df80bc9cd12fe82573c7"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7275664f84e027dcb1ad5200b8b18373e9c669b2a9ec33d410c40f5ccf4b257e"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0943e4c701196b23c240b3d10ed8ecd674f03089198cf503105b474a4f77f21f"}, - {file = "orjson-3.10.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:446dee5a491b5bc7d8f825d80d9637e7af43f86a331207b9c9610e2f93fee22a"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:64c81456d2a050d380786413786b057983892db105516639cb5d3ee3c7fd5148"}, - {file = "orjson-3.10.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:960db0e31c4e52fa0fc3ecbaea5b2d3b58f379e32a95ae6b0ebeaa25b93dfd34"}, - {file = "orjson-3.10.6-cp312-none-win32.whl", hash = "sha256:a6ea7afb5b30b2317e0bee03c8d34c8181bc5a36f2afd4d0952f378972c4efd5"}, - {file = "orjson-3.10.6-cp312-none-win_amd64.whl", hash = "sha256:874ce88264b7e655dde4aeaacdc8fd772a7962faadfb41abe63e2a4861abc3dc"}, - {file = "orjson-3.10.6-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:66680eae4c4e7fc193d91cfc1353ad6d01b4801ae9b5314f17e11ba55e934183"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:caff75b425db5ef8e8f23af93c80f072f97b4fb3afd4af44482905c9f588da28"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3722fddb821b6036fd2a3c814f6bd9b57a89dc6337b9924ecd614ebce3271394"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2c116072a8533f2fec435fde4d134610f806bdac20188c7bd2081f3e9e0133f"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6eeb13218c8cf34c61912e9df2de2853f1d009de0e46ea09ccdf3d757896af0a"}, - {file = "orjson-3.10.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965a916373382674e323c957d560b953d81d7a8603fbeee26f7b8248638bd48b"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03c95484d53ed8e479cade8628c9cea00fd9d67f5554764a1110e0d5aa2de96e"}, - {file = "orjson-3.10.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e060748a04cccf1e0a6f2358dffea9c080b849a4a68c28b1b907f272b5127e9b"}, - {file = "orjson-3.10.6-cp38-none-win32.whl", hash = "sha256:738dbe3ef909c4b019d69afc19caf6b5ed0e2f1c786b5d6215fbb7539246e4c6"}, - {file = "orjson-3.10.6-cp38-none-win_amd64.whl", hash = "sha256:d40f839dddf6a7d77114fe6b8a70218556408c71d4d6e29413bb5f150a692ff7"}, - {file = "orjson-3.10.6-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:697a35a083c4f834807a6232b3e62c8b280f7a44ad0b759fd4dce748951e70db"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd502f96bf5ea9a61cbc0b2b5900d0dd68aa0da197179042bdd2be67e51a1e4b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f215789fb1667cdc874c1b8af6a84dc939fd802bf293a8334fce185c79cd359b"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2debd8ddce948a8c0938c8c93ade191d2f4ba4649a54302a7da905a81f00b56"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5410111d7b6681d4b0d65e0f58a13be588d01b473822483f77f513c7f93bd3b2"}, - {file = "orjson-3.10.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb1f28a137337fdc18384079fa5726810681055b32b92253fa15ae5656e1dddb"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bf2fbbce5fe7cd1aa177ea3eab2b8e6a6bc6e8592e4279ed3db2d62e57c0e1b2"}, - {file = "orjson-3.10.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:79b9b9e33bd4c517445a62b90ca0cc279b0f1f3970655c3df9e608bc3f91741a"}, - {file = "orjson-3.10.6-cp39-none-win32.whl", hash = "sha256:30b0a09a2014e621b1adf66a4f705f0809358350a757508ee80209b2d8dae219"}, - {file = "orjson-3.10.6-cp39-none-win_amd64.whl", hash = "sha256:49e3bc615652617d463069f91b867a4458114c5b104e13b7ae6872e5f79d0844"}, - {file = "orjson-3.10.6.tar.gz", hash = "sha256:e54b63d0a7c6c54a5f5f726bc93a2078111ef060fec4ecbf34c5db800ca3b3a7"}, + {file = "orjson-3.10.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:74f4544f5a6405b90da8ea724d15ac9c36da4d72a738c64685003337401f5c12"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34a566f22c28222b08875b18b0dfbf8a947e69df21a9ed5c51a6bf91cfb944ac"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf6ba8ebc8ef5792e2337fb0419f8009729335bb400ece005606336b7fd7bab7"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac7cf6222b29fbda9e3a472b41e6a5538b48f2c8f99261eecd60aafbdb60690c"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de817e2f5fc75a9e7dd350c4b0f54617b280e26d1631811a43e7e968fa71e3e9"}, + {file = "orjson-3.10.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:348bdd16b32556cf8d7257b17cf2bdb7ab7976af4af41ebe79f9796c218f7e91"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:479fd0844ddc3ca77e0fd99644c7fe2de8e8be1efcd57705b5c92e5186e8a250"}, + {file = "orjson-3.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fdf5197a21dd660cf19dfd2a3ce79574588f8f5e2dbf21bda9ee2d2b46924d84"}, + {file = "orjson-3.10.7-cp310-none-win32.whl", hash = "sha256:d374d36726746c81a49f3ff8daa2898dccab6596864ebe43d50733275c629175"}, + {file = "orjson-3.10.7-cp310-none-win_amd64.whl", hash = "sha256:cb61938aec8b0ffb6eef484d480188a1777e67b05d58e41b435c74b9d84e0b9c"}, + {file = "orjson-3.10.7-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7db8539039698ddfb9a524b4dd19508256107568cdad24f3682d5773e60504a2"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:480f455222cb7a1dea35c57a67578848537d2602b46c464472c995297117fa09"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8a9c9b168b3a19e37fe2778c0003359f07822c90fdff8f98d9d2a91b3144d8e0"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8de062de550f63185e4c1c54151bdddfc5625e37daf0aa1e75d2a1293e3b7d9a"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b0dd04483499d1de9c8f6203f8975caf17a6000b9c0c54630cef02e44ee624e"}, + {file = "orjson-3.10.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b58d3795dafa334fc8fd46f7c5dc013e6ad06fd5b9a4cc98cb1456e7d3558bd6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33cfb96c24034a878d83d1a9415799a73dc77480e6c40417e5dda0710d559ee6"}, + {file = "orjson-3.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e724cebe1fadc2b23c6f7415bad5ee6239e00a69f30ee423f319c6af70e2a5c0"}, + {file = "orjson-3.10.7-cp311-none-win32.whl", hash = "sha256:82763b46053727a7168d29c772ed5c870fdae2f61aa8a25994c7984a19b1021f"}, + {file = "orjson-3.10.7-cp311-none-win_amd64.whl", hash = "sha256:eb8d384a24778abf29afb8e41d68fdd9a156cf6e5390c04cc07bbc24b89e98b5"}, + {file = "orjson-3.10.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44a96f2d4c3af51bfac6bc4ef7b182aa33f2f054fd7f34cc0ee9a320d051d41f"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ac14cd57df0572453543f8f2575e2d01ae9e790c21f57627803f5e79b0d3c3"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bdbb61dcc365dd9be94e8f7df91975edc9364d6a78c8f7adb69c1cdff318ec93"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b48b3db6bb6e0a08fa8c83b47bc169623f801e5cc4f24442ab2b6617da3b5313"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23820a1563a1d386414fef15c249040042b8e5d07b40ab3fe3efbfbbcbcb8864"}, + {file = "orjson-3.10.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0c6a008e91d10a2564edbb6ee5069a9e66df3fbe11c9a005cb411f441fd2c09"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d352ee8ac1926d6193f602cbe36b1643bbd1bbcb25e3c1a657a4390f3000c9a5"}, + {file = "orjson-3.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d2d9f990623f15c0ae7ac608103c33dfe1486d2ed974ac3f40b693bad1a22a7b"}, + {file = "orjson-3.10.7-cp312-none-win32.whl", hash = "sha256:7c4c17f8157bd520cdb7195f75ddbd31671997cbe10aee559c2d613592e7d7eb"}, + {file = "orjson-3.10.7-cp312-none-win_amd64.whl", hash = "sha256:1d9c0e733e02ada3ed6098a10a8ee0052dd55774de3d9110d29868d24b17faa1"}, + {file = "orjson-3.10.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:77d325ed866876c0fa6492598ec01fe30e803272a6e8b10e992288b009cbe149"}, + {file = "orjson-3.10.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ea2c232deedcb605e853ae1db2cc94f7390ac776743b699b50b071b02bea6fe"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3dcfbede6737fdbef3ce9c37af3fb6142e8e1ebc10336daa05872bfb1d87839c"}, + {file = "orjson-3.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11748c135f281203f4ee695b7f80bb1358a82a63905f9f0b794769483ea854ad"}, + {file = "orjson-3.10.7-cp313-none-win32.whl", hash = "sha256:a7e19150d215c7a13f39eb787d84db274298d3f83d85463e61d277bbd7f401d2"}, + {file = "orjson-3.10.7-cp313-none-win_amd64.whl", hash = "sha256:eef44224729e9525d5261cc8d28d6b11cafc90e6bd0be2157bde69a52ec83024"}, + {file = "orjson-3.10.7-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6ea2b2258eff652c82652d5e0f02bd5e0463a6a52abb78e49ac288827aaa1469"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:430ee4d85841e1483d487e7b81401785a5dfd69db5de01314538f31f8fbf7ee1"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b6146e439af4c2472c56f8540d799a67a81226e11992008cb47e1267a9b3225"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:084e537806b458911137f76097e53ce7bf5806dda33ddf6aaa66a028f8d43a23"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829cf2195838e3f93b70fd3b4292156fc5e097aac3739859ac0dcc722b27ac0"}, + {file = "orjson-3.10.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1193b2416cbad1a769f868b1749535d5da47626ac29445803dae7cc64b3f5c98"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4e6c3da13e5a57e4b3dca2de059f243ebec705857522f188f0180ae88badd354"}, + {file = "orjson-3.10.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c31008598424dfbe52ce8c5b47e0752dca918a4fdc4a2a32004efd9fab41d866"}, + {file = "orjson-3.10.7-cp38-none-win32.whl", hash = "sha256:7122a99831f9e7fe977dc45784d3b2edc821c172d545e6420c375e5a935f5a1c"}, + {file = "orjson-3.10.7-cp38-none-win_amd64.whl", hash = "sha256:a763bc0e58504cc803739e7df040685816145a6f3c8a589787084b54ebc9f16e"}, + {file = "orjson-3.10.7-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e76be12658a6fa376fcd331b1ea4e58f5a06fd0220653450f0d415b8fd0fbe20"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed350d6978d28b92939bfeb1a0570c523f6170efc3f0a0ef1f1df287cd4f4960"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:144888c76f8520e39bfa121b31fd637e18d4cc2f115727865fdf9fa325b10412"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09b2d92fd95ad2402188cf51573acde57eb269eddabaa60f69ea0d733e789fe9"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b24a579123fa884f3a3caadaed7b75eb5715ee2b17ab5c66ac97d29b18fe57f"}, + {file = "orjson-3.10.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591bcfe7512353bd609875ab38050efe3d55e18934e2f18950c108334b4ff"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f4db56635b58cd1a200b0a23744ff44206ee6aa428185e2b6c4a65b3197abdcd"}, + {file = "orjson-3.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0fa5886854673222618638c6df7718ea7fe2f3f2384c452c9ccedc70b4a510a5"}, + {file = "orjson-3.10.7-cp39-none-win32.whl", hash = "sha256:8272527d08450ab16eb405f47e0f4ef0e5ff5981c3d82afe0efd25dcbef2bcd2"}, + {file = "orjson-3.10.7-cp39-none-win_amd64.whl", hash = "sha256:974683d4618c0c7dbf4f69c95a979734bf183d0658611760017f6e70a145af58"}, + {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, ] [[package]] @@ -994,20 +1077,127 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "propcache" +version = "0.2.0" +description = "Accelerated property cache" +optional = false +python-versions = ">=3.8" +files = [ + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, + {file = "propcache-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850"}, + {file = "propcache-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b"}, + {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336"}, + {file = "propcache-0.2.0-cp310-cp310-win32.whl", hash = "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad"}, + {file = "propcache-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de"}, + {file = "propcache-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4"}, + {file = "propcache-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b"}, + {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b"}, + {file = "propcache-0.2.0-cp311-cp311-win32.whl", hash = "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1"}, + {file = "propcache-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7"}, + {file = "propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e"}, + {file = "propcache-0.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23"}, + {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348"}, + {file = "propcache-0.2.0-cp312-cp312-win32.whl", hash = "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5"}, + {file = "propcache-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763"}, + {file = "propcache-0.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf"}, + {file = "propcache-0.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83"}, + {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544"}, + {file = "propcache-0.2.0-cp313-cp313-win32.whl", hash = "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032"}, + {file = "propcache-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6"}, + {file = "propcache-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9"}, + {file = "propcache-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7"}, + {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed"}, + {file = "propcache-0.2.0-cp38-cp38-win32.whl", hash = "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d"}, + {file = "propcache-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638"}, + {file = "propcache-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12"}, + {file = "propcache-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d"}, + {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798"}, + {file = "propcache-0.2.0-cp39-cp39-win32.whl", hash = "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9"}, + {file = "propcache-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df"}, + {file = "propcache-0.2.0-py3-none-any.whl", hash = "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036"}, + {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"}, +] + [[package]] name = "pydantic" -version = "2.8.2" +version = "2.9.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8"}, - {file = "pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a"}, + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.20.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.23.4" typing-extensions = [ {version = ">=4.6.1", markers = "python_version < \"3.13\""}, {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, @@ -1015,103 +1205,104 @@ typing-extensions = [ [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.20.1" +version = "2.23.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98"}, - {file = "pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a"}, - {file = "pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840"}, - {file = "pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250"}, - {file = "pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312"}, - {file = "pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1"}, - {file = "pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27"}, - {file = "pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b"}, - {file = "pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a"}, - {file = "pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231"}, - {file = "pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e"}, - {file = "pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1"}, - {file = "pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd"}, - {file = "pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688"}, - {file = "pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686"}, - {file = "pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c"}, - {file = "pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203"}, - {file = "pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0"}, - {file = "pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e"}, - {file = "pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:4745f4ac52cc6686390c40eaa01d48b18997cb130833154801a442323cc78f91"}, - {file = "pydantic_core-2.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a8ad4c766d3f33ba8fd692f9aa297c9058970530a32c728a2c4bfd2616d3358b"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41e81317dd6a0127cabce83c0c9c3fbecceae981c8391e6f1dec88a77c8a569a"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04024d270cf63f586ad41fff13fde4311c4fc13ea74676962c876d9577bcc78f"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eaad4ff2de1c3823fddf82f41121bdf453d922e9a238642b1dedb33c4e4f98ad"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26ab812fa0c845df815e506be30337e2df27e88399b985d0bb4e3ecfe72df31c"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c5ebac750d9d5f2706654c638c041635c385596caf68f81342011ddfa1e5598"}, - {file = "pydantic_core-2.20.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2aafc5a503855ea5885559eae883978c9b6d8c8993d67766ee73d82e841300dd"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4868f6bd7c9d98904b748a2653031fc9c2f85b6237009d475b1008bfaeb0a5aa"}, - {file = "pydantic_core-2.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa2f457b4af386254372dfa78a2eda2563680d982422641a85f271c859df1987"}, - {file = "pydantic_core-2.20.1-cp38-none-win32.whl", hash = "sha256:225b67a1f6d602de0ce7f6c1c3ae89a4aa25d3de9be857999e9124f15dab486a"}, - {file = "pydantic_core-2.20.1-cp38-none-win_amd64.whl", hash = "sha256:6b507132dcfc0dea440cce23ee2182c0ce7aba7054576efc65634f080dbe9434"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b03f7941783b4c4a26051846dea594628b38f6940a2fdc0df00b221aed39314c"}, - {file = "pydantic_core-2.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1eedfeb6089ed3fad42e81a67755846ad4dcc14d73698c120a82e4ccf0f1f9f6"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:635fee4e041ab9c479e31edda27fcf966ea9614fff1317e280d99eb3e5ab6fe2"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:77bf3ac639c1ff567ae3b47f8d4cc3dc20f9966a2a6dd2311dcc055d3d04fb8a"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ed1b0132f24beeec5a78b67d9388656d03e6a7c837394f99257e2d55b461611"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6514f963b023aeee506678a1cf821fe31159b925c4b76fe2afa94cc70b3222b"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d4204d8ca33146e761c79f83cc861df20e7ae9f6487ca290a97702daf56006"}, - {file = "pydantic_core-2.20.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d036c7187b9422ae5b262badb87a20a49eb6c5238b2004e96d4da1231badef1"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9ebfef07dbe1d93efb94b4700f2d278494e9162565a54f124c404a5656d7ff09"}, - {file = "pydantic_core-2.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6b9d9bb600328a1ce523ab4f454859e9d439150abb0906c5a1983c146580ebab"}, - {file = "pydantic_core-2.20.1-cp39-none-win32.whl", hash = "sha256:784c1214cb6dd1e3b15dd8b91b9a53852aed16671cc3fbe4786f4f1db07089e2"}, - {file = "pydantic_core-2.20.1-cp39-none-win_amd64.whl", hash = "sha256:d2fe69c5434391727efa54b47a1e7986bb0186e72a41b203df8f5b0a19a4f669"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99"}, - {file = "pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:407653af5617f0757261ae249d3fba09504d7a71ab36ac057c938572d1bc9331"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c693e916709c2465b02ca0ad7b387c4f8423d1db7b4649c551f27a529181c5ad"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b5ff4911aea936a47d9376fd3ab17e970cc543d1b68921886e7f64bd28308d1"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:177f55a886d74f1808763976ac4efd29b7ed15c69f4d838bbd74d9d09cf6fa86"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:964faa8a861d2664f0c7ab0c181af0bea66098b1919439815ca8803ef136fc4e"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4dd484681c15e6b9a977c785a345d3e378d72678fd5f1f3c0509608da24f2ac0"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f6d6cff3538391e8486a431569b77921adfcdef14eb18fbf19b7c0a5294d4e6a"}, - {file = "pydantic_core-2.20.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a6d511cc297ff0883bc3708b465ff82d7560193169a8b93260f74ecb0a5e08a7"}, - {file = "pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, ] [package.dependencies] @@ -1141,13 +1332,13 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "pytest-asyncio" -version = "0.23.7" +version = "0.23.8" description = "Pytest support for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "pytest_asyncio-0.23.7-py3-none-any.whl", hash = "sha256:009b48127fbe44518a547bddd25611551b0e43ccdbf1e67d12479f569832c20b"}, - {file = "pytest_asyncio-0.23.7.tar.gz", hash = "sha256:5f5c72948f4c49e7db4f29f2521d4031f1c27f86e57b046126654083d4770268"}, + {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, + {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, ] [package.dependencies] @@ -1173,61 +1364,64 @@ pytest = ">=6.2.5" [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] @@ -1251,31 +1445,45 @@ 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-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + [[package]] name = "ruff" -version = "0.5.2" +version = "0.5.7" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.2-py3-none-linux_armv6l.whl", hash = "sha256:7bab8345df60f9368d5f4594bfb8b71157496b44c30ff035d1d01972e764d3be"}, - {file = "ruff-0.5.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:1aa7acad382ada0189dbe76095cf0a36cd0036779607c397ffdea16517f535b1"}, - {file = "ruff-0.5.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:aec618d5a0cdba5592c60c2dee7d9c865180627f1a4a691257dea14ac1aa264d"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b62adc5ce81780ff04077e88bac0986363e4a3260ad3ef11ae9c14aa0e67ef"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dc42ebf56ede83cb080a50eba35a06e636775649a1ffd03dc986533f878702a3"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c15c6e9f88c67ffa442681365d11df38afb11059fc44238e71a9d9f1fd51de70"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d3de9a5960f72c335ef00763d861fc5005ef0644cb260ba1b5a115a102157251"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe5a968ae933e8f7627a7b2fc8893336ac2be0eb0aace762d3421f6e8f7b7f83"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04f54a9018f75615ae52f36ea1c5515e356e5d5e214b22609ddb546baef7132"}, - {file = "ruff-0.5.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ed02fb52e3741f0738db5f93e10ae0fb5c71eb33a4f2ba87c9a2fa97462a649"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3cf8fe659f6362530435d97d738eb413e9f090e7e993f88711b0377fbdc99f60"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:237a37e673e9f3cbfff0d2243e797c4862a44c93d2f52a52021c1a1b0899f846"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:2a2949ce7c1cbd8317432ada80fe32156df825b2fd611688814c8557824ef060"}, - {file = "ruff-0.5.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:481af57c8e99da92ad168924fd82220266043c8255942a1cb87958b108ac9335"}, - {file = "ruff-0.5.2-py3-none-win32.whl", hash = "sha256:f1aea290c56d913e363066d83d3fc26848814a1fed3d72144ff9c930e8c7c718"}, - {file = "ruff-0.5.2-py3-none-win_amd64.whl", hash = "sha256:8532660b72b5d94d2a0a7a27ae7b9b40053662d00357bb2a6864dd7e38819084"}, - {file = "ruff-0.5.2-py3-none-win_arm64.whl", hash = "sha256:73439805c5cb68f364d826a5c5c4b6c798ded6b7ebaa4011f01ce6c94e4d5583"}, - {file = "ruff-0.5.2.tar.gz", hash = "sha256:2c0df2d2de685433794a14d8d2e240df619b748fbe3367346baa519d8e6f1ca2"}, + {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, + {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, + {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, + {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, + {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, + {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, + {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, ] [[package]] @@ -1291,60 +1499,21 @@ files = [ [[package]] name = "sqlalchemy" -version = "2.0.31" +version = "2.0.36" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f2a213c1b699d3f5768a7272de720387ae0122f1becf0901ed6eaa1abd1baf6c"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9fea3d0884e82d1e33226935dac990b967bef21315cbcc894605db3441347443"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ad7f221d8a69d32d197e5968d798217a4feebe30144986af71ada8c548e9fa"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2bee229715b6366f86a95d497c347c22ddffa2c7c96143b59a2aa5cc9eebbc"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cd5b94d4819c0c89280b7c6109c7b788a576084bf0a480ae17c227b0bc41e109"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:750900a471d39a7eeba57580b11983030517a1f512c2cb287d5ad0fcf3aebd58"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win32.whl", hash = "sha256:7bd112be780928c7f493c1a192cd8c5fc2a2a7b52b790bc5a84203fb4381c6be"}, - {file = "SQLAlchemy-2.0.31-cp310-cp310-win_amd64.whl", hash = "sha256:5a48ac4d359f058474fadc2115f78a5cdac9988d4f99eae44917f36aa1476327"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f68470edd70c3ac3b6cd5c2a22a8daf18415203ca1b036aaeb9b0fb6f54e8298"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e2c38c2a4c5c634fe6c3c58a789712719fa1bf9b9d6ff5ebfce9a9e5b89c1ca"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd15026f77420eb2b324dcb93551ad9c5f22fab2c150c286ef1dc1160f110203"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2196208432deebdfe3b22185d46b08f00ac9d7b01284e168c212919891289396"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:352b2770097f41bff6029b280c0e03b217c2dcaddc40726f8f53ed58d8a85da4"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:56d51ae825d20d604583f82c9527d285e9e6d14f9a5516463d9705dab20c3740"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win32.whl", hash = "sha256:6e2622844551945db81c26a02f27d94145b561f9d4b0c39ce7bfd2fda5776dac"}, - {file = "SQLAlchemy-2.0.31-cp311-cp311-win_amd64.whl", hash = "sha256:ccaf1b0c90435b6e430f5dd30a5aede4764942a695552eb3a4ab74ed63c5b8d3"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3b74570d99126992d4b0f91fb87c586a574a5872651185de8297c6f90055ae42"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f77c4f042ad493cb8595e2f503c7a4fe44cd7bd59c7582fd6d78d7e7b8ec52c"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1591329333daf94467e699e11015d9c944f44c94d2091f4ac493ced0119449"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74afabeeff415e35525bf7a4ecdab015f00e06456166a2eba7590e49f8db940e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b9c01990d9015df2c6f818aa8f4297d42ee71c9502026bb074e713d496e26b67"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66f63278db425838b3c2b1c596654b31939427016ba030e951b292e32b99553e"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win32.whl", hash = "sha256:0b0f658414ee4e4b8cbcd4a9bb0fd743c5eeb81fc858ca517217a8013d282c96"}, - {file = "SQLAlchemy-2.0.31-cp312-cp312-win_amd64.whl", hash = "sha256:fa4b1af3e619b5b0b435e333f3967612db06351217c58bfb50cee5f003db2a5a"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f43e93057cf52a227eda401251c72b6fbe4756f35fa6bfebb5d73b86881e59b0"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d337bf94052856d1b330d5fcad44582a30c532a2463776e1651bd3294ee7e58b"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c06fb43a51ccdff3b4006aafee9fcf15f63f23c580675f7734245ceb6b6a9e05"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:b6e22630e89f0e8c12332b2b4c282cb01cf4da0d26795b7eae16702a608e7ca1"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:79a40771363c5e9f3a77f0e28b3302801db08040928146e6808b5b7a40749c88"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win32.whl", hash = "sha256:501ff052229cb79dd4c49c402f6cb03b5a40ae4771efc8bb2bfac9f6c3d3508f"}, - {file = "SQLAlchemy-2.0.31-cp37-cp37m-win_amd64.whl", hash = "sha256:597fec37c382a5442ffd471f66ce12d07d91b281fd474289356b1a0041bdf31d"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dc6d69f8829712a4fd799d2ac8d79bdeff651c2301b081fd5d3fe697bd5b4ab9"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23b9fbb2f5dd9e630db70fbe47d963c7779e9c81830869bd7d137c2dc1ad05fb"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a21c97efcbb9f255d5c12a96ae14da873233597dfd00a3a0c4ce5b3e5e79704"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a6a9837589c42b16693cf7bf836f5d42218f44d198f9343dd71d3164ceeeac"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc251477eae03c20fae8db9c1c23ea2ebc47331bcd73927cdcaecd02af98d3c3"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2fd17e3bb8058359fa61248c52c7b09a97cf3c820e54207a50af529876451808"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win32.whl", hash = "sha256:c76c81c52e1e08f12f4b6a07af2b96b9b15ea67ccdd40ae17019f1c373faa227"}, - {file = "SQLAlchemy-2.0.31-cp38-cp38-win_amd64.whl", hash = "sha256:4b600e9a212ed59355813becbcf282cfda5c93678e15c25a0ef896b354423238"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b6cf796d9fcc9b37011d3f9936189b3c8074a02a4ed0c0fbbc126772c31a6d4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:78fe11dbe37d92667c2c6e74379f75746dc947ee505555a0197cfba9a6d4f1a4"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc47dc6185a83c8100b37acda27658fe4dbd33b7d5e7324111f6521008ab4fe"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a41514c1a779e2aa9a19f67aaadeb5cbddf0b2b508843fcd7bafdf4c6864005"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:afb6dde6c11ea4525318e279cd93c8734b795ac8bb5dda0eedd9ebaca7fa23f1"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3f9faef422cfbb8fd53716cd14ba95e2ef655400235c3dfad1b5f467ba179c8c"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win32.whl", hash = "sha256:fc6b14e8602f59c6ba893980bea96571dd0ed83d8ebb9c4479d9ed5425d562e9"}, - {file = "SQLAlchemy-2.0.31-cp39-cp39-win_amd64.whl", hash = "sha256:3cb8a66b167b033ec72c3812ffc8441d4e9f5f78f5e31e54dcd4c90a4ca5bebc"}, - {file = "SQLAlchemy-2.0.31-py3-none-any.whl", hash = "sha256:69f3e3c08867a8e4856e92d7afb618b95cdee18e0bc1647b77599722c9a28911"}, - {file = "SQLAlchemy-2.0.31.tar.gz", hash = "sha256:b607489dd4a54de56984a0c7656247504bd5523d9d0ba799aef59d4add009484"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win32.whl", hash = "sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa"}, + {file = "SQLAlchemy-2.0.36-cp310-cp310-win_amd64.whl", hash = "sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win32.whl", hash = "sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f"}, + {file = "SQLAlchemy-2.0.36-cp311-cp311-win_amd64.whl", hash = "sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959"}, + {file = "SQLAlchemy-2.0.36-py3-none-any.whl", hash = "sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e"}, + {file = "sqlalchemy-2.0.36.tar.gz", hash = "sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5"}, ] [package.dependencies] @@ -1357,7 +1526,7 @@ aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] mssql = ["pyodbc"] mssql-pymssql = ["pymssql"] mssql-pyodbc = ["pyodbc"] @@ -1378,13 +1547,13 @@ sqlcipher = ["sqlcipher3_binary"] [[package]] name = "syrupy" -version = "4.6.1" +version = "4.7.2" description = "Pytest Snapshot Test Utility" optional = false -python-versions = ">=3.8.1,<4" +python-versions = ">=3.8.1" files = [ - {file = "syrupy-4.6.1-py3-none-any.whl", hash = "sha256:203e52f9cb9fa749cf683f29bd68f02c16c3bc7e7e5fe8f2fc59bdfe488ce133"}, - {file = "syrupy-4.6.1.tar.gz", hash = "sha256:37a835c9ce7857eeef86d62145885e10b3cb9615bc6abeb4ce404b3f18e1bb36"}, + {file = "syrupy-4.7.2-py3-none-any.whl", hash = "sha256:eae7ba6be5aed190237caa93be288e97ca1eec5ca58760e4818972a10c4acc64"}, + {file = "syrupy-4.7.2.tar.gz", hash = "sha256:ea45e099f242de1bb53018c238f408a5bb6c82007bc687aefcbeaa0e1c2e935a"}, ] [package.dependencies] @@ -1407,13 +1576,13 @@ test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "tomli" -version = "2.0.1" +version = "2.0.2" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, + {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, ] [[package]] @@ -1429,13 +1598,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] @@ -1446,108 +1615,117 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "yarl" -version = "1.9.4" +version = "1.15.2" description = "Yet another URL library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, + {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e4ee8b8639070ff246ad3649294336b06db37a94bdea0d09ea491603e0be73b8"}, + {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7cf963a357c5f00cb55b1955df8bbe68d2f2f65de065160a1c26b85a1e44172"}, + {file = "yarl-1.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:43ebdcc120e2ca679dba01a779333a8ea76b50547b55e812b8b92818d604662c"}, + {file = "yarl-1.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3433da95b51a75692dcf6cc8117a31410447c75a9a8187888f02ad45c0a86c50"}, + {file = "yarl-1.15.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38d0124fa992dbacd0c48b1b755d3ee0a9f924f427f95b0ef376556a24debf01"}, + {file = "yarl-1.15.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ded1b1803151dd0f20a8945508786d57c2f97a50289b16f2629f85433e546d47"}, + {file = "yarl-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace4cad790f3bf872c082366c9edd7f8f8f77afe3992b134cfc810332206884f"}, + {file = "yarl-1.15.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c77494a2f2282d9bbbbcab7c227a4d1b4bb829875c96251f66fb5f3bae4fb053"}, + {file = "yarl-1.15.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b7f227ca6db5a9fda0a2b935a2ea34a7267589ffc63c8045f0e4edb8d8dcf956"}, + {file = "yarl-1.15.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:31561a5b4d8dbef1559b3600b045607cf804bae040f64b5f5bca77da38084a8a"}, + {file = "yarl-1.15.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3e52474256a7db9dcf3c5f4ca0b300fdea6c21cca0148c8891d03a025649d935"}, + {file = "yarl-1.15.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0e1af74a9529a1137c67c887ed9cde62cff53aa4d84a3adbec329f9ec47a3936"}, + {file = "yarl-1.15.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:15c87339490100c63472a76d87fe7097a0835c705eb5ae79fd96e343473629ed"}, + {file = "yarl-1.15.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:74abb8709ea54cc483c4fb57fb17bb66f8e0f04438cff6ded322074dbd17c7ec"}, + {file = "yarl-1.15.2-cp310-cp310-win32.whl", hash = "sha256:ffd591e22b22f9cb48e472529db6a47203c41c2c5911ff0a52e85723196c0d75"}, + {file = "yarl-1.15.2-cp310-cp310-win_amd64.whl", hash = "sha256:1695497bb2a02a6de60064c9f077a4ae9c25c73624e0d43e3aa9d16d983073c2"}, + {file = "yarl-1.15.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9fcda20b2de7042cc35cf911702fa3d8311bd40055a14446c1e62403684afdc5"}, + {file = "yarl-1.15.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0545de8c688fbbf3088f9e8b801157923be4bf8e7b03e97c2ecd4dfa39e48e0e"}, + {file = "yarl-1.15.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fbda058a9a68bec347962595f50546a8a4a34fd7b0654a7b9697917dc2bf810d"}, + {file = "yarl-1.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1ac2bc069f4a458634c26b101c2341b18da85cb96afe0015990507efec2e417"}, + {file = "yarl-1.15.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd126498171f752dd85737ab1544329a4520c53eed3997f9b08aefbafb1cc53b"}, + {file = "yarl-1.15.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3db817b4e95eb05c362e3b45dafe7144b18603e1211f4a5b36eb9522ecc62bcf"}, + {file = "yarl-1.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:076b1ed2ac819933895b1a000904f62d615fe4533a5cf3e052ff9a1da560575c"}, + {file = "yarl-1.15.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f8cfd847e6b9ecf9f2f2531c8427035f291ec286c0a4944b0a9fce58c6446046"}, + {file = "yarl-1.15.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:32b66be100ac5739065496c74c4b7f3015cef792c3174982809274d7e51b3e04"}, + {file = "yarl-1.15.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:34a2d76a1984cac04ff8b1bfc939ec9dc0914821264d4a9c8fd0ed6aa8d4cfd2"}, + {file = "yarl-1.15.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0afad2cd484908f472c8fe2e8ef499facee54a0a6978be0e0cff67b1254fd747"}, + {file = "yarl-1.15.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c68e820879ff39992c7f148113b46efcd6ec765a4865581f2902b3c43a5f4bbb"}, + {file = "yarl-1.15.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:98f68df80ec6ca3015186b2677c208c096d646ef37bbf8b49764ab4a38183931"}, + {file = "yarl-1.15.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c56ec1eacd0a5d35b8a29f468659c47f4fe61b2cab948ca756c39b7617f0aa5"}, + {file = "yarl-1.15.2-cp311-cp311-win32.whl", hash = "sha256:eedc3f247ee7b3808ea07205f3e7d7879bc19ad3e6222195cd5fbf9988853e4d"}, + {file = "yarl-1.15.2-cp311-cp311-win_amd64.whl", hash = "sha256:0ccaa1bc98751fbfcf53dc8dfdb90d96e98838010fc254180dd6707a6e8bb179"}, + {file = "yarl-1.15.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:82d5161e8cb8f36ec778fd7ac4d740415d84030f5b9ef8fe4da54784a1f46c94"}, + {file = "yarl-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa2bea05ff0a8fb4d8124498e00e02398f06d23cdadd0fe027d84a3f7afde31e"}, + {file = "yarl-1.15.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:99e12d2bf587b44deb74e0d6170fec37adb489964dbca656ec41a7cd8f2ff178"}, + {file = "yarl-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:243fbbbf003754fe41b5bdf10ce1e7f80bcc70732b5b54222c124d6b4c2ab31c"}, + {file = "yarl-1.15.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:856b7f1a7b98a8c31823285786bd566cf06226ac4f38b3ef462f593c608a9bd6"}, + {file = "yarl-1.15.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:553dad9af802a9ad1a6525e7528152a015b85fb8dbf764ebfc755c695f488367"}, + {file = "yarl-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30c3ff305f6e06650a761c4393666f77384f1cc6c5c0251965d6bfa5fbc88f7f"}, + {file = "yarl-1.15.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:353665775be69bbfc6d54c8d134bfc533e332149faeddd631b0bc79df0897f46"}, + {file = "yarl-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f4fe99ce44128c71233d0d72152db31ca119711dfc5f2c82385ad611d8d7f897"}, + {file = "yarl-1.15.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:9c1e3ff4b89cdd2e1a24c214f141e848b9e0451f08d7d4963cb4108d4d798f1f"}, + {file = "yarl-1.15.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:711bdfae4e699a6d4f371137cbe9e740dc958530cb920eb6f43ff9551e17cfbc"}, + {file = "yarl-1.15.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4388c72174868884f76affcdd3656544c426407e0043c89b684d22fb265e04a5"}, + {file = "yarl-1.15.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f0e1844ad47c7bd5d6fa784f1d4accc5f4168b48999303a868fe0f8597bde715"}, + {file = "yarl-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5cafb02cf097a82d74403f7e0b6b9df3ffbfe8edf9415ea816314711764a27b"}, + {file = "yarl-1.15.2-cp312-cp312-win32.whl", hash = "sha256:156ececdf636143f508770bf8a3a0498de64da5abd890c7dbb42ca9e3b6c05b8"}, + {file = "yarl-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:435aca062444a7f0c884861d2e3ea79883bd1cd19d0a381928b69ae1b85bc51d"}, + {file = "yarl-1.15.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:416f2e3beaeae81e2f7a45dc711258be5bdc79c940a9a270b266c0bec038fb84"}, + {file = "yarl-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:173563f3696124372831007e3d4b9821746964a95968628f7075d9231ac6bb33"}, + {file = "yarl-1.15.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9ce2e0f6123a60bd1a7f5ae3b2c49b240c12c132847f17aa990b841a417598a2"}, + {file = "yarl-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eaea112aed589131f73d50d570a6864728bd7c0c66ef6c9154ed7b59f24da611"}, + {file = "yarl-1.15.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4ca3b9f370f218cc2a0309542cab8d0acdfd66667e7c37d04d617012485f904"}, + {file = "yarl-1.15.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23ec1d3c31882b2a8a69c801ef58ebf7bae2553211ebbddf04235be275a38548"}, + {file = "yarl-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75119badf45f7183e10e348edff5a76a94dc19ba9287d94001ff05e81475967b"}, + {file = "yarl-1.15.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78e6fdc976ec966b99e4daa3812fac0274cc28cd2b24b0d92462e2e5ef90d368"}, + {file = "yarl-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8657d3f37f781d987037f9cc20bbc8b40425fa14380c87da0cb8dfce7c92d0fb"}, + {file = "yarl-1.15.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:93bed8a8084544c6efe8856c362af08a23e959340c87a95687fdbe9c9f280c8b"}, + {file = "yarl-1.15.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:69d5856d526802cbda768d3e6246cd0d77450fa2a4bc2ea0ea14f0d972c2894b"}, + {file = "yarl-1.15.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ccad2800dfdff34392448c4bf834be124f10a5bc102f254521d931c1c53c455a"}, + {file = "yarl-1.15.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:a880372e2e5dbb9258a4e8ff43f13888039abb9dd6d515f28611c54361bc5644"}, + {file = "yarl-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c998d0558805860503bc3a595994895ca0f7835e00668dadc673bbf7f5fbfcbe"}, + {file = "yarl-1.15.2-cp313-cp313-win32.whl", hash = "sha256:533a28754e7f7439f217550a497bb026c54072dbe16402b183fdbca2431935a9"}, + {file = "yarl-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:5838f2b79dc8f96fdc44077c9e4e2e33d7089b10788464609df788eb97d03aad"}, + {file = "yarl-1.15.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fbbb63bed5fcd70cd3dd23a087cd78e4675fb5a2963b8af53f945cbbca79ae16"}, + {file = "yarl-1.15.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e2e93b88ecc8f74074012e18d679fb2e9c746f2a56f79cd5e2b1afcf2a8a786b"}, + {file = "yarl-1.15.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af8ff8d7dc07ce873f643de6dfbcd45dc3db2c87462e5c387267197f59e6d776"}, + {file = "yarl-1.15.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66f629632220a4e7858b58e4857927dd01a850a4cef2fb4044c8662787165cf7"}, + {file = "yarl-1.15.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:833547179c31f9bec39b49601d282d6f0ea1633620701288934c5f66d88c3e50"}, + {file = "yarl-1.15.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2aa738e0282be54eede1e3f36b81f1e46aee7ec7602aa563e81e0e8d7b67963f"}, + {file = "yarl-1.15.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a13a07532e8e1c4a5a3afff0ca4553da23409fad65def1b71186fb867eeae8d"}, + {file = "yarl-1.15.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c45817e3e6972109d1a2c65091504a537e257bc3c885b4e78a95baa96df6a3f8"}, + {file = "yarl-1.15.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:670eb11325ed3a6209339974b276811867defe52f4188fe18dc49855774fa9cf"}, + {file = "yarl-1.15.2-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:d417a4f6943112fae3924bae2af7112562285848d9bcee737fc4ff7cbd450e6c"}, + {file = "yarl-1.15.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bc8936d06cd53fddd4892677d65e98af514c8d78c79864f418bbf78a4a2edde4"}, + {file = "yarl-1.15.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:954dde77c404084c2544e572f342aef384240b3e434e06cecc71597e95fd1ce7"}, + {file = "yarl-1.15.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:5bc0df728e4def5e15a754521e8882ba5a5121bd6b5a3a0ff7efda5d6558ab3d"}, + {file = "yarl-1.15.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b71862a652f50babab4a43a487f157d26b464b1dedbcc0afda02fd64f3809d04"}, + {file = "yarl-1.15.2-cp38-cp38-win32.whl", hash = "sha256:63eab904f8630aed5a68f2d0aeab565dcfc595dc1bf0b91b71d9ddd43dea3aea"}, + {file = "yarl-1.15.2-cp38-cp38-win_amd64.whl", hash = "sha256:2cf441c4b6e538ba0d2591574f95d3fdd33f1efafa864faa077d9636ecc0c4e9"}, + {file = "yarl-1.15.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a32d58f4b521bb98b2c0aa9da407f8bd57ca81f34362bcb090e4a79e9924fefc"}, + {file = "yarl-1.15.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:766dcc00b943c089349d4060b935c76281f6be225e39994c2ccec3a2a36ad627"}, + {file = "yarl-1.15.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bed1b5dbf90bad3bfc19439258c97873eab453c71d8b6869c136346acfe497e7"}, + {file = "yarl-1.15.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed20a4bdc635f36cb19e630bfc644181dd075839b6fc84cac51c0f381ac472e2"}, + {file = "yarl-1.15.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d538df442c0d9665664ab6dd5fccd0110fa3b364914f9c85b3ef9b7b2e157980"}, + {file = "yarl-1.15.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c6cf1d92edf936ceedc7afa61b07e9d78a27b15244aa46bbcd534c7458ee1b"}, + {file = "yarl-1.15.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce44217ad99ffad8027d2fde0269ae368c86db66ea0571c62a000798d69401fb"}, + {file = "yarl-1.15.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47a6000a7e833ebfe5886b56a31cb2ff12120b1efd4578a6fcc38df16cc77bd"}, + {file = "yarl-1.15.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e52f77a0cd246086afde8815039f3e16f8d2be51786c0a39b57104c563c5cbb0"}, + {file = "yarl-1.15.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:f9ca0e6ce7774dc7830dc0cc4bb6b3eec769db667f230e7c770a628c1aa5681b"}, + {file = "yarl-1.15.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:136f9db0f53c0206db38b8cd0c985c78ded5fd596c9a86ce5c0b92afb91c3a19"}, + {file = "yarl-1.15.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:173866d9f7409c0fb514cf6e78952e65816600cb888c68b37b41147349fe0057"}, + {file = "yarl-1.15.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:6e840553c9c494a35e449a987ca2c4f8372668ee954a03a9a9685075228e5036"}, + {file = "yarl-1.15.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:458c0c65802d816a6b955cf3603186de79e8fdb46d4f19abaec4ef0a906f50a7"}, + {file = "yarl-1.15.2-cp39-cp39-win32.whl", hash = "sha256:5b48388ded01f6f2429a8c55012bdbd1c2a0c3735b3e73e221649e524c34a58d"}, + {file = "yarl-1.15.2-cp39-cp39-win_amd64.whl", hash = "sha256:81dadafb3aa124f86dc267a2168f71bbd2bfb163663661ab0038f6e4b8edb810"}, + {file = "yarl-1.15.2-py3-none-any.whl", hash = "sha256:0d3105efab7c5c091609abacad33afff33bdff0035bece164c98bcf5a85ef90a"}, + {file = "yarl-1.15.2.tar.gz", hash = "sha256:a39c36f4218a5bb668b4f06874d676d35a035ee668e6e7e3538835c703634b84"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" +propcache = ">=0.2.0" [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "0834872527b82aef5921c6b869a70c49ce36507d858e1371c05a079a77cfad86" +content-hash = "16e5703f1da093250c2007b84ea3e087d151cb0b6785d493c2c803c3a7dfecf7" diff --git a/libs/partners/couchbase/pyproject.toml b/libs/partners/couchbase/pyproject.toml index ea172790ebc1f..f051b4336d468 100644 --- a/libs/partners/couchbase/pyproject.toml +++ b/libs/partners/couchbase/pyproject.toml @@ -21,8 +21,8 @@ ignore_missing_imports = "True" [tool.poetry.dependencies] python = ">=3.9,<4.0" -langchain-core = "^0.3.0.dev" -couchbase = "^4.2.1" +langchain-core = "^0.3.10" +couchbase = "^4.3.2" [tool.ruff.lint] select = ["E", "F", "I", "T201"] From 3f74dfc3d8efb7c58065a336b12d99853d275e15 Mon Sep 17 00:00:00 2001 From: Enes Bol <76845631+enesbol@users.noreply.github.com> Date: Tue, 15 Oct 2024 23:57:50 +0200 Subject: [PATCH 03/84] community[patch]: Fix vLLM integration to filter SamplingParams (#27367) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Description:** - This pull request addresses a bug in Langchain's VLLM integration, where the use_beam_search parameter was erroneously passed to SamplingParams. The SamplingParams class in vLLM does not support the use_beam_search argument, which caused a TypeError. - This PR introduces logic to filter out unsupported parameters, ensuring that only valid parameters are passed to SamplingParams. As a result, the integration now functions as expected without errors. - The bug was reproduced by running the code sample from Langchain’s documentation, which triggered the error due to the invalid parameter. This fix resolves that error by implementing proper parameter filtering. **VLLM Sampling Params Class:** https://github.com/vllm-project/vllm/blob/main/vllm/sampling_params.py **Issue:** I could not found an Issue that belongs to this. Fixes "TypeError: Unexpected keyword argument 'use_beam_search'" error when using VLLM from Langchain. **Dependencies:** None. **Tests and Documentation**: Tests: No new functionality was added, but I tested the changes by running multiple prompts through the VLLM integration with various parameter configurations. All tests passed successfully without breaking compatibility. Docs No documentation changes were necessary as this is a bug fix. **Reproducing the Error:** https://python.langchain.com/docs/integrations/llms/vllm/ The code sample from the original documentation can be used to reproduce the error I got. from langchain_community.llms import VLLM llm = VLLM( model="mosaicml/mpt-7b", trust_remote_code=True, # mandatory for hf models max_new_tokens=128, top_k=10, top_p=0.95, temperature=0.8, ) print(llm.invoke("What is the capital of France ?")) ![image](https://github.com/user-attachments/assets/3782d6ac-1f7b-4acc-bf2c-186216149de5) This PR resolves the issue by ensuring that only valid parameters are passed to SamplingParams. --- libs/community/langchain_community/llms/vllm.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libs/community/langchain_community/llms/vllm.py b/libs/community/langchain_community/llms/vllm.py index b887a8b0ab246..dc8a7a76d24ed 100644 --- a/libs/community/langchain_community/llms/vllm.py +++ b/libs/community/langchain_community/llms/vllm.py @@ -123,14 +123,19 @@ def _generate( **kwargs: Any, ) -> LLMResult: """Run the LLM on the given prompt and input.""" - from vllm import SamplingParams # build sampling parameters params = {**self._default_params, **kwargs, "stop": stop} - sampling_params = SamplingParams(**params) + + # filter params for SamplingParams + known_keys = SamplingParams.__annotations__.keys() + sample_params = SamplingParams( + **{k: v for k, v in params.items() if k in known_keys} + ) + # call the model - outputs = self.client.generate(prompts, sampling_params) + outputs = self.client.generate(prompts, sample_params) generations = [] for output in outputs: From 8e66822100676096dd2b27070269667c27ec72d1 Mon Sep 17 00:00:00 2001 From: Leonid Ganeline Date: Tue, 15 Oct 2024 16:08:52 -0700 Subject: [PATCH 04/84] docs: `integrations google` update (#27218) I've made several titles more compact hence a more compact menu. Co-authored-by: Erick Friis --- docs/docs/integrations/platforms/google.mdx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/docs/integrations/platforms/google.mdx b/docs/docs/integrations/platforms/google.mdx index ea07b283634a7..f27587dc3e694 100644 --- a/docs/docs/integrations/platforms/google.mdx +++ b/docs/docs/integrations/platforms/google.mdx @@ -72,7 +72,7 @@ See a [usage example](/docs/integrations/chat/google_vertex_ai_palm). from langchain_google_vertexai import ChatVertexAI ``` -### Chat Anthropic on Vertex AI Model Garden +### Anthropic on Vertex AI Model Garden See a [usage example](/docs/integrations/llms/google_vertex_ai_palm). @@ -80,19 +80,19 @@ See a [usage example](/docs/integrations/llms/google_vertex_ai_palm). from langchain_google_vertexai.model_garden import ChatAnthropicVertex ``` -### Chat Llama on Vertex AI Model Garden +### Llama on Vertex AI Model Garden ```python from langchain_google_vertexai.model_garden_maas.llama import VertexModelGardenLlama ``` -### Chat Mistral on Vertex AI Model Garden +### Mistral on Vertex AI Model Garden ```python from langchain_google_vertexai.model_garden_maas.mistral import VertexModelGardenMistral ``` -### Chat Gemma local from Hugging Face +### Gemma local from Hugging Face >Local `Gemma` model loaded from `HuggingFace`. @@ -106,7 +106,7 @@ pip install langchain-google-vertexai from langchain_google_vertexai.gemma import GemmaChatLocalHF ``` -### Chat Gemma local from Kaggle +### Gemma local from Kaggle >Local `Gemma` model loaded from `Kaggle`. @@ -120,7 +120,7 @@ pip install langchain-google-vertexai from langchain_google_vertexai.gemma import GemmaChatLocalKaggle ``` -### Chat Gemma on Vertex AI Model Garden +### Gemma on Vertex AI Model Garden We need to install `langchain-google-vertexai` python package. @@ -132,7 +132,7 @@ pip install langchain-google-vertexai from langchain_google_vertexai.gemma import GemmaChatVertexAIModelGarden ``` -### Vertex AI image captioning chat +### Vertex AI image captioning >Implementation of the `Image Captioning model` as a chat. @@ -146,7 +146,7 @@ pip install langchain-google-vertexai from langchain_google_vertexai.vision_models import VertexAIImageCaptioningChat ``` -### Vertex AI image editor chat +### Vertex AI image editor >Given an image and a prompt, edit the image. Currently only supports mask-free editing. @@ -160,7 +160,7 @@ pip install langchain-google-vertexai from langchain_google_vertexai.vision_models import VertexAIImageEditorChat ``` -### Vertex AI image generator chat +### Vertex AI image generator >Generates an image from a prompt. @@ -174,7 +174,7 @@ pip install langchain-google-vertexai from langchain_google_vertexai.vision_models import VertexAIImageGeneratorChat ``` -### Vertex AI visual QnA chat +### Vertex AI visual QnA >Chat implementation of a visual QnA model From 15c1ddaf996fe305624f39e7b9e05adc6a4b2ffc Mon Sep 17 00:00:00 2001 From: xsai9101 Date: Tue, 15 Oct 2024 19:19:20 -0700 Subject: [PATCH 05/84] community: Add support for clob datatype in oracle database (#27330) **Description**: This PR add support of clob/blob data type for oracle document loader, clob/blob can only be read by oracledb package when connection is open, so reformat code to process data before connection closes. **Dependencies**: oracledb package same as before. pip install oracledb Co-authored-by: Erick Friis --- .../document_loaders/oracleadb_loader.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libs/community/langchain_community/document_loaders/oracleadb_loader.py b/libs/community/langchain_community/document_loaders/oracleadb_loader.py index 90a8d60885596..35da49c9affe9 100644 --- a/libs/community/langchain_community/document_loaders/oracleadb_loader.py +++ b/libs/community/langchain_community/document_loaders/oracleadb_loader.py @@ -100,7 +100,13 @@ def _run_query(self) -> List[Dict[str, Any]]: cursor.execute(self.query) columns = [col[0] for col in cursor.description] data = cursor.fetchall() - data = [dict(zip(columns, row)) for row in data] + data = [ + { + i: (j if not isinstance(j, oracledb.LOB) else j.read()) + for i, j in zip(columns, row) + } + for row in data + ] except oracledb.DatabaseError as e: print("Got error while connecting: " + str(e)) # noqa: T201 data = [] From b8bfebd382caff3cebeb2d2ca158df4176816d8a Mon Sep 17 00:00:00 2001 From: Yuki Watanabe <31463517+B-Step62@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:20:40 +0900 Subject: [PATCH 06/84] community: Add deprecation notice for Databricks integration in langchain-community (#27355) We have released the [langchain-databricks](https://github.com/langchain-ai/langchain-databricks) package for Databricks integration. This PR deprecates the legacy classes within `langchain-community`. --------- Signed-off-by: B-Step62 Co-authored-by: Erick Friis --- .../langchain_community/chat_models/databricks.py | 7 +++++++ .../community/langchain_community/embeddings/databricks.py | 7 +++++++ libs/community/langchain_community/llms/databricks.py | 6 ++++++ .../vectorstores/databricks_vector_search.py | 7 ++++++- 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/libs/community/langchain_community/chat_models/databricks.py b/libs/community/langchain_community/chat_models/databricks.py index 992adf574cc29..5f17e3690aaf3 100644 --- a/libs/community/langchain_community/chat_models/databricks.py +++ b/libs/community/langchain_community/chat_models/databricks.py @@ -1,11 +1,18 @@ import logging from urllib.parse import urlparse +from langchain_core._api import deprecated + from langchain_community.chat_models.mlflow import ChatMlflow logger = logging.getLogger(__name__) +@deprecated( + since="0.3.3", + removal="1.0", + alternative_import="langchain_databricks.ChatDatabricks", +) class ChatDatabricks(ChatMlflow): """`Databricks` chat models API. diff --git a/libs/community/langchain_community/embeddings/databricks.py b/libs/community/langchain_community/embeddings/databricks.py index 8ea3867fa4208..b83f15fa19823 100644 --- a/libs/community/langchain_community/embeddings/databricks.py +++ b/libs/community/langchain_community/embeddings/databricks.py @@ -3,6 +3,8 @@ from typing import Iterator, List from urllib.parse import urlparse +from langchain_core._api import deprecated + from langchain_community.embeddings.mlflow import MlflowEmbeddings @@ -11,6 +13,11 @@ def _chunk(texts: List[str], size: int) -> Iterator[List[str]]: yield texts[i : i + size] +@deprecated( + since="0.3.3", + removal="1.0", + alternative_import="langchain_databricks.DatabricksEmbeddings", +) class DatabricksEmbeddings(MlflowEmbeddings): """Databricks embeddings. diff --git a/libs/community/langchain_community/llms/databricks.py b/libs/community/langchain_community/llms/databricks.py index 9f535d7373d82..3f7aa42f2fda6 100644 --- a/libs/community/langchain_community/llms/databricks.py +++ b/libs/community/langchain_community/llms/databricks.py @@ -5,6 +5,7 @@ from typing import Any, Callable, Dict, List, Mapping, Optional import requests +from langchain_core._api import deprecated from langchain_core.callbacks import CallbackManagerForLLMRun from langchain_core.language_models import LLM from pydantic import ( @@ -262,6 +263,11 @@ def _pickle_fn_to_hex_string(fn: Callable) -> str: raise ValueError(f"Failed to pickle the function: {e}") +@deprecated( + since="0.3.3", + removal="1.0", + alternative_import="langchain_databricks.ChatDatabricks", +) class Databricks(LLM): """Databricks serving endpoint or a cluster driver proxy app for LLM. diff --git a/libs/community/langchain_community/vectorstores/databricks_vector_search.py b/libs/community/langchain_community/vectorstores/databricks_vector_search.py index 2c0727647a8a1..9d8e1228515bf 100644 --- a/libs/community/langchain_community/vectorstores/databricks_vector_search.py +++ b/libs/community/langchain_community/vectorstores/databricks_vector_search.py @@ -16,7 +16,7 @@ ) import numpy as np -from langchain_core._api import warn_deprecated +from langchain_core._api import deprecated, warn_deprecated from langchain_core.documents import Document from langchain_core.embeddings import Embeddings from langchain_core.vectorstores import VST, VectorStore @@ -29,6 +29,11 @@ logger = logging.getLogger(__name__) +@deprecated( + since="0.3.3", + removal="1.0", + alternative_import="langchain_databricks.DatabricksVectorSearch", +) class DatabricksVectorSearch(VectorStore): """`Databricks Vector Search` vector store. From 591a3db4fb74f03f1f0bb0b47c5a8d3fcf0cdb0f Mon Sep 17 00:00:00 2001 From: Mateusz Szewczyk <139469471+MateuszOssGit@users.noreply.github.com> Date: Wed, 16 Oct 2024 04:27:56 +0200 Subject: [PATCH 07/84] docs: Update IBM `ChatWatsonx` documentation (#27358) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thank you for contributing to LangChain! We would like update IBM ChatWatsonx documentation in LangChain documentation Changes: - Added support for `JSON mode` - Added support for `Image Input` - Added support for `Logprobs` Chat Standard tests -> https://github.com/langchain-ai/langchain-ibm/blob/main/libs/ibm/tests/integration_tests/test_chat_models_standard.py Integration_tests job ✅ -> https://github.com/langchain-ai/langchain-ibm/actions/runs/11327509188 Co-authored-by: Erick Friis --- docs/docs/integrations/chat/ibm_watsonx.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/integrations/chat/ibm_watsonx.ipynb b/docs/docs/integrations/chat/ibm_watsonx.ipynb index 6ec76de78d5a1..28a6b4072b04b 100644 --- a/docs/docs/integrations/chat/ibm_watsonx.ipynb +++ b/docs/docs/integrations/chat/ibm_watsonx.ipynb @@ -41,7 +41,7 @@ "### Model features\n", "| [Tool calling](/docs/how_to/tool_calling/) | [Structured output](/docs/how_to/structured_output/) | JSON mode | Image input | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", - "| ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | " + "| ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | " ] }, { From 316541536940a0e063ed09f48d2bec05ded862c3 Mon Sep 17 00:00:00 2001 From: Leonid Ganeline Date: Tue, 15 Oct 2024 19:41:06 -0700 Subject: [PATCH 08/84] docs: `integrations` updates 21 (#27380) Added missed provider pages. Added descriptions and links. Fixed inconsistency in text formatting. --------- Co-authored-by: Erick Friis Co-authored-by: Erick Friis --- .../integrations/providers/byte_dance.mdx | 16 +++++++++---- docs/docs/integrations/providers/localai.mdx | 24 +++++++++++++++++++ docs/docs/integrations/providers/milvus.mdx | 18 ++++++++++---- docs/docs/integrations/providers/mongodb.mdx | 24 +++++++++++++++++++ .../integrations/providers/mongodb_atlas.mdx | 22 ++++++++++++++++- 5 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 docs/docs/integrations/providers/localai.mdx create mode 100644 docs/docs/integrations/providers/mongodb.mdx diff --git a/docs/docs/integrations/providers/byte_dance.mdx b/docs/docs/integrations/providers/byte_dance.mdx index 8746bcf519fe4..25f6e2533ef62 100644 --- a/docs/docs/integrations/providers/byte_dance.mdx +++ b/docs/docs/integrations/providers/byte_dance.mdx @@ -8,15 +8,23 @@ Get the access token. You can find the access instructions [here](https://open.larksuite.com/document) -## Document Loader - -### Lark Suite +## Document Loaders >[Lark Suite](https://www.larksuite.com/) is an enterprise collaboration platform > developed by `ByteDance`. -See a [usage example](/docs/integrations/document_loaders/larksuite). +### Lark Suite for Document + +See a [usage example](/docs/integrations/document_loaders/larksuite/#load-from-document). ```python from langchain_community.document_loaders.larksuite import LarkSuiteDocLoader ``` + +### Lark Suite for Wiki + +See a [usage example](/docs/integrations/document_loaders/larksuite/#load-from-wiki). + +```python +from langchain_community.document_loaders.larksuite import LarkSuiteWikiLoader +``` diff --git a/docs/docs/integrations/providers/localai.mdx b/docs/docs/integrations/providers/localai.mdx new file mode 100644 index 0000000000000..1424420b53338 --- /dev/null +++ b/docs/docs/integrations/providers/localai.mdx @@ -0,0 +1,24 @@ +# LocalAI + +>[LocalAI](https://localai.io/) is the free, Open Source OpenAI alternative. +> `LocalAI` act as a drop-in replacement REST API that’s compatible with OpenAI API +> specifications for local inferencing. It allows you to run LLMs, generate images, +> audio (and not only) locally or on-prem with consumer grade hardware, +> supporting multiple model families and architectures. + +## Installation and Setup + +We have to install several python packages: + +```bash +pip install tenacity openai +``` + + +## Embedding models + +See a [usage example](/docs/integrations/text_embedding/localai). + +```python +from langchain_community.embeddings import LocalAIEmbeddings +``` diff --git a/docs/docs/integrations/providers/milvus.mdx b/docs/docs/integrations/providers/milvus.mdx index ea11c08fd1b4c..d73590fdff0c0 100644 --- a/docs/docs/integrations/providers/milvus.mdx +++ b/docs/docs/integrations/providers/milvus.mdx @@ -9,17 +9,25 @@ Install the Python SDK: ```bash -pip install pymilvus +pip install langchain-milvus ``` ## Vector Store -There exists a wrapper around `Milvus` indexes, allowing you to use it as a vectorstore, -whether for semantic search or example selection. +See a [usage example](/docs/integrations/vectorstores/milvus). To import this vectorstore: ```python -from langchain_community.vectorstores import Milvus +from langchain_milvus import Milvus +``` + +## Retrievers + +See a [usage example](/docs/integrations/retrievers/milvus_hybrid_search). + +To import this vectorstore: +```python +from langchain_milvus.retrievers import MilvusCollectionHybridSearchRetriever +from langchain_milvus.utils.sparse import BM25SparseEmbedding ``` -For a more detailed walkthrough of the `Miluvs` wrapper, see [this notebook](/docs/integrations/vectorstores/milvus) diff --git a/docs/docs/integrations/providers/mongodb.mdx b/docs/docs/integrations/providers/mongodb.mdx new file mode 100644 index 0000000000000..f981cdc130271 --- /dev/null +++ b/docs/docs/integrations/providers/mongodb.mdx @@ -0,0 +1,24 @@ +# MongoDB + +>[MongoDB](https://www.mongodb.com/) is a NoSQL, document-oriented +> database that supports JSON-like documents with a dynamic schema. + +**NOTE:** +- See other `MongoDB` integrations on the [MongoDB Atlas page](/docs/integrations/providers/mongodb_atlas). + +## Installation and Setup + +Install the Python package: + +```bash +pip install langchain-mongodb +``` + +## Message Histories + +See a [usage example](/docs/integrations/memory/mongodb_chat_message_history). + +To import this vectorstore: +```python +from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory +``` diff --git a/docs/docs/integrations/providers/mongodb_atlas.mdx b/docs/docs/integrations/providers/mongodb_atlas.mdx index 67fd9b2395c3f..601b84f015cbd 100644 --- a/docs/docs/integrations/providers/mongodb_atlas.mdx +++ b/docs/docs/integrations/providers/mongodb_atlas.mdx @@ -22,10 +22,30 @@ See a [usage example](/docs/integrations/vectorstores/mongodb_atlas). from langchain_mongodb import MongoDBAtlasVectorSearch ``` +## Retrievers -## LLM Caches +### Full Text Search Retriever + +>`Hybrid Search Retriever` performs full-text searches using +> Lucene’s standard (`BM25`) analyzer. + +```python +from langchain_mongodb.retrievers import MongoDBAtlasFullTextSearchRetriever +``` + +### Hybrid Search Retriever + +>`Hybrid Search Retriever` combines vector and full-text searches weighting +> them the via `Reciprocal Rank Fusion` (`RRF`) algorithm. + +```python +from langchain_mongodb.retrievers import MongoDBAtlasHybridSearchRetriever +``` + +## Model Caches ### MongoDBCache + An abstraction to store a simple cache in MongoDB. This does not use Semantic Caching, nor does it require an index to be made on the collection before generation. To import this cache: From 31e7664afd3a9f31d469f643ed35b8ac43468288 Mon Sep 17 00:00:00 2001 From: sByteman <78813459+ccq1@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:29:59 +0800 Subject: [PATCH 09/84] community[minor]: add proxy support to RecursiveUrlLoader (#27364) **Description** This PR introduces the proxies parameter to the RecursiveUrlLoader class, allowing the user to specify proxy servers for requests. This update enables crawling through proxy servers, providing enhanced flexibility for network configurations. The key changes include: 1.Added an optional proxies parameter to the constructor (__init__). 2.Updated the documentation to explain the proxies parameter usage with an example. 3.Modified the _get_child_links_recursive method to pass the proxies parameter to the requests.get function. **Sample Usage** ```python from bs4 import BeautifulSoup as Soup from langchain_community.document_loaders.recursive_url_loader import RecursiveUrlLoader proxies = { "http": "http://localhost:1080", "https": "http://localhost:1080", } url = "https://python.langchain.com/docs/concepts/#langchain-expression-language-lcel" loader = RecursiveUrlLoader( url=url, max_depth=1, extractor=lambda x: Soup(x, "html.parser").text,proxies=proxies ) docs = loader.load() ``` --------- Co-authored-by: root --- docs/docs/security.md | 2 +- .../document_loaders/recursive_url_loader.py | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/docs/security.md b/docs/docs/security.md index e583642c66a75..08e841c89a25d 100644 --- a/docs/docs/security.md +++ b/docs/docs/security.md @@ -6,7 +6,7 @@ LangChain has a large ecosystem of integrations with various external resources When building such applications developers should remember to follow good security practices: -* [**Limit Permissions**](https://en.wikipedia.org/wiki/Principle_of_least_privilege): Scope permissions specifically to the application's need. Granting broad or excessive permissions can introduce significant security vulnerabilities. To avoid such vulnerabilities, consider using read-only credentials, disallowing access to sensitive resources, using sandboxing techniques (such as running inside a container), etc. as appropriate for your application. +* [**Limit Permissions**](https://en.wikipedia.org/wiki/Principle_of_least_privilege): Scope permissions specifically to the application's need. Granting broad or excessive permissions can introduce significant security vulnerabilities. To avoid such vulnerabilities, consider using read-only credentials, disallowing access to sensitive resources, using sandboxing techniques (such as running inside a container), specifying proxy configurations to control external requests, etc. as appropriate for your application. * **Anticipate Potential Misuse**: Just as humans can err, so can Large Language Models (LLMs). Always assume that any system access or credentials may be used in any way allowed by the permissions they are assigned. For example, if a pair of database credentials allows deleting data, it’s safest to assume that any LLM able to use those credentials may in fact delete data. * [**Defense in Depth**](https://en.wikipedia.org/wiki/Defense_in_depth_(computing)): No security technique is perfect. Fine-tuning and good chain design can reduce, but not eliminate, the odds that a Large Language Model (LLM) may make a mistake. It’s best to combine multiple layered security approaches rather than relying on any single layer of defense to ensure security. For example: use both read-only permissions and sandboxing to ensure that LLMs are only able to access data that is explicitly meant for them to use. diff --git a/libs/community/langchain_community/document_loaders/recursive_url_loader.py b/libs/community/langchain_community/document_loaders/recursive_url_loader.py index d204344474736..ebf119bafc220 100644 --- a/libs/community/langchain_community/document_loaders/recursive_url_loader.py +++ b/libs/community/langchain_community/document_loaders/recursive_url_loader.py @@ -268,6 +268,7 @@ def __init__( base_url: Optional[str] = None, autoset_encoding: bool = True, encoding: Optional[str] = None, + proxies: Optional[dict] = None, ) -> None: """Initialize with URL to crawl and any subdirectories to exclude. @@ -313,6 +314,16 @@ def simple_metadata_extractor( encoding, unless the `encoding` argument has already been explicitly set. encoding: The encoding of the response. If manually set, the encoding will be set to given value, regardless of the `autoset_encoding` argument. + proxies: A dictionary mapping protocol names to the proxy URLs to be used for requests. + This allows the crawler to route its requests through specified proxy servers. + If None, no proxies will be used and requests will go directly to the target URL. + Example usage: + ..code-block:: python + + proxies = { + "http": "http://10.10.1.10:3128", + "https": "https://10.10.1.10:1080", + } """ # noqa: E501 self.url = url @@ -342,6 +353,7 @@ def simple_metadata_extractor( self.check_response_status = check_response_status self.continue_on_failure = continue_on_failure self.base_url = base_url if base_url is not None else url + self.proxies = proxies def _get_child_links_recursive( self, url: str, visited: Set[str], *, depth: int = 0 @@ -360,7 +372,9 @@ def _get_child_links_recursive( # Get all links that can be accessed from the current URL visited.add(url) try: - response = requests.get(url, timeout=self.timeout, headers=self.headers) + response = requests.get( + url, timeout=self.timeout, headers=self.headers, proxies=self.proxies + ) if self.encoding is not None: response.encoding = self.encoding From a4392b070db5e46a23e08b9c7336d23510598a8d Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Thu, 17 Oct 2024 02:10:10 +0900 Subject: [PATCH 10/84] core[patch]: add convert_to_openai_messages util (#27263) Co-authored-by: Erick Friis --- libs/core/langchain_core/messages/__init__.py | 2 + libs/core/langchain_core/messages/utils.py | 380 +++++++++++++++++- .../tests/unit_tests/messages/test_imports.py | 1 + .../tests/unit_tests/messages/test_utils.py | 307 +++++++++++++- libs/langchain/langchain/chat_models/base.py | 4 +- .../langchain_anthropic/chat_models.py | 12 +- 6 files changed, 686 insertions(+), 20 deletions(-) diff --git a/libs/core/langchain_core/messages/__init__.py b/libs/core/langchain_core/messages/__init__.py index 4a28feedd8f02..f8fdf4d4a3bed 100644 --- a/libs/core/langchain_core/messages/__init__.py +++ b/libs/core/langchain_core/messages/__init__.py @@ -43,6 +43,7 @@ MessageLikeRepresentation, _message_from_dict, convert_to_messages, + convert_to_openai_messages, filter_messages, get_buffer_string, merge_message_runs, @@ -83,4 +84,5 @@ "filter_messages", "merge_message_runs", "trim_messages", + "convert_to_openai_messages", ] diff --git a/libs/core/langchain_core/messages/utils.py b/libs/core/langchain_core/messages/utils.py index 8f88502c1df30..d3194226ea217 100644 --- a/libs/core/langchain_core/messages/utils.py +++ b/libs/core/langchain_core/messages/utils.py @@ -9,6 +9,7 @@ from __future__ import annotations +import base64 import inspect import json from collections.abc import Iterable, Sequence @@ -34,7 +35,7 @@ from langchain_core.messages.human import HumanMessage, HumanMessageChunk from langchain_core.messages.modifier import RemoveMessage from langchain_core.messages.system import SystemMessage, SystemMessageChunk -from langchain_core.messages.tool import ToolMessage, ToolMessageChunk +from langchain_core.messages.tool import ToolCall, ToolMessage, ToolMessageChunk if TYPE_CHECKING: from langchain_text_splitters import TextSplitter @@ -171,7 +172,7 @@ def messages_from_dict(messages: Sequence[dict]) -> list[BaseMessage]: messages: Sequence of messages (as dicts) to convert. Returns: - List of messages (BaseMessages). + list of messages (BaseMessages). """ return [_message_from_dict(m) for m in messages] @@ -217,9 +218,9 @@ def _create_message_from_message_type( content: (str) the content string. name: (str) the name of the message. Default is None. tool_call_id: (str) the tool call id. Default is None. - tool_calls: (List[Dict[str, Any]]) the tool calls. Default is None. + tool_calls: (list[dict[str, Any]]) the tool calls. Default is None. id: (str) the id of the message. Default is None. - **additional_kwargs: (Dict[str, Any]) additional keyword arguments. + **additional_kwargs: (dict[str, Any]) additional keyword arguments. Returns: a message of the appropriate type. @@ -337,7 +338,7 @@ def convert_to_messages( messages: Sequence of messages to convert. Returns: - List of messages (BaseMessages). + list of messages (BaseMessages). """ # Import here to avoid circular imports from langchain_core.prompt_values import PromptValue @@ -359,7 +360,8 @@ def wrapped( ) -> list[BaseMessage]: ... def wrapped( - messages: Optional[Sequence[MessageLikeRepresentation]] = None, **kwargs: Any + messages: Union[Sequence[MessageLikeRepresentation], None] = None, + **kwargs: Any, ) -> Union[ list[BaseMessage], Runnable[Sequence[MessageLikeRepresentation], list[BaseMessage]], @@ -479,7 +481,7 @@ def merge_message_runs( Default is "\n". Returns: - List of BaseMessages with consecutive runs of message types merged into single + list of BaseMessages with consecutive runs of message types merged into single messages. By default, if two messages being merged both have string contents, the merged content is a concatenation of the two strings with a new-line separator. The separator inserted between message chunks can be controlled by specifying @@ -655,7 +657,7 @@ def trim_messages( newlines. Returns: - List of trimmed BaseMessages. + list of trimmed BaseMessages. Raises: ValueError: if two incompatible arguments are specified or an unrecognized @@ -668,7 +670,7 @@ def trim_messages( .. code-block:: python - from typing import List + from typing import list from langchain_core.messages import ( AIMessage, @@ -768,7 +770,7 @@ def trim_messages( AIMessage("This is a 4 token text. The full message is 10 tokens.", id="fourth"), ] - def dummy_token_counter(messages: List[BaseMessage]) -> int: + def dummy_token_counter(messages: list[BaseMessage]) -> int: # treat each message like it adds 3 default tokens at the beginning # of the message and at the end of the message. 3 + 4 + 3 = 10 tokens # per message. @@ -868,6 +870,328 @@ def list_token_counter(messages: Sequence[BaseMessage]) -> int: raise ValueError(msg) +def convert_to_openai_messages( + messages: Union[MessageLikeRepresentation, Sequence[MessageLikeRepresentation]], + *, + text_format: Literal["string", "block"] = "string", +) -> Union[dict, list[dict]]: + """Convert LangChain messages into OpenAI message dicts. + + .. versionadded:: 0.3.11 + + Args: + messages: Message-like object or iterable of objects whose contents are + in OpenAI, Anthropic, Bedrock Converse, or VertexAI formats. + text_format: How to format string or text block contents: + + - "string": + If a message has a string content, this is left as a string. If + a message has content blocks that are all of type 'text', these are + joined with a newline to make a single string. If a message has + content blocks and at least one isn't of type 'text', then + all blocks are left as dicts. + - "block": + If a message has a string content, this is turned into a list + with a single content block of type 'text'. If a message has content + blocks these are left as is. + + Returns: + The return type depends on the input type: + - dict: + If a single message-like object is passed in, a single OpenAI message + dict is returned. + - list[dict]: + If a sequence of message-like objects are passed in, a list of OpenAI + message dicts is returned. + + Example: + + .. code-block:: python + + from langchain_core.messages import ( + convert_to_openai_messages, + AIMessage, + SystemMessage, + ToolMessage, + ) + + messages = [ + SystemMessage([{"type": "text", "text": "foo"}]), + {"role": "user", "content": [{"type": "text", "text": "whats in this"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,'/9j/4AAQSk'"}}]}, + AIMessage("", tool_calls=[{"name": "analyze", "args": {"baz": "buz"}, "id": "1", "type": "tool_call"}]), + ToolMessage("foobar", tool_call_id="1", name="bar"), + {"role": "assistant", "content": "thats nice"}, + ] + oai_messages = convert_to_openai_messages(messages) + # -> [ + # {'role': 'system', 'content': 'foo'}, + # {'role': 'user', 'content': [{'type': 'text', 'text': 'whats in this'}, {'type': 'image_url', 'image_url': {'url': "data:image/png;base64,'/9j/4AAQSk'"}}]}, + # {'role': 'assistant', 'tool_calls': [{'type': 'function', 'id': '1','function': {'name': 'analyze', 'arguments': '{"baz": "buz"}'}}], 'content': ''}, + # {'role': 'tool', 'name': 'bar', 'content': 'foobar'}, + # {'role': 'assistant', 'content': 'thats nice'} + # ] + + """ # noqa: E501 + if text_format not in ("string", "block"): + err = f"Unrecognized {text_format=}, expected one of 'string' or 'block'." + raise ValueError(err) + + oai_messages: list = [] + + if is_single := isinstance(messages, (BaseMessage, dict)): + messages = [messages] + messages = convert_to_messages(messages) + + for i, message in enumerate(messages): + oai_msg: dict = {"role": _get_message_openai_role(message)} + tool_messages: list = [] + content: Union[str, list[dict]] + + if message.name: + oai_msg["name"] = message.name + if isinstance(message, AIMessage) and message.tool_calls: + oai_msg["tool_calls"] = _convert_to_openai_tool_calls(message.tool_calls) + if message.additional_kwargs.get("refusal"): + oai_msg["refusal"] = message.additional_kwargs["refusal"] + if isinstance(message, ToolMessage): + oai_msg["tool_call_id"] = message.tool_call_id + + if not message.content: + content = "" if text_format == "string" else [] + elif isinstance(message.content, str): + if text_format == "string": + content = message.content + else: + content = [{"type": "text", "text": message.content}] + else: + if text_format == "string" and all( + isinstance(block, str) or block.get("type") == "text" + for block in message.content + ): + content = "\n".join( + block if isinstance(block, str) else block["text"] + for block in message.content + ) + else: + content = [] + for j, block in enumerate(message.content): + # OpenAI format + if isinstance(block, str): + content.append({"type": "text", "text": block}) + elif block.get("type") == "text": + if missing := [k for k in ("text",) if k not in block]: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': 'text' " + f"but is missing expected key(s) " + f"{missing}. Full content block:\n\n{block}" + ) + raise ValueError(err) + content.append({"type": block["type"], "text": block["text"]}) + elif block.get("type") == "image_url": + if missing := [k for k in ("image_url",) if k not in block]: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': 'image_url' " + f"but is missing expected key(s) " + f"{missing}. Full content block:\n\n{block}" + ) + raise ValueError(err) + content.append( + {"type": "image_url", "image_url": block["image_url"]} + ) + # Anthropic and Bedrock converse format + elif (block.get("type") == "image") or "image" in block: + # Anthropic + if source := block.get("source"): + if missing := [ + k + for k in ("media_type", "type", "data") + if k not in source + ]: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': 'image' " + f"but 'source' is missing expected key(s) " + f"{missing}. Full content block:\n\n{block}" + ) + raise ValueError(err) + content.append( + { + "type": "image_url", + "image_url": { + "url": ( + f"data:{source['media_type']};" + f"{source['type']},{source['data']}" + ) + }, + } + ) + # Bedrock converse + elif image := block.get("image"): + if missing := [ + k for k in ("source", "format") if k not in image + ]: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has key 'image', " + f"but 'image' is missing expected key(s) " + f"{missing}. Full content block:\n\n{block}" + ) + raise ValueError(err) + b64_image = _bytes_to_b64_str(image["source"]["bytes"]) + content.append( + { + "type": "image_url", + "image_url": { + "url": ( + f"data:image/{image['format']};" + f"base64,{b64_image}" + ) + }, + } + ) + else: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': 'image' " + f"but does not have a 'source' or 'image' key. Full " + f"content block:\n\n{block}" + ) + raise ValueError(err) + elif block.get("type") == "tool_use": + if missing := [ + k for k in ("id", "name", "input") if k not in block + ]: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': " + f"'tool_use', but is missing expected key(s) " + f"{missing}. Full content block:\n\n{block}" + ) + raise ValueError(err) + if not any( + tool_call["id"] == block["id"] + for tool_call in cast(AIMessage, message).tool_calls + ): + oai_msg["tool_calls"] = oai_msg.get("tool_calls", []) + oai_msg["tool_calls"].append( + { + "type": "function", + "id": block["id"], + "function": { + "name": block["name"], + "arguments": json.dumps(block["input"]), + }, + } + ) + elif block.get("type") == "tool_result": + if missing := [ + k for k in ("content", "tool_use_id") if k not in block + ]: + msg = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': " + f"'tool_result', but is missing expected key(s) " + f"{missing}. Full content block:\n\n{block}" + ) + raise ValueError(msg) + tool_message = ToolMessage( + block["content"], + tool_call_id=block["tool_use_id"], + status="error" if block.get("is_error") else "success", + ) + # Recurse to make sure tool message contents are OpenAI format. + tool_messages.extend( + convert_to_openai_messages( + [tool_message], text_format=text_format + ) + ) + elif (block.get("type") == "json") or "json" in block: + if "json" not in block: + msg = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': 'json' " + f"but does not have a 'json' key. Full " + f"content block:\n\n{block}" + ) + raise ValueError(msg) + content.append( + {"type": "text", "text": json.dumps(block["json"])} + ) + elif ( + block.get("type") == "guard_content" + ) or "guard_content" in block: + if ( + "guard_content" not in block + or "text" not in block["guard_content"] + ): + msg = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': " + f"'guard_content' but does not have a " + f"messages[{i}].content[{j}]['guard_content']['text'] " + f"key. Full content block:\n\n{block}" + ) + raise ValueError(msg) + text = block["guard_content"]["text"] + if isinstance(text, dict): + text = text["text"] + content.append({"type": "text", "text": text}) + # VertexAI format + elif block.get("type") == "media": + if missing := [ + k for k in ("mime_type", "data") if k not in block + ]: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] has 'type': " + f"'media' but does not have key(s) {missing}. Full " + f"content block:\n\n{block}" + ) + raise ValueError(err) + if "image" not in block["mime_type"]: + err = ( + f"OpenAI messages can only support text and image data." + f" Received content block with media of type:" + f" {block['mime_type']}" + ) + raise ValueError(err) + b64_image = _bytes_to_b64_str(block["data"]) + content.append( + { + "type": "image_url", + "image_url": { + "url": ( + f"data:{block['mime_type']};base64,{b64_image}" + ) + }, + } + ) + else: + err = ( + f"Unrecognized content block at " + f"messages[{i}].content[{j}] does not match OpenAI, " + f"Anthropic, Bedrock Converse, or VertexAI format. Full " + f"content block:\n\n{block}" + ) + raise ValueError(err) + if text_format == "string" and not any( + block["type"] != "text" for block in content + ): + content = "\n".join(block["text"] for block in content) + oai_msg["content"] = content + if message.content and not oai_msg["content"] and tool_messages: + oai_messages.extend(tool_messages) + else: + oai_messages.extend([oai_msg, *tool_messages]) + + if is_single: + return oai_messages[0] + else: + return oai_messages + + def _first_max_tokens( messages: Sequence[BaseMessage], *, @@ -1036,3 +1360,39 @@ def _is_message_type( types_types = tuple(t for t in types if isinstance(t, type)) return message.type in types_str or isinstance(message, types_types) + + +def _bytes_to_b64_str(bytes_: bytes) -> str: + return base64.b64encode(bytes_).decode("utf-8") + + +def _get_message_openai_role(message: BaseMessage) -> str: + if isinstance(message, AIMessage): + return "assistant" + elif isinstance(message, HumanMessage): + return "user" + elif isinstance(message, ToolMessage): + return "tool" + elif isinstance(message, SystemMessage): + return "system" + elif isinstance(message, FunctionMessage): + return "function" + elif isinstance(message, ChatMessage): + return message.role + else: + msg = f"Unknown BaseMessage type {message.__class__}." + raise ValueError(msg) + + +def _convert_to_openai_tool_calls(tool_calls: list[ToolCall]) -> list[dict]: + return [ + { + "type": "function", + "id": tool_call["id"], + "function": { + "name": tool_call["name"], + "arguments": json.dumps(tool_call["args"]), + }, + } + for tool_call in tool_calls + ] diff --git a/libs/core/tests/unit_tests/messages/test_imports.py b/libs/core/tests/unit_tests/messages/test_imports.py index 531409a42614d..18d8cd5243f40 100644 --- a/libs/core/tests/unit_tests/messages/test_imports.py +++ b/libs/core/tests/unit_tests/messages/test_imports.py @@ -32,6 +32,7 @@ "filter_messages", "merge_message_runs", "trim_messages", + "convert_to_openai_messages", ] diff --git a/libs/core/tests/unit_tests/messages/test_utils.py b/libs/core/tests/unit_tests/messages/test_utils.py index f994ace071c62..9cd9543dc7c8e 100644 --- a/libs/core/tests/unit_tests/messages/test_utils.py +++ b/libs/core/tests/unit_tests/messages/test_utils.py @@ -1,3 +1,4 @@ +import base64 import json import pytest @@ -13,6 +14,7 @@ ) from langchain_core.messages.utils import ( convert_to_messages, + convert_to_openai_messages, filter_messages, merge_message_runs, trim_messages, @@ -565,6 +567,307 @@ def test_convert_to_messages() -> None: assert expected == actual -@pytest.mark.xfail(reason="AI message does not support refusal key yet.") def test_convert_to_messages_openai_refusal() -> None: - convert_to_messages([{"role": "assistant", "refusal": "9.1"}]) + actual = convert_to_messages( + [{"role": "assistant", "content": "", "refusal": "9.1"}] + ) + expected = [AIMessage("", additional_kwargs={"refusal": "9.1"})] + assert actual == expected + + # Raises error if content is missing. + with pytest.raises(ValueError): + convert_to_messages([{"role": "assistant", "refusal": "9.1"}]) + + +def create_image_data() -> str: + return "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigD//2Q==" # noqa: E501 + + +def create_base64_image(format: str = "jpeg") -> str: + data = create_image_data() + return f"data:image/{format};base64,{data}" # noqa: E501 + + +def test_convert_to_openai_messages_single_message() -> None: + message = HumanMessage(content="Hello") + result = convert_to_openai_messages(message) + assert result == {"role": "user", "content": "Hello"} + + +def test_convert_to_openai_messages_multiple_messages() -> None: + messages = [ + SystemMessage(content="System message"), + HumanMessage(content="Human message"), + AIMessage(content="AI message"), + ] + result = convert_to_openai_messages(messages) + expected = [ + {"role": "system", "content": "System message"}, + {"role": "user", "content": "Human message"}, + {"role": "assistant", "content": "AI message"}, + ] + assert result == expected + + +def test_convert_to_openai_messages_openai_string() -> None: + messages = [ + HumanMessage( + content=[ + {"type": "text", "text": "Hello"}, + {"type": "text", "text": "World"}, + ] + ), + AIMessage( + content=[{"type": "text", "text": "Hi"}, {"type": "text", "text": "there"}] + ), + ] + result = convert_to_openai_messages(messages) + expected = [ + {"role": "user", "content": "Hello\nWorld"}, + {"role": "assistant", "content": "Hi\nthere"}, + ] + assert result == expected + + +def test_convert_to_openai_messages_openai_block() -> None: + messages = [HumanMessage(content="Hello"), AIMessage(content="Hi there")] + result = convert_to_openai_messages(messages, text_format="block") + expected = [ + {"role": "user", "content": [{"type": "text", "text": "Hello"}]}, + {"role": "assistant", "content": [{"type": "text", "text": "Hi there"}]}, + ] + assert result == expected + + +def test_convert_to_openai_messages_invalid_format() -> None: + with pytest.raises(ValueError, match="Unrecognized text_format="): + convert_to_openai_messages( + [HumanMessage(content="Hello")], + text_format="invalid", # type: ignore[arg-type] + ) + + +def test_convert_to_openai_messages_openai_image() -> None: + base64_image = create_base64_image() + messages = [ + HumanMessage( + content=[ + {"type": "text", "text": "Here's an image:"}, + {"type": "image_url", "image_url": {"url": base64_image}}, + ] + ) + ] + result = convert_to_openai_messages(messages, text_format="block") + expected = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "Here's an image:"}, + {"type": "image_url", "image_url": {"url": base64_image}}, + ], + } + ] + assert result == expected + + +def test_convert_to_openai_messages_anthropic() -> None: + image_data = create_image_data() + messages = [ + HumanMessage( + content=[ + { + "type": "text", + "text": "Here's an image:", + "cache_control": {"type": "ephemeral"}, + }, + { + "type": "image", + "source": { + "type": "base64", + "media_type": "image/jpeg", + "data": image_data, + }, + }, + ] + ), + AIMessage( + content=[ + {"type": "tool_use", "name": "foo", "input": {"bar": "baz"}, "id": "1"} + ] + ), + HumanMessage( + content=[ + { + "type": "tool_result", + "tool_use_id": "1", + "is_error": False, + "content": [ + { + "type": "image", + "source": { + "type": "base64", + "media_type": "image/jpeg", + "data": image_data, + }, + }, + ], + } + ] + ), + ] + result = convert_to_openai_messages(messages) + expected = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "Here's an image:"}, + {"type": "image_url", "image_url": {"url": create_base64_image()}}, + ], + }, + { + "role": "assistant", + "content": "", + "tool_calls": [ + { + "type": "function", + "function": { + "name": "foo", + "arguments": json.dumps({"bar": "baz"}), + }, + "id": "1", + } + ], + }, + { + "role": "tool", + "content": [ + {"type": "image_url", "image_url": {"url": create_base64_image()}} + ], + "tool_call_id": "1", + }, + ] + assert result == expected + + +def test_convert_to_openai_messages_bedrock_converse_image() -> None: + image_data = create_image_data() + messages = [ + HumanMessage( + content=[ + {"type": "text", "text": "Here's an image:"}, + { + "image": { + "format": "jpeg", + "source": {"bytes": base64.b64decode(image_data)}, + } + }, + ] + ) + ] + result = convert_to_openai_messages(messages) + assert result[0]["content"][1]["type"] == "image_url" + assert result[0]["content"][1]["image_url"]["url"] == create_base64_image() + + +def test_convert_to_openai_messages_vertexai_image() -> None: + image_data = create_image_data() + messages = [ + HumanMessage( + content=[ + {"type": "text", "text": "Here's an image:"}, + { + "type": "media", + "mime_type": "image/jpeg", + "data": base64.b64decode(image_data), + }, + ] + ) + ] + result = convert_to_openai_messages(messages) + assert result[0]["content"][1]["type"] == "image_url" + assert result[0]["content"][1]["image_url"]["url"] == create_base64_image() + + +def test_convert_to_openai_messages_tool_message() -> None: + tool_message = ToolMessage(content="Tool result", tool_call_id="123") + result = convert_to_openai_messages([tool_message], text_format="block") + assert len(result) == 1 + assert result[0]["content"] == [{"type": "text", "text": "Tool result"}] + assert result[0]["tool_call_id"] == "123" + + +def test_convert_to_openai_messages_tool_use() -> None: + messages = [ + AIMessage( + content=[ + { + "type": "tool_use", + "id": "123", + "name": "calculator", + "input": {"a": "b"}, + } + ] + ) + ] + result = convert_to_openai_messages(messages, text_format="block") + assert result[0]["tool_calls"][0]["type"] == "function" + assert result[0]["tool_calls"][0]["id"] == "123" + assert result[0]["tool_calls"][0]["function"]["name"] == "calculator" + assert result[0]["tool_calls"][0]["function"]["arguments"] == json.dumps({"a": "b"}) + + +def test_convert_to_openai_messages_json() -> None: + json_data = {"key": "value"} + messages = [HumanMessage(content=[{"type": "json", "json": json_data}])] + result = convert_to_openai_messages(messages, text_format="block") + assert result[0]["content"][0]["type"] == "text" + assert json.loads(result[0]["content"][0]["text"]) == json_data + + +def test_convert_to_openai_messages_guard_content() -> None: + messages = [ + HumanMessage( + content=[ + { + "type": "guard_content", + "guard_content": {"text": "Protected content"}, + } + ] + ) + ] + result = convert_to_openai_messages(messages, text_format="block") + assert result[0]["content"][0]["type"] == "text" + assert result[0]["content"][0]["text"] == "Protected content" + + +def test_convert_to_openai_messages_invalid_block() -> None: + messages = [HumanMessage(content=[{"type": "invalid", "foo": "bar"}])] + with pytest.raises(ValueError, match="Unrecognized content block"): + convert_to_openai_messages(messages, text_format="block") + + +def test_convert_to_openai_messages_empty_message() -> None: + result = convert_to_openai_messages(HumanMessage(content="")) + assert result == {"role": "user", "content": ""} + + +def test_convert_to_openai_messages_empty_list() -> None: + result = convert_to_openai_messages([]) + assert result == [] + + +def test_convert_to_openai_messages_mixed_content_types() -> None: + messages = [ + HumanMessage( + content=[ + "Text message", + {"type": "text", "text": "Structured text"}, + {"type": "image_url", "image_url": {"url": create_base64_image()}}, + ] + ) + ] + result = convert_to_openai_messages(messages, text_format="block") + assert len(result[0]["content"]) == 3 + assert isinstance(result[0]["content"][0], dict) + assert isinstance(result[0]["content"][1], dict) + assert isinstance(result[0]["content"][2], dict) diff --git a/libs/langchain/langchain/chat_models/base.py b/libs/langchain/langchain/chat_models/base.py index 6c66a6f3475f0..ca4978ec3d215 100644 --- a/libs/langchain/langchain/chat_models/base.py +++ b/libs/langchain/langchain/chat_models/base.py @@ -30,7 +30,7 @@ generate_from_stream, ) from langchain_core.messages import AnyMessage, BaseMessage -from langchain_core.runnables import Runnable, RunnableConfig +from langchain_core.runnables import Runnable, RunnableConfig, ensure_config from langchain_core.runnables.schema import StreamEvent from langchain_core.tools import BaseTool from langchain_core.tracers import RunLog, RunLogPatch @@ -530,7 +530,7 @@ def _model(self, config: Optional[RunnableConfig] = None) -> Runnable: return model def _model_params(self, config: Optional[RunnableConfig]) -> dict: - config = config or {} + config = ensure_config(config) model_params = { _remove_prefix(k, self._config_prefix): v for k, v in config.get("configurable", {}).items() diff --git a/libs/partners/anthropic/langchain_anthropic/chat_models.py b/libs/partners/anthropic/langchain_anthropic/chat_models.py index 5f69b62228ab3..c4fb0b1775cef 100644 --- a/libs/partners/anthropic/langchain_anthropic/chat_models.py +++ b/libs/partners/anthropic/langchain_anthropic/chat_models.py @@ -1218,12 +1218,12 @@ def _make_message_chunk_from_anthropic_event( content_block = event.delta.model_dump() content_block["index"] = event.index content_block["type"] = "tool_use" - tool_call_chunk = { - "index": event.index, - "id": None, - "name": None, - "args": event.delta.partial_json, - } + tool_call_chunk = create_tool_call_chunk( + index=event.index, + id=None, + name=None, + args=event.delta.partial_json, + ) message_chunk = AIMessageChunk( content=[content_block], tool_call_chunks=[tool_call_chunk], # type: ignore From 88d71f69861a5b784c2c7793dd9abb97470ecc10 Mon Sep 17 00:00:00 2001 From: Artur Barseghyan Date: Wed, 16 Oct 2024 19:42:52 +0200 Subject: [PATCH 11/84] docs: Cosmetic documentation fix. Update `llm_chain.ipynb`. (#27394) ATM [LLM chain docs](https://python.langchain.com/docs/tutorials/llm_chain/#server) say: ``` # 3. Create parser parser = StrOutputParser() # 4. Create chain chain = prompt_template | model | parser # 4. App definition app = FastAPI( title="LangChain Server", version="1.0", description="A simple API server using LangChain's Runnable interfaces", ) # 5. Adding chain route add_routes( app, chain, path="/chain", ) ``` I corrected it to: ``` # 3. Create parser parser = StrOutputParser() # 4. Create chain chain = prompt_template | model | parser # 5. App definition app = FastAPI( title="LangChain Server", version="1.0", description="A simple API server using LangChain's Runnable interfaces", ) # 6. Adding chain route add_routes( app, chain, path="/chain", ) ``` --- docs/docs/tutorials/llm_chain.ipynb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/docs/tutorials/llm_chain.ipynb b/docs/docs/tutorials/llm_chain.ipynb index 24f024173bd5b..c698c34473da2 100644 --- a/docs/docs/tutorials/llm_chain.ipynb +++ b/docs/docs/tutorials/llm_chain.ipynb @@ -497,15 +497,14 @@ "# 4. Create chain\n", "chain = prompt_template | model | parser\n", "\n", - "\n", - "# 4. App definition\n", + "# 5. App definition\n", "app = FastAPI(\n", " title=\"LangChain Server\",\n", " version=\"1.0\",\n", " description=\"A simple API server using LangChain's Runnable interfaces\",\n", ")\n", "\n", - "# 5. Adding chain route\n", + "# 6. Adding chain route\n", "add_routes(\n", " app,\n", " chain,\n", From fdb7f951c8099c0e78020b7e5820d7614fd0a29e Mon Sep 17 00:00:00 2001 From: ccurme Date: Wed, 16 Oct 2024 13:46:49 -0400 Subject: [PATCH 12/84] monorepo: add script for updating notebook cassettes (#27399) 1. Move dependencies for running notebooks into monorepo poetry test deps; 2. Add script to update cassettes for a single notebook; 3. Add cassettes for some how-to guides. --- To update cassettes for a single notebook, run `docs/scripts/update_cassettes.sh`. For example: ``` ./docs/scripts/update_cassettes.sh docs/docs/how_to/binding.ipynb ``` Requires: 1. monorepo dev and test dependencies installed; 2. env vars required by notebook are set. Note: How-to guides are not currently run in [scheduled job](https://github.com/langchain-ai/langchain/actions/workflows/run_notebooks.yml). Will add cassettes for more how-to guides in subsequent PRs before adding them to scheduled job. --- .github/workflows/run_notebooks.yml | 14 +- .../agent_executor_114ba50d.msgpack.zlib | 1 + .../agent_executor_1f5932b6.msgpack.zlib | 1 + .../agent_executor_3fa4780a.msgpack.zlib | 1 + .../agent_executor_550e0c6e.msgpack.zlib | 1 + .../agent_executor_688b465d.msgpack.zlib | 1 + .../agent_executor_77c2f769.msgpack.zlib | 1 + .../agent_executor_9c9ce713.msgpack.zlib | 1 + .../agent_executor_ae627966.msgpack.zlib | 1 + .../agent_executor_af83d3e3.msgpack.zlib | 1 + .../agent_executor_b6a7e925.msgpack.zlib | 1 + .../agent_executor_c4073e35.msgpack.zlib | 1 + .../agent_executor_c96c960b.msgpack.zlib | 1 + .../agent_executor_dae53ec6.msgpack.zlib | 1 + .../agent_executor_e593bbf6.msgpack.zlib | 1 + docs/cassettes/assign_5.msgpack.zlib | 1 + ...b-48bb-46ff-a5a4-ef8ac95a513c.msgpack.zlib | 1 + ...a-78c5-4570-a00b-20d597245a96.msgpack.zlib | 1 + ...d-155f-4587-b7cd-52d363970c1d.msgpack.zlib | 1 + docs/scripts/prepare_notebooks_for_ci.py | 23 +- docs/scripts/update_cassettes.sh | 33 + poetry.lock | 2793 ++++++++++++++++- pyproject.toml | 10 + 23 files changed, 2827 insertions(+), 64 deletions(-) create mode 100644 docs/cassettes/agent_executor_114ba50d.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_1f5932b6.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_3fa4780a.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_550e0c6e.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_688b465d.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_77c2f769.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_9c9ce713.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_ae627966.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_af83d3e3.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_b6a7e925.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_c4073e35.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_c96c960b.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_dae53ec6.msgpack.zlib create mode 100644 docs/cassettes/agent_executor_e593bbf6.msgpack.zlib create mode 100644 docs/cassettes/assign_5.msgpack.zlib create mode 100644 docs/cassettes/binding_2b65beab-48bb-46ff-a5a4-ef8ac95a513c.msgpack.zlib create mode 100644 docs/cassettes/binding_32e0484a-78c5-4570-a00b-20d597245a96.msgpack.zlib create mode 100644 docs/cassettes/binding_f3fdf86d-155f-4587-b7cd-52d363970c1d.msgpack.zlib create mode 100755 docs/scripts/update_cassettes.sh diff --git a/.github/workflows/run_notebooks.yml b/.github/workflows/run_notebooks.yml index 14c70f779bf63..9d4091c107c26 100644 --- a/.github/workflows/run_notebooks.yml +++ b/.github/workflows/run_notebooks.yml @@ -35,23 +35,15 @@ jobs: - name: Install dependencies run: | - pip install -e libs/core - pip install -e libs/langchain - pip install -e libs/community - pip install --upgrade langchain-experimental - pip install -e libs//partners/anthropic - pip install -e libs//partners/chroma - pip install -e libs//partners/openai - pip install -e libs//partners/mistralai - pip install jupyter langgraph click pypdf vcrpy + poetry install --with dev,test - name: Pre-download tiktoken files run: | - python docs/scripts/download_tiktoken.py + poetry run python docs/scripts/download_tiktoken.py - name: Prepare notebooks run: | - python docs/scripts/prepare_notebooks_for_ci.py --comment-install-cells + poetry run python docs/scripts/prepare_notebooks_for_ci.py --comment-install-cells --working-directory ${{ github.event.inputs.working-directory || 'all' }} - name: Run notebooks env: diff --git a/docs/cassettes/agent_executor_114ba50d.msgpack.zlib b/docs/cassettes/agent_executor_114ba50d.msgpack.zlib new file mode 100644 index 0000000000000..7d5627083ae1a --- /dev/null +++ b/docs/cassettes/agent_executor_114ba50d.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_1f5932b6.msgpack.zlib b/docs/cassettes/agent_executor_1f5932b6.msgpack.zlib new file mode 100644 index 0000000000000..946d9680a4ee9 --- /dev/null +++ b/docs/cassettes/agent_executor_1f5932b6.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_3fa4780a.msgpack.zlib b/docs/cassettes/agent_executor_3fa4780a.msgpack.zlib new file mode 100644 index 0000000000000..7bc4f0dd9d61d --- /dev/null +++ b/docs/cassettes/agent_executor_3fa4780a.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_550e0c6e.msgpack.zlib b/docs/cassettes/agent_executor_550e0c6e.msgpack.zlib new file mode 100644 index 0000000000000..22c73160ce94c --- /dev/null +++ b/docs/cassettes/agent_executor_550e0c6e.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_688b465d.msgpack.zlib b/docs/cassettes/agent_executor_688b465d.msgpack.zlib new file mode 100644 index 0000000000000..16074cab7b0e8 --- /dev/null +++ b/docs/cassettes/agent_executor_688b465d.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_77c2f769.msgpack.zlib b/docs/cassettes/agent_executor_77c2f769.msgpack.zlib new file mode 100644 index 0000000000000..e1ce3d30a8138 --- /dev/null +++ b/docs/cassettes/agent_executor_77c2f769.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_9c9ce713.msgpack.zlib b/docs/cassettes/agent_executor_9c9ce713.msgpack.zlib new file mode 100644 index 0000000000000..c14e358a5f6f8 --- /dev/null +++ b/docs/cassettes/agent_executor_9c9ce713.msgpack.zlib @@ -0,0 +1 @@ +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ePvyQWV+unnXJ4ueHHHDpiG/u/vxVed30jx41x89+rOWlF66kqqKzbvj88HP39gz+9PIrhv7xf//dNXzp8dI371wy8eQfa17R53/ku/eOcdPXH/fVExdObqk59rm1xsKrXqi7/67tKrf9bPtLnz/mz798Vvb1jD/tetk1scX3n/z6Lu+93TJ47LvSNcE9jhbOvDBy1teTDtjp5a+HzK++PFL93OqWH65/8oDLnntox7cPKC/759gZN6zU2ROu/vys3b+at2a312K7XzFkPT/zhuVXLpw1/8JBu+/5mfLuvw/3fGysnXbgAcNue3LIVePql5097qg/aiZ3xfT2I27urt9pzqqlwz7b7dSnD73l4pULl11bftwvp868b+mQ/S/+96qHfr5HXvPek9u1PDimcfQ+NdOGK0NOm3rlbb82rAyd8NP3O1yw5oi6uez81Ub5buQfXnZd+/H89W3HjXtm8NRf/nrb6GNm3PbBMx+9d929D61/9I4rL37DfOtUI7j8o5KHHnzl45923v3Ka2+/fen2bcun/vvuBd91rZm1/ardhYu+W33abecMmffK489R57U1D3KF93j11devevb+e69423dpR/Nfvpvz07QWz9zIut1Xnt0WmT3p/DMPXX1es3G0+9g/j7r8uUEHX9jZGDhC3Pm2+n/tdMSVw5f4pg476KbH75jwwrqHdrvxLxMPffC1Wwd/tnC/9sAk7cAv1+tXHfeP/8lf//Hvu0VfvO2ot+eunv23cbHdZ3z87bAD37v0mDXm09us/Oiimy445dZLv3zh5qtHzvnh3YpZV106f/dnZh0s114rz3qsedxXa4874CF+yeQLb353r/3OvPSyd0b9eZj6k3jaJZOf/cZ8f8+Ok09/f9s7pkdveOx9vTJ867yd1lZ0EtUnfxxavOiFp35cHHvFLBtC7fzUmu6lHaP/evKrzY8ed9c9tbesvej5iz44r/x/60e/8ZeDVvnfiux/rj7ojtW/rL/9r+TZnyw5e85TM6bv9I/DLttv/1bpm6fPfr6m6rZvP35l6Lzz2s+55NX339h7l39s88FTLwfHPPb3Fy7r2vvlTydu99eywFUvTKuomBz65MBBDPfJ9uot298/a9ntL99y6PTzpy1+9MsnW24/7u725Wec75m19JndVt9966i1D8+bMfnDkf8auvSP53d6bjp1bcOoPa8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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_ae627966.msgpack.zlib b/docs/cassettes/agent_executor_ae627966.msgpack.zlib new file mode 100644 index 0000000000000..000b000e35cdc --- /dev/null +++ b/docs/cassettes/agent_executor_ae627966.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_af83d3e3.msgpack.zlib b/docs/cassettes/agent_executor_af83d3e3.msgpack.zlib new file mode 100644 index 0000000000000..3ca4a89f06a90 --- /dev/null +++ b/docs/cassettes/agent_executor_af83d3e3.msgpack.zlib @@ -0,0 +1 @@ +eNrtVs1u20YQRoA+CLHoqRAlkvpnkYNhBAnQGg4Qt0ARBIsVOSS3JneZ3aVlxdAhbq49sE/Q1oYVGEnbQ9FLG7THHvoC7r3v0VlKyo+jIkZ6CloBgqSdnZlvZr75qOPFASjNpbj2hAsDikUGf+ivjhcK7legzaOzAkwm45ObN/ZOKsUv3s+MKXXY6bCSt3XBTdbOmUijjHHRjmTR4SKRpxMZz35bZMBiDP/o/BMNyt1KQZj6R3u78XPLWcdr+20/GH2/FUVQGveGiGTMRVo/TR/wsuXEkOTMwNnSXP/AyjLnEbMYO59rKc63pRDQYK7P9wFKl+X8AB4r0CWWAV+cacNMpY9PMS788fuiAK1ZCt/ufrQG9+VpjBnqZ3sVtBy/7+xGxgm8oOf4o7AXhL2uc3Nn70kksTvCuGZWwuswnkYsysC1l5TM68dCus3JLxa31u720uBu5bmcujtNQ3X9zQcXzsYL2wpiTMZZrutToyr46dK1HXZou1mfDDzv540hdhVPuai/Xmzlxr1zENUX7ax7nYS9Xpd86BTsetAfB57ntbKuG4w3GM5wYkiNelEd8EgqsbmUW8seYinfba869DGI1GT1SW/UP/mUs/ocB+ykUqY5PLsU48ZhKTW8FKShzUOcmUIO/HntryOyYicJidcetgceaRHsPOBoKRyWXDUzoIYXQEJR5XmLTJiJMor+SF6KE0l4SsIjUqFHUeWGl0wZCiIuJRKehLa9LaIjlgOtSnpf8wdAMX+agiKhb1v0wipMphCspjlHAqN5sDbGciqogKI0sxfePbTacOvbTaznB3QyM6BJGHjjod8PvHmLcIF0FRFQZH2qLWxcGVxKA5RxivuoZgidTXKI18ilSmmEoJo+xFyvjAlyx9aVySk1JqcVXzsY3HGskIOicbXqX8xmTbZcitTuDwboNWAzqczqwO8hQA1MYXcvYZhKta9LG1ZHsgRqMXFxwJvy1ki6VBupcPde9Z7P/1lqdt8kNfjGU93JpnimwR92ML1g3E0qsRQyl1nR6VgR0eZ/Vfqvq9KpH/j/Vpbe+/WILIlHkXQZShPzB/0+DmfiDVgyicf92B/2euMk8Lv+IBj74A2DQeJ34yhhyXjsRZEX+yNvNGTxYDRmfRS1ggmeIEXtFnJcjbvkOdPRWiqJyqLxG54Y/NjGj9vN4R5qjiUjuYfKGOGa4oYjGxAVzh0RVxFuHXrsT5laSsqKbPj97pVy3ZlpA8XO0uttky6jvqm61a0Weds0Zu0Rks9k5TAFDnMyyMukyh2mNbf6ahNwUVaGHjDFrRbZXmCOtTdNpCqw9pAk7nLoFhs+N5D7L/scze2rdaUurvqnb+eok5nMkVpXL0uWdqlZvhbcNQYqWNH4YQ6acSuwM3JVRLcqJN07N9ajZnLzjSNcHpF3Y5Kr5+LlUTbPK3yOKvs3pmQxjvPexlpfu9h6lQatdTewLgKHDBuy5Pn8b285bDI= \ No newline at end of file diff --git a/docs/cassettes/agent_executor_b6a7e925.msgpack.zlib b/docs/cassettes/agent_executor_b6a7e925.msgpack.zlib new file mode 100644 index 0000000000000..a90d03e125a5b --- /dev/null +++ b/docs/cassettes/agent_executor_b6a7e925.msgpack.zlib @@ -0,0 +1 @@ +eNqlVn1sG+UZd+mQAE0VTAy0Tduu3oeq4jvf2Wf7nCxDjuPSNM13SJNAcM93r+2r7yv3vufYCZEgoEpogurKKv6YQCt1bAhpStVs7QodG4zQfVVDQ2ihY9PUlX0VujLgj2mse+7stA7pPxP+43zv+z5f7+/5Pc9zs7UisrBi6BsWFJ0gS5QILLAzW7PQhI0webiqIZI35Epf7+DQIdtSVrbmCTFxSzAomgpjmEgXFUYytGCRC0p5kQTh3VSRZ6aSMeTyWxsz034NYSzmEPa3UPdM+yUDfOkEFv7tymZ/gPJbhorcpY2R5Z8Zhx3NkJHqbuVMQvOujA4rDv4xsZCowSIrqhjBBkGaCaET23JtsEzM3TMMteGNlE3PdtbWvdu5tq68t1DTfl3UPAEiFhW1nMZItKR82kLYVglO78F1FRlhyVLMhpY/QdXlKKTnFB1RBpxoyhSSqaxhUS4IFsojHStFCFGUJBsCdN90mSKWjQkINjww1N0YZW3VU5wEHaps2JSOQIIYoIAnkUV5yXAxpcSMYRMK7FkAIYWK8AQTnboJuzhv2KpMZRAlroYHilaZcS9gihZcFJKMvVubFiTPIgqqLz057+0TF2224wakGkaBsk3X4iqykBFFz/lnZtxMAm8UC8ku9g2j402iRmYPkgiIguz/kRpV1HNYU0i+kZ1rJGSwHqcLoqLDUxPdkwZcO0F/0NVnqG0gIOrldYheEQl4+GuQIwroSJG8gimXTps/BYifRA9ChPQDbJA/61NDOT5TyyNRhqD+4Lu5kjcwcRbXVucRYCCCQkK6ZMjgwDmcm1LMACWjrAq8nIeK1JEHuzNfQMikRRWIW61rOc+Lpqkqkgdo0K2HhUYF024s64/n3TKmod514iz1QhCJzmBfGdqITnEMLzDs8yUaE1HRVWgLtJtbp2p65y80H5iiVAAjdKNFOdW68mKzjIGduW5R6h1cY9JlgjMnWlqUP9a8b9k6VClyasm+9e4ah1fdhRmOY2JH1xjGZV1y5rzOc3yNMiSzTEsG2HAOslUJ0qwgZ+X9dFrKpjNa23Ah2Umi/XL7hJ0syl3D3I60IJuICfUwXUPpdmtgsnMqvis7uqu7QHOxUJzlYrEoR3MMy3AMRwu7LHl0MDPB8KmRNBNK7Qon+OFkuD0zEo8kUqGpdM+OqN7NlS0r1KWWJrLDHWOhUEa4e6RU6krEenoipNx/V0kS+F6WKaZCwljCLgiJVgqis4uK3CaFkpl0Pxoob+eneiNszuTbheikErZ2jslsMq7kcx0FAyfZHJ9qCi8SEmi2EWGU5QXW/S2uckOFzkjyziEhGn0GWp0JpYYeqgJkxMazFeAh+tXpWmMwPN3bdZXCt1U6gJPOqSEbGiYXoXolQoXYEE9xQgsfauHD1F3dQwvJhpuha1Lw6JAFnTMLNEytUr4m5W29gOT55DXJfsolO2TSDR/GEY1KpoER3YjKWRihB+ojke7sOFavLNqwcqKuTHlunVMe6yenSpOyZMtyvjipsfEpPqxkkC1llxoq0DFcNxAQrWGnwoUEdrFxtEq8ebgsS3MszXInS7Q7N1QYLQCo92wMZtCNANon1gsQowBzx5nz0vHj5nMLacBX1/VVI3w8Hn/x2kKrhmLxuBA6uVYGo+ZIuJCGT6wXaBiocGENL5RW5WlFdla+Dos0F+GlcDYcF0UWyTEhk4lwfFSUZC6K2JjIh3/kdkMJ7Li5NA2L0BjB4FNI2VkJaGLJbTFtYS4SjsJNW6GnSqoto0E702G4d8CtFAxh1RDlI8ltdFKU8oge9Ojn1DpGexLdnckfjtDNPKJ7zfr3T003sK5ks9VBZEFanHlJNWwZeqWFqmBrIDHqLAlymMuGIyE+izghi2J0O3ShVWtXWFdxG21NVCH2ouQcy4fb/C08H/a3UprYJkR5lvW+kh6s1jv/qxvSX/3ODT7vt1HtP6q/zN76+399/shTB3f4bol0pUZ3B5K3HJ4/Lez72eFzuVcfe+uGSxcPJK9LkEvmX1r/+OS+Db7Hv9D1wCOzrf1fjNy3gD9++fbvmcdvLr4ZeOJi6sWZt7XzZ/fyXypf/+5LfSfu+3DLM/xNT15Q+jdP/nX8UOn9W7dNfGvf2NOVzx544vzyo7lz5le6W1OJge+jG+//jM/32kcfrJC9LwUeNN/42jfGfonln5//nO+57eWHJwpz9r2t0ZP7Z5eSby+PHxz4wHfHvzf8NLLwp8ADe/eY3730TnnLwj/77nlv4z/Gnt105/j+Lb/oTk2fvXT7f6gfLKXGNh+vfPzcm45IT9/k+/bZ5Q+7b8xu3fpo15dnDn209/U//+3Ca4vnNv1O3/TO6YnIT2qn/r4c/PVvJp69sDv8zRNb2Bd2vLK7773/vn45cOb6uTMX750988jKckvgtw+9ER+u7n83uCQ9NXsnIHn58kbfzsdeOXD/dT7f/wBEhTET \ No newline at end of file diff --git a/docs/cassettes/agent_executor_c4073e35.msgpack.zlib b/docs/cassettes/agent_executor_c4073e35.msgpack.zlib new file mode 100644 index 0000000000000..20c6bc9c3e205 --- /dev/null +++ b/docs/cassettes/agent_executor_c4073e35.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_c96c960b.msgpack.zlib b/docs/cassettes/agent_executor_c96c960b.msgpack.zlib new file mode 100644 index 0000000000000..188d04c7020bc --- /dev/null +++ b/docs/cassettes/agent_executor_c96c960b.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_dae53ec6.msgpack.zlib b/docs/cassettes/agent_executor_dae53ec6.msgpack.zlib new file mode 100644 index 0000000000000..14bb8754fc23c --- /dev/null +++ b/docs/cassettes/agent_executor_dae53ec6.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/agent_executor_e593bbf6.msgpack.zlib b/docs/cassettes/agent_executor_e593bbf6.msgpack.zlib new file mode 100644 index 0000000000000..86ae03de69e2d --- /dev/null +++ b/docs/cassettes/agent_executor_e593bbf6.msgpack.zlib @@ -0,0 +1 @@ +eNqFVktv20YQRi75HQtd1KYSxZeeQREocpwUsaU0UmAUQUFsyJG0Fblkdpd6xPCh6eOuv9C4dhGkrU+95eJTD/0F+TWdJUVZzqMFJIj77ezszPfNDPXyfA5CspjfeMO4AkF9hQu5fnku4HkKUv14FoGaxsHpo8Fw9CoV7O1UqUR2ajWaMEPROQtXhh9HNQlU+NPTZ3Gwenfj5nEJt70ZrEodUlLzcFVVo716szt8PLsHd9Png29ay6D+8KGC5dA1D2f9ZqlCSnijyE4splQRJomaAlkAxR9BGCfDfW0V0aUnQKahkmhrI5Lf7QWQqKk+ToM55T4E2ppxP0wD8II4oozrE0+/RRiWH4ULa8rlAgSiYxpK2NkQdOH5MVLF1Ud2WUQnIIuNk/Mp0AD5/fn1Ewmi2p3gqfVfyQoJ5dUNwbJmGw5+/uz6PsZfvcf9OGB8sv598oIlFRLAOKQKzvLt9atbtVuvezHnkCm1fj0DSKo0ZHP4o5fHVT0APlHT9Su7Yb8psNEqgfUFTZKQ+VSfrH0nY/4b8pig3vDDmVRUpfLlKd4O//x9HoGUmMsvg4dFEj994trTPQxv/XaUIhFWnQx8RWzTdonV6rh2x2mR+4ejsyEILLT1r3zC+PL9QE+thuv+T6RZYX2PUQrk5t3N8Lgolv+qldI4DsN44aWJl3GtS7vU4WkYVkqFwvmqEA6LoLStrafHJcVUCHjJ0Y5jysm+wPpi0o/xjlSEaFB0xWKxMDZR6AbRnYE224opHZfDOE+r3CHHZU4jwIfyNaflCikLmOQ25R6yPI4FZ1TjfpxyJVZ64wlnCgIyROFAknhMuhEI5EybYcmgidM0ms26XmauqpZtG67VchBRLzwWaC+bQ7WDWHpdPoEQZOYAowwVi8CDJPanaGk17bZpNZuWvbutXWi5q5ZZRfUtq+Na5RMdaCoEppxlGVKpUIQAAw3e92eaZhbvlcWHLh1Th6QgSjxfn3QNs1iPcV1vGjolJr2AamasjCcesC3NOGZ0JOVDJpV2xfyc21rND/j7em2WtYa7bLg1dFmzXMdI+CTnP9A5W6Zj6iwXjAdelOh8HMMtgFkG1K+AACYC9DnbMbcYE5nyR9ptgkUnUwFe9CzzbrWyFLcw0+E6pmE2c9RniRdFiJmFnUYyqxyZphFDAjQdbX3GD+M0yFzr3TFAKEM2g5xPx2hdAzNSGxmoQ/WnLAx3La/AHUscEwpxWO5qdAXuCBXAIonxdVO4dHexjUet4RwVnUVZ0JkzvY6YLtAOaWRIOs+I18aTFCsoV8I16gWQK9E07JMTbEPsLYHdbBrtttV2Wg3s9d1xrkfBSeWq6ftZn9KQFN2vpxjz4YOmx/YEHyu4qCRjEs9rOL19FMBIpskdxpNU5bPrS2z1L7atXul1r42HXt41ZFu+kuB0G3b7ZP9xt9/7atgbkL3BUX+EX/LZcH/Qsz4nB1Rtet2sNy4v+gcxR850r9uNtnt5cXQvhDkidaRxrAzS7xooxeXFvoEyXV70DGIY+Egj8mhvlA1wCyXJWrCRXIG2mYPEIPubhMkeJpFK/QcC0W6Qx4yMPQYZp8IHmfv+FJO3r09TcpeuSFcArZBe9zaxLXIf/5EAeRAnCR7qzvEVM1RxQuq3yaHmTMBKm5K203adar1u4kYvjiKkUN4hXxcz/8517c1Gu2F9TPt8+GcvRE8Pt1IHOayf/AtKkges \ No newline at end of file diff --git a/docs/cassettes/assign_5.msgpack.zlib b/docs/cassettes/assign_5.msgpack.zlib new file mode 100644 index 0000000000000..16688387baa1f --- /dev/null +++ b/docs/cassettes/assign_5.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/binding_2b65beab-48bb-46ff-a5a4-ef8ac95a513c.msgpack.zlib b/docs/cassettes/binding_2b65beab-48bb-46ff-a5a4-ef8ac95a513c.msgpack.zlib new file mode 100644 index 0000000000000..1367489608972 --- /dev/null +++ b/docs/cassettes/binding_2b65beab-48bb-46ff-a5a4-ef8ac95a513c.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/binding_32e0484a-78c5-4570-a00b-20d597245a96.msgpack.zlib b/docs/cassettes/binding_32e0484a-78c5-4570-a00b-20d597245a96.msgpack.zlib new file mode 100644 index 0000000000000..190301e99772f --- /dev/null +++ b/docs/cassettes/binding_32e0484a-78c5-4570-a00b-20d597245a96.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/cassettes/binding_f3fdf86d-155f-4587-b7cd-52d363970c1d.msgpack.zlib b/docs/cassettes/binding_f3fdf86d-155f-4587-b7cd-52d363970c1d.msgpack.zlib new file mode 100644 index 0000000000000..a08ac1e5251e9 --- /dev/null +++ b/docs/cassettes/binding_f3fdf86d-155f-4587-b7cd-52d363970c1d.msgpack.zlib @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/docs/scripts/prepare_notebooks_for_ci.py b/docs/scripts/prepare_notebooks_for_ci.py index fe63daafe8b04..9286906f22be8 100644 --- a/docs/scripts/prepare_notebooks_for_ci.py +++ b/docs/scripts/prepare_notebooks_for_ci.py @@ -122,7 +122,10 @@ def add_vcr_to_notebook( return notebook -def process_notebooks(should_comment_install_cells: bool) -> None: +def process_notebooks( + should_comment_install_cells: bool, + working_directory: str, +) -> None: for directory in NOTEBOOK_DIRS: for root, _, files in os.walk(directory): for file in files: @@ -130,6 +133,12 @@ def process_notebooks(should_comment_install_cells: bool) -> None: continue notebook_path = os.path.join(root, file) + # Filter notebooks based on the working_directory input + if working_directory != "all" and not notebook_path.startswith( + working_directory + ): + continue + try: notebook = nbformat.read(notebook_path, as_version=4) @@ -172,8 +181,16 @@ def process_notebooks(should_comment_install_cells: bool) -> None: default=False, help="Whether to comment out install cells", ) -def main(comment_install_cells): - process_notebooks(should_comment_install_cells=comment_install_cells) +@click.option( + "--working-directory", + default="all", + help="Working directory or specific notebook to process", +) +def main(comment_install_cells, working_directory): + process_notebooks( + should_comment_install_cells=comment_install_cells, + working_directory=working_directory, + ) logger.info("All notebooks processed successfully.") diff --git a/docs/scripts/update_cassettes.sh b/docs/scripts/update_cassettes.sh new file mode 100755 index 0000000000000..df1a7981ae000 --- /dev/null +++ b/docs/scripts/update_cassettes.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Get the working directory from the input argument, default to 'all' if not provided +WORKING_DIRECTORY=${1:-all} + +# Function to delete cassettes +delete_cassettes() { + local dir=$1 + if [ "$dir" == "all" ]; then + echo "Deleting all cassettes..." + rm -f docs/cassettes/*.msgpack.zlib + else + # Extract the filename from the directory path + local filename=$(basename "$dir" .ipynb) + echo "Deleting cassettes for $filename..." + rm -f docs/cassettes/${filename}_*.msgpack.zlib + fi +} + +# Delete existing cassettes +delete_cassettes "$WORKING_DIRECTORY" + +# Pre-download tiktoken files +echo "Pre-downloading tiktoken files..." +poetry run python docs/scripts/download_tiktoken.py + +# Prepare notebooks +echo "Preparing notebooks for CI..." +poetry run python docs/scripts/prepare_notebooks_for_ci.py --comment-install-cells --working-directory "$WORKING_DIRECTORY" + +# Run notebooks +echo "Running notebooks..." +./docs/scripts/execute_notebooks.sh "$WORKING_DIRECTORY" diff --git a/poetry.lock b/poetry.lock index 5071452ed9abf..c23df188e38f2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "accessible-pygments" @@ -177,6 +177,31 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] +[[package]] +name = "anthropic" +version = "0.36.0" +description = "The official Python library for the anthropic API" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anthropic-0.36.0-py3-none-any.whl", hash = "sha256:9183b9eaa0f409f2047244d7ef02c9c3eb916959c0b2960f7605dcb6cabbf548"}, + {file = "anthropic-0.36.0.tar.gz", hash = "sha256:7b0b1457096605572a29559d9a8ce224b9389d379b410e7d1bf5e0c1379f9ee2"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tokenizers = ">=0.13.0" +typing-extensions = ">=4.7,<5" + +[package.extras] +bedrock = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"] +vertex = ["google-auth (>=2,<3)"] + [[package]] name = "anyio" version = "4.6.0" @@ -210,6 +235,99 @@ files = [ {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.3.0" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] + +[[package]] +name = "asgiref" +version = "3.8.1" +description = "ASGI specs, helper code, and adapters" +optional = false +python-versions = ">=3.8" +files = [ + {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, + {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, +] + +[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" @@ -228,6 +346,20 @@ six = ">=1.12.0" astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + [[package]] name = "async-timeout" version = "4.0.3" @@ -295,6 +427,57 @@ files = [ [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + +[[package]] +name = "bcrypt" +version = "4.2.0" +description = "Modern password hashing for your software and your servers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291"}, + {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060"}, + {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7"}, + {file = "bcrypt-4.2.0-cp37-abi3-win32.whl", hash = "sha256:5a1e8aa9b28ae28020a3ac4b053117fb51c57a010b9f969603ed885f23841458"}, + {file = "bcrypt-4.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:8f6ede91359e5df88d1f5c1ef47428a4420136f3ce97763e31b86dd8280fbdf5"}, + {file = "bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2"}, + {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e"}, + {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8"}, + {file = "bcrypt-4.2.0-cp39-abi3-win32.whl", hash = "sha256:77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34"}, + {file = "bcrypt-4.2.0-cp39-abi3-win_amd64.whl", hash = "sha256:61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9"}, + {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a"}, + {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db"}, + {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170"}, + {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184"}, + {file = "bcrypt-4.2.0.tar.gz", hash = "sha256:cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221"}, +] + +[package.extras] +tests = ["pytest (>=3.2.1,!=3.3.0)"] +typecheck = ["mypy"] + [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -316,6 +499,60 @@ charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] +[[package]] +name = "bleach" +version = "6.1.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.8" +files = [ + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.3)"] + +[[package]] +name = "build" +version = "1.2.2.post1" +description = "A simple, correct Python build frontend" +optional = false +python-versions = ">=3.8" +files = [ + {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, + {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "os_name == \"nt\""} +importlib-metadata = {version = ">=4.6", markers = "python_full_version < \"3.10.2\""} +packaging = ">=19.1" +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 = ["build[uv,virtualenv]", "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 = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"] +uv = ["uv (>=0.1.18)"] +virtualenv = ["virtualenv (>=20.0.35)"] + +[[package]] +name = "cachetools" +version = "5.5.0" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cachetools-5.5.0-py3-none-any.whl", hash = "sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292"}, + {file = "cachetools-5.5.0.tar.gz", hash = "sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a"}, +] + [[package]] name = "certifi" version = "2024.8.30" @@ -505,6 +742,88 @@ files = [ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] +[[package]] +name = "chroma-hnswlib" +version = "0.7.6" +description = "Chromas fork of hnswlib" +optional = false +python-versions = "*" +files = [ + {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f35192fbbeadc8c0633f0a69c3d3e9f1a4eab3a46b65458bbcbcabdd9e895c36"}, + {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f007b608c96362b8f0c8b6b2ac94f67f83fcbabd857c378ae82007ec92f4d82"}, + {file = "chroma_hnswlib-0.7.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:456fd88fa0d14e6b385358515aef69fc89b3c2191706fd9aee62087b62aad09c"}, + {file = "chroma_hnswlib-0.7.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5dfaae825499c2beaa3b75a12d7ec713b64226df72a5c4097203e3ed532680da"}, + {file = "chroma_hnswlib-0.7.6-cp310-cp310-win_amd64.whl", hash = "sha256:2487201982241fb1581be26524145092c95902cb09fc2646ccfbc407de3328ec"}, + {file = "chroma_hnswlib-0.7.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81181d54a2b1e4727369486a631f977ffc53c5533d26e3d366dda243fb0998ca"}, + {file = "chroma_hnswlib-0.7.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4b4ab4e11f1083dd0a11ee4f0e0b183ca9f0f2ed63ededba1935b13ce2b3606f"}, + {file = "chroma_hnswlib-0.7.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53db45cd9173d95b4b0bdccb4dbff4c54a42b51420599c32267f3abbeb795170"}, + {file = "chroma_hnswlib-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c093f07a010b499c00a15bc9376036ee4800d335360570b14f7fe92badcdcf9"}, + {file = "chroma_hnswlib-0.7.6-cp311-cp311-win_amd64.whl", hash = "sha256:0540b0ac96e47d0aa39e88ea4714358ae05d64bbe6bf33c52f316c664190a6a3"}, + {file = "chroma_hnswlib-0.7.6-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e87e9b616c281bfbe748d01705817c71211613c3b063021f7ed5e47173556cb7"}, + {file = "chroma_hnswlib-0.7.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec5ca25bc7b66d2ecbf14502b5729cde25f70945d22f2aaf523c2d747ea68912"}, + {file = "chroma_hnswlib-0.7.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305ae491de9d5f3c51e8bd52d84fdf2545a4a2bc7af49765cda286b7bb30b1d4"}, + {file = "chroma_hnswlib-0.7.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:822ede968d25a2c88823ca078a58f92c9b5c4142e38c7c8b4c48178894a0a3c5"}, + {file = "chroma_hnswlib-0.7.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2fe6ea949047beed19a94b33f41fe882a691e58b70c55fdaa90274ae78be046f"}, + {file = "chroma_hnswlib-0.7.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feceff971e2a2728c9ddd862a9dd6eb9f638377ad98438876c9aeac96c9482f5"}, + {file = "chroma_hnswlib-0.7.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb0633b60e00a2b92314d0bf5bbc0da3d3320be72c7e3f4a9b19f4609dc2b2ab"}, + {file = "chroma_hnswlib-0.7.6-cp37-cp37m-win_amd64.whl", hash = "sha256:a566abe32fab42291f766d667bdbfa234a7f457dcbd2ba19948b7a978c8ca624"}, + {file = "chroma_hnswlib-0.7.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6be47853d9a58dedcfa90fc846af202b071f028bbafe1d8711bf64fe5a7f6111"}, + {file = "chroma_hnswlib-0.7.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a7af35bdd39a88bffa49f9bb4bf4f9040b684514a024435a1ef5cdff980579d"}, + {file = "chroma_hnswlib-0.7.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a53b1f1551f2b5ad94eb610207bde1bb476245fc5097a2bec2b476c653c58bde"}, + {file = "chroma_hnswlib-0.7.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3085402958dbdc9ff5626ae58d696948e715aef88c86d1e3f9285a88f1afd3bc"}, + {file = "chroma_hnswlib-0.7.6-cp38-cp38-win_amd64.whl", hash = "sha256:77326f658a15adfb806a16543f7db7c45f06fd787d699e643642d6bde8ed49c4"}, + {file = "chroma_hnswlib-0.7.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:93b056ab4e25adab861dfef21e1d2a2756b18be5bc9c292aa252fa12bb44e6ae"}, + {file = "chroma_hnswlib-0.7.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fe91f018b30452c16c811fd6c8ede01f84e5a9f3c23e0758775e57f1c3778871"}, + {file = "chroma_hnswlib-0.7.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6c0e627476f0f4d9e153420d36042dd9c6c3671cfd1fe511c0253e38c2a1039"}, + {file = "chroma_hnswlib-0.7.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e9796a4536b7de6c6d76a792ba03e08f5aaa53e97e052709568e50b4d20c04f"}, + {file = "chroma_hnswlib-0.7.6-cp39-cp39-win_amd64.whl", hash = "sha256:d30e2db08e7ffdcc415bd072883a322de5995eb6ec28a8f8c054103bbd3ec1e0"}, + {file = "chroma_hnswlib-0.7.6.tar.gz", hash = "sha256:4dce282543039681160259d29fcde6151cc9106c6461e0485f57cdccd83059b7"}, +] + +[package.dependencies] +numpy = "*" + +[[package]] +name = "chromadb" +version = "0.5.13" +description = "Chroma." +optional = false +python-versions = ">=3.8" +files = [ + {file = "chromadb-0.5.13-py3-none-any.whl", hash = "sha256:090134cb8a9bd35622175a8a9bb93a7b56ace413697489e9d2f43a5299a6b7bc"}, + {file = "chromadb-0.5.13.tar.gz", hash = "sha256:fb1f44b5425976ef2bdf7403d365986ee5a224e5d8108fcd86472ff64de216a0"}, +] + +[package.dependencies] +bcrypt = ">=4.0.1" +build = ">=1.0.3" +chroma-hnswlib = "0.7.6" +fastapi = ">=0.95.2" +grpcio = ">=1.58.0" +httpx = ">=0.27.0" +importlib-resources = "*" +kubernetes = ">=28.1.0" +mmh3 = ">=4.0.1" +numpy = ">=1.22.5" +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" +orjson = ">=3.9.12" +overrides = ">=7.3.1" +posthog = ">=2.4.0" +pydantic = ">=1.9" +pypika = ">=0.48.9" +PyYAML = ">=6.0.0" +rich = ">=10.11.0" +tenacity = ">=8.2.3" +tokenizers = ">=0.13.2" +tqdm = ">=4.65.0" +typer = ">=0.9.0" +typing-extensions = ">=4.5.0" +uvicorn = {version = ">=0.18.3", extras = ["standard"]} + [[package]] name = "click" version = "8.1.7" @@ -547,6 +866,23 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coloredlogs" +version = "15.0.1" +description = "Colored terminal output for Python's logging module" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + [[package]] name = "comm" version = "0.2.2" @@ -621,6 +957,34 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "deprecated" +version = "1.2.14" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] + [[package]] name = "distro" version = "1.9.0" @@ -643,6 +1007,17 @@ files = [ {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, ] +[[package]] +name = "durationpy" +version = "0.9" +description = "Module for converting between datetime.timedelta and Go's Duration strings." +optional = false +python-versions = "*" +files = [ + {file = "durationpy-0.9-py3-none-any.whl", hash = "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38"}, + {file = "durationpy-0.9.tar.gz", hash = "sha256:fd3feb0a69a0057d582ef643c355c40d2fa1c942191f914d12203b1a01ac722a"}, +] + [[package]] name = "exceptiongroup" version = "1.2.2" @@ -671,6 +1046,112 @@ files = [ [package.extras] tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +[[package]] +name = "faiss-cpu" +version = "1.9.0" +description = "A library for efficient similarity search and clustering of dense vectors." +optional = false +python-versions = ">=3.9" +files = [ + {file = "faiss_cpu-1.9.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:e415a149893629db2215776395460d0cf79ac5f56a62242de68f788a22b66818"}, + {file = "faiss_cpu-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81f211896107a114450297571210684701d1fce5b998d8a06e2549f6be7af20c"}, + {file = "faiss_cpu-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf76982c45027817df7816232dad9d2f6471637ceaa76c1cc72e858c6e31d8d3"}, + {file = "faiss_cpu-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:091d3df18dc9ae43e47203ff0c3c8ffcd51939a6de17e851751dcc263c86b16b"}, + {file = "faiss_cpu-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:eababc154e95930045f86d2483aeb4ed8451b1bb9b97451a2633df20190f5ee2"}, + {file = "faiss_cpu-1.9.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:b0e9208a36da519dc2eb90e4c44c66a6812a5b68457582d8ed21d04e910e3d1f"}, + {file = "faiss_cpu-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6a4b2871057560020b83ad7bb5aaf3b97b64f980f9af2ca99ba34eeb4fe38bdf"}, + {file = "faiss_cpu-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f1dc3a42ea386f49a86a9d09a3e30a40fa2e678395df5c2f5706c3f26f06751"}, + {file = "faiss_cpu-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2baeed5f1d8b006533c71184cc29065892647774a3df9c6f6dc31c1b694f57fa"}, + {file = "faiss_cpu-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:81d8fcb0ef92c9e7af2f7104e321895462681a598aff6d526a8da8272a61c1dd"}, + {file = "faiss_cpu-1.9.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:2ed784120f6be7a7cde90f507831e670b4edc94f20cc7955eef3ae5fba70d449"}, + {file = "faiss_cpu-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:358be27446389c9df374fba17221ae5e45a7a8c943c4c675f81814d6fb7c31b1"}, + {file = "faiss_cpu-1.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31a0b5ec546c7455cf526326194ace125199769ccbc90bb69b464cd4a26b7f4d"}, + {file = "faiss_cpu-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f03a4882e27c71ead60d84d06263d3f8592c842f0f469eeaf7883cfd4f2bfa"}, + {file = "faiss_cpu-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:39a163c2c3c33df10b82fd3b61cb6c8bd7884e2526f1393de32ed71814c5cbfb"}, + {file = "faiss_cpu-1.9.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b04745b9b93736a7bdf18dd459a3362d154a6dae2e450de3f804f193154d79c9"}, + {file = "faiss_cpu-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25dd895a952b5f6dad5dcdb901f853e33359e24ee2b871f418b87af054ed06e0"}, + {file = "faiss_cpu-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0010ddfd16f7c71e1119111973fe2f34b6abc6b40492b688244e821b5a931964"}, + {file = "faiss_cpu-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5908e619b3ab2cd1f23f939a995cc2559408dffa9795b69ca78f89a08b993873"}, + {file = "faiss_cpu-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc40f1029515baa0228c0c5113b870c5d94961d3232ca25f127162945424375b"}, + {file = "faiss_cpu-1.9.0.tar.gz", hash = "sha256:587fcea9fa478e9307a388754824a032849d317894a607586c3cdd8c8aeb7233"}, +] + +[package.dependencies] +numpy = ">=1.25.0,<3.0" +packaging = "*" + +[[package]] +name = "fastapi" +version = "0.115.2" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.115.2-py3-none-any.whl", hash = "sha256:61704c71286579cc5a598763905928f24ee98bfcc07aabe84cfefb98812bbc86"}, + {file = "fastapi-0.115.2.tar.gz", hash = "sha256:3995739e0b09fa12f984bce8fa9ae197b35d433750d3d312422d846e283697ee"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.37.2,<0.41.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.5)", "httpx (>=0.23.0)", "jinja2 (>=2.11.2)", "python-multipart (>=0.0.7)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "fastjsonschema" +version = "2.20.0" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, + {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.16.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] + +[[package]] +name = "flatbuffers" +version = "24.3.25" +description = "The FlatBuffers serialization format for Python" +optional = false +python-versions = "*" +files = [ + {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, + {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + [[package]] name = "frozenlist" version = "1.4.1" @@ -757,6 +1238,85 @@ files = [ {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, ] +[[package]] +name = "fsspec" +version = "2024.9.0" +description = "File-system specification" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fsspec-2024.9.0-py3-none-any.whl", hash = "sha256:a0947d552d8a6efa72cc2c730b12c41d043509156966cca4fb157b0f2a0c574b"}, + {file = "fsspec-2024.9.0.tar.gz", hash = "sha256:4b0afb90c2f21832df142f292649035d80b421f60a9e1c027802e5a0da2b04e8"}, +] + +[package.extras] +abfs = ["adlfs"] +adl = ["adlfs"] +arrow = ["pyarrow (>=1)"] +dask = ["dask", "distributed"] +dev = ["pre-commit", "ruff"] +doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] +dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +fuse = ["fusepy"] +gcs = ["gcsfs"] +git = ["pygit2"] +github = ["requests"] +gs = ["gcsfs"] +gui = ["panel"] +hdfs = ["pyarrow (>=1)"] +http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] +libarchive = ["libarchive-c"] +oci = ["ocifs"] +s3 = ["s3fs"] +sftp = ["paramiko"] +smb = ["smbprotocol"] +ssh = ["paramiko"] +test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +tqdm = ["tqdm"] + +[[package]] +name = "google-auth" +version = "2.35.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google_auth-2.35.0-py2.py3-none-any.whl", hash = "sha256:25df55f327ef021de8be50bad0dfd4a916ad0de96da86cd05661c9297723ad3f"}, + {file = "google_auth-2.35.0.tar.gz", hash = "sha256:f4c64ed4e01e8e8b646ef34c018f8bf3338df0c8e37d8b3bba40e7f574a3278a"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography", "pyopenssl"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.65.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, + {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, +] + +[package.dependencies] +protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] + [[package]] name = "greenlet" version = "3.1.1" @@ -843,6 +1403,73 @@ files = [ docs = ["Sphinx", "furo"] test = ["objgraph", "psutil"] +[[package]] +name = "grpcio" +version = "1.66.2" +description = "HTTP/2-based RPC framework" +optional = false +python-versions = ">=3.8" +files = [ + {file = "grpcio-1.66.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:fe96281713168a3270878255983d2cb1a97e034325c8c2c25169a69289d3ecfa"}, + {file = "grpcio-1.66.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:73fc8f8b9b5c4a03e802b3cd0c18b2b06b410d3c1dcbef989fdeb943bd44aff7"}, + {file = "grpcio-1.66.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:03b0b307ba26fae695e067b94cbb014e27390f8bc5ac7a3a39b7723fed085604"}, + {file = "grpcio-1.66.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d69ce1f324dc2d71e40c9261d3fdbe7d4c9d60f332069ff9b2a4d8a257c7b2b"}, + {file = "grpcio-1.66.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05bc2ceadc2529ab0b227b1310d249d95d9001cd106aa4d31e8871ad3c428d73"}, + {file = "grpcio-1.66.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ac475e8da31484efa25abb774674d837b343afb78bb3bcdef10f81a93e3d6bf"}, + {file = "grpcio-1.66.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0be4e0490c28da5377283861bed2941d1d20ec017ca397a5df4394d1c31a9b50"}, + {file = "grpcio-1.66.2-cp310-cp310-win32.whl", hash = "sha256:4e504572433f4e72b12394977679161d495c4c9581ba34a88d843eaf0f2fbd39"}, + {file = "grpcio-1.66.2-cp310-cp310-win_amd64.whl", hash = "sha256:2018b053aa15782db2541ca01a7edb56a0bf18c77efed975392583725974b249"}, + {file = "grpcio-1.66.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:2335c58560a9e92ac58ff2bc5649952f9b37d0735608242973c7a8b94a6437d8"}, + {file = "grpcio-1.66.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:45a3d462826f4868b442a6b8fdbe8b87b45eb4f5b5308168c156b21eca43f61c"}, + {file = "grpcio-1.66.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:a9539f01cb04950fd4b5ab458e64a15f84c2acc273670072abe49a3f29bbad54"}, + {file = "grpcio-1.66.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce89f5876662f146d4c1f695dda29d4433a5d01c8681fbd2539afff535da14d4"}, + {file = "grpcio-1.66.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d25a14af966438cddf498b2e338f88d1c9706f3493b1d73b93f695c99c5f0e2a"}, + {file = "grpcio-1.66.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6001e575b8bbd89eee11960bb640b6da6ae110cf08113a075f1e2051cc596cae"}, + {file = "grpcio-1.66.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4ea1d062c9230278793820146c95d038dc0f468cbdd172eec3363e42ff1c7d01"}, + {file = "grpcio-1.66.2-cp311-cp311-win32.whl", hash = "sha256:38b68498ff579a3b1ee8f93a05eb48dc2595795f2f62716e797dc24774c1aaa8"}, + {file = "grpcio-1.66.2-cp311-cp311-win_amd64.whl", hash = "sha256:6851de821249340bdb100df5eacfecfc4e6075fa85c6df7ee0eb213170ec8e5d"}, + {file = "grpcio-1.66.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:802d84fd3d50614170649853d121baaaa305de7b65b3e01759247e768d691ddf"}, + {file = "grpcio-1.66.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:80fd702ba7e432994df208f27514280b4b5c6843e12a48759c9255679ad38db8"}, + {file = "grpcio-1.66.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:12fda97ffae55e6526825daf25ad0fa37483685952b5d0f910d6405c87e3adb6"}, + {file = "grpcio-1.66.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:950da58d7d80abd0ea68757769c9db0a95b31163e53e5bb60438d263f4bed7b7"}, + {file = "grpcio-1.66.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e636ce23273683b00410f1971d209bf3689238cf5538d960adc3cdfe80dd0dbd"}, + {file = "grpcio-1.66.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a917d26e0fe980b0ac7bfcc1a3c4ad6a9a4612c911d33efb55ed7833c749b0ee"}, + {file = "grpcio-1.66.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49f0ca7ae850f59f828a723a9064cadbed90f1ece179d375966546499b8a2c9c"}, + {file = "grpcio-1.66.2-cp312-cp312-win32.whl", hash = "sha256:31fd163105464797a72d901a06472860845ac157389e10f12631025b3e4d0453"}, + {file = "grpcio-1.66.2-cp312-cp312-win_amd64.whl", hash = "sha256:ff1f7882e56c40b0d33c4922c15dfa30612f05fb785074a012f7cda74d1c3679"}, + {file = "grpcio-1.66.2-cp313-cp313-linux_armv7l.whl", hash = "sha256:3b00efc473b20d8bf83e0e1ae661b98951ca56111feb9b9611df8efc4fe5d55d"}, + {file = "grpcio-1.66.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1caa38fb22a8578ab8393da99d4b8641e3a80abc8fd52646f1ecc92bcb8dee34"}, + {file = "grpcio-1.66.2-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:c408f5ef75cfffa113cacd8b0c0e3611cbfd47701ca3cdc090594109b9fcbaed"}, + {file = "grpcio-1.66.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c806852deaedee9ce8280fe98955c9103f62912a5b2d5ee7e3eaa284a6d8d8e7"}, + {file = "grpcio-1.66.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f145cc21836c332c67baa6fc81099d1d27e266401565bf481948010d6ea32d46"}, + {file = "grpcio-1.66.2-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:73e3b425c1e155730273f73e419de3074aa5c5e936771ee0e4af0814631fb30a"}, + {file = "grpcio-1.66.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:9c509a4f78114cbc5f0740eb3d7a74985fd2eff022971bc9bc31f8bc93e66a3b"}, + {file = "grpcio-1.66.2-cp313-cp313-win32.whl", hash = "sha256:20657d6b8cfed7db5e11b62ff7dfe2e12064ea78e93f1434d61888834bc86d75"}, + {file = "grpcio-1.66.2-cp313-cp313-win_amd64.whl", hash = "sha256:fb70487c95786e345af5e854ffec8cb8cc781bcc5df7930c4fbb7feaa72e1cdf"}, + {file = "grpcio-1.66.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:a18e20d8321c6400185b4263e27982488cb5cdd62da69147087a76a24ef4e7e3"}, + {file = "grpcio-1.66.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:02697eb4a5cbe5a9639f57323b4c37bcb3ab2d48cec5da3dc2f13334d72790dd"}, + {file = "grpcio-1.66.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:99a641995a6bc4287a6315989ee591ff58507aa1cbe4c2e70d88411c4dcc0839"}, + {file = "grpcio-1.66.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ed71e81782966ffead60268bbda31ea3f725ebf8aa73634d5dda44f2cf3fb9c"}, + {file = "grpcio-1.66.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbd27c24a4cc5e195a7f56cfd9312e366d5d61b86e36d46bbe538457ea6eb8dd"}, + {file = "grpcio-1.66.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d9a9724a156c8ec6a379869b23ba3323b7ea3600851c91489b871e375f710bc8"}, + {file = "grpcio-1.66.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d8d4732cc5052e92cea2f78b233c2e2a52998ac40cd651f40e398893ad0d06ec"}, + {file = "grpcio-1.66.2-cp38-cp38-win32.whl", hash = "sha256:7b2c86457145ce14c38e5bf6bdc19ef88e66c5fee2c3d83285c5aef026ba93b3"}, + {file = "grpcio-1.66.2-cp38-cp38-win_amd64.whl", hash = "sha256:e88264caad6d8d00e7913996030bac8ad5f26b7411495848cc218bd3a9040b6c"}, + {file = "grpcio-1.66.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:c400ba5675b67025c8a9f48aa846f12a39cf0c44df5cd060e23fda5b30e9359d"}, + {file = "grpcio-1.66.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:66a0cd8ba6512b401d7ed46bb03f4ee455839957f28b8d61e7708056a806ba6a"}, + {file = "grpcio-1.66.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:06de8ec0bd71be123eec15b0e0d457474931c2c407869b6c349bd9bed4adbac3"}, + {file = "grpcio-1.66.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb57870449dfcfac428afbb5a877829fcb0d6db9d9baa1148705739e9083880e"}, + {file = "grpcio-1.66.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b672abf90a964bfde2d0ecbce30f2329a47498ba75ce6f4da35a2f4532b7acbc"}, + {file = "grpcio-1.66.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ad2efdbe90c73b0434cbe64ed372e12414ad03c06262279b104a029d1889d13e"}, + {file = "grpcio-1.66.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9c3a99c519f4638e700e9e3f83952e27e2ea10873eecd7935823dab0c1c9250e"}, + {file = "grpcio-1.66.2-cp39-cp39-win32.whl", hash = "sha256:78fa51ebc2d9242c0fc5db0feecc57a9943303b46664ad89921f5079e2e4ada7"}, + {file = "grpcio-1.66.2-cp39-cp39-win_amd64.whl", hash = "sha256:728bdf36a186e7f51da73be7f8d09457a03061be848718d0edf000e709418987"}, + {file = "grpcio-1.66.2.tar.gz", hash = "sha256:563588c587b75c34b928bc428548e5b00ea38c46972181a4d8b75ba7e3f24231"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.66.2)"] + [[package]] name = "h11" version = "0.14.0" @@ -875,6 +1502,61 @@ http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] trio = ["trio (>=0.22.0,<0.26.0)"] +[[package]] +name = "httptools" +version = "0.6.2" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "httptools-0.6.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0238f07780782c018e9801d8f5f5aea3a4680a1af132034b444f677718c6fe88"}, + {file = "httptools-0.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10d28e5597d4349390c640232c9366ddc15568114f56724fe30a53de9686b6ab"}, + {file = "httptools-0.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ddaf99e362ae4169f6a8b3508f3487264e0a1b1e58c0b07b86407bc9ecee831"}, + {file = "httptools-0.6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc9d039b6b8a36b182bc60774bb5d456b8ff9ec44cf97719f2f38bb1dcdd546"}, + {file = "httptools-0.6.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b57cb8a4a8a8ffdaf0395326ef3b9c1aba36e58a421438fc04c002a1f511db63"}, + {file = "httptools-0.6.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b73cda1326738eab5d60640ca0b87ac4e4db09a099423c41b59a5681917e8d1d"}, + {file = "httptools-0.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:352a496244360deb1c1d108391d76cd6f3dd9f53ccf975a082e74c6761af30c9"}, + {file = "httptools-0.6.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2e9d225b178a6cc700c23cf2f5daf85a10f93f1db7c34e9ee4ee0bbc29ad458a"}, + {file = "httptools-0.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49b14fcc9b12a52da8667587efa124a18e1a3eb63bbbcabf9882f4008d171d6"}, + {file = "httptools-0.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d5c33d98b2311ddbe06e92b12b14de334dcfbe64ebcbb2c7a34b5c6036db512"}, + {file = "httptools-0.6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53cd2d776700bf0ed0e6fb203d716b041712ea4906479031cc5ac5421ecaa7d2"}, + {file = "httptools-0.6.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7da016a0dab1fcced89dfff8537033c5dc200015e14023368f3f4a69e39b8716"}, + {file = "httptools-0.6.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d6e0ba155a1b3159551ac6b4551eb20028617e2e4bb71f2c61efed0756e6825"}, + {file = "httptools-0.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:ad44569b0f508e046ffe85b4a547d5b68d1548fd90767df69449cc28021ee709"}, + {file = "httptools-0.6.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c92d2b7c1a914ab2f66454961eeaf904f4fe7529b93ff537619d22c18b82d070"}, + {file = "httptools-0.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78f920a75c1dbcb5a48a495f384d73ceb41e437a966c318eb7e56f1c1ad1df3e"}, + {file = "httptools-0.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56bcd9ba0adf16edb4e3e45b8b9346f5b3b2372402e953d54c84b345d0f691e0"}, + {file = "httptools-0.6.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e350a887adb38ac65c93c2f395b60cf482baca61fd396ed8d6fd313dbcce6fac"}, + {file = "httptools-0.6.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ddc328c2a2daf2cf4bdc7bbc8a458dc4c840637223d4b8e01bce2168cc79fd23"}, + {file = "httptools-0.6.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddaf38943dbb32333a182c894b6092a68b56c5e36d0c54ba3761d28119b15447"}, + {file = "httptools-0.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:052f7f50e4a38f069478143878371ed17937f268349bcd68f6f7a9de9fcfce21"}, + {file = "httptools-0.6.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:406f7dc5d9db68cd9ac638d14c74d077085f76b45f704d3ec38d43b842b3cb44"}, + {file = "httptools-0.6.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:77e22c33123ce11231ff2773d8905e20b45d77a69459def7481283b72a583955"}, + {file = "httptools-0.6.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41965586b02715c3d83dd9153001f654e5b621de0c5255f5ef0635485212d0c0"}, + {file = "httptools-0.6.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93b1839d54b80a06a51a31b90d024a1770e250d00de57e7ae069bafba932f398"}, + {file = "httptools-0.6.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8fdb4634040d1dbde7e0b373e19668cdb61c0ee8690d3b4064ac748d85365bca"}, + {file = "httptools-0.6.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c30902f9b9da0d74668b6f71d7b57081a4879d9a5ea93d5922dbe15b15b3b24a"}, + {file = "httptools-0.6.2-cp313-cp313-win_amd64.whl", hash = "sha256:cf61238811a75335751b4b17f8b221a35f93f2d57489296742adf98412d2a568"}, + {file = "httptools-0.6.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8d80878cb40ebf88a48839ff7206ceb62e4b54327e0c2f9f15ee12edbd8b907e"}, + {file = "httptools-0.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5141ccc9dbd8cdc59d1e93e318d405477a940dc6ebadcb8d9f8da17d2812d353"}, + {file = "httptools-0.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bb67d47f045f56e9a5da4deccf710bdde21212e4b1f4776b7a542449f6a7682"}, + {file = "httptools-0.6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76dcb8f5c866f1537ccbaad01ebb3611890d281ef8d25e050d1cc3d90fba6b3d"}, + {file = "httptools-0.6.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1b7bc59362143dc2d02896dde94004ef54ff1989ceedf4b389ad3b530f312364"}, + {file = "httptools-0.6.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c7a5715b1f46e9852442f496c0df2f8c393cc8f293f5396d2c8d95cac852fb51"}, + {file = "httptools-0.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:3f0246ca7f78fa8e3902ddb985b9f55509d417a862f4634a8fa63a7a496266c8"}, + {file = "httptools-0.6.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1099f73952e18c718ccaaf7a97ae58c94a91839c3d247c6184326f85a2eda7b4"}, + {file = "httptools-0.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3e45d004531330030f7d07abe4865bc17963b9989bc1941cebbf7224010fb82"}, + {file = "httptools-0.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f2fea370361a90cb9330610a95303587eda9d1e69930dbbee9978eac1d5946"}, + {file = "httptools-0.6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0481154c91725f7e7b729a535190388be6c7cbae3bbf0e793343ca386282312"}, + {file = "httptools-0.6.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d25f8fdbc6cc6561353c7a384d76295e6a85a4945115b8bc347855db150e8c77"}, + {file = "httptools-0.6.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:054bdee08e4f7c15c186f6e7dbc8f0cf974b8dd1832b5f17f988faf8b12815c9"}, + {file = "httptools-0.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:4502620722b453c2c6306fad392c515dcb804dfa9c6d3b90d8926a07a7a01109"}, + {file = "httptools-0.6.2.tar.gz", hash = "sha256:ae694efefcb61317c79b2fa1caebc122060992408e389bb00889567e463a47f1"}, +] + +[package.extras] +test = ["Cython (>=0.29.24)"] + [[package]] name = "httpx" version = "0.27.2" @@ -901,25 +1583,84 @@ socks = ["socksio (==1.*)"] zstd = ["zstandard (>=0.18.0)"] [[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" +name = "httpx-sse" +version = "0.4.0" +description = "Consume Server-Sent Event (SSE) messages with HTTPX." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, + {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, + {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, ] -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - [[package]] -name = "imagesize" -version = "1.4.1" -description = "Getting image size from png/jpeg/jpeg2000/gif file" +name = "huggingface-hub" +version = "0.25.2" +description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8.0" +files = [ + {file = "huggingface_hub-0.25.2-py3-none-any.whl", hash = "sha256:1897caf88ce7f97fe0110603d8f66ac264e3ba6accdf30cd66cc0fed5282ad25"}, + {file = "huggingface_hub-0.25.2.tar.gz", hash = "sha256:a1014ea111a5f40ccd23f7f7ba8ac46e20fa3b658ced1f86a00c75c06ec6423c"}, +] + +[package.dependencies] +filelock = "*" +fsspec = ">=2023.5.0" +packaging = ">=20.9" +pyyaml = ">=5.1" +requests = "*" +tqdm = ">=4.42.1" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +cli = ["InquirerPy (==0.3.4)"] +dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.5.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] +fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +hf-transfer = ["hf-transfer (>=0.1.4)"] +inference = ["aiohttp", "minijinja (>=1.0)"] +quality = ["mypy (==1.5.1)", "ruff (>=0.5.0)"] +tensorflow = ["graphviz", "pydot", "tensorflow"] +tensorflow-testing = ["keras (<3.0)", "tensorflow"] +testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest (>=8.1.1,<8.2.2)", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-mock", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] +torch = ["safetensors[torch]", "torch"] +typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] + +[[package]] +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + +[[package]] +name = "idna" +version = "3.10" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.6" +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -927,25 +1668,43 @@ files = [ [[package]] name = "importlib-metadata" -version = "8.5.0" +version = "8.4.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, - {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, + {file = "importlib_metadata-8.4.0-py3-none-any.whl", hash = "sha256:66f342cc6ac9818fc6ff340576acd24d65ba0b3efabb2b4ac08b598965a4a2f1"}, + {file = "importlib_metadata-8.4.0.tar.gz", hash = "sha256:9a547d3bc3608b025f93d403fdd1aae741c24fbb8314df4b155675742ce303c5"}, ] [package.dependencies] -zipp = ">=3.20" +zipp = ">=0.5" + +[package.extras] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] + +[[package]] +name = "importlib-resources" +version = "6.4.5" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, + {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] type = ["pytest-mypy"] [[package]] @@ -1018,6 +1777,41 @@ qtconsole = ["qtconsole"] test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] +[[package]] +name = "ipywidgets" +version = "8.1.5" +description = "Jupyter interactive widgets" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, + {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.12,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.12,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + [[package]] name = "jedi" version = "0.19.1" @@ -1124,6 +1918,17 @@ files = [ {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, ] +[[package]] +name = "json5" +version = "0.9.25" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8" +files = [ + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, +] + [[package]] name = "jsonpatch" version = "1.33" @@ -1149,6 +1954,68 @@ files = [ {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, ] +[[package]] +name = "jsonschema" +version = "4.23.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2024.10.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +files = [ + {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, + {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, +] + +[package.dependencies] +referencing = ">=0.31.0" + +[[package]] +name = "jupyter" +version = "1.1.1" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +optional = false +python-versions = "*" +files = [ + {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, + {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +jupyterlab = "*" +nbconvert = "*" +notebook = "*" + [[package]] name = "jupyter-client" version = "8.6.3" @@ -1172,6 +2039,30 @@ traitlets = ">=5.3" docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +[[package]] +name = "jupyter-console" +version = "6.6.3" +description = "Jupyter terminal console" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + [[package]] name = "jupyter-core" version = "5.7.2" @@ -1192,9 +2083,214 @@ traitlets = ">=5.3" docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] +[[package]] +name = "jupyter-events" +version = "0.10.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.14.2" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.14.2-py3-none-any.whl", hash = "sha256:47ff506127c2f7851a17bf4713434208fc490955d0e8632e95014a9a9afbeefd"}, + {file = "jupyter_server-2.14.2.tar.gz", hash = "sha256:66095021aa9638ced276c248b1d81862e4c50f292d575920bbe960de1c56b12b"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.9.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.2.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.2.5-py3-none-any.whl", hash = "sha256:73b6e0775d41a9fee7ee756c80f58a6bed4040869ccc21411dc559818874d321"}, + {file = "jupyterlab-4.2.5.tar.gz", hash = "sha256:ae7f3a1b8cb88b4f55009ce79fa7c06f99d70cd63601ee4aa91815d054f46f75"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" +packaging = "*" +setuptools = ">=40.1.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.3.5)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.3.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.2)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.1.post2)", "matplotlib (==3.8.3)", "nbconvert (>=7.0.0)", "pandas (==2.2.1)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.3.0" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.31" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.13" +description = "Jupyter interactive widgets for JupyterLab" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, + {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, +] + +[[package]] +name = "kubernetes" +version = "31.0.0" +description = "Kubernetes python client" +optional = false +python-versions = ">=3.6" +files = [ + {file = "kubernetes-31.0.0-py2.py3-none-any.whl", hash = "sha256:bf141e2d380c8520eada8b351f4e319ffee9636328c137aa432bc486ca1200e1"}, + {file = "kubernetes-31.0.0.tar.gz", hash = "sha256:28945de906c8c259c1ebe62703b56a03b714049372196f854105afe4e6d014c0"}, +] + +[package.dependencies] +certifi = ">=14.05.14" +durationpy = ">=0.7" +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.3.1" +version = "0.3.3" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -1204,7 +2300,7 @@ develop = true [package.dependencies] aiohttp = "^3.8.3" async-timeout = {version = "^4.0.0", markers = "python_version < \"3.11\""} -langchain-core = "^0.3.6" +langchain-core = "^0.3.10" langchain-text-splitters = "^0.3.0" langsmith = "^0.1.17" numpy = [ @@ -1215,15 +2311,54 @@ pydantic = "^2.7.4" PyYAML = ">=5.3" requests = "^2" SQLAlchemy = ">=1.4,<3" -tenacity = "^8.1.0,!=8.4.0" +tenacity = ">=8.1.0,!=8.4.0,<10" [package.source] type = "directory" url = "libs/langchain" +[[package]] +name = "langchain-anthropic" +version = "0.2.3" +description = "An integration package connecting AnthropicMessages and LangChain" +optional = false +python-versions = ">=3.9,<4.0" +files = [] +develop = true + +[package.dependencies] +anthropic = ">=0.30.0,<1" +langchain-core = "^0.3.9" +pydantic = "^2.7.4" + +[package.source] +type = "directory" +url = "libs/partners/anthropic" + +[[package]] +name = "langchain-chroma" +version = "0.1.5" +description = "An integration package connecting Chroma and LangChain" +optional = false +python-versions = ">=3.8.1,<4" +files = [] +develop = true + +[package.dependencies] +chromadb = ">=0.4.0,<0.6.0,!=0.5.4,!=0.5.5,!=0.5.7,!=0.5.9,!=0.5.10,!=0.5.11,!=0.5.12" +langchain-core = {version = ">=0.1.40,<0.4", markers = "python_version >= \"3.9\""} +numpy = [ + {version = ">=1,<2", markers = "python_version < \"3.12\""}, + {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, +] + +[package.source] +type = "directory" +url = "libs/partners/chroma" + [[package]] name = "langchain-community" -version = "0.3.1" +version = "0.3.2" description = "Community contributed LangChain integrations." optional = false python-versions = ">=3.9,<4.0" @@ -1233,8 +2368,8 @@ develop = true [package.dependencies] aiohttp = "^3.8.3" dataclasses-json = ">= 0.5.7, < 0.7" -langchain = "^0.3.1" -langchain-core = "^0.3.6" +langchain = "^0.3.3" +langchain-core = "^0.3.10" langsmith = "^0.1.125" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, @@ -1244,7 +2379,7 @@ pydantic-settings = "^2.4.0" PyYAML = ">=5.3" requests = "^2" SQLAlchemy = ">=1.4,<3" -tenacity = "^8.1.0,!=8.4.0" +tenacity = ">=8.1.0,!=8.4.0,<10" [package.source] type = "directory" @@ -1252,7 +2387,7 @@ url = "libs/community" [[package]] name = "langchain-core" -version = "0.3.6" +version = "0.3.10" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -1268,16 +2403,56 @@ pydantic = [ {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] PyYAML = ">=5.3" -tenacity = "^8.1.0,!=8.4.0" +tenacity = ">=8.1.0,!=8.4.0,<10.0.0" typing-extensions = ">=4.7" [package.source] type = "directory" url = "libs/core" +[[package]] +name = "langchain-experimental" +version = "0.3.2" +description = "Building applications with LLMs through composability" +optional = false +python-versions = ">=3.9,<4.0" +files = [] +develop = false + +[package.dependencies] +langchain-community = "^0.3.0" +langchain-core = "^0.3.6" + +[package.source] +type = "git" +url = "https://github.com/langchain-ai/langchain-experimental.git" +reference = "HEAD" +resolved_reference = "6fdfdbe2d66325a2e81555890715e69946e7e26b" +subdirectory = "libs/experimental" + +[[package]] +name = "langchain-mistralai" +version = "0.2.0" +description = "An integration package connecting Mistral and LangChain" +optional = false +python-versions = ">=3.9,<4.0" +files = [] +develop = true + +[package.dependencies] +httpx = ">=0.25.2,<1" +httpx-sse = ">=0.3.1,<1" +langchain-core = "^0.3.0" +pydantic = ">=2,<3" +tokenizers = ">=0.15.1,<1" + +[package.source] +type = "directory" +url = "libs/partners/mistralai" + [[package]] name = "langchain-openai" -version = "0.2.1" +version = "0.2.2" description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = ">=3.9,<4.0" @@ -1285,7 +2460,7 @@ files = [] develop = true [package.dependencies] -langchain-core = "^0.3" +langchain-core = "^0.3.9" openai = "^1.40.0" tiktoken = ">=0.7,<1" @@ -1309,6 +2484,58 @@ langchain-core = "^0.3.0" type = "directory" url = "libs/text-splitters" +[[package]] +name = "langgraph" +version = "0.2.36" +description = "Building stateful, multi-actor applications with LLMs" +optional = false +python-versions = ">=3.9.0,<4.0" +files = [] +develop = false + +[package.dependencies] +langchain-core = ">=0.2.39,<0.4" +langgraph-checkpoint = "^2.0.0" +langgraph-sdk = "^0.1.32" + +[package.source] +type = "git" +url = "https://github.com/langchain-ai/langgraph.git" +reference = "HEAD" +resolved_reference = "f2dc537696fcf9b86fb7723a7939d6e891e64136" +subdirectory = "libs/langgraph" + +[[package]] +name = "langgraph-checkpoint" +version = "2.0.1" +description = "Library with base interfaces for LangGraph checkpoint savers." +optional = false +python-versions = "<4.0.0,>=3.9.0" +files = [ + {file = "langgraph_checkpoint-2.0.1-py3-none-any.whl", hash = "sha256:760edb722f6c64f2a39f41c7fbd56aaee47524f3399cf7c4bb8f5563b590ee68"}, + {file = "langgraph_checkpoint-2.0.1.tar.gz", hash = "sha256:31c34952b11a93108d76e5ad05398bfc94d8aafda5b4da7d17c26a121acce8e0"}, +] + +[package.dependencies] +langchain-core = ">=0.2.38,<0.4" +msgpack = ">=1.1.0,<2.0.0" + +[[package]] +name = "langgraph-sdk" +version = "0.1.33" +description = "SDK for interacting with LangGraph API" +optional = false +python-versions = "<4.0.0,>=3.9.0" +files = [ + {file = "langgraph_sdk-0.1.33-py3-none-any.whl", hash = "sha256:fe2311ebfe231219a7ad06c3dad4860a9e2917e780aaa2f228d1a9f5653da686"}, + {file = "langgraph_sdk-0.1.33.tar.gz", hash = "sha256:addffc33554b690e81525c12fe9b2656cc7b740678e4724bc706d1ca13b3de93"}, +] + +[package.dependencies] +httpx = ">=0.25.2" +httpx-sse = ">=0.4.0" +orjson = ">=3.10.1" + [[package]] name = "langsmith" version = "0.1.128" @@ -1327,7 +2554,31 @@ pydantic = [ {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] -requests = ">=2,<3" +requests = ">=2,<3" + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" @@ -1431,6 +2682,242 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mistune" +version = "3.0.2" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, +] + +[[package]] +name = "mmh3" +version = "5.0.1" +description = "Python extension for MurmurHash (MurmurHash3), a set of fast and robust hash functions." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f0a4b4bf05778ed77d820d6e7d0e9bd6beb0c01af10e1ce9233f5d2f814fcafa"}, + {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac7a391039aeab95810c2d020b69a94eb6b4b37d4e2374831e92db3a0cdf71c6"}, + {file = "mmh3-5.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3a2583b5521ca49756d8d8bceba80627a9cc295f255dcab4e3df7ccc2f09679a"}, + {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:081a8423fe53c1ac94f87165f3e4c500125d343410c1a0c5f1703e898a3ef038"}, + {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8b4d72713799755dc8954a7d36d5c20a6c8de7b233c82404d122c7c7c1707cc"}, + {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:389a6fd51efc76d3182d36ec306448559c1244f11227d2bb771bdd0e6cc91321"}, + {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:39f4128edaa074bff721b1d31a72508cba4d2887ee7867f22082e1fe9d4edea0"}, + {file = "mmh3-5.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d5d23a94d91aabba3386b3769048d5f4210fdfef80393fece2f34ba5a7b466c"}, + {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:16347d038361f8b8f24fd2b7ef378c9b68ddee9f7706e46269b6e0d322814713"}, + {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6e299408565af7d61f2d20a5ffdd77cf2ed902460fe4e6726839d59ba4b72316"}, + {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:42050af21ddfc5445ee5a66e73a8fc758c71790305e3ee9e4a85a8e69e810f94"}, + {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2ae9b1f5ef27ec54659920f0404b7ceb39966e28867c461bfe83a05e8d18ddb0"}, + {file = "mmh3-5.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:50c2495a02045f3047d71d4ae9cdd7a15efc0bcbb7ff17a18346834a8e2d1d19"}, + {file = "mmh3-5.0.1-cp310-cp310-win32.whl", hash = "sha256:c028fa77cddf351ca13b4a56d43c1775652cde0764cadb39120b68f02a23ecf6"}, + {file = "mmh3-5.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c5e741e421ec14400c4aae30890515c201f518403bdef29ae1e00d375bb4bbb5"}, + {file = "mmh3-5.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:b17156d56fabc73dbf41bca677ceb6faed435cc8544f6566d72ea77d8a17e9d0"}, + {file = "mmh3-5.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a6d5a9b1b923f1643559ba1fc0bf7a5076c90cbb558878d3bf3641ce458f25d"}, + {file = "mmh3-5.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3349b968be555f7334bbcce839da98f50e1e80b1c615d8e2aa847ea4a964a012"}, + {file = "mmh3-5.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1bd3c94b110e55db02ab9b605029f48a2f7f677c6e58c09d44e42402d438b7e1"}, + {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47ba84d48608f79adbb10bb09986b6dc33eeda5c2d1bd75d00820081b73bde9"}, + {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c0217987a8b8525c8d9170f66d036dec4ab45cfbd53d47e8d76125791ceb155e"}, + {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2797063a34e78d1b61639a98b0edec1c856fa86ab80c7ec859f1796d10ba429"}, + {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8bba16340adcbd47853a2fbe5afdb397549e8f2e79324ff1dced69a3f8afe7c3"}, + {file = "mmh3-5.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:282797957c9f60b51b9d768a602c25f579420cc9af46feb77d457a27823d270a"}, + {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e4fb670c29e63f954f9e7a2cdcd57b36a854c2538f579ef62681ccbaa1de2b69"}, + {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ee7d85438dc6aff328e19ab052086a3c29e8a9b632998a49e5c4b0034e9e8d6"}, + {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7fb5db231f3092444bc13901e6a8d299667126b00636ffbad4a7b45e1051e2f"}, + {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c100dd441703da5ec136b1d9003ed4a041d8a1136234c9acd887499796df6ad8"}, + {file = "mmh3-5.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71f3b765138260fd7a7a2dba0ea5727dabcd18c1f80323c9cfef97a7e86e01d0"}, + {file = "mmh3-5.0.1-cp311-cp311-win32.whl", hash = "sha256:9a76518336247fd17689ce3ae5b16883fd86a490947d46a0193d47fb913e26e3"}, + {file = "mmh3-5.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:336bc4df2e44271f1c302d289cc3d78bd52d3eed8d306c7e4bff8361a12bf148"}, + {file = "mmh3-5.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:af6522722fbbc5999aa66f7244d0986767a46f1fb05accc5200f75b72428a508"}, + {file = "mmh3-5.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f2730bb263ed9c388e8860438b057a53e3cc701134a6ea140f90443c4c11aa40"}, + {file = "mmh3-5.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6246927bc293f6d56724536400b85fb85f5be26101fa77d5f97dd5e2a4c69bf2"}, + {file = "mmh3-5.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fbca322519a6e6e25b6abf43e940e1667cf8ea12510e07fb4919b48a0cd1c411"}, + {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eae8c19903ed8a1724ad9e67e86f15d198a7a1271a4f9be83d47e38f312ed672"}, + {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a09fd6cc72c07c0c07c3357714234b646d78052487c4a3bd5f7f6e08408cff60"}, + {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ff8551fee7ae3b11c5d986b6347ade0dccaadd4670ffdb2b944dee120ffcc84"}, + {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e39694c73a5a20c8bf36dfd8676ed351e5234d55751ba4f7562d85449b21ef3f"}, + {file = "mmh3-5.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eba6001989a92f72a89c7cf382fda831678bd780707a66b4f8ca90239fdf2123"}, + {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0771f90c9911811cc606a5c7b7b58f33501c9ee896ed68a6ac22c7d55878ecc0"}, + {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:09b31ed0c0c0920363e96641fac4efde65b1ab62b8df86293142f35a254e72b4"}, + {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5cf4a8deda0235312db12075331cb417c4ba163770edfe789bde71d08a24b692"}, + {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:41f7090a95185ef20ac018581a99337f0cbc84a2135171ee3290a9c0d9519585"}, + {file = "mmh3-5.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b97b5b368fb7ff22194ec5854f5b12d8de9ab67a0f304728c7f16e5d12135b76"}, + {file = "mmh3-5.0.1-cp312-cp312-win32.whl", hash = "sha256:842516acf04da546f94fad52db125ee619ccbdcada179da51c326a22c4578cb9"}, + {file = "mmh3-5.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:d963be0dbfd9fca209c17172f6110787ebf78934af25e3694fe2ba40e55c1e2b"}, + {file = "mmh3-5.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:a5da292ceeed8ce8e32b68847261a462d30fd7b478c3f55daae841404f433c15"}, + {file = "mmh3-5.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:673e3f1c8d4231d6fb0271484ee34cb7146a6499fc0df80788adb56fd76842da"}, + {file = "mmh3-5.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f795a306bd16a52ad578b663462cc8e95500b3925d64118ae63453485d67282b"}, + {file = "mmh3-5.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5ed57a5e28e502a1d60436cc25c76c3a5ba57545f250f2969af231dc1221e0a5"}, + {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:632c28e7612e909dbb6cbe2fe496201ada4695b7715584005689c5dc038e59ad"}, + {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53fd6bd525a5985e391c43384672d9d6b317fcb36726447347c7fc75bfed34ec"}, + {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dceacf6b0b961a0e499836af3aa62d60633265607aef551b2a3e3c48cdaa5edd"}, + {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f0738d478fdfb5d920f6aff5452c78f2c35b0eff72caa2a97dfe38e82f93da2"}, + {file = "mmh3-5.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e70285e7391ab88b872e5bef632bad16b9d99a6d3ca0590656a4753d55988af"}, + {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:27e5fc6360aa6b828546a4318da1a7da6bf6e5474ccb053c3a6aa8ef19ff97bd"}, + {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7989530c3c1e2c17bf5a0ec2bba09fd19819078ba90beedabb1c3885f5040b0d"}, + {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:cdad7bee649950da7ecd3cbbbd12fb81f1161072ecbdb5acfa0018338c5cb9cf"}, + {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e143b8f184c1bb58cecd85ab4a4fd6dc65a2d71aee74157392c3fddac2a4a331"}, + {file = "mmh3-5.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5eb12e886f3646dd636f16b76eb23fc0c27e8ff3c1ae73d4391e50ef60b40f6"}, + {file = "mmh3-5.0.1-cp313-cp313-win32.whl", hash = "sha256:16e6dddfa98e1c2d021268e72c78951234186deb4df6630e984ac82df63d0a5d"}, + {file = "mmh3-5.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:d3ffb792d70b8c4a2382af3598dad6ae0c5bd9cee5b7ffcc99aa2f5fd2c1bf70"}, + {file = "mmh3-5.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:122fa9ec148383f9124292962bda745f192b47bfd470b2af5fe7bb3982b17896"}, + {file = "mmh3-5.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b12bad8c75e6ff5d67319794fb6a5e8c713826c818d47f850ad08b4aa06960c6"}, + {file = "mmh3-5.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e5bbb066538c1048d542246fc347bb7994bdda29a3aea61c22f9f8b57111ce69"}, + {file = "mmh3-5.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eee6134273f64e2a106827cc8fd77e70cc7239a285006fc6ab4977d59b015af2"}, + {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d04d9aa19d48e4c7bbec9cabc2c4dccc6ff3b2402f856d5bf0de03e10f167b5b"}, + {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79f37da1eed034d06567a69a7988456345c7f29e49192831c3975b464493b16e"}, + {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:242f77666743337aa828a2bf2da71b6ba79623ee7f93edb11e009f69237c8561"}, + {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffd943fff690463945f6441a2465555b3146deaadf6a5e88f2590d14c655d71b"}, + {file = "mmh3-5.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565b15f8d7df43acb791ff5a360795c20bfa68bca8b352509e0fbabd06cc48cd"}, + {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:fc6aafb867c2030df98ac7760ff76b500359252867985f357bd387739f3d5287"}, + {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:32898170644d45aa27c974ab0d067809c066205110f5c6d09f47d9ece6978bfe"}, + {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:42865567838d2193eb64e0ef571f678bf361a254fcdef0c5c8e73243217829bd"}, + {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:5ff5c1f301c4a8b6916498969c0fcc7e3dbc56b4bfce5cfe3fe31f3f4609e5ae"}, + {file = "mmh3-5.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:be74c2dda8a6f44a504450aa2c3507f8067a159201586fc01dd41ab80efc350f"}, + {file = "mmh3-5.0.1-cp38-cp38-win32.whl", hash = "sha256:5610a842621ff76c04b20b29cf5f809b131f241a19d4937971ba77dc99a7f330"}, + {file = "mmh3-5.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:de15739ac50776fe8aa1ef13f1be46a6ee1fbd45f6d0651084097eb2be0a5aa4"}, + {file = "mmh3-5.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:48e84cf3cc7e8c41bc07de72299a73b92d9e3cde51d97851420055b1484995f7"}, + {file = "mmh3-5.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd9dc28c2d168c49928195c2e29b96f9582a5d07bd690a28aede4cc07b0e696"}, + {file = "mmh3-5.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2771a1c56a3d4bdad990309cff5d0a8051f29c8ec752d001f97d6392194ae880"}, + {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5ff2a8322ba40951a84411550352fba1073ce1c1d1213bb7530f09aed7f8caf"}, + {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a16bd3ec90682c9e0a343e6bd4c778c09947c8c5395cdb9e5d9b82b2559efbca"}, + {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d45733a78d68b5b05ff4a823aea51fa664df1d3bf4929b152ff4fd6dea2dd69b"}, + {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:904285e83cedebc8873b0838ed54c20f7344120be26e2ca5a907ab007a18a7a0"}, + {file = "mmh3-5.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac4aeb1784e43df728034d0ed72e4b2648db1a69fef48fa58e810e13230ae5ff"}, + {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cb3d4f751a0b8b4c8d06ef1c085216c8fddcc8b8c8d72445976b5167a40c6d1e"}, + {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8021851935600e60c42122ed1176399d7692df338d606195cd599d228a04c1c6"}, + {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6182d5924a5efc451900f864cbb021d7e8ad5d524816ca17304a0f663bc09bb5"}, + {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5f30b834552a4f79c92e3d266336fb87fd92ce1d36dc6813d3e151035890abbd"}, + {file = "mmh3-5.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cd4383f35e915e06d077df27e04ffd3be7513ec6a9de2d31f430393f67e192a7"}, + {file = "mmh3-5.0.1-cp39-cp39-win32.whl", hash = "sha256:1455fb6b42665a97db8fc66e89a861e52b567bce27ed054c47877183f86ea6e3"}, + {file = "mmh3-5.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:9e26a0f4eb9855a143f5938a53592fa14c2d3b25801c2106886ab6c173982780"}, + {file = "mmh3-5.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:0d0a35a69abdad7549c4030a714bb4ad07902edb3bbe61e1bbc403ded5d678be"}, + {file = "mmh3-5.0.1.tar.gz", hash = "sha256:7dab080061aeb31a6069a181f27c473a1f67933854e36a3464931f2716508896"}, +] + +[package.extras] +benchmark = ["pymmh3 (==0.0.5)", "pyperf (==2.7.0)", "xxhash (==3.5.0)"] +docs = ["myst-parser (==4.0.0)", "shibuya (==2024.8.30)", "sphinx (==8.0.2)", "sphinx-copybutton (==0.5.2)"] +lint = ["black (==24.8.0)", "clang-format (==18.1.8)", "isort (==5.13.2)", "pylint (==3.2.7)"] +plot = ["matplotlib (==3.9.2)", "pandas (==2.2.2)"] +test = ["pytest (==8.3.3)", "pytest-sugar (==1.0.0)"] +type = ["mypy (==1.11.2)"] + +[[package]] +name = "monotonic" +version = "1.6" +description = "An implementation of time.monotonic() for Python 2 & < 3.3" +optional = false +python-versions = "*" +files = [ + {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, + {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +description = "Python library for arbitrary-precision floating-point arithmetic" +optional = false +python-versions = "*" +files = [ + {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, + {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, +] + +[package.extras] +develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] +docs = ["sphinx"] +gmpy = ["gmpy2 (>=2.1.0a4)"] +tests = ["pytest (>=4.6)"] + +[[package]] +name = "msgpack" +version = "1.1.0" +description = "MessagePack serializer" +optional = false +python-versions = ">=3.8" +files = [ + {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd"}, + {file = "msgpack-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d"}, + {file = "msgpack-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:914571a2a5b4e7606997e169f64ce53a8b1e06f2cf2c3a7273aa106236d43dd5"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c921af52214dcbb75e6bdf6a661b23c3e6417f00c603dd2070bccb5c3ef499f5"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8ce0b22b890be5d252de90d0e0d119f363012027cf256185fc3d474c44b1b9e"}, + {file = "msgpack-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73322a6cc57fcee3c0c57c4463d828e9428275fb85a27aa2aa1a92fdc42afd7b"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e1f3c3d21f7cf67bcf2da8e494d30a75e4cf60041d98b3f79875afb5b96f3a3f"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64fc9068d701233effd61b19efb1485587560b66fe57b3e50d29c5d78e7fef68"}, + {file = "msgpack-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:42f754515e0f683f9c79210a5d1cad631ec3d06cea5172214d2176a42e67e19b"}, + {file = "msgpack-1.1.0-cp310-cp310-win32.whl", hash = "sha256:3df7e6b05571b3814361e8464f9304c42d2196808e0119f55d0d3e62cd5ea044"}, + {file = "msgpack-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:685ec345eefc757a7c8af44a3032734a739f8c45d1b0ac45efc5d8977aa4720f"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3d364a55082fb2a7416f6c63ae383fbd903adb5a6cf78c5b96cc6316dc1cedc7"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79ec007767b9b56860e0372085f8504db5d06bd6a327a335449508bbee9648fa"}, + {file = "msgpack-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6ad622bf7756d5a497d5b6836e7fc3752e2dd6f4c648e24b1803f6048596f701"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e59bca908d9ca0de3dc8684f21ebf9a690fe47b6be93236eb40b99af28b6ea6"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1da8f11a3dd397f0a32c76165cf0c4eb95b31013a94f6ecc0b280c05c91b59"}, + {file = "msgpack-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452aff037287acb1d70a804ffd022b21fa2bb7c46bee884dbc864cc9024128a0"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8da4bf6d54ceed70e8861f833f83ce0814a2b72102e890cbdfe4b34764cdd66e"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:41c991beebf175faf352fb940bf2af9ad1fb77fd25f38d9142053914947cdbf6"}, + {file = "msgpack-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a52a1f3a5af7ba1c9ace055b659189f6c669cf3657095b50f9602af3a3ba0fe5"}, + {file = "msgpack-1.1.0-cp311-cp311-win32.whl", hash = "sha256:58638690ebd0a06427c5fe1a227bb6b8b9fdc2bd07701bec13c2335c82131a88"}, + {file = "msgpack-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd2906780f25c8ed5d7b323379f6138524ba793428db5d0e9d226d3fa6aa1788"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2"}, + {file = "msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39"}, + {file = "msgpack-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c"}, + {file = "msgpack-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b"}, + {file = "msgpack-1.1.0-cp312-cp312-win32.whl", hash = "sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b"}, + {file = "msgpack-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:071603e2f0771c45ad9bc65719291c568d4edf120b44eb36324dcb02a13bfddf"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0f92a83b84e7c0749e3f12821949d79485971f087604178026085f60ce109330"}, + {file = "msgpack-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1964df7b81285d00a84da4e70cb1383f2e665e0f1f2a7027e683956d04b734"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59caf6a4ed0d164055ccff8fe31eddc0ebc07cf7326a2aaa0dbf7a4001cd823e"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0907e1a7119b337971a689153665764adc34e89175f9a34793307d9def08e6ca"}, + {file = "msgpack-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65553c9b6da8166e819a6aa90ad15288599b340f91d18f60b2061f402b9a4915"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a946a8992941fea80ed4beae6bff74ffd7ee129a90b4dd5cf9c476a30e9708d"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4b51405e36e075193bc051315dbf29168d6141ae2500ba8cd80a522964e31434"}, + {file = "msgpack-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4c01941fd2ff87c2a934ee6055bda4ed353a7846b8d4f341c428109e9fcde8c"}, + {file = "msgpack-1.1.0-cp313-cp313-win32.whl", hash = "sha256:7c9a35ce2c2573bada929e0b7b3576de647b0defbd25f5139dcdaba0ae35a4cc"}, + {file = "msgpack-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c40ffa9a15d74e05ba1fe2681ea33b9caffd886675412612d93ab17b58ea2fec"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1ba6136e650898082d9d5a5217d5906d1e138024f836ff48691784bbe1adf96"}, + {file = "msgpack-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0856a2b7e8dcb874be44fea031d22e5b3a19121be92a1e098f46068a11b0870"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:471e27a5787a2e3f974ba023f9e265a8c7cfd373632247deb225617e3100a3c7"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:646afc8102935a388ffc3914b336d22d1c2d6209c773f3eb5dd4d6d3b6f8c1cb"}, + {file = "msgpack-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13599f8829cfbe0158f6456374e9eea9f44eee08076291771d8ae93eda56607f"}, + {file = "msgpack-1.1.0-cp38-cp38-win32.whl", hash = "sha256:8a84efb768fb968381e525eeeb3d92857e4985aacc39f3c47ffd00eb4509315b"}, + {file = "msgpack-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:879a7b7b0ad82481c52d3c7eb99bf6f0645dbdec5134a4bddbd16f3506947feb"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:53258eeb7a80fc46f62fd59c876957a2d0e15e6449a9e71842b6d24419d88ca1"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e7b853bbc44fb03fbdba34feb4bd414322180135e2cb5164f20ce1c9795ee48"}, + {file = "msgpack-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3e9b4936df53b970513eac1758f3882c88658a220b58dcc1e39606dccaaf01c"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46c34e99110762a76e3911fc923222472c9d681f1094096ac4102c18319e6468"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a706d1e74dd3dea05cb54580d9bd8b2880e9264856ce5068027eed09680aa74"}, + {file = "msgpack-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:534480ee5690ab3cbed89d4c8971a5c631b69a8c0883ecfea96c19118510c846"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8cf9e8c3a2153934a23ac160cc4cba0ec035f6867c8013cc6077a79823370346"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3180065ec2abbe13a4ad37688b61b99d7f9e012a535b930e0e683ad6bc30155b"}, + {file = "msgpack-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5a91481a3cc573ac8c0d9aace09345d989dc4a0202b7fcb312c88c26d4e71a8"}, + {file = "msgpack-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f80bc7d47f76089633763f952e67f8214cb7b3ee6bfa489b3cb6a84cfac114cd"}, + {file = "msgpack-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:4d1b7ff2d6146e16e8bd665ac726a89c74163ef8cd39fa8c1087d4e52d3a2325"}, + {file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"}, +] + [[package]] name = "multidict" version = "6.1.0" @@ -1546,6 +3033,87 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "nbclient" +version = "0.10.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.16.4" +description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["pyqtwebengine (>=5.15)"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.10.4" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, +] + +[package.dependencies] +fastjsonschema = ">=2.15" +jsonschema = ">=2.6" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + [[package]] name = "nest-asyncio" version = "1.6.0" @@ -1557,6 +3125,46 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] +[[package]] +name = "notebook" +version = "7.2.2" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "notebook-7.2.2-py3-none-any.whl", hash = "sha256:c89264081f671bc02eec0ed470a627ed791b9156cad9285226b31611d3e9fe1c"}, + {file = "notebook-7.2.2.tar.gz", hash = "sha256:2ef07d4220421623ad3fe88118d687bc0450055570cdd160814a59cf3a1c516e"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.2.0,<4.3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.4" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + [[package]] name = "numpy" version = "1.26.4" @@ -1602,6 +3210,64 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] +[[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 = "onnxruntime" +version = "1.19.2" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = false +python-versions = "*" +files = [ + {file = "onnxruntime-1.19.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:84fa57369c06cadd3c2a538ae2a26d76d583e7c34bdecd5769d71ca5c0fc750e"}, + {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdc471a66df0c1cdef774accef69e9f2ca168c851ab5e4f2f3341512c7ef4666"}, + {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e3a4ce906105d99ebbe817f536d50a91ed8a4d1592553f49b3c23c4be2560ae6"}, + {file = "onnxruntime-1.19.2-cp310-cp310-win32.whl", hash = "sha256:4b3d723cc154c8ddeb9f6d0a8c0d6243774c6b5930847cc83170bfe4678fafb3"}, + {file = "onnxruntime-1.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:17ed7382d2c58d4b7354fb2b301ff30b9bf308a1c7eac9546449cd122d21cae5"}, + {file = "onnxruntime-1.19.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d863e8acdc7232d705d49e41087e10b274c42f09e259016a46f32c34e06dc4fd"}, + {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1dfe4f660a71b31caa81fc298a25f9612815215a47b286236e61d540350d7b6"}, + {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a36511dc07c5c964b916697e42e366fa43c48cdb3d3503578d78cef30417cb84"}, + {file = "onnxruntime-1.19.2-cp311-cp311-win32.whl", hash = "sha256:50cbb8dc69d6befad4746a69760e5b00cc3ff0a59c6c3fb27f8afa20e2cab7e7"}, + {file = "onnxruntime-1.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:1c3e5d415b78337fa0b1b75291e9ea9fb2a4c1f148eb5811e7212fed02cfffa8"}, + {file = "onnxruntime-1.19.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:68e7051bef9cfefcbb858d2d2646536829894d72a4130c24019219442b1dd2ed"}, + {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2d366fbcc205ce68a8a3bde2185fd15c604d9645888703785b61ef174265168"}, + {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:477b93df4db467e9cbf34051662a4b27c18e131fa1836e05974eae0d6e4cf29b"}, + {file = "onnxruntime-1.19.2-cp312-cp312-win32.whl", hash = "sha256:9a174073dc5608fad05f7cf7f320b52e8035e73d80b0a23c80f840e5a97c0147"}, + {file = "onnxruntime-1.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:190103273ea4507638ffc31d66a980594b237874b65379e273125150eb044857"}, + {file = "onnxruntime-1.19.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:636bc1d4cc051d40bc52e1f9da87fbb9c57d9d47164695dfb1c41646ea51ea66"}, + {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5bd8b875757ea941cbcfe01582970cc299893d1b65bd56731e326a8333f638a3"}, + {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2046fc9560f97947bbc1acbe4c6d48585ef0f12742744307d3364b131ac5778"}, + {file = "onnxruntime-1.19.2-cp38-cp38-win32.whl", hash = "sha256:31c12840b1cde4ac1f7d27d540c44e13e34f2345cf3642762d2a3333621abb6a"}, + {file = "onnxruntime-1.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:016229660adea180e9a32ce218b95f8f84860a200f0f13b50070d7d90e92956c"}, + {file = "onnxruntime-1.19.2-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:006c8d326835c017a9e9f74c9c77ebb570a71174a1e89fe078b29a557d9c3848"}, + {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df2a94179a42d530b936f154615b54748239c2908ee44f0d722cb4df10670f68"}, + {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fae4b4de45894b9ce7ae418c5484cbf0341db6813effec01bb2216091c52f7fb"}, + {file = "onnxruntime-1.19.2-cp39-cp39-win32.whl", hash = "sha256:dc5430f473e8706fff837ae01323be9dcfddd3ea471c900a91fa7c9b807ec5d3"}, + {file = "onnxruntime-1.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:38475e29a95c5f6c62c2c603d69fc7d4c6ccbf4df602bd567b86ae1138881c49"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + [[package]] name = "openai" version = "1.48.0" @@ -1626,6 +3292,169 @@ typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +[[package]] +name = "opentelemetry-api" +version = "1.27.0" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_api-1.27.0-py3-none-any.whl", hash = "sha256:953d5871815e7c30c81b56d910c707588000fff7a3ca1c73e6531911d53065e7"}, + {file = "opentelemetry_api-1.27.0.tar.gz", hash = "sha256:ed673583eaa5f81b5ce5e86ef7cdaf622f88ef65f0b9aab40b843dcae5bef342"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +importlib-metadata = ">=6.0,<=8.4.0" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.27.0" +description = "OpenTelemetry Protobuf encoding" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_common-1.27.0-py3-none-any.whl", hash = "sha256:675db7fffcb60946f3a5c43e17d1168a3307a94a930ecf8d2ea1f286f3d4f79a"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.27.0.tar.gz", hash = "sha256:159d27cf49f359e3798c4c3eb8da6ef4020e292571bd8c5604a2a573231dd5c8"}, +] + +[package.dependencies] +opentelemetry-proto = "1.27.0" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.27.0" +description = "OpenTelemetry Collector Protobuf over gRPC Exporter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_exporter_otlp_proto_grpc-1.27.0-py3-none-any.whl", hash = "sha256:56b5bbd5d61aab05e300d9d62a6b3c134827bbd28d0b12f2649c2da368006c9e"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.27.0.tar.gz", hash = "sha256:af6f72f76bcf425dfb5ad11c1a6d6eca2863b91e63575f89bb7b4b55099d968f"}, +] + +[package.dependencies] +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.27.0" +opentelemetry-proto = "1.27.0" +opentelemetry-sdk = ">=1.27.0,<1.28.0" + +[[package]] +name = "opentelemetry-instrumentation" +version = "0.48b0" +description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation-0.48b0-py3-none-any.whl", hash = "sha256:a69750dc4ba6a5c3eb67986a337185a25b739966d80479befe37b546fc870b44"}, + {file = "opentelemetry_instrumentation-0.48b0.tar.gz", hash = "sha256:94929685d906380743a71c3970f76b5f07476eea1834abd5dd9d17abfe23cc35"}, +] + +[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.48b0" +description = "ASGI instrumentation for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_asgi-0.48b0-py3-none-any.whl", hash = "sha256:ddb1b5fc800ae66e85a4e2eca4d9ecd66367a8c7b556169d9e7b57e10676e44d"}, + {file = "opentelemetry_instrumentation_asgi-0.48b0.tar.gz", hash = "sha256:04c32174b23c7fa72ddfe192dad874954968a6a924608079af9952964ecdf785"}, +] + +[package.dependencies] +asgiref = ">=3.0,<4.0" +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.48b0" +opentelemetry-semantic-conventions = "0.48b0" +opentelemetry-util-http = "0.48b0" + +[package.extras] +instruments = ["asgiref (>=3.0,<4.0)"] + +[[package]] +name = "opentelemetry-instrumentation-fastapi" +version = "0.48b0" +description = "OpenTelemetry FastAPI Instrumentation" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_instrumentation_fastapi-0.48b0-py3-none-any.whl", hash = "sha256:afeb820a59e139d3e5d96619600f11ce0187658b8ae9e3480857dd790bc024f2"}, + {file = "opentelemetry_instrumentation_fastapi-0.48b0.tar.gz", hash = "sha256:21a72563ea412c0b535815aeed75fc580240f1f02ebc72381cfab672648637a2"}, +] + +[package.dependencies] +opentelemetry-api = ">=1.12,<2.0" +opentelemetry-instrumentation = "0.48b0" +opentelemetry-instrumentation-asgi = "0.48b0" +opentelemetry-semantic-conventions = "0.48b0" +opentelemetry-util-http = "0.48b0" + +[package.extras] +instruments = ["fastapi (>=0.58,<1.0)"] + +[[package]] +name = "opentelemetry-proto" +version = "1.27.0" +description = "OpenTelemetry Python Proto" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_proto-1.27.0-py3-none-any.whl", hash = "sha256:b133873de5581a50063e1e4b29cdcf0c5e253a8c2d8dc1229add20a4c3830ace"}, + {file = "opentelemetry_proto-1.27.0.tar.gz", hash = "sha256:33c9345d91dafd8a74fc3d7576c5a38f18b7fdf8d02983ac67485386132aedd6"}, +] + +[package.dependencies] +protobuf = ">=3.19,<5.0" + +[[package]] +name = "opentelemetry-sdk" +version = "1.27.0" +description = "OpenTelemetry Python SDK" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_sdk-1.27.0-py3-none-any.whl", hash = "sha256:365f5e32f920faf0fd9e14fdfd92c086e317eaa5f860edba9cdc17a380d9197d"}, + {file = "opentelemetry_sdk-1.27.0.tar.gz", hash = "sha256:d525017dea0ccce9ba4e0245100ec46ecdc043f2d7b8315d56b19aff0904fa6f"}, +] + +[package.dependencies] +opentelemetry-api = "1.27.0" +opentelemetry-semantic-conventions = "0.48b0" +typing-extensions = ">=3.7.4" + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.48b0" +description = "OpenTelemetry Semantic Conventions" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_semantic_conventions-0.48b0-py3-none-any.whl", hash = "sha256:a0de9f45c413a8669788a38569c7e0a11ce6ce97861a628cca785deecdc32a1f"}, + {file = "opentelemetry_semantic_conventions-0.48b0.tar.gz", hash = "sha256:12d74983783b6878162208be57c9effcb89dc88691c64992d70bb89dc00daa1a"}, +] + +[package.dependencies] +deprecated = ">=1.2.6" +opentelemetry-api = "1.27.0" + +[[package]] +name = "opentelemetry-util-http" +version = "0.48b0" +description = "Web util for OpenTelemetry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "opentelemetry_util_http-0.48b0-py3-none-any.whl", hash = "sha256:76f598af93aab50328d2a69c786beaedc8b6a7770f7a818cc307eb353debfffb"}, + {file = "opentelemetry_util_http-0.48b0.tar.gz", hash = "sha256:60312015153580cc20f322e5cdc3d3ecad80a71743235bdb77716e742814623c"}, +] + [[package]] name = "orjson" version = "3.10.7" @@ -1692,6 +3521,17 @@ files = [ {file = "orjson-3.10.7.tar.gz", hash = "sha256:75ef0640403f945f3a1f9f6400686560dbfb0fb5b16589ad62cd477043c4eee3"}, ] +[[package]] +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] + [[package]] name = "packaging" version = "24.1" @@ -1703,6 +3543,17 @@ files = [ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] +[[package]] +name = "pandocfilters" +version = "1.5.1" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + [[package]] name = "parso" version = "0.8.4" @@ -1748,6 +3599,43 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-a test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.11.2)"] +[[package]] +name = "posthog" +version = "3.7.0" +description = "Integrate PostHog into any python application." +optional = false +python-versions = "*" +files = [ + {file = "posthog-3.7.0-py2.py3-none-any.whl", hash = "sha256:3555161c3a9557b5666f96d8e1f17f410ea0f07db56e399e336a1656d4e5c722"}, + {file = "posthog-3.7.0.tar.gz", hash = "sha256:b095d4354ba23f8b346ab5daed8ecfc5108772f922006982dfe8b2d29ebc6e0e"}, +] + +[package.dependencies] +backoff = ">=1.10.0" +monotonic = ">=1.5" +python-dateutil = ">2.1" +requests = ">=2.7,<3.0" +six = ">=1.5" + +[package.extras] +dev = ["black", "flake8", "flake8-print", "isort", "pre-commit"] +sentry = ["django", "sentry-sdk"] +test = ["coverage", "django", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint", "pytest", "pytest-timeout"] + +[[package]] +name = "prometheus-client" +version = "0.21.0" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.21.0-py3-none-any.whl", hash = "sha256:4fa6b4dd0ac16d58bb587c04b1caae65b8c5043e85f778f42f5f632f6af2e166"}, + {file = "prometheus_client-0.21.0.tar.gz", hash = "sha256:96c83c606b71ff2b0a433c98889d275f51ffec6c5e267de37c7a2b5c9aa9233e"}, +] + +[package.extras] +twisted = ["twisted"] + [[package]] name = "prompt-toolkit" version = "3.0.48" @@ -1762,6 +3650,26 @@ files = [ [package.dependencies] wcwidth = "*" +[[package]] +name = "protobuf" +version = "4.25.5" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8"}, + {file = "protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea"}, + {file = "protobuf-4.25.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:b2fde3d805354df675ea4c7c6338c1aecd254dfc9925e88c6d31a2bcb97eb173"}, + {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:919ad92d9b0310070f8356c24b855c98df2b8bd207ebc1c0c6fcc9ab1e007f3d"}, + {file = "protobuf-4.25.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fe14e16c22be926d3abfcb500e60cab068baf10b542b8c858fa27e098123e331"}, + {file = "protobuf-4.25.5-cp38-cp38-win32.whl", hash = "sha256:98d8d8aa50de6a2747efd9cceba361c9034050ecce3e09136f90de37ddba66e1"}, + {file = "protobuf-4.25.5-cp38-cp38-win_amd64.whl", hash = "sha256:b0234dd5a03049e4ddd94b93400b67803c823cfc405689688f59b34e0742381a"}, + {file = "protobuf-4.25.5-cp39-cp39-win32.whl", hash = "sha256:abe32aad8561aa7cc94fc7ba4fdef646e576983edb94a73381b03c53728a626f"}, + {file = "protobuf-4.25.5-cp39-cp39-win_amd64.whl", hash = "sha256:7a183f592dc80aa7c8da7ad9e55091c4ffc9497b3054452d629bb85fa27c2a45"}, + {file = "protobuf-4.25.5-py3-none-any.whl", hash = "sha256:0aebecb809cae990f8129ada5ca273d9d670b76d9bfc9b1809f0a9c02b7dbf41"}, + {file = "protobuf-4.25.5.tar.gz", hash = "sha256:7f8249476b4a9473645db7f8ab42b02fe1488cbe5fb72fddd445e0665afd8584"}, +] + [[package]] name = "psutil" version = "6.0.0" @@ -1803,18 +3711,43 @@ files = [ ] [[package]] -name = "pure-eval" -version = "0.2.3" -description = "Safely evaluate AST nodes without side effects" +name = "pure-eval" +version = "0.2.3" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pyasn1" +version = "0.6.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, + {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.1" +description = "A collection of ASN.1-based protocols modules" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, - {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, + {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, + {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, ] -[package.extras] -tests = ["pytest"] +[package.dependencies] +pyasn1 = ">=0.4.6,<0.7.0" [[package]] name = "pycparser" @@ -2013,6 +3946,62 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pypdf" +version = "5.0.1" +description = "A pure-python PDF library capable of splitting, merging, cropping, and transforming PDF files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pypdf-5.0.1-py3-none-any.whl", hash = "sha256:ff8a32da6c7a63fea9c32fa4dd837cdd0db7966adf6c14f043e3f12592e992db"}, + {file = "pypdf-5.0.1.tar.gz", hash = "sha256:a361c3c372b4a659f9c8dd438d5ce29a753c79c620dc6e1fd66977651f5547ea"}, +] + +[package.dependencies] +typing_extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} + +[package.extras] +crypto = ["PyCryptodome", "cryptography"] +dev = ["black", "flit", "pip-tools", "pre-commit (<2.18.0)", "pytest-cov", "pytest-socket", "pytest-timeout", "pytest-xdist", "wheel"] +docs = ["myst_parser", "sphinx", "sphinx_rtd_theme"] +full = ["Pillow (>=8.0.0)", "PyCryptodome", "cryptography"] +image = ["Pillow (>=8.0.0)"] + +[[package]] +name = "pypika" +version = "0.48.9" +description = "A SQL query builder API for Python" +optional = false +python-versions = "*" +files = [ + {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +description = "Wrappers to call pyproject.toml-based build backend hooks." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, + {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, +] + +[[package]] +name = "pyreadline3" +version = "3.5.4" +description = "A python implementation of GNU readline." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, + {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, +] + +[package.extras] +dev = ["build", "flake8", "mypy", "pytest", "twine"] + [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -2041,6 +4030,17 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + [[package]] name = "pywin32" version = "306" @@ -2064,6 +4064,21 @@ files = [ {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, ] +[[package]] +name = "pywinpty" +version = "2.0.13" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.13-cp310-none-win_amd64.whl", hash = "sha256:697bff211fb5a6508fee2dc6ff174ce03f34a9a233df9d8b5fe9c8ce4d5eaf56"}, + {file = "pywinpty-2.0.13-cp311-none-win_amd64.whl", hash = "sha256:b96fb14698db1284db84ca38c79f15b4cfdc3172065b5137383910567591fa99"}, + {file = "pywinpty-2.0.13-cp312-none-win_amd64.whl", hash = "sha256:2fd876b82ca750bb1333236ce98488c1be96b08f4f7647cfdf4129dfad83c2d4"}, + {file = "pywinpty-2.0.13-cp38-none-win_amd64.whl", hash = "sha256:61d420c2116c0212808d31625611b51caf621fe67f8a6377e2e8b617ea1c1f7d"}, + {file = "pywinpty-2.0.13-cp39-none-win_amd64.whl", hash = "sha256:71cb613a9ee24174730ac7ae439fd179ca34ccb8c5349e8d7b72ab5dea2c6f4b"}, + {file = "pywinpty-2.0.13.tar.gz", hash = "sha256:c34e32351a3313ddd0d7da23d27f835c860d32fe4ac814d372a3ea9594f41dde"}, +] + [[package]] name = "pyyaml" version = "6.0.2" @@ -2247,6 +4262,21 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} +[[package]] +name = "referencing" +version = "0.35.1" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "regex" version = "2024.9.11" @@ -2371,6 +4401,194 @@ 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 = "2.0.0" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=3.4" +files = [ + {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, + {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "rich" +version = "13.9.2" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, + {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rpds-py" +version = "0.20.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, + {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, + {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, + {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, + {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, + {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, + {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, + {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, + {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, + {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, + {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, + {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, + {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, + {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, + {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, + {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, + {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, + {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, + {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, + {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, + {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, + {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, + {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, + {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, + {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, + {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, + {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, + {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, + {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, + {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, + {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, + {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, + {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, + {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, +] + +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + [[package]] name = "ruff" version = "0.5.7" @@ -2398,6 +4616,53 @@ files = [ {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, ] +[[package]] +name = "send2trash" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "75.1.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "setuptools-75.1.0-py3-none-any.whl", hash = "sha256:35ab7fd3bcd95e6b7fd704e4a1539513edad446c097797f2985e0e4b960772f2"}, + {file = "setuptools-75.1.0.tar.gz", hash = "sha256:d59a21b17a275fb872a9c3dae73963160ae079f1049ed956880cd7c09b120538"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] +core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=2.6.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.11.*)", "pytest-mypy"] + +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + [[package]] name = "six" version = "1.16.0" @@ -2603,9 +4868,7 @@ python-versions = ">=3.7" files = [ {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67219632be22f14750f0d1c70e62f204ba69d28f62fd6432ba05ab295853de9b"}, {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4668bd8faf7e5b71c0319407b608f278f279668f358857dbfd10ef1954ac9f90"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb8bea573863762bbf45d1e13f87c2d2fd32cee2dbd50d050f83f87429c9e1ea"}, {file = "SQLAlchemy-2.0.35-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f552023710d4b93d8fb29a91fadf97de89c5926c6bd758897875435f2a939f33"}, - {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:016b2e665f778f13d3c438651dd4de244214b527a275e0acf1d44c05bc6026a9"}, {file = "SQLAlchemy-2.0.35-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7befc148de64b6060937231cbff8d01ccf0bfd75aa26383ffdf8d82b12ec04ff"}, {file = "SQLAlchemy-2.0.35-cp310-cp310-win32.whl", hash = "sha256:22b83aed390e3099584b839b93f80a0f4a95ee7f48270c97c90acd40ee646f0b"}, {file = "SQLAlchemy-2.0.35-cp310-cp310-win_amd64.whl", hash = "sha256:a29762cd3d116585278ffb2e5b8cc311fb095ea278b96feef28d0b423154858e"}, @@ -2626,29 +4889,22 @@ files = [ {file = "SQLAlchemy-2.0.35-cp312-cp312-win32.whl", hash = "sha256:0f9f3f9a3763b9c4deb8c5d09c4cc52ffe49f9876af41cc1b2ad0138878453cf"}, {file = "SQLAlchemy-2.0.35-cp312-cp312-win_amd64.whl", hash = "sha256:25b0f63e7fcc2a6290cb5f7f5b4fc4047843504983a28856ce9b35d8f7de03cc"}, {file = "SQLAlchemy-2.0.35-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f021d334f2ca692523aaf7bbf7592ceff70c8594fad853416a81d66b35e3abf9"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05c3f58cf91683102f2f0265c0db3bd3892e9eedabe059720492dbaa4f922da1"}, {file = "SQLAlchemy-2.0.35-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:032d979ce77a6c2432653322ba4cbeabf5a6837f704d16fa38b5a05d8e21fa00"}, - {file = "SQLAlchemy-2.0.35-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:2e795c2f7d7249b75bb5f479b432a51b59041580d20599d4e112b5f2046437a3"}, {file = "SQLAlchemy-2.0.35-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:cc32b2990fc34380ec2f6195f33a76b6cdaa9eecf09f0c9404b74fc120aef36f"}, {file = "SQLAlchemy-2.0.35-cp37-cp37m-win32.whl", hash = "sha256:9509c4123491d0e63fb5e16199e09f8e262066e58903e84615c301dde8fa2e87"}, {file = "SQLAlchemy-2.0.35-cp37-cp37m-win_amd64.whl", hash = "sha256:3655af10ebcc0f1e4e06c5900bb33e080d6a1fa4228f502121f28a3b1753cde5"}, {file = "SQLAlchemy-2.0.35-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4c31943b61ed8fdd63dfd12ccc919f2bf95eefca133767db6fbbd15da62078ec"}, {file = "SQLAlchemy-2.0.35-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a62dd5d7cc8626a3634208df458c5fe4f21200d96a74d122c83bc2015b333bc1"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0630774b0977804fba4b6bbea6852ab56c14965a2b0c7fc7282c5f7d90a1ae72"}, {file = "SQLAlchemy-2.0.35-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d625eddf7efeba2abfd9c014a22c0f6b3796e0ffb48f5d5ab106568ef01ff5a"}, - {file = "SQLAlchemy-2.0.35-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ada603db10bb865bbe591939de854faf2c60f43c9b763e90f653224138f910d9"}, {file = "SQLAlchemy-2.0.35-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c41411e192f8d3ea39ea70e0fae48762cd11a2244e03751a98bd3c0ca9a4e936"}, {file = "SQLAlchemy-2.0.35-cp38-cp38-win32.whl", hash = "sha256:d299797d75cd747e7797b1b41817111406b8b10a4f88b6e8fe5b5e59598b43b0"}, {file = "SQLAlchemy-2.0.35-cp38-cp38-win_amd64.whl", hash = "sha256:0375a141e1c0878103eb3d719eb6d5aa444b490c96f3fedab8471c7f6ffe70ee"}, {file = "SQLAlchemy-2.0.35-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccae5de2a0140d8be6838c331604f91d6fafd0735dbdcee1ac78fc8fbaba76b4"}, {file = "SQLAlchemy-2.0.35-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2a275a806f73e849e1c309ac11108ea1a14cd7058577aba962cd7190e27c9e3c"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:732e026240cdd1c1b2e3ac515c7a23820430ed94292ce33806a95869c46bd139"}, {file = "SQLAlchemy-2.0.35-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890da8cd1941fa3dab28c5bac3b9da8502e7e366f895b3b8e500896f12f94d11"}, - {file = "SQLAlchemy-2.0.35-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0d8326269dbf944b9201911b0d9f3dc524d64779a07518199a58384c3d37a44"}, {file = "SQLAlchemy-2.0.35-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b76d63495b0508ab9fc23f8152bac63205d2a704cd009a2b0722f4c8e0cba8e0"}, {file = "SQLAlchemy-2.0.35-cp39-cp39-win32.whl", hash = "sha256:69683e02e8a9de37f17985905a5eca18ad651bf592314b4d3d799029797d0eb3"}, {file = "SQLAlchemy-2.0.35-cp39-cp39-win_amd64.whl", hash = "sha256:aee110e4ef3c528f3abbc3c2018c121e708938adeeff9006428dd7c8555e9b3f"}, - {file = "SQLAlchemy-2.0.35-py3-none-any.whl", hash = "sha256:2ab3f0336c0387662ce6221ad30ab3a5e6499aab01b9790879b6578fd9b8faa1"}, {file = "sqlalchemy-2.0.35.tar.gz", hash = "sha256:e11d7ea4d24f0a262bccf9a7cd6284c976c5369dac21db237cff59586045ab9f"}, ] @@ -2718,6 +4974,23 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" [package.extras] full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] +[[package]] +name = "sympy" +version = "1.13.3" +description = "Computer algebra system (CAS) in Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, + {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, +] + +[package.dependencies] +mpmath = ">=1.1.0,<1.4" + +[package.extras] +dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] + [[package]] name = "tenacity" version = "8.5.0" @@ -2733,6 +5006,27 @@ files = [ doc = ["reno", "sphinx"] test = ["pytest", "tornado (>=4.5)", "typeguard"] +[[package]] +name = "terminado" +version = "0.18.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.8" +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] + [[package]] name = "tiktoken" version = "0.7.0" @@ -2785,6 +5079,141 @@ requests = ">=2.26.0" [package.extras] blobfile = ["blobfile (>=2)"] +[[package]] +name = "tinycss2" +version = "1.3.0" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"}, + {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + +[[package]] +name = "tokenizers" +version = "0.20.1" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tokenizers-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:439261da7c0a5c88bda97acb284d49fbdaf67e9d3b623c0bfd107512d22787a9"}, + {file = "tokenizers-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03dae629d99068b1ea5416d50de0fea13008f04129cc79af77a2a6392792d93c"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b61f561f329ffe4b28367798b89d60c4abf3f815d37413b6352bc6412a359867"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec870fce1ee5248a10be69f7a8408a234d6f2109f8ea827b4f7ecdbf08c9fd15"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d388d1ea8b7447da784e32e3b86a75cce55887e3b22b31c19d0b186b1c677800"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299c85c1d21135bc01542237979bf25c32efa0d66595dd0069ae259b97fb2dbe"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e96f6c14c9752bb82145636b614d5a78e9cde95edfbe0a85dad0dd5ddd6ec95c"}, + {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9e95ad49c932b80abfbfeaf63b155761e695ad9f8a58c52a47d962d76e310f"}, + {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f22dee205329a636148c325921c73cf3e412e87d31f4d9c3153b302a0200057b"}, + {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2ffd9a8895575ac636d44500c66dffaef133823b6b25067604fa73bbc5ec09d"}, + {file = "tokenizers-0.20.1-cp310-none-win32.whl", hash = "sha256:2847843c53f445e0f19ea842a4e48b89dd0db4e62ba6e1e47a2749d6ec11f50d"}, + {file = "tokenizers-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:f9aa93eacd865f2798b9e62f7ce4533cfff4f5fbd50c02926a78e81c74e432cd"}, + {file = "tokenizers-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4a717dcb08f2dabbf27ae4b6b20cbbb2ad7ed78ce05a829fae100ff4b3c7ff15"}, + {file = "tokenizers-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f84dad1ff1863c648d80628b1b55353d16303431283e4efbb6ab1af56a75832"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929c8f3afa16a5130a81ab5079c589226273ec618949cce79b46d96e59a84f61"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d10766473954397e2d370f215ebed1cc46dcf6fd3906a2a116aa1d6219bfedc3"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9300fac73ddc7e4b0330acbdda4efaabf74929a4a61e119a32a181f534a11b47"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ecaf7b0e39caeb1aa6dd6e0975c405716c82c1312b55ac4f716ef563a906969"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5170be9ec942f3d1d317817ced8d749b3e1202670865e4fd465e35d8c259de83"}, + {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f1ae08fa9aea5891cbd69df29913e11d3841798e0bfb1ff78b78e4e7ea0a4"}, + {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ee86d4095d3542d73579e953c2e5e07d9321af2ffea6ecc097d16d538a2dea16"}, + {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:86dcd08da163912e17b27bbaba5efdc71b4fbffb841530fdb74c5707f3c49216"}, + {file = "tokenizers-0.20.1-cp311-none-win32.whl", hash = "sha256:9af2dc4ee97d037bc6b05fa4429ddc87532c706316c5e11ce2f0596dfcfa77af"}, + {file = "tokenizers-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:899152a78b095559c287b4c6d0099469573bb2055347bb8154db106651296f39"}, + {file = "tokenizers-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:407ab666b38e02228fa785e81f7cf79ef929f104bcccf68a64525a54a93ceac9"}, + {file = "tokenizers-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f13a2d16032ebc8bd812eb8099b035ac65887d8f0c207261472803b9633cf3e"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e98eee4dca22849fbb56a80acaa899eec5b72055d79637dd6aa15d5e4b8628c9"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47c1bcdd61e61136087459cb9e0b069ff23b5568b008265e5cbc927eae3387ce"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128c1110e950534426e2274837fc06b118ab5f2fa61c3436e60e0aada0ccfd67"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2e2d47a819d2954f2c1cd0ad51bb58ffac6f53a872d5d82d65d79bf76b9896d"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdd67a0e3503a9a7cf8bc5a4a49cdde5fa5bada09a51e4c7e1c73900297539bd"}, + {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689b93d2e26d04da337ac407acec8b5d081d8d135e3e5066a88edd5bdb5aff89"}, + {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0c6a796ddcd9a19ad13cf146997cd5895a421fe6aec8fd970d69f9117bddb45c"}, + {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3ea919687aa7001a8ff1ba36ac64f165c4e89035f57998fa6cedcfd877be619d"}, + {file = "tokenizers-0.20.1-cp312-none-win32.whl", hash = "sha256:6d3ac5c1f48358ffe20086bf065e843c0d0a9fce0d7f0f45d5f2f9fba3609ca5"}, + {file = "tokenizers-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:b0874481aea54a178f2bccc45aa2d0c99cd3f79143a0948af6a9a21dcc49173b"}, + {file = "tokenizers-0.20.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:96af92e833bd44760fb17f23f402e07a66339c1dcbe17d79a9b55bb0cc4f038e"}, + {file = "tokenizers-0.20.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:65f34e5b731a262dfa562820818533c38ce32a45864437f3d9c82f26c139ca7f"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17f98fccb5c12ab1ce1f471731a9cd86df5d4bd2cf2880c5a66b229802d96145"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8c0fc3542cf9370bf92c932eb71bdeb33d2d4aeeb4126d9fd567b60bd04cb30"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b39356df4575d37f9b187bb623aab5abb7b62c8cb702867a1768002f814800c"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfdad27b0e50544f6b838895a373db6114b85112ba5c0cefadffa78d6daae563"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:094663dd0e85ee2e573126918747bdb40044a848fde388efb5b09d57bc74c680"}, + {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e4cf033a2aa207d7ac790e91adca598b679999710a632c4a494aab0fc3a1b2"}, + {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9310951c92c9fb91660de0c19a923c432f110dbfad1a2d429fbc44fa956bf64f"}, + {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05e41e302c315bd2ed86c02e917bf03a6cf7d2f652c9cee1a0eb0d0f1ca0d32c"}, + {file = "tokenizers-0.20.1-cp37-none-win32.whl", hash = "sha256:212231ab7dfcdc879baf4892ca87c726259fa7c887e1688e3f3cead384d8c305"}, + {file = "tokenizers-0.20.1-cp37-none-win_amd64.whl", hash = "sha256:896195eb9dfdc85c8c052e29947169c1fcbe75a254c4b5792cdbd451587bce85"}, + {file = "tokenizers-0.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:741fb22788482d09d68e73ece1495cfc6d9b29a06c37b3df90564a9cfa688e6d"}, + {file = "tokenizers-0.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10be14ebd8082086a342d969e17fc2d6edc856c59dbdbddd25f158fa40eaf043"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:514cf279b22fa1ae0bc08e143458c74ad3b56cd078b319464959685a35c53d5e"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a647c5b7cb896d6430cf3e01b4e9a2d77f719c84cefcef825d404830c2071da2"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cdf379219e1e1dd432091058dab325a2e6235ebb23e0aec8d0508567c90cd01"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ba72260449e16c4c2f6f3252823b059fbf2d31b32617e582003f2b18b415c39"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910b96ed87316e4277b23c7bcaf667ce849c7cc379a453fa179e7e09290eeb25"}, + {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53975a6694428a0586534cc1354b2408d4e010a3103117f617cbb550299797c"}, + {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:07c4b7be58da142b0730cc4e5fd66bb7bf6f57f4986ddda73833cd39efef8a01"}, + {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b605c540753e62199bf15cf69c333e934077ef2350262af2ccada46026f83d1c"}, + {file = "tokenizers-0.20.1-cp38-none-win32.whl", hash = "sha256:88b3bc76ab4db1ab95ead623d49c95205411e26302cf9f74203e762ac7e85685"}, + {file = "tokenizers-0.20.1-cp38-none-win_amd64.whl", hash = "sha256:d412a74cf5b3f68a90c615611a5aa4478bb303d1c65961d22db45001df68afcb"}, + {file = "tokenizers-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a25dcb2f41a0a6aac31999e6c96a75e9152fa0127af8ece46c2f784f23b8197a"}, + {file = "tokenizers-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a12c3cebb8c92e9c35a23ab10d3852aee522f385c28d0b4fe48c0b7527d59762"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e18da58cf115b7c40de973609c35bde95856012ba42a41ee919c77935af251"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f326a1ac51ae909b9760e34671c26cd0dfe15662f447302a9d5bb2d872bab8ab"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b4872647ea6f25224e2833b044b0b19084e39400e8ead3cfe751238b0802140"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce6238a3311bb8e4c15b12600927d35c267b92a52c881ef5717a900ca14793f7"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57b7a8880b208866508b06ce365dc631e7a2472a3faa24daa430d046fb56c885"}, + {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a908c69c2897a68f412aa05ba38bfa87a02980df70f5a72fa8490479308b1f2d"}, + {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:da1001aa46f4490099c82e2facc4fbc06a6a32bf7de3918ba798010954b775e0"}, + {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c097390e2f0ed0a5c5d569e6669dd4e9fff7b31c6a5ce6e9c66a61687197de"}, + {file = "tokenizers-0.20.1-cp39-none-win32.whl", hash = "sha256:3d4d218573a3d8b121a1f8c801029d70444ffb6d8f129d4cca1c7b672ee4a24c"}, + {file = "tokenizers-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:37d1e6f616c84fceefa7c6484a01df05caf1e207669121c66213cb5b2911d653"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48689da7a395df41114f516208d6550e3e905e1239cc5ad386686d9358e9cef0"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:712f90ea33f9bd2586b4a90d697c26d56d0a22fd3c91104c5858c4b5b6489a79"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:359eceb6a620c965988fc559cebc0a98db26713758ec4df43fb76d41486a8ed5"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d3caf244ce89d24c87545aafc3448be15870096e796c703a0d68547187192e1"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b03cf8b9a32254b1bf8a305fb95c6daf1baae0c1f93b27f2b08c9759f41dee"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:218e5a3561561ea0f0ef1559c6d95b825308dbec23fb55b70b92589e7ff2e1e8"}, + {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f40df5e0294a95131cc5f0e0eb91fe86d88837abfbee46b9b3610b09860195a7"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:08aaa0d72bb65058e8c4b0455f61b840b156c557e2aca57627056624c3a93976"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:998700177b45f70afeb206ad22c08d9e5f3a80639dae1032bf41e8cbc4dada4b"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62f7fbd3c2c38b179556d879edae442b45f68312019c3a6013e56c3947a4e648"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31e87fca4f6bbf5cc67481b562147fe932f73d5602734de7dd18a8f2eee9c6dd"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:956f21d359ae29dd51ca5726d2c9a44ffafa041c623f5aa33749da87cfa809b9"}, + {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1fbbaf17a393c78d8aedb6a334097c91cb4119a9ced4764ab8cfdc8d254dc9f9"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ebe63e31f9c1a970c53866d814e35ec2ec26fda03097c486f82f3891cee60830"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:81970b80b8ac126910295f8aab2d7ef962009ea39e0d86d304769493f69aaa1e"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130e35e76f9337ed6c31be386e75d4925ea807055acf18ca1a9b0eec03d8fe23"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd28a8614f5c82a54ab2463554e84ad79526c5184cf4573bbac2efbbbcead457"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9041ee665d0fa7f5c4ccf0f81f5e6b7087f797f85b143c094126fc2611fec9d0"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:62eb9daea2a2c06bcd8113a5824af8ef8ee7405d3a71123ba4d52c79bb3d9f1a"}, + {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f861889707b54a9ab1204030b65fd6c22bdd4a95205deec7994dc22a8baa2ea4"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:89d5c337d74ea6e5e7dc8af124cf177be843bbb9ca6e58c01f75ea103c12c8a9"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0b7f515c83397e73292accdbbbedc62264e070bae9682f06061e2ddce67cacaf"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0305fc1ec6b1e5052d30d9c1d5c807081a7bd0cae46a33d03117082e91908c"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc611e6ac0fa00a41de19c3bf6391a05ea201d2d22b757d63f5491ec0e67faa"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5ffe0d7f7bfcfa3b2585776ecf11da2e01c317027c8573c78ebcb8985279e23"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e7edb8ec12c100d5458d15b1e47c0eb30ad606a05641f19af7563bc3d1608c14"}, + {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:de291633fb9303555793cc544d4a86e858da529b7d0b752bcaf721ae1d74b2c9"}, + {file = "tokenizers-0.20.1.tar.gz", hash = "sha256:84edcc7cdeeee45ceedb65d518fffb77aec69311c9c8e30f77ad84da3025f002"}, +] + +[package.dependencies] +huggingface-hub = ">=0.16.4,<1.0" + +[package.extras] +dev = ["tokenizers[testing]"] +docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] +testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] + [[package]] name = "toml" version = "0.10.2" @@ -2862,6 +5291,34 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "typer" +version = "0.12.5" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.7" +files = [ + {file = "typer-0.12.5-py3-none-any.whl", hash = "sha256:62fe4e471711b147e3365034133904df3e235698399bc4de2b36c8579298d52b"}, + {file = "typer-0.12.5.tar.gz", hash = "sha256:f592f089bedcc8ec1b974125d64851029c3b1af145f04aca64d69410f0c9b722"}, +] + +[package.dependencies] +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20241003" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.9.0.20241003.tar.gz", hash = "sha256:58cb85449b2a56d6684e41aeefb4c4280631246a0da1a719bdbe6f3fb0317446"}, + {file = "types_python_dateutil-2.9.0.20241003-py3-none-any.whl", hash = "sha256:250e1d8e80e7bbc3a6c99b907762711d1a1cdd00e978ad39cb5940f6f0a87f3d"}, +] + [[package]] name = "typing-extensions" version = "4.12.2" @@ -2888,6 +5345,36 @@ files = [ mypy-extensions = ">=0.3.0" typing-extensions = ">=3.7.4" +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "1.26.20" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, + {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + [[package]] name = "urllib3" version = "2.2.3" @@ -2918,12 +5405,86 @@ files = [ [package.dependencies] click = ">=7.0" +colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} h11 = ">=0.8" +httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} +python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} +websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} [package.extras] standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] +[[package]] +name = "uvloop" +version = "0.20.0" +description = "Fast implementation of asyncio event loop on top of libuv" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "uvloop-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9ebafa0b96c62881d5cafa02d9da2e44c23f9f0cd829f3a32a6aff771449c996"}, + {file = "uvloop-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:35968fc697b0527a06e134999eef859b4034b37aebca537daeb598b9d45a137b"}, + {file = "uvloop-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b16696f10e59d7580979b420eedf6650010a4a9c3bd8113f24a103dfdb770b10"}, + {file = "uvloop-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b04d96188d365151d1af41fa2d23257b674e7ead68cfd61c725a422764062ae"}, + {file = "uvloop-0.20.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94707205efbe809dfa3a0d09c08bef1352f5d3d6612a506f10a319933757c006"}, + {file = "uvloop-0.20.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:89e8d33bb88d7263f74dc57d69f0063e06b5a5ce50bb9a6b32f5fcbe655f9e73"}, + {file = "uvloop-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e50289c101495e0d1bb0bfcb4a60adde56e32f4449a67216a1ab2750aa84f037"}, + {file = "uvloop-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e237f9c1e8a00e7d9ddaa288e535dc337a39bcbf679f290aee9d26df9e72bce9"}, + {file = "uvloop-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:746242cd703dc2b37f9d8b9f173749c15e9a918ddb021575a0205ec29a38d31e"}, + {file = "uvloop-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82edbfd3df39fb3d108fc079ebc461330f7c2e33dbd002d146bf7c445ba6e756"}, + {file = "uvloop-0.20.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80dc1b139516be2077b3e57ce1cb65bfed09149e1d175e0478e7a987863b68f0"}, + {file = "uvloop-0.20.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f44af67bf39af25db4c1ac27e82e9665717f9c26af2369c404be865c8818dcf"}, + {file = "uvloop-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4b75f2950ddb6feed85336412b9a0c310a2edbcf4cf931aa5cfe29034829676d"}, + {file = "uvloop-0.20.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:77fbc69c287596880ecec2d4c7a62346bef08b6209749bf6ce8c22bbaca0239e"}, + {file = "uvloop-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6462c95f48e2d8d4c993a2950cd3d31ab061864d1c226bbf0ee2f1a8f36674b9"}, + {file = "uvloop-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649c33034979273fa71aa25d0fe120ad1777c551d8c4cd2c0c9851d88fcb13ab"}, + {file = "uvloop-0.20.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a609780e942d43a275a617c0839d85f95c334bad29c4c0918252085113285b5"}, + {file = "uvloop-0.20.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aea15c78e0d9ad6555ed201344ae36db5c63d428818b4b2a42842b3870127c00"}, + {file = "uvloop-0.20.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0e94b221295b5e69de57a1bd4aeb0b3a29f61be6e1b478bb8a69a73377db7ba"}, + {file = "uvloop-0.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fee6044b64c965c425b65a4e17719953b96e065c5b7e09b599ff332bb2744bdf"}, + {file = "uvloop-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:265a99a2ff41a0fd56c19c3838b29bf54d1d177964c300dad388b27e84fd7847"}, + {file = "uvloop-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10c2956efcecb981bf9cfb8184d27d5d64b9033f917115a960b83f11bfa0d6b"}, + {file = "uvloop-0.20.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e7d61fe8e8d9335fac1bf8d5d82820b4808dd7a43020c149b63a1ada953d48a6"}, + {file = "uvloop-0.20.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2beee18efd33fa6fdb0976e18475a4042cd31c7433c866e8a09ab604c7c22ff2"}, + {file = "uvloop-0.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8c36fdf3e02cec92aed2d44f63565ad1522a499c654f07935c8f9d04db69e95"}, + {file = "uvloop-0.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0fac7be202596c7126146660725157d4813aa29a4cc990fe51346f75ff8fde7"}, + {file = "uvloop-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d0fba61846f294bce41eb44d60d58136090ea2b5b99efd21cbdf4e21927c56a"}, + {file = "uvloop-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95720bae002ac357202e0d866128eb1ac82545bcf0b549b9abe91b5178d9b541"}, + {file = "uvloop-0.20.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:36c530d8fa03bfa7085af54a48f2ca16ab74df3ec7108a46ba82fd8b411a2315"}, + {file = "uvloop-0.20.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e97152983442b499d7a71e44f29baa75b3b02e65d9c44ba53b10338e98dedb66"}, + {file = "uvloop-0.20.0.tar.gz", hash = "sha256:4603ca714a754fc8d9b197e325db25b2ea045385e8a3ad05d3463de725fdf469"}, +] + +[package.extras] +docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] +test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] + +[[package]] +name = "vcrpy" +version = "6.0.2" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "vcrpy-6.0.2-py2.py3-none-any.whl", hash = "sha256:40370223861181bc76a5e5d4b743a95058bb1ad516c3c08570316ab592f56cad"}, + {file = "vcrpy-6.0.2.tar.gz", hash = "sha256:88e13d9111846745898411dbc74a75ce85870af96dd320d75f1ee33158addc09"}, +] + +[package.dependencies] +PyYAML = "*" +urllib3 = [ + {version = "*", markers = "platform_python_implementation != \"PyPy\" and python_version >= \"3.10\""}, + {version = "<2", markers = "platform_python_implementation == \"PyPy\" or python_version < \"3.10\""}, +] +wrapt = "*" +yarl = "*" + +[package.extras] +tests = ["Werkzeug (==2.0.3)", "aiohttp", "boto3", "httplib2", "httpx", "pytest", "pytest-aiohttp", "pytest-asyncio", "pytest-cov", "pytest-httpbin", "requests (>=2.22.0)", "tornado", "urllib3"] + [[package]] name = "watchfiles" version = "0.24.0" @@ -3030,6 +5591,48 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "webcolors" +version = "24.8.0" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.8" +files = [ + {file = "webcolors-24.8.0-py3-none-any.whl", hash = "sha256:fc4c3b59358ada164552084a8ebee637c221e4059267d0f8325b3b560f6c7f0a"}, + {file = "webcolors-24.8.0.tar.gz", hash = "sha256:08b07af286a01bcd30d583a7acadf629583d1f79bfef27dd2c2c5c263817277d"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["coverage[toml]"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "websockets" version = "13.1" @@ -3125,6 +5728,96 @@ files = [ {file = "websockets-13.1.tar.gz", hash = "sha256:a3b3366087c1bc0a2795111edcadddb8b3b59509d5db5d7ea3fdd69f954a8878"}, ] +[[package]] +name = "widgetsnbextension" +version = "4.0.13" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = false +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, + {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, +] + +[[package]] +name = "wrapt" +version = "1.16.0" +description = "Module for decorators, wrappers and monkey patching." +optional = false +python-versions = ">=3.6" +files = [ + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +] + [[package]] name = "yarl" version = "1.12.1" @@ -3252,4 +5945,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "4017dc40f5e58304aff484656ff103fc1fa0072af0c915f2aa2e598be3c7e983" +content-hash = "18d3fafdb2b5509b9f476aa2ed52de9aeac9ef1990ab7e85c91240c1caec0d9f" diff --git a/pyproject.toml b/pyproject.toml index 1afa0437c5010..e63de41890dee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,16 @@ numpy = [ ] [tool.poetry.group.test.dependencies] +langchain-experimental = { git = "https://github.com/langchain-ai/langchain-experimental.git", subdirectory = "libs/experimental" } +langchain-anthropic = { path = "libs/partners/anthropic", develop = true } +langchain-chroma = { path = "libs/partners/chroma", develop = true } +langchain-mistralai = { path = "libs/partners/mistralai", develop = true } +langgraph = { git = "https://github.com/langchain-ai/langgraph.git", subdirectory = "libs/langgraph" } +jupyter = "^1.1.1" +click = "^8.1.7" +faiss-cpu = "^1.7.4" +pypdf = "^5.0.0" +vcrpy = "^6.0.1" [tool.poetry.group.test_integration.dependencies] From a38e9033605ddada70f03b321f94c8e01202bc27 Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Wed, 16 Oct 2024 11:27:07 -0700 Subject: [PATCH 13/84] docs: platforms -> providers (#27285) --- README.md | 2 +- docs/Makefile | 2 +- docs/api_reference/guide_imports.json | 2 +- .../how_to/convert_runnable_to_tool.ipynb | 2 +- docs/docs/how_to/installation.mdx | 2 +- .../{platforms => providers}/anthropic.mdx | 0 .../{platforms => providers}/aws.mdx | 0 .../docs/integrations/providers/databricks.md | 2 +- .../{platforms => providers}/google.mdx | 0 .../{platforms => providers}/huggingface.mdx | 0 .../{platforms => providers}/microsoft.mdx | 0 .../{platforms => providers}/openai.mdx | 0 .../google_vertex_ai_palm.ipynb | 2 +- docs/docs/introduction.mdx | 2 +- docs/docs/versions/v0_2/overview.mdx | 2 +- docs/scripts/partner_pkg_table.py | 18 ++++----- docs/sidebars.js | 31 +++++++++++--- docs/src/theme/NotFound/Content/index.js | 40 +++++++++---------- docs/vercel.json | 4 ++ 19 files changed, 68 insertions(+), 43 deletions(-) rename docs/docs/integrations/{platforms => providers}/anthropic.mdx (100%) rename docs/docs/integrations/{platforms => providers}/aws.mdx (100%) rename docs/docs/integrations/{platforms => providers}/google.mdx (100%) rename docs/docs/integrations/{platforms => providers}/huggingface.mdx (100%) rename docs/docs/integrations/{platforms => providers}/microsoft.mdx (100%) rename docs/docs/integrations/{platforms => providers}/openai.mdx (100%) diff --git a/README.md b/README.md index 4b724e9b5ecef..5f85d427e23d2 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ conda install langchain -c conda-forge For these applications, LangChain simplifies the entire application lifecycle: -- **Open-source libraries**: Build your applications using LangChain's open-source [building blocks](https://python.langchain.com/docs/concepts/#langchain-expression-language-lcel), [components](https://python.langchain.com/docs/concepts/), and [third-party integrations](https://python.langchain.com/docs/integrations/platforms/). +- **Open-source libraries**: Build your applications using LangChain's open-source [building blocks](https://python.langchain.com/docs/concepts/#langchain-expression-language-lcel), [components](https://python.langchain.com/docs/concepts/), and [third-party integrations](https://python.langchain.com/docs/integrations/providers/). Use [LangGraph](https://langchain-ai.github.io/langgraph/) to build stateful agents with first-class streaming and human-in-the-loop support. - **Productionization**: Inspect, monitor, and evaluate your apps with [LangSmith](https://docs.smith.langchain.com/) so that you can constantly optimize and deploy with confidence. - **Deployment**: Turn your LangGraph applications into production-ready APIs and Assistants with [LangGraph Cloud](https://langchain-ai.github.io/langgraph/cloud/). diff --git a/docs/Makefile b/docs/Makefile index 532df0c457923..fabed9f041ac5 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -18,7 +18,7 @@ for dir; do \ if find "$$dir" -maxdepth 1 -type f \( -name "pyproject.toml" -o -name "setup.py" \) | grep -q .; then \ echo "$$dir"; \ fi \ -done' sh {} + | grep -vE "airbyte|ibm|couchbase|databricks" | tr '\n' ' ') +done' sh {} + | grep -vE "airbyte|ibm|databricks" | tr '\n' ' ') PORT ?= 3001 diff --git a/docs/api_reference/guide_imports.json b/docs/api_reference/guide_imports.json index e0fcde404bfb4..4f372db195a11 100644 --- a/docs/api_reference/guide_imports.json +++ b/docs/api_reference/guide_imports.json @@ -1 +1 @@ -{"ChatPromptTemplate": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/conversation_retrieval_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/docs/how_to/custom_callbacks/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "How to chain runnables": "https://python.langchain.com/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "How to summarize text in a single LLM call": "https://python.langchain.com/docs/how_to/summarize_stuff/", "How to use multimodal prompts": "https://python.langchain.com/docs/how_to/multimodal_prompts/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Google Vertex AI Search": "https://python.langchain.com/docs/integrations/retrievers/google_vertex_ai_search/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/", "ChatFireworks": "https://python.langchain.com/docs/integrations/chat/fireworks/", "ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "ChatAnthropic": "https://python.langchain.com/docs/integrations/chat/anthropic/", "ChatGroq": "https://python.langchain.com/docs/integrations/chat/groq/", "ChatGoogleGenerativeAI": "https://python.langchain.com/docs/integrations/chat/google_generative_ai/", "OllamaFunctions": "https://python.langchain.com/docs/integrations/chat/ollama_functions/", "ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/openai/", "ChatVertexAI": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm/", "ChatBedrock": "https://python.langchain.com/docs/integrations/chat/bedrock/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "AzureChatOpenAI": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai/", "Llama.cpp": "https://python.langchain.com/docs/integrations/chat/llamacpp/", "ChatMistralAI": "https://python.langchain.com/docs/integrations/chat/mistralai/", "ChatAI21": "https://python.langchain.com/docs/integrations/chat/ai21/", "ChatDatabricks": "https://python.langchain.com/docs/integrations/chat/databricks/", "ChatTogether": "https://python.langchain.com/docs/integrations/chat/together/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ChatWatsonx": "https://python.langchain.com/docs/integrations/chat/ibm_watsonx/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "ChatPerplexity": "https://python.langchain.com/docs/integrations/chat/perplexity/", "ChatUpstage": "https://python.langchain.com/docs/integrations/chat/upstage/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/", "OllamaLLM": "https://python.langchain.com/docs/integrations/llms/ollama/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Build an Extraction Chain": "https://python.langchain.com/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "ChatAnthropic": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to parse XML output": "https://python.langchain.com/docs/how_to/output_parser_xml/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to handle rate limits": "https://python.langchain.com/docs/how_to/chat_model_rate_limiting/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to stream chat model responses": "https://python.langchain.com/docs/how_to/chat_streaming/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/docs/how_to/custom_callbacks/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "Anthropic": "https://python.langchain.com/docs/integrations/platforms/anthropic/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "ChatAnthropic": "https://python.langchain.com/docs/integrations/chat/anthropic/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "Build an Agent": "https://python.langchain.com/docs/tutorials/agents/"}, "ChatOpenAI": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to disable parallel tool calling": "https://python.langchain.com/docs/how_to/tool_calling_parallel/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to bind model-specific tools": "https://python.langchain.com/docs/how_to/tools_model_specific/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to use LangChain with different Pydantic versions": "https://python.langchain.com/docs/how_to/pydantic_compatibility/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to pass multimodal data directly to models": "https://python.langchain.com/docs/how_to/multimodal_inputs/", "How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/", "How to use the output-fixing parser": "https://python.langchain.com/docs/how_to/output_parser_fixing/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to get log probabilities": "https://python.langchain.com/docs/how_to/logprobs/", "How to parse YAML output": "https://python.langchain.com/docs/how_to/output_parser_yaml/", "Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "How to parse JSON output": "https://python.langchain.com/docs/how_to/output_parser_json/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to stream tool calls": "https://python.langchain.com/docs/how_to/tool_streaming/", "How to use multimodal prompts": "https://python.langchain.com/docs/how_to/multimodal_prompts/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "LangSmith Chat Datasets": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Outline": "https://python.langchain.com/docs/integrations/retrievers/outline/", "SEC filing": "https://python.langchain.com/docs/integrations/retrievers/sec_filings/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Rememberizer": "https://python.langchain.com/docs/integrations/retrievers/rememberizer/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Kay.ai": "https://python.langchain.com/docs/integrations/retrievers/kay/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/tencentvectordb/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/", "ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/", "PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/", "E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/docs/integrations/tools/azure_dynamic_sessions/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Slack Toolkit": "https://python.langchain.com/docs/integrations/tools/slack/", "Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/", "Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/", "Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/", "Requests Toolkit": "https://python.langchain.com/docs/integrations/tools/requests/", "AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/", "Cogniswitch Toolkit": "https://python.langchain.com/docs/integrations/tools/cogniswitch/", "Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/", "ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/", "OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/", "Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Remembrall": "https://python.langchain.com/docs/integrations/memory/remembrall/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/openai/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/", "Browserbase": "https://python.langchain.com/docs/integrations/document_loaders/browserbase/", "Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/", "RDFLib": "https://python.langchain.com/docs/integrations/graphs/rdflib_sparql/", "NebulaGraph": "https://python.langchain.com/docs/integrations/graphs/nebula_graph/", "HugeGraph": "https://python.langchain.com/docs/integrations/graphs/hugegraph/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Ontotext GraphDB": "https://python.langchain.com/docs/integrations/graphs/ontotext/", "Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "ArangoDB": "https://python.langchain.com/docs/integrations/graphs/arangodb/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/", "Kuzu": "https://python.langchain.com/docs/integrations/graphs/kuzu_db/", "FalkorDB": "https://python.langchain.com/docs/integrations/graphs/falkordb/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/docs/tutorials/graph/"}, "SystemMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "Snowflake Cortex": "https://python.langchain.com/docs/integrations/chat/snowflake/", "# Related": "https://python.langchain.com/docs/integrations/chat/solar/", "ChatHuggingFace": "https://python.langchain.com/docs/integrations/chat/huggingface/", "ChatOctoAI": "https://python.langchain.com/docs/integrations/chat/octoai/", "ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "LlamaEdge": "https://python.langchain.com/docs/integrations/chat/llama_edge/", "ChatKonko": "https://python.langchain.com/docs/integrations/chat/konko/", "GigaChat": "https://python.langchain.com/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/", "ChatFriendli": "https://python.langchain.com/docs/integrations/chat/friendli/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "ChatWatsonx": "https://python.langchain.com/docs/integrations/chat/ibm_watsonx/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "MoonshotChat": "https://python.langchain.com/docs/integrations/chat/moonshot/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/docs/integrations/chat/yandex/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/"}, "HumanMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to pass multimodal data directly to models": "https://python.langchain.com/docs/how_to/multimodal_inputs/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to pass tool outputs to chat models": "https://python.langchain.com/docs/how_to/tool_results_pass_to_model/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/", "Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Imagen": "https://python.langchain.com/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Snowflake Cortex": "https://python.langchain.com/docs/integrations/chat/snowflake/", "# Related": "https://python.langchain.com/docs/integrations/chat/solar/", "ChatHuggingFace": "https://python.langchain.com/docs/integrations/chat/huggingface/", "AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/chat/alibaba_cloud_pai_eas/", "Chat with Coze Bot": "https://python.langchain.com/docs/integrations/chat/coze/", "ChatOctoAI": "https://python.langchain.com/docs/integrations/chat/octoai/", "ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "DeepInfra": "https://python.langchain.com/docs/integrations/chat/deepinfra/", "ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/", "LlamaEdge": "https://python.langchain.com/docs/integrations/chat/llama_edge/", "VolcEngineMaasChat": "https://python.langchain.com/docs/integrations/chat/volcengine_maas/", "ChatKonko": "https://python.langchain.com/docs/integrations/chat/konko/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/", "GigaChat": "https://python.langchain.com/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/", "ChatFriendli": "https://python.langchain.com/docs/integrations/chat/friendli/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Chat with Baichuan-192K": "https://python.langchain.com/docs/integrations/chat/baichuan/", "QianfanChatEndpoint": "https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint/", "Cohere": "https://python.langchain.com/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ErnieBotChat": "https://python.langchain.com/docs/integrations/chat/ernie/", "ChatWatsonx": "https://python.langchain.com/docs/integrations/chat/ibm_watsonx/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Tencent Hunyuan": "https://python.langchain.com/docs/integrations/chat/tencent_hunyuan/", "MiniMaxChat": "https://python.langchain.com/docs/integrations/chat/minimax/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "PromptLayerChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai/", "SparkLLM Chat": "https://python.langchain.com/docs/integrations/chat/sparkllm/", "MoonshotChat": "https://python.langchain.com/docs/integrations/chat/moonshot/", "Dappier AI": "https://python.langchain.com/docs/integrations/chat/dappier/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/docs/integrations/chat/yandex/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Browserbase": "https://python.langchain.com/docs/integrations/document_loaders/browserbase/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/", "Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build an Agent": "https://python.langchain.com/docs/tutorials/agents/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/"}, "RunnableMap": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/"}, "RunnableLambda": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "PromptTemplate": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to select examples by n-gram overlap": "https://python.langchain.com/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to parse XML output": "https://python.langchain.com/docs/how_to/output_parser_xml/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to parse YAML output": "https://python.langchain.com/docs/how_to/output_parser_yaml/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to partially format prompt templates": "https://python.langchain.com/docs/how_to/prompts_partial/", "How to parse JSON output": "https://python.langchain.com/docs/how_to/output_parser_json/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "How to track token usage for LLMs": "https://python.langchain.com/docs/how_to/llm_token_usage_tracking/", "Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard/", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "AirbyteLoader": "https://python.langchain.com/docs/integrations/document_loaders/airbyte/", "Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/", "Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/", "Fireworks": "https://python.langchain.com/docs/integrations/llms/fireworks/", "OctoAI": "https://python.langchain.com/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra/", "AnthropicLLM": "https://python.langchain.com/docs/integrations/llms/anthropic/", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud/", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all/", "ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml/", "Volc Engine Maas": "https://python.langchain.com/docs/integrations/llms/volcengine_maas/", "CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai/", "OpenAI": "https://python.langchain.com/docs/integrations/llms/openai/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/docs/integrations/llms/gigachat/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/docs/integrations/llms/oci_generative_ai/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/", "Hugging Face Local Pipelines": "https://python.langchain.com/docs/integrations/llms/huggingface_pipelines/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/", "Aphrodite Engine": "https://python.langchain.com/docs/integrations/llms/aphrodite/", "AI21LLM": "https://python.langchain.com/docs/integrations/llms/ai21/", "Cohere": "https://python.langchain.com/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "IBM watsonx.ai": "https://python.langchain.com/docs/integrations/llms/ibm_watsonx/", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/", "ExLlamaV2": "https://python.langchain.com/docs/integrations/llms/exllamav2/", "Minimax": "https://python.langchain.com/docs/integrations/llms/minimax/", "Tongyi Qwen": "https://python.langchain.com/docs/integrations/llms/tongyi/", "Huggingface Endpoints": "https://python.langchain.com/docs/integrations/llms/huggingface_endpoint/", "MLX Local Pipelines": "https://python.langchain.com/docs/integrations/llms/mlx_pipelines/", "Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm/", "Aleph Alpha": "https://python.langchain.com/docs/integrations/llms/aleph_alpha/", "Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/docs/integrations/llms/ctranslate2/", "Google AI": "https://python.langchain.com/docs/integrations/llms/google_ai/", "PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai/", "ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/docs/integrations/llms/petals/", "OpenVINO": "https://python.langchain.com/docs/integrations/llms/openvino/", "Intel Weight-Only Quantization": "https://python.langchain.com/docs/integrations/llms/weight_only_quantization/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "MessagesPlaceholder": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Build an Extraction Chain": "https://python.langchain.com/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "CSVLoader": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to load CSVs": "https://python.langchain.com/docs/how_to/document_loader_csv/", "ChatGPT plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin/", "Aerospike": "https://python.langchain.com/docs/integrations/vectorstores/aerospike/", "CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv/", "Document loaders": "https://python.langchain.com/docs/integrations/document_loaders/index/", "Pebblo Safe DocumentLoader": "https://python.langchain.com/docs/integrations/document_loaders/pebblo/"}, "StrOutputParser": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/refine_docs_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to chain runnables": "https://python.langchain.com/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Google Vertex AI Search": "https://python.langchain.com/docs/integrations/retrievers/google_vertex_ai_search/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "Volc Engine Maas": "https://python.langchain.com/docs/integrations/llms/volcengine_maas/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "AI21LLM": "https://python.langchain.com/docs/integrations/llms/ai21/", "PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/"}, "SimpleJsonOutputParser": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/"}, "BaseChatModel": {"Contribute Integrations": "https://python.langchain.com/docs/contributing/integrations/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "deprecated": {"Contribute Integrations": "https://python.langchain.com/docs/contributing/integrations/"}, "UnstructuredMarkdownLoader": {"langchain": "https://python.langchain.com/docs/changes/changelog/langchain/", "How to load Markdown": "https://python.langchain.com/docs/how_to/document_loader_markdown/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "UnstructuredMarkdownLoader": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_markdown/"}, "Document": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to create a custom Retriever": "https://python.langchain.com/docs/how_to/custom_retriever/", "How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to load Markdown": "https://python.langchain.com/docs/how_to/document_loader_markdown/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "How to summarize text in a single LLM call": "https://python.langchain.com/docs/how_to/summarize_stuff/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/oracleai/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "ChatGPT plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin/", "Cohere RAG": "https://python.langchain.com/docs/integrations/retrievers/cohere/", "Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid/", "BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25/", "Qdrant Sparse Vector": "https://python.langchain.com/docs/integrations/retrievers/qdrant-sparse/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf/", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch/", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant/", "Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/docs/integrations/tools/oracleai/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/docs/integrations/vectorstores/couchbase/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "Google Firestore (Native Mode)": "https://python.langchain.com/docs/integrations/document_loaders/google_firestore/", "ClickHouse": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse/", "Astra DB Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/astradb/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/docs/integrations/vectorstores/faiss/", "Nuclia": "https://python.langchain.com/docs/integrations/document_transformers/nuclia_transformer/", "AI21SemanticTextSplitter": "https://python.langchain.com/docs/integrations/document_transformers/ai21_semantic_text_splitter/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/", "Doctran: extract properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties/", "Google Translate": "https://python.langchain.com/docs/integrations/document_transformers/google_translate/", "Doctran: interrogate documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document/", "Doctran: language translation": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document/", "TensorFlow Datasets": "https://python.langchain.com/docs/integrations/document_loaders/tensorflow_datasets/", "Google Cloud SQL for MySQL": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_sql_mysql/", "Airbyte Salesforce (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_salesforce/", "Airbyte CDK (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_cdk/", "Airbyte Stripe (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_stripe/", "Copy Paste": "https://python.langchain.com/docs/integrations/document_loaders/copypaste/", "Airbyte Typeform (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_typeform/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Google Firestore in Datastore Mode": "https://python.langchain.com/docs/integrations/document_loaders/google_datastore/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/docs/integrations/document_loaders/oracleai/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Airbyte Hubspot (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_hubspot/", "Airbyte Gong (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_gong/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/document_loaders/google_memorystore_redis/", "Google Bigtable": "https://python.langchain.com/docs/integrations/document_loaders/google_bigtable/", "Google Cloud SQL for SQL server": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_sql_mssql/", "Google El Carro for Oracle Workloads": "https://python.langchain.com/docs/integrations/document_loaders/google_el_carro/", "Airbyte Shopify (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_shopify/", "Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_zendesk_support/", "Google Spanner": "https://python.langchain.com/docs/integrations/document_loaders/google_spanner/", "PDFMiner": "https://python.langchain.com/docs/integrations/document_loaders/pdfminer/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "LLMChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm/", "OctoAI": "https://python.langchain.com/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra/", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud/", "ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml/", "CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai/", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/docs/integrations/llms/gigachat/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Aphrodite Engine": "https://python.langchain.com/docs/integrations/llms/aphrodite/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/", "Minimax": "https://python.langchain.com/docs/integrations/llms/minimax/", "Yuan2.0": "https://python.langchain.com/docs/integrations/llms/yuan2/", "Huggingface Endpoints": "https://python.langchain.com/docs/integrations/llms/huggingface_endpoint/", "Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm/", "Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/docs/integrations/llms/ctranslate2/", "ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/docs/integrations/llms/petals/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "StuffDocumentsChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/stuff_docs_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"}, "create_stuff_documents_chain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/stuff_docs_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to summarize text in a single LLM call": "https://python.langchain.com/docs/how_to/summarize_stuff/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "LLMMathChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_math_chain/"}, "BaseMessage": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_math_chain/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/", "Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/"}, "RunnableConfig": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/multi_prompt_chain/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/refine_docs_chain/", "How to access the RunnableConfig from a tool": "https://python.langchain.com/docs/how_to/tool_configure/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "How to pass runtime secrets to runnables": "https://python.langchain.com/docs/how_to/runnable_runtime_secrets/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/"}, "tool": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_math_chain/", "How to disable parallel tool calling": "https://python.langchain.com/docs/how_to/tool_calling_parallel/", "How to use tools in a chain": "https://python.langchain.com/docs/how_to/tools_chain/", "How to access the RunnableConfig from a tool": "https://python.langchain.com/docs/how_to/tool_configure/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to pass multimodal data directly to models": "https://python.langchain.com/docs/how_to/multimodal_inputs/", "How to force models to call a tool": "https://python.langchain.com/docs/how_to/tool_choice/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to pass tool outputs to chat models": "https://python.langchain.com/docs/how_to/tool_results_pass_to_model/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "How to return artifacts from a tool": "https://python.langchain.com/docs/how_to/tool_artifacts/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to stream tool calls": "https://python.langchain.com/docs/how_to/tool_streaming/", "How to pass runtime secrets to runnables": "https://python.langchain.com/docs/how_to/runnable_runtime_secrets/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "DeepInfra": "https://python.langchain.com/docs/integrations/chat/deepinfra/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "Llama.cpp": "https://python.langchain.com/docs/integrations/chat/llamacpp/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/", "JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental/"}, "MultiPromptChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/multi_prompt_chain/"}, "ConversationChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/"}, "ConversationBufferMemory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Gradio": "https://python.langchain.com/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "InMemoryChatMessageHistory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/"}, "RunnableWithMessageHistory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "BaseChatMessageHistory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "ConstitutionalChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "ConstitutionalPrinciple": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "OpenAI": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to stream responses from an LLM": "https://python.langchain.com/docs/how_to/streaming_llm/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "How to track token usage for LLMs": "https://python.langchain.com/docs/how_to/llm_token_usage_tracking/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/retrievers/self_query/chroma_self_query/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "OpenAI": "https://python.langchain.com/docs/integrations/llms/openai/", "Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/", "Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/", "JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/tools/openweathermap/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "Lemon Agent": "https://python.langchain.com/docs/integrations/tools/lemonai/", "NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/", "OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "LangChain Decorators \u2728": "https://python.langchain.com/docs/integrations/providers/langchain_decorators/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Helicone": "https://python.langchain.com/docs/integrations/providers/helicone/", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol/", "WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Amazon Textract ": "https://python.langchain.com/docs/integrations/document_loaders/amazon_textract/", "NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Layerup Security": "https://python.langchain.com/docs/integrations/llms/layerup_security/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "CRITIQUE_PROMPT": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "REVISION_PROMPT": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "WebBaseLoader": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Zep Cloud": "https://python.langchain.com/docs/integrations/vectorstores/zep_cloud/", "Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Merge Documents Loader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc/", "WebBaseLoader": "https://python.langchain.com/docs/integrations/document_loaders/web_base/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "FAISS": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "Faiss": "https://python.langchain.com/docs/integrations/vectorstores/faiss/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "OpenAIEmbeddings": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "Text embedding models": "https://python.langchain.com/docs/how_to/embed_text/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/", "How to split text based on semantic similarity": "https://python.langchain.com/docs/how_to/semantic-chunker/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "OpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/openai/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/", "kNN": "https://python.langchain.com/docs/integrations/retrievers/knn/", "DocArray": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever/", "SVM": "https://python.langchain.com/docs/integrations/retrievers/svm/", "Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/retrievers/self_query/chroma_self_query/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "RecursiveCharacterTextSplitter": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to split code": "https://python.langchain.com/docs/how_to/code_splitter/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to recursively split text by characters": "https://python.langchain.com/docs/how_to/recursive_text_splitter/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How to split Markdown by Headers": "https://python.langchain.com/docs/how_to/markdown_header_metadata_splitter/", "How to split by HTML header ": "https://python.langchain.com/docs/how_to/HTML_header_metadata_splitter/", "How to split by HTML sections": "https://python.langchain.com/docs/how_to/HTML_section_aware_splitter/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Google Vertex AI Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/", "Zep Cloud": "https://python.langchain.com/docs/integrations/vectorstores/zep_cloud/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/", "Vearch": "https://python.langchain.com/docs/integrations/vectorstores/vearch/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "ConversationalRetrievalChain": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/conversation_retrieval_chain/", "Outline": "https://python.langchain.com/docs/integrations/retrievers/outline/", "SEC filing": "https://python.langchain.com/docs/integrations/retrievers/sec_filings/", "Rememberizer": "https://python.langchain.com/docs/integrations/retrievers/rememberizer/", "Kay.ai": "https://python.langchain.com/docs/integrations/retrievers/kay/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/"}, "create_history_aware_retriever": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/conversation_retrieval_chain/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "create_retrieval_chain": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "MapReduceDocumentsChain": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"}, "ReduceDocumentsChain": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"}, "CharacterTextSplitter": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to split by character": "https://python.langchain.com/docs/how_to/character_text_splitter/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/retrievers/singlestoredb/", "OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/docs/integrations/vectorstores/tiledb/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/vectorstores/google_memorystore_redis/", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "acollapse_docs": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "split_list_of_docs": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "RefineDocumentsChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/refine_docs_chain/"}, "RetrievalQA": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Bedrock (Knowledge Bases) Retriever": "https://python.langchain.com/docs/integrations/retrievers/bedrock/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/", "Google Vertex AI Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "RunnablePassthrough": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Google Vertex AI Search": "https://python.langchain.com/docs/integrations/retrievers/google_vertex_ai_search/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "LLMRouterChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/"}, "RouterOutputParser": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/"}, "MapRerankDocumentsChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/"}, "RegexParser": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/"}, "TavilySearchResults": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Build an Agent": "https://python.langchain.com/docs/tutorials/agents/"}, "create_retriever_tool": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "create_tool_calling_agent": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to use tools in a chain": "https://python.langchain.com/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/docs/integrations/tools/azure_dynamic_sessions/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/"}, "AgentExecutor": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to use tools in a chain": "https://python.langchain.com/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/docs/integrations/tools/azure_dynamic_sessions/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/", "Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/", "Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "AIMessage": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Twitter (via Apify)": "https://python.langchain.com/docs/integrations/chat_loaders/twitter/", "Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "Google Imagen": "https://python.langchain.com/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/", "Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "ChatMessageHistory": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "Neo4jGraph": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/docs/tutorials/graph/"}, "AsyncCallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "CallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "BaseTool": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to use LangChain with different Pydantic versions": "https://python.langchain.com/docs/how_to/pydantic_compatibility/", "How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to return artifacts from a tool": "https://python.langchain.com/docs/how_to/tool_artifacts/"}, "format_to_openai_function_messages": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/"}, "OpenAIFunctionsAgentOutputParser": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/"}, "convert_to_openai_function": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/"}, "BSHTMLLoader": {"How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to load HTML": "https://python.langchain.com/docs/how_to/document_loader_html/", "BSHTMLLoader": "https://python.langchain.com/docs/integrations/document_loaders/bshtml/"}, "TokenTextSplitter": {"How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "PyPDFLoader": {"How to load PDFs": "https://python.langchain.com/docs/how_to/document_loader_pdf/", "Google Vertex AI Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "PyPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/pypdfloader/", "Merge Documents Loader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc/", "Google Cloud Storage File": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_file/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "SQLDatabase": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "SQLDatabase Toolkit": "https://python.langchain.com/docs/integrations/tools/sql_database/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "create_sql_query_chain": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "FewShotPromptTemplate": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to select examples by n-gram overlap": "https://python.langchain.com/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "SemanticSimilarityExampleSelector": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/"}, "PydanticOutputParser": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to use the output-fixing parser": "https://python.langchain.com/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "AsyncCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock/"}, "BaseCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to create custom callback handlers": "https://python.langchain.com/docs/how_to/custom_callbacks/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all/"}, "LLMResult": {"How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/"}, "RunnableParallel": {"How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to chain runnables": "https://python.langchain.com/docs/how_to/sequence/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/"}, "RunnableBranch": {"How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/"}, "cosine_similarity": {"How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/"}, "ConfigurableField": {"How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/"}, "NGramOverlapExampleSelector": {"How to select examples by n-gram overlap": "https://python.langchain.com/docs/how_to/example_selectors_ngram/"}, "get_openai_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to track token usage for LLMs": "https://python.langchain.com/docs/how_to/llm_token_usage_tracking/", "AzureChatOpenAI": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai/"}, "load_tools": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "Google": "https://python.langchain.com/docs/integrations/platforms/google/", "ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Golden": "https://python.langchain.com/docs/integrations/providers/golden/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo/", "SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Stack Exchange": "https://python.langchain.com/docs/integrations/providers/stackexchange/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "ChatBedrock": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "ChatBedrock": "https://python.langchain.com/docs/integrations/chat/bedrock/", "Amazon Neptune with SPARQL": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_sparql/"}, "get_bedrock_anthropic_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/"}, "CallbackManagerForLLMRun": {"How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "LLM": {"How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/"}, "GenerationChunk": {"How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/"}, "BaseLoader": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/"}, "BaseBlobParser": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/"}, "Blob": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Cloud Document AI": "https://python.langchain.com/docs/integrations/document_transformers/google_docai/"}, "FileSystemBlobLoader": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/"}, "GenericLoader": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/"}, "LengthBasedExampleSelector": {"How to select examples by length": "https://python.langchain.com/docs/how_to/example_selectors_length_based/"}, "BaseExampleSelector": {"How to use example selectors": "https://python.langchain.com/docs/how_to/example_selectors/"}, "Language": {"How to split code": "https://python.langchain.com/docs/how_to/code_splitter/", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/"}, "Chroma": {"How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "merge_message_runs": {"How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/"}, "PydanticToolsParser": {"How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to use chat models to call tools": "https://python.langchain.com/docs/how_to/tool_calling/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/"}, "chain": {"How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/"}, "trim_messages": {"How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/"}, "ToolMessage": {"How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/"}, "RecursiveJsonSplitter": {"How to split JSON data": "https://python.langchain.com/docs/how_to/recursive_json_splitter/"}, "FewShotChatMessagePromptTemplate": {"How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/"}, "XMLOutputParser": {"How to parse XML output": "https://python.langchain.com/docs/how_to/output_parser_xml/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/"}, "InjectedToolArg": {"How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/"}, "Runnable": {"How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/"}, "StructuredTool": {"How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/"}, "GenericFakeChatModel": {"How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "ToolException": {"How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "AzureAIDocumentIntelligenceLoader": {"How to load Microsoft Office files": "https://python.langchain.com/docs/how_to/document_loader_office_file/", "Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word/", "Microsoft Excel": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_excel/", "Microsoft PowerPoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_powerpoint/", "Azure AI Document Intelligence": "https://python.langchain.com/docs/integrations/document_loaders/azure_document_intelligence/"}, "InMemoryRateLimiter": {"How to handle rate limits": "https://python.langchain.com/docs/how_to/chat_model_rate_limiting/"}, "LongContextReorder": {"How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "DatetimeOutputParser": {"How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/"}, "CypherQueryCorrector": {"How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/"}, "Schema": {"How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/"}, "dumpd": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "dumps": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "load": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "loads": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "set_llm_cache": {"How to cache chat model responses": "https://python.langchain.com/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/providers/mongodb_atlas/", "Astra DB": "https://python.langchain.com/docs/integrations/providers/astradb/", "Couchbase": "https://python.langchain.com/docs/integrations/providers/couchbase/", "Redis": "https://python.langchain.com/docs/integrations/providers/redis/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/", "Momento": "https://python.langchain.com/docs/integrations/providers/momento/"}, "InMemoryCache": {"How to cache chat model responses": "https://python.langchain.com/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "SQLiteCache": {"How to cache chat model responses": "https://python.langchain.com/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/"}, "create_sql_agent": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/"}, "PythonAstREPLTool": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/"}, "JsonOutputKeyToolsParser": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/"}, "create_pandas_dataframe_agent": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/"}, "OutputFixingParser": {"How to use the output-fixing parser": "https://python.langchain.com/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/"}, "FunctionMessage": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "AIMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/"}, "FunctionMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "HumanMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "SystemMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "ToolMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "AsyncCallbackManagerForLLMRun": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "SimpleChatModel": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "ChatGeneration": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "ChatGenerationChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "ChatResult": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "run_in_executor": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "MoveFileTool": {"How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/"}, "filter_messages": {"How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/"}, "ToolCall": {"How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/"}, "SQLRecordManager": {"How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/"}, "index": {"How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/"}, "SemanticChunker": {"How to split text based on semantic similarity": "https://python.langchain.com/docs/how_to/semantic-chunker/"}, "InMemoryVectorStore": {"How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "FireworksEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/fireworks/", "OpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/openai/", "OllamaEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/ollama/", "MistralAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/mistralai/", "AI21Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/ai21/", "TogetherEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/together/", "CohereEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/cohere/", "AzureOpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/azureopenai/", "NomicEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/nomic/", "AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon MemoryDB": "https://python.langchain.com/docs/integrations/vectorstores/memorydb/"}, "JsonOutputParser": {"How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "How to parse JSON output": "https://python.langchain.com/docs/how_to/output_parser_json/"}, "InMemoryByteStore": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "InMemoryByteStore": "https://python.langchain.com/docs/integrations/stores/in_memory/"}, "TextLoader": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to load documents from a directory": "https://python.langchain.com/docs/how_to/document_loader_directory/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/retrievers/singlestoredb/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/docs/integrations/vectorstores/tiledb/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/vectorstores/google_memorystore_redis/", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/", "Vearch": "https://python.langchain.com/docs/integrations/vectorstores/vearch/", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "MultiVectorRetriever": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "SearchType": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "init_chat_model": {"How to init any model in one line": "https://python.langchain.com/docs/how_to/chat_models_universal_init/", "How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "SQLChatMessageHistory": {"How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "SQLite": "https://python.langchain.com/docs/integrations/providers/sqlite/"}, "ConfigurableFieldSpec": {"How to add message history": "https://python.langchain.com/docs/how_to/message_history/"}, "LlamaCpp": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/"}, "CallbackManager": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/", "GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/"}, "StreamingStdOutCallbackHandler": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "DeepInfra": "https://python.langchain.com/docs/integrations/chat/deepinfra/", "ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/", "ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "GPT4All": "https://python.langchain.com/docs/integrations/providers/gpt4all/", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/", "ExLlamaV2": "https://python.langchain.com/docs/integrations/llms/exllamav2/", "Huggingface Endpoints": "https://python.langchain.com/docs/integrations/llms/huggingface_endpoint/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/"}, "GPT4All": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all/"}, "Llamafile": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "Llamafile": "https://python.langchain.com/docs/integrations/llms/llamafile/"}, "ConditionalPromptSelector": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/"}, "HubRunnable": {"How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/"}, "ContextualCompressionRetriever": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "LLMChainExtractor": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "LLMChainFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "LLMListwiseRerank": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "EmbeddingsFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/"}, "DocumentCompressorPipeline": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "EmbeddingsRedundantFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "Comparator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "Comparison": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "Operation": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "Operator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "StructuredQuery": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "ChromaTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/"}, "ElasticsearchTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "WikipediaQueryRun": {"How to use built-in tools and toolkits": "https://python.langchain.com/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia/"}, "WikipediaAPIWrapper": {"How to use built-in tools and toolkits": "https://python.langchain.com/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/"}, "CallbackManagerForRetrieverRun": {"How to create a custom Retriever": "https://python.langchain.com/docs/how_to/custom_retriever/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/"}, "BaseRetriever": {"How to create a custom Retriever": "https://python.langchain.com/docs/how_to/custom_retriever/"}, "LLMGraphTransformer": {"How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/"}, "RetryOutputParser": {"How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/"}, "TimeWeightedVectorStoreRetriever": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/"}, "InMemoryDocstore": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Faiss": "https://python.langchain.com/docs/integrations/vectorstores/faiss/"}, "mock_now": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/"}, "RunnableGenerator": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "OutputParserException": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "BaseOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/"}, "BaseGenerationOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "Generation": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "DirectoryLoader": {"How to load documents from a directory": "https://python.langchain.com/docs/how_to/document_loader_directory/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "PythonLoader": {"How to load documents from a directory": "https://python.langchain.com/docs/how_to/document_loader_directory/"}, "LanceDB": {"How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/"}, "SpacyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "spaCy": "https://python.langchain.com/docs/integrations/providers/spacy/", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas/"}, "SentenceTransformersTokenTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/"}, "NLTKTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/"}, "KonlpyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/"}, "WikipediaRetriever": {"How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "Wikipedia": "https://python.langchain.com/docs/integrations/providers/wikipedia/"}, "UnstructuredHTMLLoader": {"How to load HTML": "https://python.langchain.com/docs/how_to/document_loader_html/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/"}, "MultiQueryRetriever": {"How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "GraphCypherQAChain": {"How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/docs/tutorials/graph/"}, "Neo4jVector": {"How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/docs/integrations/providers/neo4j/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/"}, "ParentDocumentRetriever": {"How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/"}, "InMemoryStore": {"How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "YamlOutputParser": {"How to parse YAML output": "https://python.langchain.com/docs/how_to/output_parser_yaml/"}, "PipelinePromptTemplate": {"How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/"}, "CacheBackedEmbeddings": {"Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/"}, "LocalFileStore": {"Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "LocalFileStore": "https://python.langchain.com/docs/integrations/stores/file_system/"}, "Ollama": {"How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/"}, "render_text_description": {"How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "RunnableSerializable": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/"}, "Run": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/"}, "MarkdownHeaderTextSplitter": {"How to split Markdown by Headers": "https://python.langchain.com/docs/how_to/markdown_header_metadata_splitter/"}, "HTMLHeaderTextSplitter": {"How to split by HTML header ": "https://python.langchain.com/docs/how_to/HTML_header_metadata_splitter/"}, "EnsembleRetriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/"}, "BM25Retriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/"}, "ChatMistralAI": {"Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "ChatMistralAI": "https://python.langchain.com/docs/integrations/chat/mistralai/", "MistralAI": "https://python.langchain.com/docs/integrations/providers/mistralai/", "Build an Extraction Chain": "https://python.langchain.com/docs/tutorials/extraction/"}, "ChatGroq": {"Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "ChatGroq": "https://python.langchain.com/docs/integrations/chat/groq/"}, "set_verbose": {"How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "set_debug": {"How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "MaxMarginalRelevanceExampleSelector": {"How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/"}, "AttributeInfo": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/", "DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/retrievers/self_query/chroma_self_query/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/"}, "SelfQueryRetriever": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/", "DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/providers/chroma/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "Astra DB": "https://python.langchain.com/docs/integrations/providers/astradb/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "StructuredQueryOutputParser": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/"}, "get_query_constructor_prompt": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/"}, "add": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "cos": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "divide": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "log": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "multiply": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "negate": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "pi": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "power": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "sin": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "subtract": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "adispatch_custom_event": {"How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/"}, "dispatch_custom_event": {"How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/"}, "Cassandra": {"Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/"}, "HTMLSectionSplitter": {"How to split by HTML sections": "https://python.langchain.com/docs/how_to/HTML_section_aware_splitter/"}, "JSONLoader": {"How to load JSON": "https://python.langchain.com/docs/how_to/document_loader_json/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "JSONLoader": "https://python.langchain.com/docs/integrations/document_loaders/json/"}, "UpstashRedisCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Upstash Vector": "https://python.langchain.com/docs/integrations/providers/upstash/"}, "RedisCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/docs/integrations/providers/redis/"}, "RedisSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/docs/integrations/providers/redis/"}, "GPTCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "MomentoCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Momento": "https://python.langchain.com/docs/integrations/providers/momento/"}, "SQLAlchemyCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "CassandraCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "CassandraSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "AzureCosmosDBSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "CosmosDBSimilarityType": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/"}, "CosmosDBVectorSearchType": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/"}, "load_summarize_chain": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "OpenSearchSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "SingleStoreDBSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "map_ai_messages": {"WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "GMail": "https://python.langchain.com/docs/integrations/chat_loaders/gmail/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/"}, "merge_chat_runs": {"WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/"}, "ChatSession": {"WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/"}, "FolderFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/"}, "SingleFileFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/"}, "convert_messages_for_finetuning": {"Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/", "LangSmith Chat Datasets": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/"}, "convert_message_to_dict": {"Twitter (via Apify)": "https://python.langchain.com/docs/integrations/chat_loaders/twitter/"}, "convert_pydantic_to_openai_function": {"LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "PydanticOutputFunctionsParser": {"LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "LangSmithRunChatLoader": {"LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "GMailLoader": {"GMail": "https://python.langchain.com/docs/integrations/chat_loaders/gmail/"}, "SlackChatLoader": {"Slack": "https://python.langchain.com/docs/integrations/providers/slack/"}, "WhatsAppChatLoader": {"WhatsApp": "https://python.langchain.com/docs/integrations/providers/whatsapp/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/", "WhatsApp Chat": "https://python.langchain.com/docs/integrations/document_loaders/whatsapp_chat/"}, "LangSmithDatasetChatLoader": {"LangSmith Chat Datasets": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_dataset/"}, "IMessageChatLoader": {"iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/"}, "TelegramChatLoader": {"Telegram": "https://python.langchain.com/docs/integrations/providers/telegram/"}, "BookendEmbeddings": {"Bookend AI": "https://python.langchain.com/docs/integrations/text_embedding/bookend/"}, "SolarEmbeddings": {"Solar": "https://python.langchain.com/docs/integrations/text_embedding/solar/"}, "HuggingFaceBgeEmbeddings": {"BGE on Hugging Face": "https://python.langchain.com/docs/integrations/text_embedding/bge_huggingface/", "Hugging Face": "https://python.langchain.com/docs/integrations/platforms/huggingface/"}, "IpexLLMBgeEmbeddings": {"Local BGE Embeddings with IPEX-LLM on Intel CPU": "https://python.langchain.com/docs/integrations/text_embedding/ipex_llm/", "Local BGE Embeddings with IPEX-LLM on Intel GPU": "https://python.langchain.com/docs/integrations/text_embedding/ipex_llm_gpu/"}, "QuantizedBiEncoderEmbeddings": {"Embedding Documents using Optimized and Quantized Embedders": "https://python.langchain.com/docs/integrations/text_embedding/optimum_intel/", "Intel": "https://python.langchain.com/docs/integrations/providers/intel/"}, "XinferenceEmbeddings": {"Xorbits inference (Xinference)": "https://python.langchain.com/docs/integrations/text_embedding/xinference/"}, "LLMRailsEmbeddings": {"LLMRails": "https://python.langchain.com/docs/integrations/text_embedding/llm_rails/"}, "AscendEmbeddings": {"# Related": "https://python.langchain.com/docs/integrations/text_embedding/ascend/", "Ascend": "https://python.langchain.com/docs/integrations/providers/ascend/"}, "DeepInfraEmbeddings": {"DeepInfra": "https://python.langchain.com/docs/integrations/providers/deepinfra/"}, "HuggingFaceInferenceAPIEmbeddings": {"Hugging Face": "https://python.langchain.com/docs/integrations/text_embedding/huggingfacehub/"}, "GPT4AllEmbeddings": {"GPT4All": "https://python.langchain.com/docs/integrations/text_embedding/gpt4all/", "ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/"}, "MosaicMLInstructorEmbeddings": {"MosaicML": "https://python.langchain.com/docs/integrations/text_embedding/mosaicml/"}, "QuantizedBgeEmbeddings": {"Intel\u00ae Extension for Transformers Quantized Text Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/itrex/", "Intel": "https://python.langchain.com/docs/integrations/providers/intel/"}, "BedrockEmbeddings": {"Bedrock": "https://python.langchain.com/docs/integrations/text_embedding/bedrock/", "AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon MemoryDB": "https://python.langchain.com/docs/integrations/vectorstores/memorydb/"}, "GigaChatEmbeddings": {"GigaChat": "https://python.langchain.com/docs/integrations/text_embedding/gigachat/", "Salute Devices": "https://python.langchain.com/docs/integrations/providers/salute_devices/"}, "OCIGenAIEmbeddings": {"Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/docs/integrations/text_embedding/oci_generative_ai/", "Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/"}, "OVHCloudEmbeddings": {"OVHcloud": "https://python.langchain.com/docs/integrations/text_embedding/ovhcloud/"}, "FastEmbedEmbeddings": {"FastEmbed by Qdrant": "https://python.langchain.com/docs/integrations/text_embedding/fastembed/"}, "LlamaCppEmbeddings": {"Llama.cpp": "https://python.langchain.com/docs/integrations/providers/llamacpp/"}, "NLPCloudEmbeddings": {"NLP Cloud": "https://python.langchain.com/docs/integrations/text_embedding/nlp_cloud/", "NLPCloud": "https://python.langchain.com/docs/integrations/providers/nlpcloud/"}, "TextEmbedEmbeddings": {"TextEmbed - Embedding Inference Server": "https://python.langchain.com/docs/integrations/text_embedding/textembed/"}, "LaserEmbeddings": {"LASER Language-Agnostic SEntence Representations Embeddings by Meta AI": "https://python.langchain.com/docs/integrations/text_embedding/laser/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/"}, "OpenCLIPEmbeddings": {"OpenClip": "https://python.langchain.com/docs/integrations/text_embedding/open_clip/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/"}, "TitanTakeoffEmbed": {"Titan Takeoff": "https://python.langchain.com/docs/integrations/text_embedding/titan_takeoff/"}, "MistralAIEmbeddings": {"MistralAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/mistralai/", "MistralAI": "https://python.langchain.com/docs/integrations/providers/mistralai/"}, "SpacyEmbeddings": {"SpaCy": "https://python.langchain.com/docs/integrations/text_embedding/spacy_embedding/", "NanoPQ (Product Quantization)": "https://python.langchain.com/docs/integrations/retrievers/nanopq/", "spaCy": "https://python.langchain.com/docs/integrations/providers/spacy/"}, "DatabricksEmbeddings": {"Databricks": "https://python.langchain.com/docs/integrations/text_embedding/databricks/"}, "BaichuanTextEmbeddings": {"Baichuan Text Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/baichuan/", "Baichuan": "https://python.langchain.com/docs/integrations/providers/baichuan/"}, "TogetherEmbeddings": {"TogetherEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/together/"}, "HuggingFaceInstructEmbeddings": {"Instruct Embeddings on Hugging Face": "https://python.langchain.com/docs/integrations/text_embedding/instruct_embeddings/", "Hugging Face": "https://python.langchain.com/docs/integrations/platforms/huggingface/"}, "OracleEmbeddings": {"Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/"}, "QianfanEmbeddingsEndpoint": {"Baidu Qianfan": "https://python.langchain.com/docs/integrations/text_embedding/baidu_qianfan_endpoint/", "ERNIE": "https://python.langchain.com/docs/integrations/text_embedding/ernie/", "Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/"}, "EdenAiEmbeddings": {"EDEN AI": "https://python.langchain.com/docs/integrations/text_embedding/edenai/", "Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "JohnSnowLabsEmbeddings": {"John Snow Labs": "https://python.langchain.com/docs/integrations/text_embedding/johnsnowlabs_embedding/"}, "ErnieEmbeddings": {"ERNIE": "https://python.langchain.com/docs/integrations/text_embedding/ernie/"}, "ClarifaiEmbeddings": {"Clarifai": "https://python.langchain.com/docs/integrations/providers/clarifai/"}, "AzureOpenAIEmbeddings": {"AzureOpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/azureopenai/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/"}, "InfinityEmbeddings": {"Infinity": "https://python.langchain.com/docs/integrations/providers/infinity/"}, "InfinityEmbeddingsLocal": {"Infinity": "https://python.langchain.com/docs/integrations/text_embedding/infinity/"}, "AwaEmbeddings": {"AwaDB": "https://python.langchain.com/docs/integrations/providers/awadb/"}, "VolcanoEmbeddings": {"Volc Engine": "https://python.langchain.com/docs/integrations/text_embedding/volcengine/"}, "MiniMaxEmbeddings": {"MiniMax": "https://python.langchain.com/docs/integrations/text_embedding/minimax/", "Minimax": "https://python.langchain.com/docs/integrations/providers/minimax/"}, "FakeEmbeddings": {"Fake Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/fake/", "DocArray": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever/", "Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/vectorstores/google_memorystore_redis/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/"}, "ClovaEmbeddings": {"Clova Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/clova/"}, "NeMoEmbeddings": {"NVIDIA NeMo embeddings": "https://python.langchain.com/docs/integrations/text_embedding/nemo/"}, "SparkLLMTextEmbeddings": {"SparkLLM Text Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sparkllm/", "iFlytek": "https://python.langchain.com/docs/integrations/providers/iflytek/"}, "PremAIEmbeddings": {"PremAI": "https://python.langchain.com/docs/integrations/text_embedding/premai/"}, "KNNRetriever": {"Voyage AI": "https://python.langchain.com/docs/integrations/text_embedding/voyageai/", "kNN": "https://python.langchain.com/docs/integrations/retrievers/knn/"}, "SelfHostedEmbeddings": {"Self Hosted": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceEmbeddings": {"Self Hosted": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceInstructEmbeddings": {"Self Hosted": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted/"}, "AnyscaleEmbeddings": {"Anyscale": "https://python.langchain.com/docs/integrations/providers/anyscale/"}, "EmbaasEmbeddings": {"Embaas": "https://python.langchain.com/docs/integrations/text_embedding/embaas/"}, "YandexGPTEmbeddings": {"YandexGPT": "https://python.langchain.com/docs/integrations/text_embedding/yandex/"}, "JinaEmbeddings": {"Jina": "https://python.langchain.com/docs/integrations/providers/jina/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/"}, "AlephAlphaAsymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha/"}, "AlephAlphaSymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha/"}, "CloudflareWorkersAIEmbeddings": {"Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/text_embedding/cloudflare_workersai/", "Cloudflare": "https://python.langchain.com/docs/integrations/providers/cloudflare/"}, "DashScopeEmbeddings": {"DashScope": "https://python.langchain.com/docs/integrations/text_embedding/dashscope/", "DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "TensorflowHubEmbeddings": {"TensorFlow Hub": "https://python.langchain.com/docs/integrations/text_embedding/tensorflowhub/"}, "LlamafileEmbeddings": {"llamafile": "https://python.langchain.com/docs/integrations/text_embedding/llamafile/"}, "GradientEmbeddings": {"Gradient": "https://python.langchain.com/docs/integrations/providers/gradient/"}, "ModelScopeEmbeddings": {"ModelScope": "https://python.langchain.com/docs/integrations/providers/modelscope/"}, "SagemakerEndpointEmbeddings": {"SageMaker": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint/", "AWS": "https://python.langchain.com/docs/integrations/platforms/aws/"}, "EmbeddingsContentHandler": {"SageMaker": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint/"}, "DocArrayInMemorySearch": {"UpstageEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/upstage/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/"}, "SambaStudioEmbeddings": {"SambaNova": "https://python.langchain.com/docs/integrations/text_embedding/sambanova/"}, "OpenVINOEmbeddings": {"OpenVINO": "https://python.langchain.com/docs/integrations/text_embedding/openvino/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/"}, "OpenVINOBgeEmbeddings": {"OpenVINO": "https://python.langchain.com/docs/integrations/text_embedding/openvino/"}, "LocalAIEmbeddings": {"LocalAI": "https://python.langchain.com/docs/integrations/text_embedding/localai/"}, "AzureAISearchRetriever": {"AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/"}, "AzureSearch": {"AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/"}, "RePhraseQueryRetriever": {"RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/"}, "YouSearchAPIWrapper": {"You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/"}, "YouRetriever": {"You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/"}, "Kinetica": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "Kinetica": "https://python.langchain.com/docs/integrations/providers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/"}, "KineticaSettings": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "Kinetica": "https://python.langchain.com/docs/integrations/document_loaders/kinetica/"}, "Jaguar": {"JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "Jaguar": "https://python.langchain.com/docs/integrations/providers/jaguar/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/"}, "BaseStore": {"Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/"}, "VectorStore": {"Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/"}, "AskNewsRetriever": {"AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/"}, "LLMLinguaCompressor": {"LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/"}, "ElasticSearchBM25Retriever": {"ElasticSearch BM25": "https://python.langchain.com/docs/integrations/retrievers/elastic_search_bm25/"}, "OutlineRetriever": {"Outline": "https://python.langchain.com/docs/integrations/providers/outline/"}, "ZepMemory": {"Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/"}, "SearchScope": {"Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/"}, "ZepRetriever": {"Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/"}, "VespaRetriever": {"Vespa": "https://python.langchain.com/docs/integrations/providers/vespa/"}, "AmazonKendraRetriever": {"Amazon Kendra": "https://python.langchain.com/docs/integrations/retrievers/amazon_kendra_retriever/", "AWS": "https://python.langchain.com/docs/integrations/platforms/aws/"}, "AmazonKnowledgeBasesRetriever": {"Bedrock (Knowledge Bases) Retriever": "https://python.langchain.com/docs/integrations/retrievers/bedrock/", "AWS": "https://python.langchain.com/docs/integrations/platforms/aws/"}, "Bedrock": {"Bedrock (Knowledge Bases) Retriever": "https://python.langchain.com/docs/integrations/retrievers/bedrock/"}, "CohereEmbeddings": {"Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/"}, "Cohere": {"Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/"}, "ZepCloudMemory": {"Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/"}, "ZepCloudRetriever": {"Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Zep": "https://python.langchain.com/docs/integrations/providers/zep/"}, "NeuralDBRetriever": {"**NeuralDB**": "https://python.langchain.com/docs/integrations/retrievers/thirdai_neuraldb/"}, "SingleStoreDB": {"SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/"}, "MetalRetriever": {"Metal": "https://python.langchain.com/docs/integrations/providers/metal/"}, "BreebsRetriever": {"BREEBS (Open Knowledge)": "https://python.langchain.com/docs/integrations/retrievers/breebs/"}, "NanoPQRetriever": {"NanoPQ (Product Quantization)": "https://python.langchain.com/docs/integrations/retrievers/nanopq/"}, "ChatGPTPluginRetriever": {"ChatGPT plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin/", "OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/"}, "KayAiRetriever": {"SEC filing": "https://python.langchain.com/docs/integrations/retrievers/sec_filings/", "Kay.ai": "https://python.langchain.com/docs/integrations/retrievers/kay/"}, "DriaRetriever": {"Dria": "https://python.langchain.com/docs/integrations/retrievers/dria_index/"}, "DocArrayRetriever": {"DocArray": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever/"}, "SVMRetriever": {"SVM": "https://python.langchain.com/docs/integrations/retrievers/svm/", "scikit-learn": "https://python.langchain.com/docs/integrations/providers/sklearn/"}, "TavilySearchAPIRetriever": {"TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/"}, "PineconeHybridSearchRetriever": {"Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search/", "Pinecone": "https://python.langchain.com/docs/integrations/providers/pinecone/"}, "DeepLake": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/"}, "AsyncHtmlLoader": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/docs/integrations/document_transformers/html2text/", "Markdownify": "https://python.langchain.com/docs/integrations/document_transformers/markdownify/", "AsyncHtml": "https://python.langchain.com/docs/integrations/document_loaders/async_html/"}, "Html2TextTransformer": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/docs/integrations/document_transformers/html2text/", "Async Chromium": "https://python.langchain.com/docs/integrations/document_loaders/async_chromium/"}, "create_structured_output_chain": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/"}, "HumanMessagePromptTemplate": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/"}, "PubMedRetriever": {"PubMed": "https://python.langchain.com/docs/integrations/providers/pubmed/"}, "WeaviateHybridSearchRetriever": {"Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid/"}, "EmbedchainRetriever": {"Embedchain": "https://python.langchain.com/docs/integrations/retrievers/embedchain/"}, "ArxivRetriever": {"ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "Arxiv": "https://python.langchain.com/docs/integrations/providers/arxiv/"}, "QdrantSparseVectorRetriever": {"Qdrant Sparse Vector": "https://python.langchain.com/docs/integrations/retrievers/qdrant-sparse/"}, "DeterministicFakeEmbedding": {"ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/"}, "Embeddings": {"ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Infinispan": "https://python.langchain.com/docs/integrations/vectorstores/infinispanvs/"}, "RememberizerRetriever": {"Rememberizer": "https://python.langchain.com/docs/integrations/retrievers/rememberizer/"}, "ArceeRetriever": {"Arcee": "https://python.langchain.com/docs/integrations/providers/arcee/"}, "FlashrankRerank": {"FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/"}, "ChaindeskRetriever": {"Chaindesk": "https://python.langchain.com/docs/integrations/providers/chaindesk/"}, "MergerRetriever": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "EmbeddingsClusteringFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "TFIDFRetriever": {"TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf/"}, "PGVector": {"PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "PGVector": "https://python.langchain.com/docs/integrations/providers/pgvector/"}, "Weaviate": {"Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/"}, "Vectara": {"Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/", "Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/"}, "HanaDB": {"SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "SAP": "https://python.langchain.com/docs/integrations/providers/sap/"}, "HanaTranslator": {"SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/"}, "DashVector": {"DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/"}, "Tongyi": {"DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Tongyi Qwen": "https://python.langchain.com/docs/integrations/llms/tongyi/"}, "DatabricksVectorSearch": {"Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/"}, "Dingo": {"DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/"}, "OpenSearchVectorSearch": {"OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "AWS": "https://python.langchain.com/docs/integrations/platforms/aws/"}, "ConnectionParams": {"Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/"}, "MetaField": {"Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/"}, "TencentVectorDB": {"Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/"}, "TimescaleVector": {"Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/"}, "AstraDB": {"Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/"}, "SupabaseVectorStore": {"Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/"}, "Redis": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "MyScale": {"MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/"}, "MongoDBAtlasVectorSearch": {"MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/"}, "Qdrant": {"Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "AzureChatOpenAI": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/", "AzureChatOpenAI": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "AzureMLOnlineEndpoint": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "AzureOpenAI": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/", "Azure OpenAI": "https://python.langchain.com/docs/integrations/llms/azure_openai/"}, "AzureAIDataLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure AI Data": "https://python.langchain.com/docs/integrations/document_loaders/azure_ai_data/"}, "AzureBlobStorageContainerLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Blob Storage Container": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_container/"}, "AzureBlobStorageFileLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Blob Storage File": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_file/"}, "OneDriveLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Microsoft OneDrive": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_onedrive/"}, "OneDriveFileLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/"}, "UnstructuredWordDocumentLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word/"}, "UnstructuredExcelLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Microsoft Excel": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_excel/"}, "SharePointLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Microsoft SharePoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_sharepoint/"}, "UnstructuredPowerPointLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Microsoft PowerPoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_powerpoint/"}, "OneNoteLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Microsoft OneNote": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_onenote/"}, "AzureCosmosDBVectorSearch": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/"}, "BingSearchResults": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/"}, "BingSearchAPIWrapper": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/"}, "O365Toolkit": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/"}, "PowerBIToolkit": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/"}, "PowerBIDataset": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/"}, "PlayWrightBrowserToolkit": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/"}, "GremlinGraph": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphDocument": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Node": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Relationship": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "PresidioAnonymizer": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/"}, "PresidioReversibleAnonymizer": {"Microsoft": "https://python.langchain.com/docs/integrations/platforms/microsoft/"}, "BedrockLLM": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock/"}, "AmazonAPIGateway": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "SagemakerEndpoint": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/"}, "ContentHandlerBase": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/"}, "S3DirectoryLoader": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "AWS S3 Directory": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_directory/"}, "S3FileLoader": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "AWS S3 File": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_file/"}, "AmazonTextractPDFLoader": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon Textract ": "https://python.langchain.com/docs/integrations/document_loaders/amazon_textract/"}, "AthenaLoader": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Athena": "https://python.langchain.com/docs/integrations/document_loaders/athena/"}, "GlueCatalogLoader": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Glue Catalog": "https://python.langchain.com/docs/integrations/document_loaders/glue_catalog/"}, "DynamoDBChatMessageHistory": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/"}, "NeptuneGraph": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneAnalyticsGraph": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneOpenCypherQAChain": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneRdfGraph": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_sparql/"}, "NeptuneSparqlQAChain": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_sparql/"}, "SageMakerCallbackHandler": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/"}, "AmazonComprehendModerationChain": {"AWS": "https://python.langchain.com/docs/integrations/platforms/aws/"}, "HuggingFaceHubEmbeddings": {"Hugging Face": "https://python.langchain.com/docs/integrations/platforms/huggingface/"}, "HuggingFaceDatasetLoader": {"Hugging Face": "https://python.langchain.com/docs/integrations/platforms/huggingface/", "HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset/"}, "load_huggingface_tool": {"Hugging Face": "https://python.langchain.com/docs/integrations/platforms/huggingface/", "HuggingFace Hub Tools": "https://python.langchain.com/docs/integrations/tools/huggingface_tools/"}, "ChatGPTLoader": {"OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/", "ChatGPT Data": "https://python.langchain.com/docs/integrations/document_loaders/chatgpt_loader/"}, "DallEAPIWrapper": {"OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/"}, "OpenAIModerationChain": {"OpenAI": "https://python.langchain.com/docs/integrations/platforms/openai/"}, "GooglePalmEmbeddings": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/"}, "ScaNN": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/"}, "GoogleVertexAISearchRetriever": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/"}, "GoogleDocumentAIWarehouseRetriever": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/"}, "GoogleFinanceQueryRun": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/"}, "GoogleFinanceAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/"}, "GoogleJobsQueryRun": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/"}, "GoogleLensQueryRun": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Lens": "https://python.langchain.com/docs/integrations/tools/google_lens/"}, "GoogleLensAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Lens": "https://python.langchain.com/docs/integrations/tools/google_lens/"}, "GooglePlacesTool": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Places": "https://python.langchain.com/docs/integrations/tools/google_places/"}, "GoogleScholarQueryRun": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Scholar": "https://python.langchain.com/docs/integrations/tools/google_scholar/"}, "GoogleScholarAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Scholar": "https://python.langchain.com/docs/integrations/tools/google_scholar/"}, "GoogleTrendsQueryRun": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Trends": "https://python.langchain.com/docs/integrations/tools/google_trends/"}, "GoogleTrendsAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Trends": "https://python.langchain.com/docs/integrations/tools/google_trends/"}, "SearchApiAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/"}, "SerpAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "GoogleSerperAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/"}, "YouTubeSearchTool": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "YouTube": "https://python.langchain.com/docs/integrations/tools/youtube/"}, "YoutubeAudioLoader": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/"}, "OpenAIWhisperParser": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/"}, "YoutubeLoader": {"Google": "https://python.langchain.com/docs/integrations/platforms/google/", "YouTube": "https://python.langchain.com/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/"}, "AnthropicLLM": {"Anthropic": "https://python.langchain.com/docs/integrations/platforms/anthropic/", "AnthropicLLM": "https://python.langchain.com/docs/integrations/llms/anthropic/"}, "AIPluginTool": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/"}, "AgentType": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/", "E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/", "Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/", "Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/tools/openweathermap/", "AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/", "Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Eden AI": "https://python.langchain.com/docs/integrations/tools/edenai_tools/", "Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/", "Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "initialize_agent": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/", "E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/", "Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/", "Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/tools/openweathermap/", "AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/", "Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Eden AI": "https://python.langchain.com/docs/integrations/tools/edenai_tools/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/", "Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "DataForSeoAPIWrapper": {"DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo/"}, "Tool": {"DataForSEO": "https://python.langchain.com/docs/integrations/tools/dataforseo/", "Python REPL": "https://python.langchain.com/docs/integrations/tools/python/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "SerpAPI": "https://python.langchain.com/docs/integrations/tools/serpapi/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Google Search": "https://python.langchain.com/docs/integrations/tools/google_search/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "ConneryToolkit": {"Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/"}, "ConneryService": {"Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/"}, "DataheraldAPIWrapper": {"Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/"}, "SearxSearchWrapper": {"SearxNG Search": "https://python.langchain.com/docs/integrations/tools/searx_search/", "SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx/"}, "JiraToolkit": {"Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/"}, "JiraAPIWrapper": {"Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/"}, "PythonREPL": {"Python REPL": "https://python.langchain.com/docs/integrations/tools/python/"}, "GoogleJobsAPIWrapper": {"Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/"}, "InfobipAPIWrapper": {"Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/"}, "create_openai_functions_agent": {"Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/", "Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "AskNewsSearch": {"AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/"}, "create_pbi_agent": {"PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/"}, "AzureCognitiveServicesToolkit": {"Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/"}, "E2BDataAnalysisTool": {"E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/"}, "SQLDatabaseToolkit": {"SQLDatabase Toolkit": "https://python.langchain.com/docs/integrations/tools/sql_database/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "HumanInputRun": {"Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/"}, "FinancialDatasetsToolkit": {"FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/"}, "FinancialDatasetsAPIWrapper": {"FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/"}, "NLAToolkit": {"Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/"}, "Requests": {"Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/"}, "ZenGuardTool": {"ZenGuard AI": "https://python.langchain.com/docs/integrations/tools/zenguard/"}, "Detector": {"ZenGuard AI": "https://python.langchain.com/docs/integrations/tools/zenguard/"}, "SlackToolkit": {"Slack Toolkit": "https://python.langchain.com/docs/integrations/tools/slack/", "Slack": "https://python.langchain.com/docs/integrations/providers/slack/"}, "SteamToolkit": {"Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/"}, "SteamWebAPIWrapper": {"Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/"}, "create_openai_tools_agent": {"Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/"}, "CassandraDatabaseToolkit": {"Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "CassandraDatabase": {"Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/"}, "NucliaUnderstandingAPI": {"Nuclia Understanding": "https://python.langchain.com/docs/integrations/tools/nuclia/", "Nuclia": "https://python.langchain.com/docs/integrations/document_loaders/nuclia/"}, "YahooFinanceNewsTool": {"Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/"}, "JsonToolkit": {"JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/"}, "create_json_agent": {"JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/"}, "JsonSpec": {"JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/", "OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "PolygonToolkit": {"Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonAPIWrapper": {"Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "WikidataAPIWrapper": {"Wikidata": "https://python.langchain.com/docs/integrations/tools/wikidata/"}, "WikidataQueryRun": {"Wikidata": "https://python.langchain.com/docs/integrations/tools/wikidata/"}, "TwilioAPIWrapper": {"Twilio": "https://python.langchain.com/docs/integrations/tools/twilio/"}, "IFTTTWebhook": {"IFTTT WebHooks": "https://python.langchain.com/docs/integrations/tools/ifttt/"}, "SemanticScholarQueryRun": {"Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/"}, "AlphaVantageAPIWrapper": {"Alpha Vantage": "https://python.langchain.com/docs/integrations/tools/alpha_vantage/"}, "GitHubToolkit": {"Github Toolkit": "https://python.langchain.com/docs/integrations/tools/github/"}, "GitHubAPIWrapper": {"Github Toolkit": "https://python.langchain.com/docs/integrations/tools/github/"}, "ChatDatabricks": {"Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "ChatDatabricks": "https://python.langchain.com/docs/integrations/chat/databricks/"}, "UCFunctionToolkit": {"Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/"}, "GoogleCloudTextToSpeechTool": {"Google Cloud Text-to-Speech": "https://python.langchain.com/docs/integrations/tools/google_cloud_texttospeech/"}, "ClickupToolkit": {"ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/"}, "ClickupAPIWrapper": {"ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/"}, "SparkSQLToolkit": {"Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/"}, "create_spark_sql_agent": {"Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/"}, "SparkSQL": {"Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/"}, "OracleSummary": {"Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/docs/integrations/tools/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/"}, "StackExchangeAPIWrapper": {"StackExchange": "https://python.langchain.com/docs/integrations/tools/stackexchange/", "Stack Exchange": "https://python.langchain.com/docs/integrations/providers/stackexchange/"}, "RequestsToolkit": {"Requests Toolkit": "https://python.langchain.com/docs/integrations/tools/requests/"}, "TextRequestsWrapper": {"Requests Toolkit": "https://python.langchain.com/docs/integrations/tools/requests/"}, "OpenWeatherMapAPIWrapper": {"OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap/"}, "AINetworkToolkit": {"AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "AINetwork": "https://python.langchain.com/docs/integrations/providers/ainetwork/"}, "get_from_env": {"Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAI": {"Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAIAPI": {"Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/"}, "PubmedQueryRun": {"PubMed": "https://python.langchain.com/docs/integrations/tools/pubmed/"}, "GradientLLM": {"Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Gradient": "https://python.langchain.com/docs/integrations/llms/gradient/"}, "create_async_playwright_browser": {"PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/"}, "ElevenLabsText2SpeechTool": {"Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "ElevenLabs": "https://python.langchain.com/docs/integrations/providers/elevenlabs/"}, "create_conversational_retrieval_agent": {"Cogniswitch Toolkit": "https://python.langchain.com/docs/integrations/tools/cogniswitch/"}, "CogniswitchToolkit": {"Cogniswitch Toolkit": "https://python.langchain.com/docs/integrations/tools/cogniswitch/"}, "BearlyInterpreterTool": {"Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/"}, "ExecPython": {"Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/"}, "ZapierToolkit": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/"}, "ZapierNLAWrapper": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/"}, "SimpleSequentialChain": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/"}, "TransformChain": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/"}, "ZapierNLARunAction": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/"}, "RivaASR": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "RivaTTS": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "RivaAudioEncoding": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "AudioStream": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "GoldenQueryAPIWrapper": {"Golden Query": "https://python.langchain.com/docs/integrations/tools/golden_query/", "Golden": "https://python.langchain.com/docs/integrations/providers/golden/"}, "create_react_agent": {"ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "ArxivAPIWrapper": {"ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/"}, "OpenAIFunctionsAgent": {"Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/"}, "NasaToolkit": {"NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/"}, "NasaAPIWrapper": {"NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/"}, "MultionToolkit": {"MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/"}, "DuckDuckGoSearchRun": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg/"}, "DuckDuckGoSearchResults": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg/"}, "DuckDuckGoSearchAPIWrapper": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg/"}, "SceneXplainTool": {"SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/"}, "WolframAlphaAPIWrapper": {"Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha/"}, "AmadeusToolkit": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/"}, "HuggingFaceHub": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/"}, "ReActJsonSingleInputOutputParser": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "render_text_description_and_args": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/"}, "EdenAiExplicitImageTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiObjectDetectionTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiParsingIDTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiParsingInvoiceTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiSpeechToTextTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiTextModerationTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiTextToSpeechTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAI": {"Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/"}, "MojeekSearch": {"Mojeek Search": "https://python.langchain.com/docs/integrations/tools/mojeek_search/"}, "RedditSearchRun": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "RedditSearchAPIWrapper": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "RedditSearchSchema": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "StructuredChatAgent": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "ReadOnlySharedMemory": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "YouSearchTool": {"You.com Search": "https://python.langchain.com/docs/integrations/tools/you/"}, "AzureAiServicesToolkit": {"Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/"}, "create_structured_chat_agent": {"Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/"}, "reduce_openapi_spec": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "RequestsWrapper": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "OpenAPIToolkit": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "create_openapi_agent": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "GitLabToolkit": {"Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/"}, "GitLabAPIWrapper": {"Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/"}, "ShellTool": {"Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/"}, "PolygonAggregates": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonFinancials": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonLastQuote": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonTickerNews": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "FileManagementToolkit": {"File System": "https://python.langchain.com/docs/integrations/tools/filesystem/"}, "BraveSearch": {"Brave Search": "https://python.langchain.com/docs/integrations/providers/brave_search/"}, "RedisChatMessageHistory": {"Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/"}, "KafkaChatMessageHistory": {"Kafka": "https://python.langchain.com/docs/integrations/memory/kafka_chat_message_history/"}, "ElasticsearchChatMessageHistory": {"Elasticsearch": "https://python.langchain.com/docs/integrations/memory/elasticsearch_chat_message_history/"}, "UpstashRedisChatMessageHistory": {"Upstash Redis": "https://python.langchain.com/docs/integrations/memory/upstash_redis_chat_message_history/", "Upstash Vector": "https://python.langchain.com/docs/integrations/providers/upstash/"}, "ZepCloudChatMessageHistory": {"ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep": "https://python.langchain.com/docs/integrations/providers/zep/"}, "SingleStoreDBChatMessageHistory": {"SingleStoreDB": "https://python.langchain.com/docs/integrations/providers/singlestoredb/"}, "PostgresChatMessageHistory": {"Postgres": "https://python.langchain.com/docs/integrations/memory/postgres_chat_message_history/"}, "MomentoChatMessageHistory": {"Momento Cache": "https://python.langchain.com/docs/integrations/memory/momento_chat_message_history/", "Momento": "https://python.langchain.com/docs/integrations/providers/momento/"}, "XataChatMessageHistory": {"Xata": "https://python.langchain.com/docs/integrations/providers/xata/"}, "XataVectorStore": {"Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/"}, "CassandraChatMessageHistory": {"Cassandra ": "https://python.langchain.com/docs/integrations/memory/cassandra_chat_message_history/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "MotorheadMemory": {"Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/"}, "AstraDBChatMessageHistory": {"Astra DB ": "https://python.langchain.com/docs/integrations/memory/astradb_chat_message_history/"}, "StreamlitChatMessageHistory": {"Streamlit": "https://python.langchain.com/docs/integrations/providers/streamlit/"}, "Neo4jChatMessageHistory": {"Neo4j": "https://python.langchain.com/docs/integrations/memory/neo4j_chat_message_history/"}, "TiDBChatMessageHistory": {"TiDB": "https://python.langchain.com/docs/integrations/providers/tidb/"}, "RocksetChatMessageHistory": {"Rockset": "https://python.langchain.com/docs/integrations/providers/rockset/"}, "ChatSnowflakeCortex": {"Snowflake Cortex": "https://python.langchain.com/docs/integrations/chat/snowflake/"}, "SolarChat": {"# Related": "https://python.langchain.com/docs/integrations/chat/solar/"}, "AzureMLChatOnlineEndpoint": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/"}, "AzureMLEndpointApiType": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "CustomOpenAIChatContentFormatter": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/"}, "ChatKinetica": {"Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/", "Kinetica": "https://python.langchain.com/docs/integrations/providers/kinetica/"}, "KineticaSqlOutputParser": {"Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/"}, "KineticaSqlResponse": {"Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/"}, "PaiEasChatEndpoint": {"Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/chat/alibaba_cloud_pai_eas/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "ChatCoze": {"Chat with Coze Bot": "https://python.langchain.com/docs/integrations/chat/coze/"}, "ChatOctoAI": {"ChatOctoAI": "https://python.langchain.com/docs/integrations/chat/octoai/", "OctoAI": "https://python.langchain.com/docs/integrations/providers/octoai/"}, "ChatYi": {"ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "01.AI": "https://python.langchain.com/docs/integrations/providers/yi/"}, "ChatDeepInfra": {"DeepInfra": "https://python.langchain.com/docs/integrations/providers/deepinfra/"}, "ChatLiteLLM": {"ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/"}, "LlamaEdgeChatService": {"LlamaEdge": "https://python.langchain.com/docs/integrations/chat/llama_edge/"}, "OllamaFunctions": {"OllamaFunctions": "https://python.langchain.com/docs/integrations/chat/ollama_functions/"}, "VolcEngineMaasChat": {"VolcEngineMaasChat": "https://python.langchain.com/docs/integrations/chat/volcengine_maas/"}, "ChatLlamaAPI": {"ChatLlamaAPI": "https://python.langchain.com/docs/integrations/chat/llama_api/"}, "create_tagging_chain": {"ChatLlamaAPI": "https://python.langchain.com/docs/integrations/chat/llama_api/"}, "ChatKonko": {"ChatKonko": "https://python.langchain.com/docs/integrations/chat/konko/"}, "ChatBedrockConverse": {"ChatBedrock": "https://python.langchain.com/docs/integrations/chat/bedrock/"}, "MLXPipeline": {"MLX": "https://python.langchain.com/docs/integrations/providers/mlx/", "MLX Local Pipelines": "https://python.langchain.com/docs/integrations/llms/mlx_pipelines/"}, "ChatMLX": {"MLX": "https://python.langchain.com/docs/integrations/providers/mlx/"}, "format_log_to_str": {"MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "GigaChat": {"GigaChat": "https://python.langchain.com/docs/integrations/llms/gigachat/", "Salute Devices": "https://python.langchain.com/docs/integrations/providers/salute_devices/"}, "JinaChat": {"JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/"}, "SystemMessagePromptTemplate": {"JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/"}, "ChatOCIGenAI": {"ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/"}, "ChatLlamaCpp": {"Llama.cpp": "https://python.langchain.com/docs/integrations/providers/llamacpp/"}, "convert_to_openai_tool": {"Llama.cpp": "https://python.langchain.com/docs/integrations/chat/llamacpp/"}, "ChatEverlyAI": {"ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/"}, "GPTRouter": {"GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/"}, "GPTRouterModel": {"GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/"}, "ChatLiteLLMRouter": {"ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/"}, "ChatFriendli": {"ChatFriendli": "https://python.langchain.com/docs/integrations/chat/friendli/"}, "ChatZhipuAI": {"ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Zhipu AI": "https://python.langchain.com/docs/integrations/providers/zhipuai/"}, "create_json_chat_agent": {"ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/"}, "ChatBaichuan": {"Chat with Baichuan-192K": "https://python.langchain.com/docs/integrations/chat/baichuan/", "Baichuan": "https://python.langchain.com/docs/integrations/providers/baichuan/"}, "ChatTogether": {"ChatTogether": "https://python.langchain.com/docs/integrations/chat/together/", "Together AI": "https://python.langchain.com/docs/integrations/llms/together/"}, "Llama2Chat": {"Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/"}, "HuggingFaceTextGenInference": {"Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/"}, "QianfanChatEndpoint": {"QianfanChatEndpoint": "https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint/", "ErnieBotChat": "https://python.langchain.com/docs/integrations/chat/ernie/", "Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/"}, "ChatEdenAI": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "ErnieBotChat": {"ErnieBotChat": "https://python.langchain.com/docs/integrations/chat/ernie/"}, "ChatHunyuan": {"Tencent Hunyuan": "https://python.langchain.com/docs/integrations/chat/tencent_hunyuan/", "Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/"}, "MiniMaxChat": {"MiniMaxChat": "https://python.langchain.com/docs/integrations/chat/minimax/", "Minimax": "https://python.langchain.com/docs/integrations/providers/minimax/"}, "ChatYuan2": {"Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "IEIT Systems": "https://python.langchain.com/docs/integrations/providers/ieit_systems/"}, "ChatTongyi": {"ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "PromptLayerChatOpenAI": {"PromptLayerChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai/", "PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer/"}, "ChatSparkLLM": {"SparkLLM Chat": "https://python.langchain.com/docs/integrations/chat/sparkllm/", "iFlytek": "https://python.langchain.com/docs/integrations/providers/iflytek/"}, "MoonshotChat": {"MoonshotChat": "https://python.langchain.com/docs/integrations/chat/moonshot/"}, "ChatDappierAI": {"Dappier AI": "https://python.langchain.com/docs/integrations/chat/dappier/"}, "ChatMaritalk": {"Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "MariTalk": "https://python.langchain.com/docs/integrations/providers/maritalk/"}, "OnlinePDFLoader": {"Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "UnstructuredPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_pdfloader/"}, "load_qa_chain": {"Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "Amazon Textract ": "https://python.langchain.com/docs/integrations/document_loaders/amazon_textract/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/"}, "ChatPremAI": {"ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/"}, "ChatAnyscale": {"ChatAnyscale": "https://python.langchain.com/docs/integrations/chat/anyscale/", "Anyscale": "https://python.langchain.com/docs/integrations/providers/anyscale/"}, "ChatYandexGPT": {"ChatYandexGPT": "https://python.langchain.com/docs/integrations/chat/yandex/", "Yandex": "https://python.langchain.com/docs/integrations/providers/yandex/"}, "ChatPerplexity": {"ChatPerplexity": "https://python.langchain.com/docs/integrations/chat/perplexity/", "Perplexity": "https://python.langchain.com/docs/integrations/providers/perplexity/"}, "ChatAnthropicTools": {"[Deprecated] Experimental Anthropic Tools Wrapper": "https://python.langchain.com/docs/integrations/chat/anthropic_functions/"}, "DeepEvalCallbackHandler": {"Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "Confident AI": "https://python.langchain.com/docs/integrations/providers/confident/"}, "LLMonitorCallbackHandler": {"LLMonitor": "https://python.langchain.com/docs/integrations/providers/llmonitor/"}, "identify": {"LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/"}, "ContextCallbackHandler": {"Context": "https://python.langchain.com/docs/integrations/providers/context/"}, "FiddlerCallbackHandler": {"Fiddler": "https://python.langchain.com/docs/integrations/providers/fiddler/"}, "LabelStudioCallbackHandler": {"Label Studio": "https://python.langchain.com/docs/integrations/providers/labelstudio/"}, "CometTracer": {"Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/"}, "ArgillaCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/providers/argilla/"}, "StdOutCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "PromptLayerCallbackHandler": {"PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer/"}, "StreamlitCallbackHandler": {"Streamlit": "https://python.langchain.com/docs/integrations/providers/streamlit/", "GPT4All": "https://python.langchain.com/docs/integrations/providers/gpt4all/"}, "UpTrainCallbackHandler": {"UpTrain": "https://python.langchain.com/docs/integrations/providers/uptrain/"}, "TrubricsCallbackHandler": {"Trubrics": "https://python.langchain.com/docs/integrations/providers/trubrics/"}, "InfinoCallbackHandler": {"Infino": "https://python.langchain.com/docs/integrations/providers/infino/"}, "UpstashRatelimitError": {"Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/"}, "UpstashRatelimitHandler": {"Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/"}, "FigmaFileLoader": {"Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/"}, "Baseten": {"Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/"}, "WeatherDataLoader": {"Weather": "https://python.langchain.com/docs/integrations/document_loaders/weather/"}, "Tair": {"Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "CollegeConfidentialLoader": {"College Confidential": "https://python.langchain.com/docs/integrations/document_loaders/college_confidential/"}, "RWKV": {"RWKV-4": "https://python.langchain.com/docs/integrations/providers/rwkv/"}, "LakeFSLoader": {"lakeFS": "https://python.langchain.com/docs/integrations/document_loaders/lakefs/"}, "FaunaLoader": {"Fauna": "https://python.langchain.com/docs/integrations/document_loaders/fauna/"}, "OCIGenAI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/docs/integrations/llms/oci_generative_ai/"}, "OCIModelDeploymentVLLM": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OCIModelDeploymentTGI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OracleDocLoader": {"OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/docs/integrations/document_loaders/oracleai/"}, "OracleTextSplitter": {"OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/docs/integrations/document_loaders/oracleai/"}, "OracleVS": {"OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/"}, "Lantern": {"Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/"}, "DropboxLoader": {"Dropbox": "https://python.langchain.com/docs/integrations/document_loaders/dropbox/"}, "ForefrontAI": {"ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai/"}, "CometCallbackHandler": {"Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/"}, "CTransformers": {"C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/"}, "BiliBiliLoader": {"BiliBili": "https://python.langchain.com/docs/integrations/document_loaders/bilibili/"}, "TencentCOSDirectoryLoader": {"Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/", "Tencent COS Directory": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_directory/"}, "TencentCOSFileLoader": {"Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/", "Tencent COS File": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_file/"}, "OBSDirectoryLoader": {"Huawei": "https://python.langchain.com/docs/integrations/providers/huawei/", "Huawei OBS Directory": "https://python.langchain.com/docs/integrations/document_loaders/huawei_obs_directory/"}, "OBSFileLoader": {"Huawei": "https://python.langchain.com/docs/integrations/providers/huawei/", "Huawei OBS File": "https://python.langchain.com/docs/integrations/document_loaders/huawei_obs_file/"}, "DiffbotLoader": {"Diffbot": "https://python.langchain.com/docs/integrations/document_loaders/diffbot/"}, "DiffbotGraphTransformer": {"Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Neo4j": "https://python.langchain.com/docs/integrations/providers/neo4j/"}, "DeepSparse": {"DeepSparse": "https://python.langchain.com/docs/integrations/llms/deepsparse/"}, "AimCallbackHandler": {"Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/"}, "ModernTreasuryLoader": {"Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury/"}, "GitHubIssuesLoader": {"GitHub": "https://python.langchain.com/docs/integrations/document_loaders/github/"}, "GithubFileLoader": {"GitHub": "https://python.langchain.com/docs/integrations/document_loaders/github/"}, "Banana": {"Banana": "https://python.langchain.com/docs/integrations/llms/banana/"}, "InfinispanVS": {"Infinispan VS": "https://python.langchain.com/docs/integrations/providers/infinispanvs/", "Infinispan": "https://python.langchain.com/docs/integrations/vectorstores/infinispanvs/"}, "CerebriumAI": {"CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai/"}, "GutenbergLoader": {"Gutenberg": "https://python.langchain.com/docs/integrations/document_loaders/gutenberg/"}, "WikipediaLoader": {"Wikipedia": "https://python.langchain.com/docs/integrations/document_loaders/wikipedia/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/"}, "ConfluenceLoader": {"Confluence": "https://python.langchain.com/docs/integrations/document_loaders/confluence/"}, "Predibase": {"Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/"}, "Beam": {"Beam": "https://python.langchain.com/docs/integrations/llms/beam/"}, "GrobidParser": {"Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid/"}, "Typesense": {"Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/"}, "Hologres": {"Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "ArangoGraph": {"ArangoDB": "https://python.langchain.com/docs/integrations/graphs/arangodb/"}, "ArangoGraphQAChain": {"ArangoDB": "https://python.langchain.com/docs/integrations/graphs/arangodb/"}, "ArcGISLoader": {"ArcGIS": "https://python.langchain.com/docs/integrations/document_loaders/arcgis/"}, "WandbCallbackHandler": {"Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/"}, "ObsidianLoader": {"Obsidian": "https://python.langchain.com/docs/integrations/document_loaders/obsidian/"}, "BrowserbaseLoader": {"Browserbase": "https://python.langchain.com/docs/integrations/document_loaders/browserbase/"}, "OctoAIEndpoint": {"OctoAI": "https://python.langchain.com/docs/integrations/llms/octoai/"}, "OctoAIEmbeddings": {"OctoAI": "https://python.langchain.com/docs/integrations/providers/octoai/"}, "Nebula": {"Nebula": "https://python.langchain.com/docs/integrations/providers/symblai_nebula/", "Nebula (Symbl.ai)": "https://python.langchain.com/docs/integrations/llms/symblai_nebula/"}, "Writer": {"Writer": "https://python.langchain.com/docs/integrations/llms/writer/"}, "BaichuanLLM": {"Baichuan": "https://python.langchain.com/docs/integrations/providers/baichuan/", "Baichuan LLM": "https://python.langchain.com/docs/integrations/llms/baichuan/"}, "ApacheDoris": {"Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/"}, "ZepCloudVectorStore": {"Zep": "https://python.langchain.com/docs/integrations/providers/zep/", "Zep Cloud": "https://python.langchain.com/docs/integrations/vectorstores/zep_cloud/"}, "BrowserlessLoader": {"Browserless": "https://python.langchain.com/docs/integrations/document_loaders/browserless/"}, "AZLyricsLoader": {"AZLyrics": "https://python.langchain.com/docs/integrations/document_loaders/azlyrics/"}, "ToMarkdownLoader": {"2Markdown": "https://python.langchain.com/docs/integrations/document_loaders/tomarkdown/"}, "SparkLLM": {"iFlytek": "https://python.langchain.com/docs/integrations/providers/iflytek/", "SparkLLM": "https://python.langchain.com/docs/integrations/llms/sparkllm/"}, "Mlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/"}, "MlflowEmbeddings": {"MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/"}, "ChatMlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/"}, "GitLoader": {"Git": "https://python.langchain.com/docs/integrations/document_loaders/git/"}, "MlflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/"}, "MlflowAIGatewayEmbeddings": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/"}, "ChatMLflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/"}, "Tigris": {"Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/"}, "Meilisearch": {"Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/"}, "SQLDatabaseChain": {"Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/"}, "SnowflakeLoader": {"Snowflake": "https://python.langchain.com/docs/integrations/document_loaders/snowflake/"}, "CubeSemanticLoader": {"Cube": "https://python.langchain.com/docs/integrations/providers/cube/", "Cube Semantic Layer": "https://python.langchain.com/docs/integrations/document_loaders/cube_semantic/"}, "Clickhouse": {"ClickHouse": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse/"}, "ClickhouseSettings": {"ClickHouse": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse/"}, "TelegramChatFileLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram/"}, "TelegramChatApiLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram/"}, "PredictionGuard": {"Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard/"}, "Together": {"Together AI": "https://python.langchain.com/docs/integrations/llms/together/"}, "NotionDirectoryLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion/", "Notion DB 2/2": "https://python.langchain.com/docs/integrations/document_loaders/notion/"}, "NotionDBLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion/", "Notion DB 2/2": "https://python.langchain.com/docs/integrations/document_loaders/notiondb/"}, "MWDumpLoader": {"MediaWikiDump": "https://python.langchain.com/docs/integrations/providers/mediawikidump/", "MediaWiki Dump": "https://python.langchain.com/docs/integrations/document_loaders/mediawikidump/"}, "BraveSearchLoader": {"Brave Search": "https://python.langchain.com/docs/integrations/document_loaders/brave_search/"}, "StarRocks": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "GooseAI": {"GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai/"}, "DatadogLogsLoader": {"Datadog Logs": "https://python.langchain.com/docs/integrations/document_loaders/datadog_logs/"}, "ApifyWrapper": {"Apify": "https://python.langchain.com/docs/integrations/providers/apify/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/"}, "ApifyDatasetLoader": {"Apify": "https://python.langchain.com/docs/integrations/providers/apify/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/"}, "NLPCloud": {"NLPCloud": "https://python.langchain.com/docs/integrations/providers/nlpcloud/", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud/"}, "Milvus": {"Milvus": "https://python.langchain.com/docs/integrations/providers/milvus/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/"}, "SemaDB": {"SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/"}, "GitbookLoader": {"GitBook": "https://python.langchain.com/docs/integrations/document_loaders/gitbook/"}, "Rockset": {"Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/"}, "RocksetLoader": {"Rockset": "https://python.langchain.com/docs/integrations/document_loaders/rockset/"}, "Minimax": {"Minimax": "https://python.langchain.com/docs/integrations/llms/minimax/"}, "UnstructuredCHMLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/"}, "UnstructuredCSVLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv/"}, "UnstructuredEmailLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Email": "https://python.langchain.com/docs/integrations/document_loaders/email/"}, "UnstructuredEPubLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "EPub ": "https://python.langchain.com/docs/integrations/document_loaders/epub/"}, "UnstructuredFileIOLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive/"}, "UnstructuredImageLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Images": "https://python.langchain.com/docs/integrations/document_loaders/image/"}, "UnstructuredODTLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Open Document Format (ODT)": "https://python.langchain.com/docs/integrations/document_loaders/odt/"}, "UnstructuredOrgModeLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Org-mode": "https://python.langchain.com/docs/integrations/document_loaders/org_mode/"}, "UnstructuredPDFLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "UnstructuredPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_pdfloader/"}, "UnstructuredRSTLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "RST": "https://python.langchain.com/docs/integrations/document_loaders/rst/"}, "UnstructuredRTFLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/"}, "UnstructuredTSVLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "TSV": "https://python.langchain.com/docs/integrations/document_loaders/tsv/"}, "UnstructuredURLLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "URL": "https://python.langchain.com/docs/integrations/document_loaders/url/"}, "UnstructuredXMLLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "UnstructuredXMLLoader": "https://python.langchain.com/docs/integrations/document_loaders/xml/"}, "SelfHostedPipeline": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/"}, "SelfHostedHuggingFaceLLM": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/"}, "MlflowCallbackHandler": {"MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/"}, "SpreedlyLoader": {"Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly/"}, "OpenLLM": {"OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm/"}, "PubMedLoader": {"PubMed": "https://python.langchain.com/docs/integrations/document_loaders/pubmed/"}, "SearxSearchResults": {"SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx/"}, "Modal": {"Modal": "https://python.langchain.com/docs/integrations/llms/modal/"}, "OpenCityDataLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas/", "Open City Data": "https://python.langchain.com/docs/integrations/document_loaders/open_city_data/"}, "PGEmbedding": {"Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/"}, "SQLiteVSS": {"SQLite": "https://python.langchain.com/docs/integrations/providers/sqlite/", "SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/"}, "Xinference": {"Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference/"}, "IFixitLoader": {"iFixit": "https://python.langchain.com/docs/integrations/document_loaders/ifixit/"}, "AlephAlpha": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/llms/aleph_alpha/"}, "PipelineAI": {"PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai/"}, "FacebookChatLoader": {"Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/", "Facebook Chat": "https://python.langchain.com/docs/integrations/document_loaders/facebook_chat/"}, "Epsilla": {"Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/"}, "AwaDB": {"AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb/"}, "ArxivLoader": {"Arxiv": "https://python.langchain.com/docs/integrations/providers/arxiv/", "ArxivLoader": "https://python.langchain.com/docs/integrations/document_loaders/arxiv/"}, "BlockchainDocumentLoader": {"Alchemy": "https://python.langchain.com/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain/"}, "BlockchainType": {"Alchemy": "https://python.langchain.com/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain/"}, "Anyscale": {"Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale/"}, "StripeLoader": {"Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe/"}, "StochasticAI": {"StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai/"}, "Bagel": {"BagelDB": "https://python.langchain.com/docs/integrations/vectorstores/bageldb/", "Bagel": "https://python.langchain.com/docs/integrations/vectorstores/bagel/"}, "TigerGraph": {"TigerGraph": "https://python.langchain.com/docs/integrations/graphs/tigergraph/"}, "BlackboardLoader": {"Blackboard": "https://python.langchain.com/docs/integrations/document_loaders/blackboard/"}, "YandexGPT": {"Yandex": "https://python.langchain.com/docs/integrations/providers/yandex/", "YandexGPT": "https://python.langchain.com/docs/integrations/llms/yandex/"}, "UpstashVectorStore": {"Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/"}, "NucliaTextTransformer": {"Nuclia": "https://python.langchain.com/docs/integrations/document_transformers/nuclia_transformer/"}, "NucliaLoader": {"Nuclia": "https://python.langchain.com/docs/integrations/document_loaders/nuclia/"}, "NucliaDB": {"Nuclia": "https://python.langchain.com/docs/integrations/providers/nuclia/", "NucliaDB": "https://python.langchain.com/docs/integrations/vectorstores/nucliadb/"}, "AnalyticDB": {"AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "GoogleApiYoutubeLoader": {"YouTube": "https://python.langchain.com/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/"}, "PromptLayerOpenAI": {"PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer/", "PromptLayer OpenAI": "https://python.langchain.com/docs/integrations/llms/promptlayer_openai/"}, "USearch": {"USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/"}, "EtherscanLoader": {"Etherscan": "https://python.langchain.com/docs/integrations/document_loaders/etherscan/"}, "Arcee": {"Arcee": "https://python.langchain.com/docs/integrations/llms/arcee/"}, "WhyLabsCallbackHandler": {"WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling/"}, "YiLLM": {"01.AI": "https://python.langchain.com/docs/integrations/providers/yi/", "Yi": "https://python.langchain.com/docs/integrations/llms/yi/"}, "IuguLoader": {"Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu/"}, "CouchbaseLoader": {"Couchbase": "https://python.langchain.com/docs/integrations/document_loaders/couchbase/"}, "FlyteCallbackHandler": {"Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/"}, "wandb_tracing_enabled": {"WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/"}, "ManifestWrapper": {"Hazy Research": "https://python.langchain.com/docs/integrations/providers/hazy_research/", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/"}, "OntotextGraphDBGraph": {"Ontotext GraphDB": "https://python.langchain.com/docs/integrations/graphs/ontotext/"}, "OntotextGraphDBQAChain": {"Ontotext GraphDB": "https://python.langchain.com/docs/integrations/graphs/ontotext/"}, "Marqo": {"Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/"}, "IMSDbLoader": {"IMSDb": "https://python.langchain.com/docs/integrations/document_loaders/imsdb/"}, "TiDBLoader": {"TiDB": "https://python.langchain.com/docs/integrations/document_loaders/tidb/"}, "TiDBVectorStore": {"TiDB": "https://python.langchain.com/docs/integrations/providers/tidb/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/"}, "DeepInfra": {"DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra/"}, "RedditPostsLoader": {"Reddit": "https://python.langchain.com/docs/integrations/document_loaders/reddit/"}, "TrelloLoader": {"Trello": "https://python.langchain.com/docs/integrations/document_loaders/trello/"}, "AtlasDB": {"Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas/"}, "SKLearnVectorStore": {"scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/"}, "EverNoteLoader": {"EverNote": "https://python.langchain.com/docs/integrations/document_loaders/evernote/"}, "VDMS": {"VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/"}, "VDMS_Client": {"VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/"}, "TwitterTweetLoader": {"Twitter": "https://python.langchain.com/docs/integrations/document_loaders/twitter/"}, "DiscordChatLoader": {"Discord": "https://python.langchain.com/docs/integrations/document_loaders/discord/"}, "AssemblyAIAudioTranscriptLoader": {"AssemblyAI": "https://python.langchain.com/docs/integrations/providers/assemblyai/", "AssemblyAI Audio Transcripts": "https://python.langchain.com/docs/integrations/document_loaders/assemblyai/"}, "KineticaLoader": {"Kinetica": "https://python.langchain.com/docs/integrations/document_loaders/kinetica/"}, "ClearMLCallbackHandler": {"ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/"}, "CohereRagRetriever": {"Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/"}, "SlackDirectoryLoader": {"Slack": "https://python.langchain.com/docs/integrations/document_loaders/slack/"}, "OllamaEmbeddings": {"Ollama": "https://python.langchain.com/docs/integrations/providers/ollama/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/"}, "HNLoader": {"Hacker News": "https://python.langchain.com/docs/integrations/document_loaders/hacker_news/", "Google Spanner": "https://python.langchain.com/docs/integrations/vectorstores/google_spanner/"}, "CTranslate2": {"CTranslate2": "https://python.langchain.com/docs/integrations/llms/ctranslate2/"}, "QianfanLLMEndpoint": {"Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu Qianfan": "https://python.langchain.com/docs/integrations/llms/baidu_qianfan_endpoint/"}, "BESVectorStore": {"Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/"}, "BaiduVectorDB": {"Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/"}, "Aphrodite": {"PygmalionAI": "https://python.langchain.com/docs/integrations/providers/pygmalionai/", "Aphrodite Engine": "https://python.langchain.com/docs/integrations/llms/aphrodite/"}, "PaiEasEndpoint": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/llms/alibabacloud_pai_eas_endpoint/"}, "MaxComputeLoader": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud MaxCompute": "https://python.langchain.com/docs/integrations/document_loaders/alibaba_cloud_maxcompute/"}, "AlibabaCloudOpenSearch": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "AlibabaCloudOpenSearchSettings": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "DocusaurusLoader": {"Docusaurus": "https://python.langchain.com/docs/integrations/document_loaders/docusaurus/"}, "Annoy": {"Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/"}, "BibtexLoader": {"BibTeX": "https://python.langchain.com/docs/integrations/document_loaders/bibtex/"}, "Yuan2": {"IEIT Systems": "https://python.langchain.com/docs/integrations/providers/ieit_systems/", "Yuan2.0": "https://python.langchain.com/docs/integrations/llms/yuan2/"}, "CassandraLoader": {"Cassandra": "https://python.langchain.com/docs/integrations/document_loaders/cassandra/"}, "Vearch": {"Vearch": "https://python.langchain.com/docs/integrations/vectorstores/vearch/"}, "JoplinLoader": {"Joplin": "https://python.langchain.com/docs/integrations/document_loaders/joplin/"}, "ArthurCallbackHandler": {"Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/"}, "AcreomLoader": {"Acreom": "https://python.langchain.com/docs/integrations/providers/acreom/", "acreom": "https://python.langchain.com/docs/integrations/document_loaders/acreom/"}, "KDBAI": {"KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/"}, "DuckDBLoader": {"DuckDB": "https://python.langchain.com/docs/integrations/document_loaders/duckdb/"}, "Petals": {"Petals": "https://python.langchain.com/docs/integrations/llms/petals/"}, "MomentoVectorIndex": {"Momento": "https://python.langchain.com/docs/integrations/providers/momento/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/"}, "NIBittensorLLM": {"Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "AirtableLoader": {"Airtable": "https://python.langchain.com/docs/integrations/document_loaders/airtable/"}, "LarkSuiteDocLoader": {"ByteDance": "https://python.langchain.com/docs/integrations/providers/byte_dance/", "LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "JavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/"}, "JavelinAIGatewayEmbeddings": {"Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/"}, "ChatJavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/"}, "TensorflowDatasetLoader": {"TensorFlow Datasets": "https://python.langchain.com/docs/integrations/document_loaders/tensorflow_datasets/"}, "Clarifai": {"Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai/"}, "DataheraldTextToSQL": {"Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/"}, "RoamLoader": {"Roam": "https://python.langchain.com/docs/integrations/document_loaders/roam/"}, "RerankConfig": {"Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "SummaryConfig": {"Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "VectaraQueryConfig": {"Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "PebbloRetrievalQA": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "AuthContext": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "ChainInput": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "SemanticContext": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "RedisStore": {"RedisStore": "https://python.langchain.com/docs/integrations/stores/redis/"}, "CassandraByteStore": {"CassandraByteStore": "https://python.langchain.com/docs/integrations/stores/cassandra/"}, "UpstashRedisByteStore": {"UpstashRedisByteStore": "https://python.langchain.com/docs/integrations/stores/upstash_redis/"}, "ApacheDorisSettings": {"Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/"}, "DistanceStrategy": {"Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/", "SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/"}, "SentenceTransformerEmbeddings": {"SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/", "Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/"}, "Vald": {"Vald": "https://python.langchain.com/docs/integrations/vectorstores/vald/"}, "RetrievalQAWithSourcesChain": {"Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/"}, "Yellowbrick": {"Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/"}, "LLMRails": {"LLMRails": "https://python.langchain.com/docs/integrations/vectorstores/llm_rails/"}, "ChatGooglePalm": {"ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/"}, "Hippo": {"Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/"}, "RedisText": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "RedisNum": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "RedisTag": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "RedisFilter": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "VespaStore": {"Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/"}, "NeuralDBVectorStore": {"ThirdAI NeuralDB": "https://python.langchain.com/docs/integrations/vectorstores/thirdai_neuraldb/"}, "VikingDB": {"viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/"}, "VikingDBConfig": {"viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/"}, "ApertureDB": {"ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/"}, "Relyt": {"Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/"}, "oraclevs": {"Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/"}, "VLite": {"vlite": "https://python.langchain.com/docs/integrations/vectorstores/vlite/"}, "AzureCosmosDBNoSqlVectorSearch": {"Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/"}, "DuckDB": {"DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/"}, "StarRocksSettings": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "PathwayVectorClient": {"Pathway": "https://python.langchain.com/docs/integrations/vectorstores/pathway/"}, "DocArrayHnswSearch": {"DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/"}, "TileDB": {"TileDB": "https://python.langchain.com/docs/integrations/vectorstores/tiledb/"}, "EcloudESVectorStore": {"China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/"}, "SurrealDBStore": {"SurrealDB": "https://python.langchain.com/docs/integrations/vectorstores/surrealdb/"}, "ManticoreSearch": {"ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/"}, "ManticoreSearchSettings": {"ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/"}, "HuggingFaceEmbeddings": {"Aerospike": "https://python.langchain.com/docs/integrations/vectorstores/aerospike/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/"}, "Aerospike": {"Aerospike": "https://python.langchain.com/docs/integrations/vectorstores/aerospike/"}, "ElasticVectorSearch": {"Elasticsearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch/"}, "PGVecto_rs": {"PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/"}, "ZepVectorStore": {"Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/"}, "CollectionConfig": {"Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/"}, "openai": {"OpenAI Adapter(Old)": "https://python.langchain.com/docs/integrations/adapters/openai-old/", "OpenAI Adapter": "https://python.langchain.com/docs/integrations/adapters/openai/"}, "RankLLMRerank": {"RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/"}, "AsyncChromiumLoader": {"Beautiful Soup": "https://python.langchain.com/docs/integrations/document_transformers/beautiful_soup/", "Async Chromium": "https://python.langchain.com/docs/integrations/document_loaders/async_chromium/"}, "BeautifulSoupTransformer": {"Beautiful Soup": "https://python.langchain.com/docs/integrations/document_transformers/beautiful_soup/"}, "VolcengineRerank": {"Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/"}, "OpenVINOReranker": {"OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/"}, "create_metadata_tagger": {"OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/"}, "DoctranPropertyExtractor": {"Doctran: extract properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties/"}, "DoctranQATransformer": {"Doctran: interrogate documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document/"}, "CrossEncoderReranker": {"Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/"}, "HuggingFaceCrossEncoder": {"Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/"}, "JinaRerank": {"Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/"}, "DoctranTextTranslator": {"Doctran: language translation": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document/"}, "MarkdownifyTransformer": {"Markdownify": "https://python.langchain.com/docs/integrations/document_transformers/markdownify/"}, "DashScopeRerank": {"DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "XorbitsLoader": {"Xorbits Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/xorbits/"}, "OutlookMessageLoader": {"Email": "https://python.langchain.com/docs/integrations/document_loaders/email/"}, "TranscriptFormat": {"AssemblyAI Audio Transcripts": "https://python.langchain.com/docs/integrations/document_loaders/assemblyai/", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/"}, "ScrapingAntLoader": {"ScrapingAnt": "https://python.langchain.com/docs/integrations/document_loaders/scrapingant/"}, "AirbyteSalesforceLoader": {"Airbyte Salesforce (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_salesforce/"}, "AirbyteCDKLoader": {"Airbyte CDK (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_cdk/"}, "Docx2txtLoader": {"Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word/"}, "RSpaceLoader": {"# replace these ids with some from your own research notes.": "https://python.langchain.com/docs/integrations/document_loaders/rspace/"}, "SeleniumURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url/"}, "PlaywrightURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url/"}, "AirbyteJSONLoader": {"Airbyte JSON (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_json/"}, "AirbyteStripeLoader": {"Airbyte Stripe (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_stripe/"}, "GeoDataFrameLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas/"}, "VectorstoreIndexCreator": {"HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset/", "Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu/", "Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe/", "Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury/"}, "AirbyteTypeformLoader": {"Airbyte Typeform (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_typeform/"}, "MHTMLLoader": {"mhtml": "https://python.langchain.com/docs/integrations/document_loaders/mhtml/"}, "SpiderLoader": {"Spider": "https://python.langchain.com/docs/integrations/document_loaders/spider/"}, "NewsURLLoader": {"News URL": "https://python.langchain.com/docs/integrations/document_loaders/news/"}, "ImageCaptionLoader": {"Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/"}, "LLMSherpaFileLoader": {"LLM Sherpa": "https://python.langchain.com/docs/integrations/document_loaders/llmsherpa/"}, "PyMuPDFLoader": {"PyMuPDF": "https://python.langchain.com/docs/integrations/document_loaders/pymupdf/"}, "ScrapflyLoader": {"# ScrapFly": "https://python.langchain.com/docs/integrations/document_loaders/scrapfly/"}, "TomlLoader": {"TOML": "https://python.langchain.com/docs/integrations/document_loaders/toml/"}, "PsychicLoader": {"Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/"}, "FireCrawlLoader": {"FireCrawl": "https://python.langchain.com/docs/integrations/document_loaders/firecrawl/"}, "LarkSuiteWikiLoader": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "FakeListLLM": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "MergedDataLoader": {"Merge Documents Loader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc/"}, "RecursiveUrlLoader": {"Recursive URL": "https://python.langchain.com/docs/integrations/document_loaders/recursive_url/"}, "PDFPlumberLoader": {"PDFPlumber": "https://python.langchain.com/docs/integrations/document_loaders/pdfplumber/"}, "PyPDFium2Loader": {"PyPDFium2Loader": "https://python.langchain.com/docs/integrations/document_loaders/pypdfium2/"}, "AirbyteHubspotLoader": {"Airbyte Hubspot (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_hubspot/"}, "AirbyteGongLoader": {"Airbyte Gong (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_gong/"}, "AstraDBLoader": {"AstraDB": "https://python.langchain.com/docs/integrations/document_loaders/astradb/"}, "ReadTheDocsLoader": {"ReadTheDocs Documentation": "https://python.langchain.com/docs/integrations/document_loaders/readthedocs_documentation/"}, "MathpixPDFLoader": {"MathPixPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/mathpix/"}, "PolarsDataFrameLoader": {"Polars DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/polars_dataframe/"}, "DataFrameLoader": {"Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/pandas_dataframe/"}, "SurrealDBLoader": {"SurrealDB": "https://python.langchain.com/docs/integrations/document_loaders/surrealdb/"}, "DedocFileLoader": {"Dedoc": "https://python.langchain.com/docs/integrations/document_loaders/dedoc/"}, "DedocPDFLoader": {"Dedoc": "https://python.langchain.com/docs/integrations/document_loaders/dedoc/"}, "DedocAPIFileLoader": {"Dedoc": "https://python.langchain.com/docs/integrations/document_loaders/dedoc/"}, "GoogleApiClient": {"YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/"}, "ConcurrentLoader": {"Concurrent Loader": "https://python.langchain.com/docs/integrations/document_loaders/concurrent/"}, "RSSFeedLoader": {"RSS Feeds": "https://python.langchain.com/docs/integrations/document_loaders/rss/"}, "PebbloSafeLoader": {"Pebblo Safe DocumentLoader": "https://python.langchain.com/docs/integrations/document_loaders/pebblo/"}, "VsdxLoader": {"Vsdx": "https://python.langchain.com/docs/integrations/document_loaders/vsdx/"}, "NotebookLoader": {"Jupyter Notebook": "https://python.langchain.com/docs/integrations/document_loaders/jupyter_notebook/"}, "OracleAutonomousDatabaseLoader": {"Oracle Autonomous Database": "https://python.langchain.com/docs/integrations/document_loaders/oracleadb_loader/"}, "LanguageParser": {"Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/"}, "SRTLoader": {"Subtitle": "https://python.langchain.com/docs/integrations/document_loaders/subtitle/"}, "MastodonTootsLoader": {"Mastodon": "https://python.langchain.com/docs/integrations/document_loaders/mastodon/"}, "AirbyteShopifyLoader": {"Airbyte Shopify (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_shopify/"}, "PyPDFDirectoryLoader": {"PyPDFDirectoryLoader": "https://python.langchain.com/docs/integrations/document_loaders/pypdfdirectory/"}, "PySparkDataFrameLoader": {"PySpark": "https://python.langchain.com/docs/integrations/document_loaders/pyspark_dataframe/"}, "AirbyteZendeskSupportLoader": {"Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_zendesk_support/"}, "CoNLLULoader": {"CoNLL-U": "https://python.langchain.com/docs/integrations/document_loaders/conll-u/"}, "MongodbLoader": {"MongoDB": "https://python.langchain.com/docs/integrations/document_loaders/mongodb/"}, "SitemapLoader": {"Sitemap": "https://python.langchain.com/docs/integrations/document_loaders/sitemap/"}, "YuqueLoader": {"Yuque": "https://python.langchain.com/docs/integrations/document_loaders/yuque/"}, "PDFMinerLoader": {"PDFMiner": "https://python.langchain.com/docs/integrations/document_loaders/pdfminer/"}, "PDFMinerPDFasHTMLLoader": {"PDFMiner": "https://python.langchain.com/docs/integrations/document_loaders/pdfminer/"}, "QuipLoader": {"Quip": "https://python.langchain.com/docs/integrations/document_loaders/quip/"}, "LangSmithLoader": {"LangSmithLoader": "https://python.langchain.com/docs/integrations/document_loaders/langsmith/"}, "MemgraphGraph": {"Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/"}, "GraphSparqlQAChain": {"RDFLib": "https://python.langchain.com/docs/integrations/graphs/rdflib_sparql/"}, "RdfGraph": {"RDFLib": "https://python.langchain.com/docs/integrations/graphs/rdflib_sparql/"}, "NebulaGraphQAChain": {"NebulaGraph": "https://python.langchain.com/docs/integrations/graphs/nebula_graph/"}, "NebulaGraph": {"NebulaGraph": "https://python.langchain.com/docs/integrations/graphs/nebula_graph/"}, "GremlinQAChain": {"Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphIndexCreator": {"NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/"}, "GraphQAChain": {"NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/"}, "NetworkxEntityGraph": {"NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/"}, "HugeGraphQAChain": {"HugeGraph": "https://python.langchain.com/docs/integrations/graphs/hugegraph/"}, "HugeGraph": {"HugeGraph": "https://python.langchain.com/docs/integrations/graphs/hugegraph/"}, "AGEGraph": {"Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/"}, "KuzuQAChain": {"Kuzu": "https://python.langchain.com/docs/integrations/graphs/kuzu_db/"}, "KuzuGraph": {"Kuzu": "https://python.langchain.com/docs/integrations/graphs/kuzu_db/"}, "FalkorDBQAChain": {"FalkorDB": "https://python.langchain.com/docs/integrations/graphs/falkordb/"}, "FalkorDBGraph": {"FalkorDB": "https://python.langchain.com/docs/integrations/graphs/falkordb/"}, "ConversationBufferWindowMemory": {"Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "Solar": {"Solar": "https://python.langchain.com/docs/integrations/llms/solar/"}, "GoogleSearchAPIWrapper": {"Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "IpexLLM": {"IPEX-LLM": "https://python.langchain.com/docs/integrations/llms/ipex_llm/"}, "LLMContentHandler": {"SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/"}, "TextGen": {"TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/"}, "MosaicML": {"MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml/"}, "VolcEngineMaasLLM": {"Volc Engine Maas": "https://python.langchain.com/docs/integrations/llms/volcengine_maas/"}, "KoboldApiLLM": {"KoboldAI API": "https://python.langchain.com/docs/integrations/llms/koboldai/"}, "Konko": {"Konko": "https://python.langchain.com/docs/integrations/llms/konko/"}, "OpaquePrompts": {"OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "TitanTakeoff": {"Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/"}, "Friendli": {"Friendli": "https://python.langchain.com/docs/integrations/llms/friendli/"}, "Databricks": {"Databricks": "https://python.langchain.com/docs/integrations/llms/databricks/"}, "LMFormatEnforcer": {"LM Format Enforcer": "https://python.langchain.com/docs/integrations/llms/lmformatenforcer_experimental/"}, "VLLM": {"vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/"}, "VLLMOpenAI": {"vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/"}, "CustomOpenAIContentFormatter": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "ContentFormatterBase": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "DollyContentFormatter": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "load_llm": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "MapReduceChain": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/"}, "ModelLaboratory": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/"}, "ExLlamaV2": {"ExLlamaV2": "https://python.langchain.com/docs/integrations/llms/exllamav2/"}, "RELLM": {"RELLM": "https://python.langchain.com/docs/integrations/llms/rellm_experimental/"}, "Moonshot": {"MoonshotChat": "https://python.langchain.com/docs/integrations/llms/moonshot/"}, "OpenLM": {"OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm/"}, "CloudflareWorkersAI": {"Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/llms/cloudflare_workersai/"}, "ChatGLM3": {"ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/"}, "ChatGLM": {"ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/"}, "Sambaverse": {"SambaNova": "https://python.langchain.com/docs/integrations/llms/sambanova/"}, "SambaStudio": {"SambaNova": "https://python.langchain.com/docs/integrations/llms/sambanova/"}, "LayerupSecurity": {"Layerup Security": "https://python.langchain.com/docs/integrations/llms/layerup_security/"}, "JsonFormer": {"JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental/"}, "WeightOnlyQuantPipeline": {"Intel Weight-Only Quantization": "https://python.langchain.com/docs/integrations/llms/weight_only_quantization/"}, "Replicate": {"Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/"}, "tracing_v2_enabled": {"Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/"}, "QuerySQLDataBaseTool": {"Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "OPENAI_TEMPLATE": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "create_openai_data_generator": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "DatasetGenerator": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "create_data_generation_chain": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "create_extraction_chain_pydantic": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}} \ No newline at end of file +{"ChatPromptTemplate": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/conversation_retrieval_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/docs/how_to/custom_callbacks/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "How to chain runnables": "https://python.langchain.com/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "How to summarize text in a single LLM call": "https://python.langchain.com/docs/how_to/summarize_stuff/", "How to use multimodal prompts": "https://python.langchain.com/docs/how_to/multimodal_prompts/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Google Vertex AI Search": "https://python.langchain.com/docs/integrations/retrievers/google_vertex_ai_search/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/", "ChatFireworks": "https://python.langchain.com/docs/integrations/chat/fireworks/", "ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "ChatAnthropic": "https://python.langchain.com/docs/integrations/chat/anthropic/", "ChatGroq": "https://python.langchain.com/docs/integrations/chat/groq/", "ChatGoogleGenerativeAI": "https://python.langchain.com/docs/integrations/chat/google_generative_ai/", "OllamaFunctions": "https://python.langchain.com/docs/integrations/chat/ollama_functions/", "ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/openai/", "ChatVertexAI": "https://python.langchain.com/docs/integrations/chat/google_vertex_ai_palm/", "ChatBedrock": "https://python.langchain.com/docs/integrations/chat/bedrock/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "AzureChatOpenAI": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai/", "Llama.cpp": "https://python.langchain.com/docs/integrations/chat/llamacpp/", "ChatMistralAI": "https://python.langchain.com/docs/integrations/chat/mistralai/", "ChatAI21": "https://python.langchain.com/docs/integrations/chat/ai21/", "ChatDatabricks": "https://python.langchain.com/docs/integrations/chat/databricks/", "ChatTogether": "https://python.langchain.com/docs/integrations/chat/together/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ChatWatsonx": "https://python.langchain.com/docs/integrations/chat/ibm_watsonx/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "ChatPerplexity": "https://python.langchain.com/docs/integrations/chat/perplexity/", "ChatUpstage": "https://python.langchain.com/docs/integrations/chat/upstage/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/", "OllamaLLM": "https://python.langchain.com/docs/integrations/llms/ollama/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Build an Extraction Chain": "https://python.langchain.com/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "ChatAnthropic": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to parse XML output": "https://python.langchain.com/docs/how_to/output_parser_xml/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to handle rate limits": "https://python.langchain.com/docs/how_to/chat_model_rate_limiting/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to stream chat model responses": "https://python.langchain.com/docs/how_to/chat_streaming/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/docs/how_to/custom_callbacks/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "Anthropic": "https://python.langchain.com/docs/integrations/providers/anthropic/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "ChatAnthropic": "https://python.langchain.com/docs/integrations/chat/anthropic/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "Build an Agent": "https://python.langchain.com/docs/tutorials/agents/"}, "ChatOpenAI": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to disable parallel tool calling": "https://python.langchain.com/docs/how_to/tool_calling_parallel/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to bind model-specific tools": "https://python.langchain.com/docs/how_to/tools_model_specific/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to use LangChain with different Pydantic versions": "https://python.langchain.com/docs/how_to/pydantic_compatibility/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to pass multimodal data directly to models": "https://python.langchain.com/docs/how_to/multimodal_inputs/", "How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/", "How to use the output-fixing parser": "https://python.langchain.com/docs/how_to/output_parser_fixing/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to get log probabilities": "https://python.langchain.com/docs/how_to/logprobs/", "How to parse YAML output": "https://python.langchain.com/docs/how_to/output_parser_yaml/", "Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "How to parse JSON output": "https://python.langchain.com/docs/how_to/output_parser_json/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to stream tool calls": "https://python.langchain.com/docs/how_to/tool_streaming/", "How to use multimodal prompts": "https://python.langchain.com/docs/how_to/multimodal_prompts/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "LangSmith Chat Datasets": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Outline": "https://python.langchain.com/docs/integrations/retrievers/outline/", "SEC filing": "https://python.langchain.com/docs/integrations/retrievers/sec_filings/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Rememberizer": "https://python.langchain.com/docs/integrations/retrievers/rememberizer/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Kay.ai": "https://python.langchain.com/docs/integrations/retrievers/kay/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/tencentvectordb/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/", "ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/", "PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/", "E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/docs/integrations/tools/azure_dynamic_sessions/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Slack Toolkit": "https://python.langchain.com/docs/integrations/tools/slack/", "Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/", "Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/", "Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/", "Requests Toolkit": "https://python.langchain.com/docs/integrations/tools/requests/", "AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/", "Cogniswitch Toolkit": "https://python.langchain.com/docs/integrations/tools/cogniswitch/", "Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/", "ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/", "OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/", "Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Remembrall": "https://python.langchain.com/docs/integrations/memory/remembrall/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "ChatOpenAI": "https://python.langchain.com/docs/integrations/chat/openai/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/", "Browserbase": "https://python.langchain.com/docs/integrations/document_loaders/browserbase/", "Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/", "RDFLib": "https://python.langchain.com/docs/integrations/graphs/rdflib_sparql/", "NebulaGraph": "https://python.langchain.com/docs/integrations/graphs/nebula_graph/", "HugeGraph": "https://python.langchain.com/docs/integrations/graphs/hugegraph/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Ontotext GraphDB": "https://python.langchain.com/docs/integrations/graphs/ontotext/", "Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "ArangoDB": "https://python.langchain.com/docs/integrations/graphs/arangodb/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/", "Kuzu": "https://python.langchain.com/docs/integrations/graphs/kuzu_db/", "FalkorDB": "https://python.langchain.com/docs/integrations/graphs/falkordb/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/docs/tutorials/graph/"}, "SystemMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "Snowflake Cortex": "https://python.langchain.com/docs/integrations/chat/snowflake/", "# Related": "https://python.langchain.com/docs/integrations/chat/solar/", "ChatHuggingFace": "https://python.langchain.com/docs/integrations/chat/huggingface/", "ChatOctoAI": "https://python.langchain.com/docs/integrations/chat/octoai/", "ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "LlamaEdge": "https://python.langchain.com/docs/integrations/chat/llama_edge/", "ChatKonko": "https://python.langchain.com/docs/integrations/chat/konko/", "GigaChat": "https://python.langchain.com/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/", "ChatFriendli": "https://python.langchain.com/docs/integrations/chat/friendli/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "ChatWatsonx": "https://python.langchain.com/docs/integrations/chat/ibm_watsonx/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "MoonshotChat": "https://python.langchain.com/docs/integrations/chat/moonshot/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/docs/integrations/chat/yandex/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/"}, "HumanMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "Conceptual guide": "https://python.langchain.com/docs/concepts/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to pass multimodal data directly to models": "https://python.langchain.com/docs/how_to/multimodal_inputs/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to pass tool outputs to chat models": "https://python.langchain.com/docs/how_to/tool_results_pass_to_model/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/", "Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Imagen": "https://python.langchain.com/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Snowflake Cortex": "https://python.langchain.com/docs/integrations/chat/snowflake/", "# Related": "https://python.langchain.com/docs/integrations/chat/solar/", "ChatHuggingFace": "https://python.langchain.com/docs/integrations/chat/huggingface/", "AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/chat/alibaba_cloud_pai_eas/", "Chat with Coze Bot": "https://python.langchain.com/docs/integrations/chat/coze/", "ChatOctoAI": "https://python.langchain.com/docs/integrations/chat/octoai/", "ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "DeepInfra": "https://python.langchain.com/docs/integrations/chat/deepinfra/", "ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/", "LlamaEdge": "https://python.langchain.com/docs/integrations/chat/llama_edge/", "VolcEngineMaasChat": "https://python.langchain.com/docs/integrations/chat/volcengine_maas/", "ChatKonko": "https://python.langchain.com/docs/integrations/chat/konko/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/", "GigaChat": "https://python.langchain.com/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/", "ChatFriendli": "https://python.langchain.com/docs/integrations/chat/friendli/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Chat with Baichuan-192K": "https://python.langchain.com/docs/integrations/chat/baichuan/", "QianfanChatEndpoint": "https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint/", "Cohere": "https://python.langchain.com/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ErnieBotChat": "https://python.langchain.com/docs/integrations/chat/ernie/", "ChatWatsonx": "https://python.langchain.com/docs/integrations/chat/ibm_watsonx/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Tencent Hunyuan": "https://python.langchain.com/docs/integrations/chat/tencent_hunyuan/", "MiniMaxChat": "https://python.langchain.com/docs/integrations/chat/minimax/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "PromptLayerChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai/", "SparkLLM Chat": "https://python.langchain.com/docs/integrations/chat/sparkllm/", "MoonshotChat": "https://python.langchain.com/docs/integrations/chat/moonshot/", "Dappier AI": "https://python.langchain.com/docs/integrations/chat/dappier/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/docs/integrations/chat/yandex/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Browserbase": "https://python.langchain.com/docs/integrations/document_loaders/browserbase/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/", "Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build an Agent": "https://python.langchain.com/docs/tutorials/agents/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/"}, "RunnableMap": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/"}, "RunnableLambda": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/docs/langserve/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "PromptTemplate": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to select examples by n-gram overlap": "https://python.langchain.com/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to parse XML output": "https://python.langchain.com/docs/how_to/output_parser_xml/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to parse YAML output": "https://python.langchain.com/docs/how_to/output_parser_yaml/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to partially format prompt templates": "https://python.langchain.com/docs/how_to/prompts_partial/", "How to parse JSON output": "https://python.langchain.com/docs/how_to/output_parser_json/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "How to track token usage for LLMs": "https://python.langchain.com/docs/how_to/llm_token_usage_tracking/", "Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard/", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "AirbyteLoader": "https://python.langchain.com/docs/integrations/document_loaders/airbyte/", "Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/", "Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/", "Fireworks": "https://python.langchain.com/docs/integrations/llms/fireworks/", "OctoAI": "https://python.langchain.com/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra/", "AnthropicLLM": "https://python.langchain.com/docs/integrations/llms/anthropic/", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud/", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all/", "ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml/", "Volc Engine Maas": "https://python.langchain.com/docs/integrations/llms/volcengine_maas/", "CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai/", "OpenAI": "https://python.langchain.com/docs/integrations/llms/openai/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/docs/integrations/llms/gigachat/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/docs/integrations/llms/oci_generative_ai/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/", "Hugging Face Local Pipelines": "https://python.langchain.com/docs/integrations/llms/huggingface_pipelines/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/", "Aphrodite Engine": "https://python.langchain.com/docs/integrations/llms/aphrodite/", "AI21LLM": "https://python.langchain.com/docs/integrations/llms/ai21/", "Cohere": "https://python.langchain.com/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "IBM watsonx.ai": "https://python.langchain.com/docs/integrations/llms/ibm_watsonx/", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/", "ExLlamaV2": "https://python.langchain.com/docs/integrations/llms/exllamav2/", "Minimax": "https://python.langchain.com/docs/integrations/llms/minimax/", "Tongyi Qwen": "https://python.langchain.com/docs/integrations/llms/tongyi/", "Huggingface Endpoints": "https://python.langchain.com/docs/integrations/llms/huggingface_endpoint/", "MLX Local Pipelines": "https://python.langchain.com/docs/integrations/llms/mlx_pipelines/", "Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm/", "Aleph Alpha": "https://python.langchain.com/docs/integrations/llms/aleph_alpha/", "Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/docs/integrations/llms/ctranslate2/", "Google AI": "https://python.langchain.com/docs/integrations/llms/google_ai/", "PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai/", "ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/docs/integrations/llms/petals/", "OpenVINO": "https://python.langchain.com/docs/integrations/llms/openvino/", "Intel Weight-Only Quantization": "https://python.langchain.com/docs/integrations/llms/weight_only_quantization/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "MessagesPlaceholder": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Build an Extraction Chain": "https://python.langchain.com/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "CSVLoader": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to load CSVs": "https://python.langchain.com/docs/how_to/document_loader_csv/", "ChatGPT plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin/", "Aerospike": "https://python.langchain.com/docs/integrations/vectorstores/aerospike/", "CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv/", "Document loaders": "https://python.langchain.com/docs/integrations/document_loaders/index/", "Pebblo Safe DocumentLoader": "https://python.langchain.com/docs/integrations/document_loaders/pebblo/"}, "StrOutputParser": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/refine_docs_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to chain runnables": "https://python.langchain.com/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Google Vertex AI Search": "https://python.langchain.com/docs/integrations/retrievers/google_vertex_ai_search/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "Volc Engine Maas": "https://python.langchain.com/docs/integrations/llms/volcengine_maas/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "AI21LLM": "https://python.langchain.com/docs/integrations/llms/ai21/", "PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a Simple LLM Application with LCEL": "https://python.langchain.com/docs/tutorials/llm_chain/"}, "SimpleJsonOutputParser": {"Conceptual guide": "https://python.langchain.com/docs/concepts/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/"}, "BaseChatModel": {"Contribute Integrations": "https://python.langchain.com/docs/contributing/integrations/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "deprecated": {"Contribute Integrations": "https://python.langchain.com/docs/contributing/integrations/"}, "UnstructuredMarkdownLoader": {"langchain": "https://python.langchain.com/docs/changes/changelog/langchain/", "How to load Markdown": "https://python.langchain.com/docs/how_to/document_loader_markdown/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "UnstructuredMarkdownLoader": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_markdown/"}, "Document": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to create a custom Retriever": "https://python.langchain.com/docs/how_to/custom_retriever/", "How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to load Markdown": "https://python.langchain.com/docs/how_to/document_loader_markdown/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "How to summarize text in a single LLM call": "https://python.langchain.com/docs/how_to/summarize_stuff/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/oracleai/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "ChatGPT plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin/", "Cohere RAG": "https://python.langchain.com/docs/integrations/retrievers/cohere/", "Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid/", "BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25/", "Qdrant Sparse Vector": "https://python.langchain.com/docs/integrations/retrievers/qdrant-sparse/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf/", "Milvus": "https://python.langchain.com/docs/integrations/vectorstores/milvus/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch/", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/vectorstores/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/vectorstores/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/vectorstores/qdrant/", "Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/docs/integrations/tools/oracleai/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "PGVector": "https://python.langchain.com/docs/integrations/vectorstores/pgvector/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/docs/integrations/vectorstores/couchbase/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "Google Firestore (Native Mode)": "https://python.langchain.com/docs/integrations/document_loaders/google_firestore/", "ClickHouse": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse/", "Astra DB Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/astradb/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/docs/integrations/vectorstores/faiss/", "Nuclia": "https://python.langchain.com/docs/integrations/document_transformers/nuclia_transformer/", "AI21SemanticTextSplitter": "https://python.langchain.com/docs/integrations/document_transformers/ai21_semantic_text_splitter/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/", "Doctran: extract properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties/", "Google Translate": "https://python.langchain.com/docs/integrations/document_transformers/google_translate/", "Doctran: interrogate documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document/", "Doctran: language translation": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document/", "TensorFlow Datasets": "https://python.langchain.com/docs/integrations/document_loaders/tensorflow_datasets/", "Google Cloud SQL for MySQL": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_sql_mysql/", "Airbyte Salesforce (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_salesforce/", "Airbyte CDK (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_cdk/", "Airbyte Stripe (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_stripe/", "Copy Paste": "https://python.langchain.com/docs/integrations/document_loaders/copypaste/", "Airbyte Typeform (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_typeform/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Google Firestore in Datastore Mode": "https://python.langchain.com/docs/integrations/document_loaders/google_datastore/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/docs/integrations/document_loaders/oracleai/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Airbyte Hubspot (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_hubspot/", "Airbyte Gong (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_gong/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/document_loaders/google_memorystore_redis/", "Google Bigtable": "https://python.langchain.com/docs/integrations/document_loaders/google_bigtable/", "Google Cloud SQL for SQL server": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_sql_mssql/", "Google El Carro for Oracle Workloads": "https://python.langchain.com/docs/integrations/document_loaders/google_el_carro/", "Airbyte Shopify (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_shopify/", "Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_zendesk_support/", "Google Spanner": "https://python.langchain.com/docs/integrations/document_loaders/google_spanner/", "PDFMiner": "https://python.langchain.com/docs/integrations/document_loaders/pdfminer/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "LLMChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm/", "OctoAI": "https://python.langchain.com/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra/", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud/", "ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml/", "CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai/", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/docs/integrations/llms/gigachat/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Aphrodite Engine": "https://python.langchain.com/docs/integrations/llms/aphrodite/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/", "Minimax": "https://python.langchain.com/docs/integrations/llms/minimax/", "Yuan2.0": "https://python.langchain.com/docs/integrations/llms/yuan2/", "Huggingface Endpoints": "https://python.langchain.com/docs/integrations/llms/huggingface_endpoint/", "Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm/", "Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/docs/integrations/llms/ctranslate2/", "ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/docs/integrations/llms/petals/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "StuffDocumentsChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/stuff_docs_chain/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"}, "create_stuff_documents_chain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/stuff_docs_chain/", "Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to summarize text in a single LLM call": "https://python.langchain.com/docs/how_to/summarize_stuff/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "LLMMathChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_math_chain/"}, "BaseMessage": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_math_chain/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/", "Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/"}, "RunnableConfig": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/multi_prompt_chain/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/refine_docs_chain/", "How to access the RunnableConfig from a tool": "https://python.langchain.com/docs/how_to/tool_configure/", "How to summarize text through iterative refinement": "https://python.langchain.com/docs/how_to/summarize_refine/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "How to pass runtime secrets to runnables": "https://python.langchain.com/docs/how_to/runnable_runtime_secrets/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/"}, "tool": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_math_chain/", "How to disable parallel tool calling": "https://python.langchain.com/docs/how_to/tool_calling_parallel/", "How to use tools in a chain": "https://python.langchain.com/docs/how_to/tools_chain/", "How to access the RunnableConfig from a tool": "https://python.langchain.com/docs/how_to/tool_configure/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to pass multimodal data directly to models": "https://python.langchain.com/docs/how_to/multimodal_inputs/", "How to force models to call a tool": "https://python.langchain.com/docs/how_to/tool_choice/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to stream events from a tool": "https://python.langchain.com/docs/how_to/tool_stream_events/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to pass tool outputs to chat models": "https://python.langchain.com/docs/how_to/tool_results_pass_to_model/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "How to return artifacts from a tool": "https://python.langchain.com/docs/how_to/tool_artifacts/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "How to stream tool calls": "https://python.langchain.com/docs/how_to/tool_streaming/", "How to pass runtime secrets to runnables": "https://python.langchain.com/docs/how_to/runnable_runtime_secrets/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "DeepInfra": "https://python.langchain.com/docs/integrations/chat/deepinfra/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "Llama.cpp": "https://python.langchain.com/docs/integrations/chat/llamacpp/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/", "JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental/"}, "MultiPromptChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/multi_prompt_chain/"}, "ConversationChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/"}, "ConversationBufferMemory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Gradio": "https://python.langchain.com/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "InMemoryChatMessageHistory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/"}, "RunnableWithMessageHistory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/", "Couchbase": "https://python.langchain.com/docs/integrations/memory/couchbase_chat_message_history/", "MongoDB": "https://python.langchain.com/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/docs/integrations/memory/tidb_chat_message_history/", "ChatNVIDIA": "https://python.langchain.com/docs/integrations/chat/nvidia_ai_endpoints/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "BaseChatMessageHistory": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/conversation_chain/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "ConstitutionalChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "ConstitutionalPrinciple": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "OpenAI": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/", "# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to stream responses from an LLM": "https://python.langchain.com/docs/how_to/streaming_llm/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "How to track token usage for LLMs": "https://python.langchain.com/docs/how_to/llm_token_usage_tracking/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/retrievers/self_query/chroma_self_query/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "OpenAI": "https://python.langchain.com/docs/integrations/llms/openai/", "Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/", "Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/", "JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/tools/openweathermap/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "Lemon Agent": "https://python.langchain.com/docs/integrations/tools/lemonai/", "NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/", "OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Label Studio": "https://python.langchain.com/docs/integrations/callbacks/labelstudio/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "Trubrics": "https://python.langchain.com/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "Log10": "https://python.langchain.com/docs/integrations/providers/log10/", "LangChain Decorators \u2728": "https://python.langchain.com/docs/integrations/providers/langchain_decorators/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Helicone": "https://python.langchain.com/docs/integrations/providers/helicone/", "Shale Protocol": "https://python.langchain.com/docs/integrations/providers/shaleprotocol/", "WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Ray Serve": "https://python.langchain.com/docs/integrations/providers/ray_serve/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Amazon Textract ": "https://python.langchain.com/docs/integrations/document_loaders/amazon_textract/", "NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Layerup Security": "https://python.langchain.com/docs/integrations/llms/layerup_security/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "CRITIQUE_PROMPT": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "REVISION_PROMPT": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/constitutional_chain/"}, "WebBaseLoader": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Zep Cloud": "https://python.langchain.com/docs/integrations/vectorstores/zep_cloud/", "Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Merge Documents Loader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc/", "WebBaseLoader": "https://python.langchain.com/docs/integrations/document_loaders/web_base/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "FAISS": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "Faiss": "https://python.langchain.com/docs/integrations/vectorstores/faiss/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "OpenAIEmbeddings": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "Text embedding models": "https://python.langchain.com/docs/how_to/embed_text/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/", "How to split text based on semantic similarity": "https://python.langchain.com/docs/how_to/semantic-chunker/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "OpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/openai/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/", "kNN": "https://python.langchain.com/docs/integrations/retrievers/knn/", "DocArray": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever/", "SVM": "https://python.langchain.com/docs/integrations/retrievers/svm/", "Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/retrievers/self_query/chroma_self_query/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/", "Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "RecursiveCharacterTextSplitter": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to split code": "https://python.langchain.com/docs/how_to/code_splitter/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to recursively split text by characters": "https://python.langchain.com/docs/how_to/recursive_text_splitter/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How to split Markdown by Headers": "https://python.langchain.com/docs/how_to/markdown_header_metadata_splitter/", "How to split by HTML header ": "https://python.langchain.com/docs/how_to/HTML_header_metadata_splitter/", "How to split by HTML sections": "https://python.langchain.com/docs/how_to/HTML_section_aware_splitter/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Google Vertex AI Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/", "Zep Cloud": "https://python.langchain.com/docs/integrations/vectorstores/zep_cloud/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/", "Vearch": "https://python.langchain.com/docs/integrations/vectorstores/vearch/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "ConversationalRetrievalChain": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/conversation_retrieval_chain/", "Outline": "https://python.langchain.com/docs/integrations/retrievers/outline/", "SEC filing": "https://python.langchain.com/docs/integrations/retrievers/sec_filings/", "Rememberizer": "https://python.langchain.com/docs/integrations/retrievers/rememberizer/", "Kay.ai": "https://python.langchain.com/docs/integrations/retrievers/kay/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/"}, "create_history_aware_retriever": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/conversation_retrieval_chain/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "create_retrieval_chain": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "RAGatouille": "https://python.langchain.com/docs/integrations/retrievers/ragatouille/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "MapReduceDocumentsChain": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"}, "ReduceDocumentsChain": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/"}, "CharacterTextSplitter": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to split by character": "https://python.langchain.com/docs/how_to/character_text_splitter/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/retrievers/singlestoredb/", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/docs/integrations/vectorstores/tiledb/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/vectorstores/google_memorystore_redis/", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "acollapse_docs": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "split_list_of_docs": {"# Basic example (short documents)": "https://python.langchain.com/docs/versions/migrating_chains/map_reduce_chain/", "How to summarize text through parallelization": "https://python.langchain.com/docs/how_to/summarize_map_reduce/", "Summarize Text": "https://python.langchain.com/docs/tutorials/summarization/"}, "RefineDocumentsChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/refine_docs_chain/"}, "RetrievalQA": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Bedrock (Knowledge Bases) Retriever": "https://python.langchain.com/docs/integrations/retrievers/bedrock/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/", "Google Vertex AI Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "RunnablePassthrough": {"Load docs": "https://python.langchain.com/docs/versions/migrating_chains/retrieval_qa/", "# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/", "How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to add default invocation args to a Runnable": "https://python.langchain.com/docs/how_to/binding/", "How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "NVIDIA NIMs ": "https://python.langchain.com/docs/integrations/text_embedding/nvidia_ai_endpoints/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/", "ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Milvus Hybrid Search Retriever": "https://python.langchain.com/docs/integrations/retrievers/milvus_hybrid_search/", "Google Vertex AI Search": "https://python.langchain.com/docs/integrations/retrievers/google_vertex_ai_search/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "LLMRouterChain": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/"}, "RouterOutputParser": {"# Legacy": "https://python.langchain.com/docs/versions/migrating_chains/llm_router_chain/"}, "MapRerankDocumentsChain": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/"}, "RegexParser": {"# Example": "https://python.langchain.com/docs/versions/migrating_chains/map_rerank_docs_chain/"}, "TavilySearchResults": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Build an Agent": "https://python.langchain.com/docs/tutorials/agents/"}, "create_retriever_tool": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "create_tool_calling_agent": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to use tools in a chain": "https://python.langchain.com/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/docs/integrations/tools/azure_dynamic_sessions/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/"}, "AgentExecutor": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to use tools in a chain": "https://python.langchain.com/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/docs/how_to/migrate_agent/", "Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/docs/integrations/tools/azure_dynamic_sessions/", "FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/", "Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/", "Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/", "ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/", "Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "AIMessage": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/", "How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Twitter (via Apify)": "https://python.langchain.com/docs/integrations/chat_loaders/twitter/", "Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "Google Imagen": "https://python.langchain.com/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "ChatOllama": "https://python.langchain.com/docs/integrations/chat/ollama/", "ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/", "ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/", "Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "ChatMessageHistory": {"Build an Agent with AgentExecutor (Legacy)": "https://python.langchain.com/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/"}, "Neo4jGraph": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/", "How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/docs/tutorials/graph/"}, "AsyncCallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "CallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "BaseTool": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to use LangChain with different Pydantic versions": "https://python.langchain.com/docs/how_to/pydantic_compatibility/", "How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/", "How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "How to return artifacts from a tool": "https://python.langchain.com/docs/how_to/tool_artifacts/"}, "format_to_openai_function_messages": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/"}, "OpenAIFunctionsAgentOutputParser": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/"}, "convert_to_openai_function": {"How to add a semantic layer over graph database": "https://python.langchain.com/docs/how_to/graph_semantic/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/"}, "BSHTMLLoader": {"How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to load HTML": "https://python.langchain.com/docs/how_to/document_loader_html/", "BSHTMLLoader": "https://python.langchain.com/docs/integrations/document_loaders/bshtml/"}, "TokenTextSplitter": {"How to handle long text when doing extraction": "https://python.langchain.com/docs/how_to/extraction_long_text/", "How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "PyPDFLoader": {"How to load PDFs": "https://python.langchain.com/docs/how_to/document_loader_pdf/", "Google Vertex AI Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/", "PyPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/pypdfloader/", "Merge Documents Loader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc/", "Google Cloud Storage File": "https://python.langchain.com/docs/integrations/document_loaders/google_cloud_storage_file/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/"}, "SQLDatabase": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "SQLDatabase Toolkit": "https://python.langchain.com/docs/integrations/tools/sql_database/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "create_sql_query_chain": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/docs/how_to/sql_query_checking/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "FewShotPromptTemplate": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to select examples by n-gram overlap": "https://python.langchain.com/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "SemanticSimilarityExampleSelector": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_prompting/", "How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/"}, "PydanticOutputParser": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/docs/how_to/output_parser_structured/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/docs/how_to/extraction_parse/", "How to use the output-fixing parser": "https://python.langchain.com/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "AsyncCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock/"}, "BaseCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to create custom callback handlers": "https://python.langchain.com/docs/how_to/custom_callbacks/", "How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all/"}, "LLMResult": {"How to use callbacks in async environments": "https://python.langchain.com/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/docs/how_to/callbacks_attach/", "How to pass callbacks in at runtime": "https://python.langchain.com/docs/how_to/callbacks_runtime/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/"}, "RunnableParallel": {"How to add values to a chain's state": "https://python.langchain.com/docs/how_to/assign/", "How to invoke runnables in parallel": "https://python.langchain.com/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/docs/how_to/passthrough/", "How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to chain runnables": "https://python.langchain.com/docs/how_to/sequence/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/"}, "RunnableBranch": {"How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/"}, "cosine_similarity": {"How to route between sub-chains": "https://python.langchain.com/docs/how_to/routing/"}, "ConfigurableField": {"How to do per-user retrieval": "https://python.langchain.com/docs/how_to/qa_per_user/", "How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/", "How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/"}, "NGramOverlapExampleSelector": {"How to select examples by n-gram overlap": "https://python.langchain.com/docs/how_to/example_selectors_ngram/"}, "get_openai_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to track token usage for LLMs": "https://python.langchain.com/docs/how_to/llm_token_usage_tracking/", "AzureChatOpenAI": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai/"}, "load_tools": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "Google": "https://python.langchain.com/docs/integrations/providers/google/", "ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Golden": "https://python.langchain.com/docs/integrations/providers/golden/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo/", "SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Stack Exchange": "https://python.langchain.com/docs/integrations/providers/stackexchange/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "ChatBedrock": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/", "Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "ChatBedrock": "https://python.langchain.com/docs/integrations/chat/bedrock/", "Amazon Neptune with SPARQL": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_sparql/"}, "get_bedrock_anthropic_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/docs/how_to/chat_token_usage_tracking/"}, "CallbackManagerForLLMRun": {"How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "LLM": {"How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/"}, "GenerationChunk": {"How to create a custom LLM class": "https://python.langchain.com/docs/how_to/custom_llm/"}, "BaseLoader": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/"}, "BaseBlobParser": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/"}, "Blob": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Cloud Document AI": "https://python.langchain.com/docs/integrations/document_transformers/google_docai/"}, "FileSystemBlobLoader": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/"}, "GenericLoader": {"How to create a custom Document Loader": "https://python.langchain.com/docs/how_to/document_loader_custom/", "Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/"}, "LengthBasedExampleSelector": {"How to select examples by length": "https://python.langchain.com/docs/how_to/example_selectors_length_based/"}, "BaseExampleSelector": {"How to use example selectors": "https://python.langchain.com/docs/how_to/example_selectors/"}, "Language": {"How to split code": "https://python.langchain.com/docs/how_to/code_splitter/", "Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/"}, "Chroma": {"How to use few shot examples": "https://python.langchain.com/docs/how_to/few_shot_examples/", "How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/docs/how_to/example_selectors_similarity/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/docs/how_to/query_high_cardinality/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/", "Chroma": "https://python.langchain.com/docs/integrations/vectorstores/chroma/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/", "Build a PDF ingestion and Question/Answering system": "https://python.langchain.com/docs/tutorials/pdf_qa/", "Vector stores and retrievers": "https://python.langchain.com/docs/tutorials/retrievers/"}, "merge_message_runs": {"How to merge consecutive messages of the same type": "https://python.langchain.com/docs/how_to/merge_message_runs/"}, "PydanticToolsParser": {"How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to use chat models to call tools": "https://python.langchain.com/docs/how_to/tool_calling/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/"}, "chain": {"How to handle cases where no queries are generated": "https://python.langchain.com/docs/how_to/query_no_queries/", "How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_queries/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/docs/how_to/query_multiple_retrievers/", "How to run custom functions": "https://python.langchain.com/docs/how_to/functions/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Tavily Search": "https://python.langchain.com/docs/integrations/tools/tavily_search/"}, "trim_messages": {"How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to add memory to chatbots": "https://python.langchain.com/docs/how_to/chatbots_memory/", "Build a Chatbot": "https://python.langchain.com/docs/tutorials/chatbot/"}, "ToolMessage": {"How to trim messages": "https://python.langchain.com/docs/how_to/trim_messages/", "How to do tool/function calling": "https://python.langchain.com/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to return structured data from a model": "https://python.langchain.com/docs/how_to/structured_output/", "How to use few-shot prompting with tool calling": "https://python.langchain.com/docs/how_to/tools_few_shot/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/docs/how_to/query_few_shot/", "Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/docs/integrations/chat/edenai/", "ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/"}, "RecursiveJsonSplitter": {"How to split JSON data": "https://python.langchain.com/docs/how_to/recursive_json_splitter/"}, "FewShotChatMessagePromptTemplate": {"How to use few shot examples in chat models": "https://python.langchain.com/docs/how_to/few_shot_examples_chat/", "Fiddler": "https://python.langchain.com/docs/integrations/callbacks/fiddler/"}, "XMLOutputParser": {"How to parse XML output": "https://python.langchain.com/docs/how_to/output_parser_xml/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/"}, "InjectedToolArg": {"How to pass run time values to tools": "https://python.langchain.com/docs/how_to/tool_runtime/"}, "Runnable": {"How to add a human-in-the-loop for tools": "https://python.langchain.com/docs/how_to/tools_human/", "How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/docs/how_to/dynamic_chain/"}, "StructuredTool": {"How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/", "Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/"}, "GenericFakeChatModel": {"How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "ToolException": {"How to create tools": "https://python.langchain.com/docs/how_to/custom_tools/"}, "AzureAIDocumentIntelligenceLoader": {"How to load Microsoft Office files": "https://python.langchain.com/docs/how_to/document_loader_office_file/", "Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word/", "Microsoft Excel": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_excel/", "Microsoft PowerPoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_powerpoint/", "Azure AI Document Intelligence": "https://python.langchain.com/docs/integrations/document_loaders/azure_document_intelligence/"}, "InMemoryRateLimiter": {"How to handle rate limits": "https://python.langchain.com/docs/how_to/chat_model_rate_limiting/"}, "LongContextReorder": {"How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/docs/how_to/long_context_reorder/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "DatetimeOutputParser": {"How to add fallbacks to a runnable": "https://python.langchain.com/docs/how_to/fallbacks/"}, "CypherQueryCorrector": {"How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/"}, "Schema": {"How to map values to a graph database": "https://python.langchain.com/docs/how_to/graph_mapping/"}, "dumpd": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "dumps": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "load": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "loads": {"How to save and load LangChain objects": "https://python.langchain.com/docs/how_to/serialization/"}, "set_llm_cache": {"How to cache chat model responses": "https://python.langchain.com/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/providers/mongodb_atlas/", "Astra DB": "https://python.langchain.com/docs/integrations/providers/astradb/", "Couchbase": "https://python.langchain.com/docs/integrations/providers/couchbase/", "Redis": "https://python.langchain.com/docs/integrations/providers/redis/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/", "Momento": "https://python.langchain.com/docs/integrations/providers/momento/"}, "InMemoryCache": {"How to cache chat model responses": "https://python.langchain.com/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "SQLiteCache": {"How to cache chat model responses": "https://python.langchain.com/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/docs/integrations/providers/dspy/"}, "create_sql_agent": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/"}, "PythonAstREPLTool": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/"}, "JsonOutputKeyToolsParser": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/"}, "create_pandas_dataframe_agent": {"How to do question answering over CSVs": "https://python.langchain.com/docs/how_to/sql_csv/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/"}, "OutputFixingParser": {"How to use the output-fixing parser": "https://python.langchain.com/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/"}, "FunctionMessage": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "AIMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "Google Cloud Vertex AI": "https://python.langchain.com/docs/integrations/llms/google_vertex_ai_palm/"}, "FunctionMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "HumanMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "SystemMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "ToolMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "AsyncCallbackManagerForLLMRun": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "SimpleChatModel": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "ChatGeneration": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "ChatGenerationChunk": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "ChatResult": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "run_in_executor": {"How to create a custom chat model class": "https://python.langchain.com/docs/how_to/custom_chat_model/"}, "MoveFileTool": {"How to convert tools to OpenAI Functions": "https://python.langchain.com/docs/how_to/tools_as_openai_functions/"}, "filter_messages": {"How to filter messages": "https://python.langchain.com/docs/how_to/filter_messages/"}, "ToolCall": {"How to handle tool errors": "https://python.langchain.com/docs/how_to/tools_error/"}, "SQLRecordManager": {"How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/"}, "index": {"How to use the LangChain indexing API": "https://python.langchain.com/docs/how_to/indexing/"}, "SemanticChunker": {"How to split text based on semantic similarity": "https://python.langchain.com/docs/how_to/semantic-chunker/"}, "InMemoryVectorStore": {"How to convert Runnables as Tools": "https://python.langchain.com/docs/how_to/convert_runnable_to_tool/", "FireworksEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/fireworks/", "OpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/openai/", "OllamaEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/ollama/", "MistralAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/mistralai/", "AI21Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/ai21/", "TogetherEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/together/", "CohereEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/cohere/", "AzureOpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/azureopenai/", "NomicEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/nomic/", "AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon MemoryDB": "https://python.langchain.com/docs/integrations/vectorstores/memorydb/"}, "JsonOutputParser": {"How to stream runnables": "https://python.langchain.com/docs/how_to/streaming/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "How to parse JSON output": "https://python.langchain.com/docs/how_to/output_parser_json/"}, "InMemoryByteStore": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "InMemoryByteStore": "https://python.langchain.com/docs/integrations/stores/in_memory/"}, "TextLoader": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to load documents from a directory": "https://python.langchain.com/docs/how_to/document_loader_directory/", "How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How to use a vectorstore as a retriever": "https://python.langchain.com/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/retrievers/singlestoredb/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/", "Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/docs/integrations/vectorstores/tiledb/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/vectorstores/google_memorystore_redis/", "Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "Faiss (Async)": "https://python.langchain.com/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/", "USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/", "Vearch": "https://python.langchain.com/docs/integrations/vectorstores/vearch/", "Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "MultiVectorRetriever": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "SearchType": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/docs/how_to/multi_vector/", "Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "init_chat_model": {"How to init any model in one line": "https://python.langchain.com/docs/how_to/chat_models_universal_init/", "How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "SQLChatMessageHistory": {"How to add message history": "https://python.langchain.com/docs/how_to/message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/docs/integrations/memory/sql_chat_message_history/", "SQLite": "https://python.langchain.com/docs/integrations/providers/sqlite/"}, "ConfigurableFieldSpec": {"How to add message history": "https://python.langchain.com/docs/how_to/message_history/"}, "LlamaCpp": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/"}, "CallbackManager": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/", "GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/"}, "StreamingStdOutCallbackHandler": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "DeepInfra": "https://python.langchain.com/docs/integrations/chat/deepinfra/", "ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/", "ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "GPT4All": "https://python.langchain.com/docs/integrations/providers/gpt4all/", "Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "Llama.cpp": "https://python.langchain.com/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/", "ExLlamaV2": "https://python.langchain.com/docs/integrations/llms/exllamav2/", "Huggingface Endpoints": "https://python.langchain.com/docs/integrations/llms/huggingface_endpoint/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/"}, "GPT4All": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "PromptLayer": "https://python.langchain.com/docs/integrations/callbacks/promptlayer/", "GPT4All": "https://python.langchain.com/docs/integrations/llms/gpt4all/"}, "Llamafile": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/", "Llamafile": "https://python.langchain.com/docs/integrations/llms/llamafile/"}, "ConditionalPromptSelector": {"Run models locally": "https://python.langchain.com/docs/how_to/local_llms/"}, "HubRunnable": {"How to configure runtime chain internals": "https://python.langchain.com/docs/how_to/configure/"}, "ContextualCompressionRetriever": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/docs/integrations/providers/ragatouille/", "VoyageAI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/", "Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "LLMChainExtractor": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "LLMChainFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "LLMListwiseRerank": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "EmbeddingsFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/"}, "DocumentCompressorPipeline": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/"}, "EmbeddingsRedundantFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/docs/how_to/contextual_compression/", "LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "Comparator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "Comparison": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "Operation": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "Operator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "StructuredQuery": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "ChromaTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/"}, "ElasticsearchTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/docs/how_to/query_constructing_filters/"}, "WikipediaQueryRun": {"How to use built-in tools and toolkits": "https://python.langchain.com/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia/"}, "WikipediaAPIWrapper": {"How to use built-in tools and toolkits": "https://python.langchain.com/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/docs/integrations/tools/wikipedia/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/"}, "CallbackManagerForRetrieverRun": {"How to create a custom Retriever": "https://python.langchain.com/docs/how_to/custom_retriever/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/"}, "BaseRetriever": {"How to create a custom Retriever": "https://python.langchain.com/docs/how_to/custom_retriever/"}, "LLMGraphTransformer": {"How to construct knowledge graphs": "https://python.langchain.com/docs/how_to/graph_constructing/"}, "RetryOutputParser": {"How to retry when a parsing error occurs": "https://python.langchain.com/docs/how_to/output_parser_retry/"}, "TimeWeightedVectorStoreRetriever": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/"}, "InMemoryDocstore": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/", "Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/", "Faiss": "https://python.langchain.com/docs/integrations/vectorstores/faiss/"}, "mock_now": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/docs/how_to/time_weighted_vectorstore/"}, "RunnableGenerator": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "OutputParserException": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "BaseOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/", "How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/"}, "BaseGenerationOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "Generation": {"How to create a custom Output Parser": "https://python.langchain.com/docs/how_to/output_parser_custom/"}, "DirectoryLoader": {"How to load documents from a directory": "https://python.langchain.com/docs/how_to/document_loader_directory/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "PythonLoader": {"How to load documents from a directory": "https://python.langchain.com/docs/how_to/document_loader_directory/"}, "LanceDB": {"How to create and query vector stores": "https://python.langchain.com/docs/how_to/vectorstores/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/"}, "SpacyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/", "spaCy": "https://python.langchain.com/docs/integrations/providers/spacy/", "Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas/"}, "SentenceTransformersTokenTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/"}, "NLTKTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/"}, "KonlpyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/docs/how_to/split_by_token/"}, "WikipediaRetriever": {"How to get a RAG application to add citations": "https://python.langchain.com/docs/how_to/qa_citations/", "WikipediaRetriever": "https://python.langchain.com/docs/integrations/retrievers/wikipedia/", "Wikipedia": "https://python.langchain.com/docs/integrations/providers/wikipedia/"}, "UnstructuredHTMLLoader": {"How to load HTML": "https://python.langchain.com/docs/how_to/document_loader_html/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/"}, "MultiQueryRetriever": {"How to use the MultiQueryRetriever": "https://python.langchain.com/docs/how_to/MultiQueryRetriever/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "GraphCypherQAChain": {"How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/docs/integrations/graphs/neo4j_cypher/", "Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/docs/tutorials/graph/"}, "Neo4jVector": {"How to best prompt for Graph-RAG": "https://python.langchain.com/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/docs/integrations/providers/neo4j/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/"}, "ParentDocumentRetriever": {"How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/"}, "InMemoryStore": {"How to use the Parent Document Retriever": "https://python.langchain.com/docs/how_to/parent_document_retriever/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "YamlOutputParser": {"How to parse YAML output": "https://python.langchain.com/docs/how_to/output_parser_yaml/"}, "PipelinePromptTemplate": {"How to compose prompts together": "https://python.langchain.com/docs/how_to/prompts_composition/"}, "CacheBackedEmbeddings": {"Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/"}, "LocalFileStore": {"Caching": "https://python.langchain.com/docs/how_to/caching_embeddings/", "LocalFileStore": "https://python.langchain.com/docs/integrations/stores/file_system/"}, "Ollama": {"How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/"}, "render_text_description": {"How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/docs/how_to/tools_prompting/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "RunnableSerializable": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/"}, "Run": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/docs/how_to/lcel_cheatsheet/"}, "MarkdownHeaderTextSplitter": {"How to split Markdown by Headers": "https://python.langchain.com/docs/how_to/markdown_header_metadata_splitter/"}, "HTMLHeaderTextSplitter": {"How to split by HTML header ": "https://python.langchain.com/docs/how_to/HTML_header_metadata_splitter/"}, "EnsembleRetriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/"}, "BM25Retriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/docs/how_to/ensemble_retriever/", "BM25": "https://python.langchain.com/docs/integrations/retrievers/bm25/", "Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/"}, "ChatMistralAI": {"Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "ChatMistralAI": "https://python.langchain.com/docs/integrations/chat/mistralai/", "MistralAI": "https://python.langchain.com/docs/integrations/providers/mistralai/", "Build an Extraction Chain": "https://python.langchain.com/docs/tutorials/extraction/"}, "ChatGroq": {"Response metadata": "https://python.langchain.com/docs/how_to/response_metadata/", "ChatGroq": "https://python.langchain.com/docs/integrations/chat/groq/"}, "set_verbose": {"How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "set_debug": {"How to debug your LLM apps": "https://python.langchain.com/docs/how_to/debugging/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/", "TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "MaxMarginalRelevanceExampleSelector": {"How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/docs/how_to/example_selectors_mmr/"}, "AttributeInfo": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/", "DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/retrievers/self_query/chroma_self_query/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/"}, "SelfQueryRetriever": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/", "DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/docs/integrations/providers/chroma/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "Astra DB": "https://python.langchain.com/docs/integrations/providers/astradb/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/docs/integrations/document_loaders/docugami/"}, "StructuredQueryOutputParser": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/"}, "get_query_constructor_prompt": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/docs/how_to/self_query/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/"}, "add": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "cos": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "divide": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "log": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "multiply": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "negate": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "pi": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "power": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "sin": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "subtract": {"How to select examples from a LangSmith dataset": "https://python.langchain.com/docs/how_to/example_selectors_langsmith/"}, "adispatch_custom_event": {"How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/"}, "dispatch_custom_event": {"How to dispatch custom callback events": "https://python.langchain.com/docs/how_to/callbacks_custom_events/"}, "Cassandra": {"Hybrid Search": "https://python.langchain.com/docs/how_to/hybrid/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/", "Apache Cassandra": "https://python.langchain.com/docs/integrations/vectorstores/cassandra/"}, "HTMLSectionSplitter": {"How to split by HTML sections": "https://python.langchain.com/docs/how_to/HTML_section_aware_splitter/"}, "JSONLoader": {"How to load JSON": "https://python.langchain.com/docs/how_to/document_loader_json/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/", "JSONLoader": "https://python.langchain.com/docs/integrations/document_loaders/json/"}, "UpstashRedisCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Upstash Vector": "https://python.langchain.com/docs/integrations/providers/upstash/"}, "RedisCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/docs/integrations/providers/redis/"}, "RedisSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/docs/integrations/providers/redis/"}, "GPTCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "MomentoCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Momento": "https://python.langchain.com/docs/integrations/providers/momento/"}, "SQLAlchemyCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "CassandraCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "CassandraSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "AzureCosmosDBSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "CosmosDBSimilarityType": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/"}, "CosmosDBVectorSearchType": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/"}, "load_summarize_chain": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/", "Infino": "https://python.langchain.com/docs/integrations/callbacks/infino/", "LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "OpenSearchSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "SingleStoreDBSemanticCache": {"Model caches": "https://python.langchain.com/docs/integrations/llm_caching/"}, "map_ai_messages": {"WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "GMail": "https://python.langchain.com/docs/integrations/chat_loaders/gmail/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/"}, "merge_chat_runs": {"WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/"}, "ChatSession": {"WeChat": "https://python.langchain.com/docs/integrations/chat_loaders/wechat/", "Slack": "https://python.langchain.com/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/docs/integrations/chat_loaders/discord/"}, "FolderFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/"}, "SingleFileFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/"}, "convert_messages_for_finetuning": {"Facebook Messenger": "https://python.langchain.com/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/", "LangSmith Chat Datasets": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/"}, "convert_message_to_dict": {"Twitter (via Apify)": "https://python.langchain.com/docs/integrations/chat_loaders/twitter/"}, "convert_pydantic_to_openai_function": {"LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "PydanticOutputFunctionsParser": {"LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "LangSmithRunChatLoader": {"LangSmith LLM Runs": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "GMailLoader": {"GMail": "https://python.langchain.com/docs/integrations/chat_loaders/gmail/"}, "SlackChatLoader": {"Slack": "https://python.langchain.com/docs/integrations/providers/slack/"}, "WhatsAppChatLoader": {"WhatsApp": "https://python.langchain.com/docs/integrations/providers/whatsapp/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/", "WhatsApp Chat": "https://python.langchain.com/docs/integrations/document_loaders/whatsapp_chat/"}, "LangSmithDatasetChatLoader": {"LangSmith Chat Datasets": "https://python.langchain.com/docs/integrations/chat_loaders/langsmith_dataset/"}, "IMessageChatLoader": {"iMessage": "https://python.langchain.com/docs/integrations/chat_loaders/imessage/"}, "TelegramChatLoader": {"Telegram": "https://python.langchain.com/docs/integrations/providers/telegram/"}, "BookendEmbeddings": {"Bookend AI": "https://python.langchain.com/docs/integrations/text_embedding/bookend/"}, "SolarEmbeddings": {"Solar": "https://python.langchain.com/docs/integrations/text_embedding/solar/"}, "HuggingFaceBgeEmbeddings": {"BGE on Hugging Face": "https://python.langchain.com/docs/integrations/text_embedding/bge_huggingface/", "Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface/"}, "IpexLLMBgeEmbeddings": {"Local BGE Embeddings with IPEX-LLM on Intel CPU": "https://python.langchain.com/docs/integrations/text_embedding/ipex_llm/", "Local BGE Embeddings with IPEX-LLM on Intel GPU": "https://python.langchain.com/docs/integrations/text_embedding/ipex_llm_gpu/"}, "QuantizedBiEncoderEmbeddings": {"Embedding Documents using Optimized and Quantized Embedders": "https://python.langchain.com/docs/integrations/text_embedding/optimum_intel/", "Intel": "https://python.langchain.com/docs/integrations/providers/intel/"}, "XinferenceEmbeddings": {"Xorbits inference (Xinference)": "https://python.langchain.com/docs/integrations/text_embedding/xinference/"}, "LLMRailsEmbeddings": {"LLMRails": "https://python.langchain.com/docs/integrations/text_embedding/llm_rails/"}, "AscendEmbeddings": {"# Related": "https://python.langchain.com/docs/integrations/text_embedding/ascend/", "Ascend": "https://python.langchain.com/docs/integrations/providers/ascend/"}, "DeepInfraEmbeddings": {"DeepInfra": "https://python.langchain.com/docs/integrations/providers/deepinfra/"}, "HuggingFaceInferenceAPIEmbeddings": {"Hugging Face": "https://python.langchain.com/docs/integrations/text_embedding/huggingfacehub/"}, "GPT4AllEmbeddings": {"GPT4All": "https://python.langchain.com/docs/integrations/text_embedding/gpt4all/", "ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/"}, "MosaicMLInstructorEmbeddings": {"MosaicML": "https://python.langchain.com/docs/integrations/text_embedding/mosaicml/"}, "QuantizedBgeEmbeddings": {"Intel\u00ae Extension for Transformers Quantized Text Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/itrex/", "Intel": "https://python.langchain.com/docs/integrations/providers/intel/"}, "BedrockEmbeddings": {"Bedrock": "https://python.langchain.com/docs/integrations/text_embedding/bedrock/", "AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon MemoryDB": "https://python.langchain.com/docs/integrations/vectorstores/memorydb/"}, "GigaChatEmbeddings": {"GigaChat": "https://python.langchain.com/docs/integrations/text_embedding/gigachat/", "Salute Devices": "https://python.langchain.com/docs/integrations/providers/salute_devices/"}, "OCIGenAIEmbeddings": {"Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/docs/integrations/text_embedding/oci_generative_ai/", "Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/"}, "OVHCloudEmbeddings": {"OVHcloud": "https://python.langchain.com/docs/integrations/text_embedding/ovhcloud/"}, "FastEmbedEmbeddings": {"FastEmbed by Qdrant": "https://python.langchain.com/docs/integrations/text_embedding/fastembed/"}, "LlamaCppEmbeddings": {"Llama.cpp": "https://python.langchain.com/docs/integrations/providers/llamacpp/"}, "NLPCloudEmbeddings": {"NLP Cloud": "https://python.langchain.com/docs/integrations/text_embedding/nlp_cloud/", "NLPCloud": "https://python.langchain.com/docs/integrations/providers/nlpcloud/"}, "TextEmbedEmbeddings": {"TextEmbed - Embedding Inference Server": "https://python.langchain.com/docs/integrations/text_embedding/textembed/"}, "LaserEmbeddings": {"LASER Language-Agnostic SEntence Representations Embeddings by Meta AI": "https://python.langchain.com/docs/integrations/text_embedding/laser/", "Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/"}, "OpenCLIPEmbeddings": {"OpenClip": "https://python.langchain.com/docs/integrations/text_embedding/open_clip/", "LanceDB": "https://python.langchain.com/docs/integrations/vectorstores/lancedb/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/"}, "TitanTakeoffEmbed": {"Titan Takeoff": "https://python.langchain.com/docs/integrations/text_embedding/titan_takeoff/"}, "MistralAIEmbeddings": {"MistralAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/mistralai/", "MistralAI": "https://python.langchain.com/docs/integrations/providers/mistralai/"}, "SpacyEmbeddings": {"SpaCy": "https://python.langchain.com/docs/integrations/text_embedding/spacy_embedding/", "NanoPQ (Product Quantization)": "https://python.langchain.com/docs/integrations/retrievers/nanopq/", "spaCy": "https://python.langchain.com/docs/integrations/providers/spacy/"}, "DatabricksEmbeddings": {"Databricks": "https://python.langchain.com/docs/integrations/text_embedding/databricks/"}, "BaichuanTextEmbeddings": {"Baichuan Text Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/baichuan/", "Baichuan": "https://python.langchain.com/docs/integrations/providers/baichuan/"}, "TogetherEmbeddings": {"TogetherEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/together/"}, "HuggingFaceInstructEmbeddings": {"Instruct Embeddings on Hugging Face": "https://python.langchain.com/docs/integrations/text_embedding/instruct_embeddings/", "Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface/"}, "OracleEmbeddings": {"Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/"}, "QianfanEmbeddingsEndpoint": {"Baidu Qianfan": "https://python.langchain.com/docs/integrations/text_embedding/baidu_qianfan_endpoint/", "ERNIE": "https://python.langchain.com/docs/integrations/text_embedding/ernie/", "Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/"}, "EdenAiEmbeddings": {"EDEN AI": "https://python.langchain.com/docs/integrations/text_embedding/edenai/", "Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "JohnSnowLabsEmbeddings": {"John Snow Labs": "https://python.langchain.com/docs/integrations/text_embedding/johnsnowlabs_embedding/"}, "ErnieEmbeddings": {"ERNIE": "https://python.langchain.com/docs/integrations/text_embedding/ernie/"}, "ClarifaiEmbeddings": {"Clarifai": "https://python.langchain.com/docs/integrations/providers/clarifai/"}, "AzureOpenAIEmbeddings": {"AzureOpenAIEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/azureopenai/", "AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/"}, "InfinityEmbeddings": {"Infinity": "https://python.langchain.com/docs/integrations/providers/infinity/"}, "InfinityEmbeddingsLocal": {"Infinity": "https://python.langchain.com/docs/integrations/text_embedding/infinity/"}, "AwaEmbeddings": {"AwaDB": "https://python.langchain.com/docs/integrations/providers/awadb/"}, "VolcanoEmbeddings": {"Volc Engine": "https://python.langchain.com/docs/integrations/text_embedding/volcengine/"}, "MiniMaxEmbeddings": {"MiniMax": "https://python.langchain.com/docs/integrations/text_embedding/minimax/", "Minimax": "https://python.langchain.com/docs/integrations/providers/minimax/"}, "FakeEmbeddings": {"Fake Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/fake/", "DocArray": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever/", "Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/", "Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Google Memorystore for Redis": "https://python.langchain.com/docs/integrations/vectorstores/google_memorystore_redis/", "PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/"}, "ClovaEmbeddings": {"Clova Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/clova/"}, "NeMoEmbeddings": {"NVIDIA NeMo embeddings": "https://python.langchain.com/docs/integrations/text_embedding/nemo/"}, "SparkLLMTextEmbeddings": {"SparkLLM Text Embeddings": "https://python.langchain.com/docs/integrations/text_embedding/sparkllm/", "iFlytek": "https://python.langchain.com/docs/integrations/providers/iflytek/"}, "PremAIEmbeddings": {"PremAI": "https://python.langchain.com/docs/integrations/text_embedding/premai/"}, "KNNRetriever": {"Voyage AI": "https://python.langchain.com/docs/integrations/text_embedding/voyageai/", "kNN": "https://python.langchain.com/docs/integrations/retrievers/knn/"}, "SelfHostedEmbeddings": {"Self Hosted": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceEmbeddings": {"Self Hosted": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceInstructEmbeddings": {"Self Hosted": "https://python.langchain.com/docs/integrations/text_embedding/self-hosted/"}, "AnyscaleEmbeddings": {"Anyscale": "https://python.langchain.com/docs/integrations/providers/anyscale/"}, "EmbaasEmbeddings": {"Embaas": "https://python.langchain.com/docs/integrations/text_embedding/embaas/"}, "YandexGPTEmbeddings": {"YandexGPT": "https://python.langchain.com/docs/integrations/text_embedding/yandex/"}, "JinaEmbeddings": {"Jina": "https://python.langchain.com/docs/integrations/providers/jina/", "Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/"}, "AlephAlphaAsymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha/"}, "AlephAlphaSymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/providers/aleph_alpha/"}, "CloudflareWorkersAIEmbeddings": {"Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/text_embedding/cloudflare_workersai/", "Cloudflare": "https://python.langchain.com/docs/integrations/providers/cloudflare/"}, "DashScopeEmbeddings": {"DashScope": "https://python.langchain.com/docs/integrations/text_embedding/dashscope/", "DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/", "DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "TensorflowHubEmbeddings": {"TensorFlow Hub": "https://python.langchain.com/docs/integrations/text_embedding/tensorflowhub/"}, "LlamafileEmbeddings": {"llamafile": "https://python.langchain.com/docs/integrations/text_embedding/llamafile/"}, "GradientEmbeddings": {"Gradient": "https://python.langchain.com/docs/integrations/providers/gradient/"}, "ModelScopeEmbeddings": {"ModelScope": "https://python.langchain.com/docs/integrations/providers/modelscope/"}, "SagemakerEndpointEmbeddings": {"SageMaker": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint/", "AWS": "https://python.langchain.com/docs/integrations/providers/aws/"}, "EmbeddingsContentHandler": {"SageMaker": "https://python.langchain.com/docs/integrations/text_embedding/sagemaker-endpoint/"}, "DocArrayInMemorySearch": {"UpstageEmbeddings": "https://python.langchain.com/docs/integrations/text_embedding/upstage/", "DocArray InMemorySearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_in_memory/"}, "SambaStudioEmbeddings": {"SambaNova": "https://python.langchain.com/docs/integrations/text_embedding/sambanova/"}, "OpenVINOEmbeddings": {"OpenVINO": "https://python.langchain.com/docs/integrations/text_embedding/openvino/", "OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/"}, "OpenVINOBgeEmbeddings": {"OpenVINO": "https://python.langchain.com/docs/integrations/text_embedding/openvino/"}, "LocalAIEmbeddings": {"LocalAI": "https://python.langchain.com/docs/integrations/text_embedding/localai/"}, "AzureAISearchRetriever": {"AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/"}, "AzureSearch": {"AzureAISearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/azure_ai_search/", "Azure AI Search": "https://python.langchain.com/docs/integrations/vectorstores/azuresearch/"}, "RePhraseQueryRetriever": {"RePhraseQuery": "https://python.langchain.com/docs/integrations/retrievers/re_phrase/"}, "YouSearchAPIWrapper": {"You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/"}, "YouRetriever": {"You.com": "https://python.langchain.com/docs/integrations/retrievers/you-retriever/"}, "Kinetica": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "Kinetica": "https://python.langchain.com/docs/integrations/providers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/"}, "KineticaSettings": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/docs/integrations/retrievers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "Kinetica": "https://python.langchain.com/docs/integrations/document_loaders/kinetica/"}, "Jaguar": {"JaguarDB Vector Database": "https://python.langchain.com/docs/integrations/retrievers/jaguar/", "Jaguar": "https://python.langchain.com/docs/integrations/providers/jaguar/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/"}, "BaseStore": {"Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/"}, "VectorStore": {"Fleet AI Context": "https://python.langchain.com/docs/integrations/retrievers/fleet_context/"}, "AskNewsRetriever": {"AskNews": "https://python.langchain.com/docs/integrations/retrievers/asknews/"}, "LLMLinguaCompressor": {"LLMLingua Document Compressor": "https://python.langchain.com/docs/integrations/retrievers/llmlingua/"}, "ElasticSearchBM25Retriever": {"ElasticSearch BM25": "https://python.langchain.com/docs/integrations/retrievers/elastic_search_bm25/"}, "OutlineRetriever": {"Outline": "https://python.langchain.com/docs/integrations/providers/outline/"}, "ZepMemory": {"Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/"}, "SearchScope": {"Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/"}, "ZepRetriever": {"Zep Open Source": "https://python.langchain.com/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/"}, "VespaRetriever": {"Vespa": "https://python.langchain.com/docs/integrations/providers/vespa/"}, "AmazonKendraRetriever": {"Amazon Kendra": "https://python.langchain.com/docs/integrations/retrievers/amazon_kendra_retriever/", "AWS": "https://python.langchain.com/docs/integrations/providers/aws/"}, "AmazonKnowledgeBasesRetriever": {"Bedrock (Knowledge Bases) Retriever": "https://python.langchain.com/docs/integrations/retrievers/bedrock/", "AWS": "https://python.langchain.com/docs/integrations/providers/aws/"}, "Bedrock": {"Bedrock (Knowledge Bases) Retriever": "https://python.langchain.com/docs/integrations/retrievers/bedrock/"}, "CohereEmbeddings": {"Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/"}, "Cohere": {"Cohere reranker": "https://python.langchain.com/docs/integrations/retrievers/cohere-reranker/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/"}, "ZepCloudMemory": {"Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/"}, "ZepCloudRetriever": {"Zep Cloud": "https://python.langchain.com/docs/integrations/retrievers/zep_cloud_memorystore/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Zep": "https://python.langchain.com/docs/integrations/providers/zep/"}, "NeuralDBRetriever": {"**NeuralDB**": "https://python.langchain.com/docs/integrations/retrievers/thirdai_neuraldb/"}, "SingleStoreDB": {"SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/"}, "MetalRetriever": {"Metal": "https://python.langchain.com/docs/integrations/providers/metal/"}, "BreebsRetriever": {"BREEBS (Open Knowledge)": "https://python.langchain.com/docs/integrations/retrievers/breebs/"}, "NanoPQRetriever": {"NanoPQ (Product Quantization)": "https://python.langchain.com/docs/integrations/retrievers/nanopq/"}, "ChatGPTPluginRetriever": {"ChatGPT plugin": "https://python.langchain.com/docs/integrations/retrievers/chatgpt-plugin/", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/"}, "KayAiRetriever": {"SEC filing": "https://python.langchain.com/docs/integrations/retrievers/sec_filings/", "Kay.ai": "https://python.langchain.com/docs/integrations/retrievers/kay/"}, "DriaRetriever": {"Dria": "https://python.langchain.com/docs/integrations/retrievers/dria_index/"}, "DocArrayRetriever": {"DocArray": "https://python.langchain.com/docs/integrations/retrievers/docarray_retriever/"}, "SVMRetriever": {"SVM": "https://python.langchain.com/docs/integrations/retrievers/svm/", "scikit-learn": "https://python.langchain.com/docs/integrations/providers/sklearn/"}, "TavilySearchAPIRetriever": {"TavilySearchAPIRetriever": "https://python.langchain.com/docs/integrations/retrievers/tavily/"}, "PineconeHybridSearchRetriever": {"Pinecone Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/pinecone_hybrid_search/", "Pinecone": "https://python.langchain.com/docs/integrations/providers/pinecone/"}, "DeepLake": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "Deep Lake": "https://python.langchain.com/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "Activeloop Deep Lake": "https://python.langchain.com/docs/integrations/vectorstores/activeloop_deeplake/"}, "AsyncHtmlLoader": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/docs/integrations/document_transformers/html2text/", "Markdownify": "https://python.langchain.com/docs/integrations/document_transformers/markdownify/", "AsyncHtml": "https://python.langchain.com/docs/integrations/document_loaders/async_html/"}, "Html2TextTransformer": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/docs/integrations/document_transformers/html2text/", "Async Chromium": "https://python.langchain.com/docs/integrations/document_loaders/async_chromium/"}, "create_structured_output_chain": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/"}, "HumanMessagePromptTemplate": {"Activeloop Deep Memory": "https://python.langchain.com/docs/integrations/retrievers/activeloop/", "JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Context": "https://python.langchain.com/docs/integrations/callbacks/context/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/"}, "PubMedRetriever": {"PubMed": "https://python.langchain.com/docs/integrations/providers/pubmed/"}, "WeaviateHybridSearchRetriever": {"Weaviate Hybrid Search": "https://python.langchain.com/docs/integrations/retrievers/weaviate-hybrid/"}, "EmbedchainRetriever": {"Embedchain": "https://python.langchain.com/docs/integrations/retrievers/embedchain/"}, "ArxivRetriever": {"ArxivRetriever": "https://python.langchain.com/docs/integrations/retrievers/arxiv/", "Arxiv": "https://python.langchain.com/docs/integrations/providers/arxiv/"}, "QdrantSparseVectorRetriever": {"Qdrant Sparse Vector": "https://python.langchain.com/docs/integrations/retrievers/qdrant-sparse/"}, "DeterministicFakeEmbedding": {"ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/"}, "Embeddings": {"ElasticsearchRetriever": "https://python.langchain.com/docs/integrations/retrievers/elasticsearch_retriever/", "Infinispan": "https://python.langchain.com/docs/integrations/vectorstores/infinispanvs/"}, "RememberizerRetriever": {"Rememberizer": "https://python.langchain.com/docs/integrations/retrievers/rememberizer/"}, "ArceeRetriever": {"Arcee": "https://python.langchain.com/docs/integrations/providers/arcee/"}, "FlashrankRerank": {"FlashRank reranker": "https://python.langchain.com/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/docs/integrations/callbacks/uptrain/"}, "ChaindeskRetriever": {"Chaindesk": "https://python.langchain.com/docs/integrations/providers/chaindesk/"}, "MergerRetriever": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "EmbeddingsClusteringFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/docs/integrations/retrievers/merger_retriever/"}, "TFIDFRetriever": {"TF-IDF": "https://python.langchain.com/docs/integrations/retrievers/tf_idf/"}, "PGVector": {"PGVector (Postgres)": "https://python.langchain.com/docs/integrations/retrievers/self_query/pgvector_self_query/", "PGVector": "https://python.langchain.com/docs/integrations/providers/pgvector/"}, "Weaviate": {"Weaviate": "https://python.langchain.com/docs/integrations/retrievers/self_query/weaviate_self_query/"}, "Vectara": {"Vectara self-querying ": "https://python.langchain.com/docs/integrations/retrievers/self_query/vectara_self_query/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/", "Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/"}, "HanaDB": {"SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "SAP": "https://python.langchain.com/docs/integrations/providers/sap/"}, "HanaTranslator": {"SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/retrievers/self_query/hanavector_self_query/"}, "DashVector": {"DashVector": "https://python.langchain.com/docs/integrations/vectorstores/dashvector/"}, "Tongyi": {"DashVector": "https://python.langchain.com/docs/integrations/retrievers/self_query/dashvector/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Tongyi Qwen": "https://python.langchain.com/docs/integrations/llms/tongyi/"}, "DatabricksVectorSearch": {"Databricks Vector Search": "https://python.langchain.com/docs/integrations/vectorstores/databricks_vector_search/"}, "Dingo": {"DingoDB": "https://python.langchain.com/docs/integrations/vectorstores/dingo/"}, "OpenSearchVectorSearch": {"OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/opensearch/", "AWS": "https://python.langchain.com/docs/integrations/providers/aws/"}, "ConnectionParams": {"Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/"}, "MetaField": {"Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/"}, "TencentVectorDB": {"Tencent Cloud VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/tencentvectordb/", "Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/"}, "TimescaleVector": {"Timescale Vector (Postgres) ": "https://python.langchain.com/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/timescalevector/"}, "AstraDB": {"Astra DB (Cassandra)": "https://python.langchain.com/docs/integrations/retrievers/self_query/astradb/"}, "SupabaseVectorStore": {"Supabase (Postgres)": "https://python.langchain.com/docs/integrations/vectorstores/supabase/"}, "Redis": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "MyScale": {"MyScale": "https://python.langchain.com/docs/integrations/vectorstores/myscale/"}, "MongoDBAtlasVectorSearch": {"MongoDB Atlas": "https://python.langchain.com/docs/integrations/retrievers/self_query/mongodb_atlas/"}, "Qdrant": {"Qdrant": "https://python.langchain.com/docs/integrations/retrievers/self_query/qdrant_self_query/", "Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "AzureChatOpenAI": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/", "AzureChatOpenAI": "https://python.langchain.com/docs/integrations/chat/azure_chat_openai/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "AzureMLOnlineEndpoint": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "AzureOpenAI": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/", "Azure OpenAI": "https://python.langchain.com/docs/integrations/llms/azure_openai/"}, "AzureAIDataLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure AI Data": "https://python.langchain.com/docs/integrations/document_loaders/azure_ai_data/"}, "AzureBlobStorageContainerLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Blob Storage Container": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_container/"}, "AzureBlobStorageFileLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Blob Storage File": "https://python.langchain.com/docs/integrations/document_loaders/azure_blob_storage_file/"}, "OneDriveLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Microsoft OneDrive": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_onedrive/"}, "OneDriveFileLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/"}, "UnstructuredWordDocumentLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word/"}, "UnstructuredExcelLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Microsoft Excel": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_excel/"}, "SharePointLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Microsoft SharePoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_sharepoint/"}, "UnstructuredPowerPointLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Microsoft PowerPoint": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_powerpoint/"}, "OneNoteLoader": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Microsoft OneNote": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_onenote/"}, "AzureCosmosDBVectorSearch": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Cosmos DB Mongo vCore": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db/"}, "BingSearchResults": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/"}, "BingSearchAPIWrapper": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Bing Search": "https://python.langchain.com/docs/integrations/tools/bing_search/"}, "O365Toolkit": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/"}, "PowerBIToolkit": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/"}, "PowerBIDataset": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/"}, "PlayWrightBrowserToolkit": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/"}, "GremlinGraph": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphDocument": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Node": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Relationship": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "PresidioAnonymizer": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/"}, "PresidioReversibleAnonymizer": {"Microsoft": "https://python.langchain.com/docs/integrations/providers/microsoft/"}, "BedrockLLM": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Bedrock": "https://python.langchain.com/docs/integrations/llms/bedrock/"}, "AmazonAPIGateway": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "SagemakerEndpoint": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/"}, "ContentHandlerBase": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/"}, "S3DirectoryLoader": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "AWS S3 Directory": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_directory/"}, "S3FileLoader": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "AWS S3 File": "https://python.langchain.com/docs/integrations/document_loaders/aws_s3_file/"}, "AmazonTextractPDFLoader": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon Textract ": "https://python.langchain.com/docs/integrations/document_loaders/amazon_textract/"}, "AthenaLoader": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Athena": "https://python.langchain.com/docs/integrations/document_loaders/athena/"}, "GlueCatalogLoader": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Glue Catalog": "https://python.langchain.com/docs/integrations/document_loaders/glue_catalog/"}, "DynamoDBChatMessageHistory": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "AWS DynamoDB": "https://python.langchain.com/docs/integrations/memory/aws_dynamodb/"}, "NeptuneGraph": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneAnalyticsGraph": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneOpenCypherQAChain": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneRdfGraph": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_sparql/"}, "NeptuneSparqlQAChain": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/docs/integrations/graphs/amazon_neptune_sparql/"}, "SageMakerCallbackHandler": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/"}, "AmazonComprehendModerationChain": {"AWS": "https://python.langchain.com/docs/integrations/providers/aws/"}, "HuggingFaceHubEmbeddings": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface/"}, "HuggingFaceDatasetLoader": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface/", "HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset/"}, "load_huggingface_tool": {"Hugging Face": "https://python.langchain.com/docs/integrations/providers/huggingface/", "HuggingFace Hub Tools": "https://python.langchain.com/docs/integrations/tools/huggingface_tools/"}, "ChatGPTLoader": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/", "ChatGPT Data": "https://python.langchain.com/docs/integrations/document_loaders/chatgpt_loader/"}, "DallEAPIWrapper": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/"}, "OpenAIModerationChain": {"OpenAI": "https://python.langchain.com/docs/integrations/providers/openai/"}, "GooglePalmEmbeddings": {"Google": "https://python.langchain.com/docs/integrations/providers/google/"}, "ScaNN": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/"}, "GoogleVertexAISearchRetriever": {"Google": "https://python.langchain.com/docs/integrations/providers/google/"}, "GoogleDocumentAIWarehouseRetriever": {"Google": "https://python.langchain.com/docs/integrations/providers/google/"}, "GoogleFinanceQueryRun": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/"}, "GoogleFinanceAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/"}, "GoogleJobsQueryRun": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/"}, "GoogleLensQueryRun": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Lens": "https://python.langchain.com/docs/integrations/tools/google_lens/"}, "GoogleLensAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Lens": "https://python.langchain.com/docs/integrations/tools/google_lens/"}, "GooglePlacesTool": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Places": "https://python.langchain.com/docs/integrations/tools/google_places/"}, "GoogleScholarQueryRun": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Scholar": "https://python.langchain.com/docs/integrations/tools/google_scholar/"}, "GoogleScholarAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Scholar": "https://python.langchain.com/docs/integrations/tools/google_scholar/"}, "GoogleTrendsQueryRun": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Trends": "https://python.langchain.com/docs/integrations/tools/google_trends/"}, "GoogleTrendsAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Trends": "https://python.langchain.com/docs/integrations/tools/google_trends/"}, "SearchApiAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/"}, "SerpAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "SerpAPI": "https://python.langchain.com/docs/integrations/providers/serpapi/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "GoogleSerperAPIWrapper": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/"}, "YouTubeSearchTool": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "YouTube": "https://python.langchain.com/docs/integrations/tools/youtube/"}, "YoutubeAudioLoader": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/"}, "OpenAIWhisperParser": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "YouTube audio": "https://python.langchain.com/docs/integrations/document_loaders/youtube_audio/"}, "YoutubeLoader": {"Google": "https://python.langchain.com/docs/integrations/providers/google/", "YouTube": "https://python.langchain.com/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/", "Build a Query Analysis System": "https://python.langchain.com/docs/tutorials/query_analysis/"}, "AnthropicLLM": {"Anthropic": "https://python.langchain.com/docs/integrations/providers/anthropic/", "AnthropicLLM": "https://python.langchain.com/docs/integrations/llms/anthropic/"}, "AIPluginTool": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/"}, "AgentType": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/", "E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/", "Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/", "Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/tools/openweathermap/", "AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/", "Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/", "Pandas Dataframe": "https://python.langchain.com/docs/integrations/tools/pandas/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Eden AI": "https://python.langchain.com/docs/integrations/tools/edenai_tools/", "Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/", "Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "initialize_agent": {"ChatGPT Plugins": "https://python.langchain.com/docs/integrations/tools/chatgpt_plugins/", "Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/", "Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/", "E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/", "Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/", "Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/", "Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/docs/integrations/tools/google_finance/", "ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/", "AWS Lambda": "https://python.langchain.com/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/docs/integrations/tools/openweathermap/", "AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/", "Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "Office365 Toolkit": "https://python.langchain.com/docs/integrations/tools/office365/", "Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/", "Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/", "GraphQL": "https://python.langchain.com/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/", "Eden AI": "https://python.langchain.com/docs/integrations/tools/edenai_tools/", "Dall-E Image Generator": "https://python.langchain.com/docs/integrations/tools/dalle_image_generator/", "Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/", "Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "Amazon API Gateway": "https://python.langchain.com/docs/integrations/llms/amazon_api_gateway/"}, "DataForSeoAPIWrapper": {"DataForSEO": "https://python.langchain.com/docs/integrations/providers/dataforseo/"}, "Tool": {"DataForSEO": "https://python.langchain.com/docs/integrations/tools/dataforseo/", "Python REPL": "https://python.langchain.com/docs/integrations/tools/python/", "Google Serper": "https://python.langchain.com/docs/integrations/tools/google_serper/", "SerpAPI": "https://python.langchain.com/docs/integrations/tools/serpapi/", "SearchApi": "https://python.langchain.com/docs/integrations/providers/searchapi/", "Google Search": "https://python.langchain.com/docs/integrations/tools/google_search/", "Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/docs/integrations/memory/zep_memory_cloud/", "Serper - Google Search API": "https://python.langchain.com/docs/integrations/providers/google_serper/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "ConneryToolkit": {"Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/"}, "ConneryService": {"Connery Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/connery/", "Connery Toolkit": "https://python.langchain.com/docs/integrations/tools/connery_toolkit/"}, "DataheraldAPIWrapper": {"Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/"}, "SearxSearchWrapper": {"SearxNG Search": "https://python.langchain.com/docs/integrations/tools/searx_search/", "SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx/"}, "JiraToolkit": {"Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/"}, "JiraAPIWrapper": {"Jira Toolkit": "https://python.langchain.com/docs/integrations/tools/jira/"}, "PythonREPL": {"Python REPL": "https://python.langchain.com/docs/integrations/tools/python/"}, "GoogleJobsAPIWrapper": {"Google Jobs": "https://python.langchain.com/docs/integrations/tools/google_jobs/"}, "InfobipAPIWrapper": {"Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/"}, "create_openai_functions_agent": {"Infobip": "https://python.langchain.com/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/", "Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/", "MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/", "You.com Search": "https://python.langchain.com/docs/integrations/tools/you/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "AskNewsSearch": {"AskNews": "https://python.langchain.com/docs/integrations/tools/asknews/"}, "create_pbi_agent": {"PowerBI Toolkit": "https://python.langchain.com/docs/integrations/tools/powerbi/"}, "AzureCognitiveServicesToolkit": {"Azure Cognitive Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_cognitive_services/"}, "E2BDataAnalysisTool": {"E2B Data Analysis": "https://python.langchain.com/docs/integrations/tools/e2b_data_analysis/"}, "SQLDatabaseToolkit": {"SQLDatabase Toolkit": "https://python.langchain.com/docs/integrations/tools/sql_database/", "CnosDB": "https://python.langchain.com/docs/integrations/providers/cnosdb/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "HumanInputRun": {"Human as a tool": "https://python.langchain.com/docs/integrations/tools/human_tools/"}, "FinancialDatasetsToolkit": {"FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/"}, "FinancialDatasetsAPIWrapper": {"FinancialDatasets Toolkit": "https://python.langchain.com/docs/integrations/tools/financial_datasets/"}, "NLAToolkit": {"Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/"}, "Requests": {"Natural Language API Toolkits": "https://python.langchain.com/docs/integrations/tools/openapi_nla/"}, "ZenGuardTool": {"ZenGuard AI": "https://python.langchain.com/docs/integrations/tools/zenguard/"}, "Detector": {"ZenGuard AI": "https://python.langchain.com/docs/integrations/tools/zenguard/"}, "SlackToolkit": {"Slack Toolkit": "https://python.langchain.com/docs/integrations/tools/slack/", "Slack": "https://python.langchain.com/docs/integrations/providers/slack/"}, "SteamToolkit": {"Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/"}, "SteamWebAPIWrapper": {"Steam Toolkit": "https://python.langchain.com/docs/integrations/tools/steam/"}, "create_openai_tools_agent": {"Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Log, Trace, and Monitor": "https://python.langchain.com/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/docs/integrations/providers/portkey/index/"}, "CassandraDatabaseToolkit": {"Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "CassandraDatabase": {"Cassandra Database Toolkit": "https://python.langchain.com/docs/integrations/tools/cassandra_database/"}, "NucliaUnderstandingAPI": {"Nuclia Understanding": "https://python.langchain.com/docs/integrations/tools/nuclia/", "Nuclia": "https://python.langchain.com/docs/integrations/document_loaders/nuclia/"}, "YahooFinanceNewsTool": {"Yahoo Finance News": "https://python.langchain.com/docs/integrations/tools/yahoo_finance_news/"}, "JsonToolkit": {"JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/"}, "create_json_agent": {"JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/"}, "JsonSpec": {"JSON Toolkit": "https://python.langchain.com/docs/integrations/tools/json/", "OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "PolygonToolkit": {"Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonAPIWrapper": {"Polygon IO Toolkit": "https://python.langchain.com/docs/integrations/tools/polygon_toolkit/", "Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "WikidataAPIWrapper": {"Wikidata": "https://python.langchain.com/docs/integrations/tools/wikidata/"}, "WikidataQueryRun": {"Wikidata": "https://python.langchain.com/docs/integrations/tools/wikidata/"}, "TwilioAPIWrapper": {"Twilio": "https://python.langchain.com/docs/integrations/tools/twilio/"}, "IFTTTWebhook": {"IFTTT WebHooks": "https://python.langchain.com/docs/integrations/tools/ifttt/"}, "SemanticScholarQueryRun": {"Semantic Scholar API Tool": "https://python.langchain.com/docs/integrations/tools/semanticscholar/"}, "AlphaVantageAPIWrapper": {"Alpha Vantage": "https://python.langchain.com/docs/integrations/tools/alpha_vantage/"}, "GitHubToolkit": {"Github Toolkit": "https://python.langchain.com/docs/integrations/tools/github/"}, "GitHubAPIWrapper": {"Github Toolkit": "https://python.langchain.com/docs/integrations/tools/github/"}, "ChatDatabricks": {"Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/", "ChatDatabricks": "https://python.langchain.com/docs/integrations/chat/databricks/"}, "UCFunctionToolkit": {"Databricks Unity Catalog (UC)": "https://python.langchain.com/docs/integrations/tools/databricks/"}, "GoogleCloudTextToSpeechTool": {"Google Cloud Text-to-Speech": "https://python.langchain.com/docs/integrations/tools/google_cloud_texttospeech/"}, "ClickupToolkit": {"ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/"}, "ClickupAPIWrapper": {"ClickUp Toolkit": "https://python.langchain.com/docs/integrations/tools/clickup/"}, "SparkSQLToolkit": {"Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/"}, "create_spark_sql_agent": {"Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/"}, "SparkSQL": {"Spark SQL Toolkit": "https://python.langchain.com/docs/integrations/tools/spark_sql/"}, "OracleSummary": {"Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/docs/integrations/tools/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/"}, "StackExchangeAPIWrapper": {"StackExchange": "https://python.langchain.com/docs/integrations/tools/stackexchange/", "Stack Exchange": "https://python.langchain.com/docs/integrations/providers/stackexchange/"}, "RequestsToolkit": {"Requests Toolkit": "https://python.langchain.com/docs/integrations/tools/requests/"}, "TextRequestsWrapper": {"Requests Toolkit": "https://python.langchain.com/docs/integrations/tools/requests/"}, "OpenWeatherMapAPIWrapper": {"OpenWeatherMap": "https://python.langchain.com/docs/integrations/providers/openweathermap/"}, "AINetworkToolkit": {"AINetwork Toolkit": "https://python.langchain.com/docs/integrations/tools/ainetwork/", "AINetwork": "https://python.langchain.com/docs/integrations/providers/ainetwork/"}, "get_from_env": {"Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAI": {"Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAIAPI": {"Passio NutritionAI": "https://python.langchain.com/docs/integrations/tools/passio_nutrition_ai/"}, "PubmedQueryRun": {"PubMed": "https://python.langchain.com/docs/integrations/tools/pubmed/"}, "GradientLLM": {"Memorize": "https://python.langchain.com/docs/integrations/tools/memorize/", "Gradient": "https://python.langchain.com/docs/integrations/llms/gradient/"}, "create_async_playwright_browser": {"PlayWright Browser Toolkit": "https://python.langchain.com/docs/integrations/tools/playwright/"}, "ElevenLabsText2SpeechTool": {"Eleven Labs Text2Speech": "https://python.langchain.com/docs/integrations/tools/eleven_labs_tts/", "ElevenLabs": "https://python.langchain.com/docs/integrations/providers/elevenlabs/"}, "create_conversational_retrieval_agent": {"Cogniswitch Toolkit": "https://python.langchain.com/docs/integrations/tools/cogniswitch/"}, "CogniswitchToolkit": {"Cogniswitch Toolkit": "https://python.langchain.com/docs/integrations/tools/cogniswitch/"}, "BearlyInterpreterTool": {"Bearly Code Interpreter": "https://python.langchain.com/docs/integrations/tools/bearly/"}, "ExecPython": {"Riza Code Interpreter": "https://python.langchain.com/docs/integrations/tools/riza/"}, "ZapierToolkit": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/"}, "ZapierNLAWrapper": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/"}, "SimpleSequentialChain": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "SageMaker Tracking": "https://python.langchain.com/docs/integrations/callbacks/sagemaker_tracking/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/", "Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/", "Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/", "Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/"}, "TransformChain": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/", "Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/"}, "ZapierNLARunAction": {"Zapier Natural Language Actions": "https://python.langchain.com/docs/integrations/tools/zapier/"}, "RivaASR": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "RivaTTS": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "RivaAudioEncoding": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "AudioStream": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/docs/integrations/tools/nvidia_riva/"}, "GoldenQueryAPIWrapper": {"Golden Query": "https://python.langchain.com/docs/integrations/tools/golden_query/", "Golden": "https://python.langchain.com/docs/integrations/providers/golden/"}, "create_react_agent": {"ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/", "Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "Ionic Shopping Tool": "https://python.langchain.com/docs/integrations/tools/ionic_shopping/", "Streamlit": "https://python.langchain.com/docs/integrations/callbacks/streamlit/", "Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/", "Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "ArxivAPIWrapper": {"ArXiv": "https://python.langchain.com/docs/integrations/tools/arxiv/"}, "OpenAIFunctionsAgent": {"Robocorp Toolkit": "https://python.langchain.com/docs/integrations/tools/robocorp/", "Exa Search": "https://python.langchain.com/docs/integrations/tools/exa_search/", "LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/"}, "NasaToolkit": {"NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/"}, "NasaAPIWrapper": {"NASA Toolkit": "https://python.langchain.com/docs/integrations/tools/nasa/"}, "MultionToolkit": {"MultiOn Toolkit": "https://python.langchain.com/docs/integrations/tools/multion/"}, "DuckDuckGoSearchRun": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg/"}, "DuckDuckGoSearchResults": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg/"}, "DuckDuckGoSearchAPIWrapper": {"DuckDuckGo Search": "https://python.langchain.com/docs/integrations/tools/ddg/"}, "SceneXplainTool": {"SceneXplain": "https://python.langchain.com/docs/integrations/tools/sceneXplain/"}, "WolframAlphaAPIWrapper": {"Wolfram Alpha": "https://python.langchain.com/docs/integrations/providers/wolfram_alpha/"}, "AmadeusToolkit": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/"}, "HuggingFaceHub": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/"}, "ReActJsonSingleInputOutputParser": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/", "MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "render_text_description_and_args": {"Amadeus Toolkit": "https://python.langchain.com/docs/integrations/tools/amadeus/"}, "EdenAiExplicitImageTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiObjectDetectionTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiParsingIDTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiParsingInvoiceTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiSpeechToTextTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiTextModerationTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAiTextToSpeechTool": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "EdenAI": {"Eden AI": "https://python.langchain.com/docs/integrations/llms/edenai/"}, "MojeekSearch": {"Mojeek Search": "https://python.langchain.com/docs/integrations/tools/mojeek_search/"}, "RedditSearchRun": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "RedditSearchAPIWrapper": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "RedditSearchSchema": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "StructuredChatAgent": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "ReadOnlySharedMemory": {"Reddit Search ": "https://python.langchain.com/docs/integrations/tools/reddit_search/"}, "YouSearchTool": {"You.com Search": "https://python.langchain.com/docs/integrations/tools/you/"}, "AzureAiServicesToolkit": {"Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/"}, "create_structured_chat_agent": {"Azure AI Services Toolkit": "https://python.langchain.com/docs/integrations/tools/azure_ai_services/"}, "reduce_openapi_spec": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "RequestsWrapper": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "OpenAPIToolkit": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "create_openapi_agent": {"OpenAPI Toolkit": "https://python.langchain.com/docs/integrations/tools/openapi/"}, "GitLabToolkit": {"Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/"}, "GitLabAPIWrapper": {"Gitlab Toolkit": "https://python.langchain.com/docs/integrations/tools/gitlab/"}, "ShellTool": {"Shell (bash)": "https://python.langchain.com/docs/integrations/tools/bash/"}, "PolygonAggregates": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonFinancials": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonLastQuote": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "PolygonTickerNews": {"Polygon IO Toolkit and Tools": "https://python.langchain.com/docs/integrations/tools/polygon/"}, "FileManagementToolkit": {"File System": "https://python.langchain.com/docs/integrations/tools/filesystem/"}, "BraveSearch": {"Brave Search": "https://python.langchain.com/docs/integrations/providers/brave_search/"}, "RedisChatMessageHistory": {"Redis": "https://python.langchain.com/docs/integrations/memory/redis_chat_message_history/"}, "KafkaChatMessageHistory": {"Kafka": "https://python.langchain.com/docs/integrations/memory/kafka_chat_message_history/"}, "ElasticsearchChatMessageHistory": {"Elasticsearch": "https://python.langchain.com/docs/integrations/memory/elasticsearch_chat_message_history/"}, "UpstashRedisChatMessageHistory": {"Upstash Redis": "https://python.langchain.com/docs/integrations/memory/upstash_redis_chat_message_history/", "Upstash Vector": "https://python.langchain.com/docs/integrations/providers/upstash/"}, "ZepCloudChatMessageHistory": {"ZepCloudChatMessageHistory": "https://python.langchain.com/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep": "https://python.langchain.com/docs/integrations/providers/zep/"}, "SingleStoreDBChatMessageHistory": {"SingleStoreDB": "https://python.langchain.com/docs/integrations/providers/singlestoredb/"}, "PostgresChatMessageHistory": {"Postgres": "https://python.langchain.com/docs/integrations/memory/postgres_chat_message_history/"}, "MomentoChatMessageHistory": {"Momento Cache": "https://python.langchain.com/docs/integrations/memory/momento_chat_message_history/", "Momento": "https://python.langchain.com/docs/integrations/providers/momento/"}, "XataChatMessageHistory": {"Xata": "https://python.langchain.com/docs/integrations/providers/xata/"}, "XataVectorStore": {"Xata": "https://python.langchain.com/docs/integrations/vectorstores/xata/"}, "CassandraChatMessageHistory": {"Cassandra ": "https://python.langchain.com/docs/integrations/memory/cassandra_chat_message_history/", "Cassandra": "https://python.langchain.com/docs/integrations/providers/cassandra/"}, "MotorheadMemory": {"Mot\u00f6rhead": "https://python.langchain.com/docs/integrations/memory/motorhead_memory/"}, "AstraDBChatMessageHistory": {"Astra DB ": "https://python.langchain.com/docs/integrations/memory/astradb_chat_message_history/"}, "StreamlitChatMessageHistory": {"Streamlit": "https://python.langchain.com/docs/integrations/providers/streamlit/"}, "Neo4jChatMessageHistory": {"Neo4j": "https://python.langchain.com/docs/integrations/memory/neo4j_chat_message_history/"}, "TiDBChatMessageHistory": {"TiDB": "https://python.langchain.com/docs/integrations/providers/tidb/"}, "RocksetChatMessageHistory": {"Rockset": "https://python.langchain.com/docs/integrations/providers/rockset/"}, "ChatSnowflakeCortex": {"Snowflake Cortex": "https://python.langchain.com/docs/integrations/chat/snowflake/"}, "SolarChat": {"# Related": "https://python.langchain.com/docs/integrations/chat/solar/"}, "AzureMLChatOnlineEndpoint": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/"}, "AzureMLEndpointApiType": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/", "Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "CustomOpenAIChatContentFormatter": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/docs/integrations/chat/azureml_chat_endpoint/"}, "ChatKinetica": {"Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/", "Kinetica": "https://python.langchain.com/docs/integrations/providers/kinetica/"}, "KineticaSqlOutputParser": {"Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/"}, "KineticaSqlResponse": {"Kinetica Language To SQL Chat Model": "https://python.langchain.com/docs/integrations/chat/kinetica/"}, "PaiEasChatEndpoint": {"Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/chat/alibaba_cloud_pai_eas/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "ChatCoze": {"Chat with Coze Bot": "https://python.langchain.com/docs/integrations/chat/coze/"}, "ChatOctoAI": {"ChatOctoAI": "https://python.langchain.com/docs/integrations/chat/octoai/", "OctoAI": "https://python.langchain.com/docs/integrations/providers/octoai/"}, "ChatYi": {"ChatYI": "https://python.langchain.com/docs/integrations/chat/yi/", "01.AI": "https://python.langchain.com/docs/integrations/providers/yi/"}, "ChatDeepInfra": {"DeepInfra": "https://python.langchain.com/docs/integrations/providers/deepinfra/"}, "ChatLiteLLM": {"ChatLiteLLM": "https://python.langchain.com/docs/integrations/chat/litellm/"}, "LlamaEdgeChatService": {"LlamaEdge": "https://python.langchain.com/docs/integrations/chat/llama_edge/"}, "OllamaFunctions": {"OllamaFunctions": "https://python.langchain.com/docs/integrations/chat/ollama_functions/"}, "VolcEngineMaasChat": {"VolcEngineMaasChat": "https://python.langchain.com/docs/integrations/chat/volcengine_maas/"}, "ChatLlamaAPI": {"ChatLlamaAPI": "https://python.langchain.com/docs/integrations/chat/llama_api/"}, "create_tagging_chain": {"ChatLlamaAPI": "https://python.langchain.com/docs/integrations/chat/llama_api/"}, "ChatKonko": {"ChatKonko": "https://python.langchain.com/docs/integrations/chat/konko/"}, "ChatBedrockConverse": {"ChatBedrock": "https://python.langchain.com/docs/integrations/chat/bedrock/"}, "MLXPipeline": {"MLX": "https://python.langchain.com/docs/integrations/providers/mlx/", "MLX Local Pipelines": "https://python.langchain.com/docs/integrations/llms/mlx_pipelines/"}, "ChatMLX": {"MLX": "https://python.langchain.com/docs/integrations/providers/mlx/"}, "format_log_to_str": {"MLX": "https://python.langchain.com/docs/integrations/chat/mlx/"}, "GigaChat": {"GigaChat": "https://python.langchain.com/docs/integrations/llms/gigachat/", "Salute Devices": "https://python.langchain.com/docs/integrations/providers/salute_devices/"}, "JinaChat": {"JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/"}, "SystemMessagePromptTemplate": {"JinaChat": "https://python.langchain.com/docs/integrations/chat/jinachat/", "vLLM Chat": "https://python.langchain.com/docs/integrations/chat/vllm/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/"}, "ChatOCIGenAI": {"ChatOCIGenAI": "https://python.langchain.com/docs/integrations/chat/oci_generative_ai/", "Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/"}, "ChatLlamaCpp": {"Llama.cpp": "https://python.langchain.com/docs/integrations/providers/llamacpp/"}, "convert_to_openai_tool": {"Llama.cpp": "https://python.langchain.com/docs/integrations/chat/llamacpp/"}, "ChatEverlyAI": {"ChatEverlyAI": "https://python.langchain.com/docs/integrations/chat/everlyai/"}, "GPTRouter": {"GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/"}, "GPTRouterModel": {"GPTRouter": "https://python.langchain.com/docs/integrations/chat/gpt_router/"}, "ChatLiteLLMRouter": {"ChatLiteLLMRouter": "https://python.langchain.com/docs/integrations/chat/litellm_router/"}, "ChatFriendli": {"ChatFriendli": "https://python.langchain.com/docs/integrations/chat/friendli/"}, "ChatZhipuAI": {"ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/", "Zhipu AI": "https://python.langchain.com/docs/integrations/providers/zhipuai/"}, "create_json_chat_agent": {"ZHIPU AI": "https://python.langchain.com/docs/integrations/chat/zhipuai/"}, "ChatBaichuan": {"Chat with Baichuan-192K": "https://python.langchain.com/docs/integrations/chat/baichuan/", "Baichuan": "https://python.langchain.com/docs/integrations/providers/baichuan/"}, "ChatTogether": {"ChatTogether": "https://python.langchain.com/docs/integrations/chat/together/", "Together AI": "https://python.langchain.com/docs/integrations/llms/together/"}, "Llama2Chat": {"Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/"}, "HuggingFaceTextGenInference": {"Llama2Chat": "https://python.langchain.com/docs/integrations/chat/llama2_chat/"}, "QianfanChatEndpoint": {"QianfanChatEndpoint": "https://python.langchain.com/docs/integrations/chat/baidu_qianfan_endpoint/", "ErnieBotChat": "https://python.langchain.com/docs/integrations/chat/ernie/", "Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/"}, "ChatEdenAI": {"Eden AI": "https://python.langchain.com/docs/integrations/providers/edenai/"}, "ErnieBotChat": {"ErnieBotChat": "https://python.langchain.com/docs/integrations/chat/ernie/"}, "ChatHunyuan": {"Tencent Hunyuan": "https://python.langchain.com/docs/integrations/chat/tencent_hunyuan/", "Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/"}, "MiniMaxChat": {"MiniMaxChat": "https://python.langchain.com/docs/integrations/chat/minimax/", "Minimax": "https://python.langchain.com/docs/integrations/providers/minimax/"}, "ChatYuan2": {"Yuan2.0": "https://python.langchain.com/docs/integrations/chat/yuan2/", "IEIT Systems": "https://python.langchain.com/docs/integrations/providers/ieit_systems/"}, "ChatTongyi": {"ChatTongyi": "https://python.langchain.com/docs/integrations/chat/tongyi/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "PromptLayerChatOpenAI": {"PromptLayerChatOpenAI": "https://python.langchain.com/docs/integrations/chat/promptlayer_chatopenai/", "PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer/"}, "ChatSparkLLM": {"SparkLLM Chat": "https://python.langchain.com/docs/integrations/chat/sparkllm/", "iFlytek": "https://python.langchain.com/docs/integrations/providers/iflytek/"}, "MoonshotChat": {"MoonshotChat": "https://python.langchain.com/docs/integrations/chat/moonshot/"}, "ChatDappierAI": {"Dappier AI": "https://python.langchain.com/docs/integrations/chat/dappier/"}, "ChatMaritalk": {"Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "MariTalk": "https://python.langchain.com/docs/integrations/providers/maritalk/"}, "OnlinePDFLoader": {"Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "UnstructuredPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_pdfloader/"}, "load_qa_chain": {"Maritalk": "https://python.langchain.com/docs/integrations/chat/maritalk/", "Amazon Textract ": "https://python.langchain.com/docs/integrations/document_loaders/amazon_textract/", "SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/"}, "ChatPremAI": {"ChatPremAI": "https://python.langchain.com/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/docs/integrations/providers/premai/"}, "ChatAnyscale": {"ChatAnyscale": "https://python.langchain.com/docs/integrations/chat/anyscale/", "Anyscale": "https://python.langchain.com/docs/integrations/providers/anyscale/"}, "ChatYandexGPT": {"ChatYandexGPT": "https://python.langchain.com/docs/integrations/chat/yandex/", "Yandex": "https://python.langchain.com/docs/integrations/providers/yandex/"}, "ChatPerplexity": {"ChatPerplexity": "https://python.langchain.com/docs/integrations/chat/perplexity/", "Perplexity": "https://python.langchain.com/docs/integrations/providers/perplexity/"}, "ChatAnthropicTools": {"[Deprecated] Experimental Anthropic Tools Wrapper": "https://python.langchain.com/docs/integrations/chat/anthropic_functions/"}, "DeepEvalCallbackHandler": {"Confident": "https://python.langchain.com/docs/integrations/callbacks/confident/", "Confident AI": "https://python.langchain.com/docs/integrations/providers/confident/"}, "LLMonitorCallbackHandler": {"LLMonitor": "https://python.langchain.com/docs/integrations/providers/llmonitor/"}, "identify": {"LLMonitor": "https://python.langchain.com/docs/integrations/callbacks/llmonitor/"}, "ContextCallbackHandler": {"Context": "https://python.langchain.com/docs/integrations/providers/context/"}, "FiddlerCallbackHandler": {"Fiddler": "https://python.langchain.com/docs/integrations/providers/fiddler/"}, "LabelStudioCallbackHandler": {"Label Studio": "https://python.langchain.com/docs/integrations/providers/labelstudio/"}, "CometTracer": {"Comet Tracing": "https://python.langchain.com/docs/integrations/callbacks/comet_tracing/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/"}, "ArgillaCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/providers/argilla/"}, "StdOutCallbackHandler": {"Argilla": "https://python.langchain.com/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/", "ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "PromptLayerCallbackHandler": {"PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer/"}, "StreamlitCallbackHandler": {"Streamlit": "https://python.langchain.com/docs/integrations/providers/streamlit/", "GPT4All": "https://python.langchain.com/docs/integrations/providers/gpt4all/"}, "UpTrainCallbackHandler": {"UpTrain": "https://python.langchain.com/docs/integrations/providers/uptrain/"}, "TrubricsCallbackHandler": {"Trubrics": "https://python.langchain.com/docs/integrations/providers/trubrics/"}, "InfinoCallbackHandler": {"Infino": "https://python.langchain.com/docs/integrations/providers/infino/"}, "UpstashRatelimitError": {"Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/"}, "UpstashRatelimitHandler": {"Upstash Ratelimit Callback": "https://python.langchain.com/docs/integrations/callbacks/upstash_ratelimit/"}, "FigmaFileLoader": {"Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/"}, "Baseten": {"Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/"}, "WeatherDataLoader": {"Weather": "https://python.langchain.com/docs/integrations/document_loaders/weather/"}, "Tair": {"Tair": "https://python.langchain.com/docs/integrations/vectorstores/tair/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "CollegeConfidentialLoader": {"College Confidential": "https://python.langchain.com/docs/integrations/document_loaders/college_confidential/"}, "RWKV": {"RWKV-4": "https://python.langchain.com/docs/integrations/providers/rwkv/"}, "LakeFSLoader": {"lakeFS": "https://python.langchain.com/docs/integrations/document_loaders/lakefs/"}, "FaunaLoader": {"Fauna": "https://python.langchain.com/docs/integrations/document_loaders/fauna/"}, "OCIGenAI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/docs/integrations/llms/oci_generative_ai/"}, "OCIModelDeploymentVLLM": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OCIModelDeploymentTGI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OracleDocLoader": {"OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/docs/integrations/document_loaders/oracleai/"}, "OracleTextSplitter": {"OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/docs/integrations/document_loaders/oracleai/"}, "OracleVS": {"OracleAI Vector Search": "https://python.langchain.com/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/"}, "Lantern": {"Lantern": "https://python.langchain.com/docs/integrations/vectorstores/lantern/"}, "DropboxLoader": {"Dropbox": "https://python.langchain.com/docs/integrations/document_loaders/dropbox/"}, "ForefrontAI": {"ForefrontAI": "https://python.langchain.com/docs/integrations/llms/forefrontai/"}, "CometCallbackHandler": {"Comet": "https://python.langchain.com/docs/integrations/providers/comet_tracking/"}, "CTransformers": {"C Transformers": "https://python.langchain.com/docs/integrations/llms/ctransformers/"}, "BiliBiliLoader": {"BiliBili": "https://python.langchain.com/docs/integrations/document_loaders/bilibili/"}, "TencentCOSDirectoryLoader": {"Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/", "Tencent COS Directory": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_directory/"}, "TencentCOSFileLoader": {"Tencent": "https://python.langchain.com/docs/integrations/providers/tencent/", "Tencent COS File": "https://python.langchain.com/docs/integrations/document_loaders/tencent_cos_file/"}, "OBSDirectoryLoader": {"Huawei": "https://python.langchain.com/docs/integrations/providers/huawei/", "Huawei OBS Directory": "https://python.langchain.com/docs/integrations/document_loaders/huawei_obs_directory/"}, "OBSFileLoader": {"Huawei": "https://python.langchain.com/docs/integrations/providers/huawei/", "Huawei OBS File": "https://python.langchain.com/docs/integrations/document_loaders/huawei_obs_file/"}, "DiffbotLoader": {"Diffbot": "https://python.langchain.com/docs/integrations/document_loaders/diffbot/"}, "DiffbotGraphTransformer": {"Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/", "Neo4j": "https://python.langchain.com/docs/integrations/providers/neo4j/"}, "DeepSparse": {"DeepSparse": "https://python.langchain.com/docs/integrations/llms/deepsparse/"}, "AimCallbackHandler": {"Aim": "https://python.langchain.com/docs/integrations/providers/aim_tracking/"}, "ModernTreasuryLoader": {"Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury/"}, "GitHubIssuesLoader": {"GitHub": "https://python.langchain.com/docs/integrations/document_loaders/github/"}, "GithubFileLoader": {"GitHub": "https://python.langchain.com/docs/integrations/document_loaders/github/"}, "Banana": {"Banana": "https://python.langchain.com/docs/integrations/llms/banana/"}, "InfinispanVS": {"Infinispan VS": "https://python.langchain.com/docs/integrations/providers/infinispanvs/", "Infinispan": "https://python.langchain.com/docs/integrations/vectorstores/infinispanvs/"}, "CerebriumAI": {"CerebriumAI": "https://python.langchain.com/docs/integrations/llms/cerebriumai/"}, "GutenbergLoader": {"Gutenberg": "https://python.langchain.com/docs/integrations/document_loaders/gutenberg/"}, "WikipediaLoader": {"Wikipedia": "https://python.langchain.com/docs/integrations/document_loaders/wikipedia/", "Diffbot": "https://python.langchain.com/docs/integrations/graphs/diffbot/"}, "ConfluenceLoader": {"Confluence": "https://python.langchain.com/docs/integrations/document_loaders/confluence/"}, "Predibase": {"Predibase": "https://python.langchain.com/docs/integrations/llms/predibase/"}, "Beam": {"Beam": "https://python.langchain.com/docs/integrations/llms/beam/"}, "GrobidParser": {"Grobid": "https://python.langchain.com/docs/integrations/document_loaders/grobid/"}, "Typesense": {"Typesense": "https://python.langchain.com/docs/integrations/vectorstores/typesense/"}, "Hologres": {"Hologres": "https://python.langchain.com/docs/integrations/vectorstores/hologres/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "ArangoGraph": {"ArangoDB": "https://python.langchain.com/docs/integrations/graphs/arangodb/"}, "ArangoGraphQAChain": {"ArangoDB": "https://python.langchain.com/docs/integrations/graphs/arangodb/"}, "ArcGISLoader": {"ArcGIS": "https://python.langchain.com/docs/integrations/document_loaders/arcgis/"}, "WandbCallbackHandler": {"Weights & Biases": "https://python.langchain.com/docs/integrations/providers/wandb_tracking/"}, "ObsidianLoader": {"Obsidian": "https://python.langchain.com/docs/integrations/document_loaders/obsidian/"}, "BrowserbaseLoader": {"Browserbase": "https://python.langchain.com/docs/integrations/document_loaders/browserbase/"}, "OctoAIEndpoint": {"OctoAI": "https://python.langchain.com/docs/integrations/llms/octoai/"}, "OctoAIEmbeddings": {"OctoAI": "https://python.langchain.com/docs/integrations/providers/octoai/"}, "Nebula": {"Nebula": "https://python.langchain.com/docs/integrations/providers/symblai_nebula/", "Nebula (Symbl.ai)": "https://python.langchain.com/docs/integrations/llms/symblai_nebula/"}, "Writer": {"Writer": "https://python.langchain.com/docs/integrations/llms/writer/"}, "BaichuanLLM": {"Baichuan": "https://python.langchain.com/docs/integrations/providers/baichuan/", "Baichuan LLM": "https://python.langchain.com/docs/integrations/llms/baichuan/"}, "ApacheDoris": {"Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/"}, "ZepCloudVectorStore": {"Zep": "https://python.langchain.com/docs/integrations/providers/zep/", "Zep Cloud": "https://python.langchain.com/docs/integrations/vectorstores/zep_cloud/"}, "BrowserlessLoader": {"Browserless": "https://python.langchain.com/docs/integrations/document_loaders/browserless/"}, "AZLyricsLoader": {"AZLyrics": "https://python.langchain.com/docs/integrations/document_loaders/azlyrics/"}, "ToMarkdownLoader": {"2Markdown": "https://python.langchain.com/docs/integrations/document_loaders/tomarkdown/"}, "SparkLLM": {"iFlytek": "https://python.langchain.com/docs/integrations/providers/iflytek/", "SparkLLM": "https://python.langchain.com/docs/integrations/llms/sparkllm/"}, "Mlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/"}, "MlflowEmbeddings": {"MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/"}, "ChatMlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/docs/integrations/providers/mlflow/"}, "GitLoader": {"Git": "https://python.langchain.com/docs/integrations/document_loaders/git/"}, "MlflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/"}, "MlflowAIGatewayEmbeddings": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/"}, "ChatMLflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/docs/integrations/providers/mlflow_ai_gateway/"}, "Tigris": {"Tigris": "https://python.langchain.com/docs/integrations/vectorstores/tigris/"}, "Meilisearch": {"Meilisearch": "https://python.langchain.com/docs/integrations/vectorstores/meilisearch/"}, "SQLDatabaseChain": {"Rebuff": "https://python.langchain.com/docs/integrations/providers/rebuff/"}, "SnowflakeLoader": {"Snowflake": "https://python.langchain.com/docs/integrations/document_loaders/snowflake/"}, "CubeSemanticLoader": {"Cube": "https://python.langchain.com/docs/integrations/providers/cube/", "Cube Semantic Layer": "https://python.langchain.com/docs/integrations/document_loaders/cube_semantic/"}, "Clickhouse": {"ClickHouse": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse/"}, "ClickhouseSettings": {"ClickHouse": "https://python.langchain.com/docs/integrations/vectorstores/clickhouse/"}, "TelegramChatFileLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram/"}, "TelegramChatApiLoader": {"Telegram": "https://python.langchain.com/docs/integrations/document_loaders/telegram/"}, "PredictionGuard": {"Prediction Guard": "https://python.langchain.com/docs/integrations/llms/predictionguard/"}, "Together": {"Together AI": "https://python.langchain.com/docs/integrations/llms/together/"}, "NotionDirectoryLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion/", "Notion DB 2/2": "https://python.langchain.com/docs/integrations/document_loaders/notion/"}, "NotionDBLoader": {"Notion DB": "https://python.langchain.com/docs/integrations/providers/notion/", "Notion DB 2/2": "https://python.langchain.com/docs/integrations/document_loaders/notiondb/"}, "MWDumpLoader": {"MediaWikiDump": "https://python.langchain.com/docs/integrations/providers/mediawikidump/", "MediaWiki Dump": "https://python.langchain.com/docs/integrations/document_loaders/mediawikidump/"}, "BraveSearchLoader": {"Brave Search": "https://python.langchain.com/docs/integrations/document_loaders/brave_search/"}, "StarRocks": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "GooseAI": {"GooseAI": "https://python.langchain.com/docs/integrations/llms/gooseai/"}, "DatadogLogsLoader": {"Datadog Logs": "https://python.langchain.com/docs/integrations/document_loaders/datadog_logs/"}, "ApifyWrapper": {"Apify": "https://python.langchain.com/docs/integrations/providers/apify/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/"}, "ApifyDatasetLoader": {"Apify": "https://python.langchain.com/docs/integrations/providers/apify/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/"}, "NLPCloud": {"NLPCloud": "https://python.langchain.com/docs/integrations/providers/nlpcloud/", "NLP Cloud": "https://python.langchain.com/docs/integrations/llms/nlpcloud/"}, "Milvus": {"Milvus": "https://python.langchain.com/docs/integrations/providers/milvus/", "Zilliz": "https://python.langchain.com/docs/integrations/vectorstores/zilliz/"}, "SemaDB": {"SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/"}, "GitbookLoader": {"GitBook": "https://python.langchain.com/docs/integrations/document_loaders/gitbook/"}, "Rockset": {"Rockset": "https://python.langchain.com/docs/integrations/vectorstores/rockset/"}, "RocksetLoader": {"Rockset": "https://python.langchain.com/docs/integrations/document_loaders/rockset/"}, "Minimax": {"Minimax": "https://python.langchain.com/docs/integrations/llms/minimax/"}, "UnstructuredCHMLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/"}, "UnstructuredCSVLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "CSV": "https://python.langchain.com/docs/integrations/document_loaders/csv/"}, "UnstructuredEmailLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Email": "https://python.langchain.com/docs/integrations/document_loaders/email/"}, "UnstructuredEPubLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "EPub ": "https://python.langchain.com/docs/integrations/document_loaders/epub/"}, "UnstructuredFileIOLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Google Drive": "https://python.langchain.com/docs/integrations/document_loaders/google_drive/"}, "UnstructuredImageLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Images": "https://python.langchain.com/docs/integrations/document_loaders/image/"}, "UnstructuredODTLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Open Document Format (ODT)": "https://python.langchain.com/docs/integrations/document_loaders/odt/"}, "UnstructuredOrgModeLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "Org-mode": "https://python.langchain.com/docs/integrations/document_loaders/org_mode/"}, "UnstructuredPDFLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "UnstructuredPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/unstructured_pdfloader/"}, "UnstructuredRSTLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "RST": "https://python.langchain.com/docs/integrations/document_loaders/rst/"}, "UnstructuredRTFLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/"}, "UnstructuredTSVLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "TSV": "https://python.langchain.com/docs/integrations/document_loaders/tsv/"}, "UnstructuredURLLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "URL": "https://python.langchain.com/docs/integrations/document_loaders/url/"}, "UnstructuredXMLLoader": {"Unstructured": "https://python.langchain.com/docs/integrations/providers/unstructured/", "UnstructuredXMLLoader": "https://python.langchain.com/docs/integrations/document_loaders/xml/"}, "SelfHostedPipeline": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/"}, "SelfHostedHuggingFaceLLM": {"Runhouse": "https://python.langchain.com/docs/integrations/llms/runhouse/"}, "MlflowCallbackHandler": {"MLflow": "https://python.langchain.com/docs/integrations/providers/mlflow_tracking/"}, "SpreedlyLoader": {"Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly/"}, "OpenLLM": {"OpenLLM": "https://python.langchain.com/docs/integrations/llms/openllm/"}, "PubMedLoader": {"PubMed": "https://python.langchain.com/docs/integrations/document_loaders/pubmed/"}, "SearxSearchResults": {"SearxNG Search API": "https://python.langchain.com/docs/integrations/providers/searx/"}, "Modal": {"Modal": "https://python.langchain.com/docs/integrations/llms/modal/"}, "OpenCityDataLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas/", "Open City Data": "https://python.langchain.com/docs/integrations/document_loaders/open_city_data/"}, "PGEmbedding": {"Postgres Embedding": "https://python.langchain.com/docs/integrations/vectorstores/pgembedding/"}, "SQLiteVSS": {"SQLite": "https://python.langchain.com/docs/integrations/providers/sqlite/", "SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/"}, "Xinference": {"Xorbits Inference (Xinference)": "https://python.langchain.com/docs/integrations/llms/xinference/"}, "IFixitLoader": {"iFixit": "https://python.langchain.com/docs/integrations/document_loaders/ifixit/"}, "AlephAlpha": {"Aleph Alpha": "https://python.langchain.com/docs/integrations/llms/aleph_alpha/"}, "PipelineAI": {"PipelineAI": "https://python.langchain.com/docs/integrations/llms/pipelineai/"}, "FacebookChatLoader": {"Facebook - Meta": "https://python.langchain.com/docs/integrations/providers/facebook/", "Facebook Chat": "https://python.langchain.com/docs/integrations/document_loaders/facebook_chat/"}, "Epsilla": {"Epsilla": "https://python.langchain.com/docs/integrations/vectorstores/epsilla/"}, "AwaDB": {"AwaDB": "https://python.langchain.com/docs/integrations/vectorstores/awadb/"}, "ArxivLoader": {"Arxiv": "https://python.langchain.com/docs/integrations/providers/arxiv/", "ArxivLoader": "https://python.langchain.com/docs/integrations/document_loaders/arxiv/"}, "BlockchainDocumentLoader": {"Alchemy": "https://python.langchain.com/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain/"}, "BlockchainType": {"Alchemy": "https://python.langchain.com/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/docs/integrations/document_loaders/blockchain/"}, "Anyscale": {"Anyscale": "https://python.langchain.com/docs/integrations/llms/anyscale/"}, "StripeLoader": {"Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe/"}, "StochasticAI": {"StochasticAI": "https://python.langchain.com/docs/integrations/llms/stochasticai/"}, "Bagel": {"BagelDB": "https://python.langchain.com/docs/integrations/vectorstores/bageldb/", "Bagel": "https://python.langchain.com/docs/integrations/vectorstores/bagel/"}, "TigerGraph": {"TigerGraph": "https://python.langchain.com/docs/integrations/graphs/tigergraph/"}, "BlackboardLoader": {"Blackboard": "https://python.langchain.com/docs/integrations/document_loaders/blackboard/"}, "YandexGPT": {"Yandex": "https://python.langchain.com/docs/integrations/providers/yandex/", "YandexGPT": "https://python.langchain.com/docs/integrations/llms/yandex/"}, "UpstashVectorStore": {"Upstash Vector": "https://python.langchain.com/docs/integrations/vectorstores/upstash/"}, "NucliaTextTransformer": {"Nuclia": "https://python.langchain.com/docs/integrations/document_transformers/nuclia_transformer/"}, "NucliaLoader": {"Nuclia": "https://python.langchain.com/docs/integrations/document_loaders/nuclia/"}, "NucliaDB": {"Nuclia": "https://python.langchain.com/docs/integrations/providers/nuclia/", "NucliaDB": "https://python.langchain.com/docs/integrations/vectorstores/nucliadb/"}, "AnalyticDB": {"AnalyticDB": "https://python.langchain.com/docs/integrations/vectorstores/analyticdb/", "Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/"}, "GoogleApiYoutubeLoader": {"YouTube": "https://python.langchain.com/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/"}, "PromptLayerOpenAI": {"PromptLayer": "https://python.langchain.com/docs/integrations/providers/promptlayer/", "PromptLayer OpenAI": "https://python.langchain.com/docs/integrations/llms/promptlayer_openai/"}, "USearch": {"USearch": "https://python.langchain.com/docs/integrations/vectorstores/usearch/"}, "EtherscanLoader": {"Etherscan": "https://python.langchain.com/docs/integrations/document_loaders/etherscan/"}, "Arcee": {"Arcee": "https://python.langchain.com/docs/integrations/llms/arcee/"}, "WhyLabsCallbackHandler": {"WhyLabs": "https://python.langchain.com/docs/integrations/providers/whylabs_profiling/"}, "YiLLM": {"01.AI": "https://python.langchain.com/docs/integrations/providers/yi/", "Yi": "https://python.langchain.com/docs/integrations/llms/yi/"}, "IuguLoader": {"Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu/"}, "CouchbaseLoader": {"Couchbase": "https://python.langchain.com/docs/integrations/document_loaders/couchbase/"}, "FlyteCallbackHandler": {"Flyte": "https://python.langchain.com/docs/integrations/providers/flyte/"}, "wandb_tracing_enabled": {"WandB Tracing": "https://python.langchain.com/docs/integrations/providers/wandb_tracing/"}, "ManifestWrapper": {"Hazy Research": "https://python.langchain.com/docs/integrations/providers/hazy_research/", "Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/"}, "OntotextGraphDBGraph": {"Ontotext GraphDB": "https://python.langchain.com/docs/integrations/graphs/ontotext/"}, "OntotextGraphDBQAChain": {"Ontotext GraphDB": "https://python.langchain.com/docs/integrations/graphs/ontotext/"}, "Marqo": {"Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/"}, "IMSDbLoader": {"IMSDb": "https://python.langchain.com/docs/integrations/document_loaders/imsdb/"}, "TiDBLoader": {"TiDB": "https://python.langchain.com/docs/integrations/document_loaders/tidb/"}, "TiDBVectorStore": {"TiDB": "https://python.langchain.com/docs/integrations/providers/tidb/", "TiDB Vector": "https://python.langchain.com/docs/integrations/vectorstores/tidb_vector/"}, "DeepInfra": {"DeepInfra": "https://python.langchain.com/docs/integrations/llms/deepinfra/"}, "RedditPostsLoader": {"Reddit": "https://python.langchain.com/docs/integrations/document_loaders/reddit/"}, "TrelloLoader": {"Trello": "https://python.langchain.com/docs/integrations/document_loaders/trello/"}, "AtlasDB": {"Atlas": "https://python.langchain.com/docs/integrations/vectorstores/atlas/"}, "SKLearnVectorStore": {"scikit-learn": "https://python.langchain.com/docs/integrations/vectorstores/sklearn/"}, "EverNoteLoader": {"EverNote": "https://python.langchain.com/docs/integrations/document_loaders/evernote/"}, "VDMS": {"VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/"}, "VDMS_Client": {"VDMS": "https://python.langchain.com/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/docs/integrations/vectorstores/vdms/"}, "TwitterTweetLoader": {"Twitter": "https://python.langchain.com/docs/integrations/document_loaders/twitter/"}, "DiscordChatLoader": {"Discord": "https://python.langchain.com/docs/integrations/document_loaders/discord/"}, "AssemblyAIAudioTranscriptLoader": {"AssemblyAI": "https://python.langchain.com/docs/integrations/providers/assemblyai/", "AssemblyAI Audio Transcripts": "https://python.langchain.com/docs/integrations/document_loaders/assemblyai/"}, "KineticaLoader": {"Kinetica": "https://python.langchain.com/docs/integrations/document_loaders/kinetica/"}, "ClearMLCallbackHandler": {"ClearML": "https://python.langchain.com/docs/integrations/providers/clearml_tracking/"}, "CohereRagRetriever": {"Cohere": "https://python.langchain.com/docs/integrations/providers/cohere/"}, "SlackDirectoryLoader": {"Slack": "https://python.langchain.com/docs/integrations/document_loaders/slack/"}, "OllamaEmbeddings": {"Ollama": "https://python.langchain.com/docs/integrations/providers/ollama/", "ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/"}, "HNLoader": {"Hacker News": "https://python.langchain.com/docs/integrations/document_loaders/hacker_news/", "Google Spanner": "https://python.langchain.com/docs/integrations/vectorstores/google_spanner/"}, "CTranslate2": {"CTranslate2": "https://python.langchain.com/docs/integrations/llms/ctranslate2/"}, "QianfanLLMEndpoint": {"Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu Qianfan": "https://python.langchain.com/docs/integrations/llms/baidu_qianfan_endpoint/"}, "BESVectorStore": {"Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/baiducloud_vector_search/"}, "BaiduVectorDB": {"Baidu": "https://python.langchain.com/docs/integrations/providers/baidu/", "Baidu VectorDB": "https://python.langchain.com/docs/integrations/vectorstores/baiduvectordb/"}, "Aphrodite": {"PygmalionAI": "https://python.langchain.com/docs/integrations/providers/pygmalionai/", "Aphrodite Engine": "https://python.langchain.com/docs/integrations/llms/aphrodite/"}, "PaiEasEndpoint": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/docs/integrations/llms/alibabacloud_pai_eas_endpoint/"}, "MaxComputeLoader": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud MaxCompute": "https://python.langchain.com/docs/integrations/document_loaders/alibaba_cloud_maxcompute/"}, "AlibabaCloudOpenSearch": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "AlibabaCloudOpenSearchSettings": {"Alibaba Cloud": "https://python.langchain.com/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "DocusaurusLoader": {"Docusaurus": "https://python.langchain.com/docs/integrations/document_loaders/docusaurus/"}, "Annoy": {"Annoy": "https://python.langchain.com/docs/integrations/vectorstores/annoy/"}, "BibtexLoader": {"BibTeX": "https://python.langchain.com/docs/integrations/document_loaders/bibtex/"}, "Yuan2": {"IEIT Systems": "https://python.langchain.com/docs/integrations/providers/ieit_systems/", "Yuan2.0": "https://python.langchain.com/docs/integrations/llms/yuan2/"}, "CassandraLoader": {"Cassandra": "https://python.langchain.com/docs/integrations/document_loaders/cassandra/"}, "Vearch": {"Vearch": "https://python.langchain.com/docs/integrations/vectorstores/vearch/"}, "JoplinLoader": {"Joplin": "https://python.langchain.com/docs/integrations/document_loaders/joplin/"}, "ArthurCallbackHandler": {"Arthur": "https://python.langchain.com/docs/integrations/providers/arthur_tracking/"}, "AcreomLoader": {"Acreom": "https://python.langchain.com/docs/integrations/providers/acreom/", "acreom": "https://python.langchain.com/docs/integrations/document_loaders/acreom/"}, "KDBAI": {"KDB.AI": "https://python.langchain.com/docs/integrations/vectorstores/kdbai/"}, "DuckDBLoader": {"DuckDB": "https://python.langchain.com/docs/integrations/document_loaders/duckdb/"}, "Petals": {"Petals": "https://python.langchain.com/docs/integrations/llms/petals/"}, "MomentoVectorIndex": {"Momento": "https://python.langchain.com/docs/integrations/providers/momento/", "Momento Vector Index (MVI)": "https://python.langchain.com/docs/integrations/vectorstores/momento_vector_index/"}, "NIBittensorLLM": {"Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "AirtableLoader": {"Airtable": "https://python.langchain.com/docs/integrations/document_loaders/airtable/"}, "LarkSuiteDocLoader": {"ByteDance": "https://python.langchain.com/docs/integrations/providers/byte_dance/", "LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "JavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/"}, "JavelinAIGatewayEmbeddings": {"Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/"}, "ChatJavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/docs/integrations/llms/javelin/"}, "TensorflowDatasetLoader": {"TensorFlow Datasets": "https://python.langchain.com/docs/integrations/document_loaders/tensorflow_datasets/"}, "Clarifai": {"Clarifai": "https://python.langchain.com/docs/integrations/llms/clarifai/"}, "DataheraldTextToSQL": {"Dataherald": "https://python.langchain.com/docs/integrations/providers/dataherald/"}, "RoamLoader": {"Roam": "https://python.langchain.com/docs/integrations/document_loaders/roam/"}, "RerankConfig": {"Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "SummaryConfig": {"Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "VectaraQueryConfig": {"Vectara Chat": "https://python.langchain.com/docs/integrations/providers/vectara/vectara_chat/", "Vectara": "https://python.langchain.com/docs/integrations/vectorstores/vectara/"}, "PebbloRetrievalQA": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "AuthContext": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "ChainInput": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "SemanticContext": {"Identity-enabled RAG using PebbloRetrievalQA": "https://python.langchain.com/docs/integrations/providers/pebblo/pebblo_retrieval_qa/"}, "RedisStore": {"RedisStore": "https://python.langchain.com/docs/integrations/stores/redis/"}, "CassandraByteStore": {"CassandraByteStore": "https://python.langchain.com/docs/integrations/stores/cassandra/"}, "UpstashRedisByteStore": {"UpstashRedisByteStore": "https://python.langchain.com/docs/integrations/stores/upstash_redis/"}, "ApacheDorisSettings": {"Apache Doris": "https://python.langchain.com/docs/integrations/vectorstores/apache_doris/"}, "DistanceStrategy": {"Kinetica Vectorstore API": "https://python.langchain.com/docs/integrations/vectorstores/kinetica/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/docs/integrations/vectorstores/sap_hanavector/", "SingleStoreDB": "https://python.langchain.com/docs/integrations/vectorstores/singlestoredb/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/", "SemaDB": "https://python.langchain.com/docs/integrations/vectorstores/semadb/"}, "SentenceTransformerEmbeddings": {"SQLite-VSS": "https://python.langchain.com/docs/integrations/vectorstores/sqlitevss/", "Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/"}, "Vald": {"Vald": "https://python.langchain.com/docs/integrations/vectorstores/vald/"}, "RetrievalQAWithSourcesChain": {"Weaviate": "https://python.langchain.com/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/docs/integrations/vectorstores/jaguar/", "Neo4j Vector Index": "https://python.langchain.com/docs/integrations/vectorstores/neo4jvector/", "Marqo": "https://python.langchain.com/docs/integrations/vectorstores/marqo/", "Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/"}, "Yellowbrick": {"Yellowbrick": "https://python.langchain.com/docs/integrations/vectorstores/yellowbrick/"}, "LLMRails": {"LLMRails": "https://python.langchain.com/docs/integrations/vectorstores/llm_rails/"}, "ChatGooglePalm": {"ScaNN": "https://python.langchain.com/docs/integrations/vectorstores/scann/"}, "Hippo": {"Hippo": "https://python.langchain.com/docs/integrations/vectorstores/hippo/"}, "RedisText": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "RedisNum": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "RedisTag": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "RedisFilter": {"Redis": "https://python.langchain.com/docs/integrations/vectorstores/redis/"}, "VespaStore": {"Vespa": "https://python.langchain.com/docs/integrations/vectorstores/vespa/"}, "NeuralDBVectorStore": {"ThirdAI NeuralDB": "https://python.langchain.com/docs/integrations/vectorstores/thirdai_neuraldb/"}, "VikingDB": {"viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/"}, "VikingDBConfig": {"viking DB": "https://python.langchain.com/docs/integrations/vectorstores/vikingdb/"}, "ApertureDB": {"ApertureDB": "https://python.langchain.com/docs/integrations/vectorstores/aperturedb/"}, "Relyt": {"Relyt": "https://python.langchain.com/docs/integrations/vectorstores/relyt/"}, "oraclevs": {"Oracle AI Vector Search: Vector Store": "https://python.langchain.com/docs/integrations/vectorstores/oracle/"}, "VLite": {"vlite": "https://python.langchain.com/docs/integrations/vectorstores/vlite/"}, "AzureCosmosDBNoSqlVectorSearch": {"Azure Cosmos DB No SQL": "https://python.langchain.com/docs/integrations/vectorstores/azure_cosmos_db_no_sql/"}, "DuckDB": {"DuckDB": "https://python.langchain.com/docs/integrations/vectorstores/duckdb/"}, "StarRocksSettings": {"StarRocks": "https://python.langchain.com/docs/integrations/vectorstores/starrocks/"}, "PathwayVectorClient": {"Pathway": "https://python.langchain.com/docs/integrations/vectorstores/pathway/"}, "DocArrayHnswSearch": {"DocArray HnswSearch": "https://python.langchain.com/docs/integrations/vectorstores/docarray_hnsw/"}, "TileDB": {"TileDB": "https://python.langchain.com/docs/integrations/vectorstores/tiledb/"}, "EcloudESVectorStore": {"China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/docs/integrations/vectorstores/ecloud_vector_search/"}, "SurrealDBStore": {"SurrealDB": "https://python.langchain.com/docs/integrations/vectorstores/surrealdb/"}, "ManticoreSearch": {"ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/"}, "ManticoreSearchSettings": {"ManticoreSearch VectorStore": "https://python.langchain.com/docs/integrations/vectorstores/manticore_search/"}, "HuggingFaceEmbeddings": {"Aerospike": "https://python.langchain.com/docs/integrations/vectorstores/aerospike/", "self-query-qdrant": "https://python.langchain.com/docs/templates/self-query-qdrant/"}, "Aerospike": {"Aerospike": "https://python.langchain.com/docs/integrations/vectorstores/aerospike/"}, "ElasticVectorSearch": {"Elasticsearch": "https://python.langchain.com/docs/integrations/vectorstores/elasticsearch/"}, "PGVecto_rs": {"PGVecto.rs": "https://python.langchain.com/docs/integrations/vectorstores/pgvecto_rs/"}, "ZepVectorStore": {"Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/"}, "CollectionConfig": {"Zep": "https://python.langchain.com/docs/integrations/vectorstores/zep/"}, "openai": {"OpenAI Adapter(Old)": "https://python.langchain.com/docs/integrations/adapters/openai-old/", "OpenAI Adapter": "https://python.langchain.com/docs/integrations/adapters/openai/"}, "RankLLMRerank": {"RankLLM Reranker": "https://python.langchain.com/docs/integrations/document_transformers/rankllm-reranker/"}, "AsyncChromiumLoader": {"Beautiful Soup": "https://python.langchain.com/docs/integrations/document_transformers/beautiful_soup/", "Async Chromium": "https://python.langchain.com/docs/integrations/document_loaders/async_chromium/"}, "BeautifulSoupTransformer": {"Beautiful Soup": "https://python.langchain.com/docs/integrations/document_transformers/beautiful_soup/"}, "VolcengineRerank": {"Volcengine Reranker": "https://python.langchain.com/docs/integrations/document_transformers/volcengine_rerank/"}, "OpenVINOReranker": {"OpenVINO Reranker": "https://python.langchain.com/docs/integrations/document_transformers/openvino_rerank/"}, "create_metadata_tagger": {"OpenAI metadata tagger": "https://python.langchain.com/docs/integrations/document_transformers/openai_metadata_tagger/"}, "DoctranPropertyExtractor": {"Doctran: extract properties": "https://python.langchain.com/docs/integrations/document_transformers/doctran_extract_properties/"}, "DoctranQATransformer": {"Doctran: interrogate documents": "https://python.langchain.com/docs/integrations/document_transformers/doctran_interrogate_document/"}, "CrossEncoderReranker": {"Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/"}, "HuggingFaceCrossEncoder": {"Cross Encoder Reranker": "https://python.langchain.com/docs/integrations/document_transformers/cross_encoder_reranker/"}, "JinaRerank": {"Jina Reranker": "https://python.langchain.com/docs/integrations/document_transformers/jina_rerank/"}, "DoctranTextTranslator": {"Doctran: language translation": "https://python.langchain.com/docs/integrations/document_transformers/doctran_translate_document/"}, "MarkdownifyTransformer": {"Markdownify": "https://python.langchain.com/docs/integrations/document_transformers/markdownify/"}, "DashScopeRerank": {"DashScope Reranker": "https://python.langchain.com/docs/integrations/document_transformers/dashscope_rerank/"}, "XorbitsLoader": {"Xorbits Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/xorbits/"}, "OutlookMessageLoader": {"Email": "https://python.langchain.com/docs/integrations/document_loaders/email/"}, "TranscriptFormat": {"AssemblyAI Audio Transcripts": "https://python.langchain.com/docs/integrations/document_loaders/assemblyai/", "YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/"}, "ScrapingAntLoader": {"ScrapingAnt": "https://python.langchain.com/docs/integrations/document_loaders/scrapingant/"}, "AirbyteSalesforceLoader": {"Airbyte Salesforce (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_salesforce/"}, "AirbyteCDKLoader": {"Airbyte CDK (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_cdk/"}, "Docx2txtLoader": {"Microsoft Word": "https://python.langchain.com/docs/integrations/document_loaders/microsoft_word/"}, "RSpaceLoader": {"# replace these ids with some from your own research notes.": "https://python.langchain.com/docs/integrations/document_loaders/rspace/"}, "SeleniumURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url/"}, "PlaywrightURLLoader": {"URL": "https://python.langchain.com/docs/integrations/document_loaders/url/"}, "AirbyteJSONLoader": {"Airbyte JSON (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_json/"}, "AirbyteStripeLoader": {"Airbyte Stripe (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_stripe/"}, "GeoDataFrameLoader": {"Geopandas": "https://python.langchain.com/docs/integrations/document_loaders/geopandas/"}, "VectorstoreIndexCreator": {"HuggingFace dataset": "https://python.langchain.com/docs/integrations/document_loaders/hugging_face_dataset/", "Spreedly": "https://python.langchain.com/docs/integrations/document_loaders/spreedly/", "Figma": "https://python.langchain.com/docs/integrations/document_loaders/figma/", "Apify Dataset": "https://python.langchain.com/docs/integrations/document_loaders/apify_dataset/", "Iugu": "https://python.langchain.com/docs/integrations/document_loaders/iugu/", "Stripe": "https://python.langchain.com/docs/integrations/document_loaders/stripe/", "Modern Treasury": "https://python.langchain.com/docs/integrations/document_loaders/modern_treasury/"}, "AirbyteTypeformLoader": {"Airbyte Typeform (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_typeform/"}, "MHTMLLoader": {"mhtml": "https://python.langchain.com/docs/integrations/document_loaders/mhtml/"}, "SpiderLoader": {"Spider": "https://python.langchain.com/docs/integrations/document_loaders/spider/"}, "NewsURLLoader": {"News URL": "https://python.langchain.com/docs/integrations/document_loaders/news/"}, "ImageCaptionLoader": {"Image captions": "https://python.langchain.com/docs/integrations/document_loaders/image_captions/"}, "LLMSherpaFileLoader": {"LLM Sherpa": "https://python.langchain.com/docs/integrations/document_loaders/llmsherpa/"}, "PyMuPDFLoader": {"PyMuPDF": "https://python.langchain.com/docs/integrations/document_loaders/pymupdf/"}, "ScrapflyLoader": {"# ScrapFly": "https://python.langchain.com/docs/integrations/document_loaders/scrapfly/"}, "TomlLoader": {"TOML": "https://python.langchain.com/docs/integrations/document_loaders/toml/"}, "PsychicLoader": {"Psychic": "https://python.langchain.com/docs/integrations/document_loaders/psychic/"}, "FireCrawlLoader": {"FireCrawl": "https://python.langchain.com/docs/integrations/document_loaders/firecrawl/"}, "LarkSuiteWikiLoader": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "FakeListLLM": {"LarkSuite (FeiShu)": "https://python.langchain.com/docs/integrations/document_loaders/larksuite/"}, "MergedDataLoader": {"Merge Documents Loader": "https://python.langchain.com/docs/integrations/document_loaders/merge_doc/"}, "RecursiveUrlLoader": {"Recursive URL": "https://python.langchain.com/docs/integrations/document_loaders/recursive_url/"}, "PDFPlumberLoader": {"PDFPlumber": "https://python.langchain.com/docs/integrations/document_loaders/pdfplumber/"}, "PyPDFium2Loader": {"PyPDFium2Loader": "https://python.langchain.com/docs/integrations/document_loaders/pypdfium2/"}, "AirbyteHubspotLoader": {"Airbyte Hubspot (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_hubspot/"}, "AirbyteGongLoader": {"Airbyte Gong (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_gong/"}, "AstraDBLoader": {"AstraDB": "https://python.langchain.com/docs/integrations/document_loaders/astradb/"}, "ReadTheDocsLoader": {"ReadTheDocs Documentation": "https://python.langchain.com/docs/integrations/document_loaders/readthedocs_documentation/"}, "MathpixPDFLoader": {"MathPixPDFLoader": "https://python.langchain.com/docs/integrations/document_loaders/mathpix/"}, "PolarsDataFrameLoader": {"Polars DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/polars_dataframe/"}, "DataFrameLoader": {"Pandas DataFrame": "https://python.langchain.com/docs/integrations/document_loaders/pandas_dataframe/"}, "SurrealDBLoader": {"SurrealDB": "https://python.langchain.com/docs/integrations/document_loaders/surrealdb/"}, "DedocFileLoader": {"Dedoc": "https://python.langchain.com/docs/integrations/document_loaders/dedoc/"}, "DedocPDFLoader": {"Dedoc": "https://python.langchain.com/docs/integrations/document_loaders/dedoc/"}, "DedocAPIFileLoader": {"Dedoc": "https://python.langchain.com/docs/integrations/document_loaders/dedoc/"}, "GoogleApiClient": {"YouTube transcripts": "https://python.langchain.com/docs/integrations/document_loaders/youtube_transcript/"}, "ConcurrentLoader": {"Concurrent Loader": "https://python.langchain.com/docs/integrations/document_loaders/concurrent/"}, "RSSFeedLoader": {"RSS Feeds": "https://python.langchain.com/docs/integrations/document_loaders/rss/"}, "PebbloSafeLoader": {"Pebblo Safe DocumentLoader": "https://python.langchain.com/docs/integrations/document_loaders/pebblo/"}, "VsdxLoader": {"Vsdx": "https://python.langchain.com/docs/integrations/document_loaders/vsdx/"}, "NotebookLoader": {"Jupyter Notebook": "https://python.langchain.com/docs/integrations/document_loaders/jupyter_notebook/"}, "OracleAutonomousDatabaseLoader": {"Oracle Autonomous Database": "https://python.langchain.com/docs/integrations/document_loaders/oracleadb_loader/"}, "LanguageParser": {"Source Code": "https://python.langchain.com/docs/integrations/document_loaders/source_code/"}, "SRTLoader": {"Subtitle": "https://python.langchain.com/docs/integrations/document_loaders/subtitle/"}, "MastodonTootsLoader": {"Mastodon": "https://python.langchain.com/docs/integrations/document_loaders/mastodon/"}, "AirbyteShopifyLoader": {"Airbyte Shopify (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_shopify/"}, "PyPDFDirectoryLoader": {"PyPDFDirectoryLoader": "https://python.langchain.com/docs/integrations/document_loaders/pypdfdirectory/"}, "PySparkDataFrameLoader": {"PySpark": "https://python.langchain.com/docs/integrations/document_loaders/pyspark_dataframe/"}, "AirbyteZendeskSupportLoader": {"Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/docs/integrations/document_loaders/airbyte_zendesk_support/"}, "CoNLLULoader": {"CoNLL-U": "https://python.langchain.com/docs/integrations/document_loaders/conll-u/"}, "MongodbLoader": {"MongoDB": "https://python.langchain.com/docs/integrations/document_loaders/mongodb/"}, "SitemapLoader": {"Sitemap": "https://python.langchain.com/docs/integrations/document_loaders/sitemap/"}, "YuqueLoader": {"Yuque": "https://python.langchain.com/docs/integrations/document_loaders/yuque/"}, "PDFMinerLoader": {"PDFMiner": "https://python.langchain.com/docs/integrations/document_loaders/pdfminer/"}, "PDFMinerPDFasHTMLLoader": {"PDFMiner": "https://python.langchain.com/docs/integrations/document_loaders/pdfminer/"}, "QuipLoader": {"Quip": "https://python.langchain.com/docs/integrations/document_loaders/quip/"}, "LangSmithLoader": {"LangSmithLoader": "https://python.langchain.com/docs/integrations/document_loaders/langsmith/"}, "MemgraphGraph": {"Memgraph": "https://python.langchain.com/docs/integrations/graphs/memgraph/"}, "GraphSparqlQAChain": {"RDFLib": "https://python.langchain.com/docs/integrations/graphs/rdflib_sparql/"}, "RdfGraph": {"RDFLib": "https://python.langchain.com/docs/integrations/graphs/rdflib_sparql/"}, "NebulaGraphQAChain": {"NebulaGraph": "https://python.langchain.com/docs/integrations/graphs/nebula_graph/"}, "NebulaGraph": {"NebulaGraph": "https://python.langchain.com/docs/integrations/graphs/nebula_graph/"}, "GremlinQAChain": {"Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphIndexCreator": {"NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/"}, "GraphQAChain": {"NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/"}, "NetworkxEntityGraph": {"NetworkX": "https://python.langchain.com/docs/integrations/graphs/networkx/"}, "HugeGraphQAChain": {"HugeGraph": "https://python.langchain.com/docs/integrations/graphs/hugegraph/"}, "HugeGraph": {"HugeGraph": "https://python.langchain.com/docs/integrations/graphs/hugegraph/"}, "AGEGraph": {"Apache AGE": "https://python.langchain.com/docs/integrations/graphs/apache_age/"}, "KuzuQAChain": {"Kuzu": "https://python.langchain.com/docs/integrations/graphs/kuzu_db/"}, "KuzuGraph": {"Kuzu": "https://python.langchain.com/docs/integrations/graphs/kuzu_db/"}, "FalkorDBQAChain": {"FalkorDB": "https://python.langchain.com/docs/integrations/graphs/falkordb/"}, "FalkorDBGraph": {"FalkorDB": "https://python.langchain.com/docs/integrations/graphs/falkordb/"}, "ConversationBufferWindowMemory": {"Baseten": "https://python.langchain.com/docs/integrations/llms/baseten/", "OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "Solar": {"Solar": "https://python.langchain.com/docs/integrations/llms/solar/"}, "GoogleSearchAPIWrapper": {"Bittensor": "https://python.langchain.com/docs/integrations/llms/bittensor/"}, "IpexLLM": {"IPEX-LLM": "https://python.langchain.com/docs/integrations/llms/ipex_llm/"}, "LLMContentHandler": {"SageMakerEndpoint": "https://python.langchain.com/docs/integrations/llms/sagemaker/"}, "TextGen": {"TextGen": "https://python.langchain.com/docs/integrations/llms/textgen/"}, "MosaicML": {"MosaicML": "https://python.langchain.com/docs/integrations/llms/mosaicml/"}, "VolcEngineMaasLLM": {"Volc Engine Maas": "https://python.langchain.com/docs/integrations/llms/volcengine_maas/"}, "KoboldApiLLM": {"KoboldAI API": "https://python.langchain.com/docs/integrations/llms/koboldai/"}, "Konko": {"Konko": "https://python.langchain.com/docs/integrations/llms/konko/"}, "OpaquePrompts": {"OpaquePrompts": "https://python.langchain.com/docs/integrations/llms/opaqueprompts/"}, "TitanTakeoff": {"Titan Takeoff": "https://python.langchain.com/docs/integrations/llms/titan_takeoff/"}, "Friendli": {"Friendli": "https://python.langchain.com/docs/integrations/llms/friendli/"}, "Databricks": {"Databricks": "https://python.langchain.com/docs/integrations/llms/databricks/"}, "LMFormatEnforcer": {"LM Format Enforcer": "https://python.langchain.com/docs/integrations/llms/lmformatenforcer_experimental/"}, "VLLM": {"vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/"}, "VLLMOpenAI": {"vLLM": "https://python.langchain.com/docs/integrations/llms/vllm/"}, "CustomOpenAIContentFormatter": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "ContentFormatterBase": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "DollyContentFormatter": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "load_llm": {"Azure ML": "https://python.langchain.com/docs/integrations/llms/azure_ml/"}, "MapReduceChain": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/"}, "ModelLaboratory": {"Manifest": "https://python.langchain.com/docs/integrations/llms/manifest/"}, "ExLlamaV2": {"ExLlamaV2": "https://python.langchain.com/docs/integrations/llms/exllamav2/"}, "RELLM": {"RELLM": "https://python.langchain.com/docs/integrations/llms/rellm_experimental/"}, "Moonshot": {"MoonshotChat": "https://python.langchain.com/docs/integrations/llms/moonshot/"}, "OpenLM": {"OpenLM": "https://python.langchain.com/docs/integrations/llms/openlm/"}, "CloudflareWorkersAI": {"Cloudflare Workers AI": "https://python.langchain.com/docs/integrations/llms/cloudflare_workersai/"}, "ChatGLM3": {"ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/"}, "ChatGLM": {"ChatGLM": "https://python.langchain.com/docs/integrations/llms/chatglm/"}, "Sambaverse": {"SambaNova": "https://python.langchain.com/docs/integrations/llms/sambanova/"}, "SambaStudio": {"SambaNova": "https://python.langchain.com/docs/integrations/llms/sambanova/"}, "LayerupSecurity": {"Layerup Security": "https://python.langchain.com/docs/integrations/llms/layerup_security/"}, "JsonFormer": {"JSONFormer": "https://python.langchain.com/docs/integrations/llms/jsonformer_experimental/"}, "WeightOnlyQuantPipeline": {"Intel Weight-Only Quantization": "https://python.langchain.com/docs/integrations/llms/weight_only_quantization/"}, "Replicate": {"Replicate": "https://python.langchain.com/docs/integrations/llms/replicate/"}, "tracing_v2_enabled": {"Chat Bot Feedback Template": "https://python.langchain.com/docs/templates/chat-bot-feedback/"}, "QuerySQLDataBaseTool": {"Build a Question/Answering system over SQL data": "https://python.langchain.com/docs/tutorials/sql_qa/"}, "OPENAI_TEMPLATE": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "create_openai_data_generator": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "DatasetGenerator": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "create_data_generation_chain": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}, "create_extraction_chain_pydantic": {"Generate Synthetic Data": "https://python.langchain.com/docs/tutorials/data_generation/"}} \ No newline at end of file diff --git a/docs/docs/how_to/convert_runnable_to_tool.ipynb b/docs/docs/how_to/convert_runnable_to_tool.ipynb index 0497582920f43..bee037d6acd6f 100644 --- a/docs/docs/how_to/convert_runnable_to_tool.ipynb +++ b/docs/docs/how_to/convert_runnable_to_tool.ipynb @@ -21,7 +21,7 @@ "\n", "## Dependencies\n", "\n", - "**Note**: this guide requires `langchain-core` >= 0.2.13. We will also use [OpenAI](/docs/integrations/platforms/openai/) for embeddings, but any LangChain embeddings should suffice. We will use a simple [LangGraph](https://langchain-ai.github.io/langgraph/) agent for demonstration purposes." + "**Note**: this guide requires `langchain-core` >= 0.2.13. We will also use [OpenAI](/docs/integrations/providers/openai/) for embeddings, but any LangChain embeddings should suffice. We will use a simple [LangGraph](https://langchain-ai.github.io/langgraph/) agent for demonstration purposes." ] }, { diff --git a/docs/docs/how_to/installation.mdx b/docs/docs/how_to/installation.mdx index ea3de2d26aa7a..f56946f921af2 100644 --- a/docs/docs/how_to/installation.mdx +++ b/docs/docs/how_to/installation.mdx @@ -50,7 +50,7 @@ pip install langchain-core ### Integration packages Certain integrations like OpenAI and Anthropic have their own packages. -Any integrations that require their own package will be documented as such in the [Integration docs](/docs/integrations/platforms/). +Any integrations that require their own package will be documented as such in the [Integration docs](/docs/integrations/providers/). You can see a list of all integration packages in the [API reference](https://api.python.langchain.com) under the "Partner libs" dropdown. To install one of these run: diff --git a/docs/docs/integrations/platforms/anthropic.mdx b/docs/docs/integrations/providers/anthropic.mdx similarity index 100% rename from docs/docs/integrations/platforms/anthropic.mdx rename to docs/docs/integrations/providers/anthropic.mdx diff --git a/docs/docs/integrations/platforms/aws.mdx b/docs/docs/integrations/providers/aws.mdx similarity index 100% rename from docs/docs/integrations/platforms/aws.mdx rename to docs/docs/integrations/providers/aws.mdx diff --git a/docs/docs/integrations/providers/databricks.md b/docs/docs/integrations/providers/databricks.md index 899c9bc1e2383..7cd8273874f9f 100644 --- a/docs/docs/integrations/providers/databricks.md +++ b/docs/docs/integrations/providers/databricks.md @@ -113,7 +113,7 @@ See [Databricks SQL Agent](https://docs.databricks.com/en/large-language-models/ Open Models ----------- -To directly integrate Databricks's open models hosted on HuggingFace, you can use the [HuggingFace Integration](/docs/integrations/platforms/huggingface) of LangChain. +To directly integrate Databricks's open models hosted on HuggingFace, you can use the [HuggingFace Integration](/docs/integrations/providers/huggingface) of LangChain. ``` from langchain_huggingface import HuggingFaceEndpoint diff --git a/docs/docs/integrations/platforms/google.mdx b/docs/docs/integrations/providers/google.mdx similarity index 100% rename from docs/docs/integrations/platforms/google.mdx rename to docs/docs/integrations/providers/google.mdx diff --git a/docs/docs/integrations/platforms/huggingface.mdx b/docs/docs/integrations/providers/huggingface.mdx similarity index 100% rename from docs/docs/integrations/platforms/huggingface.mdx rename to docs/docs/integrations/providers/huggingface.mdx diff --git a/docs/docs/integrations/platforms/microsoft.mdx b/docs/docs/integrations/providers/microsoft.mdx similarity index 100% rename from docs/docs/integrations/platforms/microsoft.mdx rename to docs/docs/integrations/providers/microsoft.mdx diff --git a/docs/docs/integrations/platforms/openai.mdx b/docs/docs/integrations/providers/openai.mdx similarity index 100% rename from docs/docs/integrations/platforms/openai.mdx rename to docs/docs/integrations/providers/openai.mdx diff --git a/docs/docs/integrations/text_embedding/google_vertex_ai_palm.ipynb b/docs/docs/integrations/text_embedding/google_vertex_ai_palm.ipynb index 4e08f468ecbfc..384fcaa894a20 100644 --- a/docs/docs/integrations/text_embedding/google_vertex_ai_palm.ipynb +++ b/docs/docs/integrations/text_embedding/google_vertex_ai_palm.ipynb @@ -25,7 +25,7 @@ "\n", "| Provider | Package |\n", "|:--------:|:-------:|\n", - "| [Google](https://python.langchain.com/docs/integrations/platforms/google/) | [langchain-google-vertexai](https://python.langchain.com/api_reference/google_vertexai/embeddings/langchain_google_vertexai.embeddings.VertexAIEmbeddings.html) |\n", + "| [Google](https://python.langchain.com/docs/integrations/providers/google/) | [langchain-google-vertexai](https://python.langchain.com/api_reference/google_vertexai/embeddings/langchain_google_vertexai.embeddings.VertexAIEmbeddings.html) |\n", "\n", "## Setup\n", "\n", diff --git a/docs/docs/introduction.mdx b/docs/docs/introduction.mdx index 9853579323ee6..039cbca49db82 100644 --- a/docs/docs/introduction.mdx +++ b/docs/docs/introduction.mdx @@ -8,7 +8,7 @@ sidebar_class_name: hidden **LangChain** is a framework for developing applications powered by large language models (LLMs). LangChain simplifies every stage of the LLM application lifecycle: -- **Development**: Build your applications using LangChain's open-source [building blocks](/docs/concepts#langchain-expression-language-lcel), [components](/docs/concepts), and [third-party integrations](/docs/integrations/platforms/). +- **Development**: Build your applications using LangChain's open-source [building blocks](/docs/concepts#langchain-expression-language-lcel), [components](/docs/concepts), and [third-party integrations](/docs/integrations/providers/). Use [LangGraph](/docs/concepts/#langgraph) to build stateful agents with first-class streaming and human-in-the-loop support. - **Productionization**: Use [LangSmith](https://docs.smith.langchain.com/) to inspect, monitor and evaluate your chains, so that you can continuously optimize and deploy with confidence. - **Deployment**: Turn your LangGraph applications into production-ready APIs and Assistants with [LangGraph Cloud](https://langchain-ai.github.io/langgraph/cloud/). diff --git a/docs/docs/versions/v0_2/overview.mdx b/docs/docs/versions/v0_2/overview.mdx index 147c03886a1f7..7fdb3fa78a740 100644 --- a/docs/docs/versions/v0_2/overview.mdx +++ b/docs/docs/versions/v0_2/overview.mdx @@ -17,7 +17,7 @@ The following features have been added during the development of 0.1.x: - Include response metadata in `AIMessage` to make it easy to access raw output from the underlying models - Tooling to visualize [your runnables](https://python.langchain.com/docs/expression_language/how_to/inspect/) or [your langgraph app](https://github.com/langchain-ai/langgraph/blob/main/examples/visualization.ipynb) - Interoperability of chat message histories across most providers -- [Over 20+ partner packages in python](https://python.langchain.com/docs/integrations/platforms/) for popular integrations +- [Over 20+ partner packages in python](https://python.langchain.com/docs/integrations/providers/) for popular integrations ## What’s coming to LangChain? diff --git a/docs/scripts/partner_pkg_table.py b/docs/scripts/partner_pkg_table.py index 4b733e59fcf7d..00219fe23f9a2 100644 --- a/docs/scripts/partner_pkg_table.py +++ b/docs/scripts/partner_pkg_table.py @@ -8,7 +8,7 @@ PLATFORMS = { path.split("/")[-1][:-4] for path in glob.glob( - str(DOCS_DIR) + "/docs/integrations/platforms/*.mdx", recursive=True + str(DOCS_DIR) + "/docs/integrations/providers/*.mdx", recursive=True ) } EXTERNAL_PACKAGES = { @@ -71,15 +71,15 @@ "airbyte": "Airbyte", } CUSTOM_PROVIDER_PAGES = { - "azure-dynamic-sessions": "/docs/integrations/platforms/microsoft/", - "google-community": "/docs/integrations/platforms/google/", - "google-genai": "/docs/integrations/platforms/google/", - "google-vertexai": "/docs/integrations/platforms/google/", + "azure-dynamic-sessions": "/docs/integrations/providers/microsoft/", + "google-community": "/docs/integrations/providers/google/", + "google-genai": "/docs/integrations/providers/google/", + "google-vertexai": "/docs/integrations/providers/google/", "nvidia-ai-endpoints": "/docs/integrations/providers/nvidia/", "exa": "/docs/integrations/providers/exa_search/", "mongodb": "/docs/integrations/providers/mongodb_atlas/", } -PLATFORM_PAGES = {name: f"/docs/integrations/platforms/{name}/" for name in PLATFORMS} +PLATFORM_PAGES = {name: f"/docs/integrations/providers/{name}/" for name in PLATFORMS} PROVIDER_PAGES = { name: f"/docs/integrations/providers/{name}/" for name in ALL_PACKAGES @@ -104,7 +104,7 @@ def package_row(name: str) -> str: def table() -> str: - header = """| Provider | Package | Downloads | Latest | [JS](https://js.langchain.com/docs/integrations/platforms/) | + header = """| Provider | Package | Downloads | Latest | [JS](https://js.langchain.com/docs/integrations/providers/) | | :--- | :---: | :---: | :---: | :---: | """ return header + "\n".join(package_row(name) for name in sorted(ALL_PACKAGES)) @@ -136,12 +136,12 @@ def doc() -> str: ## All Providers -Click [here](/docs/integrations/providers/) to see all providers. +Click [here](/docs/integrations/providers/all) to see all providers. """ if __name__ == "__main__": - output_dir = Path(sys.argv[1]) / "integrations" / "platforms" + output_dir = Path(sys.argv[1]) / "integrations" / "providers" with open(output_dir / "index.mdx", "w") as f: f.write(doc()) diff --git a/docs/sidebars.js b/docs/sidebars.js index af0dae43d9e18..d3539a2d8e90f 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -126,28 +126,49 @@ module.exports = { collapsible: false, items: [ { - type: "autogenerated", - dirName: "integrations/platforms", + type: "doc", + id: "integrations/providers/anthropic", + }, + { + type: "doc", + id: "integrations/providers/aws", + }, + { + type: "doc", + id: "integrations/providers/google", + }, + { + type: "doc", + id: "integrations/providers/huggingface", + }, + { + type: "doc", + id: "integrations/providers/microsoft", + }, + { + type: "doc", + id: "integrations/providers/openai", }, { type: "category", label: "More", - collapsed: true, + collapsible: false, items: [ { type: "autogenerated", dirName: "integrations/providers", + className: "hidden", }, ], link: { type: "generated-index", - slug: "integrations/providers", + slug: "integrations/providers/all", }, }, ], link: { type: "doc", - id: "integrations/platforms/index", + id: "integrations/providers/index", }, }, { diff --git a/docs/src/theme/NotFound/Content/index.js b/docs/src/theme/NotFound/Content/index.js index dc56f0702753a..aad591a8d477c 100644 --- a/docs/src/theme/NotFound/Content/index.js +++ b/docs/src/theme/NotFound/Content/index.js @@ -2769,8 +2769,8 @@ const suggestedLinks = { "/docs/integrations/chat/hunyuan/": {"canonical": "/docs/integrations/chat/tencent_hunyuan/"}, "/docs/integrations/document_loaders/excel/": {"canonical": "/docs/integrations/document_loaders/microsoft_excel/"}, "/docs/integrations/document_loaders/onenote/": {"canonical": "/docs/integrations/document_loaders/microsoft_onenote/"}, - "/docs/integrations/providers/aws_dynamodb/": {"canonical": "/docs/integrations/platforms/aws/"}, - "/docs/integrations/providers/scann/": {"canonical": "/docs/integrations/platforms/google/"}, + "/docs/integrations/providers/aws_dynamodb/": {"canonical": "/docs/integrations/providers/aws/"}, + "/docs/integrations/providers/scann/": {"canonical": "/docs/integrations/providers/google/"}, "/docs/integrations/toolkits/google_drive/": {"canonical": "/docs/integrations/tools/google_drive/"}, "/docs/use_cases/question_answering/chat_vector_db/": {"canonical": "/docs/tutorials/rag/", "alternative": ["/v0.1/docs/use_cases/question_answering/"]}, "/docs/use_cases/question_answering/in_memory_question_answering/": {"canonical": "/docs/tutorials/rag/", "alternative": ["/v0.1/docs/use_cases/question_answering/"]}, @@ -2791,24 +2791,24 @@ const suggestedLinks = { "/docs/integrations/": {"canonical": "/docs/integrations/providers/"}, "/docs/expression_language/cookbook/routing/": {"canonical": "/docs/how_to/routing/", "alternative": ["/v0.1/docs/expression_language/how_to/routing/"]}, "/docs/guides/expression_language/": {"canonical": "/docs/how_to/#langchain-expression-language-lcel", "alternative": ["/v0.1/docs/expression_language/"]}, - "/docs/integrations/providers/amazon_api_gateway/": {"canonical": "/docs/integrations/platforms/aws/"}, - "/docs/integrations/providers/huggingface/": {"canonical": "/docs/integrations/platforms/huggingface/"}, - "/docs/integrations/providers/azure_blob_storage/": {"canonical": "/docs/integrations/platforms/microsoft/"}, - "/docs/integrations/providers/google_vertexai_matchingengine/": {"canonical": "/docs/integrations/platforms/google/"}, - "/docs/integrations/providers/aws_s3/": {"canonical": "/docs/integrations/platforms/aws/"}, - "/docs/integrations/providers/azure_openai/": {"canonical": "/docs/integrations/platforms/microsoft/"}, - "/docs/integrations/providers/azure_cognitive_search_/": {"canonical": "/docs/integrations/platforms/microsoft/"}, - "/docs/integrations/providers/bedrock/": {"canonical": "/docs/integrations/platforms/aws/"}, - "/docs/integrations/providers/google_bigquery/": {"canonical": "/docs/integrations/platforms/google/"}, - "/docs/integrations/providers/google_cloud_storage/": {"canonical": "/docs/integrations/platforms/google/"}, - "/docs/integrations/providers/google_drive/": {"canonical": "/docs/integrations/platforms/google/"}, - "/docs/integrations/providers/google_search/": {"canonical": "/docs/integrations/platforms/google/"}, - "/docs/integrations/providers/microsoft_onedrive/": {"canonical": "/docs/integrations/platforms/microsoft/"}, - "/docs/integrations/providers/microsoft_powerpoint/": {"canonical": "/docs/integrations/platforms/microsoft/"}, - "/docs/integrations/providers/microsoft_word/": {"canonical": "/docs/integrations/platforms/microsoft/"}, - "/docs/integrations/providers/sagemaker_endpoint/": {"canonical": "/docs/integrations/platforms/aws/"}, + "/docs/integrations/providers/amazon_api_gateway/": {"canonical": "/docs/integrations/providers/aws/"}, + "/docs/integrations/providers/huggingface/": {"canonical": "/docs/integrations/providers/huggingface/"}, + "/docs/integrations/providers/azure_blob_storage/": {"canonical": "/docs/integrations/providers/microsoft/"}, + "/docs/integrations/providers/google_vertexai_matchingengine/": {"canonical": "/docs/integrations/providers/google/"}, + "/docs/integrations/providers/aws_s3/": {"canonical": "/docs/integrations/providers/aws/"}, + "/docs/integrations/providers/azure_openai/": {"canonical": "/docs/integrations/providers/microsoft/"}, + "/docs/integrations/providers/azure_cognitive_search_/": {"canonical": "/docs/integrations/providers/microsoft/"}, + "/docs/integrations/providers/bedrock/": {"canonical": "/docs/integrations/providers/aws/"}, + "/docs/integrations/providers/google_bigquery/": {"canonical": "/docs/integrations/providers/google/"}, + "/docs/integrations/providers/google_cloud_storage/": {"canonical": "/docs/integrations/providers/google/"}, + "/docs/integrations/providers/google_drive/": {"canonical": "/docs/integrations/providers/google/"}, + "/docs/integrations/providers/google_search/": {"canonical": "/docs/integrations/providers/google/"}, + "/docs/integrations/providers/microsoft_onedrive/": {"canonical": "/docs/integrations/providers/microsoft/"}, + "/docs/integrations/providers/microsoft_powerpoint/": {"canonical": "/docs/integrations/providers/microsoft/"}, + "/docs/integrations/providers/microsoft_word/": {"canonical": "/docs/integrations/providers/microsoft/"}, + "/docs/integrations/providers/sagemaker_endpoint/": {"canonical": "/docs/integrations/providers/aws/"}, "/docs/integrations/providers/sagemaker_tracking/": {"canonical": "/docs/integrations/callbacks/sagemaker_tracking/"}, - "/docs/integrations/providers/openai/": {"canonical": "/docs/integrations/platforms/openai/"}, + "/docs/integrations/providers/openai/": {"canonical": "/docs/integrations/providers/openai/"}, "/docs/integrations/cassandra/": {"canonical": "/docs/integrations/providers/cassandra/"}, "/docs/integrations/providers/providers/semadb/": {"canonical": "/docs/integrations/providers/semadb/"}, "/docs/integrations/vectorstores/vectorstores/semadb/": {"canonical": "/docs/integrations/vectorstores/semadb/"}, @@ -2819,7 +2819,7 @@ const suggestedLinks = { "/docs/integrations/document_loaders/Etherscan/": {"canonical": "/docs/integrations/document_loaders/etherscan/"}, "/docs/integrations/document_loaders/merge_doc_loader/": {"canonical": "/docs/integrations/document_loaders/merge_doc/"}, "/docs/integrations/document_loaders/recursive_url_loader/": {"canonical": "/docs/integrations/document_loaders/recursive_url/"}, - "/docs/integrations/providers/google_document_ai/": {"canonical": "/docs/integrations/platforms/google/"}, + "/docs/integrations/providers/google_document_ai/": {"canonical": "/docs/integrations/providers/google/"}, "/docs/integrations/memory/motorhead_memory_managed/": {"canonical": "/docs/integrations/memory/motorhead_memory/"}, "/docs/integrations/memory/dynamodb_chat_message_history/": {"canonical": "/docs/integrations/memory/aws_dynamodb/"}, "/docs/integrations/memory/entity_memory_with_sqlite/": {"canonical": "/docs/integrations/memory/sqlite/"}, diff --git a/docs/vercel.json b/docs/vercel.json index 04be0e01562c0..09ede0a6583ce 100644 --- a/docs/vercel.json +++ b/docs/vercel.json @@ -81,6 +81,10 @@ { "source": "/docs/integrations/providers/mlflow_ai_gateway(/?)", "destination": "/docs/integrations/providers/mlflow/" + }, + { + "source": "/docs/integrations/platforms/:path((?:anthropic|aws|google|huggingface|microsoft|openai)?/?)*", + "destination": "/docs/integrations/providers/:path*" } ] } From 202d7f6c4a2ca8c7e5949d935bcf0ba9b0c23fb0 Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Wed, 16 Oct 2024 15:39:37 -0400 Subject: [PATCH 14/84] core[patch]: 0.3.11 release (#27403) Core bump to 0.3.11 --- libs/core/poetry.lock | 515 ++++++++++++++++++++------------------- libs/core/pyproject.toml | 2 +- 2 files changed, 268 insertions(+), 249 deletions(-) diff --git a/libs/core/poetry.lock b/libs/core/poetry.lock index 6946b0b969ffd..15fb395e20cb6 100644 --- a/libs/core/poetry.lock +++ b/libs/core/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -13,13 +13,13 @@ files = [ [[package]] name = "anyio" -version = "4.6.0" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, - {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -30,7 +30,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -316,101 +316,116 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -443,33 +458,37 @@ test = ["pytest"] [[package]] name = "debugpy" -version = "1.8.6" +version = "1.8.7" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.6-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:30f467c5345d9dfdcc0afdb10e018e47f092e383447500f125b4e013236bf14b"}, - {file = "debugpy-1.8.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d73d8c52614432f4215d0fe79a7e595d0dd162b5c15233762565be2f014803b"}, - {file = "debugpy-1.8.6-cp310-cp310-win32.whl", hash = "sha256:e3e182cd98eac20ee23a00653503315085b29ab44ed66269482349d307b08df9"}, - {file = "debugpy-1.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:e3a82da039cfe717b6fb1886cbbe5c4a3f15d7df4765af857f4307585121c2dd"}, - {file = "debugpy-1.8.6-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:67479a94cf5fd2c2d88f9615e087fcb4fec169ec780464a3f2ba4a9a2bb79955"}, - {file = "debugpy-1.8.6-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb8653f6cbf1dd0a305ac1aa66ec246002145074ea57933978346ea5afdf70b"}, - {file = "debugpy-1.8.6-cp311-cp311-win32.whl", hash = "sha256:cdaf0b9691879da2d13fa39b61c01887c34558d1ff6e5c30e2eb698f5384cd43"}, - {file = "debugpy-1.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:43996632bee7435583952155c06881074b9a742a86cee74e701d87ca532fe833"}, - {file = "debugpy-1.8.6-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:db891b141fc6ee4b5fc6d1cc8035ec329cabc64bdd2ae672b4550c87d4ecb128"}, - {file = "debugpy-1.8.6-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:567419081ff67da766c898ccf21e79f1adad0e321381b0dfc7a9c8f7a9347972"}, - {file = "debugpy-1.8.6-cp312-cp312-win32.whl", hash = "sha256:c9834dfd701a1f6bf0f7f0b8b1573970ae99ebbeee68314116e0ccc5c78eea3c"}, - {file = "debugpy-1.8.6-cp312-cp312-win_amd64.whl", hash = "sha256:e4ce0570aa4aca87137890d23b86faeadf184924ad892d20c54237bcaab75d8f"}, - {file = "debugpy-1.8.6-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:df5dc9eb4ca050273b8e374a4cd967c43be1327eeb42bfe2f58b3cdfe7c68dcb"}, - {file = "debugpy-1.8.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a85707c6a84b0c5b3db92a2df685b5230dd8fb8c108298ba4f11dba157a615a"}, - {file = "debugpy-1.8.6-cp38-cp38-win32.whl", hash = "sha256:538c6cdcdcdad310bbefd96d7850be1cd46e703079cc9e67d42a9ca776cdc8a8"}, - {file = "debugpy-1.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:22140bc02c66cda6053b6eb56dfe01bbe22a4447846581ba1dd6df2c9f97982d"}, - {file = "debugpy-1.8.6-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:c1cef65cffbc96e7b392d9178dbfd524ab0750da6c0023c027ddcac968fd1caa"}, - {file = "debugpy-1.8.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1e60bd06bb3cc5c0e957df748d1fab501e01416c43a7bdc756d2a992ea1b881"}, - {file = "debugpy-1.8.6-cp39-cp39-win32.whl", hash = "sha256:f7158252803d0752ed5398d291dee4c553bb12d14547c0e1843ab74ee9c31123"}, - {file = "debugpy-1.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3358aa619a073b620cd0d51d8a6176590af24abcc3fe2e479929a154bf591b51"}, - {file = "debugpy-1.8.6-py2.py3-none-any.whl", hash = "sha256:b48892df4d810eff21d3ef37274f4c60d32cdcafc462ad5647239036b0f0649f"}, - {file = "debugpy-1.8.6.zip", hash = "sha256:c931a9371a86784cee25dec8d65bc2dc7a21f3f1552e3833d9ef8f919d22280a"}, + {file = "debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b"}, + {file = "debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9"}, + {file = "debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55"}, + {file = "debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037"}, + {file = "debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f"}, + {file = "debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0"}, + {file = "debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2"}, + {file = "debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211"}, + {file = "debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706"}, + {file = "debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2"}, + {file = "debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca"}, + {file = "debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39"}, + {file = "debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40"}, + {file = "debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7"}, + {file = "debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba"}, + {file = "debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa"}, + {file = "debugpy-1.8.7-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:4b908291a1d051ef3331484de8e959ef3e66f12b5e610c203b5b75d2725613a7"}, + {file = "debugpy-1.8.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8df5b89a41f1fd31503b179d0a84a5fdb752dddd5b5388dbd1ae23cda31ce9"}, + {file = "debugpy-1.8.7-cp38-cp38-win32.whl", hash = "sha256:b12515e04720e9e5c2216cc7086d0edadf25d7ab7e3564ec8b4521cf111b4f8c"}, + {file = "debugpy-1.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:93176e7672551cb5281577cdb62c63aadc87ec036f0c6a486f0ded337c504596"}, + {file = "debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907"}, + {file = "debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81"}, + {file = "debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda"}, + {file = "debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d"}, + {file = "debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae"}, + {file = "debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e"}, ] [[package]] @@ -1215,13 +1234,13 @@ url = "../text-splitters" [[package]] name = "langsmith" -version = "0.1.132" +version = "0.1.135" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.132-py3-none-any.whl", hash = "sha256:2320894203675c1c292b818cbecf68b69e47a9f7814d4e950237d1faaafd5dee"}, - {file = "langsmith-0.1.132.tar.gz", hash = "sha256:007b8fac469138abdba89db931900a26c5d316640e27ff4660d28c92a766aae1"}, + {file = "langsmith-0.1.135-py3-none-any.whl", hash = "sha256:b1d1ca3bad483a4239745c57e9b9157b4d099fbf3149be21e3d112c94ede06ac"}, + {file = "langsmith-0.1.135.tar.gz", hash = "sha256:7abed7e141386af99a2177f0b3600b124ae3ad1b482879ba0724ce92ef998a11"}, ] [package.dependencies] @@ -1956,13 +1975,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyparsing" -version = "3.1.4" +version = "3.2.0" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false -python-versions = ">=3.6.8" +python-versions = ">=3.9" files = [ - {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, - {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, + {file = "pyparsing-3.2.0-py3-none-any.whl", hash = "sha256:93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84"}, + {file = "pyparsing-3.2.0.tar.gz", hash = "sha256:cbf74e27246d595d9a74b186b810f6fbb86726dbf3b9532efb343f6d7294fe9c"}, ] [package.extras] @@ -2086,29 +2105,29 @@ files = [ [[package]] name = "pywin32" -version = "307" +version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" files = [ - {file = "pywin32-307-cp310-cp310-win32.whl", hash = "sha256:f8f25d893c1e1ce2d685ef6d0a481e87c6f510d0f3f117932781f412e0eba31b"}, - {file = "pywin32-307-cp310-cp310-win_amd64.whl", hash = "sha256:36e650c5e5e6b29b5d317385b02d20803ddbac5d1031e1f88d20d76676dd103d"}, - {file = "pywin32-307-cp310-cp310-win_arm64.whl", hash = "sha256:0c12d61e0274e0c62acee79e3e503c312426ddd0e8d4899c626cddc1cafe0ff4"}, - {file = "pywin32-307-cp311-cp311-win32.whl", hash = "sha256:fec5d27cc893178fab299de911b8e4d12c5954e1baf83e8a664311e56a272b75"}, - {file = "pywin32-307-cp311-cp311-win_amd64.whl", hash = "sha256:987a86971753ed7fdd52a7fb5747aba955b2c7fbbc3d8b76ec850358c1cc28c3"}, - {file = "pywin32-307-cp311-cp311-win_arm64.whl", hash = "sha256:fd436897c186a2e693cd0437386ed79f989f4d13d6f353f8787ecbb0ae719398"}, - {file = "pywin32-307-cp312-cp312-win32.whl", hash = "sha256:07649ec6b01712f36debf39fc94f3d696a46579e852f60157a729ac039df0815"}, - {file = "pywin32-307-cp312-cp312-win_amd64.whl", hash = "sha256:00d047992bb5dcf79f8b9b7c81f72e0130f9fe4b22df613f755ab1cc021d8347"}, - {file = "pywin32-307-cp312-cp312-win_arm64.whl", hash = "sha256:b53658acbfc6a8241d72cc09e9d1d666be4e6c99376bc59e26cdb6223c4554d2"}, - {file = "pywin32-307-cp313-cp313-win32.whl", hash = "sha256:ea4d56e48dc1ab2aa0a5e3c0741ad6e926529510516db7a3b6981a1ae74405e5"}, - {file = "pywin32-307-cp313-cp313-win_amd64.whl", hash = "sha256:576d09813eaf4c8168d0bfd66fb7cb3b15a61041cf41598c2db4a4583bf832d2"}, - {file = "pywin32-307-cp313-cp313-win_arm64.whl", hash = "sha256:b30c9bdbffda6a260beb2919f918daced23d32c79109412c2085cbc513338a0a"}, - {file = "pywin32-307-cp37-cp37m-win32.whl", hash = "sha256:5101472f5180c647d4525a0ed289ec723a26231550dbfd369ec19d5faf60e511"}, - {file = "pywin32-307-cp37-cp37m-win_amd64.whl", hash = "sha256:05de55a7c110478dc4b202230e98af5e0720855360d2b31a44bb4e296d795fba"}, - {file = "pywin32-307-cp38-cp38-win32.whl", hash = "sha256:13d059fb7f10792542082f5731d5d3d9645320fc38814759313e5ee97c3fac01"}, - {file = "pywin32-307-cp38-cp38-win_amd64.whl", hash = "sha256:7e0b2f93769d450a98ac7a31a087e07b126b6d571e8b4386a5762eb85325270b"}, - {file = "pywin32-307-cp39-cp39-win32.whl", hash = "sha256:55ee87f2f8c294e72ad9d4261ca423022310a6e79fb314a8ca76ab3f493854c6"}, - {file = "pywin32-307-cp39-cp39-win_amd64.whl", hash = "sha256:e9d5202922e74985b037c9ef46778335c102b74b95cec70f629453dbe7235d87"}, + {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, + {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, + {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, + {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, + {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, + {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, + {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, + {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, + {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, + {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, + {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, + {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, + {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, + {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, + {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, + {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, + {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, + {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] [[package]] @@ -2576,110 +2595,110 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( [[package]] name = "simsimd" -version = "5.6.0" +version = "5.7.1" description = "Fastest SIMD-Accelerated Vector Similarity Functions for x86 and Arm" optional = false python-versions = "*" files = [ - {file = "simsimd-5.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f8d33b464c417f2c589bd773c58499f6ee0460600e5e98494859dbcfa492d94b"}, - {file = "simsimd-5.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c3f544ecc9a9efafcad312a66983c06aa8caeab9032e6f8dd1ce09b09536cfd3"}, - {file = "simsimd-5.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e7dd541fe429a9af17e46b254305e8be2128cb6171ff6518b78328466d2618a"}, - {file = "simsimd-5.6.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:572b761b6ccd1eb0c800c82aefc286ad334d4d2a7d27f28a3b39083135b66e70"}, - {file = "simsimd-5.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b644b12aa0705298f4ece17519cbd338a90ae90a8a8bdeb999dc82beaba5c0f"}, - {file = "simsimd-5.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c90f9272dec482331b9c25cdf64bda36b15aada64628eec7b5b424362ef5d48f"}, - {file = "simsimd-5.6.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:c17d535a59b0cf81256ff7acc05445e0616c0878945421bf2b5f1225b1c95401"}, - {file = "simsimd-5.6.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:190af5a63ed12d9ba543cb9db48fcd05cac20fc1ce543fcfdc8d18e0eae3e220"}, - {file = "simsimd-5.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5ebe799537d472b9a7711c040b2ad9fbd6774f7eb796114560124312f798246f"}, - {file = "simsimd-5.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:62ad65dcbaf13664f1b1d56b1de55d8246e0102464257908cb5357dd87975eb9"}, - {file = "simsimd-5.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eaaa6530de3b53bb43dae58603d0bbfcf55a7e0a97a40dda5d995fab9f836473"}, - {file = "simsimd-5.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3e9ef5eba301b9c98e580c144630c787de64a880c669d47661710b9dfe611d40"}, - {file = "simsimd-5.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:621cfa718146fdda3f9a0288b441d7397128fea32953944c9de856a2c041b790"}, - {file = "simsimd-5.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3850c0b4eafa0077a0d409c82b9ce205590826fc2d0e6046b12e32ae87037f52"}, - {file = "simsimd-5.6.0-cp310-cp310-win32.whl", hash = "sha256:f29a482b446518425ed1543c7891a5c2f50bfd2a5022f35d8ff1d777c101d877"}, - {file = "simsimd-5.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:147733e90d2a76f01d4f13ef4ba39e727a1d78272fee87c816d6ddc9101812b0"}, - {file = "simsimd-5.6.0-cp310-cp310-win_arm64.whl", hash = "sha256:e5916b329d2f3063829f9010feb6288fb4f787ec7597edeb2bcb6243cae1f243"}, - {file = "simsimd-5.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5bd0148a9ee640d19e58a89c9bee3008e5858059fe29dd51a1351cc1e675dc9c"}, - {file = "simsimd-5.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1924fc803fc9765ed00fa4b5d600d924ef3a47b0c1e74511366f581627be3b4e"}, - {file = "simsimd-5.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3a35bc907ebd00e446428c8906315043c6906c9c1f09ae73249eb3304799132"}, - {file = "simsimd-5.6.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb876608cc0df37143558c4e88f62c11d356b7c60379d442ec5e436cc20523ff"}, - {file = "simsimd-5.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bec8872d1fa55aa8aeb795447d8c56bb21fa271f6ec3156c42efce7f823e6345"}, - {file = "simsimd-5.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbe179e6c76b7a0f6ba2ea6a716a7eb81ca3d4b147abe3552b442bdec23fcd18"}, - {file = "simsimd-5.6.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9de9e24797818cf954b89ff466f737487a45ea41a778109eeb3093ba402d0840"}, - {file = "simsimd-5.6.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a02577614d1e70fbaf026d837d26ab663e70ffbf1fe76d56cef32494a495d803"}, - {file = "simsimd-5.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d14e953a6a0b85940044689a1cabf4bc6b79cc0647d625ae5ea17265051a4773"}, - {file = "simsimd-5.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:b46031cbb79777ca3e7c83c148fba7203f79e4da96550ffa64ac5e0dac06c2f1"}, - {file = "simsimd-5.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3a006db5ccce07f1434f71353a62590c70375dd9118d95f8f5bf957520e5e5e4"}, - {file = "simsimd-5.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b726dcf2bad0ac3d402fefb0633261ad23f5e11cf0e74298d6fc0efac067234b"}, - {file = "simsimd-5.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f96c492ba79cf152aa4328e1db847ac4de855838c9ba72d60c9d08ff5a7dd038"}, - {file = "simsimd-5.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7ff56e35b80ffdb224e54f2dfb22a34ba04271d3f4185b7af688e38f695e87c9"}, - {file = "simsimd-5.6.0-cp311-cp311-win32.whl", hash = "sha256:d715d1556e994883c88d76a1aa857b46930d03581b6a4d7dadc24eb0cb71851f"}, - {file = "simsimd-5.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:7269a7e01454972e5bf51c66b9984489a8629208ce15ef9baa6ca7c7c0e0b5fe"}, - {file = "simsimd-5.6.0-cp311-cp311-win_arm64.whl", hash = "sha256:330d8ab961d6a7c2b363340a39a19436a0239c5cea8b86b664fc0d2d65971619"}, - {file = "simsimd-5.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0530a75c5646219fe96c5a5873abfe8f9c160be407b5621cfdb5aeedfaa143a8"}, - {file = "simsimd-5.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:67b58cbb6d2da4c2e5239cf9e2e66f5707c0a337561cca778b70a3d4dc8b62b0"}, - {file = "simsimd-5.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7a8fe31d558145ec777733e80194ea5b03b3b7f278c243567457fdcc5ee89aeb"}, - {file = "simsimd-5.6.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3012816771203692eb020530dd28a571515d8241d9f9d73a1e2065f642baed1"}, - {file = "simsimd-5.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18bf024f0a2bc0afe6d20c97921d9c07415b9dd27604f28cf2638773faf8b804"}, - {file = "simsimd-5.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637779de503b56043ab78aec5476525ab6741ca2990453a658f8f9b3d3e28fba"}, - {file = "simsimd-5.6.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e6c549a33fb373a43c2f669242dad016b5e3bf11c2e94de17ada78efcaa5d6a7"}, - {file = "simsimd-5.6.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8b24711cdeae5ecdd188fb7347b2367a6446a1576fad0ae5da90dafb0b0aefb"}, - {file = "simsimd-5.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6e435b99a260f25e922620821ea1ec84901c553e72564c05d9e6f214f128caa9"}, - {file = "simsimd-5.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:57f75e7ff13485c22fa5bbae82845c309e19d395a904f22c73f2bf9ece2dc88c"}, - {file = "simsimd-5.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cee9039134f161ead6727f59bea43b3af32049fa8486340d41e5cbcaae5bdd80"}, - {file = "simsimd-5.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:9644b50913c2300001e74a67d63ba09efdbd4730e11f8c423c17b7c7695f36dd"}, - {file = "simsimd-5.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a510b69fceb87b16592dd7b3f03f428591a3f78a4ce65831f63eb893dfc3231b"}, - {file = "simsimd-5.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cecf017159157f8eca5b7f232268e93f8d48f312c7f856630a3563bc3389fa9"}, - {file = "simsimd-5.6.0-cp312-cp312-win32.whl", hash = "sha256:bf137a84f97a3be3f776ba7049d9f3c0b49679c0aa9035655eb9aa44af8019da"}, - {file = "simsimd-5.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:03202498adb8a87ca6e1398d9fbfaf0b34d17cf36dd8724b39ad4cae7cda85b5"}, - {file = "simsimd-5.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:e641a7904ffd9f185ae0c7c827c6621348742a5cd885e1778ced337cd8866023"}, - {file = "simsimd-5.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d43f22e9206a4a85b2e85e3345cd1221e5979cd3fc3cf2724bded231574f92ff"}, - {file = "simsimd-5.6.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5efd8344a3a9f8782ff183d0c985d0860079264d866c01d72802b81c893d377a"}, - {file = "simsimd-5.6.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a322263ffd99ddb7f92c9be4dca9b01ef66515e61759048d7d172a5f062507d"}, - {file = "simsimd-5.6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55618e1a096fb911cf131fb0191d20c3f146c2cfd69e00cc1aab8909ed34ebcc"}, - {file = "simsimd-5.6.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:4051f778da068e2ee2a401d51b16d96470eb5e6b2a33f2c5a874a263ccec93b9"}, - {file = "simsimd-5.6.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:7c3e40be8554125feb0c7cd6aed9483d0278859925aab4b05ba7f5c8790ba8ea"}, - {file = "simsimd-5.6.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:fcd59471f39eac654ef26bdde64d8efc229c84e93b5517d2021b2497e939571e"}, - {file = "simsimd-5.6.0-cp37-cp37m-musllinux_1_2_armv7l.whl", hash = "sha256:d9e4c3783cc04e9456c8218c2cfaebe36def57497d13d3356b59770beb8074ce"}, - {file = "simsimd-5.6.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:7e816b1411b54fbbf517864abde257c02814ab1c7701e9810544f63f76bb2b29"}, - {file = "simsimd-5.6.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:9ecbc9c5c0744b87d3d6c222bf99c87cefc2494f82ce9d22deea1aff706fc1a0"}, - {file = "simsimd-5.6.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:48c2877eec2e6ed1b5b915356279ad05b60da3ff23c5ec620fe988c3187ba0e1"}, - {file = "simsimd-5.6.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:7e273b438be401bffcca2968347937a40485826015615a344a74f364e28649ce"}, - {file = "simsimd-5.6.0-cp37-cp37m-win32.whl", hash = "sha256:f1be0f3e257fdf0e36435ba1e4fd76a256521eee075dfd502172c9aca9e1d00b"}, - {file = "simsimd-5.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:5d9fe4ed43e432c2fe77e89008a68b617b7ab4d2c570a5be96a892df107a7d41"}, - {file = "simsimd-5.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f82ef97bea5ba13cbbd09d96197bbeac8e2d86a228393f7a0cdcdcd862fdaeda"}, - {file = "simsimd-5.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e7ab834fdf111c3c3a080ec73f37fd532f5e3d56e36431b64ccf24594b698d2"}, - {file = "simsimd-5.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3e554138c4019a19a4716f94b2432f4f11e6073c55cdbb41bdd3a86b4709c0e6"}, - {file = "simsimd-5.6.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c39a75d1b693fd510ad44a8b4f998164e17d3dff4deffb8af0d0006c0029b9c6"}, - {file = "simsimd-5.6.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:727b14f5be78843be759ef01c68b83e2505fe4f8181e8faedba2675d0850857c"}, - {file = "simsimd-5.6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38a62ffde6fee42ebeaa4f9200c4b4f1578b29672e506240df4b1ea286d6a983"}, - {file = "simsimd-5.6.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:293d3b6ceafb3ce68a64f04134399973acb9533ec888910292fe109fda5affdb"}, - {file = "simsimd-5.6.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d5a7aabe15515ffb697dcc7c186537b5feb14b0eb8701f6314a00a0ec4985408"}, - {file = "simsimd-5.6.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ab79b8898a5bfaa9b9e7b7e529c153940f1a0ec36e1c2bfe737c1ef09ca4adcd"}, - {file = "simsimd-5.6.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:b237f95c6bc934b3f3f5cf7327d449969e75657d47b38ebd6a753fc3ea6f2088"}, - {file = "simsimd-5.6.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4acec868a46a2d1014741515c723f9b8151e33daab9d1160b697ef56402630fe"}, - {file = "simsimd-5.6.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:461671e29d1b4ac3994aae2618a7816899a26450d934d73201ee3af217b85a68"}, - {file = "simsimd-5.6.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:603230e85e547dea941fc46ed44db087e0f46d3b8800e3f02e149b98c7c1c0d6"}, - {file = "simsimd-5.6.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6df8ffdcd2b5dcb1b160d03a2e8a4d0aca9b8d0906dc091a8d4b94cc0d30d065"}, - {file = "simsimd-5.6.0-cp38-cp38-win32.whl", hash = "sha256:6b484af6c1676ba87335a55b4b16a909c50c352b122255031823b3e7da0998ad"}, - {file = "simsimd-5.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:e43c4d08076e7c554e7ef23237af31f2c3163fd47f5d5ff198b88268ecc97add"}, - {file = "simsimd-5.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:466684eec92f02014d9fe28e2ab106f4dda0ca0875c9f433b4ccc5fcea28ebda"}, - {file = "simsimd-5.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:be671a7564b8ff214fc38afe54e0eac21d1624ffe7b1da2419cde9c83ff925ad"}, - {file = "simsimd-5.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9fd9cc87de436d6338f93f0783c38b3aea9caa61461a7091bc9d0d9cdd746cb"}, - {file = "simsimd-5.6.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b0c84db6e90210861756e894c66c83371db4a12421f68dd3824303d0e4c56b"}, - {file = "simsimd-5.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cd00384da1108fae1f4bbe09c96f799973ef645b99d7a275815ae80b79c82d6"}, - {file = "simsimd-5.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:253688e8e87d2940e483dbc6274c13a9ede081d09092587ed7e505ddec605594"}, - {file = "simsimd-5.6.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:32d4209bb9416006cebb32579a3bde96828002f6e859cf90101c7c68b23f0cb8"}, - {file = "simsimd-5.6.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ae913aa3066fd29bbde9528d4659dd3ee1c5584580abbc5e9a0eb581adab1dc6"}, - {file = "simsimd-5.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d8d0dff06cd8fda55d9e1a33980ad5c1bde56ce607e7f0978117bea79ff346bf"}, - {file = "simsimd-5.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:9febb6d142815f3bee30b8ab3a66712e69ce327962e30637ca398fa5ce38c909"}, - {file = "simsimd-5.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:96a26317343101fea838130736412d83ec63ad229c5627cbc8a21135f2226aae"}, - {file = "simsimd-5.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a6ca3aaaceb60d4afb8f8a5b0f0b2ea1b5286631d80bb4adaaf2648a8eebcb29"}, - {file = "simsimd-5.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2bf4300f5e84398c7684694bcede78934df42adfb0362c8ac0183082e48085cf"}, - {file = "simsimd-5.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9bd8c63cc96fef6bc22e3193290f4dbbd8f073e07572eb2429a8098f33c0320b"}, - {file = "simsimd-5.6.0-cp39-cp39-win32.whl", hash = "sha256:eb7937610fe1ec1614533d4d8f0ce621007884e98fc40d38cb404fa3bf0f0e8c"}, - {file = "simsimd-5.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:7aab7923937364ce0a3c49a5ffca548f82f768caebbcc0e2a8eacdf18be44302"}, - {file = "simsimd-5.6.0-cp39-cp39-win_arm64.whl", hash = "sha256:5b179383b35e35807bdd73328f4b145db6610901c93c4f3d7d0659971fd6ad93"}, - {file = "simsimd-5.6.0.tar.gz", hash = "sha256:bb0ecb7d6626cac8153b5c1a1197d77697d70bc8753d763e2503a8fcf0090ef2"}, + {file = "simsimd-5.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d9af57be5c2f327b2c343fcbcdee36b99358beb649b925698defc7719a4904c0"}, + {file = "simsimd-5.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eaf9cb6a57ef0f3bfe9108a70c6c178daf023d6e2b586ff4126db2927278114"}, + {file = "simsimd-5.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a42f00cb8a656fec5271926f1b03838f32b57120a86265385c33132f85fb3bef"}, + {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd8fb9997949c60e1e6f4c5b60c8ad3635cae4d7f983160e7f8e4eccb7133b9f"}, + {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dc85ada054d56ba2f614f27d8b40cb22e205dc9f713b2ed5e78fcbfdb4c524b"}, + {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e495e63ad7b1e44fdb9ccce5e2b481b0934b122ba2b08ff749d950dd23cca8"}, + {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:80fe2b318bdf98976c0546d21291a5c68e73586260cbbc27275ee0944f94f9c6"}, + {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:fc691a42c8c8e93a2f5e575f0b1c973b1135b497d816487c66f24beb11c0bc65"}, + {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:efa11defaa50d81c7b5c829128c037cbeae6d5382b71d76bb0f6f933c7e3ed02"}, + {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6bd895b73d787884e6a5f2a2441332ba9c7cb453d22ec5b445a7e41257008e1f"}, + {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:05b5b7ac1115ec397692670e81e6637e6317e8b53ad1856b3ee14e7a56dc3aec"}, + {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8ab34d7cfee466dbb83a3db68dcd3b10285feff37d61806ba1d0859d35a1bb93"}, + {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9926f9f35c1c5a2313d88b3270206913b3ae858bd888be7708dd06e8f4e50bc5"}, + {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15e2e2c811edeaa6eb89b4bb2db15f0c615caca688ff3748d82e1508eb1d79d9"}, + {file = "simsimd-5.7.1-cp310-cp310-win32.whl", hash = "sha256:9d80e9e4400a783ad7b6ec999e568eacff4b01d352b5d69a2ce1327bdb61bab8"}, + {file = "simsimd-5.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:21ab443cf47fb72b17e147d46084875d1dc3bfd5d1cbef589a70b60b5f21546b"}, + {file = "simsimd-5.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:7a123c888349364994447079b765119cb4bcd624bfd4ec80d281093cfde7647c"}, + {file = "simsimd-5.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7eea990503a050396ae63273d4055f021ae2ec81b830d5bc18917f606f224bfa"}, + {file = "simsimd-5.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b041a858c7ce7fe78e4278f53573f33b87f1e187e196d3ca6b25fef53b4fd8f"}, + {file = "simsimd-5.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7f674ee6fc5a8009dce185777b260352297860f0f31602df205019c92891276"}, + {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e3a432eeaa1f339cf3cf104792ba4d16afc41ddaa8a934730dbfd194a6d6ccd"}, + {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d6044ab5e4077b737d848219151831abbd3ccc7a41f891ca3cd13f2772d99f8"}, + {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b591b218eb6383f7c04ca8d4ef665dbbd1ed8d0a5c6fed13b4d9e93806a74cd4"}, + {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a5202b3dd342695ee268bc1d51298ed3d1a040cf56cbd4a88ffee68b238667e5"}, + {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2a05155e4e569229d9595c2755a498f5adfcdaa15b492522cdb6ffc434245c24"}, + {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c86452fe4f2db4519a35379bd6533895ca79ea4eb7286cbe7423e8991aa5f6"}, + {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5a43c77b536c58c352e4952522b65bf2c5e2fdbe23e890021621ff068daa4d96"}, + {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f103ef5758d38482af3eafb9b65d95df7c74318113fb2f81c5d19fdb9644faa6"}, + {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0c92c3d802fecf683dc1fa9f5bd3e24458ccf9fd11dd9fd8e6166b95d2ae0728"}, + {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:db2f18a9a239418ba7dfa856b0d60b8055690d0671a382d9b12eb2a901e6fee8"}, + {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:82fdd43c4daec9f820a3548d7f1877c5fe320a61e45ab65e1918e8db37d932c1"}, + {file = "simsimd-5.7.1-cp311-cp311-win32.whl", hash = "sha256:e8f538415011579b642ed413332b6e33ab1a1e855b4002f48c1f5c701e73abc4"}, + {file = "simsimd-5.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c8fec4c376b41d0862dc2768550ce89b48a3908dab9ffee26a370ff55299b0d4"}, + {file = "simsimd-5.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:8696eb041fde3b9d70a55521c5f8907831682b8e773563abd0fabd28b9c581c0"}, + {file = "simsimd-5.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1d56c81bc4aee46934ac10280390a815d5e6c525f276fce24039a5028981363a"}, + {file = "simsimd-5.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1a983856488596fbc8bddbba2248070cad2a71d345f41fe345abce3385d348b2"}, + {file = "simsimd-5.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e2d61d3c1fb25e8c60f5454c91c611d068706631b3d38fe9de076a70dbdece1e"}, + {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a5ae3f9c7760bbee33aa12d672b0c5837ad8fba2b3778445bcace821633c742"}, + {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a3f5e3a16bb1f78ed7a3c4d1ebc0dadaa5beb8102a6111f6b0eca49e4a07ebe"}, + {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dc0e3f8cca6fbac7756f87b5e79e8477a3f6b08e7a3f64d082fb3c7bd02b936"}, + {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:249dfa5ed0c7319b0d7b69c894ec43594dbc46f9198028d540eb97277f170aa9"}, + {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d4c600ab0c6d8ab6b27c244f7de74cd50ac5bc50039813ffd41edc8d378da613"}, + {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e6ef0f0e4419c6fa7fafc7176cf519618e7917b20d29e40cc51587ec9dc2d76e"}, + {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:2dcef24b58867a981794a502533bb7ad440b1e095de1468cdb075668e6a5a1db"}, + {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:69c33c41d487fe9b3705475c8e419cfaa0bc032b719d2d9b8e9698a925aa1084"}, + {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:969d2ff3e004e3dd03036bddb0628236ef41e3356a3512e936a48438392e59b1"}, + {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6cf7d1439030f53843109705fbb38556978b990cdae7bba6af95e8b5f8e23618"}, + {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5fd00ac528f31daaa3f45ef644d37210a0fcbb1c2fd8155b8e68bc52c4f49fe1"}, + {file = "simsimd-5.7.1-cp312-cp312-win32.whl", hash = "sha256:3751b633e2afa29646d37577b87474a963ac5700ee6e104783f0efcfacf90b7c"}, + {file = "simsimd-5.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:cd9f1110228a3639c273342911805d5d6d6c7c4fa9ddbf14a178309ca9c372e7"}, + {file = "simsimd-5.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:e8e6d95dfee9736bb6060ef8e63f134497594964a0f5ec97fdad25d6533909bf"}, + {file = "simsimd-5.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d0b6d05ab62a9261b0350d1e6e962e4d72f973d68e50f3fb4c59b96a550cddf5"}, + {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14bd9a931117b7fc400a50899bd81557fa80b481ff38e5a7431f57f5952f8344"}, + {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18473bd2c8f683f7c38e12ede7f9ef368b44e2015639ebd8177107c937267836"}, + {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c35f4cdae42f5007fe87c717c580f4bd6be05a520c3676e73be4d2cbbecfc32b"}, + {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:76c116bb8d1b9afe6a788117f5101449ee9418c5505d05b76de3347b4f1c3674"}, + {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:452a006f3d8e43d7d1e3ed9d37df8155cfa24f72f081251ca063fc1eadbd759f"}, + {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:dd416d7482d99a8dfcdb3665640784263f05b6e1cbc519d564b861a81c1a173f"}, + {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_armv7l.whl", hash = "sha256:9c1c53029ef3f716ff7d67756bf9bf3078863a48a2430f6fa638c42ccd92d393"}, + {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:e23df8f144b3bf3cea26badcaed9c5d0c1f3091d7ff4107adb4c5901d7a9b568"}, + {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:524a886b6f6b97ce0bcde03331f498af832bdcdf9825fe11296d96e68bf64ed1"}, + {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:e394b794fd1f5c942cc5efa0a45eb877f7fb2b26e0c35a7976550734d62dbfdf"}, + {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:3e1691806fc37d688177a52a99c6b88ac34232da51e4e5803c30e6c30ec068c5"}, + {file = "simsimd-5.7.1-cp37-cp37m-win32.whl", hash = "sha256:a9c1d0938922cea2259b1a4ed7c6f839b71dfbd83694e6b887dce32c8130dff2"}, + {file = "simsimd-5.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9fab64c82d37e53a8d14437f158b896ba451f6d83d3e5ac49886e4e28aefb5dc"}, + {file = "simsimd-5.7.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9ad89bb80b3498ac3873a6f9ed459be538ef31704ed033b814606afad8261b64"}, + {file = "simsimd-5.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4cced7b196f2942bed356cb1d5ad70d497107ee729db659e950f0d568c6dd495"}, + {file = "simsimd-5.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c2810c29b4f602727d08bbadf1aaee851315a2726e8b333f1ec95c532e21182"}, + {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3011c0f0e6fb34669a078756e0e978689679c3184e9edba327205b60a47e6edc"}, + {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:935e4d75088cdccef8a36e06a4973d3fc9655fc20f003ce6a3e6b4f970706597"}, + {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8aaaf2d9d8c78570a96c4153ad3e97c2c9966d8ee95f725d1d2f4a43d59abfe"}, + {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f73463a0b112e7ec059f4e53ee0c429abdb53ff82ca962f948fa00478cd98d0d"}, + {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a5ca829bcda9798733876078a0cd4a5353ea6f6bd42210192387bee5eea4ac44"}, + {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d897d0baed2e153d19dada94449b77e3d832130a7abf32b0169367968193cabf"}, + {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:07fcdef0d4ac257cb4f2902a3e450b8bce85f46e4d12e38488da495bdb26e5b4"}, + {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:dfc6e45d5c9b94ec50a815e63d373b66def0ee097256d79e1536d7a8f16f00c7"}, + {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8c52183bd855de7d7d2cc9b59cf86dc3163fddd97c9e947225999771c0fe128e"}, + {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:fc2879b1668b0b1193b46822fe5a45753f5e328feef2517ab600c3e6c958c37a"}, + {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a53fbf5d306953942f73f37d829501881fc9a472dcdfad66abc0306eb87ef8c7"}, + {file = "simsimd-5.7.1-cp38-cp38-win32.whl", hash = "sha256:e17d46f1333502383066cad3be571f3eed570dc28acf5d155f9d19f81a0d6009"}, + {file = "simsimd-5.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:d024e450df1c3bac1a6f4c0c73fb452776982ecfec88441b89189f9cbae2d50c"}, + {file = "simsimd-5.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c36812039a2b2dbecc1d69df4b3426784fedc51c4b7f0f2c35944ffae02669ff"}, + {file = "simsimd-5.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34c1348d432cc6bb84c1f024b77b79b5f1d1b1fef712c36da1889f33f11541ef"}, + {file = "simsimd-5.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c116336dde39715e5c54ff8c603dd80755f793f50b9fcc0c799f87ac6ed96b3"}, + {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6859c13597cf3e95531eb55799f0afd693bb6fe42255f97073a760abc0a8f7d7"}, + {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f646891dc507beb66ba0243a9dc55f89f9efb9b8dbfabefb1bf719f5202e4d2b"}, + {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b62098b68a7cee904d10f7a3b1cc5435b2d30b143b34da556e6d20e0b7155beb"}, + {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b882520bdac8f34709c9d82ddd4f13de1ae0f13be9b21224baa8a45d3fde9048"}, + {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:22b78ff1036071f9fc28ea37353024cc8215d2eb2598de53a67cded567d33d3b"}, + {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e0737a6b44d9ca91ebf91f9aca33430db94d8e26e79826478b288d5f6383bff2"}, + {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:cab828ee1eed1eb6d17825a4950dfd3d6ac648462f1d5bcfbc8b52642d9620db"}, + {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07c6d52c3defcd1dbbe757e0c2807250106500f450ad9bd2e1d5dfe01d95f867"}, + {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c54c3d2c5dfefcda6477c8b5b3d9e28c320bd7b8dbb4a13ae083d2941ee99a3f"}, + {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7f7b9c1321a8d32f5f705607a2f8278eb7a2ccb37553df9a5027bb7ab17c16c4"}, + {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6286b4b36cdd91e2a75bb65dc0a1c75c343f298e1823c90703ac07dd405e2c0e"}, + {file = "simsimd-5.7.1-cp39-cp39-win32.whl", hash = "sha256:81c9732321dfb3d36f36b8becafb63bab5d8778e859f8d9b990fca6650d01872"}, + {file = "simsimd-5.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:47e5a69c5ea296b3885cc7ae357b2367b39a7a3c29208c627a3d4ca10f2d8fa3"}, + {file = "simsimd-5.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:91aaf13c0436e086fd8cd90320666afb3ab9e9d234dbbb71ebb1e5f13776a37d"}, + {file = "simsimd-5.7.1.tar.gz", hash = "sha256:1b54e9808dbfa2afbc9c5f0f5548dd572eb542ca260a57c32034acaf170919da"}, ] [[package]] @@ -2897,13 +2916,13 @@ files = [ [[package]] name = "types-requests" -version = "2.32.0.20240914" +version = "2.32.0.20241016" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" files = [ - {file = "types-requests-2.32.0.20240914.tar.gz", hash = "sha256:2850e178db3919d9bf809e434eef65ba49d0e7e33ac92d588f4a5e295fffd405"}, - {file = "types_requests-2.32.0.20240914-py3-none-any.whl", hash = "sha256:59c2f673eb55f32a99b2894faf6020e1a9f4a402ad0f192bfee0b64469054310"}, + {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, + {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, ] [package.dependencies] diff --git a/libs/core/pyproject.toml b/libs/core/pyproject.toml index 55682bff998a2..0f48099afb131 100644 --- a/libs/core/pyproject.toml +++ b/libs/core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain-core" -version = "0.3.10" +version = "0.3.11" description = "Building applications with LLMs through composability" authors = [] license = "MIT" From 0ebddabf7ddafab30fefcbfae2148bf8e0fca42f Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Wed, 16 Oct 2024 20:39:36 -0700 Subject: [PATCH 15/84] docs, core: error messaging [wip] (#27397) --- .../errors/INVALID_PROMPT_INPUT.mdx | 14 + .../errors/INVALID_TOOL_RESULTS.ipynb | 272 ++++++++++++++++++ .../errors/MESSAGE_COERCION_FAILURE.ipynb | 122 ++++++++ .../errors/MODEL_AUTHENTICATION.mdx | 18 ++ .../errors/MODEL_NOT_FOUND.mdx | 10 + .../errors/MODEL_RATE_LIMIT.mdx | 13 + .../errors/OUTPUT_PARSING_FAILURE.ipynb | 126 ++++++++ docs/docs/troubleshooting/errors/index.mdx | 12 + docs/docusaurus.config.js | 5 + libs/core/langchain_core/exceptions.py | 23 ++ libs/core/langchain_core/messages/utils.py | 8 + libs/core/langchain_core/prompts/base.py | 27 +- 12 files changed, 644 insertions(+), 6 deletions(-) create mode 100644 docs/docs/troubleshooting/errors/INVALID_PROMPT_INPUT.mdx create mode 100644 docs/docs/troubleshooting/errors/INVALID_TOOL_RESULTS.ipynb create mode 100644 docs/docs/troubleshooting/errors/MESSAGE_COERCION_FAILURE.ipynb create mode 100644 docs/docs/troubleshooting/errors/MODEL_AUTHENTICATION.mdx create mode 100644 docs/docs/troubleshooting/errors/MODEL_NOT_FOUND.mdx create mode 100644 docs/docs/troubleshooting/errors/MODEL_RATE_LIMIT.mdx create mode 100644 docs/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE.ipynb create mode 100644 docs/docs/troubleshooting/errors/index.mdx diff --git a/docs/docs/troubleshooting/errors/INVALID_PROMPT_INPUT.mdx b/docs/docs/troubleshooting/errors/INVALID_PROMPT_INPUT.mdx new file mode 100644 index 0000000000000..ee2662bc66cd8 --- /dev/null +++ b/docs/docs/troubleshooting/errors/INVALID_PROMPT_INPUT.mdx @@ -0,0 +1,14 @@ +# INVALID_PROMPT_INPUT + +A [prompt template](/docs/concepts#prompt-templates) received missing or invalid input variables. + +## Troubleshooting + +The following may help resolve this error: + +- Double-check your prompt template to ensure that it is correct. + - If you are using the default f-string format and you are using curly braces `{` anywhere in your template, they should be double escaped like this: `{{` (and if you want to render a double curly brace, you should use four curly braces: `{{{{`). +- If you are using a [`MessagesPlaceholder`](/docs/concepts/#messagesplaceholder), make sure that you are passing in an array of messages or message-like objects. + - If you are using shorthand tuples to declare your prompt template, make sure that the variable name is wrapped in curly braces (`["placeholder", "{messages}"]`). +- Try viewing the inputs into your prompt template using [LangSmith](https://docs.smith.langchain.com/) or log statements to confirm they appear as expected. +- If you are pulling a prompt from the [LangChain Prompt Hub](https://smith.langchain.com/prompts), try pulling and logging it or running it in isolation with a sample input to confirm that it is what you expect. diff --git a/docs/docs/troubleshooting/errors/INVALID_TOOL_RESULTS.ipynb b/docs/docs/troubleshooting/errors/INVALID_TOOL_RESULTS.ipynb new file mode 100644 index 0000000000000..e2e036521b058 --- /dev/null +++ b/docs/docs/troubleshooting/errors/INVALID_TOOL_RESULTS.ipynb @@ -0,0 +1,272 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# INVALID_TOOL_RESULTS\n", + "\n", + "You are passing too many, too few, or mismatched [`ToolMessages`](https://api.js.langchain.com/classes/_langchain_core.messages_tool.ToolMessage.html) to a model.\n", + "\n", + "When [using a model to call tools](/docs/concepts#functiontool-calling), the [`AIMessage`](https://api.js.langchain.com/classes/_langchain_core.messages.AIMessage.html)\n", + "the model responds with will contain a `tool_calls` array. To continue the flow, the next messages you pass back to the model must\n", + "be exactly one `ToolMessage` for each item in that array containing the result of that tool call. Each `ToolMessage` must have a `tool_call_id` field\n", + "that matches one of the `tool_calls` on the `AIMessage`.\n", + "\n", + "For example, given the following response from a model:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'name': 'foo_tool', 'args': {}, 'id': 'call_dq9O0eGHrryBwDRCnk0deHK4', 'type': 'tool_call'}, {'name': 'foo_tool', 'args': {}, 'id': 'call_mjLuNyXNHoUIXHiBtXhaWdxN', 'type': 'tool_call'}]\n" + ] + } + ], + "source": [ + "from typing import List\n", + "\n", + "from langchain_core.messages import BaseMessage, HumanMessage\n", + "from langchain_core.tools import tool\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "model = ChatOpenAI(model=\"gpt-4o-mini\")\n", + "\n", + "\n", + "@tool\n", + "def foo_tool() -> str:\n", + " \"\"\"\n", + " A dummy tool that returns 'action complete!'\n", + " \"\"\"\n", + " return \"action complete!\"\n", + "\n", + "\n", + "model_with_tools = model.bind_tools([foo_tool])\n", + "\n", + "chat_history: List[BaseMessage] = [\n", + " HumanMessage(content='Call tool \"foo\" twice with no arguments')\n", + "]\n", + "\n", + "response_message = model_with_tools.invoke(chat_history)\n", + "\n", + "print(response_message.tool_calls)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Calling the model with only one tool response would result in an error:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "BadRequestError", + "evalue": "Error code: 400 - {'error': {'message': \"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. The following tool_call_ids did not have response messages: call_mjLuNyXNHoUIXHiBtXhaWdxN\", 'type': 'invalid_request_error', 'param': 'messages', 'code': None}}", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mBadRequestError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 9\u001b[0m\n\u001b[1;32m 6\u001b[0m chat_history\u001b[38;5;241m.\u001b[39mappend(AIMessage(content\u001b[38;5;241m=\u001b[39mresponse_message\u001b[38;5;241m.\u001b[39mcontent, additional_kwargs\u001b[38;5;241m=\u001b[39mresponse_message\u001b[38;5;241m.\u001b[39madditional_kwargs))\n\u001b[1;32m 7\u001b[0m chat_history\u001b[38;5;241m.\u001b[39mappend(ToolMessage(content\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mstr\u001b[39m(tool_response), tool_call_id\u001b[38;5;241m=\u001b[39mtool_call\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mid\u001b[39m\u001b[38;5;124m'\u001b[39m)))\n\u001b[0;32m----> 9\u001b[0m final_response \u001b[38;5;241m=\u001b[39m \u001b[43mmodel_with_tools\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchat_history\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28mprint\u001b[39m(final_response)\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/runnables/base.py:5354\u001b[0m, in \u001b[0;36mRunnableBindingBase.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 5348\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 5349\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 5350\u001b[0m \u001b[38;5;28minput\u001b[39m: Input,\n\u001b[1;32m 5351\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 5352\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 5353\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Output:\n\u001b[0;32m-> 5354\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbound\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 5355\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5356\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_merge_configs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5357\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5358\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:286\u001b[0m, in \u001b[0;36mBaseChatModel.invoke\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 276\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28minput\u001b[39m: LanguageModelInput,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 282\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m BaseMessage:\n\u001b[1;32m 283\u001b[0m config \u001b[38;5;241m=\u001b[39m ensure_config(config)\n\u001b[1;32m 284\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(\n\u001b[1;32m 285\u001b[0m ChatGeneration,\n\u001b[0;32m--> 286\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_prompt\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 287\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_convert_input\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 288\u001b[0m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 289\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcallbacks\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 290\u001b[0m \u001b[43m \u001b[49m\u001b[43mtags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtags\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 291\u001b[0m \u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmetadata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 292\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrun_name\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpop\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrun_id\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mgenerations[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 296\u001b[0m )\u001b[38;5;241m.\u001b[39mmessage\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:786\u001b[0m, in \u001b[0;36mBaseChatModel.generate_prompt\u001b[0;34m(self, prompts, stop, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 778\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgenerate_prompt\u001b[39m(\n\u001b[1;32m 779\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 780\u001b[0m prompts: \u001b[38;5;28mlist\u001b[39m[PromptValue],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 783\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 784\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m LLMResult:\n\u001b[1;32m 785\u001b[0m prompt_messages \u001b[38;5;241m=\u001b[39m [p\u001b[38;5;241m.\u001b[39mto_messages() \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m prompts]\n\u001b[0;32m--> 786\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprompt_messages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcallbacks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:643\u001b[0m, in \u001b[0;36mBaseChatModel.generate\u001b[0;34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_managers:\n\u001b[1;32m 642\u001b[0m run_managers[i]\u001b[38;5;241m.\u001b[39mon_llm_error(e, response\u001b[38;5;241m=\u001b[39mLLMResult(generations\u001b[38;5;241m=\u001b[39m[]))\n\u001b[0;32m--> 643\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 644\u001b[0m flattened_outputs \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 645\u001b[0m LLMResult(generations\u001b[38;5;241m=\u001b[39m[res\u001b[38;5;241m.\u001b[39mgenerations], llm_output\u001b[38;5;241m=\u001b[39mres\u001b[38;5;241m.\u001b[39mllm_output) \u001b[38;5;66;03m# type: ignore[list-item]\u001b[39;00m\n\u001b[1;32m 646\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m results\n\u001b[1;32m 647\u001b[0m ]\n\u001b[1;32m 648\u001b[0m llm_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_combine_llm_outputs([res\u001b[38;5;241m.\u001b[39mllm_output \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m results])\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:633\u001b[0m, in \u001b[0;36mBaseChatModel.generate\u001b[0;34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001b[0m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(messages):\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 632\u001b[0m results\u001b[38;5;241m.\u001b[39mappend(\n\u001b[0;32m--> 633\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate_with_cache\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 634\u001b[0m \u001b[43m \u001b[49m\u001b[43mm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 636\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_managers\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrun_managers\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 637\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 638\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 639\u001b[0m )\n\u001b[1;32m 640\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 641\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_managers:\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:851\u001b[0m, in \u001b[0;36mBaseChatModel._generate_with_cache\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 849\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 850\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inspect\u001b[38;5;241m.\u001b[39msignature(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate)\u001b[38;5;241m.\u001b[39mparameters\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_manager\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m--> 851\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 852\u001b[0m \u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\n\u001b[1;32m 853\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 854\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 855\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate(messages, stop\u001b[38;5;241m=\u001b[39mstop, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/langchain_openai/chat_models/base.py:686\u001b[0m, in \u001b[0;36mBaseChatOpenAI._generate\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 684\u001b[0m generation_info \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mdict\u001b[39m(raw_response\u001b[38;5;241m.\u001b[39mheaders)}\n\u001b[1;32m 685\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 686\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpayload\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 687\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_create_chat_result(response, generation_info)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_utils/_utils.py:274\u001b[0m, in \u001b[0;36mrequired_args..inner..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 272\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMissing required argument: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mquote(missing[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(msg)\n\u001b[0;32m--> 274\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/resources/chat/completions.py:742\u001b[0m, in \u001b[0;36mCompletions.create\u001b[0;34m(self, messages, model, frequency_penalty, function_call, functions, logit_bias, logprobs, max_completion_tokens, max_tokens, metadata, n, parallel_tool_calls, presence_penalty, response_format, seed, service_tier, stop, store, stream, stream_options, temperature, tool_choice, tools, top_logprobs, top_p, user, extra_headers, extra_query, extra_body, timeout)\u001b[0m\n\u001b[1;32m 704\u001b[0m \u001b[38;5;129m@required_args\u001b[39m([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m], [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstream\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcreate\u001b[39m(\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 739\u001b[0m timeout: \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m httpx\u001b[38;5;241m.\u001b[39mTimeout \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m|\u001b[39m NotGiven \u001b[38;5;241m=\u001b[39m NOT_GIVEN,\n\u001b[1;32m 740\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ChatCompletion \u001b[38;5;241m|\u001b[39m Stream[ChatCompletionChunk]:\n\u001b[1;32m 741\u001b[0m validate_response_format(response_format)\n\u001b[0;32m--> 742\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 743\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/chat/completions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 744\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmaybe_transform\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 745\u001b[0m \u001b[43m \u001b[49m\u001b[43m{\u001b[49m\n\u001b[1;32m 746\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmessages\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 747\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmodel\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 748\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfrequency_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrequency_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 749\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunction_call\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunction_call\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 750\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunctions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunctions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 751\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogit_bias\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogit_bias\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 752\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 753\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_completion_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_completion_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 754\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 755\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmetadata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 756\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mn\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 757\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mparallel_tool_calls\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mparallel_tool_calls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 758\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpresence_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpresence_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 759\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mresponse_format\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 760\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mseed\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 761\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mservice_tier\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mservice_tier\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 762\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstop\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 763\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstore\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 764\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 765\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 766\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtemperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtemperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 767\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtool_choice\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtool_choice\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 768\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtools\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtools\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 769\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_logprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_logprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 770\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_p\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_p\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 771\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muser\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43muser\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 772\u001b[0m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 773\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompletion_create_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCompletionCreateParams\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 774\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 775\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 776\u001b[0m \u001b[43m \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\n\u001b[1;32m 777\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 778\u001b[0m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mChatCompletion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 779\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 780\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mStream\u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatCompletionChunk\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 781\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:1270\u001b[0m, in \u001b[0;36mSyncAPIClient.post\u001b[0;34m(self, path, cast_to, body, options, files, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1256\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpost\u001b[39m(\n\u001b[1;32m 1257\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1258\u001b[0m path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1265\u001b[0m stream_cls: \u001b[38;5;28mtype\u001b[39m[_StreamT] \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1266\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ResponseT \u001b[38;5;241m|\u001b[39m _StreamT:\n\u001b[1;32m 1267\u001b[0m opts \u001b[38;5;241m=\u001b[39m FinalRequestOptions\u001b[38;5;241m.\u001b[39mconstruct(\n\u001b[1;32m 1268\u001b[0m method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost\u001b[39m\u001b[38;5;124m\"\u001b[39m, url\u001b[38;5;241m=\u001b[39mpath, json_data\u001b[38;5;241m=\u001b[39mbody, files\u001b[38;5;241m=\u001b[39mto_httpx_files(files), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions\n\u001b[1;32m 1269\u001b[0m )\n\u001b[0;32m-> 1270\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(ResponseT, \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:947\u001b[0m, in \u001b[0;36mSyncAPIClient.request\u001b[0;34m(self, cast_to, options, remaining_retries, stream, stream_cls)\u001b[0m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 945\u001b[0m retries_taken \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m--> 947\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 948\u001b[0m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 949\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 950\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 951\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 952\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries_taken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 953\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:1051\u001b[0m, in \u001b[0;36mSyncAPIClient._request\u001b[0;34m(self, cast_to, options, retries_taken, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1048\u001b[0m err\u001b[38;5;241m.\u001b[39mresponse\u001b[38;5;241m.\u001b[39mread()\n\u001b[1;32m 1050\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRe-raising status error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 1051\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_status_error_from_response(err\u001b[38;5;241m.\u001b[39mresponse) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1053\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_process_response(\n\u001b[1;32m 1054\u001b[0m cast_to\u001b[38;5;241m=\u001b[39mcast_to,\n\u001b[1;32m 1055\u001b[0m options\u001b[38;5;241m=\u001b[39moptions,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1059\u001b[0m retries_taken\u001b[38;5;241m=\u001b[39mretries_taken,\n\u001b[1;32m 1060\u001b[0m )\n", + "\u001b[0;31mBadRequestError\u001b[0m: Error code: 400 - {'error': {'message': \"An assistant message with 'tool_calls' must be followed by tool messages responding to each 'tool_call_id'. The following tool_call_ids did not have response messages: call_mjLuNyXNHoUIXHiBtXhaWdxN\", 'type': 'invalid_request_error', 'param': 'messages', 'code': None}}" + ] + } + ], + "source": [ + "from langchain_core.messages import AIMessage, ToolMessage\n", + "\n", + "tool_call = response_message.tool_calls[0]\n", + "tool_response = foo_tool.invoke(tool_call)\n", + "\n", + "chat_history.append(\n", + " AIMessage(\n", + " content=response_message.content,\n", + " additional_kwargs=response_message.additional_kwargs,\n", + " )\n", + ")\n", + "chat_history.append(\n", + " ToolMessage(content=str(tool_response), tool_call_id=tool_call.get(\"id\"))\n", + ")\n", + "\n", + "final_response = model_with_tools.invoke(chat_history)\n", + "print(final_response)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If we add a second response, the call will succeed as expected because we now have one tool response per tool call:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='Both calls to the tool \"foo\" have been completed successfully. The output for each call is \"action complete!\".', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 24, 'prompt_tokens': 137, 'total_tokens': 161, 'completion_tokens_details': {'audio_tokens': None, 'reasoning_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_e2bde53e6e', 'finish_reason': 'stop', 'logprobs': None}, id='run-b5ac3c54-4e26-4da4-853a-d0ab1cba90e0-0', usage_metadata={'input_tokens': 137, 'output_tokens': 24, 'total_tokens': 161, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 0}})" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tool_response_2 = foo_tool.invoke(response_message.tool_calls[1])\n", + "\n", + "chat_history.append(tool_response_2)\n", + "\n", + "model_with_tools.invoke(chat_history)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But if we add a duplicate, extra tool response, the call will fail again:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "ename": "BadRequestError", + "evalue": "Error code: 400 - {'error': {'message': \"Invalid parameter: messages with role 'tool' must be a response to a preceeding message with 'tool_calls'.\", 'type': 'invalid_request_error', 'param': 'messages.[4].role', 'code': None}}", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mBadRequestError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 5\u001b[0m\n\u001b[1;32m 1\u001b[0m duplicate_tool_response_2 \u001b[38;5;241m=\u001b[39m foo_tool\u001b[38;5;241m.\u001b[39minvoke(response_message\u001b[38;5;241m.\u001b[39mtool_calls[\u001b[38;5;241m1\u001b[39m])\n\u001b[1;32m 3\u001b[0m chat_history\u001b[38;5;241m.\u001b[39mappend(duplicate_tool_response_2)\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[43mmodel_with_tools\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43mchat_history\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/runnables/base.py:5354\u001b[0m, in \u001b[0;36mRunnableBindingBase.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 5348\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 5349\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 5350\u001b[0m \u001b[38;5;28minput\u001b[39m: Input,\n\u001b[1;32m 5351\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 5352\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 5353\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Output:\n\u001b[0;32m-> 5354\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbound\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 5355\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5356\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_merge_configs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5357\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5358\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:286\u001b[0m, in \u001b[0;36mBaseChatModel.invoke\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 276\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28minput\u001b[39m: LanguageModelInput,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 282\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m BaseMessage:\n\u001b[1;32m 283\u001b[0m config \u001b[38;5;241m=\u001b[39m ensure_config(config)\n\u001b[1;32m 284\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(\n\u001b[1;32m 285\u001b[0m ChatGeneration,\n\u001b[0;32m--> 286\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_prompt\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 287\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_convert_input\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 288\u001b[0m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 289\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcallbacks\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 290\u001b[0m \u001b[43m \u001b[49m\u001b[43mtags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtags\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 291\u001b[0m \u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmetadata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 292\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrun_name\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpop\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrun_id\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mgenerations[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 296\u001b[0m )\u001b[38;5;241m.\u001b[39mmessage\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:786\u001b[0m, in \u001b[0;36mBaseChatModel.generate_prompt\u001b[0;34m(self, prompts, stop, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 778\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgenerate_prompt\u001b[39m(\n\u001b[1;32m 779\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 780\u001b[0m prompts: \u001b[38;5;28mlist\u001b[39m[PromptValue],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 783\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 784\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m LLMResult:\n\u001b[1;32m 785\u001b[0m prompt_messages \u001b[38;5;241m=\u001b[39m [p\u001b[38;5;241m.\u001b[39mto_messages() \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m prompts]\n\u001b[0;32m--> 786\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprompt_messages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcallbacks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:643\u001b[0m, in \u001b[0;36mBaseChatModel.generate\u001b[0;34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_managers:\n\u001b[1;32m 642\u001b[0m run_managers[i]\u001b[38;5;241m.\u001b[39mon_llm_error(e, response\u001b[38;5;241m=\u001b[39mLLMResult(generations\u001b[38;5;241m=\u001b[39m[]))\n\u001b[0;32m--> 643\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 644\u001b[0m flattened_outputs \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 645\u001b[0m LLMResult(generations\u001b[38;5;241m=\u001b[39m[res\u001b[38;5;241m.\u001b[39mgenerations], llm_output\u001b[38;5;241m=\u001b[39mres\u001b[38;5;241m.\u001b[39mllm_output) \u001b[38;5;66;03m# type: ignore[list-item]\u001b[39;00m\n\u001b[1;32m 646\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m results\n\u001b[1;32m 647\u001b[0m ]\n\u001b[1;32m 648\u001b[0m llm_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_combine_llm_outputs([res\u001b[38;5;241m.\u001b[39mllm_output \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m results])\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:633\u001b[0m, in \u001b[0;36mBaseChatModel.generate\u001b[0;34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001b[0m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(messages):\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 632\u001b[0m results\u001b[38;5;241m.\u001b[39mappend(\n\u001b[0;32m--> 633\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate_with_cache\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 634\u001b[0m \u001b[43m \u001b[49m\u001b[43mm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 636\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_managers\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrun_managers\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 637\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 638\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 639\u001b[0m )\n\u001b[1;32m 640\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 641\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_managers:\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:851\u001b[0m, in \u001b[0;36mBaseChatModel._generate_with_cache\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 849\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 850\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inspect\u001b[38;5;241m.\u001b[39msignature(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate)\u001b[38;5;241m.\u001b[39mparameters\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_manager\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m--> 851\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 852\u001b[0m \u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\n\u001b[1;32m 853\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 854\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 855\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate(messages, stop\u001b[38;5;241m=\u001b[39mstop, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/langchain_openai/chat_models/base.py:686\u001b[0m, in \u001b[0;36mBaseChatOpenAI._generate\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 684\u001b[0m generation_info \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mdict\u001b[39m(raw_response\u001b[38;5;241m.\u001b[39mheaders)}\n\u001b[1;32m 685\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 686\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpayload\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 687\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_create_chat_result(response, generation_info)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_utils/_utils.py:274\u001b[0m, in \u001b[0;36mrequired_args..inner..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 272\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMissing required argument: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mquote(missing[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(msg)\n\u001b[0;32m--> 274\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/resources/chat/completions.py:742\u001b[0m, in \u001b[0;36mCompletions.create\u001b[0;34m(self, messages, model, frequency_penalty, function_call, functions, logit_bias, logprobs, max_completion_tokens, max_tokens, metadata, n, parallel_tool_calls, presence_penalty, response_format, seed, service_tier, stop, store, stream, stream_options, temperature, tool_choice, tools, top_logprobs, top_p, user, extra_headers, extra_query, extra_body, timeout)\u001b[0m\n\u001b[1;32m 704\u001b[0m \u001b[38;5;129m@required_args\u001b[39m([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m], [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstream\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcreate\u001b[39m(\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 739\u001b[0m timeout: \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m httpx\u001b[38;5;241m.\u001b[39mTimeout \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m|\u001b[39m NotGiven \u001b[38;5;241m=\u001b[39m NOT_GIVEN,\n\u001b[1;32m 740\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ChatCompletion \u001b[38;5;241m|\u001b[39m Stream[ChatCompletionChunk]:\n\u001b[1;32m 741\u001b[0m validate_response_format(response_format)\n\u001b[0;32m--> 742\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 743\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/chat/completions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 744\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmaybe_transform\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 745\u001b[0m \u001b[43m \u001b[49m\u001b[43m{\u001b[49m\n\u001b[1;32m 746\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmessages\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 747\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmodel\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 748\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfrequency_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrequency_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 749\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunction_call\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunction_call\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 750\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunctions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunctions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 751\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogit_bias\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogit_bias\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 752\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 753\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_completion_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_completion_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 754\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 755\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmetadata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 756\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mn\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 757\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mparallel_tool_calls\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mparallel_tool_calls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 758\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpresence_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpresence_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 759\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mresponse_format\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 760\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mseed\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 761\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mservice_tier\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mservice_tier\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 762\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstop\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 763\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstore\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 764\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 765\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 766\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtemperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtemperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 767\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtool_choice\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtool_choice\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 768\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtools\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtools\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 769\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_logprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_logprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 770\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_p\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_p\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 771\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muser\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43muser\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 772\u001b[0m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 773\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompletion_create_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCompletionCreateParams\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 774\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 775\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 776\u001b[0m \u001b[43m \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\n\u001b[1;32m 777\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 778\u001b[0m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mChatCompletion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 779\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 780\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mStream\u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatCompletionChunk\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 781\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:1270\u001b[0m, in \u001b[0;36mSyncAPIClient.post\u001b[0;34m(self, path, cast_to, body, options, files, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1256\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpost\u001b[39m(\n\u001b[1;32m 1257\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1258\u001b[0m path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1265\u001b[0m stream_cls: \u001b[38;5;28mtype\u001b[39m[_StreamT] \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1266\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ResponseT \u001b[38;5;241m|\u001b[39m _StreamT:\n\u001b[1;32m 1267\u001b[0m opts \u001b[38;5;241m=\u001b[39m FinalRequestOptions\u001b[38;5;241m.\u001b[39mconstruct(\n\u001b[1;32m 1268\u001b[0m method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost\u001b[39m\u001b[38;5;124m\"\u001b[39m, url\u001b[38;5;241m=\u001b[39mpath, json_data\u001b[38;5;241m=\u001b[39mbody, files\u001b[38;5;241m=\u001b[39mto_httpx_files(files), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions\n\u001b[1;32m 1269\u001b[0m )\n\u001b[0;32m-> 1270\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(ResponseT, \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:947\u001b[0m, in \u001b[0;36mSyncAPIClient.request\u001b[0;34m(self, cast_to, options, remaining_retries, stream, stream_cls)\u001b[0m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 945\u001b[0m retries_taken \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m--> 947\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 948\u001b[0m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 949\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 950\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 951\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 952\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries_taken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 953\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:1051\u001b[0m, in \u001b[0;36mSyncAPIClient._request\u001b[0;34m(self, cast_to, options, retries_taken, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1048\u001b[0m err\u001b[38;5;241m.\u001b[39mresponse\u001b[38;5;241m.\u001b[39mread()\n\u001b[1;32m 1050\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRe-raising status error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 1051\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_status_error_from_response(err\u001b[38;5;241m.\u001b[39mresponse) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1053\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_process_response(\n\u001b[1;32m 1054\u001b[0m cast_to\u001b[38;5;241m=\u001b[39mcast_to,\n\u001b[1;32m 1055\u001b[0m options\u001b[38;5;241m=\u001b[39moptions,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1059\u001b[0m retries_taken\u001b[38;5;241m=\u001b[39mretries_taken,\n\u001b[1;32m 1060\u001b[0m )\n", + "\u001b[0;31mBadRequestError\u001b[0m: Error code: 400 - {'error': {'message': \"Invalid parameter: messages with role 'tool' must be a response to a preceeding message with 'tool_calls'.\", 'type': 'invalid_request_error', 'param': 'messages.[4].role', 'code': None}}" + ] + } + ], + "source": [ + "duplicate_tool_response_2 = foo_tool.invoke(response_message.tool_calls[1])\n", + "\n", + "chat_history.append(duplicate_tool_response_2)\n", + "\n", + "await model_with_tools.invoke(chat_history)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should additionally not pass `ToolMessages` back to to a model if they are not preceded by an `AIMessage` with tool calls. For example, this will fail:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "ename": "BadRequestError", + "evalue": "Error code: 400 - {'error': {'message': \"Invalid parameter: messages with role 'tool' must be a response to a preceeding message with 'tool_calls'.\", 'type': 'invalid_request_error', 'param': 'messages.[0].role', 'code': None}}", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mBadRequestError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mmodel_with_tools\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mToolMessage\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcontent\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43maction completed!\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtool_call_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdummy\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/runnables/base.py:5354\u001b[0m, in \u001b[0;36mRunnableBindingBase.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 5348\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 5349\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 5350\u001b[0m \u001b[38;5;28minput\u001b[39m: Input,\n\u001b[1;32m 5351\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 5352\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 5353\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Output:\n\u001b[0;32m-> 5354\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbound\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 5355\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5356\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_merge_configs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5357\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 5358\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:286\u001b[0m, in \u001b[0;36mBaseChatModel.invoke\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 276\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28minput\u001b[39m: LanguageModelInput,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 282\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m BaseMessage:\n\u001b[1;32m 283\u001b[0m config \u001b[38;5;241m=\u001b[39m ensure_config(config)\n\u001b[1;32m 284\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(\n\u001b[1;32m 285\u001b[0m ChatGeneration,\n\u001b[0;32m--> 286\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_prompt\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 287\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_convert_input\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 288\u001b[0m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 289\u001b[0m \u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcallbacks\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 290\u001b[0m \u001b[43m \u001b[49m\u001b[43mtags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtags\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 291\u001b[0m \u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmetadata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 292\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrun_name\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 293\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_id\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mconfig\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpop\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrun_id\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 294\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 295\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mgenerations[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 296\u001b[0m )\u001b[38;5;241m.\u001b[39mmessage\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:786\u001b[0m, in \u001b[0;36mBaseChatModel.generate_prompt\u001b[0;34m(self, prompts, stop, callbacks, **kwargs)\u001b[0m\n\u001b[1;32m 778\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgenerate_prompt\u001b[39m(\n\u001b[1;32m 779\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 780\u001b[0m prompts: \u001b[38;5;28mlist\u001b[39m[PromptValue],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 783\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 784\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m LLMResult:\n\u001b[1;32m 785\u001b[0m prompt_messages \u001b[38;5;241m=\u001b[39m [p\u001b[38;5;241m.\u001b[39mto_messages() \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m prompts]\n\u001b[0;32m--> 786\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprompt_messages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcallbacks\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcallbacks\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:643\u001b[0m, in \u001b[0;36mBaseChatModel.generate\u001b[0;34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_managers:\n\u001b[1;32m 642\u001b[0m run_managers[i]\u001b[38;5;241m.\u001b[39mon_llm_error(e, response\u001b[38;5;241m=\u001b[39mLLMResult(generations\u001b[38;5;241m=\u001b[39m[]))\n\u001b[0;32m--> 643\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\n\u001b[1;32m 644\u001b[0m flattened_outputs \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m 645\u001b[0m LLMResult(generations\u001b[38;5;241m=\u001b[39m[res\u001b[38;5;241m.\u001b[39mgenerations], llm_output\u001b[38;5;241m=\u001b[39mres\u001b[38;5;241m.\u001b[39mllm_output) \u001b[38;5;66;03m# type: ignore[list-item]\u001b[39;00m\n\u001b[1;32m 646\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m results\n\u001b[1;32m 647\u001b[0m ]\n\u001b[1;32m 648\u001b[0m llm_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_combine_llm_outputs([res\u001b[38;5;241m.\u001b[39mllm_output \u001b[38;5;28;01mfor\u001b[39;00m res \u001b[38;5;129;01min\u001b[39;00m results])\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:633\u001b[0m, in \u001b[0;36mBaseChatModel.generate\u001b[0;34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001b[0m\n\u001b[1;32m 630\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(messages):\n\u001b[1;32m 631\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 632\u001b[0m results\u001b[38;5;241m.\u001b[39mappend(\n\u001b[0;32m--> 633\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate_with_cache\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 634\u001b[0m \u001b[43m \u001b[49m\u001b[43mm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 635\u001b[0m \u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 636\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_managers\u001b[49m\u001b[43m[\u001b[49m\u001b[43mi\u001b[49m\u001b[43m]\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mrun_managers\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 637\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 638\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 639\u001b[0m )\n\u001b[1;32m 640\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 641\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_managers:\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:851\u001b[0m, in \u001b[0;36mBaseChatModel._generate_with_cache\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 849\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 850\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inspect\u001b[38;5;241m.\u001b[39msignature(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate)\u001b[38;5;241m.\u001b[39mparameters\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_manager\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m--> 851\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 852\u001b[0m \u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrun_manager\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\n\u001b[1;32m 853\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 854\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 855\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_generate(messages, stop\u001b[38;5;241m=\u001b[39mstop, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/langchain_openai/chat_models/base.py:686\u001b[0m, in \u001b[0;36mBaseChatOpenAI._generate\u001b[0;34m(self, messages, stop, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 684\u001b[0m generation_info \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mheaders\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mdict\u001b[39m(raw_response\u001b[38;5;241m.\u001b[39mheaders)}\n\u001b[1;32m 685\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 686\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpayload\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 687\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_create_chat_result(response, generation_info)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_utils/_utils.py:274\u001b[0m, in \u001b[0;36mrequired_args..inner..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 272\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMissing required argument: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mquote(missing[\u001b[38;5;241m0\u001b[39m])\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 273\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(msg)\n\u001b[0;32m--> 274\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/resources/chat/completions.py:742\u001b[0m, in \u001b[0;36mCompletions.create\u001b[0;34m(self, messages, model, frequency_penalty, function_call, functions, logit_bias, logprobs, max_completion_tokens, max_tokens, metadata, n, parallel_tool_calls, presence_penalty, response_format, seed, service_tier, stop, store, stream, stream_options, temperature, tool_choice, tools, top_logprobs, top_p, user, extra_headers, extra_query, extra_body, timeout)\u001b[0m\n\u001b[1;32m 704\u001b[0m \u001b[38;5;129m@required_args\u001b[39m([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m], [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstream\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[1;32m 705\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcreate\u001b[39m(\n\u001b[1;32m 706\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 739\u001b[0m timeout: \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m httpx\u001b[38;5;241m.\u001b[39mTimeout \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m|\u001b[39m NotGiven \u001b[38;5;241m=\u001b[39m NOT_GIVEN,\n\u001b[1;32m 740\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ChatCompletion \u001b[38;5;241m|\u001b[39m Stream[ChatCompletionChunk]:\n\u001b[1;32m 741\u001b[0m validate_response_format(response_format)\n\u001b[0;32m--> 742\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 743\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/chat/completions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 744\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmaybe_transform\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 745\u001b[0m \u001b[43m \u001b[49m\u001b[43m{\u001b[49m\n\u001b[1;32m 746\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmessages\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 747\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmodel\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 748\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfrequency_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrequency_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 749\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunction_call\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunction_call\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 750\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunctions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunctions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 751\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogit_bias\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogit_bias\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 752\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 753\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_completion_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_completion_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 754\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 755\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmetadata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 756\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mn\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 757\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mparallel_tool_calls\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mparallel_tool_calls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 758\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpresence_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpresence_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 759\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mresponse_format\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 760\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mseed\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 761\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mservice_tier\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mservice_tier\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 762\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstop\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 763\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstore\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 764\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 765\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 766\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtemperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtemperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 767\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtool_choice\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtool_choice\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 768\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtools\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtools\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 769\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_logprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_logprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 770\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_p\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_p\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 771\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muser\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43muser\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 772\u001b[0m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 773\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompletion_create_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCompletionCreateParams\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 774\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 775\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 776\u001b[0m \u001b[43m \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\n\u001b[1;32m 777\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 778\u001b[0m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mChatCompletion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 779\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 780\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mStream\u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatCompletionChunk\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 781\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:1270\u001b[0m, in \u001b[0;36mSyncAPIClient.post\u001b[0;34m(self, path, cast_to, body, options, files, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1256\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpost\u001b[39m(\n\u001b[1;32m 1257\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1258\u001b[0m path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1265\u001b[0m stream_cls: \u001b[38;5;28mtype\u001b[39m[_StreamT] \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 1266\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ResponseT \u001b[38;5;241m|\u001b[39m _StreamT:\n\u001b[1;32m 1267\u001b[0m opts \u001b[38;5;241m=\u001b[39m FinalRequestOptions\u001b[38;5;241m.\u001b[39mconstruct(\n\u001b[1;32m 1268\u001b[0m method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost\u001b[39m\u001b[38;5;124m\"\u001b[39m, url\u001b[38;5;241m=\u001b[39mpath, json_data\u001b[38;5;241m=\u001b[39mbody, files\u001b[38;5;241m=\u001b[39mto_httpx_files(files), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions\n\u001b[1;32m 1269\u001b[0m )\n\u001b[0;32m-> 1270\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(ResponseT, \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:947\u001b[0m, in \u001b[0;36mSyncAPIClient.request\u001b[0;34m(self, cast_to, options, remaining_retries, stream, stream_cls)\u001b[0m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 945\u001b[0m retries_taken \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m--> 947\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 948\u001b[0m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 949\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 950\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 951\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 952\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries_taken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 953\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/docs/.venv/lib/python3.11/site-packages/openai/_base_client.py:1051\u001b[0m, in \u001b[0;36mSyncAPIClient._request\u001b[0;34m(self, cast_to, options, retries_taken, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1048\u001b[0m err\u001b[38;5;241m.\u001b[39mresponse\u001b[38;5;241m.\u001b[39mread()\n\u001b[1;32m 1050\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRe-raising status error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 1051\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_status_error_from_response(err\u001b[38;5;241m.\u001b[39mresponse) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1053\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_process_response(\n\u001b[1;32m 1054\u001b[0m cast_to\u001b[38;5;241m=\u001b[39mcast_to,\n\u001b[1;32m 1055\u001b[0m options\u001b[38;5;241m=\u001b[39moptions,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1059\u001b[0m retries_taken\u001b[38;5;241m=\u001b[39mretries_taken,\n\u001b[1;32m 1060\u001b[0m )\n", + "\u001b[0;31mBadRequestError\u001b[0m: Error code: 400 - {'error': {'message': \"Invalid parameter: messages with role 'tool' must be a response to a preceeding message with 'tool_calls'.\", 'type': 'invalid_request_error', 'param': 'messages.[0].role', 'code': None}}" + ] + } + ], + "source": [ + "model_with_tools.invoke(\n", + " [ToolMessage(content=\"action completed!\", tool_call_id=\"dummy\")]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See [this guide](/docs/how_to/tool_results_pass_to_model/) for more details on tool calling.\n", + "\n", + "## Troubleshooting\n", + "\n", + "The following may help resolve this error:\n", + "\n", + "- If you are using a custom executor rather than a prebuilt one like LangGraph's [`ToolNode`](https://langchain-ai.github.io/langgraphjs/reference/classes/langgraph_prebuilt.ToolNode.html)\n", + " or the legacy LangChain [AgentExecutor](/docs/how_to/agent_executor), verify that you are invoking and returning the result for one tool per tool call.\n", + "- If you are using [few-shot tool call examples](/docs/how_to/tools_few_shot) with messages that you manually create, and you want to simulate a failure,\n", + " you still need to pass back a `ToolMessage` whose content indicates that failure.\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/troubleshooting/errors/MESSAGE_COERCION_FAILURE.ipynb b/docs/docs/troubleshooting/errors/MESSAGE_COERCION_FAILURE.ipynb new file mode 100644 index 0000000000000..904448ae1b3d2 --- /dev/null +++ b/docs/docs/troubleshooting/errors/MESSAGE_COERCION_FAILURE.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# MESSAGE_COERCION_FAILURE\n", + "\n", + "Instead of always requiring instances of `BaseMessage`, several modules in LangChain take `MessageLikeRepresentation`, which is defined as:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Union\n", + "\n", + "from langchain_core.prompts.chat import (\n", + " BaseChatPromptTemplate,\n", + " BaseMessage,\n", + " BaseMessagePromptTemplate,\n", + ")\n", + "\n", + "MessageLikeRepresentation = Union[\n", + " Union[BaseMessagePromptTemplate, BaseMessage, BaseChatPromptTemplate],\n", + " tuple[\n", + " Union[str, type],\n", + " Union[str, list[dict], list[object]],\n", + " ],\n", + " str,\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These include OpenAI style message objects (`{ role: \"user\", content: \"Hello world!\" }`),\n", + "tuples, and plain strings (which are converted to [`HumanMessages`](/docs/concepts#humanmessage)).\n", + "\n", + "If one of these modules receives a value outside of one of these formats, you will receive an error like the following:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Message dict must contain 'role' and 'content' keys, got {'role': 'HumanMessage', 'random_field': 'random value'}", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/messages/utils.py:318\u001b[0m, in \u001b[0;36m_convert_to_message\u001b[0;34m(message)\u001b[0m\n\u001b[1;32m 317\u001b[0m \u001b[38;5;66;03m# None msg content is not allowed\u001b[39;00m\n\u001b[0;32m--> 318\u001b[0m msg_content \u001b[38;5;241m=\u001b[39m \u001b[43mmsg_kwargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpop\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcontent\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 319\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "\u001b[0;31mKeyError\u001b[0m: 'content'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 10\u001b[0m\n\u001b[1;32m 3\u001b[0m uncoercible_message \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 4\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrole\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mHumanMessage\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 5\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrandom_field\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrandom value\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 6\u001b[0m }\n\u001b[1;32m 8\u001b[0m model \u001b[38;5;241m=\u001b[39m ChatAnthropic(model\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mclaude-3-5-sonnet-20240620\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 10\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43muncoercible_message\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:287\u001b[0m, in \u001b[0;36mBaseChatModel.invoke\u001b[0;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 276\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 277\u001b[0m \u001b[38;5;28minput\u001b[39m: LanguageModelInput,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 281\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 282\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m BaseMessage:\n\u001b[1;32m 283\u001b[0m config \u001b[38;5;241m=\u001b[39m ensure_config(config)\n\u001b[1;32m 284\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(\n\u001b[1;32m 285\u001b[0m ChatGeneration,\n\u001b[1;32m 286\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgenerate_prompt(\n\u001b[0;32m--> 287\u001b[0m [\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_convert_input\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m],\n\u001b[1;32m 288\u001b[0m stop\u001b[38;5;241m=\u001b[39mstop,\n\u001b[1;32m 289\u001b[0m callbacks\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcallbacks\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 290\u001b[0m tags\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtags\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 291\u001b[0m metadata\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmetadata\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 292\u001b[0m run_name\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_name\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 293\u001b[0m run_id\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_id\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m),\n\u001b[1;32m 294\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 295\u001b[0m )\u001b[38;5;241m.\u001b[39mgenerations[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m],\n\u001b[1;32m 296\u001b[0m )\u001b[38;5;241m.\u001b[39mmessage\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/language_models/chat_models.py:267\u001b[0m, in \u001b[0;36mBaseChatModel._convert_input\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 265\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m StringPromptValue(text\u001b[38;5;241m=\u001b[39m\u001b[38;5;28minput\u001b[39m)\n\u001b[1;32m 266\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28minput\u001b[39m, Sequence):\n\u001b[0;32m--> 267\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ChatPromptValue(messages\u001b[38;5;241m=\u001b[39m\u001b[43mconvert_to_messages\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[1;32m 268\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 269\u001b[0m msg \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 270\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInvalid input type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28minput\u001b[39m)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 271\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMust be a PromptValue, str, or list of BaseMessages.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 272\u001b[0m )\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/messages/utils.py:348\u001b[0m, in \u001b[0;36mconvert_to_messages\u001b[0;34m(messages)\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(messages, PromptValue):\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m messages\u001b[38;5;241m.\u001b[39mto_messages()\n\u001b[0;32m--> 348\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m[\u001b[49m\u001b[43m_convert_to_message\u001b[49m\u001b[43m(\u001b[49m\u001b[43mm\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mm\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m]\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/messages/utils.py:348\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(messages, PromptValue):\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m messages\u001b[38;5;241m.\u001b[39mto_messages()\n\u001b[0;32m--> 348\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\u001b[43m_convert_to_message\u001b[49m\u001b[43m(\u001b[49m\u001b[43mm\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m m \u001b[38;5;129;01min\u001b[39;00m messages]\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/messages/utils.py:321\u001b[0m, in \u001b[0;36m_convert_to_message\u001b[0;34m(message)\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 320\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMessage dict must contain \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrole\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m and \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m keys, got \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmessage\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m--> 321\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 322\u001b[0m _message \u001b[38;5;241m=\u001b[39m _create_message_from_message_type(\n\u001b[1;32m 323\u001b[0m msg_type, msg_content, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmsg_kwargs\n\u001b[1;32m 324\u001b[0m )\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "\u001b[0;31mValueError\u001b[0m: Message dict must contain 'role' and 'content' keys, got {'role': 'HumanMessage', 'random_field': 'random value'}" + ] + } + ], + "source": [ + "from langchain_anthropic import ChatAnthropic\n", + "\n", + "uncoercible_message = {\"role\": \"HumanMessage\", \"random_field\": \"random value\"}\n", + "\n", + "model = ChatAnthropic(model=\"claude-3-5-sonnet-20240620\")\n", + "\n", + "model.invoke([uncoercible_message])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Troubleshooting\n", + "\n", + "The following may help resolve this error:\n", + "\n", + "- Ensure that all inputs to chat models are an array of LangChain message classes or a supported message-like.\n", + " - Check that there is no stringification or other unexpected transformation occuring.\n", + "- Check the error's stack trace and add log or debugger statements." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/troubleshooting/errors/MODEL_AUTHENTICATION.mdx b/docs/docs/troubleshooting/errors/MODEL_AUTHENTICATION.mdx new file mode 100644 index 0000000000000..e3d58b5e6e79b --- /dev/null +++ b/docs/docs/troubleshooting/errors/MODEL_AUTHENTICATION.mdx @@ -0,0 +1,18 @@ +# MODEL_AUTHENTICATION + +Your model provider is denying you access to their service. + +## Troubleshooting + +The following may help resolve this error: + +- Confirm that your API key or other credentials are correct. +- If you are relying on an environment variable to authenticate, confirm that the variable name is correct and that it has a value set. + - Note that environment variables can also be set by packages like `dotenv`. + - For models, you can try explicitly passing an `api_key` parameter to rule out any environment variable issues like this: + +```python +model = ChatOpenAI(api_key="YOUR_KEY_HERE") +``` + +- If you are using a proxy or other custom endpoint, make sure that your custom provider does not expect an alternative authentication scheme. diff --git a/docs/docs/troubleshooting/errors/MODEL_NOT_FOUND.mdx b/docs/docs/troubleshooting/errors/MODEL_NOT_FOUND.mdx new file mode 100644 index 0000000000000..32b8d6896a6a2 --- /dev/null +++ b/docs/docs/troubleshooting/errors/MODEL_NOT_FOUND.mdx @@ -0,0 +1,10 @@ +# MODEL_NOT_FOUND + +The model name you have specified is not acknowledged by your provider. + +## Troubleshooting + +The following may help resolve this error: + +- Double check the model string you are passing in. +- If you are using a proxy or other alternative host with a model wrapper, confirm that the permitted model names are not restricted or altered. diff --git a/docs/docs/troubleshooting/errors/MODEL_RATE_LIMIT.mdx b/docs/docs/troubleshooting/errors/MODEL_RATE_LIMIT.mdx new file mode 100644 index 0000000000000..d589913479e1f --- /dev/null +++ b/docs/docs/troubleshooting/errors/MODEL_RATE_LIMIT.mdx @@ -0,0 +1,13 @@ +# MODEL_RATE_LIMIT + +You have hit the maximum number of requests that a model provider allows over a given time period and are being temporarily blocked. +Generally, this error is temporary and your limit will reset after a certain amount of time. + +## Troubleshooting + +The following may help resolve this error: + +- Contact your model provider and ask for a rate limit increase. +- If many of your incoming requests are the same, utilize [model response caching](/docs/how_to/chat_model_caching/). +- Spread requests across different providers if your application allows it. +- Use a [`rate_limiter`](/docs/how_to/chat_model_rate_limiting/) to control the rate of requests to the model. diff --git a/docs/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE.ipynb b/docs/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE.ipynb new file mode 100644 index 0000000000000..75d2eb7978d09 --- /dev/null +++ b/docs/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE.ipynb @@ -0,0 +1,126 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# OUTPUT_PARSING_FAILURE\n", + "\n", + "An [output parser](/docs/concepts#output-parsers) was unable to handle model output as expected.\n", + "\n", + "To illustrate this, let's say you have an output parser that expects a chat model to output JSON surrounded by a markdown code tag (triple backticks). Here would be an example of good input:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'foo': 'bar'}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain_core.messages import AIMessage\n", + "from langchain_core.output_parsers import JsonOutputParser\n", + "\n", + "message = AIMessage(content='```\\n{\"foo\": \"bar\"}\\n```')\n", + "output_parser = JsonOutputParser()\n", + "output_parser.invoke(message)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Internally, our JSON parser stripped out the markdown fence and newlines and then ran `json.loads`.\n", + "\n", + "If instead the chat model generated an output with malformed JSON, we will get an error:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "ename": "OutputParserException", + "evalue": "Invalid json output: ```\n{{\"foo\":\n```", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/output_parsers/json.py:83\u001b[0m, in \u001b[0;36mJsonOutputParser.parse_result\u001b[0;34m(self, result, partial)\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 83\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mparse_json_markdown\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtext\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 84\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m JSONDecodeError \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/utils/json.py:144\u001b[0m, in \u001b[0;36mparse_json_markdown\u001b[0;34m(json_string, parser)\u001b[0m\n\u001b[1;32m 143\u001b[0m json_str \u001b[38;5;241m=\u001b[39m json_string \u001b[38;5;28;01mif\u001b[39;00m match \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m match\u001b[38;5;241m.\u001b[39mgroup(\u001b[38;5;241m2\u001b[39m)\n\u001b[0;32m--> 144\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_parse_json\u001b[49m\u001b[43m(\u001b[49m\u001b[43mjson_str\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparser\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparser\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/utils/json.py:160\u001b[0m, in \u001b[0;36m_parse_json\u001b[0;34m(json_str, parser)\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[38;5;66;03m# Parse the JSON string into a Python dictionary\u001b[39;00m\n\u001b[0;32m--> 160\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mparser\u001b[49m\u001b[43m(\u001b[49m\u001b[43mjson_str\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/utils/json.py:118\u001b[0m, in \u001b[0;36mparse_partial_json\u001b[0;34m(s, strict)\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[38;5;66;03m# If we got here, we ran out of characters to remove\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;66;03m# and still couldn't parse the string as JSON, so return the parse error\u001b[39;00m\n\u001b[1;32m 117\u001b[0m \u001b[38;5;66;03m# for the original string.\u001b[39;00m\n\u001b[0;32m--> 118\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrict\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstrict\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.4/lib/python3.11/json/__init__.py:359\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 358\u001b[0m kw[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparse_constant\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m parse_constant\n\u001b[0;32m--> 359\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mcls\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.4/lib/python3.11/json/decoder.py:337\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001b[39;00m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;124;03mcontaining a JSON document).\u001b[39;00m\n\u001b[1;32m 335\u001b[0m \n\u001b[1;32m 336\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m--> 337\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mraw_decode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_w\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mend\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 338\u001b[0m end \u001b[38;5;241m=\u001b[39m _w(s, end)\u001b[38;5;241m.\u001b[39mend()\n", + "File \u001b[0;32m~/.pyenv/versions/3.11.4/lib/python3.11/json/decoder.py:353\u001b[0m, in \u001b[0;36mJSONDecoder.raw_decode\u001b[0;34m(self, s, idx)\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 353\u001b[0m obj, end \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscan_once\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 354\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "\u001b[0;31mJSONDecodeError\u001b[0m: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mOutputParserException\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m message \u001b[38;5;241m=\u001b[39m AIMessage(content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m```\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m{{\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfoo\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m```\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 2\u001b[0m output_parser \u001b[38;5;241m=\u001b[39m JsonOutputParser()\n\u001b[0;32m----> 3\u001b[0m \u001b[43moutput_parser\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmessage\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/output_parsers/base.py:193\u001b[0m, in \u001b[0;36mBaseOutputParser.invoke\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 186\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 187\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 188\u001b[0m \u001b[38;5;28minput\u001b[39m: Union[\u001b[38;5;28mstr\u001b[39m, BaseMessage],\n\u001b[1;32m 189\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 190\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 191\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m T:\n\u001b[1;32m 192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28minput\u001b[39m, BaseMessage):\n\u001b[0;32m--> 193\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_with_config\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 194\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mlambda\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43minner_input\u001b[49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparse_result\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 195\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatGeneration\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmessage\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minner_input\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 196\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 197\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 198\u001b[0m \u001b[43m \u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 199\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_type\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mparser\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 201\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 202\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_with_config(\n\u001b[1;32m 203\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m inner_input: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparse_result([Generation(text\u001b[38;5;241m=\u001b[39minner_input)]),\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 205\u001b[0m config,\n\u001b[1;32m 206\u001b[0m run_type\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparser\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 207\u001b[0m )\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/runnables/base.py:1927\u001b[0m, in \u001b[0;36mRunnable._call_with_config\u001b[0;34m(self, func, input, config, run_type, serialized, **kwargs)\u001b[0m\n\u001b[1;32m 1923\u001b[0m context \u001b[38;5;241m=\u001b[39m copy_context()\n\u001b[1;32m 1924\u001b[0m context\u001b[38;5;241m.\u001b[39mrun(_set_config_context, child_config)\n\u001b[1;32m 1925\u001b[0m output \u001b[38;5;241m=\u001b[39m cast(\n\u001b[1;32m 1926\u001b[0m Output,\n\u001b[0;32m-> 1927\u001b[0m \u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1928\u001b[0m \u001b[43m \u001b[49m\u001b[43mcall_func_with_variable_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[arg-type]\u001b[39;49;00m\n\u001b[1;32m 1929\u001b[0m \u001b[43m \u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[arg-type]\u001b[39;49;00m\n\u001b[1;32m 1930\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[arg-type]\u001b[39;49;00m\n\u001b[1;32m 1931\u001b[0m \u001b[43m \u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1932\u001b[0m \u001b[43m \u001b[49m\u001b[43mrun_manager\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1933\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1934\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 1935\u001b[0m )\n\u001b[1;32m 1936\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mBaseException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 1937\u001b[0m run_manager\u001b[38;5;241m.\u001b[39mon_chain_error(e)\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/runnables/config.py:396\u001b[0m, in \u001b[0;36mcall_func_with_variable_args\u001b[0;34m(func, input, config, run_manager, **kwargs)\u001b[0m\n\u001b[1;32m 394\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_manager \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m accepts_run_manager(func):\n\u001b[1;32m 395\u001b[0m kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_manager\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m run_manager\n\u001b[0;32m--> 396\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/output_parsers/base.py:194\u001b[0m, in \u001b[0;36mBaseOutputParser.invoke..\u001b[0;34m(inner_input)\u001b[0m\n\u001b[1;32m 186\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[1;32m 187\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 188\u001b[0m \u001b[38;5;28minput\u001b[39m: Union[\u001b[38;5;28mstr\u001b[39m, BaseMessage],\n\u001b[1;32m 189\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 190\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 191\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m T:\n\u001b[1;32m 192\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28minput\u001b[39m, BaseMessage):\n\u001b[1;32m 193\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_with_config(\n\u001b[0;32m--> 194\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m inner_input: \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparse_result\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 195\u001b[0m \u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatGeneration\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmessage\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minner_input\u001b[49m\u001b[43m)\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 196\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m,\n\u001b[1;32m 197\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 198\u001b[0m config,\n\u001b[1;32m 199\u001b[0m run_type\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparser\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 200\u001b[0m )\n\u001b[1;32m 201\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 202\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call_with_config(\n\u001b[1;32m 203\u001b[0m \u001b[38;5;28;01mlambda\u001b[39;00m inner_input: \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparse_result([Generation(text\u001b[38;5;241m=\u001b[39minner_input)]),\n\u001b[1;32m 204\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 205\u001b[0m config,\n\u001b[1;32m 206\u001b[0m run_type\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparser\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 207\u001b[0m )\n", + "File \u001b[0;32m~/langchain/oss-py/libs/core/langchain_core/output_parsers/json.py:86\u001b[0m, in \u001b[0;36mJsonOutputParser.parse_result\u001b[0;34m(self, result, partial)\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m JSONDecodeError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 85\u001b[0m msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInvalid json output: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtext\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m---> 86\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m OutputParserException(msg, llm_output\u001b[38;5;241m=\u001b[39mtext) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n", + "\u001b[0;31mOutputParserException\u001b[0m: Invalid json output: ```\n{{\"foo\":\n```" + ] + } + ], + "source": [ + "message = AIMessage(content='```\\n{{\"foo\":\\n```')\n", + "output_parser = JsonOutputParser()\n", + "output_parser.invoke(message)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that some prebuilt constructs like [legacy LangChain agents](/docs/how_to/agent_executor) and chains may use output parsers internally,\n", + "so you may see this error even if you're not visibly instantiating and using an output parser.\n", + "\n", + "## Troubleshooting\n", + "\n", + "The following may help resolve this error:\n", + "\n", + "- Consider using [tool calling or other structured output techniques](/docs/how_to/structured_output/) if possible without an output parser to reliably output parseable values.\n", + " - If you are using a prebuilt chain or agent, use [LangGraph](https://langchain-ai.github.io/langgraph/) to compose your logic explicitly instead.\n", + "- Add more precise formatting instructions to your prompt. In the above example, adding `\"You must always return valid JSON fenced by a markdown code block. Do not return any additional text.\"` to your input may help steer the model to returning the expected format.\n", + "- If you are using a smaller or less capable model, try using a more capable one.\n", + "- Add [LLM-powered retries](/docs/how_to/output_parser_fixing/)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/troubleshooting/errors/index.mdx b/docs/docs/troubleshooting/errors/index.mdx new file mode 100644 index 0000000000000..2258714de1e1f --- /dev/null +++ b/docs/docs/troubleshooting/errors/index.mdx @@ -0,0 +1,12 @@ +# Error codes + +This page contains guides around resolving common errors you may find while building with LangChain. +Errors referenced below will have an `lc_error_code` property corresponding to one of the below codes when they are thrown in code. + +- [INVALID_PROMPT_INPUT](/docs/troubleshooting/errors/INVALID_PROMPT_INPUT) +- [INVALID_TOOL_RESULTS](/docs/troubleshooting/errors/INVALID_TOOL_RESULTS) +- [MESSAGE_COERCION_FAILURE](/docs/troubleshooting/errors/MESSAGE_COERCION_FAILURE) +- [MODEL_AUTHENTICATION](/docs/troubleshooting/errors/MODEL_AUTHENTICATION) +- [MODEL_NOT_FOUND](/docs/troubleshooting/errors/MODEL_NOT_FOUND) +- [MODEL_RATE_LIMIT](/docs/troubleshooting/errors/MODEL_RATE_LIMIT) +- [OUTPUT_PARSING_FAILURE](/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index b1b7487c27b33..305b14df135ac 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -181,6 +181,11 @@ const config = { docId: "people", label: "People", }, + { + type: "doc", + docId: "troubleshooting/errors/index", + label: "Error reference", + }, { type: 'html', value: '', diff --git a/libs/core/langchain_core/exceptions.py b/libs/core/langchain_core/exceptions.py index f10197b04662a..38158f37bac12 100644 --- a/libs/core/langchain_core/exceptions.py +++ b/libs/core/langchain_core/exceptions.py @@ -1,5 +1,6 @@ """Custom **exceptions** for LangChain.""" +from enum import Enum from typing import Any, Optional @@ -39,6 +40,10 @@ def __init__( llm_output: Optional[str] = None, send_to_llm: bool = False, ): + if isinstance(error, str): + error = create_message( + message=error, error_code=ErrorCode.OUTPUT_PARSING_FAILURE + ) super().__init__(error) if send_to_llm and (observation is None or llm_output is None): msg = ( @@ -49,3 +54,21 @@ def __init__( self.observation = observation self.llm_output = llm_output self.send_to_llm = send_to_llm + + +class ErrorCode(Enum): + INVALID_PROMPT_INPUT = "INVALID_PROMPT_INPUT" + INVALID_TOOL_RESULTS = "INVALID_TOOL_RESULTS" + MESSAGE_COERCION_FAILURE = "MESSAGE_COERCION_FAILURE" + MODEL_AUTHENTICATION = "MODEL_AUTHENTICATION" + MODEL_NOT_FOUND = "MODEL_NOT_FOUND" + MODEL_RATE_LIMIT = "MODEL_RATE_LIMIT" + OUTPUT_PARSING_FAILURE = "OUTPUT_PARSING_FAILURE" + + +def create_message(*, message: str, error_code: ErrorCode) -> str: + return ( + f"{message}\n" + "For troubleshooting, visit: https://python.langchain.com/docs/" + f"troubleshooting/errors/{error_code.value}" + ) diff --git a/libs/core/langchain_core/messages/utils.py b/libs/core/langchain_core/messages/utils.py index d3194226ea217..2399639341202 100644 --- a/libs/core/langchain_core/messages/utils.py +++ b/libs/core/langchain_core/messages/utils.py @@ -28,6 +28,7 @@ from pydantic import Discriminator, Field, Tag +from langchain_core.exceptions import ErrorCode, create_message from langchain_core.messages.ai import AIMessage, AIMessageChunk from langchain_core.messages.base import BaseMessage, BaseMessageChunk from langchain_core.messages.chat import ChatMessage, ChatMessageChunk @@ -274,6 +275,7 @@ def _create_message_from_message_type( f"Unexpected message type: '{message_type}'. Use one of 'human'," f" 'user', 'ai', 'assistant', 'function', 'tool', or 'system'." ) + msg = create_message(message=msg, error_code=ErrorCode.MESSAGE_COERCION_FAILURE) raise ValueError(msg) return message @@ -318,12 +320,16 @@ def _convert_to_message(message: MessageLikeRepresentation) -> BaseMessage: msg_content = msg_kwargs.pop("content") or "" except KeyError as e: msg = f"Message dict must contain 'role' and 'content' keys, got {message}" + msg = create_message( + message=msg, error_code=ErrorCode.MESSAGE_COERCION_FAILURE + ) raise ValueError(msg) from e _message = _create_message_from_message_type( msg_type, msg_content, **msg_kwargs ) else: msg = f"Unsupported message type: {type(message)}" + msg = create_message(message=msg, error_code=ErrorCode.MESSAGE_COERCION_FAILURE) raise NotImplementedError(msg) return _message @@ -1327,6 +1333,7 @@ def _msg_to_chunk(message: BaseMessage) -> BaseMessageChunk: f"Unrecognized message class {message.__class__}. Supported classes are " f"{list(_MSG_CHUNK_MAP.keys())}" ) + msg = create_message(message=msg, error_code=ErrorCode.MESSAGE_COERCION_FAILURE) raise ValueError(msg) @@ -1343,6 +1350,7 @@ def _chunk_to_msg(chunk: BaseMessageChunk) -> BaseMessage: f"Unrecognized message chunk class {chunk.__class__}. Supported classes are " f"{list(_CHUNK_MSG_MAP.keys())}" ) + msg = create_message(message=msg, error_code=ErrorCode.MESSAGE_COERCION_FAILURE) raise ValueError(msg) diff --git a/libs/core/langchain_core/prompts/base.py b/libs/core/langchain_core/prompts/base.py index e399974a5b0ef..042b2d77ea80f 100644 --- a/libs/core/langchain_core/prompts/base.py +++ b/libs/core/langchain_core/prompts/base.py @@ -21,6 +21,7 @@ from pydantic import BaseModel, ConfigDict, Field, model_validator from typing_extensions import Self, override +from langchain_core.exceptions import ErrorCode, create_message from langchain_core.load import dumpd from langchain_core.output_parsers.base import BaseOutputParser from langchain_core.prompt_values import ( @@ -74,18 +75,24 @@ def validate_variable_names(self) -> Self: "Cannot have an input variable named 'stop', as it is used internally," " please rename." ) - raise ValueError(msg) + raise ValueError( + create_message(message=msg, error_code=ErrorCode.INVALID_PROMPT_INPUT) + ) if "stop" in self.partial_variables: msg = ( "Cannot have an partial variable named 'stop', as it is used " "internally, please rename." ) - raise ValueError(msg) + raise ValueError( + create_message(message=msg, error_code=ErrorCode.INVALID_PROMPT_INPUT) + ) overall = set(self.input_variables).intersection(self.partial_variables) if overall: msg = f"Found overlapping input and partial variables: {overall}" - raise ValueError(msg) + raise ValueError( + create_message(message=msg, error_code=ErrorCode.INVALID_PROMPT_INPUT) + ) return self @classmethod @@ -148,7 +155,11 @@ def _validate_input(self, inner_input: Any) -> dict: f"Expected mapping type as input to {self.__class__.__name__}. " f"Received {type(inner_input)}." ) - raise TypeError(msg) + raise TypeError( + create_message( + message=msg, error_code=ErrorCode.INVALID_PROMPT_INPUT + ) + ) missing = set(self.input_variables).difference(inner_input) if missing: msg = ( @@ -162,7 +173,9 @@ def _validate_input(self, inner_input: Any) -> dict: " and not a variable, please escape it with double curly braces like: " f"'{{{{{example_key}}}}}'." ) - raise KeyError(msg) + raise KeyError( + create_message(message=msg, error_code=ErrorCode.INVALID_PROMPT_INPUT) + ) return inner_input def _format_prompt_with_error_handling(self, inner_input: dict) -> PromptValue: @@ -381,7 +394,9 @@ def _get_document_info(doc: Document, prompt: BasePromptTemplate[str]) -> dict: f"{required_metadata}. Received document with missing metadata: " f"{list(missing_metadata)}." ) - raise ValueError(msg) + raise ValueError( + create_message(message=msg, error_code=ErrorCode.INVALID_PROMPT_INPUT) + ) return {k: base_info[k] for k in prompt.input_variables} From f9cc9bdcf31b2683127ac089fc47ab4780d28dcd Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Thu, 17 Oct 2024 06:32:40 -0700 Subject: [PATCH 16/84] core: release 0.3.12 (#27410) --- libs/core/poetry.lock | 202 +++++++++++++++++++-------------------- libs/core/pyproject.toml | 8 +- 2 files changed, 108 insertions(+), 102 deletions(-) diff --git a/libs/core/poetry.lock b/libs/core/poetry.lock index 15fb395e20cb6..6b960860db2cd 100644 --- a/libs/core/poetry.lock +++ b/libs/core/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -2595,110 +2595,110 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( [[package]] name = "simsimd" -version = "5.7.1" +version = "5.7.2" description = "Fastest SIMD-Accelerated Vector Similarity Functions for x86 and Arm" optional = false python-versions = "*" files = [ - {file = "simsimd-5.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d9af57be5c2f327b2c343fcbcdee36b99358beb649b925698defc7719a4904c0"}, - {file = "simsimd-5.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1eaf9cb6a57ef0f3bfe9108a70c6c178daf023d6e2b586ff4126db2927278114"}, - {file = "simsimd-5.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a42f00cb8a656fec5271926f1b03838f32b57120a86265385c33132f85fb3bef"}, - {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd8fb9997949c60e1e6f4c5b60c8ad3635cae4d7f983160e7f8e4eccb7133b9f"}, - {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dc85ada054d56ba2f614f27d8b40cb22e205dc9f713b2ed5e78fcbfdb4c524b"}, - {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e495e63ad7b1e44fdb9ccce5e2b481b0934b122ba2b08ff749d950dd23cca8"}, - {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:80fe2b318bdf98976c0546d21291a5c68e73586260cbbc27275ee0944f94f9c6"}, - {file = "simsimd-5.7.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:fc691a42c8c8e93a2f5e575f0b1c973b1135b497d816487c66f24beb11c0bc65"}, - {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:efa11defaa50d81c7b5c829128c037cbeae6d5382b71d76bb0f6f933c7e3ed02"}, - {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:6bd895b73d787884e6a5f2a2441332ba9c7cb453d22ec5b445a7e41257008e1f"}, - {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:05b5b7ac1115ec397692670e81e6637e6317e8b53ad1856b3ee14e7a56dc3aec"}, - {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8ab34d7cfee466dbb83a3db68dcd3b10285feff37d61806ba1d0859d35a1bb93"}, - {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9926f9f35c1c5a2313d88b3270206913b3ae858bd888be7708dd06e8f4e50bc5"}, - {file = "simsimd-5.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15e2e2c811edeaa6eb89b4bb2db15f0c615caca688ff3748d82e1508eb1d79d9"}, - {file = "simsimd-5.7.1-cp310-cp310-win32.whl", hash = "sha256:9d80e9e4400a783ad7b6ec999e568eacff4b01d352b5d69a2ce1327bdb61bab8"}, - {file = "simsimd-5.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:21ab443cf47fb72b17e147d46084875d1dc3bfd5d1cbef589a70b60b5f21546b"}, - {file = "simsimd-5.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:7a123c888349364994447079b765119cb4bcd624bfd4ec80d281093cfde7647c"}, - {file = "simsimd-5.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7eea990503a050396ae63273d4055f021ae2ec81b830d5bc18917f606f224bfa"}, - {file = "simsimd-5.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b041a858c7ce7fe78e4278f53573f33b87f1e187e196d3ca6b25fef53b4fd8f"}, - {file = "simsimd-5.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7f674ee6fc5a8009dce185777b260352297860f0f31602df205019c92891276"}, - {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e3a432eeaa1f339cf3cf104792ba4d16afc41ddaa8a934730dbfd194a6d6ccd"}, - {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d6044ab5e4077b737d848219151831abbd3ccc7a41f891ca3cd13f2772d99f8"}, - {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b591b218eb6383f7c04ca8d4ef665dbbd1ed8d0a5c6fed13b4d9e93806a74cd4"}, - {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a5202b3dd342695ee268bc1d51298ed3d1a040cf56cbd4a88ffee68b238667e5"}, - {file = "simsimd-5.7.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2a05155e4e569229d9595c2755a498f5adfcdaa15b492522cdb6ffc434245c24"}, - {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c86452fe4f2db4519a35379bd6533895ca79ea4eb7286cbe7423e8991aa5f6"}, - {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5a43c77b536c58c352e4952522b65bf2c5e2fdbe23e890021621ff068daa4d96"}, - {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f103ef5758d38482af3eafb9b65d95df7c74318113fb2f81c5d19fdb9644faa6"}, - {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:0c92c3d802fecf683dc1fa9f5bd3e24458ccf9fd11dd9fd8e6166b95d2ae0728"}, - {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:db2f18a9a239418ba7dfa856b0d60b8055690d0671a382d9b12eb2a901e6fee8"}, - {file = "simsimd-5.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:82fdd43c4daec9f820a3548d7f1877c5fe320a61e45ab65e1918e8db37d932c1"}, - {file = "simsimd-5.7.1-cp311-cp311-win32.whl", hash = "sha256:e8f538415011579b642ed413332b6e33ab1a1e855b4002f48c1f5c701e73abc4"}, - {file = "simsimd-5.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c8fec4c376b41d0862dc2768550ce89b48a3908dab9ffee26a370ff55299b0d4"}, - {file = "simsimd-5.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:8696eb041fde3b9d70a55521c5f8907831682b8e773563abd0fabd28b9c581c0"}, - {file = "simsimd-5.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1d56c81bc4aee46934ac10280390a815d5e6c525f276fce24039a5028981363a"}, - {file = "simsimd-5.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1a983856488596fbc8bddbba2248070cad2a71d345f41fe345abce3385d348b2"}, - {file = "simsimd-5.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e2d61d3c1fb25e8c60f5454c91c611d068706631b3d38fe9de076a70dbdece1e"}, - {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a5ae3f9c7760bbee33aa12d672b0c5837ad8fba2b3778445bcace821633c742"}, - {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a3f5e3a16bb1f78ed7a3c4d1ebc0dadaa5beb8102a6111f6b0eca49e4a07ebe"}, - {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dc0e3f8cca6fbac7756f87b5e79e8477a3f6b08e7a3f64d082fb3c7bd02b936"}, - {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:249dfa5ed0c7319b0d7b69c894ec43594dbc46f9198028d540eb97277f170aa9"}, - {file = "simsimd-5.7.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d4c600ab0c6d8ab6b27c244f7de74cd50ac5bc50039813ffd41edc8d378da613"}, - {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e6ef0f0e4419c6fa7fafc7176cf519618e7917b20d29e40cc51587ec9dc2d76e"}, - {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:2dcef24b58867a981794a502533bb7ad440b1e095de1468cdb075668e6a5a1db"}, - {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:69c33c41d487fe9b3705475c8e419cfaa0bc032b719d2d9b8e9698a925aa1084"}, - {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:969d2ff3e004e3dd03036bddb0628236ef41e3356a3512e936a48438392e59b1"}, - {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:6cf7d1439030f53843109705fbb38556978b990cdae7bba6af95e8b5f8e23618"}, - {file = "simsimd-5.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5fd00ac528f31daaa3f45ef644d37210a0fcbb1c2fd8155b8e68bc52c4f49fe1"}, - {file = "simsimd-5.7.1-cp312-cp312-win32.whl", hash = "sha256:3751b633e2afa29646d37577b87474a963ac5700ee6e104783f0efcfacf90b7c"}, - {file = "simsimd-5.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:cd9f1110228a3639c273342911805d5d6d6c7c4fa9ddbf14a178309ca9c372e7"}, - {file = "simsimd-5.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:e8e6d95dfee9736bb6060ef8e63f134497594964a0f5ec97fdad25d6533909bf"}, - {file = "simsimd-5.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d0b6d05ab62a9261b0350d1e6e962e4d72f973d68e50f3fb4c59b96a550cddf5"}, - {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14bd9a931117b7fc400a50899bd81557fa80b481ff38e5a7431f57f5952f8344"}, - {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18473bd2c8f683f7c38e12ede7f9ef368b44e2015639ebd8177107c937267836"}, - {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c35f4cdae42f5007fe87c717c580f4bd6be05a520c3676e73be4d2cbbecfc32b"}, - {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:76c116bb8d1b9afe6a788117f5101449ee9418c5505d05b76de3347b4f1c3674"}, - {file = "simsimd-5.7.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:452a006f3d8e43d7d1e3ed9d37df8155cfa24f72f081251ca063fc1eadbd759f"}, - {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:dd416d7482d99a8dfcdb3665640784263f05b6e1cbc519d564b861a81c1a173f"}, - {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_armv7l.whl", hash = "sha256:9c1c53029ef3f716ff7d67756bf9bf3078863a48a2430f6fa638c42ccd92d393"}, - {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:e23df8f144b3bf3cea26badcaed9c5d0c1f3091d7ff4107adb4c5901d7a9b568"}, - {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:524a886b6f6b97ce0bcde03331f498af832bdcdf9825fe11296d96e68bf64ed1"}, - {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:e394b794fd1f5c942cc5efa0a45eb877f7fb2b26e0c35a7976550734d62dbfdf"}, - {file = "simsimd-5.7.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:3e1691806fc37d688177a52a99c6b88ac34232da51e4e5803c30e6c30ec068c5"}, - {file = "simsimd-5.7.1-cp37-cp37m-win32.whl", hash = "sha256:a9c1d0938922cea2259b1a4ed7c6f839b71dfbd83694e6b887dce32c8130dff2"}, - {file = "simsimd-5.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9fab64c82d37e53a8d14437f158b896ba451f6d83d3e5ac49886e4e28aefb5dc"}, - {file = "simsimd-5.7.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9ad89bb80b3498ac3873a6f9ed459be538ef31704ed033b814606afad8261b64"}, - {file = "simsimd-5.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4cced7b196f2942bed356cb1d5ad70d497107ee729db659e950f0d568c6dd495"}, - {file = "simsimd-5.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c2810c29b4f602727d08bbadf1aaee851315a2726e8b333f1ec95c532e21182"}, - {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3011c0f0e6fb34669a078756e0e978689679c3184e9edba327205b60a47e6edc"}, - {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:935e4d75088cdccef8a36e06a4973d3fc9655fc20f003ce6a3e6b4f970706597"}, - {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8aaaf2d9d8c78570a96c4153ad3e97c2c9966d8ee95f725d1d2f4a43d59abfe"}, - {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f73463a0b112e7ec059f4e53ee0c429abdb53ff82ca962f948fa00478cd98d0d"}, - {file = "simsimd-5.7.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a5ca829bcda9798733876078a0cd4a5353ea6f6bd42210192387bee5eea4ac44"}, - {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d897d0baed2e153d19dada94449b77e3d832130a7abf32b0169367968193cabf"}, - {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:07fcdef0d4ac257cb4f2902a3e450b8bce85f46e4d12e38488da495bdb26e5b4"}, - {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:dfc6e45d5c9b94ec50a815e63d373b66def0ee097256d79e1536d7a8f16f00c7"}, - {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:8c52183bd855de7d7d2cc9b59cf86dc3163fddd97c9e947225999771c0fe128e"}, - {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:fc2879b1668b0b1193b46822fe5a45753f5e328feef2517ab600c3e6c958c37a"}, - {file = "simsimd-5.7.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a53fbf5d306953942f73f37d829501881fc9a472dcdfad66abc0306eb87ef8c7"}, - {file = "simsimd-5.7.1-cp38-cp38-win32.whl", hash = "sha256:e17d46f1333502383066cad3be571f3eed570dc28acf5d155f9d19f81a0d6009"}, - {file = "simsimd-5.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:d024e450df1c3bac1a6f4c0c73fb452776982ecfec88441b89189f9cbae2d50c"}, - {file = "simsimd-5.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c36812039a2b2dbecc1d69df4b3426784fedc51c4b7f0f2c35944ffae02669ff"}, - {file = "simsimd-5.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34c1348d432cc6bb84c1f024b77b79b5f1d1b1fef712c36da1889f33f11541ef"}, - {file = "simsimd-5.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c116336dde39715e5c54ff8c603dd80755f793f50b9fcc0c799f87ac6ed96b3"}, - {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6859c13597cf3e95531eb55799f0afd693bb6fe42255f97073a760abc0a8f7d7"}, - {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f646891dc507beb66ba0243a9dc55f89f9efb9b8dbfabefb1bf719f5202e4d2b"}, - {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b62098b68a7cee904d10f7a3b1cc5435b2d30b143b34da556e6d20e0b7155beb"}, - {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b882520bdac8f34709c9d82ddd4f13de1ae0f13be9b21224baa8a45d3fde9048"}, - {file = "simsimd-5.7.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:22b78ff1036071f9fc28ea37353024cc8215d2eb2598de53a67cded567d33d3b"}, - {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e0737a6b44d9ca91ebf91f9aca33430db94d8e26e79826478b288d5f6383bff2"}, - {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:cab828ee1eed1eb6d17825a4950dfd3d6ac648462f1d5bcfbc8b52642d9620db"}, - {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:07c6d52c3defcd1dbbe757e0c2807250106500f450ad9bd2e1d5dfe01d95f867"}, - {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c54c3d2c5dfefcda6477c8b5b3d9e28c320bd7b8dbb4a13ae083d2941ee99a3f"}, - {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7f7b9c1321a8d32f5f705607a2f8278eb7a2ccb37553df9a5027bb7ab17c16c4"}, - {file = "simsimd-5.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6286b4b36cdd91e2a75bb65dc0a1c75c343f298e1823c90703ac07dd405e2c0e"}, - {file = "simsimd-5.7.1-cp39-cp39-win32.whl", hash = "sha256:81c9732321dfb3d36f36b8becafb63bab5d8778e859f8d9b990fca6650d01872"}, - {file = "simsimd-5.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:47e5a69c5ea296b3885cc7ae357b2367b39a7a3c29208c627a3d4ca10f2d8fa3"}, - {file = "simsimd-5.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:91aaf13c0436e086fd8cd90320666afb3ab9e9d234dbbb71ebb1e5f13776a37d"}, - {file = "simsimd-5.7.1.tar.gz", hash = "sha256:1b54e9808dbfa2afbc9c5f0f5548dd572eb542ca260a57c32034acaf170919da"}, + {file = "simsimd-5.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:06dae257a7c89a7925240c89e3635040edaf5b6f12527abe6c8e4cae4484a874"}, + {file = "simsimd-5.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f144f24f3b6d910bbb2e1ad7a270f99f71012a1d18199a892a3bab90a4bb53c6"}, + {file = "simsimd-5.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9208c3ff020bc655582854f703193094df3d3b19ee07d59c7c9d2358f6ac5181"}, + {file = "simsimd-5.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53a09a2d0911efeba04ea0a08fcbeab3a397396bf92a187c0e61fc3019be7d60"}, + {file = "simsimd-5.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d853da0ac3067b4672f8c1246ba26422d888b2ff9611001c29eaa2a72fef3ee"}, + {file = "simsimd-5.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a737e4b59f07e838c2055f6732be434ffa1a2d268fe95493c1389b76ea375853"}, + {file = "simsimd-5.7.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7bbfb41620d783a250078f71eda0a4248c8d77588ded923d04e5764a99b16bc1"}, + {file = "simsimd-5.7.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:900b1887e8f44cc7505371848ef6ac290bb8fea446d2e5be4251c7b0add51ff5"}, + {file = "simsimd-5.7.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4061b2fcbbbab37c53016a1717895cc029476a5f1de92966776549b96fb3f90a"}, + {file = "simsimd-5.7.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ddd120c3bc3fe11c1b313cdc7a32a2b857d1f1edf1dfa5547dac69caa5053a39"}, + {file = "simsimd-5.7.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:83f91e06241766b7ddba246f548c2f79610ff33213d0ac74b2b7768a7a0eaff9"}, + {file = "simsimd-5.7.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f94640d1aedd252d0d34d9e15f2865fda79ca1dfa164f7d3ac014f276bb08aa2"}, + {file = "simsimd-5.7.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d57fe0e2d3dacc0d17c37113d3f1c16d6c53bbfa1e3c959a6ef79cc96a357f6f"}, + {file = "simsimd-5.7.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:88783aab51a48db1e6f20e7334644a6952f3119f47657b28380e79b281453914"}, + {file = "simsimd-5.7.2-cp310-cp310-win32.whl", hash = "sha256:48362c6eda9d9027f2e6b121af5936ce152653b9a3f08ab6192540440b7beb90"}, + {file = "simsimd-5.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:2e4f18cdeadb352ed49702cfaa81d7507485df4c565c4fccbea0a12e860bac76"}, + {file = "simsimd-5.7.2-cp310-cp310-win_arm64.whl", hash = "sha256:bb7957417f04dd16243e527dfefd223e9c93c944d7bc86c72a6b51620f706c49"}, + {file = "simsimd-5.7.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:536c043d92a8b992392e74268503150f9f5133697b2cc28432dd791765e9bec2"}, + {file = "simsimd-5.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:92cba22a37ec1600417912e4b013e3e3db24343e4ca11e61a5c5fbb4d55a676c"}, + {file = "simsimd-5.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1ee79a2625ed60e38405fd054e862646c1a8d92c00ce617a7532643e8f6c74bd"}, + {file = "simsimd-5.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7c40fc40e1934b744f22f8995db4064e16d6390f1019f91a023747baf3407bb"}, + {file = "simsimd-5.7.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f349bbbe3c4ae089e29b385f939dd9391e008cf6fb4d09d8fc73f48b0220aca"}, + {file = "simsimd-5.7.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4856fbb44020b7c83323188de99e93ce8d113897b2c68e1350e76736a1e112aa"}, + {file = "simsimd-5.7.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:27e538c6dbb45c6e8f3a1cbe82f4e74dc9a1cbcddf9bcc41fdde4cf0ee640c7c"}, + {file = "simsimd-5.7.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:13dc2c6d5a2c6ce14e64384647c532eb211649b28678f80e104475f08c4f15f3"}, + {file = "simsimd-5.7.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8e69f9e59e20ae5851d638692c22d01996588fa558e05c29435920319b402b7e"}, + {file = "simsimd-5.7.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:31eb60ca9a8543b6885f97eb3056945d7e73129ad8a7e2af38f184af03413de4"}, + {file = "simsimd-5.7.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0e79c2eba6da2049ea5337b3a6fc2d1eee62308de519107fa7e0bf5548b7bebc"}, + {file = "simsimd-5.7.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9faa9172f121b371fd1e68b53e46df7948af3261792570c323d076d47e88e692"}, + {file = "simsimd-5.7.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5cdab4fddda1569d7abadd57fa589e9cf4bcaa90ae682a988f9249363d3e1c3c"}, + {file = "simsimd-5.7.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:637068cc0d5973e47d48e391e46ab4ce3ea936b339e6c3b53b0a61bc822c68d0"}, + {file = "simsimd-5.7.2-cp311-cp311-win32.whl", hash = "sha256:6e432a698a56fd673699bf360291be040ed60d0ef3bb0696d78209e60c0ea720"}, + {file = "simsimd-5.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:1984d3290d7189cbffbb9e8cbfbc1bf2cfe124c3a7fc53d8f6a62dfc950df7aa"}, + {file = "simsimd-5.7.2-cp311-cp311-win_arm64.whl", hash = "sha256:5b192e533bbc18a64f445ffaf66e13e53564a52168c3f51aa024906aa1a46707"}, + {file = "simsimd-5.7.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9711607f2db9ab820eeaf9473be3ec236a103528eaa129f836206cb6f477d401"}, + {file = "simsimd-5.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:498f5c47bf0b00b1a20b2a48339e07fba9de26584702bf7b402254baccdd812a"}, + {file = "simsimd-5.7.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:880c5502acb1c8a6baf73e3e8934174957ba3ffe10a94ba87da491381aac934e"}, + {file = "simsimd-5.7.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbee1f697c3c2f0ac988ccbb66d5acd30946ff8482526236ebac6e47a2be4b11"}, + {file = "simsimd-5.7.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de0013bbadd257cd5e6938702463bf28a230330d47847ba0c55605784ed8250f"}, + {file = "simsimd-5.7.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6d33d9492326c5de32a97adc4d9ec3e1812441f81a693dce07ea5187c508ef1"}, + {file = "simsimd-5.7.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:dbb6b818216447b3c6bb8c34b4431d6f01fa14d09a74766213bee8a70d4a7648"}, + {file = "simsimd-5.7.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:5c48e47fc1eee75d9d21d52792f8ed1da5e3ccd0c5ea5e0cae093cb35e1cdd02"}, + {file = "simsimd-5.7.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37f2f2416f9da965c227ca86cbe8715dec9e656096f9ec3670374999ab2a60e5"}, + {file = "simsimd-5.7.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4c619cec4168bbcc8cff1042f615cea91212be4cd5c548975fb4b3da50559539"}, + {file = "simsimd-5.7.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:39658d42f16913b706ad976b9e7751de74e1fa6d5ef7ab135e699cb47f3e0be1"}, + {file = "simsimd-5.7.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ea384a6a335ef71e19b996b4ca249d780c2c678c498dd335701953db58bb97c4"}, + {file = "simsimd-5.7.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cdba401f1d86bd8f6adeb6fa0341616919bac69b3bd98495b0a8476d70643609"}, + {file = "simsimd-5.7.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:63aa613b2dfb70a681bbe25d1efd586b441a04150670588959ce6f0fb5e6ede2"}, + {file = "simsimd-5.7.2-cp312-cp312-win32.whl", hash = "sha256:a572f4eff81a7ac5518adad55d26591560fce1836a4894c2cfc5e0da82969c89"}, + {file = "simsimd-5.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:c10db37c90e1af83b1c2fd42cc5b20112ec8faf3ab2ff1267a26502b2d7f3871"}, + {file = "simsimd-5.7.2-cp312-cp312-win_arm64.whl", hash = "sha256:19c2f7573e722ae828279298edc174b85a18c15fba7ffe558e77cc5069e6cdec"}, + {file = "simsimd-5.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8ed953939a830e77097ae9091f197c654b8c27aa6e99ae7cbc21a184e2f5931b"}, + {file = "simsimd-5.7.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68596aca7d3bef6f7bd90840a54c85feb00acbab14b13c8a957df1e7a34abe33"}, + {file = "simsimd-5.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20de1bc709aab06be05ee8e1bbf8c4839a0e3ad4a3226cd7af3a209a0d39b8c4"}, + {file = "simsimd-5.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32eb54545ce316f76e4781754ce6851bf913ad4b8ae22c71b2a0f4c58abfe2b1"}, + {file = "simsimd-5.7.2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:2b2fba2cbb7c8bda67e39a7b31df68f526d90081e3d30c7ef2708613e26c7b0e"}, + {file = "simsimd-5.7.2-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:ff79b7d00a13a0b3af53856931cef8b7e5561dea725727a619b48c8be3541b29"}, + {file = "simsimd-5.7.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d9594ccb9ca38eaf42a38ff1187fa575e75405f75508cee7edc97087d09fb8aa"}, + {file = "simsimd-5.7.2-cp37-cp37m-musllinux_1_2_armv7l.whl", hash = "sha256:40022feb691558af64f6f466d2aea9d6464d44541521b05d1bf65002ca27b9d8"}, + {file = "simsimd-5.7.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:30a7be9ab4d591e8aeabdb9b08442192bae56e38a09d1f99bd1514c90328c0d0"}, + {file = "simsimd-5.7.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:1703aa656790d0dec568a23089f532030ed22fe13bc5406a05f33e8754f7aa9f"}, + {file = "simsimd-5.7.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:b3aa831d870f0abea801d5378e98b56c24283af23873c270d403ac97592e012c"}, + {file = "simsimd-5.7.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:30112c056e8e9b27f72748ce6c73f7f746eb7c458ea0fa868dc8b97c6b86302b"}, + {file = "simsimd-5.7.2-cp37-cp37m-win32.whl", hash = "sha256:f3623e6d35e8ef2d4fae428fa6d2f6eed776200862c393497c7b8fccb93fd5fb"}, + {file = "simsimd-5.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:e0c662030c6dd6129500790cfb1084c97f8a47fab6d3ba7f31353a587ec60db6"}, + {file = "simsimd-5.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a175a5454785b180a73692d797d0ddb441afd9eee52eef220b1b7ad2c8dee5c0"}, + {file = "simsimd-5.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f950b89e6d347f484c3e0e326dc7bb412f4b9e15b339ef923060ffc59b4f096"}, + {file = "simsimd-5.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7da292f878174d751f176c7eddad771ad6f6d8262c5491cc5ef795036c8a02de"}, + {file = "simsimd-5.7.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09a3a030ec75944cb4c9ccbbca98e62daba59c97874b02d4ddec69058011877"}, + {file = "simsimd-5.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8f0de711fbd56e8298d16be5723fe4a960782b441ec16ccee9092196b12ed3"}, + {file = "simsimd-5.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4f4a2699bdb711dc99925292d1a852dc02076a7f1eccd623120eb97ff3a7fded"}, + {file = "simsimd-5.7.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:a1368ea6492765be77b8746cf5ae8eb571b0ed730fd6efa9a26243d6b5f8de30"}, + {file = "simsimd-5.7.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6aad4f243736f2e37ccc42232dddfd297276eec1ed97cf32b72f28b5fe709810"}, + {file = "simsimd-5.7.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8c610e1e53625dbf215cdd944990c8c31219bc0cca48c7feb07085319fc6b418"}, + {file = "simsimd-5.7.2-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:109a34e5c880541d251e668307bb8b3c147caa8289647b06cfc025bafa02349d"}, + {file = "simsimd-5.7.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:0bdfc6bd105e53f817f7f005c3dbbf14873f575bd938af963fa113a0d6839a11"}, + {file = "simsimd-5.7.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:0ca50f188ecd63b4ff184465eb8afe416bc78e4d33f1a325c806ffc7923041b1"}, + {file = "simsimd-5.7.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:7bc6221ec42933c03f54afe00e82a494d324eba3426ad4422ac7dc8d85dc2d7a"}, + {file = "simsimd-5.7.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:1533345d1b30de3b5a4974b5804b204a71a1bab7f8e50e80f6294407b78fc72d"}, + {file = "simsimd-5.7.2-cp38-cp38-win32.whl", hash = "sha256:524adcf09f48409a5a86de60ebbd5db083e9950424531778c291cf1f8f37e008"}, + {file = "simsimd-5.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:e445aaf7a2430ccb5add737dc672534e5bf966cdf57a0463d2cc9e0cac2c3696"}, + {file = "simsimd-5.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:84efcbefb07f4d4da1f705779612e69e496b1fc4e71c19fab1e9568557754d99"}, + {file = "simsimd-5.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:589e2dd8a04bf22d9c21ad073522d8df8038b838239974a160a38f79d272a49d"}, + {file = "simsimd-5.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ead0fb95c9dfef7fbfeb6331836d32385fc6ac4191ac2a945b205a5b0900a83a"}, + {file = "simsimd-5.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd5c2d2446dbcbce8df3c93aeffa811a221c111885a9aef07988aed264264a74"}, + {file = "simsimd-5.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ea47fd60141163d5464ea5847f9894b47be6c692028a3f70d2f55133d5c39be"}, + {file = "simsimd-5.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c1403394aa023d05f41f249558d4844d574e545a7ea0edcdddc49f859a699ee"}, + {file = "simsimd-5.7.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:fdf44c1009c24d3b844cced218c8b89f3ef448acf2a8ff0c6600190b39aed664"}, + {file = "simsimd-5.7.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:d0eb8834fbc669588eb63eb66ec510173a24cc093db43510d57b1d1ae1889fa0"}, + {file = "simsimd-5.7.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4f56e01b732670d394e99b3a89445401a077f814314ad03ede272fef2bc46f35"}, + {file = "simsimd-5.7.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eea25b5fc063b4cd8778ba62524f19763b86fe570e1afaded20499ff04394dfc"}, + {file = "simsimd-5.7.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:531f37af4672bd1f18a19c992146082229a191e7d111d9c75773f0873fcb3b15"}, + {file = "simsimd-5.7.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:34e29a7db85d632cf78d7bdd60906d07d9a9c8c93ef9f5dd6d591a55a0dbb37c"}, + {file = "simsimd-5.7.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:03ad6c19c5642909e1e582b09a4c8700c1d36094667cae294d6d08d0aafdc879"}, + {file = "simsimd-5.7.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f565f7f4685985c00d734d87d92dfede6d50760da354642f3464273b49caecaf"}, + {file = "simsimd-5.7.2-cp39-cp39-win32.whl", hash = "sha256:b70fed46f59e6da24932bc19b6af092e94764030918572f11eb2a0eed9d6f73c"}, + {file = "simsimd-5.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:4b0b36634a9a3d6b2d7dfaed4233c802028882c13c36f49d613b76c0269581af"}, + {file = "simsimd-5.7.2-cp39-cp39-win_arm64.whl", hash = "sha256:de69350e4491cb25321b22575404d6ab2eb47548264147213827fcdcbb344ec1"}, + {file = "simsimd-5.7.2.tar.gz", hash = "sha256:a1a0f2b025484044864b62ca6ad64afc1f9e5a8b020963d1db1d4a5a8f105616"}, ] [[package]] diff --git a/libs/core/pyproject.toml b/libs/core/pyproject.toml index 0f48099afb131..4a26b7f35a16f 100644 --- a/libs/core/pyproject.toml +++ b/libs/core/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain-core" -version = "0.3.11" +version = "0.3.12" description = "Building applications with LLMs through composability" authors = [] license = "MIT" @@ -133,6 +133,7 @@ classmethod-decorators = [ ruff = "^0.5" + [tool.poetry.group.typing.dependencies] mypy = ">=1.10,<1.11" types-pyyaml = "^6.0.12.2" @@ -141,12 +142,14 @@ types-jinja2 = "^2.11.9" simsimd = "^5.0.0" + [tool.poetry.group.dev.dependencies] jupyter = "^1.0.0" setuptools = "^67.6.1" grandalf = "^0.8" + [tool.poetry.group.test.dependencies] pytest = "^7.3.0" freezegun = "^1.2.2" @@ -166,14 +169,17 @@ version = "^1.26.0" python = ">=3.12" + [tool.poetry.group.test_integration.dependencies] + [tool.poetry.group.typing.dependencies.langchain-text-splitters] path = "../text-splitters" develop = true + [tool.poetry.group.test.dependencies.langchain-standard-tests] path = "../standard-tests" develop = true From 4d11211c8998e9b8e3243417c275290cade0c71f Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Thu, 17 Oct 2024 07:31:14 -0700 Subject: [PATCH 17/84] infra: schedule triggers monorepo only by default (#27428) fixes https://github.com/langchain-ai/langchain/issues/27426 --- .github/workflows/api_doc_build.yml | 1 + .github/workflows/check-broken-links.yml | 2 +- .github/workflows/people.yml | 2 +- .github/workflows/run_notebooks.yml | 5 +++-- .github/workflows/scheduled_test.yml | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/api_doc_build.yml b/.github/workflows/api_doc_build.yml index 6973e64f742e6..361dfd775c1fa 100644 --- a/.github/workflows/api_doc_build.yml +++ b/.github/workflows/api_doc_build.yml @@ -10,6 +10,7 @@ env: jobs: build: + if: github.repository == 'langchain-ai/langchain' || github.event_name != 'schedule' runs-on: ubuntu-latest permissions: write-all steps: diff --git a/.github/workflows/check-broken-links.yml b/.github/workflows/check-broken-links.yml index 37c94910fa141..626d345051a73 100644 --- a/.github/workflows/check-broken-links.yml +++ b/.github/workflows/check-broken-links.yml @@ -7,7 +7,7 @@ on: jobs: check-links: - if: github.repository_owner == 'langchain-ai' + if: github.repository_owner == 'langchain-ai' || github.event_name != 'schedule' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/people.yml b/.github/workflows/people.yml index adc3a789f6a7d..8321a3197923b 100644 --- a/.github/workflows/people.yml +++ b/.github/workflows/people.yml @@ -14,7 +14,7 @@ on: jobs: langchain-people: - if: github.repository_owner == 'langchain-ai' + if: github.repository_owner == 'langchain-ai' || github.event_name != 'schedule' runs-on: ubuntu-latest permissions: write-all steps: diff --git a/.github/workflows/run_notebooks.yml b/.github/workflows/run_notebooks.yml index 9d4091c107c26..06c9a74d9051f 100644 --- a/.github/workflows/run_notebooks.yml +++ b/.github/workflows/run_notebooks.yml @@ -20,7 +20,7 @@ env: jobs: build: runs-on: ubuntu-latest - + if: github.repository == 'langchain-ai/langchain' || github.event_name != 'schedule' name: "Test docs" steps: - uses: actions/checkout@v4 @@ -51,5 +51,6 @@ jobs: MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} TAVILY_API_KEY: ${{ secrets.TAVILY_API_KEY }} + WORKING_DIRECTORY: ${{ github.event.inputs.working-directory || 'all' }} run: | - ./docs/scripts/execute_notebooks.sh ${{ github.event.inputs.working-directory || 'all' }} + ./docs/scripts/execute_notebooks.sh $WORKING_DIRECTORY diff --git a/.github/workflows/scheduled_test.yml b/.github/workflows/scheduled_test.yml index 0523fbab8fa8f..6a4767988bf2a 100644 --- a/.github/workflows/scheduled_test.yml +++ b/.github/workflows/scheduled_test.yml @@ -10,7 +10,7 @@ env: jobs: build: - if: github.repository_owner == 'langchain-ai' + if: github.repository_owner == 'langchain-ai' || github.event_name != 'schedule' name: Python ${{ matrix.python-version }} - ${{ matrix.working-directory }} runs-on: ubuntu-latest strategy: From 322ca8481245d3e50350236de55c8aa5c9235e31 Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Thu, 17 Oct 2024 07:47:29 -0700 Subject: [PATCH 18/84] infra: add ibm api build (#27425) test build: https://github.com/langchain-ai/langchain/actions/runs/11386155179 --- .github/workflows/api_doc_build.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/api_doc_build.yml b/.github/workflows/api_doc_build.yml index 361dfd775c1fa..460699f6de377 100644 --- a/.github/workflows/api_doc_build.yml +++ b/.github/workflows/api_doc_build.yml @@ -78,6 +78,11 @@ jobs: with: repository: langchain-ai/langchain-databricks path: langchain-databricks + - uses: actions/checkout@v4 + with: + repository: langchain-ai/langchain-ibm + path: langchain-ibm + - name: Set Git config @@ -103,7 +108,8 @@ jobs: langchain/libs/experimental \ langchain/libs/partners/milvus \ langchain/libs/partners/unstructured \ - langchain/libs/databricks + langchain/libs/partners/databricks \ + langchain/libs/partners/ibm mv langchain-google/libs/genai langchain/libs/partners/google-genai mv langchain-google/libs/vertexai langchain/libs/partners/google-vertexai mv langchain-google/libs/community langchain/libs/partners/google-community @@ -120,6 +126,7 @@ jobs: mv langchain-milvus/libs/milvus langchain/libs/partners/milvus mv langchain-unstructured/libs/unstructured langchain/libs/partners/unstructured mv langchain-databricks/libs/databricks langchain/libs/partners/databricks + mv langchain-ibm/libs/ibm langchain/libs/partners/ibm - name: Rm old html run: @@ -138,8 +145,8 @@ jobs: run: | python -m pip install -U uv python -m uv pip install --upgrade --no-cache-dir pip setuptools - # skip airbyte and ibm due to pandas dependency issue - python -m uv pip install $(ls ./libs/partners | grep -vE "airbyte|ibm" | xargs -I {} echo "./libs/partners/{}") + # skip airbyte due to pandas dependency issue + python -m uv pip install $(ls ./libs/partners | grep -vE "airbyte" | xargs -I {} echo "./libs/partners/{}") python -m uv pip install libs/core libs/langchain libs/text-splitters libs/community libs/experimental python -m uv pip install -r docs/api_reference/requirements.txt From 2a27234a772da182ece41db4fda888729fa80448 Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Thu, 17 Oct 2024 08:51:33 -0700 Subject: [PATCH 19/84] docs: fix error reference header (#27431) --- docs/docs/troubleshooting/errors/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/troubleshooting/errors/index.mdx b/docs/docs/troubleshooting/errors/index.mdx index 2258714de1e1f..aad0308b9c494 100644 --- a/docs/docs/troubleshooting/errors/index.mdx +++ b/docs/docs/troubleshooting/errors/index.mdx @@ -1,4 +1,4 @@ -# Error codes +# Error reference This page contains guides around resolving common errors you may find while building with LangChain. Errors referenced below will have an `lc_error_code` property corresponding to one of the below codes when they are thrown in code. From 6e228c84a895d1889a5378eea1763244dfeba8ea Mon Sep 17 00:00:00 2001 From: Isaac Francisco <78627776+isahers1@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:29:29 -0700 Subject: [PATCH 20/84] docs: update mongo table (#27434) --- docs/src/theme/FeatureTables.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/theme/FeatureTables.js b/docs/src/theme/FeatureTables.js index 4a46e08cb1781..2016c7c5454b2 100644 --- a/docs/src/theme/FeatureTables.js +++ b/docs/src/theme/FeatureTables.js @@ -1026,8 +1026,8 @@ const FEATURE_TABLES = { link: "mongodb_atlas", deleteById: true, filtering: true, - searchByVector: false, - searchWithScore: false, + searchByVector: true, + searchWithScore: true, async: true, passesStandardTests: false, multiTenancy: false, From 97dc578d473d684e495a3c5e6bf9bf5c74ab6134 Mon Sep 17 00:00:00 2001 From: Mateusz Szewczyk <139469471+MateuszOssGit@users.noreply.github.com> Date: Thu, 17 Oct 2024 21:41:24 +0200 Subject: [PATCH 21/84] docs: Update custom name for IBM (#27437) Thank you for contributing to LangChain! PR: Update custom name for IBM in api_reference docs Co-authored-by: Erick Friis --- docs/api_reference/create_api_rst.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/api_reference/create_api_rst.py b/docs/api_reference/create_api_rst.py index bb67e0bcd007a..d907eec4c360e 100644 --- a/docs/api_reference/create_api_rst.py +++ b/docs/api_reference/create_api_rst.py @@ -533,6 +533,7 @@ def _build_index(dirs: List[str]) -> None: "airbyte": "Airbyte", "aws": "AWS", "ai21": "AI21", + "ibm": "IBM", } ordered = ["core", "langchain", "text-splitters", "community", "experimental"] main_ = [dir_ for dir_ in ordered if dir_ in dirs] From 7d65a32ee0859bf1cf1f3cf86e41791f3be8ba3c Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Fri, 18 Oct 2024 08:02:09 -0700 Subject: [PATCH 22/84] openai: audio modality, remove sockets from unit tests (#27436) --- libs/partners/openai/.gitignore | 1 + libs/partners/openai/Makefile | 14 +- .../langchain_openai/chat_models/base.py | 13 + libs/partners/openai/poetry.lock | 586 ++++++++++-------- libs/partners/openai/pyproject.toml | 3 +- .../chat_models/audio_input.wav | Bin 0 -> 223278 bytes .../chat_models/test_base.py | 69 +++ .../tests/unit_tests/chat_models/test_base.py | 7 +- .../openai/tests/unit_tests/llms/test_base.py | 2 +- .../tests/unit_tests/test_token_counts.py | 1 + 10 files changed, 417 insertions(+), 279 deletions(-) create mode 100644 libs/partners/openai/tests/integration_tests/chat_models/audio_input.wav diff --git a/libs/partners/openai/.gitignore b/libs/partners/openai/.gitignore index bee8a64b79a99..fb181ca6a53df 100644 --- a/libs/partners/openai/.gitignore +++ b/libs/partners/openai/.gitignore @@ -1 +1,2 @@ __pycache__ +tiktoken_cache \ No newline at end of file diff --git a/libs/partners/openai/Makefile b/libs/partners/openai/Makefile index 28b03e388ad25..210bdb4479007 100644 --- a/libs/partners/openai/Makefile +++ b/libs/partners/openai/Makefile @@ -8,7 +8,19 @@ TEST_FILE ?= tests/unit_tests/ integration_test integration_tests: TEST_FILE=tests/integration_tests/ -test tests integration_test integration_tests: +# unit tests are run with the --disable-socket flag to prevent network calls +# use tiktoken cache to enable token counting without socket (internet) access +test tests: + mkdir -p tiktoken_cache + @if [ ! -f tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 ]; then \ + curl -o tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 https://openaipublic.blob.core.windows.net/encodings/cl100k_base.tiktoken; \ + fi + @if [ ! -f tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 ]; then \ + curl -o tiktoken_cache/fb374d419588a4632f3f557e76b4b70aebbca790 https://openaipublic.blob.core.windows.net/encodings/o200k_base.tiktoken; \ + fi + TIKTOKEN_CACHE_DIR=tiktoken_cache poetry run pytest --disable-socket --allow-unix-socket $(TEST_FILE) + +integration_test integration_tests: poetry run pytest $(TEST_FILE) test_watch: diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 233fa8700a436..a1b7e989e7181 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -129,6 +129,8 @@ def _convert_dict_to_message(_dict: Mapping[str, Any]) -> BaseMessage: invalid_tool_calls.append( make_invalid_tool_call(raw_tool_call, str(e)) ) + if audio := _dict.get("audio"): + additional_kwargs["audio"] = audio return AIMessage( content=content, additional_kwargs=additional_kwargs, @@ -219,6 +221,17 @@ def _convert_message_to_dict(message: BaseMessage) -> dict: # If tool calls present, content null value should be None not empty string. if "function_call" in message_dict or "tool_calls" in message_dict: message_dict["content"] = message_dict["content"] or None + + if "audio" in message.additional_kwargs: + # openai doesn't support passing the data back - only the id + # https://platform.openai.com/docs/guides/audio/multi-turn-conversations + raw_audio = message.additional_kwargs["audio"] + audio = ( + {"id": message.additional_kwargs["audio"]["id"]} + if "id" in raw_audio + else raw_audio + ) + message_dict["audio"] = audio elif isinstance(message, SystemMessage): message_dict["role"] = "system" elif isinstance(message, FunctionMessage): diff --git a/libs/partners/openai/poetry.lock b/libs/partners/openai/poetry.lock index 9d9e88d6a471f..e253f4abf7e18 100644 --- a/libs/partners/openai/poetry.lock +++ b/libs/partners/openai/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -13,13 +13,13 @@ files = [ [[package]] name = "anyio" -version = "4.6.0" +version = "4.6.2.post1" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, - {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, + {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, + {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, ] [package.dependencies] @@ -30,7 +30,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -46,101 +46,116 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win32.whl", hash = "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc"}, + {file = "charset_normalizer-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win32.whl", hash = "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99"}, + {file = "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win32.whl", hash = "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7"}, + {file = "charset_normalizer-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win32.whl", hash = "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67"}, + {file = "charset_normalizer-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win32.whl", hash = "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149"}, + {file = "charset_normalizer-3.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win32.whl", hash = "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613"}, + {file = "charset_normalizer-3.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win32.whl", hash = "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2"}, + {file = "charset_normalizer-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca"}, + {file = "charset_normalizer-3.4.0-py3-none-any.whl", hash = "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079"}, + {file = "charset_normalizer-3.4.0.tar.gz", hash = "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e"}, ] [[package]] @@ -173,83 +188,73 @@ files = [ [[package]] name = "coverage" -version = "7.6.1" +version = "7.6.3" description = "Code coverage measurement for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, - {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, - {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, - {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, - {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, - {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, - {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, - {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, - {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, - {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, - {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, - {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, - {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, - {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, - {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, - {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, - {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, - {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, - {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, - {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, - {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, - {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, - {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, - {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, - {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, - {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, - {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, - {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, - {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, - {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, - {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, - {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, - {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, - {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, - {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, - {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, - {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, - {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, + {file = "coverage-7.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6da42bbcec130b188169107ecb6ee7bd7b4c849d24c9370a0c884cf728d8e976"}, + {file = "coverage-7.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c222958f59b0ae091f4535851cbb24eb57fc0baea07ba675af718fb5302dddb2"}, + {file = "coverage-7.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab84a8b698ad5a6c365b08061920138e7a7dd9a04b6feb09ba1bfae68346ce6d"}, + {file = "coverage-7.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70a6756ce66cd6fe8486c775b30889f0dc4cb20c157aa8c35b45fd7868255c5c"}, + {file = "coverage-7.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c2e6fa98032fec8282f6b27e3f3986c6e05702828380618776ad794e938f53a"}, + {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:921fbe13492caf6a69528f09d5d7c7d518c8d0e7b9f6701b7719715f29a71e6e"}, + {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:6d99198203f0b9cb0b5d1c0393859555bc26b548223a769baf7e321a627ed4fc"}, + {file = "coverage-7.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:87cd2e29067ea397a47e352efb13f976eb1b03e18c999270bb50589323294c6e"}, + {file = "coverage-7.6.3-cp310-cp310-win32.whl", hash = "sha256:a3328c3e64ea4ab12b85999eb0779e6139295bbf5485f69d42cf794309e3d007"}, + {file = "coverage-7.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bca4c8abc50d38f9773c1ec80d43f3768df2e8576807d1656016b9d3eeaa96fd"}, + {file = "coverage-7.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c51ef82302386d686feea1c44dbeef744585da16fcf97deea2a8d6c1556f519b"}, + {file = "coverage-7.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0ca37993206402c6c35dc717f90d4c8f53568a8b80f0bf1a1b2b334f4d488fba"}, + {file = "coverage-7.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c77326300b839c44c3e5a8fe26c15b7e87b2f32dfd2fc9fee1d13604347c9b38"}, + {file = "coverage-7.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e484e479860e00da1f005cd19d1c5d4a813324e5951319ac3f3eefb497cc549"}, + {file = "coverage-7.6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c6c0f4d53ef603397fc894a895b960ecd7d44c727df42a8d500031716d4e8d2"}, + {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:37be7b5ea3ff5b7c4a9db16074dc94523b5f10dd1f3b362a827af66a55198175"}, + {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:43b32a06c47539fe275106b376658638b418c7cfdfff0e0259fbf877e845f14b"}, + {file = "coverage-7.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee77c7bef0724165e795b6b7bf9c4c22a9b8468a6bdb9c6b4281293c6b22a90f"}, + {file = "coverage-7.6.3-cp311-cp311-win32.whl", hash = "sha256:43517e1f6b19f610a93d8227e47790722c8bf7422e46b365e0469fc3d3563d97"}, + {file = "coverage-7.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:04f2189716e85ec9192df307f7c255f90e78b6e9863a03223c3b998d24a3c6c6"}, + {file = "coverage-7.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27bd5f18d8f2879e45724b0ce74f61811639a846ff0e5c0395b7818fae87aec6"}, + {file = "coverage-7.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d546cfa78844b8b9c1c0533de1851569a13f87449897bbc95d698d1d3cb2a30f"}, + {file = "coverage-7.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9975442f2e7a5cfcf87299c26b5a45266ab0696348420049b9b94b2ad3d40234"}, + {file = "coverage-7.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:583049c63106c0555e3ae3931edab5669668bbef84c15861421b94e121878d3f"}, + {file = "coverage-7.6.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2341a78ae3a5ed454d524206a3fcb3cec408c2a0c7c2752cd78b606a2ff15af4"}, + {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a4fb91d5f72b7e06a14ff4ae5be625a81cd7e5f869d7a54578fc271d08d58ae3"}, + {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e279f3db904e3b55f520f11f983cc8dc8a4ce9b65f11692d4718ed021ec58b83"}, + {file = "coverage-7.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aa23ce39661a3e90eea5f99ec59b763b7d655c2cada10729ed920a38bfc2b167"}, + {file = "coverage-7.6.3-cp312-cp312-win32.whl", hash = "sha256:52ac29cc72ee7e25ace7807249638f94c9b6a862c56b1df015d2b2e388e51dbd"}, + {file = "coverage-7.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:40e8b1983080439d4802d80b951f4a93d991ef3261f69e81095a66f86cf3c3c6"}, + {file = "coverage-7.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9134032f5aa445ae591c2ba6991d10136a1f533b1d2fa8f8c21126468c5025c6"}, + {file = "coverage-7.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:99670790f21a96665a35849990b1df447993880bb6463a0a1d757897f30da929"}, + {file = "coverage-7.6.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc7d6b380ca76f5e817ac9eef0c3686e7834c8346bef30b041a4ad286449990"}, + {file = "coverage-7.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7b26757b22faf88fcf232f5f0e62f6e0fd9e22a8a5d0d5016888cdfe1f6c1c4"}, + {file = "coverage-7.6.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c59d6a4a4633fad297f943c03d0d2569867bd5372eb5684befdff8df8522e39"}, + {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f263b18692f8ed52c8de7f40a0751e79015983dbd77b16906e5b310a39d3ca21"}, + {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:79644f68a6ff23b251cae1c82b01a0b51bc40c8468ca9585c6c4b1aeee570e0b"}, + {file = "coverage-7.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:71967c35828c9ff94e8c7d405469a1fb68257f686bca7c1ed85ed34e7c2529c4"}, + {file = "coverage-7.6.3-cp313-cp313-win32.whl", hash = "sha256:e266af4da2c1a4cbc6135a570c64577fd3e6eb204607eaff99d8e9b710003c6f"}, + {file = "coverage-7.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:ea52bd218d4ba260399a8ae4bb6b577d82adfc4518b93566ce1fddd4a49d1dce"}, + {file = "coverage-7.6.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8d4c6ea0f498c7c79111033a290d060c517853a7bcb2f46516f591dab628ddd3"}, + {file = "coverage-7.6.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:331b200ad03dbaa44151d74daeb7da2cf382db424ab923574f6ecca7d3b30de3"}, + {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54356a76b67cf8a3085818026bb556545ebb8353951923b88292556dfa9f812d"}, + {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebec65f5068e7df2d49466aab9128510c4867e532e07cb6960075b27658dca38"}, + {file = "coverage-7.6.3-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33a785ea8354c480515e781554d3be582a86297e41ccbea627a5c632647f2cd"}, + {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f7ddb920106bbbbcaf2a274d56f46956bf56ecbde210d88061824a95bdd94e92"}, + {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:70d24936ca6c15a3bbc91ee9c7fc661132c6f4c9d42a23b31b6686c05073bde5"}, + {file = "coverage-7.6.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c30e42ea11badb147f0d2e387115b15e2bd8205a5ad70d6ad79cf37f6ac08c91"}, + {file = "coverage-7.6.3-cp313-cp313t-win32.whl", hash = "sha256:365defc257c687ce3e7d275f39738dcd230777424117a6c76043459db131dd43"}, + {file = "coverage-7.6.3-cp313-cp313t-win_amd64.whl", hash = "sha256:23bb63ae3f4c645d2d82fa22697364b0046fbafb6261b258a58587441c5f7bd0"}, + {file = "coverage-7.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:da29ceabe3025a1e5a5aeeb331c5b1af686daab4ff0fb4f83df18b1180ea83e2"}, + {file = "coverage-7.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df8c05a0f574d480947cba11b947dc41b1265d721c3777881da2fb8d3a1ddfba"}, + {file = "coverage-7.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec1e3b40b82236d100d259854840555469fad4db64f669ab817279eb95cd535c"}, + {file = "coverage-7.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4adeb878a374126f1e5cf03b87f66279f479e01af0e9a654cf6d1509af46c40"}, + {file = "coverage-7.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43d6a66e33b1455b98fc7312b124296dad97a2e191c80320587234a77b1b736e"}, + {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1990b1f4e2c402beb317840030bb9f1b6a363f86e14e21b4212e618acdfce7f6"}, + {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:12f9515d875859faedb4144fd38694a761cd2a61ef9603bf887b13956d0bbfbb"}, + {file = "coverage-7.6.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99ded130555c021d99729fabd4ddb91a6f4cc0707df4b1daf912c7850c373b13"}, + {file = "coverage-7.6.3-cp39-cp39-win32.whl", hash = "sha256:c3a79f56dee9136084cf84a6c7c4341427ef36e05ae6415bf7d787c96ff5eaa3"}, + {file = "coverage-7.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:aac7501ae73d4a02f4b7ac8fcb9dc55342ca98ffb9ed9f2dfb8a25d53eda0e4d"}, + {file = "coverage-7.6.3-pp39.pp310-none-any.whl", hash = "sha256:b9853509b4bf57ba7b1f99b9d866c422c9c5248799ab20e652bbb8a184a38181"}, + {file = "coverage-7.6.3.tar.gz", hash = "sha256:bb7d5fe92bd0dc235f63ebe9f8c6e0884f7360f88f3411bfed1350c872ef2054"}, ] [package.dependencies] @@ -381,72 +386,84 @@ files = [ [[package]] name = "jiter" -version = "0.5.0" +version = "0.6.1" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" files = [ - {file = "jiter-0.5.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b599f4e89b3def9a94091e6ee52e1d7ad7bc33e238ebb9c4c63f211d74822c3f"}, - {file = "jiter-0.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a063f71c4b06225543dddadbe09d203dc0c95ba352d8b85f1221173480a71d5"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acc0d5b8b3dd12e91dd184b87273f864b363dfabc90ef29a1092d269f18c7e28"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c22541f0b672f4d741382a97c65609332a783501551445ab2df137ada01e019e"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63314832e302cc10d8dfbda0333a384bf4bcfce80d65fe99b0f3c0da8945a91a"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a25fbd8a5a58061e433d6fae6d5298777c0814a8bcefa1e5ecfff20c594bd749"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:503b2c27d87dfff5ab717a8200fbbcf4714516c9d85558048b1fc14d2de7d8dc"}, - {file = "jiter-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d1f3d27cce923713933a844872d213d244e09b53ec99b7a7fdf73d543529d6d"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c95980207b3998f2c3b3098f357994d3fd7661121f30669ca7cb945f09510a87"}, - {file = "jiter-0.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afa66939d834b0ce063f57d9895e8036ffc41c4bd90e4a99631e5f261d9b518e"}, - {file = "jiter-0.5.0-cp310-none-win32.whl", hash = "sha256:f16ca8f10e62f25fd81d5310e852df6649af17824146ca74647a018424ddeccf"}, - {file = "jiter-0.5.0-cp310-none-win_amd64.whl", hash = "sha256:b2950e4798e82dd9176935ef6a55cf6a448b5c71515a556da3f6b811a7844f1e"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4c8e1ed0ef31ad29cae5ea16b9e41529eb50a7fba70600008e9f8de6376d553"}, - {file = "jiter-0.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6f16e21276074a12d8421692515b3fd6d2ea9c94fd0734c39a12960a20e85f3"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5280e68e7740c8c128d3ae5ab63335ce6d1fb6603d3b809637b11713487af9e6"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:583c57fc30cc1fec360e66323aadd7fc3edeec01289bfafc35d3b9dcb29495e4"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26351cc14507bdf466b5f99aba3df3143a59da75799bf64a53a3ad3155ecded9"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4829df14d656b3fb87e50ae8b48253a8851c707da9f30d45aacab2aa2ba2d614"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a42a4bdcf7307b86cb863b2fb9bb55029b422d8f86276a50487982d99eed7c6e"}, - {file = "jiter-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04d461ad0aebf696f8da13c99bc1b3e06f66ecf6cfd56254cc402f6385231c06"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e6375923c5f19888c9226582a124b77b622f8fd0018b843c45eeb19d9701c403"}, - {file = "jiter-0.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cec323a853c24fd0472517113768c92ae0be8f8c384ef4441d3632da8baa646"}, - {file = "jiter-0.5.0-cp311-none-win32.whl", hash = "sha256:aa1db0967130b5cab63dfe4d6ff547c88b2a394c3410db64744d491df7f069bb"}, - {file = "jiter-0.5.0-cp311-none-win_amd64.whl", hash = "sha256:aa9d2b85b2ed7dc7697597dcfaac66e63c1b3028652f751c81c65a9f220899ae"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9f664e7351604f91dcdd557603c57fc0d551bc65cc0a732fdacbf73ad335049a"}, - {file = "jiter-0.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:044f2f1148b5248ad2c8c3afb43430dccf676c5a5834d2f5089a4e6c5bbd64df"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:702e3520384c88b6e270c55c772d4bd6d7b150608dcc94dea87ceba1b6391248"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:528d742dcde73fad9d63e8242c036ab4a84389a56e04efd854062b660f559544"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf80e5fe6ab582c82f0c3331df27a7e1565e2dcf06265afd5173d809cdbf9ba"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44dfc9ddfb9b51a5626568ef4e55ada462b7328996294fe4d36de02fce42721f"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c451f7922992751a936b96c5f5b9bb9312243d9b754c34b33d0cb72c84669f4e"}, - {file = "jiter-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:308fce789a2f093dca1ff91ac391f11a9f99c35369117ad5a5c6c4903e1b3e3a"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7f5ad4a7c6b0d90776fdefa294f662e8a86871e601309643de30bf94bb93a64e"}, - {file = "jiter-0.5.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea189db75f8eca08807d02ae27929e890c7d47599ce3d0a6a5d41f2419ecf338"}, - {file = "jiter-0.5.0-cp312-none-win32.whl", hash = "sha256:e3bbe3910c724b877846186c25fe3c802e105a2c1fc2b57d6688b9f8772026e4"}, - {file = "jiter-0.5.0-cp312-none-win_amd64.whl", hash = "sha256:a586832f70c3f1481732919215f36d41c59ca080fa27a65cf23d9490e75b2ef5"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f04bc2fc50dc77be9d10f73fcc4e39346402ffe21726ff41028f36e179b587e6"}, - {file = "jiter-0.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f433a4169ad22fcb550b11179bb2b4fd405de9b982601914ef448390b2954f3"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad4a6398c85d3a20067e6c69890ca01f68659da94d74c800298581724e426c7e"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6baa88334e7af3f4d7a5c66c3a63808e5efbc3698a1c57626541ddd22f8e4fbf"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ece0a115c05efca597c6d938f88c9357c843f8c245dbbb53361a1c01afd7148"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:335942557162ad372cc367ffaf93217117401bf930483b4b3ebdb1223dbddfa7"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649b0ee97a6e6da174bffcb3c8c051a5935d7d4f2f52ea1583b5b3e7822fbf14"}, - {file = "jiter-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4be354c5de82157886ca7f5925dbda369b77344b4b4adf2723079715f823989"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5206144578831a6de278a38896864ded4ed96af66e1e63ec5dd7f4a1fce38a3a"}, - {file = "jiter-0.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8120c60f8121ac3d6f072b97ef0e71770cc72b3c23084c72c4189428b1b1d3b6"}, - {file = "jiter-0.5.0-cp38-none-win32.whl", hash = "sha256:6f1223f88b6d76b519cb033a4d3687ca157c272ec5d6015c322fc5b3074d8a5e"}, - {file = "jiter-0.5.0-cp38-none-win_amd64.whl", hash = "sha256:c59614b225d9f434ea8fc0d0bec51ef5fa8c83679afedc0433905994fb36d631"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0af3838cfb7e6afee3f00dc66fa24695199e20ba87df26e942820345b0afc566"}, - {file = "jiter-0.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:550b11d669600dbc342364fd4adbe987f14d0bbedaf06feb1b983383dcc4b961"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:489875bf1a0ffb3cb38a727b01e6673f0f2e395b2aad3c9387f94187cb214bbf"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b250ca2594f5599ca82ba7e68785a669b352156260c5362ea1b4e04a0f3e2389"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ea18e01f785c6667ca15407cd6dabbe029d77474d53595a189bdc813347218e"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462a52be85b53cd9bffd94e2d788a09984274fe6cebb893d6287e1c296d50653"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92cc68b48d50fa472c79c93965e19bd48f40f207cb557a8346daa020d6ba973b"}, - {file = "jiter-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1c834133e59a8521bc87ebcad773608c6fa6ab5c7a022df24a45030826cf10bc"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab3a71ff31cf2d45cb216dc37af522d335211f3a972d2fe14ea99073de6cb104"}, - {file = "jiter-0.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cccd3af9c48ac500c95e1bcbc498020c87e1781ff0345dd371462d67b76643eb"}, - {file = "jiter-0.5.0-cp39-none-win32.whl", hash = "sha256:368084d8d5c4fc40ff7c3cc513c4f73e02c85f6009217922d0823a48ee7adf61"}, - {file = "jiter-0.5.0-cp39-none-win_amd64.whl", hash = "sha256:ce03f7b4129eb72f1687fa11300fbf677b02990618428934662406d2a76742a1"}, - {file = "jiter-0.5.0.tar.gz", hash = "sha256:1d916ba875bcab5c5f7d927df998c4cb694d27dceddf3392e58beaf10563368a"}, + {file = "jiter-0.6.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d08510593cb57296851080018006dfc394070178d238b767b1879dc1013b106c"}, + {file = "jiter-0.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adef59d5e2394ebbad13b7ed5e0306cceb1df92e2de688824232a91588e77aa7"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e02f7a27f2bcc15b7d455c9df05df8ffffcc596a2a541eeda9a3110326e7a3"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed69a7971d67b08f152c17c638f0e8c2aa207e9dd3a5fcd3cba294d39b5a8d2d"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2019d966e98f7c6df24b3b8363998575f47d26471bfb14aade37630fae836a1"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36c0b51a285b68311e207a76c385650322734c8717d16c2eb8af75c9d69506e7"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:220e0963b4fb507c525c8f58cde3da6b1be0bfddb7ffd6798fb8f2531226cdb1"}, + {file = "jiter-0.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa25c7a9bf7875a141182b9c95aed487add635da01942ef7ca726e42a0c09058"}, + {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e90552109ca8ccd07f47ca99c8a1509ced93920d271bb81780a973279974c5ab"}, + {file = "jiter-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:67723a011964971864e0b484b0ecfee6a14de1533cff7ffd71189e92103b38a8"}, + {file = "jiter-0.6.1-cp310-none-win32.whl", hash = "sha256:33af2b7d2bf310fdfec2da0177eab2fedab8679d1538d5b86a633ebfbbac4edd"}, + {file = "jiter-0.6.1-cp310-none-win_amd64.whl", hash = "sha256:7cea41c4c673353799906d940eee8f2d8fd1d9561d734aa921ae0f75cb9732f4"}, + {file = "jiter-0.6.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b03c24e7da7e75b170c7b2b172d9c5e463aa4b5c95696a368d52c295b3f6847f"}, + {file = "jiter-0.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:47fee1be677b25d0ef79d687e238dc6ac91a8e553e1a68d0839f38c69e0ee491"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0d2f6e01a8a0fb0eab6d0e469058dab2be46ff3139ed2d1543475b5a1d8e7"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b809e39e342c346df454b29bfcc7bca3d957f5d7b60e33dae42b0e5ec13e027"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9ac7c2f092f231f5620bef23ce2e530bd218fc046098747cc390b21b8738a7a"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e51a2d80d5fe0ffb10ed2c82b6004458be4a3f2b9c7d09ed85baa2fbf033f54b"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3343d4706a2b7140e8bd49b6c8b0a82abf9194b3f0f5925a78fc69359f8fc33c"}, + {file = "jiter-0.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82521000d18c71e41c96960cb36e915a357bc83d63a8bed63154b89d95d05ad1"}, + {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c843e7c1633470708a3987e8ce617ee2979ee18542d6eb25ae92861af3f1d62"}, + {file = "jiter-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a2e861658c3fe849efc39b06ebb98d042e4a4c51a8d7d1c3ddc3b1ea091d0784"}, + {file = "jiter-0.6.1-cp311-none-win32.whl", hash = "sha256:7d72fc86474862c9c6d1f87b921b70c362f2b7e8b2e3c798bb7d58e419a6bc0f"}, + {file = "jiter-0.6.1-cp311-none-win_amd64.whl", hash = "sha256:3e36a320634f33a07794bb15b8da995dccb94f944d298c8cfe2bd99b1b8a574a"}, + {file = "jiter-0.6.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1fad93654d5a7dcce0809aff66e883c98e2618b86656aeb2129db2cd6f26f867"}, + {file = "jiter-0.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4e6e340e8cd92edab7f6a3a904dbbc8137e7f4b347c49a27da9814015cc0420c"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:691352e5653af84ed71763c3c427cff05e4d658c508172e01e9c956dfe004aba"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:defee3949313c1f5b55e18be45089970cdb936eb2a0063f5020c4185db1b63c9"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26d2bdd5da097e624081c6b5d416d3ee73e5b13f1703bcdadbb1881f0caa1933"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18aa9d1626b61c0734b973ed7088f8a3d690d0b7f5384a5270cd04f4d9f26c86"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a3567c8228afa5ddcce950631c6b17397ed178003dc9ee7e567c4c4dcae9fa0"}, + {file = "jiter-0.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5c0507131c922defe3f04c527d6838932fcdfd69facebafd7d3574fa3395314"}, + {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:540fcb224d7dc1bcf82f90f2ffb652df96f2851c031adca3c8741cb91877143b"}, + {file = "jiter-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e7b75436d4fa2032b2530ad989e4cb0ca74c655975e3ff49f91a1a3d7f4e1df2"}, + {file = "jiter-0.6.1-cp312-none-win32.whl", hash = "sha256:883d2ced7c21bf06874fdeecab15014c1c6d82216765ca6deef08e335fa719e0"}, + {file = "jiter-0.6.1-cp312-none-win_amd64.whl", hash = "sha256:91e63273563401aadc6c52cca64a7921c50b29372441adc104127b910e98a5b6"}, + {file = "jiter-0.6.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:852508a54fe3228432e56019da8b69208ea622a3069458252f725d634e955b31"}, + {file = "jiter-0.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f491cc69ff44e5a1e8bc6bf2b94c1f98d179e1aaf4a554493c171a5b2316b701"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc56c8f0b2a28ad4d8047f3ae62d25d0e9ae01b99940ec0283263a04724de1f3"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51b58f7a0d9e084a43b28b23da2b09fc5e8df6aa2b6a27de43f991293cab85fd"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f79ce15099154c90ef900d69c6b4c686b64dfe23b0114e0971f2fecd306ec6c"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:03a025b52009f47e53ea619175d17e4ded7c035c6fbd44935cb3ada11e1fd592"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74a8d93718137c021d9295248a87c2f9fdc0dcafead12d2930bc459ad40f885"}, + {file = "jiter-0.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40b03b75f903975f68199fc4ec73d546150919cb7e534f3b51e727c4d6ccca5a"}, + {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:825651a3f04cf92a661d22cad61fc913400e33aa89b3e3ad9a6aa9dc8a1f5a71"}, + {file = "jiter-0.6.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:928bf25eb69ddb292ab8177fe69d3fbf76c7feab5fce1c09265a7dccf25d3991"}, + {file = "jiter-0.6.1-cp313-none-win32.whl", hash = "sha256:352cd24121e80d3d053fab1cc9806258cad27c53cad99b7a3cac57cf934b12e4"}, + {file = "jiter-0.6.1-cp313-none-win_amd64.whl", hash = "sha256:be7503dd6f4bf02c2a9bacb5cc9335bc59132e7eee9d3e931b13d76fd80d7fda"}, + {file = "jiter-0.6.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:31d8e00e1fb4c277df8ab6f31a671f509ebc791a80e5c61fdc6bc8696aaa297c"}, + {file = "jiter-0.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77c296d65003cd7ee5d7b0965f6acbe6cffaf9d1fa420ea751f60ef24e85fed5"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeeb0c0325ef96c12a48ea7e23e2e86fe4838e6e0a995f464cf4c79fa791ceeb"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a31c6fcbe7d6c25d6f1cc6bb1cba576251d32795d09c09961174fe461a1fb5bd"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59e2b37f3b9401fc9e619f4d4badcab2e8643a721838bcf695c2318a0475ae42"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bae5ae4853cb9644144e9d0755854ce5108d470d31541d83f70ca7ecdc2d1637"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df588e9c830b72d8db1dd7d0175af6706b0904f682ea9b1ca8b46028e54d6e9"}, + {file = "jiter-0.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15f8395e835cf561c85c1adee72d899abf2733d9df72e9798e6d667c9b5c1f30"}, + {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a99d4e0b5fc3b05ea732d67eb2092fe894e95a90e6e413f2ea91387e228a307"}, + {file = "jiter-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a311df1fa6be0ccd64c12abcd85458383d96e542531bafbfc0a16ff6feda588f"}, + {file = "jiter-0.6.1-cp38-none-win32.whl", hash = "sha256:81116a6c272a11347b199f0e16b6bd63f4c9d9b52bc108991397dd80d3c78aba"}, + {file = "jiter-0.6.1-cp38-none-win_amd64.whl", hash = "sha256:13f9084e3e871a7c0b6e710db54444088b1dd9fbefa54d449b630d5e73bb95d0"}, + {file = "jiter-0.6.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f1c53615fcfec3b11527c08d19cff6bc870da567ce4e57676c059a3102d3a082"}, + {file = "jiter-0.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f791b6a4da23238c17a81f44f5b55d08a420c5692c1fda84e301a4b036744eb1"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c97e90fec2da1d5f68ef121444c2c4fa72eabf3240829ad95cf6bbeca42a301"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3cbc1a66b4e41511209e97a2866898733c0110b7245791ac604117b7fb3fedb7"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4e85f9e12cd8418ab10e1fcf0e335ae5bb3da26c4d13a0fd9e6a17a674783b6"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08be33db6dcc374c9cc19d3633af5e47961a7b10d4c61710bd39e48d52a35824"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:677be9550004f5e010d673d3b2a2b815a8ea07a71484a57d3f85dde7f14cf132"}, + {file = "jiter-0.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e8bd065be46c2eecc328e419d6557bbc37844c88bb07b7a8d2d6c91c7c4dedc9"}, + {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bd95375ce3609ec079a97c5d165afdd25693302c071ca60c7ae1cf826eb32022"}, + {file = "jiter-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db459ed22d0208940d87f614e1f0ea5a946d29a3cfef71f7e1aab59b6c6b2afb"}, + {file = "jiter-0.6.1-cp39-none-win32.whl", hash = "sha256:d71c962f0971347bd552940ab96aa42ceefcd51b88c4ced8a27398182efa8d80"}, + {file = "jiter-0.6.1-cp39-none-win_amd64.whl", hash = "sha256:d465db62d2d10b489b7e7a33027c4ae3a64374425d757e963f86df5b5f2e7fc5"}, + {file = "jiter-0.6.1.tar.gz", hash = "sha256:e19cd21221fc139fb032e4112986656cb2739e9fe6d84c13956ab30ccc7d4449"}, ] [[package]] @@ -476,7 +493,7 @@ files = [ [[package]] name = "langchain-core" -version = "0.3.9" +version = "0.3.12" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.9,<4.0" @@ -492,7 +509,7 @@ pydantic = [ {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] PyYAML = ">=5.3" -tenacity = "^8.1.0,!=8.4.0" +tenacity = ">=8.1.0,!=8.4.0,<10.0.0" typing-extensions = ">=4.7" [package.source] @@ -520,13 +537,13 @@ url = "../../standard-tests" [[package]] name = "langsmith" -version = "0.1.131" +version = "0.1.136" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.131-py3-none-any.whl", hash = "sha256:80c106b1c42307195cc0bb3a596472c41ef91b79d15bcee9938307800336c563"}, - {file = "langsmith-0.1.131.tar.gz", hash = "sha256:626101a3bf3ca481e5110d5155ace8aa066e4e9cc2fa7d96c8290ade0fbff797"}, + {file = "langsmith-0.1.136-py3-none-any.whl", hash = "sha256:cad2215eb7a754ee259878e19c558f4f8d3795aa1b699f087d4500e640f80d0a"}, + {file = "langsmith-0.1.136.tar.gz", hash = "sha256:5c0de01a313db70dd9a85845c0f416a69b5b653b3e98ba413d7d41e8851315b1"}, ] [package.dependencies] @@ -541,38 +558,43 @@ requests-toolbelt = ">=1.0.0,<2.0.0" [[package]] name = "mypy" -version = "1.11.2" +version = "1.12.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d42a6dd818ffce7be66cce644f1dff482f1d97c53ca70908dff0b9ddc120b77a"}, - {file = "mypy-1.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:801780c56d1cdb896eacd5619a83e427ce436d86a3bdf9112527f24a66618fef"}, - {file = "mypy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41ea707d036a5307ac674ea172875f40c9d55c5394f888b168033177fce47383"}, - {file = "mypy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6e658bd2d20565ea86da7d91331b0eed6d2eee22dc031579e6297f3e12c758c8"}, - {file = "mypy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:478db5f5036817fe45adb7332d927daa62417159d49783041338921dcf646fc7"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75746e06d5fa1e91bfd5432448d00d34593b52e7e91a187d981d08d1f33d4385"}, - {file = "mypy-1.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a976775ab2256aadc6add633d44f100a2517d2388906ec4f13231fafbb0eccca"}, - {file = "mypy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd953f221ac1379050a8a646585a29574488974f79d8082cedef62744f0a0104"}, - {file = "mypy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:57555a7715c0a34421013144a33d280e73c08df70f3a18a552938587ce9274f4"}, - {file = "mypy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:36383a4fcbad95f2657642a07ba22ff797de26277158f1cc7bd234821468b1b6"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e8960dbbbf36906c5c0b7f4fbf2f0c7ffb20f4898e6a879fcf56a41a08b0d318"}, - {file = "mypy-1.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06d26c277962f3fb50e13044674aa10553981ae514288cb7d0a738f495550b36"}, - {file = "mypy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e7184632d89d677973a14d00ae4d03214c8bc301ceefcdaf5c474866814c987"}, - {file = "mypy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3a66169b92452f72117e2da3a576087025449018afc2d8e9bfe5ffab865709ca"}, - {file = "mypy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:969ea3ef09617aff826885a22ece0ddef69d95852cdad2f60c8bb06bf1f71f70"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:37c7fa6121c1cdfcaac97ce3d3b5588e847aa79b580c1e922bb5d5d2902df19b"}, - {file = "mypy-1.11.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4a8a53bc3ffbd161b5b2a4fff2f0f1e23a33b0168f1c0778ec70e1a3d66deb86"}, - {file = "mypy-1.11.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ff93107f01968ed834f4256bc1fc4475e2fecf6c661260066a985b52741ddce"}, - {file = "mypy-1.11.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:edb91dded4df17eae4537668b23f0ff6baf3707683734b6a818d5b9d0c0c31a1"}, - {file = "mypy-1.11.2-cp38-cp38-win_amd64.whl", hash = "sha256:ee23de8530d99b6db0573c4ef4bd8f39a2a6f9b60655bf7a1357e585a3486f2b"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:801ca29f43d5acce85f8e999b1e431fb479cb02d0e11deb7d2abb56bdaf24fd6"}, - {file = "mypy-1.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:af8d155170fcf87a2afb55b35dc1a0ac21df4431e7d96717621962e4b9192e70"}, - {file = "mypy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7821776e5c4286b6a13138cc935e2e9b6fde05e081bdebf5cdb2bb97c9df81d"}, - {file = "mypy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539c570477a96a4e6fb718b8d5c3e0c0eba1f485df13f86d2970c91f0673148d"}, - {file = "mypy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:3f14cd3d386ac4d05c5a39a51b84387403dadbd936e17cb35882134d4f8f0d24"}, - {file = "mypy-1.11.2-py3-none-any.whl", hash = "sha256:b499bc07dbdcd3de92b0a8b29fdf592c111276f6a12fe29c30f6c417dd546d12"}, - {file = "mypy-1.11.2.tar.gz", hash = "sha256:7f9993ad3e0ffdc95c2a14b66dee63729f021968bff8ad911867579c65d13a79"}, + {file = "mypy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4397081e620dc4dc18e2f124d5e1d2c288194c2c08df6bdb1db31c38cd1fe1ed"}, + {file = "mypy-1.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:684a9c508a283f324804fea3f0effeb7858eb03f85c4402a967d187f64562469"}, + {file = "mypy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cabe4cda2fa5eca7ac94854c6c37039324baaa428ecbf4de4567279e9810f9e"}, + {file = "mypy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:060a07b10e999ac9e7fa249ce2bdcfa9183ca2b70756f3bce9df7a92f78a3c0a"}, + {file = "mypy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:0eff042d7257f39ba4ca06641d110ca7d2ad98c9c1fb52200fe6b1c865d360ff"}, + {file = "mypy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b86de37a0da945f6d48cf110d5206c5ed514b1ca2614d7ad652d4bf099c7de7"}, + {file = "mypy-1.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20c7c5ce0c1be0b0aea628374e6cf68b420bcc772d85c3c974f675b88e3e6e57"}, + {file = "mypy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a64ee25f05fc2d3d8474985c58042b6759100a475f8237da1f4faf7fcd7e6309"}, + {file = "mypy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:faca7ab947c9f457a08dcb8d9a8664fd438080e002b0fa3e41b0535335edcf7f"}, + {file = "mypy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:5bc81701d52cc8767005fdd2a08c19980de9ec61a25dbd2a937dfb1338a826f9"}, + {file = "mypy-1.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8462655b6694feb1c99e433ea905d46c478041a8b8f0c33f1dab00ae881b2164"}, + {file = "mypy-1.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:923ea66d282d8af9e0f9c21ffc6653643abb95b658c3a8a32dca1eff09c06475"}, + {file = "mypy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ebf9e796521f99d61864ed89d1fb2926d9ab6a5fab421e457cd9c7e4dd65aa9"}, + {file = "mypy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e478601cc3e3fa9d6734d255a59c7a2e5c2934da4378f3dd1e3411ea8a248642"}, + {file = "mypy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:c72861b7139a4f738344faa0e150834467521a3fba42dc98264e5aa9507dd601"}, + {file = "mypy-1.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52b9e1492e47e1790360a43755fa04101a7ac72287b1a53ce817f35899ba0521"}, + {file = "mypy-1.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:48d3e37dd7d9403e38fa86c46191de72705166d40b8c9f91a3de77350daa0893"}, + {file = "mypy-1.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2f106db5ccb60681b622ac768455743ee0e6a857724d648c9629a9bd2ac3f721"}, + {file = "mypy-1.12.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:233e11b3f73ee1f10efada2e6da0f555b2f3a5316e9d8a4a1224acc10e7181d3"}, + {file = "mypy-1.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:4ae8959c21abcf9d73aa6c74a313c45c0b5a188752bf37dace564e29f06e9c1b"}, + {file = "mypy-1.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eafc1b7319b40ddabdc3db8d7d48e76cfc65bbeeafaa525a4e0fa6b76175467f"}, + {file = "mypy-1.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9b9ce1ad8daeb049c0b55fdb753d7414260bad8952645367e70ac91aec90e07e"}, + {file = "mypy-1.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfe012b50e1491d439172c43ccb50db66d23fab714d500b57ed52526a1020bb7"}, + {file = "mypy-1.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c40658d4fa1ab27cb53d9e2f1066345596af2f8fe4827defc398a09c7c9519b"}, + {file = "mypy-1.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:dee78a8b9746c30c1e617ccb1307b351ded57f0de0d287ca6276378d770006c0"}, + {file = "mypy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b5df6c8a8224f6b86746bda716bbe4dbe0ce89fd67b1fa4661e11bfe38e8ec8"}, + {file = "mypy-1.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5feee5c74eb9749e91b77f60b30771563327329e29218d95bedbe1257e2fe4b0"}, + {file = "mypy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:77278e8c6ffe2abfba6db4125de55f1024de9a323be13d20e4f73b8ed3402bd1"}, + {file = "mypy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:dcfb754dea911039ac12434d1950d69a2f05acd4d56f7935ed402be09fad145e"}, + {file = "mypy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:06de0498798527451ffb60f68db0d368bd2bae2bbfb5237eae616d4330cc87aa"}, + {file = "mypy-1.12.0-py3-none-any.whl", hash = "sha256:fd313226af375d52e1e36c383f39bf3836e1f192801116b31b090dfcd3ec5266"}, + {file = "mypy-1.12.0.tar.gz", hash = "sha256:65a22d87e757ccd95cbbf6f7e181e6caa87128255eb2b6be901bb71b26d8a99d"}, ] [package.dependencies] @@ -644,13 +666,13 @@ files = [ [[package]] name = "openai" -version = "1.51.0" +version = "1.52.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.51.0-py3-none-any.whl", hash = "sha256:d9affafb7e51e5a27dce78589d4964ce4d6f6d560307265933a94b2e3f3c5d2c"}, - {file = "openai-1.51.0.tar.gz", hash = "sha256:8dc4f9d75ccdd5466fc8c99a952186eddceb9fd6ba694044773f3736a847149d"}, + {file = "openai-1.52.0-py3-none-any.whl", hash = "sha256:0c249f20920183b0a2ca4f7dba7b0452df3ecd0fa7985eb1d91ad884bc3ced9c"}, + {file = "openai-1.52.0.tar.gz", hash = "sha256:95c65a5f77559641ab8f3e4c3a050804f7b51d278870e2ec1f7444080bfe565a"}, ] [package.dependencies] @@ -1054,6 +1076,20 @@ pytest = ">=6.2.5" [package.extras] dev = ["pre-commit", "pytest-asyncio", "tox"] +[[package]] +name = "pytest-socket" +version = "0.6.0" +description = "Pytest Plugin to disable socket calls during tests" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "pytest_socket-0.6.0-py3-none-any.whl", hash = "sha256:cca72f134ff01e0023c402e78d31b32e68da3efdf3493bf7788f8eba86a6824c"}, + {file = "pytest_socket-0.6.0.tar.gz", hash = "sha256:363c1d67228315d4fc7912f1aabfd570de29d0e3db6217d61db5728adacd7138"}, +] + +[package.dependencies] +pytest = ">=3.6.3" + [[package]] name = "pytest-watcher" version = "0.3.5" @@ -1334,13 +1370,13 @@ files = [ [[package]] name = "syrupy" -version = "4.7.1" +version = "4.7.2" description = "Pytest Snapshot Test Utility" optional = false python-versions = ">=3.8.1" files = [ - {file = "syrupy-4.7.1-py3-none-any.whl", hash = "sha256:be002267a512a4bedddfae2e026c93df1ea928ae10baadc09640516923376d41"}, - {file = "syrupy-4.7.1.tar.gz", hash = "sha256:f9d4485f3f27d0e5df6ed299cac6fa32eb40a441915d988e82be5a4bdda335c8"}, + {file = "syrupy-4.7.2-py3-none-any.whl", hash = "sha256:eae7ba6be5aed190237caa93be288e97ca1eec5ca58760e4818972a10c4acc64"}, + {file = "syrupy-4.7.2.tar.gz", hash = "sha256:ea45e099f242de1bb53018c238f408a5bb6c82007bc687aefcbeaa0e1c2e935a"}, ] [package.dependencies] @@ -1348,13 +1384,13 @@ pytest = ">=7.0.0,<9.0.0" [[package]] name = "tenacity" -version = "8.5.0" +version = "9.0.0" description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" files = [ - {file = "tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687"}, - {file = "tenacity-8.5.0.tar.gz", hash = "sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78"}, + {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, + {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, ] [package.extras] @@ -1523,4 +1559,4 @@ watchmedo = ["PyYAML (>=3.10)"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "fec30c155fdf4518310435f840b374ff86183936452fed3f59ad8ee0fcfefac5" +content-hash = "82984f2d0f65cf0d18789eda536b66448839e19edf0466583e06ca3f0c709159" diff --git a/libs/partners/openai/pyproject.toml b/libs/partners/openai/pyproject.toml index c33100e5ecbd4..e5f2f3f9b717e 100644 --- a/libs/partners/openai/pyproject.toml +++ b/libs/partners/openai/pyproject.toml @@ -24,7 +24,7 @@ ignore_missing_imports = true [tool.poetry.dependencies] python = ">=3.9,<4.0" langchain-core = "^0.3.9" -openai = "^1.40.0" +openai = "^1.52.0" tiktoken = ">=0.7,<1" [tool.ruff.lint] @@ -72,6 +72,7 @@ syrupy = "^4.0.2" pytest-watcher = "^0.3.4" pytest-asyncio = "^0.21.1" pytest-cov = "^4.1.0" +pytest-socket = "^0.6.0" [[tool.poetry.group.test.dependencies.numpy]] version = "^1" python = "<3.12" diff --git a/libs/partners/openai/tests/integration_tests/chat_models/audio_input.wav b/libs/partners/openai/tests/integration_tests/chat_models/audio_input.wav new file mode 100644 index 0000000000000000000000000000000000000000..2238bf1405695b9175ff0200fbc230fdd2fd1eb8 GIT binary patch literal 223278 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�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 z z>r1Uwwoh_)z0qJdPDz#~_a>{7tCKG!bCS;_ze$cs-H;xUecSoh&3ISp>&+?lyY>|O zRr@EqTi{1~USN9gjPTlUPWY-|f!)>IsE;u^nO|G?+XDhW1s)8}3vLSB73dilAKVeT zE;>4XVWKkecCMHEzq~hdKTEutI5u}!-nhILdFLfA&lwjR5zU6@hEERHhsr{Ep$~&+ z2j<(3*~@&wm~G6ISvtcw##pFVXn$%w#hMK_o-?)>>x@f`q}a8!#<#{cW552Uw%sdo z&d9Dv_e;N;ilsVmdb%!uqrry~19*2-R#8J6CfdMWj1a$V}w^sr3J z%xmeoRL|7ysRhXqsnb$p)9o^^XY*tP56KSAoSE&B?d(o+b^lENfByU4Jm-b%n)Hxt zg>%1li*cRV*R0V0(RRr!+3Vk6jI!Pjd>Nb^Y!mp(I>%aNy&RYw8W3?JsmS*-0#lIz z(a|w0CzP0%Se@3 zP`l7v+2%Ka!GQ_(<<=Z?xABwlqA|%h*?8Ev-WYEb7UGt>)%;Vd*O%4@8{Vn^qVAEplj^55v`O|&-I4w|Jv;qf>hI*=$u+4KnG>@cvm>&v zXGW#pNadskr)pCR(pP4Z>8|N%$&QU@H@w*JZsUREN2%%QXVS}4JCj9?Ba`>1HfN?f z-@5(1=iT=1c1L$#aC7~CwS~rC=2_M|<_qR-^LcB&y&}*%SP^U={wF*x(l(Naw2OQg z=^X75eKz`f^icHSSZ&OUO^O{C`y{#|x+Z#S^!;c~?8(@{*x-0WY-H@E=)uUU$gId+ zk@k_7BFV_lkznN0(DT9hfuVtO0&@Zj15XC}2S(c`StZ7aM$ov`c+~jHc+1$PSBYQO zwRPedPZQiyM7Cx2aHc*pE_;mggY$?R@LGERx=Z9N{q3IZ1?4^~32m6* zkO#HLwBNN3Vl#UfcNp&*|BB7uV{9 zVV`Zcws%|QmSdHP)zs}{?6!8+`px>nddK=)o^M(o$?G?)xz;>uymhlR&6;T4V?At5 zu?AX0tc$Gy)>T$dv68t~*eW#-np@3R%thuBv6y4ci_Dg0+BjgWGUmwWoNA0Qh8qdv zZ$TIL=tJ}?^uc;R{Up6!yv2OMQ^yO#OUDRUi68t|{mFiJKjwR$; zm+NVs;dyS<)4hM(weCaiX!m?~uz2s0GAFNgFK~}{Ew|Dsa~j2~6uPz>m1nV2>Kt|c zb84M>r$j!fme0$a3g?iMk%#L9TvOJIx_R!g?uqU|cZ7SBdxzkHXWZrP8uu5sNMKT- z*U3B6yU-i&J>bpvR(M}}zk7QGS5G%Z>s-@|ET|z|AfEDe@&3u`lfp_ z{~_&N@^4#Rzs2kuu+^06(3Ga02+uTR+;APqsf*E++B#7~5`Fp!|hhWWz zwEMN`+5>X6@6+yWdfu;1l~;FYQ?y%T-5Ujo-k^=v#>(HTWE&UAW1x1fc8=UlZ;-q? zOEBpfa@UE|<<5HjWJLEB9Nt3^Bb^1PXohzo7EH;0QbDWkW5WG^eiQt=S@8AdrX$+m zZ<1@Y+W*x5!hhfYNS-U?0oq8-WDAD zhOGID|AGAdOmOuV{wjHVEnE6l-v1!z`#brab@H3v%P(z~QNB&E!5{MA?m-~@-4Yk5 z`f|g5dAeX3DGS+HAQ> zJZDLSFjF26%43>fbFSGvf{gCgZj-AvNv_w;a<#@wq%c}g+)!yo9pWfDfpZ5?G<~XPvC2)t=W(?rwLmD?ryhWjM~V~cQnJ!`jC}Uxr{QrZ*Ka7#j{SPI! z`cPt`cVrB`=`WShwCMjv-E$HpJtH&lNq>&a#mD@)@;|e3hP19+PE{K{gP*{{l|eZ6VSzbpIlk<5hE zGJe06#|GKU%@U!h`>^j46u^DnxSs|cVaQ>?9w_w-=T!BOq(dedE^3r`94~PpcUV%_ z{Y2^Bb5hfT5!zj5ZV#~-r-`*VMLs!I-u0AExi2PnM(!%hx-~tx>lk+?ZzJPH_3Gg+ z5E(MAW`R{<1BuHkq>Y>jVP_8%JgU&J7+!W%5+Ej~NJ?#d_E# z_6<#k(sl4HR8V{Z7pQXR@LTZD_zsn4;5VAp$!g}p!>|n2N^x9NKf(O6MfL{MlgJ7o(HhI30W$r>aXYif&Y+O5x7=Rav-ZhD@<{sEDb~<8DWtWc;e$$YfZ# zBgx4!KKqGnyHxC2-=;BpirCp+@;F64VQhC3zc)Y|B9`!KvA3r;edA>DQp1HwxlWc1 zk^91`du#TQ`^Dnh&X@5|kE$!g*1jZ`cCuK|^JKm2#kSrdR(HC1!7IdKKdjBup3$C^ zB@c*2zFD?7Q7rKj^7&KR5^aIl?fYbDSGmdo*`E<&>&J%2F;KfEvfIdUX<+Af(Jc*rW5Kdl9GzTsUX zR(X`{*Y$GD?d2?Q6I;~5e@pO(s06h&+7|JuGlXUO&tIbbDU3;PU1pIt&s*$O2u8eE z{K!(V)c**Mn&utyzm=n2stwfR`cYwnj{0|tH@a2M*LD5?udnx?9~Z24RR2iqQMLD& z_pJYg_O!4vGyFUJJB1mWC;U~wKU?b{c;^ML(kXNXxEE_*Xq)|{-o_|3?$xv2BK>P) zz5l2&%#V3h#yqd9`(J}oePXJeHZ-_0dW~IUW&K&17m~-Nh8myReFGCDf*tO*(T4iZ zYweA4&GN5wo^&s9kJWv1iA0%k;WYm9XFIL4i?Tz!4rXhs+L-1VshJI@)gH>;6AUL# zi}&%LsQXt2@7MJsoay=m<2&spXM1C9!`11eF*o#dq$*f%yz8%WU)B!Uox>x-vkWhr zb?$eEc{_}pkQ1J4{GJ`0{WE)o9Qii$DdTQ;Q~FZp2W^0U(8%a#7$?~`cxz?uZgYF; zZ@Zs(&$=;xvNzLht#>we=wrPn^-<=X{7Ro>F0hsc24c$k@k@HtGC7(>Gslw`!R_zMYAqPUGBcA=bOLj-TX7O1!7%i zc-8&@>qh&a{k(p!_P+O#yTY4ipJv~yO?0nvZ71w4^fc{P^I~(Tc2e@0%o1<3`-05i zV)s|~sCTY=nSYvgz2WQq^^obgcQ}*N<>|Q5+E}M;b2>OZw7=c?#x(tN?H}t=?QVaK z(Zw2WO!KFBmgFScYp-huJjwT%XK@>=?i#O;QDqcJn^p*Vqq**R{R zp45&vI$Dcl$%+1S=W73L>%8FC=1KbL#&kF0kG4NEmgzI~o2^UrW3tQKSw@llyVcF> zQ{TzSGj8*b_f4;ZF<<*%dVj{vUgzJb*ZH>#ZcF<8B*A@i;0OC1^F8Z&+chigYIDD^ zd%1d*KG`U=FVL@b15T+|CCuo{{wiaX-_K2ZTbygNw>!&(VXer%nd$EqIX`%f+C1rU z^1fT^Y<9Z4qy1~_4Z(HZ;qL2X9r(#)IgnQo2tmsX&cd)ImwWp_K%-HrA< zGwgTHj%w_zpJ+|7C+qXvW3(OKSAM1OnK8&)>a3Os^klPG-yq}nr|f;srT$D~wtkFv znrj;yOvnG&9qm0}{-jkoIo@^VgZg-Dgt0_8z2}^7wYK_a#%R0Hepg%NekZ>>MElqK z*!a@E)gR$jX#0$NggKd{KWnVwe~X+FyZRjcdF$?)UC=x6WJbAN3y6 zc4_wrCwZyg(Rfc^lfBu$!#q2%#8~b;ncbd!MxSd9wl=zVXalWx_2Xo;CiF4pHf^i3 z(qE@407$T-^+JxmV}S%{-R< zNi5JMfv)zQ?#kqosk{9e9QtEt=t%yFHEj_4Ax%&JOoR|3k4zhIf-2 z^6xN?H(UD`dqw&_V~)Pj%hOIXFEdx`Kk5SmTZ7~D&%K%ECUdEgG)9_3j1|UWbCv#) z-ok)UzDa+?f6KpH82=W=2LA;ooqgY%X`FAhGM>>anJcC@$lGT;ZvSXK?Vpr+!)vGC zW!`3t*MBr`GLJL9*5A?I(9&9^H&B~wPPA8>o2<9&1;#RexI4)+tuO5Ftg%+ide@ld z#IlZetMRS5)A-qM>rU0W>z=pRjb!&ZEse+ZE$-`D+)mZsm=PJ#y7qv7 zs#x})#X4@#W5V!m^b7sr5~cRnZqf7n+a*`f#{0?H;|!FjZnt-#jE&{)SnVG7ne2=1 zSpQ0+QM=4NocS};-+92Fqkm(RdFN$*&;Hl*X}0&25pWoCEqxAIT0_%TjKwyb&&mkz*{VSx}CODA8mZ?@6DVbWBHKr zondLqyn7_7dePJ z<&4Vq^7rZQ8K>#*JKv_?%ZzZZ^VWDvn=;}<+<11Xv)!xFf7JdK%ygcAqPI*dGv5;L z^^TY4CA}~84(7u~QtROxetZ8Sugd*gqJstgkM4V37wuc`3Aa$tYmPR=U!UzMd$L#Z z2}`|Cysd7bAe)ceYsH(@dI5>x#^^a(H_5Er;4k&T<&xYTcy2C}`_NEoi)E?zZZ!?)I(vgWjY5YJH=z&D?6AY$xo4Mw!3a zIqcMHovroO9{nl(bpH|Ov$URiEIZVnBzeI-+U5Sa&fLtN>|}qZpwPh*6TKkTVW{!C zKE>E0`iqDBZ?p=@UVLn}wQ|gpwNIRxnZxc%<9h34vxPBNkNIPqw%I~=igtm1zwwYU z&UnpVzs^0yeblY>b{V zm@H_#jsCI3LpNw$^eN`2)(&g9IY1xgz2{c@e`=GALFQ)3GrlJF^=g@cBm8sZi1wI0 zv|GHL?g77rK2LXqUzg5Y-UMxoWF?=~lm1l6s%5m7wYB;qMrZ3M`>1)lUf?|^xs5sc zYxZpO7~>c1X~C8t<8Vjn#f@Z;5kCcCSx_H4ra(EH5)Su>3e##Q=3|1|wH?PmXGKchWtx3F%o+FOSt zC-u7-6ztV#EHQ@IhwQF_%gwEV^C$Ujb%_x4E_#W+K(65gW1ny$FZ(|mCzv7YcWan6 z+a6@@w0cOs=W6qL?HPTj@p7Ph@RGm=>tcPNMBx4WsrnAH#O@Xv6j)@PEezP*5;=UP zPqJEt<^-;?2Ki6AeVw-M7v2Q%o9oQq%=P}f>>a6FQ%`04`(w;XW2mNkcVy~iO_>?Rp!4;X7CX6h#C>T!WS z_Rc`((0QSf(7@kGOh8gf30_saP;{!V;Z?zX&R3Wg=R=DZ)D8lN6N5bY3Olk>m4DY^S|?u@<_ z`ZqWvaC>lj;NehFcxdQR+xK$Z8=Q*-JrDNYmwC~`xjc16V=P(S_+9dn)X`)*IW;-C zzFR{<{qp*;$)fsK>o?Y}uBoVfyY}+h6KZNJpQyCTT9;f?@@moc;y}@=!*3tT9+-Hr z-~M|K3_S4XzAgv;`LE}JKM(4MIvvuEv_JCSk%tZ+C>~ihpmIXpk%}j)Uo6j5FRcBh z@nd(f^OQB)aII_YZovlwFNMyHoRZt8#pYIjwF%~D3!luHo|u{YK;EB)y$hc$d@c9w z#OmnQ@B_gIB3DMI#8<@*g?mRTLKj3=M;1q`V>id%%sC?w&%HbU%!0zg>Vj_hqw=51 z&o4Ms_+#PmE!GvDSI{AEV9w6i(&z`#?_!0~^P>L-?+AQt?b6>d9b>$;TYT>_{b7H+ z_lsm0)7trxOCGC_^>=!^y?pN#@p=dKd-WBPTe;D>G^?dc8uL@*lhO2Z$&VX8uH903 zQN>qf|CQ=xnbIGNbBm82{^-!213&I>x4&V}zhho z(S{@CMd`8~6%SVTslKLSeWg+UQr)tK9qAG7#hDk~E^f8ELO))6DljfEHsti#c zM}j{FW?4(jnPwkrwf%{`(SB00a+CarCEK~$*kvW`9d=jyeDg7*tGUBiFY7!Tm=)+5 zd?Rp+eXV_h{+NHzJtBD1^m+*9(^D1o*Vp!_KBlT`rB!)ZMc?vIO8XR#I&$Zsc?a%0 zm^yIrfl&vp*x%wns{{KEPCM}Y!IutRdgQC3)@4p<_ww?xO%=aZ-cU8aW?9wzs;L!M zRHthur0;RR*2DI0qn~G`k4Zo64Gsl!PiXOZ;oO4ZiCdx{M8-!xi=GkBOZ3jI%#FnN zhVHa3G>6%P0(S`wv1&2aua#|5>Ms+m6(_t&Yhfl zRetBfXIsWw+*7zAVJBKguZx`-{VDo)Y)Eu*v{z(PXuiGHc-cQq7^*Avsb-ONWguo> zt&jKSW~;ru`hviQ@CA`8Bf~XBUoGt2;e9Ur zTin0Yc|1L%AzHVwszaq&(Z6bU<+;^f#j29ej=XnZ%>GmMe{pcu!S4^9bnvwUKOH#z z;FX6D92#+?O>xhX%8CKyXO(v<+f=%tvb-Wwb3xTLH8)f_RZFY?tT{jPnbSYeIgkw; zYuxEAcSrhHgq9_KZfUeR+M-?Vw9rw@GRy4?!XHNeiI0dH(T(O(eTn;t+g>~0thRp( zGzJF++XXKR4i5GR_72a8&dynr_j^I8@W#To^M~XePF#}PKCd{hMM3-g_4%vv=H-sa zsfzp;>Jl6l{4`h;S`iu>dfHxRI@${FRpEkO(O)voH%~Pyj8^8ck{w-QW$pC=EA(S< zSa^Cg9y>XwF4`jUQuv2ZI`VPUk8X?{3C*&%OB8XlAo-DATTgOi&i2&fjqU0#tF5UT zQZupYwW^gBEz5=%_dRmlk={oFMGqeBdL(t=SD9mZ2U{Ne0l&Wexqv4^NOyx^uJ4)6S zol{&`l3Uifyt4GG;!6%MKCp5B-b4M0#+QCnwz_O#S>N)uWp>HtqOXs(DK0EaRF+oV zT77Hf?d7+ZJzLSLYGd_fwI|e%&5YK2g@cJuL67{#*bzJIY{*Xc#zcmoP<2dEu!!HMvLQ3nJ@7Cxw?q9*B;O z*2Kg4zqc%G`%mlrh41H1jIE2_9^DwbET=3nAa8k|mHTka5AHQO=L5?UMnDl{on9DFMLXynYu`O((VaXH;{C+1z0yEAcP&L#0l zvD(lb!K(uOxczwdIkD z#>(7^g7Vcx7aaNbQ2cQFqR}PKlwDB%PpMlvuH^gTr;FDeeX(eKQE_R<@&_v(tXNt0 zPFbh2z7;j)eX6glozl?OIZf{uIwpQy{-ONZ+&R&Y{2uA~sq6GUdBcxgecZP#KNjii zxQY)e_SbE6Zx1{k?iDEser%kTxvb{Qs-BHiM(@N^d3zF1L|TTo2kSz8LfTh(kTcI2%i;o>(+z9>7jVrO~x@=WQx;<-gfkLDKbE`Fu-XnFsNZz`WD?^3b5 z?CJ7Jm1C>kuiM%1O=f~W&MXN3oAYR4uvPbht)Z3f;Kt&#V8y&Mj#=2Qwnd&frt!@3 z*%g=8b#X?S4Z%UNo5I(aR{HVU@|rucyR1p^%EZE)TVf|hc13oCsv-xXz2g_;eUSHS z!JP${6$~zTDetemUGX*1E}>q5;^4#4If;*QCnaWvw^&28BTl)K=MLeV1y=-4v({?M z+;`kH-WX$*l^Yx#{4O}M$+GO;_lAs=?5D&)xJ>URUfXswC?P>%{3oaE-sIh z-BsGR^uv;SOQw~yE$vyhOh(yzWjB>hDE{W?_eVM%U0A%a>T zqw>+}pXD2s=!_O@z(dXzo|t-B*Pj2y8+ppWD3r>xC+Q5cc)nApp zocv7d5O0xN7Cy(clNZ&uuMMR?)Ha3h&Ka249WM#*35M+J19_nl@tgC`E4Z%k>HMGa ze$V|a@kZja_%pF>kq+VC!#_pZ#23dG#FvI&39ON*ey2oDQ?xJ4YXf>9Z4C9NW^YSh zmT{b=#^OLjC>7ch7+`NPJBe!QsC88^9sW3WetdkqI<_);U-WQfQRKZytH=UTwp=K< zcT%J>bSThZrHtPCZqX%7^!rNoq`%+6?U=r(aZKIv+Ux4p*8N-mPF=Jvx5lm>Te-LV zp|Xjk{mL#Yd#3!}@^8x@D!;n?*s?CAx0VD;`jnnga&PgqMeT~;D1EuIv2sG?MOF7y z468f4c47TVb$``9)9^*AF!XlbXYHM1ZzvcVoaj88{nh&`@Of-TVV5>DTHcko-s@by zxBTjwM>CHZM#IB7@eVN>ud@gxfV@dtS znhDig1iSaI>Rokm)zGSr75|h6%ik$mUoo+AXmwt7%PPBU>k;R`*#~q7&@43asrciy{P4vp$ zm6IPUh_nkG4o(k$6eN+Q>PPUBS6lcdg7h zIs12Zyf;-}Y2Ib^HD~K5_;I&ec0eXi_=3gS0dr^|8C)Ff6lgGeNlLS$+24L&e8n@7 z6GUG%CGvP+w`jF~w`K+B2Zx6~4GxU-i*}AK3cnt>%05GsMRSaH)&c!Q(-$7=TJQIC zU3y^s-whSDy&H};UYP8h>6rQ|o0ndj5`|=WtCHH1w`+cDnC85aDyr{Y{@Rg8{(E%q zng88%xL3uPx;DvvwOz~X1EqV;+*f&cOw}LB3N2}-Y}3eh*QKs)94eOYuF!WmYYGpv zxUg_~qIdXgYo#_*zt(&!*gx`Jv|A(^{K=^F{>v^+w@hD~ZtYn9IHSlMZTi|Y_x{Yd zbZMro|AF;yxKJX$3DG};r`sQyg|-oTGj?n4viwi;M&vvd*&FcfJ@&i7x5B-n*T+tY z)`Z5{jru6T9FOa!S#2${w^|j(Du1TCA$yV2+a2I*`T`?mZZL%yNB`e~su3cIZKScJTP{>%pFZE3LRyZnq9x9&8)>AaX*YZ{FtICDEe5 z2f~0B>c@L-_G+iMZrb&M`}9TW12vs1Q&k6R?oVz^RXL|iUS?-ze%;dYbBZ1*URW_i zu-Vk?1F5C;_f%h4wyHS)=+DJ(R6J3?CH;10WcuoQwQBgu;=wvCB3v2EMVL=#Uu(IlDJoY=M}cAnZS*S{;@`d6)|?tX=fbI(0z z?|qcjLR)SDVxXUi4m8h<)lizX$Qb>q6q0`^W2n-)KMWqzGvi{zD&0h;5wn}D30&KJ zO($IkZL-!xS%@;yePjyv^QZVFd=vh6ZdI&j66ZJRF=Ium=9~UGtsw zt?>UAd>gtN=@h*c9UYw$eG!esDsW!Do48IIAup6y$eGBzeU(-q7Q6+y`@29v97hE5 zUtpl_0sWxrWR)hm68DHPWFqx9^^pownK&}&7W8wv4kI(GHL@mMyG0Xa9LxY(pngzk z^ZJ(7M(y(jm91yEQ?LuUU3ae~YMF1`wKD@VzmWSH!Zh-4S0hNh}!E~18cs14*= z;tKNVLBzS{l7Ex?iQ~$8`KfeMdL^|3PXC^qi`cJOj))z^>%tGAk~l@YBOVpsBR^F{ z@*|ge7T(hD;7k1gH=zqT9Snh?!1UKfZ|2b5nctYf%rs^Z(^hjuvrQY(Ho+c;)1K5; z(grjaHP1DlG-1s_jYCtFNu;Y#Ey+7T&QHX-a*5)|Rc}DHeIv34Gr?9_P1FE7xFWTP zY7E@#2C@&CN+yx@$p*;S1Zp_-50LZyz*ay`fh>i08=$2xlds8Kd>=>t zLP~@V$o7fk7Sf9+_(U!x^O7&nzgvm5KyWr8=L5Ch6S#Ycu#)!(foP6T5L7nlq_&g$ zfSp`Oz9oyG|9jDefyO+}>}1y9_#0N%q#3Q5g_iwGGfqQeRyAP!G{cB=1*R3#o9PG4 zrinR0_oXWWDx#+Yl!v+j1a>XzIqrrfb^#kv7Wf7)ur~*R(i;l4NL?krQc7_EX^=~)1{1({9?eY|Pl-yOWE!P1PqMBR=vGKadBKDGp%Tw`vg8UoaZ7Nqm>n8v?8I^LS z_tHa2kZ62r88Dsgk#Q)2%t@4}3#7jV2+{wjf^;u>D$t`-F>*V=PR8L5uTu-D))WU+ zcuVyE9$@DZks+C-6jI*F1Lfk#R?L-}NlB7kiiq)&Rw^ddmxdtIDM~}-FLED5nWhjX zw4aY0LhYptbX9sDeHs~XnvrM|;{m$(7`*^3QWY8buRxkF029{AiUQbnnb)Ec?y3DRuosB{ibtdXnAUF4ba zarq&5HTjkPSP8EJv6POhOa!vzD&qSZpoOcG$eoj|kSA_PHYSUbX`~2F%`IXDu@DjJ z20%DvVkf%H(Ub@ z;BDZARQ_~%pl$~M?YWZJOPnHJgHvRHeJTz+QIBkgvD|@dO*SJNkyU_!E`WD*Bv1Ij zJGu#M(RSoWrUUWY8QAlZKs4yVuKN$@$A5rpoPf5jtCUlm$bR{NKYlLXmT$-xkjJ

5t?QZzq4eYB{u(Nfra{NN2Qx>2za>)@5VaUA_B&+TZvoxC9~rof$bKP5M$G<+fmIRBozY*7Vb2=^_f-p+ zV!$h=<4A-jprS}sMz&hhLdBqE;ZTui|I%)jQy5Z_rz+y~ zf2s*8`c>t4t6Xsvfv0lx)laG_GwK;~(OaK^J$!)GRz-2{LWX1|dU7gIPQ8%NYXz28 z4KV0Rp*;)#w1KI}0;`8hv7-;{iVcSqU+Qm(Kx(BZd4UVbz^9AhD1)(48|P>SOWH#j zj8QoaXw+3dk)y}J8@sGr1Frc#kdP{}`5nGggr$mkRF&6N{Y6zjR%Jq~tZ$Wru4-th zss`$F{EuI$YL2L^L$y|K9vrIXeIb06#i3%ED*#!i9#wzhzAOF2-Bkbvtqgn$6@91T z?@Hk>^=C=E^8fD?$5~Y5sH#$=A`Vpsx2k`oR@43he5Q)eeTe(N1WR-Xe#=_Sx~a-U ztQu;|wZ=35sx$)gu_2B|N)xoD+6rB8^u{q*8ICp{j}bZr_Cv+u&Ik5(Hjwj6Fpt)w zAGU)9cLaXWIb@gb;aacIQ)*=9hx6`_42@O*T?Ak z4M!(n`kLbR8aT?LHA?<$ftr|~Er26b(SDsVFS`8v*&W||0QuJ!nakn85e~)Afp|q7 zs||3@az96CNsQ9sXeX7oISeCu4s6dftW3jktroy6*1+{uTwp!m7Q5pt6Y+^Dz<`g& z`NsV`?*#nEI^-+=!QA+V*o42v;FC@8e`;N8l@Y7z9cBLPdm6Jr#Wm#tMllsQYgH%r zJ$%HQu#Y#;E}zf_Dk@X01bGAN_FA;!OpM{pK-XWxn99bOdV+VhW9)TQ>LVJ^9R1M( zzYj)l{SI978XSKi|9=_SUI8i(m2oE>&?2odFG~P9Toi3u6m6&C&@(VX)aUAl{O#DE z$o8ISQ#E-c{(6Km41GQi7{zHMmyXfGJz3lM0UYfJ~9KoQ#u(WuA`l%p@&q=eIuOhDW2*cWsCGs|h=H6g!lm#8p`Rdcc}vNHKMu|s(e|7|99j<_#}q%Kl3 zai&yEu0@`KRgK~~Ey`qh0w0S^4c`x6kI>vfP#LV`G0huuuDPS7tfjPhgRYd)Go0m_ zojciAAQ+6C6`&vApeqwG$0EjJBj zXd=0c4r)GV6Lgz(*%~)9l&()RSQVxcTa|HSi0lFX^MYnJ_<=ukA9Q1wbb3De=7jVn z)-h%XPl~N)cd)7a-&_j(gM4H+c`8t(o#n@phF{G6V803@#r{Bn?;|6ci`ohL_SzKY zGFJKFSc|Jj8^!;WieyWAiKdLIn1-a(q_qu9?ZCktRaE|)o=S++~>fCm`^O2?lPb=-V?Wp+vEk{M&8H; zz$BujtwO5!Nf<4Tl1l3rBs&3%crDvN+ZmeMPS7}qubG1>_jTT3*1i}f$dq3 zJ@O8l3c$CxNtdG~ z#G7u>*|^#Y*qK>qn|NZovWBRNb83U5@y1Kju(T% zQ>h_rPAPIT$&nE%1m9{l`Bt%#FR`|05c6z|J;pS`P8A`0lk+GSS&G(^GW^ACc`Mju zo#Zyk@A6>fGErCAK^(&F=2xYcTu>Pdudxf(q72ynRfL&ja7={-iYMN|XV?rb+GXjM zybNpiAFwqYu!|W-rW4bZc38=~s)#vop?@QmV)W*~JAZ{;Y%3*QJ|-TO%F4av0MK*Q z;g{_vNK*B0?!vC*D(T8yshOe!I(E0*K-Lkzz$UN5da@H&?yBU#FI@$HbG9^5ej&Fd zSnSx$K-$H~(Nq#~47;5MV8LVGBVpG?EXH0ykA3h%vMSYzydj@KHu5&S!^+YEjLVP2 zGcpZ(=2O5(52D5bTk=F6gWYlm<+C(KlH^|rE5%T=sLpgxrY^I9wowDX0)GX@t6S;@ z49!es5G+2{Fzl=>KvE6_SN$tiuuZ^WotCRBbL0(jORO|2;cHsSK#h$KAC063og~^7*LyYpd zz~J}98eNP`BC2BUU66+<9}%s1qg=wX_~5I)fG?ScXaw$h8EKrj25j@C!Uy4mI6?kQ zyg+M<#CT;4?yi^;j}^s))#V8k8vX)@e<{Xlf3Sln;vaQhz|WsRKEtSa00g*OUL@U; zPD+!cJg^17W2Wvx#X1{V4H)XDO|#4}QsTncf3x>QBVPu;`{*i@M& zJAgl%k8#tSSVVp#i;&;3{{M^J_%iuFd4W<(3CXL0evTkYvLEYbN$i#D5<`_;K))7{ zjMx*@gNM-uksa7$>^7c~4UsQZ_to#oXIMYyC`NgcGz&ZFlhPXH3hdxI>JN$r=1w97 z@FYeMeZacZ0o&FXainLMSNX9HFM+qF?&AL-J^~lFm##pwl!n|79f^I?b1_Y8G=%0t!$$9EGv zoL%seP7}Ma!(qr8Sn)>^>l6-q+G5fYskE{OD|j2~12u&%MFU5S{TVdRz;mFarC1N{ zh}qI+Wj<-5#!>~b22G-iQWb$x+Y7{5aVa3SlXB$aK%UR0*8>a4(pSmTV4!pdcCf$H zTl@oe-bp^IEFq^-S@eF*dQG~fCp`&h>5g(aF+o_spBL6b@jwSu@fapaTTy$5Nv31u zQ{^r4l8c48;z{Y6+=Tc__CyrGOO1wK!NUKIBQC@L+N>0m|C4rMRJ6btZiYBtZ&;8a zR0paaS%s*s+?N<>zBpOhBNv5zN+afxC&|gA19$ir_%FqjqQF`3a+YEwGqJ;44E2$o z7;7C7YpX=e#9o+zXIhxJp>$W4z(#(Su7WH5SWbbLR*PJQot+oE>2?@N9yy{kAkxX& zqyoS25A3|xVSMK(C&~F(pKMUtD2Qur#0YzYIMQvYAnaNP>~HTYi?L1*#jHpp{(=ff zb9sZbPwXmIlvZM1?Le%j8scYW;yyg!iE?W>CJm71E2W5myK$xH0?@&e(sQ2HX5h8>$lC1V!cM5}iK%JDV!e&-NpxGP*8*) zoAg0e5v+@VXdh3-VLiR3bdX1aG3`PxPse&y5jr%D@#M3qSL9IwR!#}XKJcUu%9+YC zqCOC@6zPSZe+|1+2?*w8h#5|jIr)`x4cOscl$Y#Fstl6$3MxSP|kH<^UBeIEYj6(Sa$uoe_m=E;ZT zy4d69!49|)cG2&Y(#mW^xvt9jVAWX}IBcaP+PE&hs^b#{h$mn}-^U&&j6KIEjPXr~ zT-6{ak*CS$;ADltP|L;+Z8COblZhUP2-l`Ep`bH|yootFA1iQkjH^MgtGf{&cz~z` zi5=K1L{6R}a`Gz}R*e+{)~p{`?Z05vD~3pSPiW~Rl20)s8bh1rxg3#qV~5-W9&IwP zr=^MI%0%SZvNuMUX4l ziPR=H!9H!LDkCmj5SfF`%nC%Zt&Bq7peNA7=_I-~_8{%(I&@xIhKDqnMUXEu#d)yalF$&kHobvJ zYQmS``*TmY3fx}K&K2OAV<$v$|HPKYQls^v6C?X0WuxK9irAHCaduQ}eJl`N8L1yx z7OE019hwuq6;6rniZx?%xP#m#ei65g+sck--?LxXL;N(sAU{yLgKx1>vq7t9Pw0;8 zdg~wQKOvi#Y`Jf}Vo!5Q&f%^k*A6G`T<%D5Bsq#W9y=C0%eh9nn&8#7j^Xwk>o;KF z9-1y@qZ@|3>?$rgTX#GA1(y?9!U) z*6Rlu-WaULG~+kJQ9}{KJ$B`xX!@4!zOWyjv4c>Gw<$2-$*DZQh z`E~_bhD$~lvS(N?dnU?;^M`bSH-Vu4*YHCW-Mb{VRb1o(#7pNw#ewI~2$FDBI!_Fw zuj-B(?wU(lx>(y;r&&p8rL=QQcP@+jBi@uaJuxw($nxmo)RXg z9<8Ns(~p@^nqRd?banL=pdB*8{M@|KGSO1Wl4j{?{>OY7C`QG!)jYwRZE~0#hUdDM z%p2;hQbfKe4iHxJB-f7(M-9=lp`C$AzD=I4Qa@{!(bK~5KO&rBP<$n7E~L}A*0T^#p!pwjqe#(-c`;1-7?=o z1KV89nV$G0X=dvClxoROTSA3z_}I#rlg03Hh0qht(gXPL`9)GR9yy2 zHL-5>Bjd@Q;35XZZTx(`8?OXI}Sfd1?txrHx$9sVL`hPu!E zSbFqbsCeLp_g{A;cV%um5GhMN?YtMfZf|~X8_!!{!$LVDa` z@X0sH7xu38z4CVq4hye{jEokGdLxI!<->vCU%~IeMWH^Ce$h*a7AUa?vG|xSb~09! z(@6P=944xJV_ai?V`^;rO}`HKqyYw>+2m*+Un)5_b$1$>RwU_QTqXN`OF_#E%Ln^c z=ct6O2`>@~#{FX}V~W?TC(p~3pn#i3Z)Jj-zcu~o8-yg>V()|}ho^=6$L{gXBo}rk z(3Y2HiBtF}2b_XFGt|V~+pV+ccIX!9C1bkfu5GvDgma0rm}9!_kY&C3 z929L%m`0iNTgq65m_vrPx&&qr=~Un!3oZGw`~i;Op2aNDPT^9)dj7WF!k*a}WjEYW z_W;jG&n{0{&s}#l_mA8b?i22Zp5ERDKEglQ|JDD{f6M=m|Cv7u?WBxgTxdn;S*T4o zF}y$AI-C*y00pJ8;bY+?;q&26;X&aC;lbgQNMhI@J{)coZN}c`-SQpMtUafDX_&8{ zp)+VU(R~rdKdXvMc>yzsyymWjw{i16@ z(c}qopk|p~G%htd^xYXoxypBq&chY9M)&ZSq?g19GNR0vW^m(U1)}M(dE6uMKjIv- zLU&7FTVGZ?nRyAuti%-8UofTH-aE>>D!HCJDEksiYx69~RGhb#c06`&ae5s#+iG(| z!&vQFW(?hteoKF%r_kBtZ_0A9ET@ankpbcOaAwFIsuNlr91Ju>ZEq=06}RLjygskN zf5=zIf7AEUH^bM&x7_#0_ujuWurEl5`h=bYrv_^UcLWEAQo=XGzVP43A-kfc$fEG- z&~lv5jJ1FbdBS{XX}D)768tmxZ!jzTG1^r4Ce?)>)>3m8>zR%=z+>M><>>C1`?yvm z`I3R!PiXJzWN&6QSnpar&IyU5(uU@d(!`|g&K{N(`a;?l8oe&Z@WTABb%Hh1=+Sgg zcJPB@52N|mM*IwEv|=N7DZfjTxc1SU(8mxF?a1-cHljCuh$>FCAU?@)*v;jG4%`KO zvU$9O*P*JjgG zh@x^-kf3ummw(6q$zSK1#U6&=2KM^ud9yqtygPkk{bBzOe{KIaUjrbqqn_YjJHw2Qo$|3#NdJ8ix$FaIyQ1E)IKyYSQ?)i8vKYh z-ihDV1wRJd0dL@C=%45juAX#HZcm;imr%FJZ(zVL2d9(OueE)PTblGHac{x{=L6e* z>u;8Ty{M~u(&g0U>Ce;uNq!k8SvnZ%=?3a+nRv@MTas;#rLu9X=8;m1KM=F9`Gk-1 zKE#cN$UOuLmk?bQUKpAXF3Y|V4iUSMGrIvk+()4i{PlrklIFecq4AQrz2$`Yfw8<{ zmOf&5YOZ5XcCCoJ8W(X*bVh8uEWeqS8Lyb;Sw7eb*>79FnVkCnnD8$(|MzXpE^)d_zKw+lPMF9V|gt~c4c(mUHXGB_~g5C0lo8ajm)VoacV z;7K4kWR9eO7ehtIW5kt#0$M1@glk87M^;DsMD9j5hm0X65b~AxZ}P1RB>1NUhWW|{ z4*NZUzQLqGG_)@mWw)`V5##G=BnLk?QSghtf`YZG{`7JjmHagatOBH*_6_kGR zD1ndd3cn044Yi2eV{Zy)z@r~PYRO7q3=`Ok{zjJ6?9{I`SuItq4(l*PxjUNPfNjyw z?sis=e;nUCelYkZZLL8wV?J#511q}Dmd|?LywK1?dyT$A8p(yoLi~*#VLy4alqMWv z+eL4M*M=vC*M-l8SBCRPE`%qA>xKFR$zbtd^-$w*`^clniO6ewVoIoaczC#Rq+8^- z$f8Kz$kfP?(3nu=fHrtFSTM9DaxOF=GBuPGstwVM=DvlV7M}Kys4wMxXaY#y~6f$wXtD|G0?U;R} z^Y;WLc~IJvG +!Zy2TI;-EI%Qeh1tp(rcU&AX+SBeEMyB()tuW<8()>0{Hmr$PD z5xYi9s7i+tD9x)-{%Trgi$Z+Vk+Fqu>R;B^jy_iJI8*WT7Q@ zJhmIUfid5q=v%{AnC!)P#MYu_^ZS1}1 z;%GW}JgreuE<5;dXk_GbI4!&=NCaN^DSuhN#edqD$A8tE>lvIoKl^0XqU_f0!@f?K z*?$HmdriLbzDA@ei%fVFJn z9fw_==&%ES-&U%9if ztjM>pE&Mk0Tc~!ZXvh~_82r!Q*x$=H(%02D0-knb?`B_nZ*h11ta0Ce{1}y0!E@4c zz)SiDc}MxndQ!c+b9eYIL{18GnSxN-(9tjC?ub)+G>PVuj`0aik{TvwC2owb;=Bru z&#t&aN%d1Vr4~!sp4d7rXzyZq2^?I!v7Yg&@vZ)*wkutRs4N|UK1C632=plTa`)M3 zYthSKwPG>(hSClysBaK`ZI5`z0PSo20@G~E1M4)~dRu#2j@54K zVe{CpI7pY#WpyoZHg;UIRk2hsCz(E)KA2X4wbx9)OlxIo0bTeQxnL`Fmg5vo>MT|j zs&a>c;ZoT1+*~MuF5xmb8~Y3UDOQlIElf67=Z&rugskv=)|MaBg z_VeCzYrSi|husf+Reh^MzNnQmOE1JD#2WgMzO2P-PB+iiZPr^&=N#7(4x}WdDQUCQ zDx~aB=;Rn<-(r6h|9kSS)a;ZF3E7Twrpo%WjE^qMJYl|RT$)$^P z%<*&~$km3{Wt*57`^?V8NUX`X=PUCDK8Gs_>{~wY%bOq`UQ9G2D*LNAQJgMz!+)*d zDK0x!Jr<4TL~BHcMl|79!R){ie;)r$?>g^2PhU^SUB_=H$v-6@DY^&Vz z?mh15?gg-+4?QKl-@J~%%+Tscfml)Y55Bt6RI}4u*p}c(uq-pY)2Hay*sr-3r@hQG zCf~e#<5D$AbL2}PwWtr{9C%SLiE85~fmL|cAw9+(rTCN~A!0!GF7v+x$ z1;p>bg&pG>vK^uYqkQxZJ63okX2=(%zr`wo19-6YLZ-At*$lm&FNiull@24nFdaBB zpQw|*2&ed6un3LAD}&llj{p^H9_R-J&Ui23eVP4`wH2m(1yzQzqwT&f1*$ zIfZh2=Tvidakuss4Se_Q40R0T1j|KAhM$3lyHOlMWN8+d)0|1JT8<;8i$G=%v$TqD znqD&FV8*z->8Udlava&#(bkPlZK64CNowt+KOL`)J2dsF94Iu818T5^W(KuEKE^MK zj1TV%){VT0P6r5O6`z;y#uf&G@^p;i3rcsCy!0s`m5XS{fDuS&KkBL*znC51N$zs( zbggsR9HVV%wi~vu;MF#BZgyO=uY)S=9q=UXYBgZhJU~QeCdEN3y`-FpSZHN#0o#)u z#ZBkW^S$}iP-i{G)?v4^S!@k{hWMwHp`^%1far{hHuYKS}GATsqEdm_q54^YSgS7B!F_OV1#$ zC`0&9kx9V~{+!^hh@1Ua*os{8ac($U1~DQxUrXvpi~@5|(Z%!!^;7gObomWqP4%tC z9HX5JUDe~FuIetWo!>M;%~1`(h@mJ{Ql%0U7FSYOkL zX-}gHf37~XSMzY)p)GQVET@^KyRBb<)_kBV zY*=HOYMpME9FLrCXK&YXXM3l^QQdySw$7GiyJjn68*Q0q^61Oznrmt@K4^0ch1!(_ zB(z&BBQ)XGvU_5I*eslVL@br9$~EB|2qT11LM7y-M~ai>M4}@!PZO}Kn@l~Tw7^cz zrM%D}S&vMZ2oEcTs0n<*VD1Imh20ig9n(eMg+qbY-u=0~vNvQ^%&wpFGG|@R-t1ag zT{Gi<^!dK?yX{A(tUK8?a$CAvxRX2vPZ93~?*f0>z=lv-I4`i}Rik4$7i$o+TX1;9h*|Gxhxb(*=G^`@p;XWGR#vEH*0NfX6kIXqGf0n zd-|17n%XMuM?Q#Yo}DOrK1pP3w$K;|pV=#cj)Q`QjQTgyQPC3fdo7PGcXm+LC51XO+S8 zJf~07YUy{#KuiQ~?lV+PW=ku?2mB3oRV+SwI9fLLJL}*d@r{HsLOx#NM)PIFyE4@C z$OFiF_l7dnGO_|CQS;~~%o{|CN0D8jHc|^1K8sRa?k1MwN5^VL_k|aQXNBGd8v1X0 z*18YmRLhx@{a<#coUH8Ma;9W;&uW$F%FM~k$f}xCG?&Ese$e~GYxc#wdHtUQjl#X6 zhhluJOmsl>c&JuvQS7_WQQ1QzXa{H)nr>JndpB2e#3&1x;>;uM?GrDh`SW@5QF-g6 z=85;%HyBTtS!+u~KqjU=P16{YjN`0|2D>P<{%4(Jv@KYN3|v;LG}x#_s&ht+HQ0dHfiW3%&#vxsx7!(~sj zt+O;XPcr2gR~Xkq-QghmEQzYE7?EB5DE=!Qmez>X`1$Pf=x>NFE{XmfJIPk%8R0Kr zydDW}f#|Lz7De8$rn^b`ahs`>JUSqsKF3Rpv0X>^&}R^TJa9&i*<^&k7h&* z$BINPk(_|nTg81nr(*8T+^D;-yMp^@&Z?ZF*=@5YW>3rRl>0Qdyr+g|uE*;+=B?yw z;Gg0T1r~%RASUnm>M1*d&1|D7s~@AKNlBU6a9;ACB7%7F=uo|4ciQ34EOaK!zKMS!)Q}}>ncao zRU`g%Tt!#Ze$#r%{MOVI+`YQC4YronJf>>8zu-LyKqvPD`tLttn=(tf#XpZViuQyp z8y_pq$()OC%e7^zv0=75-$ke`4iu+KjGPDfiyFvV-zM)MU;7Ff=kLllqCPc@dWk*j z2C1_UV>4JYy8vt5KsF_|Cp(i29)-d^0x`x2?j$0AS>E1d^@a-mW#G!=fwQ{b>W`;oZ3U5Ff6smc5A|9 zR{_^+%X-rjb9?)vls);j6q!)KoUcgy0LO64AnS5F8Mi&TLrPW}>uhLQMhegfDGJT3 zMNnP&gBqedW)Fp}{&fFef%?%$+)!z`WECrLi=!*Ciykd#j~3U9mmuK@=GGRkj2Q`$Q{1L z+HK{w#LC46#*VW$*uvZqb`0`RRX7V@onOi4@IE0b)b1$m4rO@p2iZEPnKYO-Q=C=ebdt7 z4VIbYQ79M{mQPSynI4*#R7<%uH#Jnpztz`1&^1z-dnkMbyKxG4JlZI#iJADX(pFMr zSncon;rdnjEjp+EZ+)t%7UIOcT&G=AU0<9}9Y^e1+gi(1OJVCr+X1M=JhwD4nspVK zI#hS$u=|0t5{J<{O6n!7<_aL2Fd>$Q-OSeK7C^(@%9ZCXaEtgPVY$#=Ohs;d88Y&P zko~PjMu}rUll)Gc24?OQd5tPfub~z}PjZUD@MXaDtix7jC&!*dD@L+|JN=1Xmj{ee z_g!~SPbp6pJgu9#J#(G8>vQ(!Jk1%KJKf#iecW^1ljdvftM0e?z5d<)CxNx_2}XwR zMyj%{qBpo7(TV(a;j6M+U%@seF*UKO>wyWq+3z^dI9X?3M#uWW3XeAEPjABMIW^f5RK}%}4SXAhToqKg*EWej~$kt-lvZc6*dp zm&4PlCbSW2N{a?eW@*=}+%aHgS`w55JMCmK&mTTMF4kj4# zKQ45?aD{xCNjn_*Ek!M(ZPnxFBrQ&xn=(J~A_Vin(~&IFOt}roL$yCn9wAJQ27}%G z4ZXR(^uX50(AXB_`)aUS_FS|qyPR7rl0*->t2U_rY#3;qY#d}XV z1eCtxogpy4Wr&ryg$Qz!PCcm)Bnn&4ZesJVLJ+${^stPUotWq2d*pKtVzxz zu1BV>+TKbRX`Av)t8_0KaLjd8io5H&>I~S=*sfT&TMt>!ARnD!nPbY->$EQV1F%CH z;Op+d2lL6V#hZK{t{yv?6-vuEVX%mdRk8)vU?uVtHS z+v_+Tmz!8R<#9^;l>SLI66(f{b|uFB9)BdEMZyMGU0ar6kS2}V1s(e&Ab}bAwcuul zM0kF>wIe^ zYY*!?Ysl8ZQQ7$?>_>CkKj!YnM!+f@GTP0osk^bMt}k{HeWk`?4RI7y20g&5P^fw{ zA~@am-MikO5-u4l$mMc7APxQp>xi+DaCl?n5_?}9NxfsD+BTYGCJj;V_jDGsO8?6A z!@Ax6&fdtj&=NA1GR)Aq^ill>Qy=RF^mqoYR*fDHJXSODIv>v$=6eWT1c7hOY9q!V z;alik2^>tsHrQjb88oCr)tNdrpYh5ojRZXs(~>+H{{nh){WEbW@^E&R}`oG zNxCLol`jF6wF8yEwuvjTHa?1!VIT3|l{I8T#C>*wRXUZbj94Kmy3unD^=!@JM#mBH zgB>re*GymaUkw_Q*&gR|#E)|ou@5odhuY8^T_s(BanRqCit-t8r`Q#d87+8-^{Lmg z%+Ey)n2ymg>{elsoDHO0E25x$0YWRo5P{Gl3;B#`q-_dS;z@K7DgoH#THvJ}1555B z5ap}ke_R5FDF7VcE1@56!kYUjRuGj^W^i^sKmUr8SPMHnHYPTe)$)Y+Nvevv&*Q=G zDFsy2JYp&kZEt~kN!QfT#DJ@FVUJUQCh6VK*!+c>M>ZvH%FU$uLUn#PYXFnrTErNx z9{d6ghn0R!pl7gR=qx;zQqgUZ0U;sq$UiDrJ5qxC0Nsgan%{IMb?2DlN-Z%gyd@?rE)Fr1tlQ2W`NuSR=-@L}C*PbNyixatVY(YeN=Cd2vv+x=Qvc1^T zY)|egH-&4#P6sk(N%(AJEV5+9l@;V|YA3aVtPky`qe>Za32oI@gBDp!V?)%zd2Co= zIAFM9cxISj7^kOn6E!WFFkP8>3J+6YQkY59FrunlQ+&ax=JR ztPPol;n7GWGxB@%N^BW%L&MPw;bf zz&g56&8-(%9_TI);-`bbih2wl?C+@8unIWQDPS}eK!oN!aN{m;%~qgd-hW_9T?6KI zF_3*T@qGh6zXCbpk%+za$NlsIUcb2F!4r1{$Ha!C5ICZBl`g<3o1B5=4*!KJx@Xux!E z?}~z@Xu*}60$Vr-SjVA2rX~Ovc^62=+d%QffuT1ZXWI|#-dX(jHT0Fr=z0Yfnikxz z&S0&q19x;S*leAEDO9TrXM%U3)<9S5j_8q_xdKG|V4(i1Aqv|LXIqc6sg*H~3hq=Jr4k4g+R+1g<|E$~qH)A3cCi9>dpee0B}`K&^c)fCZcezM5K(U9BLi^5P8O z2)TfMEsQIwwSRN*$xq;Uy75!3ZE_lz{%aVuPjRQm(VuI8vEPh4--|0;0IF22oS|07 zcm!nVbNuI5;5^mZDr&9ORGd}idp5yQ@8_Y`kZFc`HT`~S`;P`!u`hlbgH}{4R(1mt zwJE+-He5q+;Qn{~`jfp_7;ASt+NL<#yB4smb%FUThocOxQ4HUU;lQo{|I-NH8{<4R ze}1kK+BE@B{l5w|1;C?I>j|lq)YZB!pTOW$>w0*=YgDVue+N#@1BQ@VWk#(En*e#7IG5lUk5@+EDca)t9l=Gc00q@j7?Wn;Qf(NS zpU_I`xgTSG-T+TxFXsIb#I+BjQp~^jdp}0z5wzuL@O`i2j#RYnU9co?;??Uv@9`1- zVsXbe&=cR#)<^K$548Ik^v)NYcL)0V0cOd1jE_6$sXt&<4ubnJ2FTuBurbrXX5E5U z2V%C(#0cqxc`+A1d*Krc@QTUm|-U{W;S3H?pIOkc-C`xZzt~a9-jUR z?%W4^_y(=7)~L?H2&I8V{sCUGTCG^E4XdD!UZ79BXq_|oztcGDUq46pM$7=UveQ&N z!7R+CiO}br2e!{*-1(pQ%o?=7-?*N7_m9!XPjJ24XxlgVEeBQtYM&VGLA358wBvVN z) zOh~Ow))8NA@N~`aoYnEXJNqA>JrAB*!5F!Lv2YY)Q62wp@%MGiik+Byt8whW z>^}Z;p1#3*A8=&j`XM~ycih2KTvN3L95{u)pmj=M)Y#F6*?8v?#@#;5o|QP$3Vf+` zoNmJosFvd+?)Mzdt=4cmh%j@qZ1z$VFL}hohzP!uIyT_*FUe1@W1-c%I=uZT5K7F#Zm9VpFmo z`8(G1KHz>#!RYM+WdsAN<&^<5&j#<~x%>&twr;RhQ82PHF!Ha#DrSIrb4=b2KaRu- z?nB+%>ELgaL6%666sZOjliq^k@E#t~Ab3X$aE@}YMry_8o9HP9?XZG)1jUfG@Vp4H z9Mn2>JFt%K{b{|`3h;N(o+Nl9*>ZE}5ln!O5JZi^vS^b<;ADisW-CT7r7xoD?~*s0>f!6wdeno>v+89WEsX9!OL0&U2A#7ze+wKCIzgjOZy~3aujRfj@T?zW5r{ zqJ78QW>%t_tdThn-p*5SeUFiKz?d9JyacD}Eb!=yHr$y#ROR^XE zIjB8*Ufazu+1SO{0!o`Bv_nwmX9u$TwQ&EdAjGkhmg$bnGG;YY!A4RhB3&xXPmj%v zv<=(C-NHinQ=}xYX6ZtA2?{Rce^d#^qUo+FtvSJzU{+(twi2wxa+C-@%}UfUt}cHQ zCkR^p5IZ-vI(j$KC{i-A5*1&aF^a9lJ>@rw4dpq?Xz(BuGK-R-;+9_<)b`d*)|Jxj z(|*&0nP>E$R2g!&Vv{F|K7J0Ap+?8ZSW4_P(DoVpPN5R2{Di@^`%KQE?xB|D0o1W9 zLPf}XhyZ7kWsu{&OMS(wO{vY~bs*GAVCUOhD22?$b9OfBd#%Y^#`g{dhC~XY1(KTYRhZ0 zp_zO-rB3+eQiT%YG@(F5R=;<@y0rqFgF<0p{x(#;!?}*7*CLO^&h$Ke1JfS!NsHGy(UxIdV(hB9L)?=DsHmqg?%n?A)m}Zo6#MK zigIzpm$HR7{7&u?+mYKO$Z}1p7*mtkO;sh{{TQrC_0;CAcEEB{V(K4Y;!z zq)Ru_{ExkjYkb_YxLnr>r^fNjTHIX9kf<$2Uq`i~G1wO`0Eaz4^$Wd%u0gk;!o(=$ zvLp%>`OC-_J&)~Xd-AljkhsUpG&Hq7civARQ}U-3Nl#BNowhWkQBsNc7LLQ_t-6^M zE3M?$uqO5hTN3<|kJ3`qNH|CxV~~q9mbV_4 zdA=|1nc1EnC%)JCaW&JDv(Y`=S1FXk)*x$}p2v+z9h+xGo^k1KQV%DWOX%*HX}ZC5 zm8M4udnaX;_+I8)$?tq-XLnM-8!j6=z^>z$OL{U3e3)<0zL-wLq_(0THN8Jc^}#wk zL*`HkP~*C$Q8brPNlHW4B$kUK*?Hk*fv>*4z9YV={?o|l+M=Dg@=^`p%KPYF7<-r* z%O|tfRL@vaUj((<&GdBgu;PIZSqpK$I1Uk;>dI`QA+>{Ps(Xa2c3rb*GMgBq!O%c| zR@X>(O>5G&(`YoqppBg$46|vbz2@eYC6))45!QpYW{wWxu%XL z$=JyFRsTV|nCU`oMhv$R{Ej;W!b`9jIjAaMhx`E5h?78DEtl%>J)*TjreMdACc2IF zas82@87@5{u0h|sxA||2XlkK{{+zO%?dCi8ZTH*2i)PP$dHUy*x=)L}DEhYUw*vl= zQmV0c+=mn;-IRA=-fnrNbVtez*I`qbt|P6BrG`rQ<528zX;6uD=2jqL8WiRWvxPlE zd*LDXKAIiW`KG(&+<~4P-?iZLNIfnU72{4YV|C38t&FRTF+&l(R`ZT1DE=NB6B_E@ z;AK6Mr;>LsupXxZFT*$4Z{kVRdUI*_=v@r_}j!DZ;JpQT%(J)^0mDWjPN ztxpB9`Y+5;x-<0y+5x?#3qp{eBD9n~Dt}R}G&S_AO?7P_ow4{vNoSHfr<6}gNWPv> z%(dHEz_=LIGKPYqxEVz!cQKM?y1uA+ntfT^=)_q`%M)GkI~~_8dklYSwA4yyL_+rPtSsMHl9kn1Yc3J*WoV~~q*zw`A{+#+VJ_E)zk&5hb{*lNaGSx*&6i4s{*>aKO;8EXV z?{06FuV64ClAnFTmy#YT2D-Yogubahs?B0XP!kkJoXz%+B!xBx&iLE=*ZD67j)odU zD|0Kw&O{Zc#GW%0F_kiZMuqN(X}IyezNzj%O?&1d)sU=;{lZ*g1Nokc(94+N%!8jR z)oNy*Mz0;O?S;%t592FToG)SP;TY)p5VtY@_xM$DpO6i|V0~_m7)}4j(^-H=advNi zd|k4;@c^N?6)O}e?ydz&f#Pn(wK&Dy-6?Jb0>vp#ad(nHJnJ(%{@vmIU*9#?E@3yj z8F}WBbI$#{O)k`I)ntk?RoHmL7}IgfXxllc1*$qHIx9Ip*oRq5m`<_#sFrX^@+-q+ zgQP{CMCywl#L1`=DX!dB?m=z+gFH;yEDDjQs6y-^adKUG7iwjH*QyX#$mkpJJ&$|2=k=6#-+!w1bwYma$gh;mI>U1_VQ%4_MNSt!miQ=U zjZ-k)r9ozm{1wc}ACXfbds>c`zb9BMvKD!eXv{xrU=7<$Uj+ZY;=<5ivTs)2ww%Y= zXLF|Hp9wS)zLz^`uZU#&7k0EE0*3ixgT{0v`>Q9#6a2)`oxp0pN0ADA6l&VMKF zR{kcCT{14SOtlTLceM|;IjvAKn%*0pv4`mkWH)dh#z5o$2RWKv%}y~CWWxs-`x`GA zV@jsteao&+7?Ci6&R5B5GeTH7jj5r+$T;mYCUaR2a%@VannID_AS+K#ty zx}gy7^kaUasl`EbP*B@d3~}E3Sg(IYJ*R+sy%O*A@5pYQw)w5~dH&-uPmjGS^RdvE zGuab-wS`G~4bx0_v!rW9e=e3%^lPD`aeZAoE!Ua)+O9}KXt>Xn*FC#I*4FG_^VbD` z6UV_rYA!XEG!jm*mg=in(sm&nT<*J-=gEDT(<*O}??9-nxIq0xw4igCFuRqjh8g2A zt^)HD@l?(fh;aMh$3UN8x6o7s7b=RC6+{(jJMu(V?ERgmoEeU0_IB0|=KjXH+zoI{ zr;sAn7mu}rdM&ax_(d5|%cYwY^E`8Tb5FBw-eq}cnQ4iJ*TGMgR7<9{rhTzviBoW< zIyX9tJL@=dZ1b%fEF~-#&9u3^>5?(SxE1*?+Pc(6IBq+pI(|TX-CFZb<8V%(8L|1!w5e(y#;Kl7M*Hu~-2^g6lq1E$DfttL0eJ|cEVk$Q zzAE`m@~Y-<^1Tmk7jDUJ;x#>wdkr&$V}>X&hG#P+sZW|;O6C6v_Czl2O6Vq^5)q|L zbtSZds$xGu1alQjGs{SG zSJP@^10!YJY)Ce^3@L_Uruvo?o5lGwD&5r&HOg1r3*Eb1U!5E6ZtH2&KZc>;_5aJZ z=H?linM{@*)}ppkwo3N)SRa+N-Y_lU79d}5k$C=NsAVwVzlSOw#kg2S{ zuh}`b{TV__wGNp=zhhExwhM!q)l<$Aehnr1cjpfR>;AE?TX=w!qb;HauqOu;+eJ=?6Ml#3w=6irq45%xQWIlCabBIv6-PYX8O;NgX+(Y=S;>T=84u1_O?+s z-Fo!O*q`EZV%Not_i(PAj@Gt!=B36*+$FXMdyBENRk+WFp{73O%jW&&ICH>Q(-6%r zr_SkHlmX%dzHn$s;9vhWzYB9ycknRoz6#K{ZHW9WIpI#WPWee~r_uT`?E@I20p%{- z?~cPob1tf#eu@afDB*tiUq6}c`PB4f!>8?^J$yCcL#6Zy*=B!c_v7Q0=s% zk}mM!n9%Bg*FQfnB6LRRqqwL=hF>h_tp;nHd9tB0Qer7x=jR&AE=e>E5Nm zyAh-QoGorW?QG>f?|Bz}C}w!fLC>zJ54H=YrR?A28*Qy{T(-bXx4`__)MENt2V#C$5XH7t_u)(O%JV z(D;%&j(N;)tb;3IXl3kda+&Lx&zq(g4?{mIll}A*r47_kefT4xt-)2n1EF!eUwDto zkle@uR5y(mY6+!;Jbpdjfd3Wiyf}DqRg#`cE9LRZOC_kBRD$wK)S9;7cLwYEcjT4J z*!JQ6^Pe8QdBnav{jp+JmEe1&0(Zdfim?=`R%}H{vgFY3nk6xwGp3>HaR1v(fBMk$ z?O)QHDwP7?vQ)52P@p!GZWZ`cHUimi%lLWK8SUXAXhyHh?`JkW|m>F%j0qj7ScEx3ciK<6K|KpF>$nES;ie^~8pa{)c6dVOK~pqCtS`-wlhtN=duk;2hb7M$ zAG0{&O`)Yl+7$V@P{#yA>?3FrJ2=|e_uC$#2A8zNTcWJ}Y*X#2a2o51`f%S|Dq!&{qKt|%1& z3#u$)ha>b;>Ku8l7!XMQc(9`1PSSH+BgE9 zbqR|L*G;}%xMY$P6XQI?C8@812Xh*JiAuei_Byk!H#dlZLfj#5)v`z%(}bx)P1Tl3 zZH4;b6QM`pgOTsl2b5}TVE-lRQdDE7WE*HHYFtVWR?G3}`7bhGq&H0~mR>HymOCi0 zRtyp;2BU4ZbGz#&Pxt7~(bL_PoO9qLQV;$x*SR{z81qTXWot`Y4O=T~bMq)eRVF}8 zRWFM+-Vr?P?-7U%4-^+_3f<1s)_%&>HO3IXJs}}+Ou~n_6EXEXnNbPOfez7eJ?cBp z=omS6T-=k`NiqL;_PH467V9s@_i##9l)F-0aa!aO>UUhq4lRc$gLvIq;(;bB)#a9A zN#Ry#RA8BJl(!Mq5zGBggOd?w=ptWH+JQ51P`M}%lFmkMp{8bT;GQqV+rfK3|2(`@ zre!_;dMB;jC&zpB&6&5gK2^?I7G6wubiRz+lK5l7RP2cuQ^H-rI)&M;J{F<^E%Pd8 zH_CpMyWc-r*r>4JR_1GC2fv9Z0qwQIYlespK|WBWBVc-nM(R=@E>1xk* zwshN~tuZH~XM0Aw?m4&eJQM*xdxNWArmgCmGwh{JB z$K3sXb%e|l44Y8(yh(2hmBIng zt0zD)@bwuoEKmUS1#~ z7QJ4CN~q|nV(AWLZ#%*-9SiO9z47ir{c%|#ORBEDBxYhZF+?gF&hsVa2l6I(D+c!n zb>-dK4;0THH~no3J9oIoVO3Scbd%0iM?~U74u68r zg+KDSLSE#Z=!bSSTA3n06rtt`?eKT-cF4b!*AlKjm3`NJeZ4}imU%RN*AG&OMQnmS5e!mCu!L>-*_(Od_|L$!E61|FjKpL%pSR#lDnOE~@3=iW@-w zAYJdI6;i|UYpJKyRvM@D)_c(T+&EJUc+{M=Oog6dueF#5RnclR_!$B(vB|XvzN@P7BxINAkb%x5CB4_d-90 z5AY`Ke|T_zc!7`-afoLl=Ez7y^B(e#crR}f zN(jA$m%^QhT{<9FQdeoq^>WD4c0|5$F|;%B$f*w|wvrF1&G4(Oj{31D#BJnsiXh%T z99*A0V1JcUpWv=FskPN2@PQa5x0XhT6;bz^Dz%5!VFR*1uaJeQ1mEO8wV#lSDnk~h zcxpTCV8%0-nKJAeIIC{tG-yAI8qA2YXLAZS&hQv?px$s3yI@E%?B$wrEx2E}J=_J% z(Ej7jgR*~~dk4b)1#UP8Mhd%w^|Jf9D{%CCYZ_?&-Hg18sX8k2_HyI6^&D-OV8}Ma z!(?F_dihb@OH@Ql%uMDk*r<8PpDjd|U>%5Nm9TC*gld~O{Z}nhy$E9C-|AG=sm_Bd z!8FvDCdfwll{7@UAf`hFF+i{jPNA7FU)U^+6$%Oe@H6a4jTnM?PCuo; z&?0SOT-XZ3+u{%AH1nCsWL`5TnROtA{fjk4Z}uNV?tXy3K~Jt9H;9|eE#?k#m%ce4 zoZ~ig^SLS9L~ar{lI*diEZ%hTJ}A2IM1scjE$XIP zYkxxf-CX$(wY>E~qunmKr9t8$RBA62$_lys7QQZjBitcOhP@$IxJ`I=cpUO1A5qsg z2Hvl1cwRV)pU&Ul^LaCJO=W~u!ek)@ZX-3IdR>K>(@)}Uv5(}H8lk?lvK*0KNEuQ^ zd5avY%z@KNWp#%7995&g!qwnct(KOInz6p95Q_rIYAGtNZeY$>5gLP!Xe-0uV7(pe z)sy5a_!hUL=7X@h3|g6b@Jy)+!v7Tb$@~rK%m(DOex@pd>*oa>^d^~(YFrbYM(<=| z;0+Vara`OjW7@H&;dHlz^KnBAnT9dO`$oHoGX;&ejTenyjRsR!(=^jT6Z`{B`%SG( zX~qi1X@>XQY@GS7@ScdpO0Pb9m8s0kps!OQ5KS7Ku-{pwEpyT;j8>?#{;IU#W@iuBB>BwgxAY4QHJMPAHB>A7DBPZZ1C6yu;DoBeG~u}rA1NDY z25rl&NM&)Ncu9OC`b38$L-ATrBU%n^y06p`GnqbU+r6Yw(l+T7dZ8bsdx-t@mP*4} zPEyvXCBX1JAPZ6xRBWe%&7GhX(@JXJLHXGYPSyvJA*-pe$j-e)M)@D8WM-qv&kr`} zKCKb5<233DH>3SONA18Q{W%DEXFwyrqjlCJsHj|~R#ta`X-Lph*_VbS^Egvy<0ZB# z+nnocGTT}>E;ye#yE;on{Tfx<_1aa;wak?WkIQ6F#po6>17pU<#7F15)1zvD{MOdC z*;?PS2|lV{5k;+IIc!`DWnoq1;_so};0}~~jdXbADf6Y&NF(G%RnQKGg=>ZF809u% zHEclUEfVoI*w$zmXBJ<`szG* zlT6Y!YZbJm@UY&f)Kp%`-$Pw7G165?M}PenzZ32`0sa&}ly4sXA+#g7BX}}&EqoU( zofiHC5v>8=iXR6KMjernDoT^3{ZeuHkh}>V;XXA9?i;1FF35ZpQgT5jNWl5-rZhv2 z*DgH}<07bkjyNNcNG+jH#3-y1-U=6l-OzNLMFjDP_MGg>tTmK{ZgQRFrsa%9v6Xc+ zan1K^iyf7CHK|h(GHG7omAHEGO5(gi$;r2i+$i$6u&MCp#CGw)=on9udz(AKeLhOE zkGCF&f8IXB-^^hu2p(fst(!U&(eGi>f8u9xQ)B|aHB>mbAvh?sD7=eb!T&Cpg&3hV zKL&YF-237-xwk5+N8l9nm$F-Vt7NKk^}%Ej+)ZE6%k`lWsQ@^cP2j)22~66Ls6g&V zrs-Ee*{+CQWu?*roNN{ut*Viq_{*W=!Ro;w!A8MD!4^SNuzaALzpHP#_r2HRYwUmM zUlT|VNih%OB#~@|&P_D;F#h+85d#z9Gm$IjN?6R^10_?iqF$cM|pF?Tjak z-7L>-z1>G+-HDr$4DnavYI>f=WX7INJW=G=qOXg!`7W+#iKN$Y5zm(BOEH=8DG7(- zYsC(Am2`HryfC#fyy5m6-Wez(&z__9>5bKMaz**JxF2zb<)R5>__AVAA&D;?eibSU zWyW!Sc4WB}rReensRm+ZKZviTFUot+ZD*0Wa3Gn2oI3}Psh0E*<``Rv%Y%Q^Ym5>Z z@b~!(Rm0KrZ>W7}2m)?@k|rdK{1c=vVldKCTp~UadxBO~H{3X|z+W2YF&umv@`V2j z#srJ|&-ZR0;A7A~^2@XO>6iTx69#&nMD7Z;PzIH_df z%7m)1`=f`sMnNxo2MoeOHq|OxYMFlKp3(0xSNH)Hv853``UN!aM#@`M%eUc|Vs86| z-@(@vOqkss7OzK2Kvz^jutXx_KXNnB@E2)wFjMki&Y7-5TTPF}Xj+_7f-)ZX+hRL+K%B;U2BeKf!l56UGToFsnTr zY!~zeQUgiB_~5kQuHdC$IG7$3f<)+HkO|r0yVWaPmG6wzV<+h97x1UTXF>0)#LpFc z!Y{&MzGXNEzeR`I1n=PUOK^4{!vv(2KRIyMKQY)d=m^~iRpeWURpc1d1T6+LKTTbx zjV5Z--Hm?hKaOcp^Xx}#JuJ;^ubo{y6XQJz&y#8-o=kWj*FENV%#@f3@h21aB^62{ z;_Jrz;5p#h_2(1co9ARihQKF3!RIto36d(gzs#QLTy zK9w7ugB52WJTx2!o}UtI9?TEy4D<@v162Ym{LulQZ<}wGZ-STikMchcxp_zAB{(}n z4v3jK$3TEro3l98R}C=DYYmW2NXXu7G=W^pLnp2}*pc zgsiw>@q1!x#>9A*xn8(dyH|QDpGs$*a+@$)x3QUy>`r$7;L+SoJhUqV`pQgmQFF9usHv~1yXl&- zEA+t|C;}Ardf+l&KuzN~cm|YF)=TBYJj|TNiv6T$=+q|2nWz(CK_vJp4v?29U)7_i zva{$9FrO)`PXaZ3Ey!lA=u~Z!R*fYHv;9um4&|HtHJA_k2Uje36|qQXw{O)`t&Di7`2XgPQ=hFxMG&(_F2v~ z=zDj&C0A+JVb@r9Cfe|qcyr?Qg!K3d@m*qD#}tXa?x_%cI(kpc*%$*9Zx@}*#j)`E~t%sg{tO7m|=cIb>wXA znet9v1uahnac^WK@5SukmA^~)7VkoZ&w}ua;80&5?=as5KgAox@p4CHu#_Qe54VC= zmlbEI6q!o7=mfG7e1Rj%E43TZmoCo^;GFDj>H_>c_hJ0ltiIDOLmv`W2ZBU5ioX*w zhGqoY219{9fo#9q|Jd6jpUCT!J2N+ucNj6cs=;MJHz=AlLMG_@E=LHZzJ7$tU|z8! zxaM4cLt#^vMY88dwe|R;^J9dVl$cgA-DB#<=Ea>($VoINg%Z}pe~jH5b2^%d&h)JE z9P+gD^mHGOD(2W{J!D>P`q4DNRM+&;m}}_8okUB%gBxqp)!F#14<&k-#JlPpA?9M_g3g-*K@C zp@eOTr4r}F?~V<5X1ZQE4>?{qN;)Sw+dA{?E3NHJ4Y@d`8?;!B&=Nd|;@@JTsm@SX z-a_lF3Kv@fo;neXf#b9@SgSGcIyk4-g;&TvY9r#K55a?HH6y%FHp5S$7WFUuAY!z| z@H*V099EBkg7j6ht4HLg;`zuT%-`!pdO`U{L_)&J@aSN?@8A5!xnl}6?>V+SDQ{G; zTG$hpCwYih@ zaHfWTE_OOQlj%txqN=0nr4+Zqz!*tm4!4ml$qYs$;vA!~o4BW3E;QKx zQk_v>cUy}hzK2?BCAm$1r1q7)k(kIUep#fMct$#oy1RqI;gBuV-+$V_#@`@xpLYnA zg+9TnzRkJ+Wf?O2W)9D~52kXWuc5y<9K4%{s`0M_T>@0FTd-Ut5IL&$Bd#*VjDF)5 z#AVmO4f`m4n=5UeW~<}4=osM8P;qd9%b@4MVc;zJ2sN;|WS$nUR2SdyX`!lt#y&E? z1p0*^a~tF=$zBI9_VU?(W%tiX$oVnnmz?&wt@HQzHUzEw>c~3jys|`thZi}9dcX`e z6tYyb^UjB^d+xoS#~$9Z-?P9o!4vVUh~5#?Fm_dJnbg z955TqcZ^L9H0Nd;F{xmjFJz{&^SKb(a3)v5u*NXf*a)oi=cwvzZ5nABY@TjOv97QU zu~}^GEvHQ_3~!jK^na9>t`D{QLuLrIPQRc&kq$|-BF)93kqeO-IHMJWEn!c19-L##iT zneRfshX#b-@i8JLXDAc&_0%r5k8uTPm8VU+jQxzG4A%{$@rsc{9^8URFK^ytT#hVg ze|?flC=aEoph)iEAB9JS(gK%!+w#}vGCB3YEoh!yF*_^kWmYhIbnd(SIldNwUBOA= zaY8Fm!928>mae~{IF>a&G`+Xjt@KMz*=a_eI2PU{xyAsopJ^BLnD?jiiIbKss;PUfZN@7~4g2#|M}VO(QlJMd5o zIR@CH?PlvXj3|WhXG3RhKR3o;GkyU6m z8jhInT2gI=?6>VJ?N{sr?IrBh5a(awSm{usY_8evo9-p<4EIm2XxBK0$3D(77DT;T z+)Plo-82O%tRHIl@09PP6x7CM@q@w%;pxHGfvTW1t_ge!*sxx>19H%MzB9jo|H{|r z8woG?MUh5e!x$r5gh_nA@LW_Z4-9_vZq9$0-6-?&mu_iPx}0_|bARrcKrUZITp*1T z8;N})cJZOuU+$#N*2hyt+0P*MFR>i9y>d)*^>rV1cZh0azhxd{n9H`IZ&GkLNA#}~ zxq%3&1LU59A=DV;vwnF}cHOM*8TY@o%b1tBJiA5i*8Bs$NMM z<@w}(76>ai-alEuHL9H-LS0{R_?I42t!p}l<=S*+_VjVsF&3${lqw@~uEXZn| zSu`^x^H_FT?lbT0Kog#n)~PIcnAX`?^goX+m%y99X`Nv`ZtZ1zXpeVpjoOKRJaOR@M-7fp_#E%1@pnyHH;04ZVr!3%}vx$dV)(NJDA#X*-Q3vuvJb z9cYv7-JF-Ac-Lfi3_Ke?x|2XHSrN6!xzW+wKGs&*`l}_u95!w={K9$I$Mgv5Ik+Wl z)Q@s~sRC%kUwAJVaZ_=2e-G~nMTL8YM67w^!!6J=yZC*Wbv5IgA|m`mC>!}(z***N z3f;pmLd$|HK_kvV#rL87_j&#tTlRyD5$WAiH+>R6O-|jBek()Cc6f!rW!@>xQhtC} z;~KgXyNDYEZw?ec8_ycEO?NFHZD$?Tz_4_>-R@Sdoz6O7E)k|`TpCqQFCvc>W`=5@ z*Ldz-?A_>n1?nN&$yCppX-{!} zjcV>H;(8hNdsKYXZ_ZVYS@uV^cJO(R(jwX&T_KWuM_7(O`_6K&^9=6}J zx3OQa=~l{m3TwkQhSlsxx)wEqxUN-)4?~ z#K0H-0npb|{0jmSa?^uDokH6~Ca55&(5~Qtz)F7=e>-1}x0p93e{&v{yE7*xt9|CO zuZ_~nrN2uR)60Iw3~A+`>gxz zAMDGVyPY+nRyoIlX8o6Cv}rrHgg&CP3NKU-p9&oH=lb@6F#pQu^?wSq4u!yJ7|-_+ z)<^n@@3DE{&|O+d)HJ;^wTNkLaGMud_u7j(*F}wY4MNYf!ky;&Cu*}Z&Jk8P=TaVm0jm)Td$aON}eLf7cVpyEW>Zidaqs^%q@^0vPA znV3V5bxwE2IQKhV+Kbs++WxQ}vjoj!%`xV$rnjc8ra>mJagOn(;UYJKy+k*rTERu~ zl~P5Xh1u_qf{A|{ejYN1XCqc{1(dy&IG0z0*8*v5qQ^+K!d>y|$Xx)#k>=C+tm1 z)qANu!e~WdchUk@+DJQX=!CGsD+8OTM1ZaY@sQOHhy=16s z@|x#bf3WX#EOwTNN{&j3I`3@nJP9KIzqZrXkY%9dviVnYifN%~mT9%=p=qLNvMFSI zW}IkDH7qo2MQ-i^`;eW(4nX$w0{b^t*ihDZ!MNEp%Pg8NTDDqpEXOSiEbS~y&Be`8 zrjy3khHmh$p^7dzxrQdzTD4W-_QAz{V#l(pq5?n{pY*y^ZJg!E29VQ|VAt z`jiyoIFr|O-n`m;!JK94XBurBXebM+a5B9KEc?~EAO7zl#Bj3_L0koO;g4ANe}${l za^i33J_jKCJqZf3yNG}HARW|eDxbd2Tx9ogM-4BGCrvBOPt0{JKU=0_D{lERpmnu_PpnfcXpEynKh0gW_e5$U4q_ItP zsmqYfxg>XlPsCnnfK*9Rklmaswh=AjJ1~8J1HI_6uols?hC-6S3O+uUSNJH@8`eeC zvbXSuFkSdl7>3wdH6a-koKJ8%ILTk*AAsdn6Yo72s(?WsEiM=H#qQE+@T$AQ8}Npl zA;&3Am1)XZ)F(Cv#e;=LGZR$z7kV2gW|PVB@KW`WQP}g^@H?+aB^CJOkzSBVUXqWH z15Lxb92JKwX=6B*j-n<~bKz{Z5IVg1)I2yY1_0KIKb=zQyd#t;Se!8@o=|N2I%_*t)^ zC+Y^Yp;Qn)t{~F49ezhMwFz+A`WYGHvf!IYaK5^S`hi`D@hn7c?+*Kk2yBHe_a5}x1q6#|=*Mf}NP0sfKL|>33uq_{`TN8$e&&k?e+Qg5l&yxNT1SzsGne z{YK-pf$*g72L*C(Y<(O`O5G)E(MS2Sa?EOpsl6h3oBvs!ACQf z@S<`%4SVn!bjo|!E~3@^4WH_x#D3@ncY^M+1FGvy*w(@!b_w#p)1l}d41cr^&~(;9 zWqm2AqGNGvmT#)|Fpe|}x!Jc+q~Am4_zW`jd%#Rs2dcty`0P?> z|YI3Y_&r_(gy^B!BB3Gf&O~}DuiYtqrC`< z)RoXtuf}67TH9J2=X$8tH$ri~1CM=p-iz%osKgH=mR9gMiN^(8xfEZMX4{TG=<4wTc zO~O8o1x;ZXyyg1hQ9v>22+l%l)O!_>OKL-jUf|JQ3hMbpDB7cu3owC=Vj!4r*MNp@ zU;oBC2!Ilhhcn_spPGSe{ugNeKOm?73|Hqq^5+HK>gRFhPT~yi$939^bGaE;YCW|6 z%TeRC09R)|&ht!Mu^D)thUba6Qq#a8nt|7*;@{bLe;$5wA$sm*pk%DUXSd*6c0fzN z1B&#$_~rs~OaVLQIQRyqLHW1>E9(jo>4+L1}0`x!?BLhbxJi z18gcPZAcs)1AYposURj8aJ&Won(!$2pA|=L!o&FO9IznJ7``zj(BSb3i}wh;qJ#2N z@DBOy8A3I@Lg7LD|9@pLA|z}Aw(vJ1hadZZl3EZB^1wnU*s`!?;#{VE+t<(7=g-*Q z|NreB&T+y2-r!8X#Pd7+{0_(W5=U6TZ+QEE?-u<0`u~3SBVH@GHmUf|)Nf>kuefH} zI1@Se%RbN+LfE4M#s`JHM`;C)!hn0uh9h@^v-3Y*NMW>wWZaKsFgBG#8~Fhoj~{Ud z)B6FfJ-U#gEsJ+#ys*lK=z)C3u#fS^(B+a6U0wW9*q z9pyj+DTjS61>eH5c$C9)*>9AM@9rPx zL(u4P=c{<=I8Oxx4gqHkb~ZSJx!<+|4otzF@C9f16VCR>Z|D3yuFYGFn9sj$&v17< zK~M4;*XzYMBE~EH`wCaCU@N#vsc4~Jzfms=S^?}H@csWIu?XKe%c$|B#6F&4*{fZj9#1dqaCjUY3E=i+!S^XcrKtku^1&uJVH3q57_6IV9-3po~Pj)%2#T*3W04C%cPJ zUBb2VD&^M1l z+swlEOh9$nDx50^s5yPmA8$f`z7u`+7|=*ggJ|>{DlvPZWv#;u#SiDvA3$m=3TDP) zv~vPAM7{979iFg_us8ET4Jk()MsNC^ULJgtYg!sK^1pzo5vNzi*v4R-UQhl)9z-45 zD6$Au2=2zuwKh2JhH$#RuT2NtdJnYb+v$^ZH)upB(d)@0_!}Rz-Ks;aj(JK7<|Yws zI1x{|sOr=KvJO3vxyqEHKap>!UDP_Vot~uKL5_2(G5~u1v`9PItgM75)n{T3n`o|R zyJ)sp&T=!zPFk+~Jd%QW{p`T1P+#es#%V{$yHEvkrU8adR0VYauBfKG6le1v!Yd++ zunKB~9M1%%wxO!|rm48`sbPWPcdj|RiEgG0J#?hwiFMsQjmIcIyyxXL+eTiX~7>|*jh zboo1^?&>Y_0=<(P#ZH1+y1TI**PYmACN58?}XD(lCcJWuhWo%W@gljG=(L`Zo8%0;^JG;&###C{Q88ZKW$g=?DTBEW9}`zA`C zqTSYSt6!Dwssr4NDe7n3PgjXJ*u*-_-h}2J@8W0@?5k zxu5=?DaK~fTi7(V7V|q*TQjP%bY6TNIU?+gl$8I_w^8wITkeygxv8Xigel&T$n}Op z#C-C&)&<-;jVc1&+yKPYS!3Ar%5;JYfN#)St1R6WQo`55|AmVPBO?2yi|SC~D*QTb z(N*X}^lI{@T1fosfGXHF6=Q71fJUZ~hqn(q(C}~J$ZLt&(h-m(Z|mg|6X-={ z(?L2yGDI54N^9UacUNx*f8|WvlRuJ8$U{^yco2-Dw&>Nhmf#bmVkT8yo1yB=)BPX zLj`Awb_b;RLBxM>XKPQjfs@h$ct@;+*G)sRVE&r`vX7VOM)zV~(*|}3`bls6$*Lmq83;jFJqW>lLJznhc%0jT_0tlHY;VP+0dW3s40< z79R1J;9))*m0Y=SJg)`fzNeo+%I26nzmng6hL$QK{q|YBzn6?MELYMr$MB6S7$TDh&ju`>o1hB~_iu zLoII{nA^>X{up;=>f^BTT&&&G1@aOc5c&~1^$#jVGN?`DI_<17QM-oqj8ADS`<1J@ zNOaKNDhJdKm>ZnMx^X4E&hKGt-=W81?XXNQull66Vo(~WR8+1>6(W!1^TbX%ky%GQ zBTLXNS<=v$siE&uODYGDz1PIO```L9Fa;)%ceU%PqHInBs7S`btfeXVjxGHC5U ziz!T6i5!9?b#Q;GfLPTEHSv_PTih&F)$+*{(m|HP9kG&qiz@RT%u+If-vA+9ZKCu? zCBjU3x_TDveagvZ&bf(nK6JoHZER8xC<7*`ee(tp8iQn??K7DQXMiXDwbn zFaM6Z=+kO*VjS^`q}cKF7W{<@#7g~;wp5SRdujuZc8n*Q*Ce7hA*dg8doe_gba~Rjh!2q`r+@Kz^j2JPhjHI@%De zq28X{0RN10WKn$=2rgrk%JOCSdE8ebh*Ko%9Y_b101Fvp9tfZMldQt|rKLDrJS~)n zl$939_vLy-7x;mX!VJhnH=v3@wfs^)3ttmjp309AlB6TzM)9OlLq7}!MH$Q~YS4|r z>G+9UNX|kXCCDVwCn3WBB%M>MU;^D#FNt+sMS29<+9Jbcb{i{#v|OBiMwTags7|Pj zpNS`=J?aRppO#FPXT0nruB9Q)(BDwbFqm?nih7FvK`9|0Q~p&yLQBzEyGX>-W}2hp zxj5rJ!&|rp9tQ(;2w4#o66ch|;tO6AYv}i(X15@cS%$g6RH7bhUd$?OY8BMut&{VV zqC~1zM(v@UBd;<4a!JPbY%=A>D)}g``2+n&c#8gtiq)oCQ}`0ErK?e&s4EQ5gs8d1 zc>OdOaer!Sh?~?fqOkf>J4cn|;tU7a4DyP;1~GwdR3oM@HBX%-Z%}Tl95IhAxsAJXI`VodRoiaw? zY~BlutI?>#tVPY$qfjmF*L+w>3{~2T9Y8GqsISA{S&I3#Oc?3AY#GB1wi!mhSFD{K zOP?So5b=5^)dIceK4q+y1p-%wK9tMQWGT$17m(4Q@Ek_;Dv7K_%u~B6vz0#RMLWon_B&0nby0if zB}!2JsIg=^(NjOGOc%EcwIdzi^if0Uk2~`sMwC=U8ZS}D$ig7ZGhpgzcs_tisRPP$ z^!{xTC%OR@Nfen6S_Dh}LDYha;|7W$f6~nI)yQ2@Q)Imfp&_RCJ>jALz{vKNt`Bds zIba>cBgQvC+oEXl88t$jfhr4%cv7GOjL58~*HF)hN$Py5g;Z3TuNFpM{S?kp22CRp zm^~oiw*zJR5Gs!v(7SaJ{oEX>p4cqHLmjhD+^^Il4eVS)KhuxMgf%suLJi72qMuq= zIwP#&V}z%X7g7qUb#7C|4fV~3%==91jWz?z^dq`!U)A|aIcaL-L!_bnx4J}sNQP+# z+l^hzK4FWq7wOyN34N^k0WJoc#H#W=d9FNPIjCJG?oe)~ICBuS`$qa2HGt|)F4Rq$ z2X$q!suwZR?Wj_XRgY;Y#4h+;9-vE7xx{i(f%}(<+y_cuS(Sv&_%# zZpuQ{)sQREO4K^_ zl>K5iF-MBh(y#*ms8=OFP*s?wY+tCY7qdUolL@2#uhvKFtNsj5&`Y_Z@+0U7iC8gh zBtwXgy&x*W*DD42_c>&BWZ>`U8&N4cz&>f;{j^AP_&4N_WH}ax$mZmIF2IDV2Qg(r@lK~CR z&&nHp8ugIg%#21Bhi1~r)r zw0@F!N*>4D?;TMN5#KEEC_6(hFp+qIKuC447ONl%E$9~!;T?vE;}fzQ{R?P$^)Z97 zlMjgF`Z_3H4#O*B7S;hvG0Uex${s=dMkOO?wwt+4ccCkwUg!oXfE_qb=`25lgT`%T zpW0SCrGF&T>F?Pi$d}A#w=mK4QRvY}=-+GilyR~TBhyW#u-0CGMbt*T|15Qx>P4@i z7g4*2B)zCsLQRH}?5i)v)g0izq->kSxbyJPYY_ z5w#snoB~Jtx@Jba;U>7mX<9)&Vmri<*JACTgz;ntl%t(7oBoG1QaRLZjND^EKuQM* zeF?NtzoV7kf-;&@D{7PV(fG|ipy})4T=OO=G{K)f~=tN8osLp26>#ZbL9(Fr>36lylLl>CJlqHD-% z^ws`Cb}3N}t2OlYL?Vdc6lT;O`Xc(G-{>k-4)F>(kUpA`aL;Qamf-^*wG}cThoLyVr+iQrp*>vEmLunqtA4`ls037E zg|%C1HTA604>Q@SO1$z}ZYiIX21-k%dT7UBqEppMj-32bwAK68_=dKYa_e*$tSYY%6Y*p|7!+ zX_zU|)CF~051_@n&&INy;hL5N7AZqth4)2eC|jQzsv;ja(b&gmHO@7h2m5RlGm1Wp zd-57)VF&0+P+u-)Lu?XPA1Z~y99*pETyhM->ciD&rHPy*HM zI!F15ky8h@hyGo~_4!j)s4!#c;A{J@6++6)l z-%d_O<;iMx2Y1F$$LKNcGPE{GTqEvhb{}(?`GI{7AA@?x+SfGSwgjvZTdKW;W3Js} zn-03uI7{NJ+(Apc2{)Ex!*6g}pe&26`)ohjo7>&?dA1a5ly#@2h^3;r3`Umy z#@EIi<74AZ<7Q*fKpVd2zOXAX>+msVuvSjv@A=sUm;;VQecw~F%^GXlXd7X>Ykh{S zcX?A4!v&@jvg?XEQu#~XA*X>05`&!O2BnZ%2Q7A);#T&_SD@Y+BkqBUaW8yBYD?oI zZ$lM*Z?dDm7D?4V{PQm3O|3W2-i&-7_*^Zsl=oD)rd&w>1kO}C{VUy@l+-cetk!KaQz2t_ z?k2N}K1qF#75!1_U)s%1WSJNwX7y<#fb>nh&jh;#+sJZwlknWd7|n#Z`og3 zN16r94UaJE=-tq^j-h^_Kfq5So0-n0u%nR8KFrK!M8r$ts2Ze;cm!XoKXI&(-HquRFcJ___MmfjP_k^&?*G8neqd z)Kt+BP4CpENdx#AfqMB#Igv~z^I&GboS=7qxTidYn87%Z=U>KEW6B_YW|0cS`g|++V@-cnG(6x)KYy2TEr66TbI|HkT>bY+-OrF zYZv$#0%wsb;Baeq=0Z=*P~YXOTUx+1aiYeW?%sv)Qgr7~VxJ8sx zucr)=c8HHfuVhnWi0AZ6!z4>X`)fx%=Um4Z+uxR^rbpmy&PMyI1Pb~Pat_^x8)GVA zO+b}QJg7hE)+c7S@fcHt45@#E7s#U?rl}mK&eAJEy)({m($ve+$Xd@jz>;oyVCcqv zfLfun?n8w7nX()XH6uujRBWE%cT*S4RL_~WfP&G+lw=HXPHqjmf>qh~oZsL=g{r|Ca72s_o&2kw;hM>a^gOdw0Gcz+?IJq!0U--hz%y?nAu*1w8 zqhv8_>DB6g*-y42ORL?Po|&HR>MEf;x0TLK8nin~KV`SlL!GQSh?C&VZ4E_hj?K+j z=+ab0L~`aJ)&YGnq6l_m`v_is>`TikpO*OR(Ae;a}@2k~JseU0Sa6J(&;ezdiLrobrmOiWpaA;6q;0hY6o_1mK24 z4qMj4tbC4tTt~cJgIA@S#9cN++-5pv&SN$kQ}_~0e>R0k$Vm0$n zSY;X<^C@;utlQGbG)~;Zx#^kY2(2(yO21m1EYIxWk<_sCjC~oGD?VS`Ps=f51~1bs z5Do4g`7^XMNQRDt^U7)J6LKA6;W@FtfiwOvJQu(5v)KG}Y4Ql-C?;@*FUE@5nQTsv zhyHJFG10KaaKzBpkSt~jPxx!x7q$SDk(M)s*dCn3ZxLx@9aDSEcuy<|G2bn`rL!r< zu#fM{_N4zNjYMAUHFQO;XvN7IU}5~u&Boro6W5h3&Ag!IlVFNhPRd)ABgAtkis$3! z)3cS{fj-Vnnf{bwKYM>Y_Hp<7Lmx7}jQCyO#(MKcyxIeL59?>cz?&aexro7E-u1@T zE@NBT%Jl5Ezg?pO+oTCv73w2B0(g=WR7Ik>JR`W@<3fw?%6eh%1pijCW_ zku;5_bk>r}rmo=Cgrq|}}?8q|xAlgwbdMWGTTv&n6f@S+Q+Zh`7`!GINfO8~BzhcU8PJS8KS<4&F zK{IruI0JfK5pfWDB?XKon(?-2ym^?Y468jw#rN;L#a@H=pBt<>zn!LEYVvZ?+b`@WDL8^3?@p~TnGzYkgi z?h~O!=pQR^s;kM#T4#A%$l+`4j&~fl`K+_E8oBEG>qpwEUhI>~P#Tf0_L8fGNBjS9 zkGHq7b+Q$+*KxJ=l|U9_10}JYgpc4l|4-ZrzH}3LSIHxF52uEF;au_^wI4DDJ-9VO z5^58!8fJ=9_~(pB-Pii7vNBWsu35?9Ocqx_ybm_hcBTYV1>;h&D^Ig|Xbut0;?z>` zjsK!P01dPp&yN9Xq#>J@4(|6;h~&OQM7<2zpQ;ILQ7V(j<=}^-dh!hSkv+gPrE^d- z;rYKMS5x=s*=!G}h*vdKH!`Narr*Z7hK0f+?j3UpvoZ(Iu@&D`Y-yZpz7?}LZe)B+ z{PbAb^2AV;|AaW$UEoP-68Ff@P@Ve5e-MrdTlpqjUe-+yrt%VF!436JI;GB~hX^^0 z7Q<1tr8YJ+$V1v+q__R$`BLPg@WJw_?YETQ^{g*lX9D@9cS>F42~Fxn$r#=fV11g) zWgnL{(Z0Yn*S9S+MXs%_LH?c57AbS2y&)HPkqyoT&|oZJFYN^5W^lVS6j2_6P2vQO zWN*>EsBOf1?0*svo4bKNHPc0yU*OE&zzk!`GB!lk@}Pe9Ke7__mikSX1e&)xJi>VX zAeWnKz+M1~tr?RavG-oUVm)Kb++=(x2brzHUxowXJkCrNPy)dUoxQ%2TiC@0bg+vv-)9 zu&5s3^=L(X1bci(M1*Y21Td)=6oUK!@Y!TzKhv+ld9VTa`=#_?W&nEy)fjKYrv|~8 zDW2e0Gu_C}ss{Ftl7N}amb26w{JU!KZkS z97|r*`d6j9W8Y&(j%77wn5CRaxF}vS^a2xhtl=QI=NGd}m_iaO?+s&u>`9@Nah`dQrJQAk2|fcimVQB$1b4by@eujhOyPww zr|F?#4qudZDwl&T-AT6E=@V0br`prDrz`12GfHPB15dvQI>W0Sz3rv5PTN#ldwVD6 zA-C1L+wTY@g$$9_@<(+IVJ5d~$7N&qrvH$4oTsSgpgX_YgqrJ7&V#NOo>ZR?I_O

5hsV68gzuHVpOP?`S+aIv4kZewFybRW7m-If^x`}T2eZWi~6Edn*w zhjbnKBUb*qR9TFRd~8o>2c}#%)7eAKA-5m~yaVyhB~VoEM!T3&P52%B|-1af>*L8;9Ap1hbhgM0Z6@aRAX?I|s$Gd+HSJE@FS1=n#_!YH@+z{)vNq{J4&WxgAq#OL7CxIJ7Kt|a>EB-?=9$lRgt zBHr`_tXI2$AE{4dBW3amRf8TygR6lC>nr_@xcU!Lp6 zCNUSFf3O`9EU)}lazye)x`pS4mIqe{X84yt!QqhSru(z2sB68mhSTdf>F5hc*g<;_ zdt3W-JLAZ32(IexrXC&|2}8g%P~4l#o7daYyUUvhwEHpt%0R!M0cwc%P!)3?y4`(3 z6S1eS8vYSp7wIDvgbKn&?EN;VFH}FG)Y*}3Y5^2X8K5&Sk-MppbVXQNC-y8$K&fId zIGsL$uXzb?hgGiM`YqSx&pn}ks7|1Mzw##Z} z0yrI7GVPfu$RrejUleBhgL^F(-vf+|0lu@a0}M$?;sES_ABqM;0r>hgQD@KqUQlgA zyul$Z6AOrIg#gy^CtPRfAva}rqmI#mjKdjXJmSPgB~3a2mZ_p48#oBIgIQ;@=axI& zmBUrb+0rrAzC0_#R>OAN+Rn;Z(@+OUS!1kytV^wa=tLLG%F4Q7KjWC{?CeT$O?AI= zxASCr4tn?cHu{eSW(Ioz61FNF2zQFyjuezmNwpEVTBuZlj^0t^-WlL&zaZz(8Mx;w zR2UVi2WSI!fQ8ueY+bOMHRiYRsl1mL1hY_47>ZSo78{5Q#Es%=v4xn1n#SjR3;r_d zzn`InTfld#1s}zIJhQb^bCRCaA!QG<6ZX| zKT{K`9*@~vTrY63J>Vi-9L7m4ApWQDI}p9%gqrxSwZaAA2Wk`xh*iZJxQ;4dSrf!m z;ihmv_#0Q(K*)wFflYin)P=6%a$+P`0Q>M5hC`k=52CQg$@@SO9Z>fu+vNMwmxvh2 z5snE(0+0R2eDl3yz+^esb=>*IQPMHNemAQ|)^4y2oV3=pzRjGS*&X$sJu+uyzR7H5 zy=EP6{jCEfgTdh1P;cZtwnfTI0qMBhK~a@aU{h;> z$apT`YYQNE)&bc1uJlPd0f>REh+llhd}@XkP9Mw%9(EjeldH=Ag$Tn}@aa?(8Ve(V z<)0w*5E=;u1SkKBU&oK)P5dRU3U`q$1gsKfYaT_0vAbeC?S%^gfOwjA4u9mI|X zu46bmm>q~2Vmh)$I}qQ0%znp67r7!_VXit?97j$r2j+Sjl7>z;6Yn^N8D%CiAA=Bu zn#68qH?f!5WW)s%QGauuBhW&Zp+G-YxCF(SuHt_2tC+{o)-c9!&~VQ1)sSxRVgK+7 zO4JJsqYcFks`yA;B@Tx&jRw{Fp#m)&fa*^Qw~H%;(bbprGg}Z7zJNH_Q^dkO~Cxc=@jMz$*|;O~NE z$PAviB(5wfQR?C71>0E+KjbnP`+jm^j^vB*d9c%|&bQ&a^1b*8{0M$3KbD_}-@|YW z#L*A0_rza&@O_YbAIy*Dhrk2v!M6e*W8;C6DG;pNQZCgWQ=agA}* zgx*not|6Y)z_`hWe*6usmYwW0FasvCLFNf~1^)zU$O`SGNvPVO=&Ps)cl zkT>`rI2qf40p&wre_#-Jxjg=>{w4nA{y6_@aQe*gb@Mgy74hZq8GNiS4tz)zeT{vS zeTSi9UI7|R_xwh%h`tEagidtM(1s8ho{a2UYjE5pO4}qeqRApEJK~`sn;V*UB$TJ# z5|zlkU}+cyMu#LQbG@UJux~nnD1SWsjlsC4jx zqSdG2SisNX=kt@$%02k{d?|2Oy10AXDefO`CN#{upe>WQf}FiV4BL^d z&gO@Q_?@|qaW)q#Km#T>6TubS!tAt$o`Q2=M zBV!oVMr+7kKppwPw7dz}q6WbDdXXpJ0?cd!=tW21FC129KuI@I4Jh}N^~wOHnnEb= zkeQr}$ZsBGQ{PL^rGKUK;Ga7#oyOxV*1qG?QR#$qReB)3m3{!@7L)`z7K$Kw<$T}+ zsV;XwCTYC95Xwx4<k-bD_0{D_6 z$}7|$B|+79B-GxH0Pp$+)j2YRYK;~eK~2S4y$b4NE5RW( zhU$k}qMB4m?2s5L07jZm_{=RJlrBT7c{jNjXX{SZLw=Bt))zfP?ag`AXRN>#%tGD8 zc+|BF2X1a)w6>)YF!Q?JWjSE8N&PADe*TllH*X<(i7aRErEcphiqmYv`-RR zDF^Vu2~ZBq4_=|-Kn~~E;*l3KK-V|{T(8Bna#~ejj4Obbv@mdR`SD1=XN;Pn`cx}a z0>7iZo$w(U4V0ibC>%7-Sr}Zg4T1IOjPGoV-`!AKGYa~}OMy?`3RL!PRB9ZL;;41y zS`|kCDDhvoeo4!NyBh_(-g)F$UlT8(JNOhj(2wzWj{2on$hUvSeCH+14XKu!Pxy8$wfGPDH0;|xB6!l&|}`Y8cu z*8t9a1+_DCF|&6?wLvq~7c|79ezcaL82TarO!y1%P`&~lh5~lJ0C4oVphEl>IJoT? z|MP&X9ES>`ez@zNcyt8Punq3NH;#ePnxel@&oUbs=BdEw4UEDKP5?Zh$;R2RTRwp9d+yvDKe*uNw2j{4Zym&Ek7x5LS|2Nufq8&!bJ;bN3X-!~N z*^wvL@VOtzl8+~Tq4Hn{&y@$NVo?rDPx&*M{rMP3bU^H_~5CKol>meIkm1 z6(UxxD0|6n{3ziPqS@<#+&E0%Ba0KX8pq6|d7?DGpPfjSWdh_A<}md_Y9AS|l%UV4 zwvb2rgBun}@$S=1WKQCkW(Rj-6UrhasHdevA*UQNv|vj{R)iiBM&S;T3Er#6YFFb; zAvSnUDl7J7o`iV$5!D4s$T8etsx`DoPI7h+sW(X7SuvRK7Nbep$->r(<_PR z;oeGJK9l|m_P`53j8}vDp%`A~>&501EL!RCuTVi{8#kU_6nGfiNV3GlNMmIRxd{l( z_v#p}A(*ndX$|DRgU15B*v)aH!j;p%M4FjT@>`|Z?k|2D^O;*KEpRnZo*FumPM^p3 zj-FzyF0HfX3cNElHB9l@(%#BDbHp%5v-&s=D&x4F%KMNt{4G)tnmO5}#n9ZJefz$SHgj&kw$b?_AMl6zbN;}Ny=j~iE1F1 zQ8q!1uq$$wRjF>FUcu?)H?FN(K6qEkLkwn(R9&eOr~uXwb;B*?qXIl1uyNiXZ_ty} z7gCy$)QOT2v87qcUF9CtmQGhXL{f!4at|%{Kybe=3Y~4lqBi``+%GP1$HaBg_%IPDZP@7~$|H141j+5Id5aNgY={5!IM= znj9&q#8OA;-M~vWBaVa3db%ni*K(45Ok1=v@OS5t$AEpwqSEL}$ZZYLPOFvGh1xmH zS1SlV>Uu?R;iSpewWU-iV!b+woJ8$Hj%f<99nsAhR1EnNnZ32t1Y)jyPnpULLe#Mb zaH9)>%RfjE@&~0CZKjVaIhC1IEG?)OsCQllYq>>R7#SzsAvV*ah#SDLX>>t0m3S$S zR9ccJNVlq}cDgtBnCPG+5pFDl1bGPFQaX8+u0qyRFQ{g6A>EW7M!W+CC_^L3n^^6K zW1a5@@8nM)yt9*~fWg^B0d&%1pn$$XpLaW%O#Z~Wn;VhKcUZgUpfacfs*+A4g83e*x|4~bz=0Q0IAx~d zQxBltX*pJh(^&8BVwSIus^mNB1Jq%PSh>__1=R|y)UVXOav?bklxq`Yd;6dwbt3VH z_EKF8-C?g<8dV03fp#8>ILy zb1&km7Sx+91k#E}-LRY34t?zDD(G63G$mQhq50LNSZ78PH-Yb2rmO`DaIVVZf3?)z z>O{gw0XdIoM0c=bZ-xi+OWTTSWSZ(pt5g}{g**ow$*q7vvIF70H0nd<0NSe$(Gx4` zCas572zaI;YAd2Oc)(Y~pJ<{Dmd{73Ldou+GD-cZv8bTlfpzdce6PCN8}%FVN^R6L zN>8Bi@>2zYpBf9D z)YY(<6R4wmqQw(KwIXUhxO+me_&MlLeY5>P`l3%WpJw{;0YW-%yk|7gyF;#b}MJ8&h&ZeJsCpvXck8J2h_E_A~LZH zkWpW>6V=XxF}qhpt%eOYnvDK=teqj(0UekJbrtJ?^0wiUJ8B*O#@)nXj8-Jp1EuD~j${Hp z;{ZRx3dO7bB1%vac^a5y29*bEfxY)a^;o3x(NpMRbSza0`>e-$tt%>N4xx@=Iq{8L z1I4v``0iTjO~ey!%Rs`y&)G#DN9Dr=;w`?d8u6c&g}HTvYQp?Df}BPbrYqCy=m6Lv zc;czrU)w{}LB^;p#Z#rJiPR0U8JQimK^-yfmZ)pgOF-*&1_n<{(*Qz{o#1~}Fngb)5EuT_TXcnY{1o@g7CG2on-E{y}O_7gPk0ytAwFakWo zY*2&@!X_u9c5*2(k(>Y=bOE{>^)Gpjn60f+MRg$V?<&r-7K{PqiJh?GWcd2`Fn`?C zj$s!hV|OqI`0!)uCwL}ffQXM#>j6vJifjbz_)^q%_rqN`(9RRt2MWFcVsXO5%7sgo1uXa%O%juF7xgY5c{mGVcdteLyR&2^Cu!t9hPyRx+D$S64 zle7S_jVyqwrw{5HWu4qt&Ml8o>TCV5@9+@^$WK7?eph>G*MQu=fcnn$*b$Ba8|xV; zxBNury#}ndCApqBLoTCI>D5e-QJ7AsMe0X`Nf9{BNpuZFSSNw+e-Riz&a!rfW!9jt zE`qycAajl#0-cH!HiiAn{DGQ_hjdY<8rH=c$Tc-#>LX_R5qtL2h$X}W4bX)Aj@m1M zyh=Y<1txU9Qb<*xQr

>|i2{8L`q;>!b+fhZW^Y70j{#) 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 J|Kn=<{{XqC*jWGo literal 0 HcmV?d00001 diff --git a/libs/partners/openai/tests/integration_tests/chat_models/test_base.py b/libs/partners/openai/tests/integration_tests/chat_models/test_base.py index 950a52ce3ee93..ccce5722c3c8e 100644 --- a/libs/partners/openai/tests/integration_tests/chat_models/test_base.py +++ b/libs/partners/openai/tests/integration_tests/chat_models/test_base.py @@ -2,6 +2,7 @@ import base64 import json +from pathlib import Path from typing import Any, AsyncIterator, List, Literal, Optional, cast import httpx @@ -949,3 +950,71 @@ async def test_json_mode_async() -> None: assert isinstance(full, AIMessageChunk) assert isinstance(full.content, str) assert json.loads(full.content) == {"a": 1} + + +def test_audio_output_modality() -> None: + llm = ChatOpenAI( + model="gpt-4o-audio-preview", + temperature=0, + model_kwargs={ + "modalities": ["text", "audio"], + "audio": {"voice": "alloy", "format": "wav"}, + }, + ) + + history: List[BaseMessage] = [ + HumanMessage("Make me a short audio clip of you yelling") + ] + + output = llm.invoke(history) + + assert isinstance(output, AIMessage) + assert "audio" in output.additional_kwargs + + history.append(output) + history.append(HumanMessage("Make me a short audio clip of you whispering")) + + output = llm.invoke(history) + + assert isinstance(output, AIMessage) + assert "audio" in output.additional_kwargs + + +def test_audio_input_modality() -> None: + llm = ChatOpenAI( + model="gpt-4o-audio-preview", + temperature=0, + model_kwargs={ + "modalities": ["text", "audio"], + "audio": {"voice": "alloy", "format": "wav"}, + }, + ) + filepath = Path(__file__).parent / "audio_input.wav" + + audio_data = filepath.read_bytes() + b64_audio_data = base64.b64encode(audio_data).decode("utf-8") + + history: list[BaseMessage] = [ + HumanMessage( + [ + {"type": "text", "text": "What is happening in this audio clip"}, + { + "type": "input_audio", + "input_audio": {"data": b64_audio_data, "format": "wav"}, + }, + ] + ) + ] + + output = llm.invoke(history) + + assert isinstance(output, AIMessage) + assert "audio" in output.additional_kwargs + + history.append(output) + history.append(HumanMessage("Why?")) + + output = llm.invoke(history) + + assert isinstance(output, AIMessage) + assert "audio" in output.additional_kwargs diff --git a/libs/partners/openai/tests/unit_tests/chat_models/test_base.py b/libs/partners/openai/tests/unit_tests/chat_models/test_base.py index c6065a137e5c7..c6118a414a489 100644 --- a/libs/partners/openai/tests/unit_tests/chat_models/test_base.py +++ b/libs/partners/openai/tests/unit_tests/chat_models/test_base.py @@ -162,7 +162,12 @@ def test__convert_dict_to_message_tool_call() -> None: name="GenerateUsername", args="oops", id="call_wm0JY6CdwOMZ4eTxHWUThDNz", - error="Function GenerateUsername arguments:\n\noops\n\nare not valid JSON. Received JSONDecodeError Expecting value: line 1 column 1 (char 0)", # noqa: E501 + error=( + "Function GenerateUsername arguments:\n\noops\n\nare not " + "valid JSON. Received JSONDecodeError Expecting value: line 1 " + "column 1 (char 0)\nFor troubleshooting, visit: https://python" + ".langchain.com/docs/troubleshooting/errors/OUTPUT_PARSING_FAILURE" + ), type="invalid_tool_call", ) ], diff --git a/libs/partners/openai/tests/unit_tests/llms/test_base.py b/libs/partners/openai/tests/unit_tests/llms/test_base.py index e9b43190cd6d4..e6b281324f970 100644 --- a/libs/partners/openai/tests/unit_tests/llms/test_base.py +++ b/libs/partners/openai/tests/unit_tests/llms/test_base.py @@ -58,7 +58,7 @@ def mock_completion() -> dict: } -@pytest.mark.parametrize("model", ["gpt-3.5-turbo-instruct", "text-davinci-003"]) +@pytest.mark.parametrize("model", ["gpt-3.5-turbo-instruct"]) def test_get_token_ids(model: str) -> None: OpenAI(model=model).get_token_ids("foo") return diff --git a/libs/partners/openai/tests/unit_tests/test_token_counts.py b/libs/partners/openai/tests/unit_tests/test_token_counts.py index 66abb3869abab..6ffcda94c8611 100644 --- a/libs/partners/openai/tests/unit_tests/test_token_counts.py +++ b/libs/partners/openai/tests/unit_tests/test_token_counts.py @@ -16,6 +16,7 @@ _CHAT_MODELS = ["gpt-4", "gpt-4-32k", "gpt-3.5-turbo"] +@pytest.mark.xfail(reason="Old models require different tiktoken cached file") @pytest.mark.parametrize("model", _MODELS) def test_openai_get_num_tokens(model: str) -> None: """Test get_tokens.""" From 2cf2cefe3909f55dfe1e9171bb15752f6a4ee2df Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Fri, 18 Oct 2024 08:16:01 -0700 Subject: [PATCH 23/84] partners/openai: release 0.2.3 (#27457) --- libs/partners/openai/poetry.lock | 2 +- libs/partners/openai/pyproject.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/partners/openai/poetry.lock b/libs/partners/openai/poetry.lock index e253f4abf7e18..00d9445245c76 100644 --- a/libs/partners/openai/poetry.lock +++ b/libs/partners/openai/poetry.lock @@ -1559,4 +1559,4 @@ watchmedo = ["PyYAML (>=3.10)"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "82984f2d0f65cf0d18789eda536b66448839e19edf0466583e06ca3f0c709159" +content-hash = "8a60367ec11be17e65f368842c2da805aa6d450d4330b23eb6828964be2ad16c" diff --git a/libs/partners/openai/pyproject.toml b/libs/partners/openai/pyproject.toml index e5f2f3f9b717e..b889892039f00 100644 --- a/libs/partners/openai/pyproject.toml +++ b/libs/partners/openai/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "langchain-openai" -version = "0.2.2" +version = "0.2.3" description = "An integration package connecting OpenAI and LangChain" authors = [] readme = "README.md" @@ -23,7 +23,7 @@ ignore_missing_imports = true [tool.poetry.dependencies] python = ">=3.9,<4.0" -langchain-core = "^0.3.9" +langchain-core = "^0.3.12" openai = "^1.52.0" tiktoken = ">=0.7,<1" From 82242dfbb1d302958527d851be65341b3d532839 Mon Sep 17 00:00:00 2001 From: Erick Friis Date: Fri, 18 Oct 2024 10:06:55 -0700 Subject: [PATCH 24/84] docs: openai audio docs (#27459) --- docs/docs/integrations/chat/openai.ipynb | 156 ++++++++++++++++++++++- 1 file changed, 155 insertions(+), 1 deletion(-) diff --git a/docs/docs/integrations/chat/openai.ipynb b/docs/docs/integrations/chat/openai.ipynb index 1aa43bcd08fd5..5d7f5c9424350 100644 --- a/docs/docs/integrations/chat/openai.ipynb +++ b/docs/docs/integrations/chat/openai.ipynb @@ -434,6 +434,160 @@ "fine_tuned_model.invoke(messages)" ] }, + { + "cell_type": "markdown", + "id": "5d5d9793", + "metadata": {}, + "source": [ + "## Multimodal Inputs\n", + "\n", + "OpenAI has models that support multimodal inputs. You can pass in images or audio to these models. For more information on how to do this in LangChain, head to the [multimodal inputs](/docs/how_to/multimodal_inputs) docs.\n", + "\n", + "You can see the list of models that support different modalities in [OpenAI's documentation](https://platform.openai.com/docs/models).\n", + "\n", + "At the time of this doc's writing, the main OpenAI models you would use would be:\n", + "\n", + "- Image inputs: `gpt-4o`, `gpt-4o-mini`\n", + "- Audio inputs: `gpt-4o-audio-preview`\n", + "\n", + "For an example of passing in image inputs, see the [multimodal inputs how-to guide](/docs/how_to/multimodal_inputs).\n", + "\n", + "Below is an example of passing audio inputs to `gpt-4o-audio-preview`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "39d08780", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"I'm sorry, but I can't create audio content that involves yelling. Is there anything else I can help you with?\"" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import base64\n", + "\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI(\n", + " model=\"gpt-4o-audio-preview\",\n", + " temperature=0,\n", + ")\n", + "\n", + "with open(\n", + " \"../../../../libs/partners/openai/tests/integration_tests/chat_models/audio_input.wav\",\n", + " \"rb\",\n", + ") as f:\n", + " # b64 encode it\n", + " audio = f.read()\n", + " audio_b64 = base64.b64encode(audio).decode()\n", + "\n", + "\n", + "output_message = llm.invoke(\n", + " [\n", + " (\n", + " \"human\",\n", + " [\n", + " {\"type\": \"text\", \"text\": \"Transcribe the following:\"},\n", + " # the audio clip says \"I'm sorry, but I can't create...\"\n", + " {\n", + " \"type\": \"input_audio\",\n", + " \"input_audio\": {\"data\": audio_b64, \"format\": \"wav\"},\n", + " },\n", + " ],\n", + " ),\n", + " ]\n", + ")\n", + "output_message.content" + ] + }, + { + "cell_type": "markdown", + "id": "feb4a499", + "metadata": {}, + "source": [ + "## Audio Generation (Preview)\n", + "\n", + ":::info\n", + "Requires `langchain-openai>=0.2.3`\n", + ":::\n", + "\n", + "OpenAI has a new [audio generation feature](https://platform.openai.com/docs/guides/audio?audio-generation-quickstart-example=audio-out) that allows you to use audio inputs and outputs with the `gpt-4o-audio-preview` model." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f67a2cac", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_openai import ChatOpenAI\n", + "\n", + "llm = ChatOpenAI(\n", + " model=\"gpt-4o-audio-preview\",\n", + " temperature=0,\n", + " model_kwargs={\n", + " \"modalities\": [\"text\", \"audio\"],\n", + " \"audio\": {\"voice\": \"alloy\", \"format\": \"wav\"},\n", + " },\n", + ")\n", + "\n", + "output_message = llm.invoke(\n", + " [\n", + " (\"human\", \"Are you made by OpenAI? Just answer yes or no\"),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b7dd4e8b", + "metadata": {}, + "source": [ + "`output_message.additional_kwargs['audio']` will contain a dictionary like\n", + "```python\n", + "{\n", + " 'data': '