FishMem

文档方法

通过 TypeScript 与 Python SDK 写入准确文本来源并召回可引用证据。

TypeScript

写入文本

const ingested = await fishmem.documents.ingest(
  {
    source_key: "docs/architecture.md",
    title: "Architecture",
    mime_type: "text/markdown",
    content: markdown,
    user_id: "alex",
    metadata: { repository: "fishmem" },
  },
  { idempotencyKey: "architecture-v1" },
);

Cloud 要求幂等键;同一命令重放返回已提交结果,不同内容复用同一键返回 409

上传文件

import { readFile } from "node:fs/promises";

const queued = await fishmem.documents.upload(
  {
    file: new Blob([await readFile("./handbook.pdf")], { type: "application/pdf" }),
    filename: "handbook.pdf",
    source_key: "docs/handbook.pdf",
    user_id: "alex",
  },
  { idempotencyKey: "handbook-pdf-v1" },
);

const ready = await fishmem.operations.wait(queued.operation.id, {
  intervalMs: 1_000,
  timeoutMs: 10 * 60_000,
});

upload() 完成创建、准确字节 PUT 与完成确认,在持久 document_extract 操作入队后返回。它会本地计算 SHA-256,但不会等待 Docling。需要手动流式上传或保存每个 checkpoint 时,使用 createUpload()、返回的 upload.urlcompleteUpload()getUpload()。尚未 processing/ready 的上传可用 deleteUpload(id) 取消,失败任务用 operations.retry() 重驱动。

搜索、列表与内容

const { results } = await fishmem.documents.search({
  query: "projection repair",
  user_id: "alex",
  limit: 5,
  neighbors: 1,
});

const page = await fishmem.documents.list({ user_id: "alex", limit: 50 });
const descriptor = await fishmem.documents.get(ingested.document.id);
const original = await fishmem.documents.content(descriptor.id);
await fishmem.documents.delete(descriptor.id, { idempotencyKey: `delete-${descriptor.id}` });

neighbors 返回相邻分块但不改变命中分块来源。content() 返回准确 UTF-8 原件。删除任一版本会删除完整稳定来源族。

Python

from pathlib import Path

uploaded = fishmem.documents.upload(
    Path("./handbook.pdf"),
    {"source_key": "docs/handbook.pdf", "user_id": "alex"},
    idempotency_key="handbook-pdf-v1",
)
ready = fishmem.operations.wait(uploaded["operation"]["id"], timeout=600.0)

同步与异步客户端提供相同资源,异步列表使用 async for

输入边界

HTTP SDK 支持 PDF、Office、EPUB、邮件、图片与文本文件,最大 25,000,000 字节和 300 个提取页面;音视频不接受。直接 documents.ingest() 同步接收最多 1,000,000 字节的 UTF-8。Desktop 只支持文本路径,upload() 在本地严格解码 UTF-8,不调用 Docling 或远程嵌入提供商。

On this page