# BrainstormRouter TypeScript SDK

[![npm version](https://img.shields.io/npm/v/brainstormrouter.svg)](https://www.npmjs.com/package/brainstormrouter)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)

Drop-in replacement for the OpenAI SDK with intelligent routing, memory, guardrails, and governance across 247 model endpoints.

## Install

```bash
npm install brainstormrouter
```

## Quick Start

```typescript
import BrainstormRouter from "brainstormrouter";

const client = new BrainstormRouter({ apiKey: "brk_..." });

// OpenAI-compatible — works with LangChain, Vercel AI SDK, CrewAI, etc.
const response = await client.chat.completions.create({
  model: "anthropic/claude-sonnet-4",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(response.choices[0].message.content);
```

Use `"auto"` as the model to let BrainstormRouter's Thompson sampling pick the best model for your request:

```typescript
const response = await client.chat.completions.create({
  model: "auto",
  messages: [{ role: "user", content: "Explain quantum computing" }],
});
```

## Streaming

```typescript
const stream = await client.chat.completions.create({
  model: "auto",
  messages: [{ role: "user", content: "Write a poem" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
```

## Memory (4-Block RMM)

```typescript
// Append a memory entry
await client.memory.append("User prefers concise answers", {
  block: "semantic",
});

// List memory entries
const { entries } = await client.memory.entries();

// List memory blocks with entry counts
const { blocks } = await client.memory.blocks();

// Bootstrap memory from documents
await client.memory.init([{ content: "Product requirements doc...", source: "prd.md" }]);
```

## Guardrails

```typescript
// Test content against guardrail pipeline
const result = await client.guardrails.test({
  content: "Check this message for PII",
  direction: "inbound",
});
```

## Provider Keys (BYOK)

```typescript
// Register your own provider key
await client.providers.register("anthropic", {
  apiKey: "sk-ant-...",
});

// Validate a key with a live request
const result = await client.providers.test("anthropic", "sk-ant-...");
```

## Prompt Management

```typescript
// Create a versioned prompt template
const prompt = await client.prompts.create({
  name: "customer-support",
  template: "You are a helpful support agent for {{company}}.",
  variables: ["company"],
});

// Test a prompt
const result = await client.prompts.test(prompt.id, {
  variables: { company: "Acme Corp" },
});
```

## Configuration

```typescript
const client = new BrainstormRouter({
  apiKey: "brk_...", // or set BRAINSTORMROUTER_API_KEY env var
  baseURL: "https://api.brainstormrouter.com", // default
  maxEstimatedCost: 0.1, // Guardian: cap cost per request
  guardianOff: false, // disable Guardian Intelligence
});
```

## Resources

- [Documentation](https://docs.brainstormrouter.com)
- [API Reference](https://api.brainstormrouter.com/openapi.json)
- [Full API Reference (llms-full.txt)](https://brainstormrouter.com/llms-full.txt)
- [GitHub](https://github.com/justinjilg/brainstormrouter)
- [Dashboard](https://brainstormrouter.com/dashboard)

## License

MIT
