diff --git a/docs/Makefile b/docs/Makefile index f8d5d96714d..107bb1feb4d 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -60,6 +60,7 @@ copy-infra: cp package.json $(OUTPUT_NEW_DIR) cp sidebars.js $(OUTPUT_NEW_DIR) cp -r static $(OUTPUT_NEW_DIR) + cp -r ../libs/cli/langchain_cli/integration_template $(OUTPUT_NEW_DIR)/src/theme cp yarn.lock $(OUTPUT_NEW_DIR) render: @@ -81,6 +82,7 @@ build: install-py-deps generate-files copy-infra render md-sync append-related vercel-build: install-vercel-deps build generate-references rm -rf docs mv $(OUTPUT_NEW_DOCS_DIR) docs + cp -r ../libs/cli/langchain_cli/integration_template src/theme rm -rf build mkdir static/api_reference git clone --depth=1 https://github.com/langchain-ai/langchain-api-docs-html.git diff --git a/docs/docs/contributing/how_to/integrations/package.mdx b/docs/docs/contributing/how_to/integrations/package.mdx index 2b5bb97865e..d016ff1bed4 100644 --- a/docs/docs/contributing/how_to/integrations/package.mdx +++ b/docs/docs/contributing/how_to/integrations/package.mdx @@ -26,81 +26,193 @@ Examples include [chat models](/docs/concepts/chat_models/), Your integration package will typically implement a subclass of at least one of these components. Expand the tabs below to see details on each. -
- Chat models +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import CodeBlock from '@theme/CodeBlock'; -Refer to the [Custom Chat Model Guide](/docs/how_to/custom_chat_model) guide for -detail on a starter chat model [implementation](/docs/how_to/custom_chat_model/#implementation). + -:::tip + + + Refer to the [Custom Chat Model Guide](/docs/how_to/custom_chat_model) guide for + detail on a starter chat model [implementation](/docs/how_to/custom_chat_model/#implementation). -The model from the [Custom Chat Model Guide](/docs/how_to/custom_chat_model) is tested -against the standard unit and integration tests in the LangChain Github repository. -You can also access that implementation directly from Github -[here](https://github.com/langchain-ai/langchain/blob/master/libs/standard-tests/tests/unit_tests/custom_chat_model.py). + :::tip -::: + The model from the [Custom Chat Model Guide](/docs/how_to/custom_chat_model) is tested + against the standard unit and integration tests in the LangChain Github repository. + You can also access that implementation directly from Github + [here](https://github.com/langchain-ai/langchain/blob/master/libs/standard-tests/tests/unit_tests/custom_chat_model.py). -
+ ::: -
- Vector stores +
+ Example chat model code -Your vector store implementation will depend on your chosen database technology. -`langchain-core` includes a minimal -[in-memory vector store](https://python.langchain.com/api_reference/core/vectorstores/langchain_core.vectorstores.in_memory.InMemoryVectorStore.html) -that we can use as a guide. You can access the code [here](https://github.com/langchain-ai/langchain/blob/master/libs/core/langchain_core/vectorstores/in_memory.py). +import ChatModelSource from '../../../../src/theme/integration_template/integration_template/chat_models.py'; -All vector stores must inherit from the [VectorStore](https://python.langchain.com/api_reference/core/vectorstores/langchain_core.vectorstores.base.VectorStore.html) -base class. This interface consists of methods for writing, deleting and searching -for documents in the vector store. + + { + ChatModelSource.replaceAll('__ModuleName__', 'ParrotLink') + .replaceAll('__package_name__', 'langchain-parrot-link') + .replaceAll('__MODULE_NAME__', 'PARROT_LINK') + .replaceAll('__module_name__', 'langchain_parrot_link') + } + -`VectorStore` supports a variety of synchronous and asynchronous search types (e.g., -nearest-neighbor or maximum marginal relevance), as well as interfaces for adding -documents to the store. See the [API Reference](https://python.langchain.com/api_reference/core/vectorstores/langchain_core.vectorstores.base.VectorStore.html) -for all supported methods. The required methods are tabulated below: +
+ + + + + Your vector store implementation will depend on your chosen database technology. + `langchain-core` includes a minimal + [in-memory vector store](https://python.langchain.com/api_reference/core/vectorstores/langchain_core.vectorstores.in_memory.InMemoryVectorStore.html) + that we can use as a guide. You can access the code [here](https://github.com/langchain-ai/langchain/blob/master/libs/core/langchain_core/vectorstores/in_memory.py). + + All vector stores must inherit from the [VectorStore](https://python.langchain.com/api_reference/core/vectorstores/langchain_core.vectorstores.base.VectorStore.html) + base class. This interface consists of methods for writing, deleting and searching + for documents in the vector store. + + `VectorStore` supports a variety of synchronous and asynchronous search types (e.g., + nearest-neighbor or maximum marginal relevance), as well as interfaces for adding + documents to the store. See the [API Reference](https://python.langchain.com/api_reference/core/vectorstores/langchain_core.vectorstores.base.VectorStore.html) + for all supported methods. The required methods are tabulated below: + + | Method/Property | Description | + |------------------------ |------------------------------------------------------| + | `add_documents` | Add documents to the vector store. | + | `delete` | Delete selected documents from vector store (by IDs) | + | `get_by_ids` | Get selected documents from vector store (by IDs) | + | `similarity_search` | Get documents most similar to a query. | + | `embeddings` (property) | Embeddings object for vector store. | + | `from_texts` | Instantiate vector store via adding texts. | + + Note that `InMemoryVectorStore` implements some optional search types, as well as + convenience methods for loading and dumping the object to a file, but this is not + necessary for all implementations. + + :::tip + + The [in-memory vector store](https://github.com/langchain-ai/langchain/blob/master/libs/core/langchain_core/vectorstores/in_memory.py) + is tested against the standard tests in the LangChain Github repository. + + ::: + +
+ Example vector store code + +import VectorstoreSource from '../../../../src/theme/integration_template/integration_template/vectorstores.py'; + + + { + VectorstoreSource.replaceAll('__ModuleName__', 'ParrotLink') + .replaceAll('__package_name__', 'langchain-parrot-link') + .replaceAll('__MODULE_NAME__', 'PARROT_LINK') + .replaceAll('__module_name__', 'langchain_parrot_link') + } + + +
+ +
+ + +
+ Example embeddings code + +Embeddings are used to convert `str` objects from `Document.page_content` fields +into a vector representation (represented as a list of floats). + +The `Embeddings` class must inherit from the [Embeddings](https://python.langchain.com/api_reference/core/embeddings/langchain_core.embeddings.embeddings.Embeddings.html#langchain_core.embeddings.embeddings.Embeddings) +base class. This interface has 5 methods that can be implemented. | Method/Property | Description | |------------------------ |------------------------------------------------------| -| `add_documents` | Add documents to the vector store. | -| `delete` | Delete selected documents from vector store (by IDs) | -| `get_by_ids` | Get selected documents from vector store (by IDs) | -| `similarity_search` | Get documents most similar to a query. | -| `embeddings` (property) | Embeddings object for vector store. | -| `from_texts` | Instantiate vector store via adding texts. | +| `__init__` | Initialize the embeddings object. (optional) | +| `embed_query` | Embed a list of texts. (required) | +| `embed_documents` | Embed a list of documents. (required) | +| `aembed_query` | Asynchronously embed a list of texts. (optional) | +| `aembed_documents` | Asynchronously embed a list of documents. (optional) | -Note that `InMemoryVectorStore` implements some optional search types, as well as -convenience methods for loading and dumping the object to a file, but this is not -necessary for all implementations. +### Constructor -:::tip +The `__init__` constructor is optional but common, but can be used to set up any necessary attributes +that a user can pass in when initializing the embeddings object. Common attributes include -The [in-memory vector store](https://github.com/langchain-ai/langchain/blob/master/libs/core/langchain_core/vectorstores/in_memory.py) -is tested against the standard tests in the LangChain Github repository. +- `model` - the id of the model to use for embeddings -::: +### Embedding queries vs documents -
+The `embed_query` and `embed_documents` methods are required. These methods both operate +on string inputs (the accessing of `Document.page_content` attributes) is handled +by the VectorStore using the embedding model for legacy reasons. - +
+ + + + +
+ Example tool code + +import ToolSource from '/src/theme/integration_template/integration_template/tools.py'; + + + { + ToolSource.replaceAll('__ModuleName__', 'ParrotLink') + .replaceAll('__package_name__', 'langchain-parrot-link') + .replaceAll('__MODULE_NAME__', 'PARROT_LINK') + .replaceAll('__module_name__', 'langchain_parrot_link') + } + + +
+ +
+ + +
+ Example retriever code + +import RetrieverSource from '/src/theme/integration_template/integration_template/retrievers.py'; + + + { + RetrieverSource.replaceAll('__ModuleName__', 'ParrotLink') + .replaceAll('__package_name__', 'langchain-parrot-link') + .replaceAll('__MODULE_NAME__', 'PARROT_LINK') + .replaceAll('__module_name__', 'langchain_parrot_link') + } + + +
+ +
+ + +--- ## (Optional) bootstrapping a new integration package diff --git a/docs/package.json b/docs/package.json index b82fda1c4c0..b02d589e268 100644 --- a/docs/package.json +++ b/docs/package.json @@ -35,6 +35,7 @@ "json-loader": "^0.5.7", "prism-react-renderer": "^2.1.0", "process": "^0.11.10", + "raw-loader": "^4.0.2", "react": "^18", "react-dom": "^18", "typescript": "^5.2.2", diff --git a/docs/yarn.lock b/docs/yarn.lock index 94436d8e058..aad5a86bb52 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -9043,6 +9043,14 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +raw-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + rc@1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" diff --git a/libs/standard-tests/poetry.lock b/libs/standard-tests/poetry.lock index 0bb01c5870e..55d58b9c2d6 100644 --- a/libs/standard-tests/poetry.lock +++ b/libs/standard-tests/poetry.lock @@ -13,24 +13,24 @@ files = [ [[package]] name = "anyio" -version = "4.6.2.post1" +version = "4.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, - {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, + {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, + {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [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", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +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)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -234,13 +234,13 @@ trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" -version = "0.27.2" +version = "0.28.0" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, - {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, + {file = "httpx-0.28.0-py3-none-any.whl", hash = "sha256:dc0b419a0cfeb6e8b34e85167c0da2671206f5095f1baa9663d23bcfd6b535fc"}, + {file = "httpx-0.28.0.tar.gz", hash = "sha256:0858d3bab51ba7e386637f22a61d8ccddaeec5f3fe4209da3a6168dbb91573e0"}, ] [package.dependencies] @@ -248,7 +248,6 @@ anyio = "*" certifi = "*" httpcore = "==1.*" idna = "*" -sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] @@ -731,22 +730,36 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments [[package]] name = "pytest-asyncio" -version = "0.23.8" +version = "0.24.0" description = "Pytest support for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, - {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, + {file = "pytest_asyncio-0.24.0-py3-none-any.whl", hash = "sha256:a811296ed596b69bf0b6f3dc40f83bcaf341b155a269052d82efa2b25ac7037b"}, + {file = "pytest_asyncio-0.24.0.tar.gz", hash = "sha256:d081d828e576d85f875399194281e92bf8a68d60d72d1a2faf2feddb6c46b276"}, ] [package.dependencies] -pytest = ">=7.0.0,<9" +pytest = ">=8.2,<9" [package.extras] docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] +[[package]] +name = "pytest-socket" +version = "0.7.0" +description = "Pytest Plugin to disable socket calls during tests" +optional = false +python-versions = ">=3.8,<4.0" +files = [ + {file = "pytest_socket-0.7.0-py3-none-any.whl", hash = "sha256:7e0f4642177d55d317bbd58fc68c6bd9048d6eadb2d46a89307fa9221336ce45"}, + {file = "pytest_socket-0.7.0.tar.gz", hash = "sha256:71ab048cbbcb085c15a4423b73b619a8b35d6a307f46f78ea46be51b1b7e11b3"}, +] + +[package.dependencies] +pytest = ">=6.2.5" + [[package]] name = "pyyaml" version = "6.0.2" @@ -846,29 +859,29 @@ requests = ">=2.0.1,<3.0.0" [[package]] name = "ruff" -version = "0.8.1" +version = "0.8.2" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.8.1-py3-none-linux_armv6l.whl", hash = "sha256:fae0805bd514066f20309f6742f6ee7904a773eb9e6c17c45d6b1600ca65c9b5"}, - {file = "ruff-0.8.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b8a4f7385c2285c30f34b200ca5511fcc865f17578383db154e098150ce0a087"}, - {file = "ruff-0.8.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cd054486da0c53e41e0086e1730eb77d1f698154f910e0cd9e0d64274979a209"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2029b8c22da147c50ae577e621a5bfbc5d1fed75d86af53643d7a7aee1d23871"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2666520828dee7dfc7e47ee4ea0d928f40de72056d929a7c5292d95071d881d1"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:333c57013ef8c97a53892aa56042831c372e0bb1785ab7026187b7abd0135ad5"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:288326162804f34088ac007139488dcb43de590a5ccfec3166396530b58fb89d"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b12c39b9448632284561cbf4191aa1b005882acbc81900ffa9f9f471c8ff7e26"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:364e6674450cbac8e998f7b30639040c99d81dfb5bbc6dfad69bc7a8f916b3d1"}, - {file = "ruff-0.8.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b22346f845fec132aa39cd29acb94451d030c10874408dbf776af3aaeb53284c"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b2f2f7a7e7648a2bfe6ead4e0a16745db956da0e3a231ad443d2a66a105c04fa"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:adf314fc458374c25c5c4a4a9270c3e8a6a807b1bec018cfa2813d6546215540"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a885d68342a231b5ba4d30b8c6e1b1ee3a65cf37e3d29b3c74069cdf1ee1e3c9"}, - {file = "ruff-0.8.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d2c16e3508c8cc73e96aa5127d0df8913d2290098f776416a4b157657bee44c5"}, - {file = "ruff-0.8.1-py3-none-win32.whl", hash = "sha256:93335cd7c0eaedb44882d75a7acb7df4b77cd7cd0d2255c93b28791716e81790"}, - {file = "ruff-0.8.1-py3-none-win_amd64.whl", hash = "sha256:2954cdbe8dfd8ab359d4a30cd971b589d335a44d444b6ca2cb3d1da21b75e4b6"}, - {file = "ruff-0.8.1-py3-none-win_arm64.whl", hash = "sha256:55873cc1a473e5ac129d15eccb3c008c096b94809d693fc7053f588b67822737"}, - {file = "ruff-0.8.1.tar.gz", hash = "sha256:3583db9a6450364ed5ca3f3b4225958b24f78178908d5c4bc0f46251ccca898f"}, + {file = "ruff-0.8.2-py3-none-linux_armv6l.whl", hash = "sha256:c49ab4da37e7c457105aadfd2725e24305ff9bc908487a9bf8d548c6dad8bb3d"}, + {file = "ruff-0.8.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ec016beb69ac16be416c435828be702ee694c0d722505f9c1f35e1b9c0cc1bf5"}, + {file = "ruff-0.8.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f05cdf8d050b30e2ba55c9b09330b51f9f97d36d4673213679b965d25a785f3c"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60f578c11feb1d3d257b2fb043ddb47501ab4816e7e221fbb0077f0d5d4e7b6f"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cbd5cf9b0ae8f30eebc7b360171bd50f59ab29d39f06a670b3e4501a36ba5897"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b402ddee3d777683de60ff76da801fa7e5e8a71038f57ee53e903afbcefdaa58"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:705832cd7d85605cb7858d8a13d75993c8f3ef1397b0831289109e953d833d29"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32096b41aaf7a5cc095fa45b4167b890e4c8d3fd217603f3634c92a541de7248"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e769083da9439508833cfc7c23e351e1809e67f47c50248250ce1ac52c21fb93"}, + {file = "ruff-0.8.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fe716592ae8a376c2673fdfc1f5c0c193a6d0411f90a496863c99cd9e2ae25d"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:81c148825277e737493242b44c5388a300584d73d5774defa9245aaef55448b0"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d261d7850c8367704874847d95febc698a950bf061c9475d4a8b7689adc4f7fa"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1ca4e3a87496dc07d2427b7dd7ffa88a1e597c28dad65ae6433ecb9f2e4f022f"}, + {file = "ruff-0.8.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:729850feed82ef2440aa27946ab39c18cb4a8889c1128a6d589ffa028ddcfc22"}, + {file = "ruff-0.8.2-py3-none-win32.whl", hash = "sha256:ac42caaa0411d6a7d9594363294416e0e48fc1279e1b0e948391695db2b3d5b1"}, + {file = "ruff-0.8.2-py3-none-win_amd64.whl", hash = "sha256:2aae99ec70abf43372612a838d97bfe77d45146254568d94926e8ed5bbb409ea"}, + {file = "ruff-0.8.2-py3-none-win_arm64.whl", hash = "sha256:fb88e2a506b70cfbc2de6fae6681c4f944f7dd5f2fe87233a7233d888bad73e8"}, + {file = "ruff-0.8.2.tar.gz", hash = "sha256:b84f4f414dda8ac7f75075c1fa0b905ac0ff25361f42e6d5da681a465e0f78e5"}, ] [[package]] @@ -983,4 +996,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "71103f2fbdf0b2808eac7e7ffeeadb9e68502a06a4a9c40d8f4f698c8ddd22a9" +content-hash = "430e4bd69a7e58e26703886697a3c1d9965a29caa2afc6eb7d8efc78164f2730" diff --git a/libs/standard-tests/pyproject.toml b/libs/standard-tests/pyproject.toml index f9633ec0371..9069fbc57de 100644 --- a/libs/standard-tests/pyproject.toml +++ b/libs/standard-tests/pyproject.toml @@ -21,8 +21,10 @@ disallow_untyped_defs = "True" python = ">=3.9,<4.0" langchain-core = "^0.3.21" pytest = ">=7,<9" -httpx = "^0.27.0" +pytest-asyncio = ">=0.20,<1" +httpx = ">=0.25.0,<1" syrupy = "^4" +pytest-socket = ">=0.6.0,<1" [tool.ruff.lint] select = ["E", "F", "I", "T201"] @@ -52,7 +54,6 @@ optional = true optional = true [tool.poetry.group.test.dependencies] -pytest-asyncio = "^0.23.7" [[tool.poetry.group.test.dependencies.numpy]] version = "^1.24.0"