diff --git a/docs/docs/contributing/how_to/index.mdx b/docs/docs/contributing/how_to/index.mdx
index e4eda7ddbc1d8..d9f903f4156d6 100644
--- a/docs/docs/contributing/how_to/index.mdx
+++ b/docs/docs/contributing/how_to/index.mdx
@@ -2,4 +2,8 @@
- [**Documentation**](documentation/index.mdx): Help improve our docs, including this one!
- [**Code**](code/index.mdx): Help us write code, fix bugs, or improve our infrastructure.
-- [**Integrations**](integrations/index.mdx): Help us integrate with your favorite vendors and tools.
\ No newline at end of file
+
+## Integrations
+
+- [**Start Here**](integrations/index.mdx): Help us integrate with your favorite vendors and tools.
+- [**Standard Tests**](integrations/standard_tests): Ensure your integration passes an expected set of tests.
diff --git a/docs/docs/contributing/how_to/integrations/standard_tests.ipynb b/docs/docs/contributing/how_to/integrations/standard_tests.ipynb
index ace79d531305f..4607fc83c2147 100644
--- a/docs/docs/contributing/how_to/integrations/standard_tests.ipynb
+++ b/docs/docs/contributing/how_to/integrations/standard_tests.ipynb
@@ -6,9 +6,7 @@
"source": [
"# How to add standard tests to an integration\n",
"\n",
- "Implementing standard tests \n",
- "\n",
- "When creating either a custom class for yourself or a new tool to publish in a LangChain integration, it is important to add standard tests to ensure it works as expected. This guide will show you how to add standard tests to a tool, and the templates for implementing each different kind of integration are linked [at the bottom](#standard-test-templates-per-component).\n",
+ "When creating either a custom class for yourself or a new tool to publish in a LangChain integration, it is important to add standard tests to ensure it works as expected. This guide will show you how to add standard tests to a tool, and you can **[Skip to the test templates](#standard-test-templates-per-component)** for implementing tests for each integration.\n",
"\n",
"## Setup\n",
"\n",
@@ -20,7 +18,7 @@
":::note\n",
"\n",
"Because added tests in new versions of `langchain-tests` will always break your CI/CD pipelines, we recommend pinning the \n",
- "version of `langchain-tests==0.3.0` to avoid unexpected changes.\n",
+ "version of `langchain-tests==0.3.2` to avoid unexpected changes.\n",
"\n",
":::"
]
@@ -31,7 +29,7 @@
"metadata": {},
"outputs": [],
"source": [
- "%pip install -U langchain-core langchain-tests==0.3.0 pytest pytest-socket"
+ "%pip install -U langchain-core langchain-tests==0.3.2 pytest pytest-socket"
]
},
{
@@ -217,7 +215,11 @@
"class TestChatParrotLinkUnit(ChatModelUnitTests):\n",
" @property\n",
" def chat_model_class(self) -> Type[ChatParrotLink]:\n",
- " return ChatParrotLink"
+ " return ChatParrotLink\n",
+ "\n",
+ " @property\n",
+ " def chat_model_params(self) -> dict:\n",
+ " return {\"model\": \"bird-brain-001\", \"temperature\": 0}"
]
},
{
@@ -248,22 +250,54 @@
"metadata": {},
"source": [
"\n",
- "\n",
- "
\n",
- "Work in progress:\n",
"\n",
- " Retrievers
\n",
- " TODO"
+ " Embedding Models
"
]
},
{
- "cell_type": "markdown",
+ "cell_type": "code",
+ "execution_count": null,
"metadata": {},
+ "outputs": [],
"source": [
- " \n",
- "\n",
- " Vector Stores
\n",
- " TODO"
+ "# title=\"tests/unit_tests/test_embeddings.py\"\n",
+ "from typing import Tuple, Type\n",
+ "\n",
+ "from langchain_parrot_link.embeddings import ParrotLinkEmbeddings\n",
+ "from langchain_standard_tests.unit_tests import EmbeddingsUnitTests\n",
+ "\n",
+ "\n",
+ "class TestParrotLinkEmbeddingsUnit(EmbeddingsUnitTests):\n",
+ " @property\n",
+ " def embeddings_class(self) -> Type[ParrotLinkEmbeddings]:\n",
+ " return ParrotLinkEmbeddings\n",
+ "\n",
+ " @property\n",
+ " def embedding_model_params(self) -> dict:\n",
+ " return {\"model\": \"nest-embed-001\", \"temperature\": 0}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# title=\"tests/integration_tests/test_embeddings.py\"\n",
+ "from typing import Type\n",
+ "\n",
+ "from langchain_parrot_link.embeddings import ParrotLinkEmbeddings\n",
+ "from langchain_standard_tests.integration_tests import EmbeddingsIntegrationTests\n",
+ "\n",
+ "\n",
+ "class TestParrotLinkEmbeddingsIntegration(EmbeddingsIntegrationTests):\n",
+ " @property\n",
+ " def embeddings_class(self) -> Type[ParrotLinkEmbeddings]:\n",
+ " return ParrotLinkEmbeddings\n",
+ "\n",
+ " @property\n",
+ " def embedding_model_params(self) -> dict:\n",
+ " return {\"model\": \"nest-embed-001\", \"temperature\": 0}"
]
},
{
@@ -272,16 +306,83 @@
"source": [
" \n",
"\n",
- " Embedding Models
\n",
- " TODO"
+ " Tools/Toolkits
\n",
+ " Note: The standard tests for tools/toolkits are implemented in the example in the main body of this guide too."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# title=\"tests/unit_tests/test_tools.py\"\n",
+ "from typing import Type\n",
+ "\n",
+ "from langchain_parrot_link.tools import ParrotMultiplyTool\n",
+ "from langchain_standard_tests.unit_tests import ToolsUnitTests\n",
+ "\n",
+ "\n",
+ "class TestParrotMultiplyToolUnit(ToolsUnitTests):\n",
+ " @property\n",
+ " def tool_constructor(self) -> Type[ParrotMultiplyTool]:\n",
+ " return ParrotMultiplyTool\n",
+ "\n",
+ " def tool_constructor_params(self) -> dict:\n",
+ " # if your tool constructor instead required initialization arguments like\n",
+ " # `def __init__(self, some_arg: int):`, you would return those here\n",
+ " # as a dictionary, e.g.: `return {'some_arg': 42}`\n",
+ " return {}\n",
+ "\n",
+ " def tool_invoke_params_example(self) -> dict:\n",
+ " \"\"\"\n",
+ " Returns a dictionary representing the \"args\" of an example tool call.\n",
+ "\n",
+ " This should NOT be a ToolCall dict - i.e. it should not\n",
+ " have {\"name\", \"id\", \"args\"} keys.\n",
+ " \"\"\"\n",
+ " return {\"a\": 2, \"b\": 3}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# title=\"tests/integration_tests/test_tools.py\"\n",
+ "from typing import Type\n",
+ "\n",
+ "from langchain_parrot_link.tools import ParrotMultiplyTool\n",
+ "from langchain_standard_tests.integration_tests import ToolsIntegrationTests\n",
+ "\n",
+ "\n",
+ "class TestParrotMultiplyToolIntegration(ToolsIntegrationTests):\n",
+ " @property\n",
+ " def tool_constructor(self) -> Type[ParrotMultiplyTool]:\n",
+ " return ParrotMultiplyTool\n",
+ "\n",
+ " def tool_constructor_params(self) -> dict:\n",
+ " # if your tool constructor instead required initialization arguments like\n",
+ " # `def __init__(self, some_arg: int):`, you would return those here\n",
+ " # as a dictionary, e.g.: `return {'some_arg': 42}`\n",
+ " return {}\n",
+ "\n",
+ " def tool_invoke_params_example(self) -> dict:\n",
+ " \"\"\"\n",
+ " Returns a dictionary representing the \"args\" of an example tool call.\n",
+ "\n",
+ " This should NOT be a ToolCall dict - i.e. it should not\n",
+ " have {\"name\", \"id\", \"args\"} keys.\n",
+ " \"\"\"\n",
+ " return {\"a\": 2, \"b\": 3}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- " \n",
- "
"
+ ""
]
}
],
diff --git a/docs/docs/contributing/index.mdx b/docs/docs/contributing/index.mdx
index 67930710585dc..d2c1231789d8d 100644
--- a/docs/docs/contributing/index.mdx
+++ b/docs/docs/contributing/index.mdx
@@ -17,6 +17,7 @@ More coming soon! We are working on tutorials to help you make your first contri
- [**Documentation**](how_to/documentation/index.mdx): Help improve our docs, including this one!
- [**Code**](how_to/code/index.mdx): Help us write code, fix bugs, or improve our infrastructure.
- [**Integrations**](how_to/integrations/index.mdx): Help us integrate with your favorite vendors and tools.
+- [**Standard Tests**](how_to/integrations/standard_tests): Ensure your integration passes an expected set of tests.
## Reference