{"_id":"@contextaisdk/provider-anthropic","name":"@contextaisdk/provider-anthropic","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@contextaisdk/provider-anthropic","version":"0.1.0","description":"Anthropic Claude LLM provider for ContextAI SDK","license":"MIT","author":{"name":"ContextAI Team"},"homepage":"https://github.com/draco28/contextai#readme","bugs":{"url":"https://github.com/draco28/contextai/issues"},"repository":{"type":"git","url":"git+https://github.com/draco28/contextai.git","directory":"packages/provider-anthropic"},"sideEffects":false,"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"dependencies":{"@contextaisdk/core":"0.1.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.30.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":false}},"devDependencies":{"@anthropic-ai/sdk":"^0.39.0","tsup":"^8.0.0","typescript":"^5.5.0","vitest":"^2.1.0","@contextaisdk/tsconfig":"0.1.0"},"keywords":["contextai","anthropic","claude","llm","ai","provider"],"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","test:integration":"vitest run --config vitest.integration.config.ts","typecheck":"tsc --noEmit","clean":"rm -rf dist"},"_id":"@contextaisdk/provider-anthropic@0.1.0","_integrity":"sha512-LPIcNA/WlvahMyTdxEYi1ya1RNeuP0u6U5n6u87Jjz+WMt8K6qoWKPjm7dcVYdnnBHjChsg7su0TcECQR0u9pA==","_resolved":"/private/var/folders/nh/3wp6hgt537b3z2ygfjj637m00000gn/T/7dddd7e675ac3b7faca76ba4a2cbbaa7/contextaisdk-provider-anthropic-0.1.0.tgz","_from":"file:contextaisdk-provider-anthropic-0.1.0.tgz","_nodeVersion":"25.1.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-LPIcNA/WlvahMyTdxEYi1ya1RNeuP0u6U5n6u87Jjz+WMt8K6qoWKPjm7dcVYdnnBHjChsg7su0TcECQR0u9pA==","shasum":"47b02674010d04e9c21a992afe0b001ab7026b17","tarball":"https://registry.npmjs.org/@contextaisdk/provider-anthropic/-/provider-anthropic-0.1.0.tgz","fileCount":15,"unpackedSize":237177,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA3bf2tTFxzcRFwWAH5ZSeYPWBfzntu4Mpytx3ql+YCFAiBwVHuV3+5hok1+5pWm3T0B9ULpqaqkZf7JyM8djgX7rA=="}]},"_npmUser":{"name":"draco28","email":"praveensingh2897@gmail.com"},"directories":{},"maintainers":[{"name":"draco28","email":"praveensingh2897@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/provider-anthropic_0.1.0_1769140033951_0.6090216944668068"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-23T03:47:13.861Z","0.1.0":"2026-01-23T03:47:14.097Z","modified":"2026-01-23T03:47:14.292Z"},"maintainers":[{"name":"draco28","email":"praveensingh2897@gmail.com"}],"description":"Anthropic Claude LLM provider for ContextAI SDK","homepage":"https://github.com/draco28/contextai#readme","keywords":["contextai","anthropic","claude","llm","ai","provider"],"repository":{"type":"git","url":"git+https://github.com/draco28/contextai.git","directory":"packages/provider-anthropic"},"author":{"name":"ContextAI Team"},"bugs":{"url":"https://github.com/draco28/contextai/issues"},"license":"MIT","readme":"# @contextaisdk/provider-anthropic\n\n> Anthropic Claude LLM provider for ContextAI SDK\n\n[![npm version](https://img.shields.io/npm/v/@contextaisdk/provider-anthropic.svg?style=flat-square)](https://www.npmjs.com/package/@contextaisdk/provider-anthropic)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.5+-blue.svg?style=flat-square)](https://www.typescriptlang.org/)\n\n## Installation\n\n```bash\nnpm install @contextaisdk/provider-anthropic @anthropic-ai/sdk\n# or\npnpm add @contextaisdk/provider-anthropic @anthropic-ai/sdk\n```\n\n**Peer Dependencies:**\n- @anthropic-ai/sdk ^0.25.0\n- @contextaisdk/core\n\n## Quick Start\n\n```typescript\nimport { AnthropicProvider, AnthropicModels } from '@contextaisdk/provider-anthropic';\nimport { Agent } from '@contextaisdk/core';\n\n// Create the provider\nconst claude = new AnthropicProvider({\n  apiKey: process.env.ANTHROPIC_API_KEY!,\n  model: AnthropicModels.CLAUDE_SONNET_4,\n});\n\n// Use with an agent\nconst agent = new Agent({\n  name: 'Claude Assistant',\n  systemPrompt: 'You are a helpful assistant.',\n  llm: claude,\n});\n\nconst response = await agent.run('Explain quantum computing');\nconsole.log(response.output);\n```\n\n## Configuration\n\n```typescript\nconst provider = new AnthropicProvider({\n  // Required\n  apiKey: string;              // Your Anthropic API key\n\n  // Model selection\n  model: string;               // e.g., 'claude-sonnet-4-20250514'\n\n  // Optional settings\n  baseURL?: string;            // Custom API endpoint\n  timeout?: number;            // Request timeout (default: 60000ms)\n  maxRetries?: number;         // Retry attempts (default: 2)\n  headers?: Record<string, string>;  // Custom headers\n\n  // Beta features\n  betaFeatures?: string[];     // Enable beta APIs\n\n  // Default generation options\n  defaultOptions?: {\n    temperature?: number;      // 0-1 (default: 1)\n    maxTokens?: number;        // Max response tokens\n    topP?: number;             // Nucleus sampling\n    stopSequences?: string[];  // Stop generation triggers\n  };\n});\n```\n\n## Available Models\n\n```typescript\nimport { AnthropicModels } from '@contextaisdk/provider-anthropic';\n\n// Claude 4 (Latest)\nAnthropicModels.CLAUDE_SONNET_4   // 'claude-sonnet-4-20250514'\nAnthropicModels.CLAUDE_OPUS_4    // 'claude-opus-4-20250514'\n\n// Claude 3.5\nAnthropicModels.CLAUDE_3_5_SONNET  // 'claude-3-5-sonnet-20241022'\nAnthropicModels.CLAUDE_3_5_HAIKU   // 'claude-3-5-haiku-20241022'\n\n// Claude 3\nAnthropicModels.CLAUDE_3_OPUS     // 'claude-3-opus-20240229'\nAnthropicModels.CLAUDE_3_SONNET   // 'claude-3-sonnet-20240229'\nAnthropicModels.CLAUDE_3_HAIKU    // 'claude-3-haiku-20240307'\n```\n\n## Features\n\n### Streaming Responses\n\n```typescript\nconst provider = new AnthropicProvider({\n  apiKey: process.env.ANTHROPIC_API_KEY!,\n  model: 'claude-sonnet-4-20250514',\n});\n\n// Stream tokens as they arrive\nfor await (const chunk of provider.streamChat([\n  { role: 'user', content: 'Write a haiku about TypeScript' }\n])) {\n  if (chunk.type === 'text') {\n    process.stdout.write(chunk.content);\n  }\n}\n```\n\n### Tool Calling\n\n```typescript\nimport { defineTool } from '@contextaisdk/core';\nimport { z } from 'zod';\n\nconst weatherTool = defineTool({\n  name: 'get_weather',\n  description: 'Get current weather for a location',\n  parameters: z.object({\n    location: z.string().describe('City name'),\n    unit: z.enum(['celsius', 'fahrenheit']).optional(),\n  }),\n  execute: async ({ location, unit }) => {\n    // Your weather API call\n    return { temperature: 22, unit: unit ?? 'celsius', location };\n  },\n});\n\nconst agent = new Agent({\n  name: 'Weather Assistant',\n  systemPrompt: 'Help users check the weather.',\n  llm: claude,\n  tools: [weatherTool],\n});\n\nconst response = await agent.run(\"What's the weather in Tokyo?\");\n```\n\n### Extended Thinking (Claude 3.5+)\n\nEnable Claude's extended thinking for complex reasoning:\n\n```typescript\nconst provider = new AnthropicProvider({\n  apiKey: process.env.ANTHROPIC_API_KEY!,\n  model: 'claude-3-5-sonnet-20241022',\n});\n\n// Extended thinking appears in stream as 'thinking' chunks\nfor await (const chunk of provider.streamChat(messages)) {\n  switch (chunk.type) {\n    case 'thinking':\n      console.log('[Thinking]', chunk.content);\n      break;\n    case 'text':\n      console.log('[Response]', chunk.content);\n      break;\n  }\n}\n```\n\n### Beta Features\n\nEnable experimental Anthropic features:\n\n```typescript\nconst provider = new AnthropicProvider({\n  apiKey: process.env.ANTHROPIC_API_KEY!,\n  model: 'claude-sonnet-4-20250514',\n  betaFeatures: [\n    'prompt-caching-2024-07-31',      // Prompt caching\n    'max-tokens-3-5-sonnet-2024-07-15', // Extended token limits\n  ],\n});\n```\n\n### Rate Limit Monitoring\n\n```typescript\nconst provider = new AnthropicProvider({\n  apiKey: process.env.ANTHROPIC_API_KEY!,\n  model: 'claude-sonnet-4-20250514',\n});\n\n// Check rate limits after requests\nconst limits = provider.getRateLimits();\nconsole.log('Requests remaining:', limits.requestsRemaining);\nconsole.log('Tokens remaining:', limits.tokensRemaining);\nconsole.log('Resets at:', new Date(limits.requestsResetAt));\n```\n\n## Direct Chat API\n\nUse the provider directly without an agent:\n\n```typescript\n// Non-streaming\nconst response = await provider.chat([\n  { role: 'system', content: 'You are a coding assistant.' },\n  { role: 'user', content: 'Write a TypeScript function to sort an array' },\n], {\n  temperature: 0.7,\n  maxTokens: 1000,\n});\n\nconsole.log(response.content);\nconsole.log('Tokens used:', response.usage);\n\n// Streaming\nfor await (const chunk of provider.streamChat(messages)) {\n  process.stdout.write(chunk.content);\n}\n```\n\n## Error Handling\n\n```typescript\nimport { AnthropicProviderError } from '@contextaisdk/provider-anthropic';\n\ntry {\n  const response = await provider.chat(messages);\n} catch (error) {\n  if (error instanceof AnthropicProviderError) {\n    switch (error.code) {\n      case 'RATE_LIMITED':\n        console.log('Rate limited. Retry after:', error.retryAfter);\n        break;\n      case 'INVALID_API_KEY':\n        console.log('Check your API key');\n        break;\n      case 'MODEL_NOT_FOUND':\n        console.log('Invalid model:', error.details.model);\n        break;\n      case 'CONTEXT_LENGTH_EXCEEDED':\n        console.log('Message too long');\n        break;\n      default:\n        console.log('Error:', error.message);\n    }\n\n    // Check if retryable\n    if (error.isRetryable) {\n      // Implement retry logic\n    }\n  }\n}\n```\n\n### Error Codes\n\n| Code | Description |\n|------|-------------|\n| `RATE_LIMITED` | Too many requests (429) |\n| `INVALID_API_KEY` | Invalid or missing API key (401) |\n| `MODEL_NOT_FOUND` | Model doesn't exist (404) |\n| `CONTEXT_LENGTH_EXCEEDED` | Input too long for model |\n| `CONTENT_POLICY_VIOLATION` | Content blocked by safety filters |\n| `SERVER_ERROR` | Anthropic server error (5xx) |\n| `NETWORK_ERROR` | Connection failed |\n| `TIMEOUT` | Request timed out |\n\n## Advanced: Message Mapping\n\nFor fine-grained control over message formatting:\n\n```typescript\nimport {\n  mapMessages,\n  extractSystemMessage,\n  buildRequestParams\n} from '@contextaisdk/provider-anthropic';\n\n// Extract system message from conversation\nconst { systemMessage, messages } = extractSystemMessage(conversation);\n\n// Map to Anthropic format\nconst anthropicMessages = mapMessages(messages);\n\n// Build complete request params\nconst params = buildRequestParams(messages, tools, options);\n```\n\n## Comparison with Direct SDK\n\n| Feature | @contextaisdk/provider-anthropic | @anthropic-ai/sdk |\n|---------|------------------------------|-------------------|\n| Agent Integration | Built-in | Manual |\n| Tool Calling | Zod schemas | JSON Schema |\n| Streaming | Unified interface | SDK-specific |\n| Error Handling | Typed errors with hints | Raw errors |\n| Rate Limits | Auto-tracked | Manual parsing |\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-9ff3249cd00a1d7607bdda9c03badc5a"}