/** * harper-fabric-embeddings * * Minimal llama.cpp embedding wrapper for Harper Fabric. Talks directly to * the `@node-llama-cpp` native N-API addon — no build tools, no CLI, no chat * wrappers, no model downloaders beyond a simple HuggingFace fetch. * * ~19 MB installed (native binary only) vs ~250 MB+ for node-llama-cpp. * * Three ways in: * - Raw API — `init` / `embed` / `embedBatch` / `dimensions` / `dispose` * against a module-level default engine (what harper-kb consumes). * - Harper sub-component — `handleApplication(scope)` when loaded via * `package:` in a parent component's config.yaml. * - Harper models backend — the `register` factory, invoked by Harper's * models bootstrap for `backend: harper-fabric-embeddings` config entries. * Wires the engine into `models.embed()`, `@embed` table directives, and * model-call analytics. */ import { EmbeddingEngine, type EngineOptions } from './engine.js'; export { EmbeddingEngine, decodeAndEmbed, downloadModel, renderTemplate, resolveEngineTemplates, validateTemplates, } from './engine.js'; export type { EngineOptions, EmbedManyOptions, EmbedManyResult, EmbedTemplates, LlamaContext } from './engine.js'; export { assertDeclaredPooling, readGgufPooling, POOLING_NAMES } from './gguf.js'; export type { GgufPoolingInfo, PoolingName } from './gguf.js'; /** Options for `init()`. Same shape as `EngineOptions`. */ export type InitOptions = EngineOptions; /** * Initialize the default embedding engine. Call once before using `embed()`. * * Provide either `modelPath` (absolute path to a .gguf file) or * `modelsDir` (directory to search/download into) + optional `modelName`. * * Safe to call concurrently — concurrent callers share the same initialization. * A failed attempt resets so the next call retries. */ export declare function init(options: InitOptions): Promise; /** * Generate an L2-normalized embedding vector for the given text. * * Calls are serialized internally — concurrent callers wait in queue * rather than hitting the llama.cpp context simultaneously. */ export declare function embed(text: string): Promise; /** * Generate embedding vectors for multiple texts. * * More efficient than calling embed() in a loop — texts are processed * sequentially through the native context without queue overhead per item. */ export declare function embedBatch(texts: string[]): Promise; /** * Get the embedding vector dimensionality. */ export declare function dimensions(): number; /** * Clean up native resources for the default engine. */ export declare function dispose(): Promise; /** * Harper plugin hook — called on each worker thread when loaded as a * sub-component via `package:` in the parent's config.yaml. * * Reads config from scope.options, initializes the GGUF engine, and * handles close/change events for cleanup and hot-reload. * * Uses the module-level default engine: two sub-components loading this * package in the same worker share one engine (the second's config is * ignored, and either's close tears it down for both). When you need * per-entry engines, use the models-backend `register` path instead. * * Config options (in parent config.yaml): * modelName — model from the built-in registry (default: nomic-embed-text) * modelsDir — override models directory (default: /models) * contextSize — token context window size * batchSize — batch processing size * threads — CPU threads for inference * gpuLayers — layers to offload to GPU (0 = CPU only) * addonPath — override path to llama-addon.node * pooling — expected pooling declared by the model file (verified at init) */ export declare function handleApplication(scope: { directory: string; options: { getAll?: () => Record; on(event: 'change', fn: () => void): void; } & Record; on(event: 'close', fn: () => void): void; }): Promise; /** Registration args Harper's models bootstrap passes to a backend module factory. */ export interface RegisterArgs { /** Logical name of the config entry (`models.embedding.`); callers select it via `opts.model`. */ logicalName: string; /** `'embedding'` is the only kind this package supports. */ kind: string; /** The env-expanded config entry from `harperdb-config.yaml`. */ config: Record; } /** * Harper models-backend factory. Harper's `bootstrapModels` imports this * package when a `models:` config entry names it and invokes this export * (a named `register` export is probed before the default export): * * models: * embedding: * default: * backend: harper-fabric-embeddings * modelName: nomic-embed-text * modelsDir: ./models * * `modelsDir` (or `modelPath`) is required — there is no instance-root default * on this path. `model` is accepted as an alias for `modelName`, matching the * field Harper's built-in backends use. * * Registration is fast-boot: model resolution / download / load kicks off in * the background here and the FIRST embed call awaits it (a failed attempt * retries on the next call). Misconfiguration — wrong kind, missing model * source, unknown model name — throws right here so Harper's bootstrap logs * and skips the entry at boot instead of surfacing at first use. * * Returns the engine so tests and advanced callers can dispose it; Harper * ignores the return value. */ export declare function register({ logicalName, kind, config }: RegisterArgs): Promise; export default register; //# sourceMappingURL=index.d.ts.map