@dbcube/ai
v6.0.0
Published
Provider-agnostic AI layer for Dbcube: configure once (OpenAI, Anthropic, Google, Ollama) and get a common embed/complete/chat/rerank interface. Foundation of the Dbcube Data + AI ORM.
Maintainers
Readme
@dbcube/ai
Provider-agnostic AI layer for Dbcube. Configure a provider once and get a single, common interface for embeddings and chat/generation — your code never talks to a vendor SDK. This is the L0 foundation of the Dbcube Data + AI ORM (vector search + RAG).
Zero runtime dependencies — every driver uses the native
fetch(Node 18+).
Configure once
import { AI } from "@dbcube/ai";
AI.configure({ provider: "openai", apiKey: process.env.OPENAI_API_KEY! });
// or:
AI.configure({ provider: "anthropic", apiKey: process.env.ANTHROPIC_API_KEY!, model: "claude-sonnet-5" });
AI.configure({ provider: "ollama", url: "http://localhost:11434", model: "llama3" });Use the common interface
const provider = AI.provider();
const vectors = await provider.embed(["hello world", "another chunk"]); // number[][]
const answer = await provider.complete("Summarize the theory of relativity.");
const reply = await provider.chat([
{ role: "system", content: "You are terse." },
{ role: "user", content: "What is a vector index?" },
]);Capabilities are explicit
Not every provider does everything. Branch on capabilities instead of guessing:
const p = AI.provider();
if (p.capabilities.embed) {
await p.embed(["..."]);
}Note: Anthropic (Claude) has no embeddings API. Its capabilities.embed
is false and embed() throws — pair Claude (as the generation/"agent" provider)
with an embedding provider (OpenAI or Ollama).
Providers
| Provider | embed | chat / complete | rerank |
|---|---|---|---|
| openai | ✅ | ✅ | ⬜ (planned) |
| anthropic | ❌ (no API) | ✅ | ⬜ |
| ollama (local) | ✅ | ✅ | ⬜ |
| google (Gemini) | ⬜ planned | ⬜ planned | ⬜ |
License
MIT
