Back to Docs
TypeScript SDK
Full TypeScript client with streaming, typed errors, automatic retries, and complete type definitions.
Installation
npm install @myconsilium/sdkyarn add @myconsilium/sdkpnpm add @myconsilium/sdk
Client Configuration
import { ConsiliumClient } from "@myconsilium/sdk";
const client = new ConsiliumClient({
apiUrl: "http://localhost:4000/api/v1", // default
apiKey: "your-api-key",
timeout: 120000, // ms (default: 120s)
maxRetries: 2, // retry attempts (default: 2)
retryDelay: 1000, // ms base delay (default: 1s)
});Methods
| Method | Returns |
|---|---|
| healthCheck() | Promise<HealthStatus> |
| deliberate(options) | Promise<DeliberationResult> |
| redTeam(options) | Promise<RedTeamReport> |
| blindEval(options) | Promise<EvaluationResult> |
| estimateCost(options) | Promise<CostEstimate> |
| streamDeliberation(options) | AsyncIterable<Event> |
Types
| Type | Definition |
|---|---|
| DeliberationMode | 'quick' | 'council' | 'deep' | 'blind' | 'redteam' | 'jury' | 'market' | 'auto' | 'prediction-market' | 'adversarial' | 'delphi' |
| DeliberationResult | { goldenPrompt, dissentReport, cost, auditTrail[], votes, confidenceScores } |
| RedTeamReport | { attacks[], defenses[], judgments[], overallScore, vulnerabilityCount } |
| EvaluationResult | { rankings[], scores, method } |
| CostEstimate | { estimatedCost, breakdown[{ model, role, estimatedCost }], rounds, mode } |
| DeliberationEvent | { event, agentId?, chunk?, round?, model?, content?, message?, data? } |
Error Classes
| Class | Status | Description |
|---|---|---|
| ConsiliumError | any | Base error class. Has message and optional statusCode. |
| AuthenticationError | 401 | Invalid or missing API key / auth token. |
| TimeoutError | 408 | Request exceeded configured timeout. |
| ServerError | 500+ | Server-side error. Automatically retried. |
| RateLimitError | 429 | Rate limit exceeded. Includes retry_after header. |
Full Example
import { ConsiliumClient } from "@myconsilium/sdk";
const client = new ConsiliumClient({
apiUrl: "http://localhost:4000/api/v1",
apiKey: "your-api-key",
});
// 1. Health check
const health = await client.healthCheck();
console.log(`Status: ${health.status}`);
// 2. Estimate cost
const estimate = await client.estimateCost({
topic: "Should we migrate from REST to GraphQL?",
mode: "council",
models: ["claude-sonnet-4-6", "gpt-5.4", "gemini-3-flash-preview"],
});
console.log(`Estimated: $${estimate.estimatedCost.toFixed(4)}`);
// 3. Run deliberation
const result = await client.deliberate({
topic: "Should we migrate from REST to GraphQL?",
mode: "council",
models: ["claude-sonnet-4-6", "gpt-5.4", "gemini-3-flash-preview"],
maxRounds: 3,
});
console.log(result.goldenPrompt);
console.log(`Cost: $${result.cost.toFixed(4)}`);
// 4. Red team
const redTeam = await client.redTeam({
topic: "Review this auth middleware for vulnerabilities",
models: ["claude-sonnet-4-6", "gpt-5.4"],
});
console.log(`Vulnerabilities: ${redTeam.vulnerabilityCount}`);
// 5. Stream events
for await (const event of client.streamDeliberation({
topic: "Is Kubernetes overkill for our startup?",
mode: "jury",
models: ["claude-sonnet-4-6", "gpt-5.4", "gemini-3-flash-preview"],
})) {
switch (event.event) {
case "agent:chunk":
process.stdout.write(event.chunk ?? "");
break;
case "phase:voting":
console.log("\nVoting phase started");
break;
case "convergence:detected":
console.log("\nConsensus reached!");
break;
case "dissent:report":
console.log(`\nDissent: ${JSON.stringify(event.data)}`);
break;
}
}Error Handling Example
import {
ConsiliumClient,
AuthenticationError,
RateLimitError,
TimeoutError,
} from "@myconsilium/sdk";
try {
const result = await client.deliberate({ ... });
} catch (error) {
if (error instanceof AuthenticationError) {
console.error("Invalid API key. Check your config.");
} else if (error instanceof RateLimitError) {
console.error(`Rate limited. Retry after ${error.retryAfter}s`);
} else if (error instanceof TimeoutError) {
console.error("Request timed out. Try a simpler mode.");
} else {
throw error;
}
}