Claude Code skill pack for Cohere (24 skills)
Installation
Open Claude Code and run this command:
/plugin install cohere-pack@claude-code-plugins-plus
Use --global to install for all projects, or --project for current project only.
Skills (24)
Configure Cohere CI/CD integration with GitHub Actions and testing.
Cohere CI Integration
Overview
Set up CI/CD pipelines for Cohere integrations with automated testing.
Prerequisites
- GitHub repository with Actions enabled
- Cohere test API key
- npm/pnpm project configured
Instructions
Step 1: Create GitHub Actions Workflow
Create .github/workflows/cohere-integration.yml:
name: Cohere Integration Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }}
jobs:
test:
runs-on: ubuntu-latest
env:
COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm test -- --coverage
- run: npm run test:integration
Step 2: Configure Secrets
gh secret set COHERE_API_KEY --body "sk_test_***"
Step 3: Add Integration Tests
describe('Cohere Integration', () => {
it.skipIf(!process.env.COHERE_API_KEY)('should connect', async () => {
const client = getCohereClient();
const result = await client.healthCheck();
expect(result.status).toBe('ok');
});
});
Output
- Automated test pipeline
- PR checks configured
- Coverage reports uploaded
- Release workflow ready
Error Handling
| Issue | Cause | Solution |
|---|---|---|
| Secret not found | Missing configuration | Add secret via gh secret set |
| Tests timeout | Network issues | Increase timeout or mock |
| Auth failures | Invalid key | Check secret value |
Examples
Release Workflow
on:
push:
tags: ['v*']
jobs:
release:
runs-on: ubuntu-latest
env:
COHERE_API_KEY: ${{ secrets.COHERE_API_KEY_PROD }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- name: Verify Cohere production readiness
run: npm run test:integration
- run: npm run build
- run: npm publish
Branch Protection
required_status_checks:
- "test"
- "cohere-integration"
Resources
Next Steps
For deployment patterns, see cohere-deploy-integration
Diagnose and fix Cohere common errors and exceptions.
Cohere Common Errors
Overview
Quick reference for the top 10 most common Cohere errors and their solutions.
Prerequisites
- Cohere SDK installed
- API credentials configured
- Access to error logs
Instructions
Step 1: Identify the Error
Check error message and code in your logs or console.
Step 2: Find Matching Error Below
Match your error to one of the documented cases.
Step 3: Apply Solution
Follow the solution steps for your specific error.
Output
- Identified error cause
- Applied fix
- Verified resolution
Error Handling
Authentication Failed
Error Message:
Authentication error: Invalid API key
Cause: API key is missing, expired, or invalid.
Solution:
# Verify API key is set
echo $COHERE_API_KEY
Rate Limit Exceeded
Error Message:
Rate limit exceeded. Please retry after X seconds.
Cause: Too many requests in a short period.
Solution:
Implement exponential backoff. See cohere-rate-limits skill.
Network Timeout
Error Message:
Request timeout after 30000ms
Cause: Network connectivity or server latency issues.
Solution:
// Increase timeout
const client = new Client({ timeout: 60000 });
Examples
Quick Diagnostic Commands
# Check Cohere status
curl -s https://status.cohere.com
# Verify API connectivity
curl -I https://api.cohere.com
# Check local configuration
env | grep COHERE
Escalation Path
- Collect evidence with
cohere-debug-bundle - Check Cohere status page
- Contact support with request ID
Resources
Next Steps
For comprehensive debugging, see cohere-debug-bundle.
Execute Cohere primary workflow: Core Workflow A.
Cohere Core Workflow A
Overview
Primary money-path workflow for Cohere. This is the most common use case.
Prerequisites
- Completed
cohere-install-authsetup - Understanding of Cohere core concepts
- Valid API credentials configured
Instructions
Step 1: Initialize
// Step 1 implementation
Step 2: Execute
// Step 2 implementation
Step 3: Finalize
// Step 3 implementation
Output
- Completed Core Workflow A execution
- Expected results from Cohere API
- Success confirmation or error details
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Error 1 | Cause | Solution |
| Error 2 | Cause | Solution |
Examples
Complete Workflow
// Complete workflow example
Common Variations
- Variation 1: Description
- Variation 2: Description
Resources
Next Steps
For secondary workflow, see cohere-core-workflow-b.
Execute Cohere secondary workflow: Core Workflow B.
Cohere Core Workflow B
Overview
Secondary workflow for Cohere. Complements the primary workflow.
Prerequisites
- Completed
cohere-install-authsetup - Familiarity with
cohere-core-workflow-a - Valid API credentials configured
Instructions
Step 1: Setup
// Step 1 implementation
Step 2: Process
// Step 2 implementation
Step 3: Complete
// Step 3 implementation
Output
- Completed Core Workflow B execution
- Results from Cohere API
- Success confirmation or error details
Error Handling
| Aspect | Workflow A | Workflow B |
|---|---|---|
| Use Case | Primary | Secondary |
| Complexity | Medium | Lower |
| Performance | Standard | Optimized |
Examples
Complete Workflow
// Complete workflow example
Error Recovery
// Error handling code
Resources
Next Steps
For common errors, see cohere-common-errors.
Optimize Cohere costs through tier selection, sampling, and usage monitoring.
Cohere Cost Tuning
Overview
Optimize Cohere costs through smart tier selection, sampling, and usage monitoring.
Prerequisites
- Access to Cohere billing dashboard
- Understanding of current usage patterns
- Database for usage tracking (optional)
- Alerting system configured (optional)
Pricing Tiers
| Tier | Monthly Cost | Included | Overage |
|---|---|---|---|
| Free | $0 | 1,000 requests | N/A |
| Pro | $99 | 100,000 requests | $0.001/request |
| Enterprise | Custom | Unlimited | Volume discounts |
Cost Estimation
interface UsageEstimate {
requestsPerMonth: number;
tier: string;
estimatedCost: number;
recommendation?: string;
}
function estimateCohereCost(requestsPerMonth: number): UsageEstimate {
if (requestsPerMonth <= 1000) {
return { requestsPerMonth, tier: 'Free', estimatedCost: 0 };
}
if (requestsPerMonth <= 100000) {
return { requestsPerMonth, tier: 'Pro', estimatedCost: 99 };
}
const proOverage = (requestsPerMonth - 100000) * 0.001;
const proCost = 99 + proOverage;
return {
requestsPerMonth,
tier: 'Pro (with overage)',
estimatedCost: proCost,
recommendation: proCost > 500
? 'Consider Enterprise tier for volume discounts'
: undefined,
};
}
Usage Monitoring
class CohereUsageMonitor {
private requestCount = 0;
private bytesTransferred = 0;
private alertThreshold: number;
constructor(monthlyBudget: number) {
this.alertThreshold = monthlyBudget * 0.8; // 80% warning
}
track(request: { bytes: number }) {
this.requestCount++;
this.bytesTransferred += request.bytes;
if (this.estimatedCost() > this.alertThreshold) {
this.sendAlert('Approaching Cohere budget limit');
}
}
estimatedCost(): number {
return estimateCohereCost(this.requestCount).estimatedCost;
}
private sendAlert(message: string) {
// Send to Slack, email, PagerDuty, etc.
}
}
Cost Reduction Strategies
Step 1: Request Sampling
function shouldSample(samplingRate = 0.1): boolean {
return Math.random() < samplingRate;
}
// Use for non-critical telemetry
if (shouldSample(0.1)) { // 10% sample
await cohereClient.trackEvent(event);
}
Step 2: Batching Requests
// Instead of N individual calls
await Promise.all(ids.map(id => cohereClient.get(id)));
// Use batch endpoint (1 call)
await cohereClient.batchGet(ids);
Step 3: Caching (from P16)
- Cache frequently accessed data
- Use cache invalidation w
Implement Cohere PII handling, data retention, and GDPR/CCPA compliance patterns.
Cohere Data Handling
Overview
Handle sensitive data correctly when integrating with Cohere.
Prerequisites
- Understanding of GDPR/CCPA requirements
- Cohere SDK with data export capabilities
- Database for audit logging
- Scheduled job infrastructure for cleanup
Data Classification
| Category | Examples | Handling |
|---|---|---|
| PII | Email, name, phone | Encrypt, minimize |
| Sensitive | API keys, tokens | Never log, rotate |
| Business | Usage metrics | Aggregate when possible |
| Public | Product names | Standard handling |
PII Detection
const PII_PATTERNS = [
{ type: 'email', regex: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g },
{ type: 'phone', regex: /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g },
{ type: 'ssn', regex: /\b\d{3}-\d{2}-\d{4}\b/g },
{ type: 'credit_card', regex: /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g },
];
function detectPII(text: string): { type: string; match: string }[] {
const findings: { type: string; match: string }[] = [];
for (const pattern of PII_PATTERNS) {
const matches = text.matchAll(pattern.regex);
for (const match of matches) {
findings.push({ type: pattern.type, match: match[0] });
}
}
return findings;
}
Data Redaction
function redactPII(data: Record<string, any>): Record<string, any> {
const sensitiveFields = ['email', 'phone', 'ssn', 'password', 'apiKey'];
const redacted = { ...data };
for (const field of sensitiveFields) {
if (redacted[field]) {
redacted[field] = '[REDACTED]';
}
}
return redacted;
}
// Use in logging
console.log('Cohere request:', redactPII(requestData));
Data Retention Policy
Retention Periods
| Data Type | Retention | Reason |
|---|---|---|
| API logs | 30 days | Debugging |
| Error logs | 90 days | Root cause analysis |
| Audit logs | 7 years | Compliance |
| PII | Until deletion request | GDPR/CCPA |
Automatic Cleanup
async function cleanupCohereData(retentionDays: number): Promise<void> {
const cutoff = new Date();
cutoff.setDate(cutoff.getDate() - retentionDays);
await db.cohereLogs.deleteMany({
createdAt: { $lt: cutoff },
type: { $nin: ['audit', 'compliance'] },
});
}
// Schedule daily cleanup
cron.schedule('0 3 * * *', () => cleanupCohereData(30));
Collect Cohere debug evidence for support tickets and troubleshooting.
Cohere Debug Bundle
Overview
Collect all necessary diagnostic information for Cohere support tickets.
Prerequisites
- Cohere SDK installed
- Access to application logs
- Permission to collect environment info
Instructions
Step 1: Create Debug Bundle Script
#!/bin/bash
# cohere-debug-bundle.sh
BUNDLE_DIR="cohere-debug-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BUNDLE_DIR"
echo "=== Cohere Debug Bundle ===" > "$BUNDLE_DIR/summary.txt"
echo "Generated: $(date)" >> "$BUNDLE_DIR/summary.txt"
Step 2: Collect Environment Info
# Environment info
echo "--- Environment ---" >> "$BUNDLE_DIR/summary.txt"
node --version >> "$BUNDLE_DIR/summary.txt" 2>&1
npm --version >> "$BUNDLE_DIR/summary.txt" 2>&1
echo "COHERE_API_KEY: ${COHERE_API_KEY:+[SET]}" >> "$BUNDLE_DIR/summary.txt"
Step 3: Gather SDK and Logs
# SDK version
npm list @cohere/sdk 2>/dev/null >> "$BUNDLE_DIR/summary.txt"
# Recent logs (redacted)
grep -i "cohere" ~/.npm/_logs/*.log 2>/dev/null | tail -50 >> "$BUNDLE_DIR/logs.txt"
# Configuration (redacted - secrets masked)
echo "--- Config (redacted) ---" >> "$BUNDLE_DIR/summary.txt"
cat .env 2>/dev/null | sed 's/=.*/=***REDACTED***/' >> "$BUNDLE_DIR/config-redacted.txt"
# Network connectivity test
echo "--- Network Test ---" >> "$BUNDLE_DIR/summary.txt"
echo -n "API Health: " >> "$BUNDLE_DIR/summary.txt"
curl -s -o /dev/null -w "%{http_code}" https://api.cohere.com/health >> "$BUNDLE_DIR/summary.txt"
echo "" >> "$BUNDLE_DIR/summary.txt"
Step 4: Package Bundle
tar -czf "$BUNDLE_DIR.tar.gz" "$BUNDLE_DIR"
echo "Bundle created: $BUNDLE_DIR.tar.gz"
Output
cohere-debug-YYYYMMDD-HHMMSS.tar.gzarchive containing:summary.txt- Environment and SDK infologs.txt- Recent redacted logsconfig-redacted.txt- Configuration (secrets removed)
Error Handling
| Item | Purpose | Included | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Environment versions | Compatibility check | ✓ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SDK version | Version-specific bugs | ✓ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Error logs (redacted) | Root cause analysis | ✓ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Config (redacted) | Configuration issues | ✓ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Network test |
| Role | Permissions | Use Case |
|---|---|---|
| Admin | Full access | Platform administrators |
| Developer | Read/write, no delete | Active development |
| Viewer | Read-only | Stakeholders, auditors |
| Service | API access only | Automated systems |
Role Implementation
enum CohereRole {
Admin = 'admin',
Developer = 'developer',
Viewer = 'viewer',
Service = 'service',
}
interface CoherePermissions {
read: boolean;
write: boolean;
delete: boolean;
admin: boolean;
}
const ROLE_PERMISSIONS: Record<CohereRole, CoherePermissions> = {
admin: { read: true, write: true, delete: true, admin: true },
developer: { read: true, write: true, delete: false, admin: false },
viewer: { read: true, write: false, delete: false, admin: false },
service: { read: true, write: true, delete: false, admin: false },
};
function checkPermission(
role: CohereRole,
action: keyof CoherePermissions
): boolean {
return ROLE_PERMISSIONS[role][action];
}
SSO Integration
SAML Configuration
// Cohere SAML setup
const samlConfig = {
entryPoint: 'https://idp.company.com/saml/sso',
issuer: 'https://cohere.com/saml/metadata',
cert: process.env.SAML_CERT,
callbackUrl: 'https://app.yourcompany.com/auth/cohere/callback',
};
// Map IdP groups to Cohere roles
const groupRoleMapping: Record<string, CohereRole> = {
'Engineering': CohereRole.Developer,
'Platform-Admins': CohereRole.Admin,
'Data-Team': CohereRole.Viewer,
};
OAuth2/OIDC Integration
import { OAuth2Client } from '@cohere/sdk';
const oauthClient = new OAuth2Client({
clientId: process.env.COHERE_OAUTH_CLIENT_ID!,
clientSecret: process.env.COHERE_OAUTH_CLIENT_SECRET!,
redirectUri: 'https://app.yourcompany.com/auth/cohere/callback',
scopes: ['read', 'write'],
});
Organization Management
interface CohereOrganization {
id: string;
name: string;
ssoEnabled: boolean;
enforceSso: boolean;
allowedDomains: string[];
defaultRole: CohereRole;
}
async function createOrganization(
config: CohereOrganization
): Promise<void> {
await cohereClient.organizations.create({
.Create a minimal working Cohere example.
Cohere Hello World
Overview
Minimal working example demonstrating core Cohere functionality.
Prerequisites
- Completed
cohere-install-authsetup - Valid API credentials configured
- Development environment ready
Instructions
Step 1: Create Entry File
Create a new file for your hello world example.
Step 2: Import and Initialize Client
import { CohereClient } from '@cohere/sdk';
const client = new CohereClient({
apiKey: process.env.COHERE_API_KEY,
});
Step 3: Make Your First API Call
async function main() {
// Your first API call here
}
main().catch(console.error);
Output
- Working code file with Cohere client initialization
- Successful API response confirming connection
- Console output showing:
Success! Your Cohere connection is working.
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Import Error | SDK not installed | Verify with npm list or pip show |
| Auth Error | Invalid credentials | Check environment variable is set |
| Timeout | Network issues | Increase timeout or check connectivity |
| Rate Limit | Too many requests | Wait and retry with exponential backoff |
Examples
TypeScript Example
import { CohereClient } from '@cohere/sdk';
const client = new CohereClient({
apiKey: process.env.COHERE_API_KEY,
});
async function main() {
// Your first API call here
}
main().catch(console.error);
Python Example
from cohere import CohereClient
client = CohereClient()
# Your first API call here
Resources
Next Steps
Proceed to cohere-local-dev-loop for development workflow setup.
Execute Cohere incident response procedures with triage, mitigation, and postmortem.
Cohere Incident Runbook
Overview
Rapid incident response procedures for Cohere-related outages.
Prerequisites
- Access to Cohere dashboard and status page
- kubectl access to production cluster
- Prometheus/Grafana access
- Communication channels (Slack, PagerDuty)
Severity Levels
| Level | Definition | Response Time | Examples |
|---|---|---|---|
| P1 | Complete outage | < 15 min | Cohere API unreachable |
| P2 | Degraded service | < 1 hour | High latency, partial failures |
| P3 | Minor impact | < 4 hours | Webhook delays, non-critical errors |
| P4 | No user impact | Next business day | Monitoring gaps |
Quick Triage
# 1. Check Cohere status
curl -s https://status.cohere.com | jq
# 2. Check our integration health
curl -s https://api.yourapp.com/health | jq '.services.cohere'
# 3. Check error rate (last 5 min)
curl -s localhost:9090/api/v1/query?query=rate(cohere_errors_total[5m])
# 4. Recent error logs
kubectl logs -l app=cohere-integration --since=5m | grep -i error | tail -20
Decision Tree
Cohere API returning errors?
├─ YES: Is status.cohere.com showing incident?
│ ├─ YES → Wait for Cohere to resolve. Enable fallback.
│ └─ NO → Our integration issue. Check credentials, config.
└─ NO: Is our service healthy?
├─ YES → Likely resolved or intermittent. Monitor.
└─ NO → Our infrastructure issue. Check pods, memory, network.
Immediate Actions by Error Type
401/403 - Authentication
# Verify API key is set
kubectl get secret cohere-secrets -o jsonpath='{.data.api-key}' | base64 -d
# Check if key was rotated
# → Verify in Cohere dashboard
# Remediation: Update secret and restart pods
kubectl create secret generic cohere-secrets --from-literal=api-key=NEW_KEY --dry-run=client -o yaml | kubectl apply -f -
kubectl rollout restart deployment/cohere-integration
429 - Rate Limited
# Check rate limit headers
curl -v https://api.cohere.com 2>&1 | grep -i rate
# Enable request queuing
kubectl set env deployment/cohere-integration RATE_LIMIT_MODE=queue
# Long-term: Contact Cohere for limit increase
500/503 - Cohere Errors
# Enable graceful degradation
kubectl set env deployment/cohere-integration COHERE_FALLBACK=true
# Notify users of degraded service
# Update status page
# Monitor Cohere status for resolution
Communication Templates
Internal (Slack)
🔴 P1 INCIDENT: Cohere Integration
Status: INVESTIGATING
Impact: [Describe user impact]
Current actioInstall and configure Cohere SDK/CLI authentication.
Cohere Install & Auth
Overview
Set up Cohere SDK/CLI and configure authentication credentials.
Prerequisites
- Node.js 18+ or Python 3.10+
- Package manager (npm, pnpm, or pip)
- Cohere account with API access
- API key from Cohere dashboard
Instructions
Step 1: Install SDK
# Node.js
npm install @cohere/sdk
# Python
pip install cohere
Step 2: Configure Authentication
# Set environment variable
export COHERE_API_KEY="your-api-key"
# Or create .env file
echo 'COHERE_API_KEY=your-api-key' >> .env
Step 3: Verify Connection
// Test connection code here
Output
- Installed SDK package in node_modules or site-packages
- Environment variable or .env file with API key
- Successful connection verification output
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Invalid API Key | Incorrect or expired key | Verify key in Cohere dashboard |
| Rate Limited | Exceeded quota | Check quota at https://docs.cohere.com |
| Network Error | Firewall blocking | Ensure outbound HTTPS allowed |
| Module Not Found | Installation failed | Run npm install or pip install again |
Examples
TypeScript Setup
import { CohereClient } from '@cohere/sdk';
const client = new CohereClient({
apiKey: process.env.COHERE_API_KEY,
});
Python Setup
from cohere import CohereClient
client = CohereClient(
api_key=os.environ.get('COHERE_API_KEY')
)
Resources
Next Steps
After successful auth, proceed to cohere-hello-world for your first API call.
Configure Cohere local development with hot reload and testing.
Cohere Local Dev Loop
Overview
Set up a fast, reproducible local development workflow for Cohere.
Prerequisites
- Completed
cohere-install-authsetup - Node.js 18+ with npm/pnpm
- Code editor with TypeScript support
- Git for version control
Instructions
Step 1: Create Project Structure
my-cohere-project/
├── src/
│ ├── cohere/
│ │ ├── client.ts # Cohere client wrapper
│ │ ├── config.ts # Configuration management
│ │ └── utils.ts # Helper functions
│ └── index.ts
├── tests/
│ └── cohere.test.ts
├── .env.local # Local secrets (git-ignored)
├── .env.example # Template for team
└── package.json
Step 2: Configure Environment
# Copy environment template
cp .env.example .env.local
# Install dependencies
npm install
# Start development server
npm run dev
Step 3: Setup Hot Reload
{
"scripts": {
"dev": "tsx watch src/index.ts",
"test": "vitest",
"test:watch": "vitest --watch"
}
}
Step 4: Configure Testing
import { describe, it, expect, vi } from 'vitest';
import { CohereClient } from '../src/cohere/client';
describe('Cohere Client', () => {
it('should initialize with API key', () => {
const client = new CohereClient({ apiKey: 'test-key' });
expect(client).toBeDefined();
});
});
Output
- Working development environment with hot reload
- Configured test suite with mocking
- Environment variable management
- Fast iteration cycle for Cohere development
Error Handling
| Error | Cause | Solution |
|---|---|---|
| Module not found | Missing dependency | Run npm install |
| Port in use | Another process | Kill process or change port |
| Env not loaded | Missing .env.local | Copy from .env.example |
| Test timeout | Slow network | Increase test timeout |
Examples
Mock Cohere Responses
vi.mock('@cohere/sdk', () => ({
CohereClient: vi.fn().mockImplementation(() => ({
// Mock methods here
})),
}));
Debug Mode
# Enable verbose logging
DEBUG=COHERE=* npm run dev
Resources
Execute Cohere major re-architecture and migration strategies with strangler fig pattern.
Cohere Migration Deep Dive
Overview
Comprehensive guide for migrating to or from Cohere, or major version upgrades.
Prerequisites
- Current system documentation
- Cohere SDK installed
- Feature flag infrastructure
- Rollback strategy tested
Migration Types
| Type | Complexity | Duration | Risk |
|---|---|---|---|
| Fresh install | Low | Days | Low |
| From competitor | Medium | Weeks | Medium |
| Major version | Medium | Weeks | Medium |
| Full replatform | High | Months | High |
Pre-Migration Assessment
Step 1: Current State Analysis
# Document current implementation
find . -name "*.ts" -o -name "*.py" | xargs grep -l "cohere" > cohere-files.txt
# Count integration points
wc -l cohere-files.txt
# Identify dependencies
npm list | grep cohere
pip freeze | grep cohere
Step 2: Data Inventory
interface MigrationInventory {
dataTypes: string[];
recordCounts: Record<string, number>;
dependencies: string[];
integrationPoints: string[];
customizations: string[];
}
async function assessCohereMigration(): Promise<MigrationInventory> {
return {
dataTypes: await getDataTypes(),
recordCounts: await getRecordCounts(),
dependencies: await analyzeDependencies(),
integrationPoints: await findIntegrationPoints(),
customizations: await documentCustomizations(),
};
}
Migration Strategy: Strangler Fig Pattern
Phase 1: Parallel Run
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ System │ ──▶ │ Cohere │
│ (100%) │ │ (0%) │
└─────────────┘ └─────────────┘
Phase 2: Gradual Shift
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ (50%) │ ──▶ │ (50%) │
└─────────────┘ └─────────────┘
Phase 3: Complete
┌─────────────┐ ┌─────────────┐
│ Old │ │ New │
│ (0%) │ ──▶ │ (100%) │
└─────────────┘ └─────────────┘
Implementation Plan
Phase 1: Setup (Week 1-2)
# Install Cohere SDK
npm install @cohere/sdk
# Configure credentials
cp .env.example .env.cohere
# Edit with new credentials
# Verify connectivity
node -e "require('@cohere/sdk').ping()"
Phase 2: Adapter Layer (Week 3-4)
// src/adapters/cohere.ts
interface ServiceAdapter {
create(data: CreateInput): Promise<Resource>;
read(id: string): Promise<Resource>;
update(id: string, data: UpdateInput): Promise<Resource>;
delete(id: strinConfigure Cohere across development, staging, and production environments.
Cohere Multi-Environment Setup
Overview
Configure Cohere across development, staging, and production environments.
Prerequisites
- Separate Cohere accounts or API keys per environment
- Secret management solution (Vault, AWS Secrets Manager, etc.)
- CI/CD pipeline with environment variables
- Environment detection in application
Environment Strategy
| Environment | Purpose | API Keys | Data |
|---|---|---|---|
| Development | Local dev | Test keys | Sandbox |
| Staging | Pre-prod validation | Staging keys | Test data |
| Production | Live traffic | Production keys | Real data |
Configuration Structure
config/
├── cohere/
│ ├── base.json # Shared config
│ ├── development.json # Dev overrides
│ ├── staging.json # Staging overrides
│ └── production.json # Prod overrides
base.json
{
"timeout": 30000,
"retries": 3,
"cache": {
"enabled": true,
"ttlSeconds": 60
}
}
development.json
{
"apiKey": "${COHERE_API_KEY}",
"baseUrl": "https://api-sandbox.cohere.com",
"debug": true,
"cache": {
"enabled": false
}
}
staging.json
{
"apiKey": "${COHERE_API_KEY_STAGING}",
"baseUrl": "https://api-staging.cohere.com",
"debug": false
}
production.json
{
"apiKey": "${COHERE_API_KEY_PROD}",
"baseUrl": "https://api.cohere.com",
"debug": false,
"retries": 5
}
Environment Detection
// src/cohere/config.ts
import baseConfig from '../../config/cohere/base.json';
type Environment = 'development' | 'staging' | 'production';
function detectEnvironment(): Environment {
const env = process.env.NODE_ENV || 'development';
const validEnvs: Environment[] = ['development', 'staging', 'production'];
return validEnvs.includes(env as Environment)
? (env as Environment)
: 'development';
}
export function getCohereConfig() {
const env = detectEnvironment();
const envConfig = require(`../../config/cohere/${env}.json`);
return {
...baseConfig,
...envConfig,
environment: env,
};
}
Secret Management by Environment
Local Development
# .env.local (git-ignored)
COHERE_API_KEY=sk_test_dev_***
Set up comprehensive observability for Cohere integrations with metrics, traces, and alerts.
Cohere Observability
Overview
Set up comprehensive observability for Cohere integrations.
Prerequisites
- Prometheus or compatible metrics backend
- OpenTelemetry SDK installed
- Grafana or similar dashboarding tool
- AlertManager configured
Metrics Collection
Key Metrics
| Metric | Type | Description |
|---|---|---|
cohererequeststotal |
Counter | Total API requests |
cohererequestduration_seconds |
Histogram | Request latency |
cohereerrorstotal |
Counter | Error count by type |
cohereratelimit_remaining |
Gauge | Rate limit headroom |
Prometheus Metrics
import { Registry, Counter, Histogram, Gauge } from 'prom-client';
const registry = new Registry();
const requestCounter = new Counter({
name: 'cohere_requests_total',
help: 'Total Cohere API requests',
labelNames: ['method', 'status'],
registers: [registry],
});
const requestDuration = new Histogram({
name: 'cohere_request_duration_seconds',
help: 'Cohere request duration',
labelNames: ['method'],
buckets: [0.05, 0.1, 0.25, 0.5, 1, 2.5, 5],
registers: [registry],
});
const errorCounter = new Counter({
name: 'cohere_errors_total',
help: 'Cohere errors by type',
labelNames: ['error_type'],
registers: [registry],
});
Instrumented Client
async function instrumentedRequest<T>(
method: string,
operation: () => Promise<T>
): Promise<T> {
const timer = requestDuration.startTimer({ method });
try {
const result = await operation();
requestCounter.inc({ method, status: 'success' });
return result;
} catch (error: any) {
requestCounter.inc({ method, status: 'error' });
errorCounter.inc({ error_type: error.code || 'unknown' });
throw error;
} finally {
timer();
}
}
Distributed Tracing
OpenTelemetry Setup
import { trace, SpanStatusCode } from '@opentelemetry/api';
const tracer = trace.getTracer('cohere-client');
async function tracedCohereCall<T>(
operationName: string,
operation: () => Promise<T>
): Promise<T> {
return tracer.startActiveSpan(`cohere.${operationName}`, async (span) => {
try {
const result = await operation();
span.setStatus({ code: SpanStatusCode.OK });
return result;
} catch (error: any) {
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
span.recordExcOptimize Cohere API performance with caching, batching, and connection pooling.
Cohere Performance Tuning
Overview
Optimize Cohere API performance with caching, batching, and connection pooling.
Prerequisites
- Cohere SDK installed
- Understanding of async patterns
- Redis or in-memory cache available (optional)
- Performance monitoring in place
Latency Benchmarks
| Operation | P50 | P95 | P99 |
|---|---|---|---|
| Read | 50ms | 150ms | 300ms |
| Write | 100ms | 250ms | 500ms |
| List | 75ms | 200ms | 400ms |
Caching Strategy
Response Caching
import { LRUCache } from 'lru-cache';
const cache = new LRUCache<string, any>({
max: 1000,
ttl: 60000, // 1 minute
updateAgeOnGet: true,
});
async function cachedCohereRequest<T>(
key: string,
fetcher: () => Promise<T>,
ttl?: number
): Promise<T> {
const cached = cache.get(key);
if (cached) return cached as T;
const result = await fetcher();
cache.set(key, result, { ttl });
return result;
}
Redis Caching (Distributed)
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
async function cachedWithRedis<T>(
key: string,
fetcher: () => Promise<T>,
ttlSeconds = 60
): Promise<T> {
const cached = await redis.get(key);
if (cached) return JSON.parse(cached);
const result = await fetcher();
await redis.setex(key, ttlSeconds, JSON.stringify(result));
return result;
}
Request Batching
import DataLoader from 'dataloader';
const cohereLoader = new DataLoader<string, any>(
async (ids) => {
// Batch fetch from Cohere
const results = await cohereClient.batchGet(ids);
return ids.map(id => results.find(r => r.id === id) || null);
},
{
maxBatchSize: 100,
batchScheduleFn: callback => setTimeout(callback, 10),
}
);
// Usage - automatically batched
const [item1, item2, item3] = await Promise.all([
cohereLoader.load('id-1'),
cohereLoader.load('id-2'),
cohereLoader.load('id-3'),
]);
Connection Optimization
import { Agent } from 'https';
// Keep-alive connection pooling
const agent = new Agent({
keepAlive: true,
maxSockets: 10,
maxFreeSockets: 5,
timeout: 30000,
});
const client = new CohereClient({
apiKey: process.env.COHERE_API_KEY!,
httpAgent: agent,
});
Pagination Optimization
async function* paginatedCohereList<T>(
fetcher: (cursor?: string) => Promise<{ data: T[]; nextCursor?: string }>
): AsyncGenerator<T> {
let Execute Cohere production deployment checklist and rollback procedures.
Cohere Production Checklist
Overview
Complete checklist for deploying Cohere integrations to production.
Prerequisites
- Staging environment tested and verified
- Production API keys available
- Deployment pipeline configured
- Monitoring and alerting ready
Instructions
Step 1: Pre-Deployment Configuration
- [ ] Production API keys in secure vault
- [ ] Environment variables set in deployment platform
- [ ] API key scopes are minimal (least privilege)
- [ ] Webhook endpoints configured with HTTPS
- [ ] Webhook secrets stored securely
Step 2: Code Quality Verification
- [ ] All tests passing (
npm test) - [ ] No hardcoded credentials
- [ ] Error handling covers all Cohere error types
- [ ] Rate limiting/backoff implemented
- [ ] Logging is production-appropriate
Step 3: Infrastructure Setup
- [ ] Health check endpoint includes Cohere connectivity
- [ ] Monitoring/alerting configured
- [ ] Circuit breaker pattern implemented
- [ ] Graceful degradation configured
Step 4: Documentation Requirements
- [ ] Incident runbook created
- [ ] Key rotation procedure documented
- [ ] Rollback procedure documented
- [ ] On-call escalation path defined
Step 5: Deploy with Gradual Rollout
# Pre-flight checks
curl -f https://staging.example.com/health
curl -s https://status.cohere.com
# Gradual rollout - start with canary (10%)
kubectl apply -f k8s/production.yaml
kubectl set image deployment/cohere-integration app=image:new --record
kubectl rollout pause deployment/cohere-integration
# Monitor canary traffic for 10 minutes
sleep 600
# Check error rates and latency before continuing
# If healthy, continue rollout to 50%
kubectl rollout resume deployment/cohere-integration
kubectl rollout pause deployment/cohere-integration
sleep 300
# Complete rollout to 100%
kubectl rollout resume deployment/cohere-integration
kubectl rollout status deployment/cohere-integration
Output
- Deployed Cohere integration
- Health checks passing
- Monitoring active
- Rollback procedure documented
Error Handling
| Alert | Condition | Severity |
|---|---|---|
| API Down | 5xx errors > 10/min | P1 |
| High Latency | p99 > 5000ms | P2 |
| Rate Limited | 429 errors > 5/min | P2 |
| Auth Failures | 401/403 errors > 0 | P1 |
Examples
Health Check Implementation
async function healthCheck(): Promise<{ status: string; cohere: any }> {
const start = DatImplement Cohere rate limiting, backoff, and idempotency patterns.
Cohere Rate Limits
Overview
Handle Cohere rate limits gracefully with exponential backoff and idempotency.
Prerequisites
- Cohere SDK installed
- Understanding of async/await patterns
- Access to rate limit headers
Instructions
Step 1: Understand Rate Limit Tiers
| Tier | Requests/min | Requests/day | Burst |
|---|---|---|---|
| Free | 60 | 1,000 | 10 |
| Pro | 300 | 10,000 | 50 |
| Enterprise | 1,000 | 100,000 | 200 |
Step 2: Implement Exponential Backoff with Jitter
async function withExponentialBackoff<T>(
operation: () => Promise<T>,
config = { maxRetries: 5, baseDelayMs: 1000, maxDelayMs: 32000, jitterMs: 500 }
): Promise<T> {
for (let attempt = 0; attempt <= config.maxRetries; attempt++) {
try {
return await operation();
} catch (error: any) {
if (attempt === config.maxRetries) throw error;
const status = error.status || error.response?.status;
if (status !== 429 && (status < 500 || status >= 600)) throw error;
// Exponential delay with jitter to prevent thundering herd
const exponentialDelay = config.baseDelayMs * Math.pow(2, attempt);
const jitter = Math.random() * config.jitterMs;
const delay = Math.min(exponentialDelay + jitter, config.maxDelayMs);
console.log(`Rate limited. Retrying in ${delay.toFixed(0)}ms...`);
await new Promise(r => setTimeout(r, delay));
}
}
throw new Error('Unreachable');
}
Step 3: Add Idempotency Keys
import { v4 as uuidv4 } from 'uuid';
import crypto from 'crypto';
// Generate deterministic key from operation params (for safe retries)
function generateIdempotencyKey(operation: string, params: Record<string, any>): string {
const data = JSON.stringify({ operation, params });
return crypto.createHash('sha256').update(data).digest('hex');
}
async function idempotentRequest<T>(
client: CohereClient,
params: Record<string, any>,
idempotencyKey?: string // Pass existing key for retries
): Promise<T> {
// Use provided key (for retries) or generate deterministic key from params
const key = idempotencyKey || generateIdempotencyKey(params.method || 'POST', params);
return client.request({
...params,
headers: { 'Idempotency-Key': key, ...params.headers },
});
}
Output
- Reliable API calls with automatic retry
- Idempotent requests preventing duplicates
- Rate limit headers properly handled
Error Handling
| Header | Description | Action |
|---|
| Pattern | Use Case | Benefit |
|---|---|---|
| Safe wrapper | All API calls | Prevents uncaught exceptions |
| Retry logic | Transient failures | Improves reliability |
| Type guards | Response validation | Catches API changes |
| Logging | All operations | Debugging and monitoring |
Examples
Factory Pattern (Multi-tenant)
const clients = new Map<string, CohereClient>();
export function getClientForTenant(tenantId: string): CohereClient {
if (!clients.has(tenantId)) {
const apiKey = getTenantApiKey(tenantId);
clients.set(tenantId, new CohereClient({ apiKey }));
}
return clients.get(tenantId)!;
}Apply Cohere security best practices for secrets and access control.
Cohere Security Basics
Overview
Security best practices for Cohere API keys, tokens, and access control.
Prerequisites
- Cohere SDK installed
- Understanding of environment variables
- Access to Cohere dashboard
Instructions
Step 1: Configure Environment Variables
# .env (NEVER commit to git)
COHERE_API_KEY=sk_live_***
COHERE_SECRET=***
# .gitignore
.env
.env.local
.env.*.local
Step 2: Implement Secret Rotation
# 1. Generate new key in Cohere dashboard
# 2. Update environment variable
export COHERE_API_KEY="new_key_here"
# 3. Verify new key works
curl -H "Authorization: Bearer ${COHERE_API_KEY}" \
https://api.cohere.com/health
# 4. Revoke old key in dashboard
Step 3: Apply Least Privilege
| Environment | Recommended Scopes |
|---|---|
| Development | read:* |
| Staging | read:*, write:limited |
| Production | Only required scopes |
Output
- Secure API key storage
- Environment-specific access controls
- Audit logging enabled
Error Handling
| Security Issue | Detection | Mitigation |
|---|---|---|
| Exposed API key | Git scanning | Rotate immediately |
| Excessive scopes | Audit logs | Reduce permissions |
| Missing rotation | Key age check | Schedule rotation |
Examples
Service Account Pattern
const clients = {
reader: new CohereClient({
apiKey: process.env.COHERE_READ_KEY,
}),
writer: new CohereClient({
apiKey: process.env.COHERE_WRITE_KEY,
}),
};
Webhook Signature Verification
import crypto from 'crypto';
function verifyWebhookSignature(
payload: string, signature: string, secret: string
): boolean {
const expected = crypto.createHmac('sha256', secret).update(payload).digest('hex');
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}
Security Checklist
- [ ] API keys in environment variables
- [ ]
.envfiles in.gitignore - [ ] Different keys for dev/staging/prod
- [ ] Minimal scopes per environment
- [ ] Webhook signatures validated
- [ ] Audit logging enabled
Audit Logging
interface AuditEntry {
timestamp: Date;
action: string;
userId: string;
resource: string;
result: 'success' | 'failure';
metadata?: Record<stringAnalyze, plan, and execute Cohere SDK upgrades with breaking change detection.
Cohere Upgrade & Migration
Overview
Guide for upgrading Cohere SDK versions and handling breaking changes.
Prerequisites
- Current Cohere SDK installed
- Git for version control
- Test suite available
- Staging environment
Instructions
Step 1: Check Current Version
npm list @cohere/sdk
npm view @cohere/sdk version
Step 2: Review Changelog
open https://github.com/cohere/sdk/releases
Step 3: Create Upgrade Branch
git checkout -b upgrade/cohere-sdk-vX.Y.Z
npm install @cohere/sdk@latest
npm test
Step 4: Handle Breaking Changes
Update import statements, configuration, and method signatures as needed.
Output
- Updated SDK version
- Fixed breaking changes
- Passing test suite
- Documented rollback procedure
Error Handling
| SDK Version | API Version | Node.js | Breaking Changes |
|---|---|---|---|
| 3.x | 2024-01 | 18+ | Major refactor |
| 2.x | 2023-06 | 16+ | Auth changes |
| 1.x | 2022-01 | 14+ | Initial release |
Examples
Import Changes
// Before (v1.x)
import { Client } from '@cohere/sdk';
// After (v2.x)
import { CohereClient } from '@cohere/sdk';
Configuration Changes
// Before (v1.x)
const client = new Client({ key: 'xxx' });
// After (v2.x)
const client = new CohereClient({
apiKey: 'xxx',
});
Rollback Procedure
npm install @cohere/sdk@1.x.x --save-exact
Deprecation Handling
// Monitor for deprecation warnings in development
if (process.env.NODE_ENV === 'development') {
process.on('warning', (warning) => {
if (warning.name === 'DeprecationWarning') {
console.warn('[Cohere]', warning.message);
// Log to tracking system for proactive updates
}
});
}
// Common deprecation patterns to watch for:
// - Renamed methods: client.oldMethod() -> client.newMethod()
// - Changed parameters: { key: 'x' } -> { apiKey: 'x' }
// - Removed features: Check release notes before upgrading
Resources
Next Steps
For CI integration during upgrades, see cohere-ci-integration.
Implement Cohere webhook signature validation and event handling.
Cohere Webhooks & Events
Overview
Securely handle Cohere webhooks with signature validation and replay protection.
Prerequisites
- Cohere webhook secret configured
- HTTPS endpoint accessible from internet
- Understanding of cryptographic signatures
- Redis or database for idempotency (optional)
Webhook Endpoint Setup
Express.js
import express from 'express';
import crypto from 'crypto';
const app = express();
// IMPORTANT: Raw body needed for signature verification
app.post('/webhooks/cohere',
express.raw({ type: 'application/json' }),
async (req, res) => {
const signature = req.headers['x-cohere-signature'] as string;
const timestamp = req.headers['x-cohere-timestamp'] as string;
if (!verifyCohereSignature(req.body, signature, timestamp)) {
return res.status(401).json({ error: 'Invalid signature' });
}
const event = JSON.parse(req.body.toString());
await handleCohereEvent(event);
res.status(200).json({ received: true });
}
);
Signature Verification
function verifyCohereSignature(
payload: Buffer,
signature: string,
timestamp: string
): boolean {
const secret = process.env.COHERE_WEBHOOK_SECRET!;
// Reject old timestamps (replay attack protection)
const timestampAge = Date.now() - parseInt(timestamp) * 1000;
if (timestampAge > 300000) { // 5 minutes
console.error('Webhook timestamp too old');
return false;
}
// Compute expected signature
const signedPayload = `${timestamp}.${payload.toString()}`;
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(signedPayload)
.digest('hex');
// Timing-safe comparison
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expectedSignature)
);
}
Event Handler Pattern
type CohereEventType = 'resource.created' | 'resource.updated' | 'resource.deleted';
interface CohereEvent {
id: string;
type: CohereEventType;
data: Record<string, any>;
created: string;
}
const eventHandlers: Record<CohereEventType, (data: any) => Promise<void>> = {
'resource.created': async (data) => { /* handle */ },
'resource.updated': async (data) => { /* handle */ },
'resource.deleted': async (data) => { /* handle */ }
};
async function handleCohereEvent(event: CohereEvent): Promise<void> {
const handler = eventHandlers[event.type];
if (!handler) {
console.log(`Unhandled event type: ${event.type}`);
return;
}
try {
await handler(event.data);
console.log(`Processed ${event.type}: ${event.id}`);
} catch (error) {
console.error(`Failed to process ${event.typeReady to use cohere-pack?
Related Plugins
ai-ethics-validator
AI ethics and fairness validation
ai-experiment-logger
Track and analyze AI experiments with a web dashboard and MCP tools
ai-ml-engineering-pack
Professional AI/ML Engineering toolkit: Prompt engineering, LLM integration, RAG systems, AI safety with 12 expert plugins
ai-sdk-agents
Multi-agent orchestration with AI SDK v5 - handoffs, routing, and coordination for any AI provider (OpenAI, Anthropic, Google)
anomaly-detection-system
Detect anomalies and outliers in data
automl-pipeline-builder
Build AutoML pipelines