Search

New
Updated

The chaos.search namespace provides full-text and semantic search across Chaos Labs' knowledge base. Query multiple search engines simultaneously, stream results as they arrive from each engine, discover available engines, and power autocomplete with real-time suggestions.

quickstart.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
// Basic keyword search
const { results, search_id } = await chaos.search.query('Aave v3 liquidations', 10);
console.log(`Search ${search_id}: ${results.length} results`);
 
// Multi-engine universal search
const universal = await chaos.search.universal({
  query: 'ETH staking yields',
  mode: 'deep',
  score_results: true,
});
console.log(`Highlights: ${universal.key_highlights}`);

Method Reference

MethodHTTPEndpointReturns
query(query, limit?)GET/v1/searchSearchResults
suggestions(query, k?)GET/v1/search/universal/suggestionsSearchSuggestionsResponse
engines()GET/v1/search/enginesEngineGroup[]
universal(params)POST/v1/search/universalSearchResults
universalStream(params, onEvent?)POST/v1/search/universal/streamSearchStreamEvent[]

Core Types

search-types.ts
type SearchMode = 'fast' | 'deep';
 
type SupportedEngine = string;
 
interface EngineConfig {
  [key: string]: unknown;
}
 
interface SearchResult {
  result_ref_id: string;
  title?: string | null;
  description?: string | null;
  content?: string | null;
  type?: string | null;
  img_url?: string | null;
  url?: string | null;
  raw_result?: Record<string, unknown> | null;
  engine_id?: string | null;
  elapsed_ms?: number | null;
  published_at?: string | null;
  indexed_at?: string | null;
  extra_data?: Record<string, unknown> | null;
}
 
interface SearchResults {
  search_id: string;
  results: SearchResult[];
  key_highlights?: string | null;
  related_questions?: Array<Record<string, unknown>> | null;
}
 
interface UniversalSearchParams {
  query: string;
  limit?: number;
  engines?: SupportedEngine[];
  score_results?: boolean;
  mode?: SearchMode;
  fan_out?: boolean;
  fan_out_limit?: number;
  engine_configs?: Record<SupportedEngine, EngineConfig>;
  include_sites?: string[];
  exclude_sites?: string[];
}
 
interface SearchResultsEvent {
  type: 'results';
  engine_id: string;
  results: SearchResult[];
  elapsed_ms?: number | null;
}
 
interface SearchMetadataEvent {
  type: 'metadata';
  key_highlights?: string | null;
  related_questions?: Array<Record<string, unknown>> | null;
}
 
interface SearchDoneEvent {
  type: 'done';
  search_id: string;
  total_results: number;
}
 
interface SearchErrorEvent {
  type: 'error';
  engine_id: string;
  message: string;
}
 
type SearchStreamEvent =
  | SearchResultsEvent
  | SearchMetadataEvent
  | SearchDoneEvent
  | SearchErrorEvent;
 
interface EngineGroup {
  [key: string]: unknown;
}
 
interface SearchSuggestionsResponse {
  suggestions: string[];
}
Was this helpful?