Configuration

Updated

The Chaos client accepts a ChaosSDKOptions object for configuration.

ChaosSDKOptions

types.ts
interface ChaosSDKOptions {
  apiKey: string;
  baseUrl?: string;
  timeout?: number;
  useNativeHttp?: boolean;
}
PropertyTypeRequiredDefaultDescription
apiKeystringYesYour Chaos Labs API key (starts with ck-)
baseUrlstringNo'https://ai.chaoslabs.co'Base URL for the Chaos AI API
timeoutnumberNo120000 (2 min)Request timeout in milliseconds
useNativeHttpbooleanNoundefinedUse native HTTP client instead of fetch

Basic Configuration

config-basic.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({
  apiKey: process.env.CHAOS_API_KEY!,
});
 
// Accessors
console.log(chaos.apiKey);  // 'ck-...'
console.log(chaos.baseUrl); // 'https://ai.chaoslabs.co'

Custom Base URL

Override the base URL for staging or self-hosted environments:

config-url.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({
  apiKey: process.env.CHAOS_API_KEY!,
  baseUrl: 'https://staging.ai.chaoslabs.co',
});

Custom Timeout

Some queries (complex portfolio analysis, multi-step transactions) may take longer than the default 2-minute timeout:

config-timeout.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({
  apiKey: process.env.CHAOS_API_KEY!,
  timeout: 300000, // 5 minutes
});
[@portabletext/react] Unknown block type "callout", specify a component for it in the `components.types` prop

Error Handling

The SDK provides two error classes:

errors.ts
import { Chaos, WALLET_MODEL, ChaosError, ChaosTimeoutError } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
try {
  const response = await chaos.chat.responses.create({
    model: WALLET_MODEL,
    input: [{ type: 'message', role: 'user', content: 'Show my portfolio' }],
    metadata: {
      user_id: 'user-123',
      session_id: 'session-abc',
      wallets: [{ address: '0x...', chain: 'ethereum' }],
    },
  });
} catch (error) {
  if (error instanceof ChaosTimeoutError) {
    console.error('Request timed out');
  } else if (error instanceof ChaosError) {
    console.error('API error:', error.message, error.status, error.code);
  }
}

ChaosError

chaos-error.ts
class ChaosError extends Error {
  constructor(
    message: string,
    public readonly status?: number,
    public readonly code?: string,
    public readonly type?: string
  );
  name: 'ChaosError';
}

ChaosTimeoutError

chaos-timeout-error.ts
class ChaosTimeoutError extends ChaosError {
  constructor(timeoutMs: number);
  name: 'ChaosTimeoutError';
}

The Chaos Client

The Chaos class exposes the following API surface:

client-api.ts
class Chaos {
  constructor(config: ChaosSDKOptions);
 
  /** The chat namespace */
  readonly chat: {
    /** The responses API */
    readonly responses: {
      /** Create a streaming response */
      create(params: ChatCreateRequestParams): Promise<ChatCreateResponse>;
      /** Cancel the current in-flight request */
      cancel(): void;
      /** Reset the session (cancel + new session ID) */
      reset(): void;
    };
  };
 
  /** API key accessor */
  get apiKey(): string;
  /** Base URL accessor */
  get baseUrl(): string;
}

Session Management

The SDK automatically generates a session ID for each Responses instance. Use reset() to start a new conversation, or pass session_id in metadata to control it explicitly:

sessions.ts
// Let the SDK manage sessions
const response1 = await chaos.chat.responses.create({ ... });
const response2 = await chaos.chat.responses.create({ ... }); // same session
 
chaos.chat.responses.reset(); // new session
const response3 = await chaos.chat.responses.create({ ... }); // different session
 
// Or control it yourself via metadata.session_id
const response = await chaos.chat.responses.create({
  ...,
  metadata: { user_id: 'user-1', session_id: 'my-custom-session' },
});
Was this helpful?