@kybernesis/brain-embed-openai
v0.14.0
Published
OpenAI text-embedding provider for brain-core (inference-plane EmbeddingProvider)
Downloads
1,938
Readme
@kybernesis/brain-embed-openai
The default EmbeddingProvider for Cortex — a portable OpenAI
embedding provider for @kybernesis/brain-core's
EmbeddingProvider seam. It produces vectors (text-embedding-3-small, 1536-dim);
the vector store lives separately in
@kybernesis/brain-storage-vec. See the
0.8.0 kickoff §3.5 for why the
embedder sits in the inference plane, not the storage plane.
Usage
import { createOpenAIEmbedder } from '@kybernesis/brain-embed-openai';
import { setEmbeddingProvider } from '@kybernesis/brain-core';
setEmbeddingProvider(createOpenAIEmbedder());Once wired, indexChunk populates vectors.db and semanticSearch returns real
results. Without it, brain-core's vector path no-ops (the seam's default).
Key resolution (tenant-aware)
The provider resolves OPENAI_API_KEY per tenant:
<tenant.paths.home>/.env— where the agent's per-brain key is written;process.env.OPENAI_API_KEY— daemon-global fallback.
One OpenAI client is cached per tenant.slug. A tenant with no key degrades to null
(no embedding) rather than throwing — so a mixed fleet (some agents keyed, some not)
behaves per-agent.
openai is an optional peer dependency
The host application provides the openai SDK (>=4). Tests inject a fake client via
createOpenAIEmbedder({ clientFactory }), so the package builds and tests without it.
Constraint: 1536 dimensions
The vector store schema is built for EMBEDDING_DIM = 1536. A different embedding model
must emit 1536-dim vectors, or EMBEDDING_DIM + the vectors.db schema move together
and you re-index. Don't mix models within one populated vectors.db — distances across
models aren't comparable.
