npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@olakai/sdk

v1.6.0

Published

This document demonstrates how to use the Olakai SDK with all its features.

Readme

Olakai SDK

A TypeScript SDK for tracking AI interactions with simple event-based API. Monitor your AI agents, applications, track usage patterns, and enforce content policies with just a few lines of code.

npm version TypeScript MIT License

Why Use Olakai SDK?

  • AI Monitoring: Track every AI interaction in your application
  • Content Control: Automatically block sensitive or inappropriate content
  • Analytics: Get insights into AI usage patterns and performance
  • Simple Integration: Works with a simple event-based API - just call olakai()
  • Production Ready: Handles errors gracefully, works offline, retries automatically

Installation

npm install @olakai/sdk
# or
yarn add @olakai/sdk
# or
pnpm add @olakai/sdk

Quick Start

1. Initialize the SDK

import { olakaiConfig } from "@olakai/sdk";

// Initialize once in your app
olakaiConfig({
  apiKey: "your-olakai-api-key",
  // endpoint is optional, defaults to https://app.olakai.ai
  debug: false, // Set to true for development
});

2. Track AI Events

import { olakai } from "@olakai/sdk";

// Track any AI interaction
olakai("event", "ai_activity", {
  prompt: "Write a product description for wireless headphones",
  response:
    "Experience crystal-clear sound with our premium wireless headphones...",
  task: "Content Generation",
  userEmail: "[email protected]",
  tokens: 150,
  chatId: "cckej2lc40c0np1s3mcvef5ss", // Groups related interactions
  customDimensions: {
    dim1: "EMEA",
    dim2: "United Kingdom",
    dim3: "Internal Processing",
  },
  customMetrics: {
    metric1: 150,
    metric2: 2.5,
  },
});

That's it! Your AI interactions are now being tracked and monitored.

Real-World Examples

E-commerce AI Assistant

import { olakai } from "@olakai/sdk";

async function generateProductDescription(product: Product) {
  const prompt = `Write a compelling product description for: ${product.name}`;

  // Call your AI service
  const response = await openai.chat.completions.create({
    model: "gpt-4",
    messages: [{ role: "user", content: prompt }],
  });

  const description = response.choices[0].message.content;

  // Track the interaction
  olakai("event", "ai_activity", {
    prompt,
    response: description,
    task: "Communication Strategy",
    subTask: "message crafting",
    tokens: response.usage?.total_tokens || 0,
    chatId: `product-${product.id}`,
    customDimensions: {
      dim1: product.category,
      dim2: product.brand,
      dim3: "gpt-4",
    },
    customMetrics: {
      metric1: product.price,
      metric2: response.usage?.total_tokens || 0,
    },
  });

  return description;
}

Customer Support Chatbot

import { olakai } from "@olakai/sdk";

async function handleCustomerQuery(query: string, customerId: string) {
  const systemPrompt = "You are a helpful customer support agent...";

  const response = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages: [
      { role: "system", content: systemPrompt },
      { role: "user", content: query },
    ],
  });

  const answer = response.choices[0].message.content;

  // Track with customer context
  olakai("event", "ai_activity", {
    prompt: query,
    response: answer,
    task: "Customer Experience",
    subTask: "user onboarding support",
    tokens: response.usage?.total_tokens || 0,
    chatId: `support-${customerId}`,
    customDimensions: {
      dim1: "customer-support",
      dim2: "gpt-3.5-turbo",
      dim3: "tier-1",
    },
  });

  return answer;
}

API Reference

olakaiConfig(config)

Initialize the SDK with your configuration.

olakaiConfig({
  apiKey: string;        // Required: Your Olakai API key
  endpoint?: string;     // Optional: API endpoint (default: https://app.olakai.ai)
  debug?: boolean;       // Optional: Enable debug logging (default: false)
});

olakai(eventType, eventName, params)

Track AI events with simple event-based API.

