Vault Digests

Updated

Vault digests are AI-generated narratives that analyze DeFi vaults. Each digest is broken into named sections -- opening summary, performance, allocations, TVL, and risks -- plus structured metadata like APY, trends, and an overall assessment. The blocks array provides renderable structured data for your UI.

list(limit?)

Retrieve a list of available vault digests. Each item is a full VaultDigestNarrative with all sections populated.

Parameters:

ParamTypeDescription
limitnumberOptional. Maximum number of vault digests to return.

Returns: VaultDigestListResponse

vaults-list.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
const { data: vaults } = await chaos.vaults.list(20);
 
for (const v of vaults) {
  const name = v.vault.vault_name ?? v.vault.vault_address ?? 'Unknown';
  const apy = v.current_apy_pct != null ? `${v.current_apy_pct.toFixed(1)}%` : 'N/A';
  const trend = v.apy_trend ?? 'unknown';
  const assessment = v.overall_assessment ?? 'N/A';
 
  console.log(`${name}`);
  console.log(`  APY: ${apy} (${trend})`);
  console.log(`  Assessment: ${assessment}`);
  console.log(`  Generated: ${v.generation_timestamp}\n`);
}

digest(params)

Fetch the full AI-generated digest for a specific vault. Look up by vault name or on-chain address. At least one of vault_name or vault_address should be provided.

Parameters:

ParamTypeDescription
vault_namestringOptional. Human-readable vault name (e.g., 'Morpho Blue WETH').
vault_addressstringOptional. On-chain vault contract address.

Returns: VaultDigestResponse -- the data field is null if no digest is available for the vault.

vaults-digest.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
// Look up by name
const { data: digest } = await chaos.vaults.digest({ vault_name: 'Morpho Blue WETH' });
 
// Or by address
// const { data: digest } = await chaos.vaults.digest({ vault_address: '0x...' });
 
if (!digest) {
  console.log('No digest available for this vault');
} else {
  console.log('=== Opening Summary ===');
  console.log(digest.opening_summary);
 
  console.log('\n=== Performance ===');
  console.log(digest.performance_summary);
 
  console.log('\n=== Allocations ===');
  console.log(digest.allocations_summary);
 
  console.log('\n=== TVL ===');
  console.log(digest.tvl_summary);
 
  console.log('\n=== Risks ===');
  console.log(digest.risks_summary);
 
  console.log(`\nAPY: ${digest.current_apy_pct}% (${digest.apy_trend})`);
  console.log(`Assessment: ${digest.overall_assessment}`);
  console.log(`Generated: ${digest.generation_timestamp}`);
}

Working with Blocks and Sources

Digests include a blocks array containing structured data (charts, tables, metrics) that you can render in your UI. The sources array lists the data sources the AI used to generate the narrative.

vaults-blocks.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
const { data: digest } = await chaos.vaults.digest({ vault_name: 'Aave V3 USDC' });
 
if (digest) {
  console.log(`Blocks: ${digest.blocks.length}`);
  for (const block of digest.blocks) {
    const blockType = (block as Record<string, unknown>).type ?? 'unknown';
    console.log(`  Block type: ${blockType}`);
  }
 
  if (digest.sources?.length) {
    console.log('\nSources:');
    for (const src of digest.sources) {
      console.log(`  - ${src}`);
    }
  }
 
  if (digest.translated_reports) {
    const languages = Object.keys(digest.translated_reports);
    console.log(`\nTranslations available: ${languages.join(', ')}`);
  }
}
[@portabletext/react] Unknown block type "callout", specify a component for it in the `components.types` prop
Was this helpful?