Council

New
Updated

The chaos.council namespace provides a multi-LLM consensus decision-making system. Define AI members backed by different language models, configure consensus algorithms, form councils, resolve queries through multi-model deliberation, and audit the results.

The namespace is organized into four sub-namespaces and one top-level method:

Sub-namespaceAccessDescription
Memberschaos.council.membersDiscover models, create and manage AI council members
Consensuschaos.council.consensusExplore and configure consensus algorithms
Councilschaos.council.councilsGroup members into councils with consensus config
Resolutionschaos.council.resolutionsBrowse resolution history and audit decisions
resolvechaos.council.resolve()Submit a query for multi-LLM resolution
quick-start.ts
import { Chaos } from '@chaoslabs/ai-sdk';
 
const chaos = new Chaos({ apiKey: process.env.CHAOS_API_KEY! });
 
// 1. Discover available models
const { models } = await chaos.council.members.models();
 
// 2. Create members with different perspectives
const { created } = await chaos.council.members.bulkCreate({
  members: [
    {
      name: 'Risk Analyst',
      provider: 'anthropic',
      model_id: 'claude-sonnet-4-20250514',
      system_prompt: 'You are a conservative DeFi risk analyst. Prioritize safety.',
    },
    {
      name: 'Growth Strategist',
      provider: 'openai',
      model_id: 'gpt-4o',
      system_prompt: 'You are a growth-oriented strategist. Focus on upside potential.',
    },
    {
      name: 'Quant Researcher',
      provider: 'anthropic',
      model_id: 'claude-sonnet-4-20250514',
      system_prompt: 'You are a quantitative researcher. Base decisions on data.',
    },
  ],
});
 
// 3. Form a council
const council = await chaos.council.councils.create({
  name: 'DeFi Advisory Board',
  member_ids: created.map(m => m.id),
  consensus_algorithm: 'majority_vote',
});
 
// 4. Resolve a query
const resolution = await chaos.council.resolve({
  query: 'Should we increase the AAVE WETH collateral factor from 80% to 85%?',
  council_id: council.id,
  answer_options: ['Yes, increase to 85%', 'No, keep at 80%', 'Increase to 82.5% as compromise'],
});
 
console.log(`Session: ${resolution.session_id}`);
console.log(`Status: ${resolution.status}`);
 
// 5. Audit the decision
const audit = await chaos.council.resolutions.audit(resolution.session_id);
for (const vote of audit.memberVotes) {
  console.log(`${vote.model_name}: ${vote.choice} (confidence: ${vote.confidence})`);
}

Method Reference

All methods across the council namespace.

Members

MethodReturns
council.members.models()AvailableModelsResponse
council.members.create(params)CouncilMember
council.members.bulkCreate(params)BulkCreateResult
council.members.list(includeInactive?)CouncilMember[]
council.members.get(memberId)CouncilMember
council.members.update(memberId, params)CouncilMember
council.members.delete(memberId)void

Consensus

MethodReturns
council.consensus.algorithms()AvailableConsensusResponse
council.consensus.get()ConsensusConfig
council.consensus.set(params)ConsensusConfig

Councils

MethodReturns
council.councils.create(params)Council
council.councils.list()Council[]
council.councils.get(councilId)Council
council.councils.update(councilId, params)Council
council.councils.delete(councilId)void

Resolve

MethodReturns
council.resolve(params)CouncilResolveResponse

Resolutions

MethodReturns
council.resolutions.list(params?)CouncilResolutionsListResponse
council.resolutions.get(sessionId)CouncilResolutionDetail
council.resolutions.audit(sessionId)AuditResponse

Core Types

council-types.ts
interface AvailableModel {
  provider: string;
  model_id: string;
}
 
interface AvailableModelsResponse {
  models: AvailableModel[];
}
 
interface CouncilMember {
  id: string;
  name: string;
  provider: string;
  model_id: string;
  description?: string | null;
  system_prompt?: string | null;
  status: string;
  council_count?: number;
}
 