olakai("event", "ai_activity", {
  // Required
  prompt: string;         // The AI prompt/input
  response: string;      // The AI response/output

  // Optional - User & Session
  userEmail?: string;        // User email for tracking
  chatId?: string;       // UUID to group related activities

  // Optional - Categorization
  task?: string;         // Task name (e.g., "Content Generation")
  subTask?: string;      // Sub-task name (e.g., "Blog Post")

  // Optional - Metrics
  tokens?: number;       // Token count used
  requestTime?: number;  // Request duration in milliseconds
  shouldScore?: boolean; // Whether to score this activity

  // Optional - Custom Data
  customDimensions?: {  // String dimensions for categorization
    dim1?: string;
    dim2?: string;
    dim3?: string;
    dim4?: string;
    dim5?: string;
    [key: string]: string | undefined;
  };
  customMetrics?: {     // Numeric metrics for analysis
    metric1?: number;
    metric2?: number;
    metric3?: number;
    metric4?: number;
    metric5?: number;
    [key: string]: number | undefined;
  };
});

olakaiReport(prompt, response, options)

Most common: direct reporting without function wrapping.

await olakaiReport("Generate a blog post", "Here's your blog post content...", {
  task: "Content Generation",
  userEmail: "[email protected]",
  tokens: 150,
});

olakaiMonitor(fn, options)

Wrap functions for automatic tracking.

const monitoredFunction = olakaiMonitor(
  async (input: string) => {
    // Your AI logic here
    return await aiModel.generate(input);
  },
  {
    task: "Content Generation",
    subTask: "Blog Post",
    userEmail: "[email protected]",
  },
);

Error Handling

Content Blocking

When Olakai's control system blocks content, an OlakaiBlockedError is thrown:

import { OlakaiBlockedError } from "@olakai/sdk";

try {
  const result = await monitoredFunction("sensitive content");
} catch (error) {
  if (error instanceof OlakaiBlockedError) {
    console.error("Content blocked:", error.details);

    // Handle different blocking reasons
    if (error.details.detectedSensitivity.includes("PII")) {
      // Handle personally identifiable information
    }
    if (!error.details.isAllowedPersona) {
      // Handle unauthorized user
    }
  }
}

Error Details

The OlakaiBlockedError contains:

{
  message: string;
  details: {
    detectedSensitivity: string[];  // ["PII", "PHI", "CODE", "SECRET"]
    isAllowedPersona: boolean;      // User authorization status
  };
}

Best Practices

1. Use Meaningful Task Names

// ✅ Good - Descriptive and hierarchical
olakai("event", "ai_activity", {
  prompt,
  response,
  task: "Customer Support",
  subTask: "Ticket Resolution",
  // ...
});

// ❌ Avoid - Too generic
olakai("event", "ai_activity", {
  prompt,
  response,
  task: "AI",
  // ...
});

2. Group Related Interactions

// Use consistent chatId for related interactions
const sessionId = "chat-" + Date.now();

olakai("event", "ai_activity", {
  prompt: "What's the weather like?",
  response: "I can't check real-time weather...",
  chatId: sessionId,
  // ...
});

olakai("event", "ai_activity", {
  prompt: "What about tomorrow?",
  response: "I still can't check weather...",
  chatId: sessionId, // Same session
  // ...
});

3. Use Custom Dimensions for Analytics

olakai("event", "ai_activity", {
  prompt,
  response,
  customDimensions: {
    dim1: "e-commerce", // Business domain
    dim2: "product-description", // Use case
    dim3: "gpt-4", // AI model
    dim4: "premium-tier", // User tier
  },
  customMetrics: {
    metric1: productPrice, // Product value
    metric2: responseTime, // Performance
    metric3: tokenCount, // Cost
  },
});

4. Handle Errors Gracefully

// Always wrap in try-catch for production
try {
  olakai("event", "ai_activity", params);
} catch (error) {
  // Log but don't break your app
  console.warn("Failed to track AI event:", error);
}

Troubleshooting

Common Issues

"Events not being tracked"

  • Ensure olakaiConfig() was called first
  • Check your API key and endpoint URL
  • Enable debug mode to see detailed logs

"TypeScript errors"

  • Make sure you're using TypeScript 4.0+
  • The SDK uses automatic type inference

"Performance concerns"

  • Tracking is asynchronous and won't block your app
  • Use olakai() for fire-and-forget tracking
  • Use olakaiReport() only when you need to await completion

Debug Mode

Enable debug logging to troubleshoot issues:

olakaiConfig({
  apiKey: "your-key",
  debug: true, // Shows detailed logs
});

Support

License

MIT © Olakai