Skip to content
Cavemandocs
MIT

Compatibility

Resolver constraints, accepted ranges, and exact validation evidence.

This matrix distinguishes three different claims: dependency resolution, adapter acceptance, and checks executed on exact versions. A successful install does not prove that an adapter accepted the framework. An accepted version does not prove every operation or model works.

Registry baseline, checked 16 September 2026: SDK 1.1.0, TypeScript middleware 0.1.0-alpha.2, Python middleware 0.1.0a1. Both client families require a compatible runtime; these docs exercised signed bin-v1.1.7.

Evidence levels#

  • Engine loop: published packages, real native framework, signed local runtime, compression/reuse, actual recovery tool execution, exact paginated recovery, and unchanged-history assertions. No provider requests.
  • Import: clean isolated install and import of the published adapter and its documentation integration module. This checks assembly only. No model call or compression claim.
  • Source tests: code-owner tests on an unreleased checkout. Useful for assessing a candidate, not proof about a registry artifact.

The real Engine checks passed for TypeScript AI SDK and synchronous Python LangChain. Every other row below has import evidence only from this documentation validation. No paid provider, browser/edge, Linux container, or native Windows run was performed here.

TypeScript#

Use Node.js 22.13+ and ESM. Published middleware installs @caveman-ai/sdk ^1.1.0; it does not install the framework packages or enforce their ranges as peer dependencies. Install each selected native framework explicitly. The exact-version column records independent clean imports; only the AI SDK row also has Engine-loop evidence.

AdapterPublished accepted rangeExact versions importedEvidence
AI SDKai >=7.0.94 <8; provider >=4.0.11 <5ai 7.0.94, @ai-sdk/provider 4.0.11, zod 4.4.3Engine loop
OpenAIopenai >=7.12 <87.12.1Import
Anthropic@anthropic-ai/sdk >=0.124 <10.124.0Import
Google@google/genai >=2.21 <32.21.0Import
LangChainlangchain >=1.5 <2; core >=1.2 <2; graph >=1.4 <21.5.10, 1.2.9, 1.4.14Import
Strands@strands-agents/sdk >=1.17 <21.17.0Import
Mastra@mastra/core >=1.65 <21.65.0Import
MCP@modelcontextprotocol/sdk >=1.30 <21.30.0Import

The published manifest calls semver ranges testedFrameworkVersions. That name is misleading: a range is not an exhaustive test result. Source changes separate supportedFrameworkVersions from exact pins and add a compatibility inspection export, but those changes are not in this published alpha. The broad published Anthropic guard is also not certification of every pre-1.0 minor version.

Version detection reads installed package metadata and resolves public framework entries. Bundlers must preserve accessible metadata and dependencies. ESM resolution behavior differs by Node version and loader configuration; an import can succeed while a later adapter gate declines. Inspect final reports. Keep framework dependencies external to server bundles; do not assume a single-file bundle or an edge isolate works because TypeScript compiles.

A clean combined install of Strands 1.17.0 and AI SDK V4 failed: Strands declares optional @ai-sdk/provider ^3.0.0, which conflicts with V4. Use separate projects or a framework-supported compatible dependency layout. Do not use --force to convert a resolver failure into a support claim.

Python#

Use Python 3.13+. Published middleware depends on caveman-sdk >=1.1 <2. Each extra selects its native family. Exact versions below came from separate clean environments, not one environment containing every framework.

ExtraPublished resolver requirementsPublished adapter guardExact versions importedEvidence
openaiopenai >=2.20 <4openai >=3.10 <4openai 3.14.1Import
anthropicanthropic >=1.4 <2Same rangeanthropic 1.6.0Import
googlegoogle-genai >=2.22 <3Same rangegoogle-genai 2.23.0Import
langchainlangchain >=1.4 <2; core >=1.6 <2; graph >=1.2 <2Same rangeslangchain 1.4.1; core 1.6.3; graph 1.2.11Engine loop, sync
litellmlitellm >=1.100 <2Same rangelitellm 1.101.0Import
strandsstrands-agents >=1.55 <2Same rangestrands-agents 1.56.0Import
agnoagno >=3.0 <4Same rangeagno 3.0.10Import
crewaicrewai >=1.15 <2Same rangecrewai 1.15.21Import
autogencore, agentchat, ext each >=0.7 <0.8Same three rangesall three 0.7.5Import
pydantic-aipydantic-ai >=2.42 <3pydantic-ai-slim >=2.42 <3pydantic-ai and slim 2.43.0Import
llama-indexllama-index-core >=0.14 <0.15Core range plus recognized provider guardsllama-index-core 0.14.24Import
asgifastapi >=0.141 <1; starlette >=1.6 <2Same two rangesfastapi 0.141.1; starlette 1.6.0Import
mcpmcp >=2.2 <3Same rangemcp 2.2.0Import

The direct OpenAI extra can resolve an SDK the adapter declines. Pin OpenAI >=3.10,<4 for that adapter; the source manifest fixes this mismatch but has not been released. Provider dependencies selected transitively by another framework do not automatically satisfy the direct provider adapter.

LiteLLM may fetch its public model cost map on import and fall back to its bundled map if unavailable. That is not a model inference call. Model cost metadata is not billing verification.

Conflicting Python environments#

Inspect your resolved versions rather than copying an old universal list of conflicts. At this validation:

  • Strands 1.56.0 requires mcp >=1.23 <2.2; the Caveman MCP extra requires >=2.2 <3.
  • CrewAI 1.15.21 requires mcp ~=1.28.1 and openai >=2.30 <3; those conflict with the MCP extra and the direct OpenAI adapter's accepted >=3.10 <4 range.
  • Strands' optional openai provider extra requires OpenAI <3; its optional LiteLLM provider extra caps LiteLLM at 1.96.0, below the direct Caveman LiteLLM adapter's >=1.100 guard.
  • Historical Agno/CrewAI LiteLLM conflicts depend on upstream versions and optional extras. The current base extras do not establish that blanket conflict. Resolve your exact provider extras and lockfile before combining them.

Use one virtual environment/container per incompatible family. Do not install every extra into one application or bypass the resolver. A service boundary can separate incompatible framework dependencies while each application still calls its own compatible runtime client.

Operation and transport support#

The TypeScript guide and Python guide specify native operations, sync/async boundaries, streaming, recovery ownership, and transport setup for every family. Adapter acceptance is narrower than a provider's entire API: unknown shapes, nontext blocks, unsupported providers, server-held history, signed payloads, or missing executors can bypass optimization.

Published Python LangChain/OpenAI async stream cancellation and receipt behavior has candidate fixes in the code workstream. Do not infer those fixes shipped because a local source test passed. Consume streams fully for the documented released baseline, and test cancellation under your exact versions before rollout.

Reproduce and upgrade#

Run the AI SDK or LangChain commands in a fresh directory. The framework guides provide an independent import reproduction command for each secondary module. Record node --version, npm ls, or python --version and python -m pip freeze with results.

For candidate code, code owners separately ran native-framework protocol-fixture tests and a packed Node ESM consumer/bundle check. Those used locally packed SDK/middleware, not published packages and not a live provider. They do not change the registry evidence above. See release policy before adopting unreleased APIs.