summaryrefslogtreecommitdiffhomepage
path: root/src/adapters/idb
diff options
context:
space:
mode:
Diffstat (limited to 'src/adapters/idb')
-rw-r--r--src/adapters/idb/index.test.ts10
-rw-r--r--src/adapters/idb/index.ts8
2 files changed, 17 insertions, 1 deletions
diff --git a/src/adapters/idb/index.test.ts b/src/adapters/idb/index.test.ts
index c05c605..04e2177 100644
--- a/src/adapters/idb/index.test.ts
+++ b/src/adapters/idb/index.test.ts
@@ -30,6 +30,16 @@ describe("createIdbChunkStore", () => {
expect(loaded[0]?.chunk).toEqual(textChunk("a"));
});
+ it("round-trips a chunk's turnId (and upserts it onto an older row)", async () => {
+ const store = createIdbChunkStore({ indexedDB: new IDBFactory() });
+ await store.append("conv1", [makeChunk(1, "a"), makeChunk(2, "b")]);
+ expect((await store.load("conv1")).map((c) => c.turnId)).toEqual([undefined, undefined]);
+ await store.append("conv1", [{ ...makeChunk(1, "a"), turnId: "t1" }]);
+ const loaded = await store.load("conv1");
+ expect(loaded.map((c) => c.turnId)).toEqual(["t1", undefined]);
+ expect("turnId" in (loaded[1] ?? {})).toBe(false);
+ });
+
it("append out-of-order still loads seq-ordered", async () => {
const store = createIdbChunkStore({ indexedDB: new IDBFactory() });
const chunks = [makeChunk(3, "c"), makeChunk(1, "a"), makeChunk(2, "b")];
diff --git a/src/adapters/idb/index.ts b/src/adapters/idb/index.ts
index 96b2cbc..3dffef9 100644
--- a/src/adapters/idb/index.ts
+++ b/src/adapters/idb/index.ts
@@ -14,6 +14,7 @@ interface ChunkRecord {
seq: number;
role: StoredChunk["role"];
chunk: StoredChunk["chunk"];
+ turnId?: string;
}
interface MetaRecord {
@@ -70,7 +71,11 @@ function keyRangeFor(conversationId: string): IDBKeyRange {
}
function chunksToStoredChunks(records: ChunkRecord[]): StoredChunk[] {
- return records.map((r) => ({ seq: r.seq, role: r.role, chunk: r.chunk }));
+ return records.map((r) =>
+ typeof r.turnId === "string"
+ ? { seq: r.seq, role: r.role, chunk: r.chunk, turnId: r.turnId }
+ : { seq: r.seq, role: r.role, chunk: r.chunk },
+ );
}
export function createIdbChunkStore(opts?: CreateIdbChunkStoreOptions): ConversationChunkStore {
@@ -113,6 +118,7 @@ export function createIdbChunkStore(opts?: CreateIdbChunkStoreOptions): Conversa
seq: c.seq,
role: c.role,
chunk: c.chunk,
+ ...(c.turnId !== undefined ? { turnId: c.turnId } : {}),
} satisfies ChunkRecord);
}