import type { MemoryEmbedderConfig } from "../config-types.js"; import type { PgEmbedder } from "./pg-query.js"; /** 工厂入参 = 配置坐标(单一属主 `config-types.ts`)+ 部署腿(观测/注入)。 */ export interface OpenAiCompatEmbedderOptions extends MemoryEmbedderConfig { /** 注入 fetch(测试/代理场景);缺省全局 `fetch`。 */ fetchImpl?: typeof fetch; /** * 失败观测腿(codex 复审 F2,已核真):embed 抛出去之后,`PgMemoryEngineBackend.applyPatches` 的 * 外层 catch 会把它折成一条 `io error: …` **冲突**记进 PatchReport(core 的冲突词表把它讲成「并发 * 改动」),而 `search` 那腿直接 `.catch(() => null)` 退回词面档 —— 两条路都不会在部署面留下任何 * 「向量供应商挂了」的信号。这个 hook 就是那个信号:装配点接 metrics + warn。 * * ⚠️ hook 本身不改变结果:抛照抛(不吞、不补零),它只负责让故障**被看见**。 */ onFailure?: (err: unknown) => void; } /** * 端点归一:`MEMORY_EMBEDDER_ENDPOINT` 收两种写法 —— OpenAI 兼容**基址**(`https://x/v1`)或**完整** * 端点(`https://x/v1/embeddings`)。两种都是 operator 手上真实存在的抄法,而一律硬拼 `/embeddings` * 会产出 `/v1/embeddings/embeddings`(这条键最常见的手滑形)。归一不是降级:两条路都指向同一个真 URL, * 没有任何一种输入被静默改成**别的**语义。 * * ⚠️ 只动 `pathname`(codex 复审 F3,已核真):第一版在**整串**上做 `endsWith`/拼接,于是带 query 的 * 端点全错 —— Azure OpenAI 形 `https://h/v1/embeddings?api-version=1` 会被拼成 query 值里带 * `1/embeddings`,`https://h/v1?api-version=1` 则永远拿不到 `/embeddings` 路径。两种都过得了启动期的 * URL 合法性门,只在运行期炸(而运行期的炸法就是上面那条「写入失败/检索退档」的静默病)。 */ export declare function embeddingsUrl(endpoint: string): string; /** 造一个 OpenAI 兼容的 `PgEmbedder`(工厂命名律:返回带行为的对象 ⇒ `create*`)。 */ export declare function createOpenAiCompatEmbedder(opts: OpenAiCompatEmbedderOptions): PgEmbedder; /** * 装配腿:配置在场 ⇒ 造 embedder,缺席 ⇒ `undefined`(= core 的三档推断落回 lexical)。 * 这一层单独存在是为了让「注入真的接上了」可测 —— `openStores` 本身要真 DB 才跑得起来。 */ export declare function memoryEmbedderFor(config: { memoryEmbedder?: MemoryEmbedderConfig; }, deps?: Pick): PgEmbedder | undefined; //# sourceMappingURL=memory-embedder.d.ts.map