import { type MemoryFormatFlavor } from '../stages/formatDefault.js'; import type { RetrievalStrategy } from '../retrieval/types.js'; import type { MemoryStore } from '../store/index.js'; import type { MemoryPipeline } from './types.js'; import type { Embedder } from '../embedding/types.js'; export interface SemanticPipelineConfig { /** Vector-capable store. Must implement `search()`. */ readonly store: MemoryStore; /** * Embedder used for both write-side indexing and read-side query. * * Optional since 9.3.0 for stores that declare `ranksBy: 'server-text'`: * they take the query as words, so nothing here embeds. **Without one there * is no WRITE half** — this library cannot embed a turn it has no embedder * for, and a write subflow that stored vectorless entries into a backend * that never reads them would be a no-op wearing a stage's name. The * returned pipeline then carries `read` only (`defineMemory` refuses the * combination unless the memory is `readOnly`, so the missing half is never * a surprise). */ readonly embedder?: Embedder; /** * Stable id for the embedder — attached to written entries and used * as a filter at read time so a later embedder swap doesn't produce * cross-model similarity pollution. Example: `"openai-text-embedding-3-small"`. */ readonly embedderId?: string; /** Top-k entries to consider per turn. Default 20; picker narrows further. */ readonly k?: number; /** Cosine threshold below which matches are dropped. Default none. */ readonly minScore?: number; /** * Character budget for the admitted passages, spent in rank order * (8.19.0). Default none — `k` stays the only bound, as before. */ readonly maxChars?: number; /** Tier filter for retrieval. */ readonly tiers?: ReadonlyArray<'hot' | 'warm' | 'cold'>; /** Tier to tag writes with. */ readonly writeTier?: 'hot' | 'warm' | 'cold'; /** TTL for written entries (ms from write time). */ readonly writeTtlMs?: number; /** Forwarded to `pickByBudget`. */ readonly reserveTokens?: number; readonly minimumTokens?: number; readonly maxEntries?: number; /** Forwarded to `formatDefault`. */ readonly formatHeader?: string; readonly formatFooter?: string; /** * The retrieval rule (8.8.0). Replaces `k` + `minScore` above; see * {@link RetrievalStrategy}. When absent, `topK({ k, threshold: minScore })` * is built from those two — the same rule, spelled the old way. */ readonly retrieval?: RetrievalStrategy; /** * Which claim the injected block makes (8.8.0). `'rag'` renders each * entry as a citable `` with its document, page and score; * `'memory'` (default) keeps the conversation-recall `` shape * byte for byte. */ readonly flavor?: MemoryFormatFlavor; } /** * Build the semantic read + write pipelines sharing a single store. * Returns `{ read, write }` ready to pass to `Agent.memory()` via the appropriate `defineMemory` config (or used directly via `mountMemoryRead`/`mountMemoryWrite`). */ export declare function semanticPipeline(config: SemanticPipelineConfig): MemoryPipeline; //# sourceMappingURL=semantic.d.ts.map