Node.js Client
Official TypeScript/JavaScript client for the Hindsight API.
Installation
npm install @vectorize-io/hindsight-client
Quick Start
import { HindsightClient } from '@vectorize-io/hindsight-client';
const client = new HindsightClient({ baseUrl: 'http://localhost:8888' });
// Retain a memory
await client.retain('my-agent', 'Alice works at Google');
// Recall memories
const response = await client.recall('my-agent', 'What does Alice do?');
for (const r of response.results) {
console.log(r.text);
}
// Reflect - generate response with personality
const answer = await client.reflect('my-agent', 'Tell me about Alice');
console.log(answer.text);
Client Initialization
import { HindsightClient } from '@vectorize-io/hindsight-client';
const client = new HindsightClient({
baseUrl: 'http://localhost:8888',
});
Core Operations
Retain (Store Memory)
// Simple
await client.retain('my-agent', 'Alice works at Google');
// With options
await client.retain('my-agent', 'Alice got promoted', {
timestamp: new Date('2024-01-15'),
context: 'career update',
metadata: { source: 'slack' },
async: false, // Set true for background processing
});
Retain Batch
await client.retainBatch('my-agent', [
{ content: 'Alice works at Google', context: 'career' },
{ content: 'Bob is a data scientist', context: 'career' },
], {
documentId: 'conversation_001',
async: false,
});
Recall (Search)
// Simple - returns RecallResponse
const response = await client.recall('my-agent', 'What does Alice do?');
for (const r of response.results) {
console.log(`${r.text} (type: ${r.type})`);
}
// With options
const response = await client.recall('my-agent', 'What does Alice do?', {
types: ['world', 'opinion'], // Filter by fact type
maxTokens: 4096,
budget: 'high', // 'low', 'mid', or 'high'
trace: true,
});
Reflect (Generate Response)
const answer = await client.reflect('my-agent', 'What should I know about Alice?', {
budget: 'low', // 'low', 'mid', or 'high'
context: 'preparing for a meeting',
});
console.log(answer.text); // Generated response
console.log(answer.based_on); // Memories used
Bank Management
Create Bank
await client.createBank('my-agent', {
name: 'Assistant',
background: 'I am a helpful AI assistant',
personality: {
openness: 0.7,
conscientiousness: 0.8,
extraversion: 0.5,
agreeableness: 0.6,
neuroticism: 0.3,
bias_strength: 0.5,
},
});
Get Bank Profile
const profile = await client.getBankProfile('my-agent');
console.log(profile.personality);
console.log(profile.background);
List Memories
const response = await client.listMemories('my-agent', {
type: 'world', // Optional filter
q: 'Alice', // Optional text search
limit: 100,
offset: 0,
});
for (const memory of response.memories) {
console.log(`${memory.id}: ${memory.text}`);
}
TypeScript Types
The client exports all types for full TypeScript support:
import type {
RetainResponse,
RecallResponse,
RecallResult,
ReflectResponse,
BankProfileResponse,
Budget,
} from '@vectorize-io/hindsight-client';
// Budget is a union type: 'low' | 'mid' | 'high'
const budget: Budget = 'mid';
Advanced: Low-Level SDK
For advanced use cases, access the auto-generated SDK directly:
import { sdk, createClient, createConfig } from '@vectorize-io/hindsight-client';
const client = createClient(createConfig({ baseUrl: 'http://localhost:8888' }));
// Use sdk functions directly
const response = await sdk.recallMemories({
client,
path: { bank_id: 'my-agent' },
body: {
query: 'What does Alice do?',
budget: 'mid',
max_tokens: 4096,
},
});
Error Handling
import { HindsightClient } from '@vectorize-io/hindsight-client';
const client = new HindsightClient({ baseUrl: 'http://localhost:8888' });
try {
const response = await client.recall('unknown-agent', 'test');
} catch (error) {
console.error('Error:', error.message);
}
Example: Full Workflow
import { HindsightClient } from '@vectorize-io/hindsight-client';
async function main() {
const client = new HindsightClient({ baseUrl: 'http://localhost:8888' });
// Create a bank with personality
await client.createBank('demo', {
name: 'Demo Agent',
background: 'A helpful assistant for demos',
personality: {
openness: 0.8,
conscientiousness: 0.7,
extraversion: 0.6,
agreeableness: 0.8,
neuroticism: 0.2,
bias_strength: 0.5,
},
});
// Store some memories
await client.retain('demo', 'Alice works at Google');
await client.retain('demo', 'Bob is a data scientist at Google');
await client.retain('demo', 'Alice and Bob collaborate on ML projects');
// Search for memories
const searchResults = await client.recall('demo', 'Who works at Google?');
console.log('Search results:');
for (const r of searchResults.results) {
console.log(` - ${r.text}`);
}
// Generate a response
const answer = await client.reflect('demo', 'What do you know about the team?');
console.log('\nReflection:', answer.text);
}
main().catch(console.error);