feat(tools): add initial langchain_tool implementation in experimental #1434
+746
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR introduces
LangChainTool, a wrapper that enables integration of LangChain tools with Strands Agents. The implementation lives instrands.experimental.toolsand allows users to wrap any LangChainBaseToolinstance for use with a Strands Agent.The wrapper accepts any LangChain tool variant since all LangChain tools inherit from
BaseTool. This includes tools created with the@tooldecorator (both sync and async),StructuredTool.from_function(), and customBaseToolsubclasses. The implementation extracts the tool's name, description, and input schema from the LangChain tool and converts them into a Strands-compatibleToolSpec. Users can optionally override the tool name and description if needed.Since
langchain-coreis an optional dependency, theLangChainToolclass uses a lazy loading pattern via__getattr__in the module's__init__.py. This ensures that users withoutlangchain-coreinstalled won't encounter import errors unless they explicitly try to useLangChainTool.. LangChain's TOOL_MESSAGE_BLOCK_TYPES includes additional content types like image, json, and document that may be added in future versions as needed. Currently, _convert_result_to_content only supports string results from LangChain tools. This clearly will not handle most use cases. But, what I want to do is have the scaffolding down, then we can expand the mappings as we go
As part of the review process I encourage everyone to pull this down and actually experiment.
Related Issues
N/A
Documentation PR
ToDo
Type of Change
New feature
Testing
The changes have been tested with both unit tests and integration tests covering all LangChain tool variants. All tests pass successfully.
hatch run prepareChecklist
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.