interface CreateCouncilMemberParams {
  name: string;
  provider: string;
  model_id: string;
  description?: string;
  system_prompt?: string;
}
 
interface UpdateCouncilMemberParams {
  name?: string;
  provider?: string;
  model_id?: string;
  description?: string;
  system_prompt?: string;
  status?: string;
}
 
interface BulkCreateCouncilMembersParams {
  members: CreateCouncilMemberParams[];
}
 
interface BulkCreateFailure {
  index: number;
  request: CreateCouncilMemberParams;
  error: string;
}
 
interface BulkCreateResult {
  created: CouncilMember[];
  failed: BulkCreateFailure[];
}
 
interface AlgorithmParameter {
  name: string;
  type: string;
  description?: string;
  required?: boolean;
  default?: unknown;
}
 
interface ConsensusAlgorithmInfo {
  algorithm: string;
  name: string;
  description: string;
  parameters?: AlgorithmParameter[] | null;
}
 
interface AvailableConsensusResponse {
  algorithms: ConsensusAlgorithmInfo[];
  default_algorithm: string;
}
 
interface ConsensusParameter {
  name: string;
  value: unknown;
}
 
interface ConsensusConfig {
  algorithm: string;
  parameters?: ConsensusParameter[] | null;
  modified_at?: string | null;
}
 
interface SetConsensusConfigParams {
  algorithm: string;
  parameters?: Array<{ name: string; value: unknown }>;
}
 
interface Council {
  id: string;
  name: string;
  consensus_algorithm: string;
  consensus_parameters?: ConsensusParameter[] | null;
  members: CouncilMember[];
  resolution_count: number;
  created_at: string;
  updated_at: string;
}
 
interface CreateCouncilParams {
  name: string;
  member_ids: string[];
  consensus_algorithm: string;
  consensus_parameters?: Array<{ name: string; value: unknown }>;
}
 
interface UpdateCouncilParams {
  name?: string;
  member_ids?: string[];
  consensus_algorithm?: string;
  consensus_parameters?: Array<{ name: string; value: unknown }>;
}
 
interface CouncilResolveParams {
  query: string;
  council_id?: string;
  consensus_algorithm?: string;
  consensus_algorithm_kwargs?: Record<string, unknown>;
  council_members?: Array<{
    member_id: string;
    provider: string;
    model_id: string;
    model_name: string;
    system_prompt?: string;
  }>;
  answer_options?: string[];
}
 
interface CouncilResolveResponse {
  session_id: string;
  status: string;
  message: string;
}
 
interface CouncilResolution {
  session_id: string;
  query: string;
  status: string;
  final_result?: string | null;
  council_id?: string | null;
  council_name?: string | null;
  created_at: string;
}
 
interface CouncilResolutionsListParams {
  page?: number;
  pageSize?: number;
  status?: string;
  finalResult?: string;
  councilId?: string;
}
 
interface CouncilResolutionsListResponse {
  resolutions: CouncilResolution[];
  total: number;
  page: number;
  page_size: number;
}
 
type VoteStatus = 'completed' | 'failed' | 'pending';
 
interface ModelVote {
  provider: string;
  model_id: string;
  model_name?: string | null;
  member_id?: string | null;
  status: VoteStatus;
  choice?: string | null;
  reasoning?: string | null;
  confidence?: number | null;
  elapsed_ms?: number | null;
}
 
interface VoteTally {
  total_votes: number;
  completed_votes: number;
  failed_votes: number;
  choices: Record<string, number>;
}
 
interface AuditDissent {
  member_id: string;
  choice: string;
  reasoning: string;
}
 
interface AuditResponse {
  sessionId: string;
  query: string;
  status: string;
  createdAt: string;
  completedAt?: string | null;
  memberVotes: ModelVote[];
  contextSources: unknown[];
  dissentSummary: AuditDissent[];
  voteTally: VoteTally;
}
 
interface CouncilResolutionDetail extends AuditResponse {
  councilId?: string | null;
  councilName?: string | null;
  finalResult?: string | null;
  answerOptions?: string[] | null;
}
Was this helpful?