{"_id":"@databuddy/ai","name":"@databuddy/ai","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@databuddy/ai","version":"0.0.1","repository":{"type":"git","url":"git+https://github.com/databuddy-analytics/databuddy.git"},"devDependencies":{"@ai-sdk/provider":"^3.0.5","@anthropic-ai/sdk":"^0.39.0","@types/node":"^20.0.0","ai":"^5.0.51","openai":"^4.77.0","tokenlens":"^2.0.0-alpha.3","typescript":"catalog:","unbuild":"^3.6.1"},"peerDependencies":{"@ai-sdk/provider":"^3.0.5","@anthropic-ai/sdk":"^0.30.0","ai":"^5.0.51","openai":"^4.0.0","tokenlens":"^2.0.0-alpha.3"},"exports":{"./vercel":{"types":"./dist/vercel/index.d.ts","import":"./dist/vercel/index.mjs"},"./openai":{"types":"./dist/openai/index.d.ts","import":"./dist/openai/index.mjs"},"./anthropic":{"types":"./dist/anthropic/index.d.ts","import":"./dist/anthropic/index.mjs"}},"bugs":{"url":"https://github.com/databuddy-analytics/databuddy/issues"},"description":"Databuddy LLM Observability SDK","homepage":"https://databuddy.cc","keywords":["analytics","llm","observability","databuddy","vercel","ai-sdk","openai","anthropic"],"license":"MIT","peerDependenciesMeta":{"@ai-sdk/provider":{"optional":true},"@anthropic-ai/sdk":{"optional":true},"ai":{"optional":true},"openai":{"optional":true},"tokenlens":{"optional":true}},"private":false,"scripts":{"build":"unbuild","test":"bun test","vscode:prepublish":"bun run build"},"sideEffects":false,"type":"module","dependencies":{"uuid":"^13.0.0"},"gitHead":"f9aa06eb561051462ef4fb5540276bc62b9eb449","_id":"@databuddy/ai@0.0.1","_nodeVersion":"25.4.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-u58XednCNx3d6NDuiKqezFsoY6yB8WZjY9TWCQmbdi9y/ojzCZBkSqL9AWqpJrIQ71oOI7l77VrpZmlxlhvEog==","shasum":"52a21ace0717d843beca2b8905920550146fc378","tarball":"https://registry.npmjs.org/@databuddy/ai/-/ai-0.0.1.tgz","fileCount":11,"unpackedSize":50425,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF9Cw22Bi1LkirC0Uwaeuh+fgT3HPRU0Z1Jj5b/lbJdtAiBnOnV08SrWYuW5jSRPfV5HgNj8tVqK5P3aOS/eW5ZFdQ=="}]},"_npmUser":{"name":"izadoesdev","email":"contact@databuddy.cc"},"directories":{},"maintainers":[{"name":"izadoesdev","email":"contact@databuddy.cc"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ai_0.0.1_1769628289464_0.9277953743843972"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-28T19:24:49.357Z","0.0.1":"2026-01-28T19:24:49.619Z","modified":"2026-01-28T19:24:49.870Z"},"maintainers":[{"name":"izadoesdev","email":"contact@databuddy.cc"}],"description":"Databuddy LLM Observability SDK","homepage":"https://databuddy.cc","keywords":["analytics","llm","observability","databuddy","vercel","ai-sdk","openai","anthropic"],"repository":{"type":"git","url":"git+https://github.com/databuddy-analytics/databuddy.git"},"bugs":{"url":"https://github.com/databuddy-analytics/databuddy/issues"},"license":"MIT","readme":"# @databuddy/ai\n\nLLM observability for OpenAI, Anthropic, and Vercel AI SDK.\n\n## Installation\n\n```bash\nbun add @databuddy/ai\n```\n\n## OpenAI SDK\n\n```typescript\nimport { OpenAI } from \"@databuddy/ai/openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n  databuddy: {\n    apiKey: process.env.DATABUDDY_API_KEY,\n  },\n});\n\nconst response = await openai.chat.completions.create({\n  model: \"gpt-4o\",\n  messages: [{ role: \"user\", content: \"Hello!\" }],\n});\n```\n\n## Anthropic SDK\n\n```typescript\nimport { Anthropic } from \"@databuddy/ai/anthropic\";\n\nconst anthropic = new Anthropic({\n  apiKey: process.env.ANTHROPIC_API_KEY,\n  databuddy: {\n    apiKey: process.env.DATABUDDY_API_KEY,\n  },\n});\n\nconst response = await anthropic.messages.create({\n  model: \"claude-sonnet-4-20250514\",\n  max_tokens: 1024,\n  messages: [{ role: \"user\", content: \"Hello!\" }],\n});\n```\n\n## Vercel AI SDK\n\n```typescript\nimport { createTracker } from \"@databuddy/ai/vercel\";\nimport { openai } from \"@ai-sdk/openai\";\nimport { generateText } from \"ai\";\n\nconst { track } = createTracker({\n  apiKey: process.env.DATABUDDY_API_KEY,\n});\n\nconst result = await generateText({\n  model: track(openai(\"gpt-4o\")),\n  prompt: \"Hello!\",\n});\n```\n\n## Configuration Options\n\n```typescript\n// OpenAI / Anthropic\nconst client = new OpenAI({\n  databuddy: {\n    apiUrl: \"https://your-endpoint.com/llm\",\n    apiKey: \"your-api-key\",\n    computeCosts: true,       // Calculate costs (default: true)\n    privacyMode: false,       // Hide input/output (default: false)\n    onSuccess: (call) => {},  // Called on success\n    onError: (call) => {},    // Called on error\n  },\n});\n\n// Vercel AI SDK\nconst { track } = createTracker({\n  apiUrl: \"https://your-endpoint.com/llm\",\n  apiKey: \"your-api-key\",\n  computeCosts: true,\n  privacyMode: false,\n  maxContentSize: 1_048_576,\n  onSuccess: (call) => {},\n  onError: (call) => {},\n});\n```\n\n## Per-call Options\n\n```typescript\n// OpenAI / Anthropic\nconst response = await openai.chat.completions.create({\n  model: \"gpt-4o\",\n  messages: [{ role: \"user\", content: \"Hello!\" }],\n  databuddy: {\n    traceId: \"custom-trace-id\",\n    privacyMode: true,\n  },\n});\n\n// Vercel AI SDK\nconst result = await generateText({\n  model: track(openai(\"gpt-4o\"), {\n    traceId: \"custom-trace-id\",\n    privacyMode: true,\n  }),\n  prompt: \"Hello!\",\n});\n```\n\n## Custom Transport\n\n```typescript\nimport { OpenAI, httpTransport } from \"@databuddy/ai/openai\";\n\nconst openai = new OpenAI({\n  databuddy: {\n    transport: httpTransport(\"https://your-api.com/llm\", \"your-api-key\"),\n  },\n});\n\n// Or fully custom:\nconst openai = new OpenAI({\n  databuddy: {\n    transport: async (call) => {\n      console.log(\"LLM call:\", call);\n    },\n  },\n});\n```\n\n## Features\n\n- Automatic token counting and cost calculation\n- Support for streaming and non-streaming calls\n- Tool call tracking\n- Cache token tracking (Anthropic)\n- Web search usage detection\n- Error tracking\n- Privacy mode for sensitive data\n- Works with OpenAI, Anthropic, and all Vercel AI SDK providers\n","readmeFilename":"README.md","_rev":"1-65b97f6a231c9c6e72727b7e25377f9a"}