Quickstart

This guide walks you through making your first query with the Chaos AI SDK.

Installation

terminal
npm install @chaoslabs/ai-sdk

Configuration

Create a client with your API key:

setup.ts
import { Chaos, WALLET_MODEL } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({
  apiKey: process.env.CHAOS_API_KEY!,
  baseUrl: 'https://ai-staging.chaoslabs.co', // optional
  timeout: 120000, // optional, defaults to 2 minutes
});
OptionRequiredDefaultDescription
apiKeyYes-Your Chaos API key
baseUrlNohttps://ai-staging.chaoslabs.coAPI endpoint
timeoutNo120000Request timeout in ms

Models

Choose the model based on your use case:

ModelUse CaseExamples
WALLET_MODELDeFi operations"Swap 1 ETH for USDC", "Supply to Aave"
ASK_MODELResearch queries"What is Uniswap TVL?", "Compare lending rates"

Request Metadata

Every request requires metadata to identify the user and wallet:

metadata.ts
const metadata = {
  user_id: 'your-user-id',        // Your app's user identifier
  session_id: `session-${Date.now()}`, // Unique per conversation
  wallet_id: '0x...',             // Wallet address to query
};

Making Requests

query.ts
const response = await chaos.chat.responses.create({
  model: WALLET_MODEL,
  input: [{ type: 'message', role: 'user', content: "What's in my portfolio?" }],
  metadata: walletConfig,
});

Processing Responses

Always check the response status, then extract content:

process-response.ts
import { extractText, extractBlocks, isTableBlock, isChartBlock } from '@chaoslabs/ai-sdk';
 
// Always check status first
if (response.status === 'failed') {
  console.error('Error:', response.error);
  return;
}
 
// Extract plain text response
const text = extractText(response);
console.log('Response:', text);
 
// Extract structured data blocks
const blocks = extractBlocks(response);
console.log(`Received ${blocks.length} blocks`);

Working with Blocks

Use type guards to safely process different block types:

blocks.ts
for (const block of blocks) {
  if (isTableBlock(block)) {
    console.log(`Table: ${block.title}`);
    console.log(`Headers: ${block.tableHeaders.join(', ')}`);
  }
  if (isChartBlock(block)) {
    console.log(`Chart: ${block.title} (${block.chartType})`);
  }
}

See Block Types for complete documentation on all block types.

Next Steps