AI (all-in-one)
@betterdb/ai is one install for the whole BetterDB AI stack on Valkey. It re-exports, and pins exact versions of, five packages:
| Package | Purpose |
|---|---|
@betterdb/agent-cache | Multi-tier exact-match cache |
@betterdb/semantic-cache | Embedding-similarity cache |
@betterdb/retrieval | Vector + filtered query over valkey-search |
@betterdb/agent-memory | Short-term tiers plus semantic long-term memory |
@betterdb/valkey-search-kit | Shared FT.* helpers |
Each remains published and supported. Install them directly for a narrower dependency; install @betterdb/ai for the whole stack at one mutually compatible set of versions.
npm install @betterdb/ai iovalkey
import Valkey from 'iovalkey';
import { AgentCache, SemanticCache, MemoryStore, Retriever } from '@betterdb/ai';
const client = new Valkey({ host: 'localhost', port: 6379 });
const cache = new AgentCache({ client });
Framework adapters
| Import | Provides |
|---|---|
@betterdb/ai/langchain | BetterDBLlmCache, BetterDBSemanticCache |
@betterdb/ai/langgraph | BetterDBSaver, BetterDBSemanticStore |
@betterdb/ai/vercel | createAgentCacheMiddleware, createSemanticCacheMiddleware |
@betterdb/ai/openai | prepareParams, prepareSemanticParams |
@betterdb/ai/openai-responses | prepareParams, prepareSemanticParams |
@betterdb/ai/anthropic | prepareParams, prepareSemanticParams |
@betterdb/ai/llamaindex | prepareParams, prepareSemanticParams |
Six framework peers are optional — install the ones you use (/openai and /openai-responses both use the openai peer). The seventh peer, iovalkey, is required.
Subpath imports (everything but the root @betterdb/ai import) require "moduleResolution" set to "node16", "nodenext", or "bundler" in your tsconfig.json. The root import works under classic "node" resolution too.
Embedding functions
SemanticCache requires an embedFn to turn text into a vector. Bring your own, or use one of these provider-backed factories:
| Import | Provides |
|---|---|
@betterdb/ai/embed/openai | createOpenAIEmbed |
@betterdb/ai/embed/bedrock | createBedrockEmbed |
@betterdb/ai/embed/voyage | createVoyageEmbed |
@betterdb/ai/embed/cohere | createCohereEmbed |
@betterdb/ai/embed/ollama | createOllamaEmbed |
import { SemanticCache } from '@betterdb/ai';
import { createOpenAIEmbed } from '@betterdb/ai/embed/openai';
const cache = new SemanticCache({ client, embedFn: createOpenAIEmbed() });
Namespaces
Twenty-five names are declared by more than one underlying package, so they are not exported flat. Reach them through the namespace for the package you want:
import Valkey from 'iovalkey';
import { AgentCache, agentCache, semanticCache } from '@betterdb/ai';
const cache = new AgentCache({ client: new Valkey() });
try {
await cache.llm.check({
model: 'claude-sonnet-4-5',
messages: [{ role: 'user', content: 'hello' }],
});
} catch (err) {
if (err instanceof agentCache.ValkeyCommandError) {
// agent-cache errors extend AgentCacheError
} else if (err instanceof semanticCache.ValkeyCommandError) {
// semantic-cache's ValkeyCommandError extends Error — a different class
// that happens to share the name
}
}
Namespaces: agentCache, semanticCache, retrieval, memory, searchKit. Each mirrors its package’s full root surface, so anything unavailable flat is available here.
There is no PyPI equivalent yet — Python users install the individual betterdb-* packages.
Versioning
Facade releases are automatic patch bumps triggered by each child’s own release, and may carry breaking changes from a child package. Consumers who need strict semver guarantees should pin @betterdb/ai to an exact version.