DE

deepgram-prod-checklist

A comprehensive checklist for auditing and deploying production-ready Deepgram integrations.

Install

mkdir -p .claude/skills/deepgram-prod-checklist && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/4222" && unzip -o skill.zip -d .claude/skills/deepgram-prod-checklist && rm skill.zip

Installs to .claude/skills/deepgram-prod-checklist

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Execute Deepgram production deployment checklist.
49 charsno explicit “when” trigger
Advanced

Key capabilities

  • Implement singleton client patterns for efficiency
  • Configure health check endpoints for monitoring
  • Expose Prometheus metrics for latency and error rates
  • Set up alert rules for API availability
  • Apply timeout-safe transcription wrappers

How it works

This checklist provides code patterns for singleton clients, health checks, and Prometheus instrumentation to ensure high availability and observability for Deepgram integrations.

Inputs & outputs

You give it
Production configuration and metrics requirements
You get back
Production-ready monitoring and resilience patterns

When to use deepgram-prod-checklist

  • Audit Deepgram integration before launch
  • Implement robust error handling
  • Configure production monitoring and alerts
  • Validate API key and security setup

About this skill

Deepgram Production Checklist

Overview

Comprehensive go-live checklist for Deepgram integrations. Covers singleton client, health checks, Prometheus metrics, alert rules, error handling, and a phased go-live timeline.

Production Readiness Matrix

CategoryItemStatus
AuthProduction API key with scoped permissions[ ]
AuthKey stored in secret manager (not env file)[ ]
AuthKey rotation schedule (90-day) configured[ ]
AuthFallback key provisioned and tested[ ]
ResilienceRetry with exponential backoff on 429/5xx[ ]
ResilienceCircuit breaker for cascade failure prevention[ ]
ResilienceRequest timeout set (30s pre-recorded, 10s TTS)[ ]
ResilienceGraceful degradation when API unavailable[ ]
PerformanceSingleton client (not creating per-request)[ ]
PerformanceConcurrency limited (50-80% of plan limit)[ ]
PerformanceAudio preprocessed (16kHz mono for best results)[ ]
PerformanceLarge files use callback URL (async)[ ]
MonitoringHealth check endpoint testing Deepgram API[ ]
MonitoringPrometheus metrics: latency, error rate, usage[ ]
MonitoringAlerts: error rate >5%, latency >10s, circuit open[ ]
SecurityPII redaction enabled if handling sensitive audio[ ]
SecurityAudio URLs validated (HTTPS, no private IPs)[ ]
SecurityAudit logging on all operations[ ]

Instructions

Step 1: Production Singleton Client

import { createClient, DeepgramClient } from '@deepgram/sdk';

class ProductionDeepgram {
  private static client: DeepgramClient | null = null;

  static getClient(): DeepgramClient {
    if (!this.client) {
      const key = process.env.DEEPGRAM_API_KEY;
      if (!key) throw new Error('DEEPGRAM_API_KEY required for production');
      this.client = createClient(key);
    }
    return this.client;
  }

  // Force re-init (for key rotation)
  static reset() { this.client = null; }
}

Step 2: Health Check Endpoint

import express from 'express';
import { createClient } from '@deepgram/sdk';

const app = express();
const deepgram = createClient(process.env.DEEPGRAM_API_KEY!);

app.get('/health', async (req, res) => {
  const start = Date.now();
  try {
    // Test API connectivity by listing projects
    const { error } = await deepgram.manage.getProjects();
    const latency = Date.now() - start;

    if (error) {
      return res.status(503).json({
        status: 'unhealthy',
        deepgram: 'error',
        error: error.message,
        latency_ms: latency,
      });
    }

    res.json({
      status: 'healthy',
      deepgram: 'connected',
      latency_ms: latency,
      timestamp: new Date().toISOString(),
    });
  } catch (err: any) {
    res.status(503).json({
      status: 'unhealthy',
      deepgram: 'unreachable',
      error: err.message,
      latency_ms: Date.now() - start,
    });
  }
});

Step 3: Prometheus Metrics

import { Counter, Histogram, Gauge, Registry } from 'prom-client';

const registry = new Registry();

const transcriptionRequests = new Counter({
  name: 'deepgram_requests_total',
  help: 'Total Deepgram API requests',
  labelNames: ['method', 'model', 'status'],
  registers: [registry],
});

const transcriptionLatency = new Histogram({
  name: 'deepgram_latency_seconds',
  help: 'Deepgram API request latency',
  labelNames: ['method', 'model'],
  buckets: [0.5, 1, 2, 5, 10, 30],
  registers: [registry],
});

const audioProcessed = new Counter({
  name: 'deepgram_audio_seconds_total',
  help: 'Total audio seconds processed',
  labelNames: ['model'],
  registers: [registry],
});

const activeConnections = new Gauge({
  name: 'deepgram_active_connections',
  help: 'Active WebSocket connections',
  registers: [registry],
});

// Instrumented transcription
async function instrumentedTranscribe(url: string, model = 'nova-3') {
  const timer = transcriptionLatency.startTimer({ method: 'prerecorded', model });
  try {
    const { result, error } = await deepgram.listen.prerecorded.transcribeUrl(
      { url }, { model, smart_format: true }
    );
    timer();
    transcriptionRequests.inc({ method: 'prerecorded', model, status: error ? 'error' : 'ok' });
    if (result?.metadata?.duration) {
      audioProcessed.inc({ model }, result.metadata.duration);
    }
    if (error) throw error;
    return result;
  } catch (err) {
    timer();
    transcriptionRequests.inc({ method: 'prerecorded', model, status: 'error' });
    throw err;
  }
}

