Framework Adapters
One of Anvil’s key features is framework portability. A single tool can be used with LangChain, CrewAI, AutoGen, OpenAI Agents SDK, or standalone.
Why Adapters?
Section titled “Why Adapters?”Each AI framework has its own tool interface:
| Framework | Tool Interface |
|---|---|
| LangChain | BaseTool with _run() method |
| CrewAI | BaseTool with Pydantic models |
| AutoGen | FunctionTool with type hints |
| OpenAI Agents | FunctionTool with JSON schema |
Writing tools for each framework means duplicating code. Anvil solves this with automatic adapters.
Quick Example
Section titled “Quick Example”from anvil import Anvil
anvil = Anvil()
# Create one toolsearch = anvil.use_tool( name="web_search", intent="Search the web for information")
# Use it everywherelc_tool = search.to_langchain() # LangChaincrew_tool = search.to_crewai() # CrewAIag_tool = search.to_autogen() # AutoGenoai_tool = search.to_openai_agents() # OpenAI Agents SDKAdapter Methods
Section titled “Adapter Methods”Every Anvil Tool object has these methods:
| Method | Returns | Framework |
|---|---|---|
to_langchain() | BaseTool | LangChain |
to_crewai() | BaseTool | CrewAI |
to_autogen() | FunctionTool | AutoGen |
to_openai_agents() | FunctionTool | OpenAI Agents SDK |
What Gets Converted
Section titled “What Gets Converted”Adapters automatically convert:
- Name → Tool name/function name
- Intent → Description for the LLM
- Inputs → Typed parameters (Pydantic, JSON Schema, etc.)
- Execution → Wrapped
run()call
Installation
Section titled “Installation”Install the adapter for your framework:
# LangChainpip install "anvil-agent[langchain]"
# CrewAIpip install "anvil-agent[crewai]"
# AutoGenpip install "anvil-agent[autogen]"
# OpenAI Agents SDKpip install "anvil-agent[openai-agents]"
# All frameworkspip install "anvil-agent[all-frameworks]"Framework Guides
Section titled “Framework Guides”Detailed integration guides for each framework:
Async Support
Section titled “Async Support”All adapters support async execution:
# Syncresult = search.run(query="test")
# Asyncresult = await search.run_async(query="test")Framework adapters inherit this capability where supported.
Type Safety
Section titled “Type Safety”Adapters generate proper type annotations from your InputParam definitions:
from anvil import InputParam
tool = anvil.use_tool( name="calculate", intent="Perform calculation", inputs=[ InputParam(name="x", param_type="float", required=True), InputParam(name="y", param_type="float", required=True), InputParam(name="operation", param_type="str", default="add"), ])
# LangChain adapter creates a Pydantic model:# class CalculateInput(BaseModel):# x: float# y: float# operation: str = "add"Fallback Behavior
Section titled “Fallback Behavior”If a framework isn’t installed, calling its adapter raises a helpful error:
tool.to_langchain()# ImportError: LangChain is not installed.# Install it with: pip install "anvil-agent[langchain]"