Back to AI Framework Overview | All Providers
MemberJunction AI provider for Anthropic's Claude models. Implements the BaseLLM interface from @memberjunction/ai, supporting the Claude 4, Claude 3.5, and Claude 3 model families including Opus, Sonnet, and Haiku variants.
graph TD
A["AnthropicLLM
(Provider)"] -->|extends| B["BaseLLM
(@memberjunction/ai)"]
B -->|registered via| C["@RegisterClass
(@memberjunction/global)"]
A -->|wraps| D["Anthropic SDK
(@anthropic-ai/sdk)"]
A -->|provides| E["Chat Completions"]
A -->|provides| F["Streaming"]
A -->|provides| G["Prompt Caching"]
A -->|provides| H["Thinking/Reasoning
Extraction"]
style A fill:#7c5295,stroke:#563a6b,color:#fff
style B fill:#2d6a9f,stroke:#1a4971,color:#fff
style C fill:#b8762f,stroke:#8a5722,color:#fff
style D fill:#2d8659,stroke:#1a5c3a,color:#fff
style E fill:#2d6a9f,stroke:#1a4971,color:#fff
style F fill:#2d6a9f,stroke:#1a4971,color:#fff
style G fill:#2d6a9f,stroke:#1a4971,color:#fff
style H fill:#2d6a9f,stroke:#1a4971,color:#fff
ErrorAnalyzernpm install @memberjunction/ai-anthropic
import { AnthropicLLM } from "@memberjunction/ai-anthropic";
const llm = new AnthropicLLM("your-anthropic-api-key");
const result = await llm.ChatCompletion({
model: "claude-sonnet-4-20250514",
messages: [
{ role: "user", content: "Explain quantum computing in simple terms." },
],
temperature: 0.7,
maxOutputTokens: 1024,
});
console.log(result.data.choices[0].message.content);
const result = await llm.ChatCompletion({
model: "claude-sonnet-4-20250514",
messages: [{ role: "user", content: "Write a short story." }],
streaming: true,
streamingCallbacks: {
OnContent: (content) => process.stdout.write(content),
OnComplete: (result) => console.log("\nDone!"),
},
});
const result = await llm.ChatCompletion({
model: "claude-opus-4-20250514",
messages: [{ role: "user", content: "Solve this step by step: ..." }],
effortLevel: "80",
});
// Access thinking content alongside the response
console.log("Thinking:", result.data.choices[0].message.thinking);
console.log("Answer:", result.data.choices[0].message.content);
Anthropic caches only up to an explicit cache_control breakpoint, and a read-hit requires the new request to match a cached prefix at a breakpoint. By default the driver places the breakpoint on the last message. When the last message is the agent framework's volatile runtime-state fragment — recognised by the volatileState metadata flag via BaseLLM.isVolatileStateMessage, or by a leading <mj-runtime-state> / <mj-agent-specialization> literal for callers passing plain messages — the driver uses BaseLLM.splitTrailingVolatileState to put the breakpoint on the last real history message and sends the fragment (and any assistant prefill after it) uncached. If that leaves two user turns adjacent it inserts an OK assistant turn to preserve role alternation. Result: the stable history caches across loop iterations and only the fragment is re-processed. A <<<MJ_CACHE_BREAKPOINT>>> marker inside a text block still works for callers that want an explicit boundary elsewhere. See the Agent Prompt Caching Guide.
| Parameter | Supported | Notes |
|---|---|---|
| temperature | Yes | Controls randomness |
| maxOutputTokens | Yes | Maximum response length |
| topP | Yes | Nucleus sampling |
| topK | Yes | Top-K sampling |
| stopSequences | Yes | Custom stop sequences |
| assistantPrefill | Yes | Pre-seed the start of the assistant's response (guide) |
| responseFormat | Yes | JSON mode supported |
| streaming | Yes | Real-time streaming |
| effortLevel | Yes | Maps to thinking budget |
Registered as AnthropicLLM via @RegisterClass(BaseLLM, 'AnthropicLLM') for use with MemberJunction's class factory system.
@memberjunction/ai - Core AI abstractions@memberjunction/global - Class registration@anthropic-ai/sdk - Official Anthropic SDK