// Expose metrics endpoint
app.get('/metrics', async (req, res) => {
  res.set('Content-Type', registry.contentType);
  res.send(await registry.metrics());
});

Step 4: Alert Rules (Prometheus/AlertManager)

groups:
  - name: deepgram
    rules:
      - alert: DeepgramHighErrorRate
        expr: rate(deepgram_requests_total{status="error"}[5m]) / rate(deepgram_requests_total[5m]) > 0.05
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Deepgram error rate > 5%"

      - alert: DeepgramHighLatency
        expr: histogram_quantile(0.95, rate(deepgram_latency_seconds_bucket[5m])) > 10
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Deepgram P95 latency > 10s"

      - alert: DeepgramHealthCheckFailed
        expr: up{job="deepgram-service"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Deepgram health check failed for 2+ minutes"

Step 5: Error Handling Wrapper

async function safeTranscribe(url: string, options: Record<string, any> = {}) {
  const timeout = options.timeout ?? 30000;

  const controller = new AbortController();
  const timeoutId = setTimeout(() => controller.abort(), timeout);

  try {
    const result = await Promise.race([
      instrumentedTranscribe(url, options.model ?? 'nova-3'),
      new Promise((_, reject) =>
        setTimeout(() => reject(new Error('Transcription timeout')), timeout)
      ),
    ]);
    clearTimeout(timeoutId);
    return result;
  } catch (err: any) {
    clearTimeout(timeoutId);
    // Log structured error
    console.error(JSON.stringify({
      level: 'error',
      service: 'deepgram',
      message: err.message,
      url: url.substring(0, 100),
      timestamp: new Date().toISOString(),
    }));
    throw err;
  }
}

Step 6: Go-Live Timeline

PhaseWhenActions
D-71 week beforeLoad test at 2x expected volume, security review
D-33 days beforeSmoke test with production key, verify all alerts fire
D-1Day beforeConfirm on-call rotation, validate dashboards
D-0LaunchShadow mode (10% traffic), monitoring open
D+1Day afterReview error rate, latency, verify no anomalies
D+71 week afterFull traffic, tune alert thresholds based on baselines

Output

  • Singleton client with reset capability
  • Health check endpoint with latency reporting
  • Prometheus metrics (requests, latency, audio, connections)
  • AlertManager rules for error rate, latency, availability
  • Timeout-safe transcription wrapper
  • Phased go-live timeline

Error Handling

IssueCauseSolution
Health check 503API key expiredRotate key, check secret manager
Metrics not scrapedWrong port/pathVerify Prometheus target config
Alert stormsThresholds too tightAdd for: duration, tune values
Timeout on large filesSync mode too slowSwitch to callback URL pattern

Resources

When not to use it

  • Small-scale prototypes without production requirements
  • Environments where monitoring infrastructure is unavailable

Prerequisites

Production API keyPrometheus and AlertManager setupExpress or similar server framework

Limitations

  • Alert thresholds require tuning based on specific traffic patterns
  • Metrics scraping requires configured Prometheus targets

How it compares

It offers a structured readiness matrix and specific implementation code for resilience that goes beyond standard API usage.

Compared to similar skills

deepgram-prod-checklist side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
deepgram-prod-checklist (this skill)127dCautionAdvanced
mlflow37moReviewIntermediate
vercel-advanced-troubleshooting327dCautionAdvanced
sentry-ci-integration127dReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

mlflow

davila7

Track ML experiments, manage model registry with versioning, deploy models to production, and reproduce experiments with MLflow - framework-agnostic ML lifecycle platform

322

vercel-advanced-troubleshooting

jeremylongshore

Execute apply Vercel advanced debugging techniques for hard-to-diagnose issues. Use when standard troubleshooting fails, investigating complex race conditions, or preparing evidence bundles for Vercel support escalation. Trigger with phrases like "vercel hard bug", "vercel mystery error", "vercel impossible to debug", "difficult vercel issue", "vercel deep debug".

320

sentry-ci-integration

jeremylongshore

Manage integrate Sentry with CI/CD pipelines. Use when setting up GitHub Actions, GitLab CI, or other CI systems with Sentry releases and source maps. Trigger with phrases like "sentry github actions", "sentry CI", "sentry pipeline", "automate sentry releases".

113

cloud-functions

TencentCloudBase

Complete guide for CloudBase cloud functions development - runtime selection, deployment, logging, invocation, and HTTP access configuration.

18

genkit-infra-expert

jeremylongshore

Execute use when deploying Genkit applications to production with Terraform. Trigger with phrases like "deploy genkit terraform", "provision genkit infrastructure", "firebase functions terraform", "cloud run deployment", or "genkit production infrastructure". Provisions Firebase Functions, Cloud Run services, GKE clusters, monitoring dashboards, and CI/CD for AI workflows.

15

stac-troubleshooter

StacDev

Diagnose Stac build, deploy, rendering, caching, and navigation issues using repeatable checks. Use when users report stac build finding no screens, deploy mismatches, runtime unknown widget/action errors, cache staleness, or migration regressions.

13

Search skills

Search the agent skills registry