Ensemble provides native client libraries with full feature support.

TypeScript / JavaScript

npm install @igentai/ensemble-client
import { createClient, newUserMessage } from '@igentai/ensemble-client';

const client = createClient({
  apiKey: 'ens_your_api_key',
  baseUrl: 'http://localhost:8080',
});

// Synchronous generation
const response = await client.generate({
  model: 'claude-sonnet-4-20250514',
  messages: [newUserMessage('Hello!')],
  sessionId: 'my-session',
});

console.log(response.blocks.map(b => b.text).join(''));

// SSE streaming
for await (const event of client.stream({
  model: 'claude-sonnet-4-20250514',
  messages: [newUserMessage('Tell me a story')],
})) {
  if (event.type === 'block') {
    process.stdout.write(event.block.text ?? '');
  }
}

// Disconnection recovery
const status = await client.getStatus('req_abc123');
const response = await client.retrieve('req_abc123');
Features: Async/await, fetch API, SSE + WebSocket streaming, tool calling, session affinity, OpenTelemetry trace propagation. Runs on Node.js 18+, Bun, Deno, and browsers.

Python

cd ensemble/client-python
pip install -r requirements.txt
from ensemble_client import EnsembleClient

client = EnsembleClient(
    api_key="ens_your_api_key",
    base_url="http://localhost:8080",
)

# Synchronous
response = await client.generate(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hello!"}],
    session_id="my-session",
)

# Streaming
async for event in client.stream(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Tell me a story"}],
):
    if event.type == "block":
        print(event.block.text, end="")

# Recovery
status = await client.get_status("req_abc123")
response = await client.retrieve("req_abc123")
Features: Full async/await, connection pooling, tool calling, provider-specific configs, SSE + WebSocket, session affinity.

Go

go get github.com/iGentAI/ensemble/client-go
client := ensemble.NewClient(
    ensemble.WithAPIKey("ens_your_api_key"),
    ensemble.WithBaseURL("http://localhost:8080"),
)

// Synchronous
resp, err := client.Generate(ctx, &ensemble.GenerateRequest{
    Model:     "claude-sonnet-4-20250514",
    Messages:  []ensemble.Message{{Role: "user", Content: "Hello!"}},
    SessionID: "my-session",
})

// Streaming
stream, err := client.Stream(ctx, &ensemble.GenerateRequest{...})
for event := range stream.Events() {
    fmt.Print(event.Block.Text)
}

// Recovery
status, _ := client.GetStatus(ctx, "req_abc123")
response, _ := client.Retrieve(ctx, "req_abc123")