add-ai-integration

โดย sentry

เพิ่มการรวมผู้ให้บริการ AI ใหม่เข้าไปใน Sentry JavaScript SDK ใช้เมื่อมีส่วนร่วมในการสร้างเครื่องมือวัด AI ใหม่ (OpenAI, Anthropic, Vercel AI, LangChain ฯลฯ)…

npx skills add https://github.com/getsentry/sentry-javascript --skill add-ai-integration

Adding a New AI Integration

Conventions First

Span ops and attributes are specified outside this repo. Never invent or hardcode either:

Derive the op with getGenAiSpanOp() from ai/core/utils.ts rather than picking one by hand. ai/core/gen-ai-attributes.ts is for gap-fillers only — keys with no @sentry/conventions equivalent — so check it last, not first.

Which Pattern

Does the SDK publish its own `diagnostics_channel` telemetry?
|- YES (ai >= 7) -> Pattern 1: Native tracing channel
+- NO -> Does the SDK expose callback/exporter hooks?
    |- YES (LangChain, Mastra) -> Pattern 3: Callback/Exporter
    +- NO (OpenAI, Anthropic, Google GenAI, ai < 7) -> Pattern 2: Orchestrion-injected channels
PatternUse whenReference
1 — Native tracing channelthe SDK publishes to diagnostics_channelintegrations/vercel-ai/vercel-ai-dc-subscriber.ts
2 — Orchestrion channelsthe SDK has no telemetry of its ownintegrations/openai.ts + orchestrion/config/openai.ts
3 — Callback/exporterthe SDK exposes hooks or an exporterai/langchain/, ai/mastra/ (exporter-shaped agent framework)

What the reference files won't tell you:

  • A provider can need two patterns at once: vercelAIIntegration subscribes to native ai:telemetry for ai >= 7 and runs orchestrion injection for v4-v6.
  • Pattern 1 subscribers are safe to register unconditionally — subscribing is a no-op on SDK versions that never publish.

Where The Code Goes

  • Instrumentation -> packages/server-utils/src/ai/{provider}/
  • Integration -> packages/server-utils/src/integrations/{provider}.ts
  • Runtime packages (node, cloudflare, bun, ...) re-export from @sentry/server-utils — they never define their own
  • Exception: Workers AI is client-wrapped in packages/cloudflare/src/instrumentations/worker/instrumentEnv.ts

Gotchas

  1. Detect streaming from the result shape — an async-iterable or the SDK's stream object — not from params.stream. Only the manual instrument{Provider}Client() API keys off params.stream === true.
  2. Never set streamed response attributes by hand. Accumulate into a StreamResponseState and call endStreamSpan() (ai/openai/streaming.ts for an async generator, ai/anthropic-ai/streaming.ts for a listener-based stream).
  3. Never truncate message payloads. Truncation was removed in v11 (#23045) and nothing downstream caps them; size limiting is server-side.
  4. Never roll child token usage up onto parent spans. Tree totals are computed product-side from the full span tree.
  5. Never read dataCollection.genAI directly. Gate input/output recording on resolveAIRecordingOptions().
  6. LangChain must be registered first in getTracingIntegrations(), so it can disable the provider integrations before they instrument.
  7. Set SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'auto.ai.{provider}' (alphanumerics, _, . only).

Checklist

  • Instrumentation in src/ai/, integration in src/integrations/, registered in getTracingIntegrations() (LangChain first)
  • Exported from packages/server-utils/src/index.ts, re-exported from the supported runtime packages
  • E2E tests in dev-packages/node-integration-tests/suites/tracing/{provider}/ (and cloudflare-integration-tests/ if supported)
  • Ops and attributes from @sentry/conventions, op derived via getGenAiSpanOp()
  • Recording gated on resolveAIRecordingOptions(); no truncation, no token rollup
  • JSDoc names the channels subscribed to, the supported SDK versions, and — for Pattern 2 — that it requires the Sentry runtime hook or bundler plugin
  • Patching happens only once the target package is imported (zero cost if unused)

When in doubt, follow the pattern of the most similar existing integration.

Skills เพิ่มเติมจาก sentry

architecture-review
sentry
การตรวจสอบสุขภาพโค้ดเบสระดับทีมงาน ค้นหาโมดูลขนาดใหญ่ที่รวมทุกอย่างไว้ด้วยกัน ความล้มเหลวที่ไม่มีสัญญาณเตือน ช่องว่างด้านความปลอดภัยของชนิดข้อมูล ช่องโหว่ของความครอบคลุมการทดสอบ และปัญหาที่เป็นมิตรกับ LLM
pi-agent-integration
sentry
Integrate `@mariozechner/pi-agent-core` as the agent abstraction inside another library or runtime. Use when implementing or refactoring Pi Agent wrappers,…
sentry-debug-issue
sentry
ดีบักและแก้ไขปัญหาใน Sentry — ค้นหา (ด้วยลิงก์, ID หรือการค้นหา), ดึงข้อมูลบริบททั้งหมด (stack trace, breadcrumbs, trace, logs), เรียกใช้ Seer root-cause ได้ตามต้องการ /…
sentry-svelte-sdk
sentry
การตั้งค่า Sentry SDK อย่างสมบูรณ์สำหรับ Svelte และ SvelteKit ใช้เมื่อถูกขอให้ "เพิ่ม Sentry ใน Svelte", "เพิ่ม Sentry ใน SvelteKit", "ติดตั้ง @sentry/sveltekit" หรือกำหนดค่า…
sentry-svelte-sdk
sentry
การตั้งค่า Sentry SDK อย่างสมบูรณ์สำหรับ Svelte และ SvelteKit ใช้เมื่อถูกขอให้ "เพิ่ม Sentry ไปยัง Svelte", "เพิ่ม Sentry ไปยัง SvelteKit", "ติดตั้ง @sentry/sveltekit" หรือกำหนดค่า…
skill-scanner
sentry
สแกนทักษะของเอเจนต์เพื่อหาปัญหาด้านความปลอดภัย ใช้เมื่อถูกขอให้ "สแกนทักษะ
prompt-optimizer
sentry
สร้าง ปรับแต่ง และปรับปรุงพรอมต์ของเอเจนต์ พรอมต์ระบบ พรอมต์นักพัฒนา และเทมเพลตพรอมต์ที่ใช้ซ้ำได้อย่างต่อเนื่อง ใช้เมื่อถูกขอให้ปรับปรุง...
commit
sentry
commit — ทักษะที่สามารถติดตั้งได้สำหรับเอเจนต์ AI เผยแพร่โดย getsentry/sentry-docs