message storage performance improvements

This commit is contained in:
Dax Raad
2025-11-07 01:11:47 -05:00
parent d0f5c825bd
commit 9554abb56e
8 changed files with 28 additions and 32 deletions

View File

@@ -273,6 +273,17 @@ export namespace Session {
return diffs ?? []
})
export const messageStream = fn(Identifier.schema("session"), async function* (sessionID) {
const list = await Array.fromAsync(await Storage.list(["message", sessionID]))
for (let i = list.length - 1; i >= 0; i--) {
const read = await Storage.read<MessageV2.Info>(list[i])
yield {
info: read,
parts: await getParts(read.id),
}
}
})
export const messages = fn(
z.object({
sessionID: Identifier.schema("session"),
@@ -280,16 +291,11 @@ export namespace Session {
}),
async (input) => {
const result = [] as MessageV2.WithParts[]
const list = (await Array.fromAsync(await Storage.list(["message", input.sessionID])))
.toSorted((a, b) => a.at(-1)!.localeCompare(b.at(-1)!))
.slice(-1 * (input.limit ?? 1_000_000))
for (const p of list) {
const read = await Storage.read<MessageV2.Info>(p)
result.push({
info: read,
parts: await getParts(read.id),
})
for await (const msg of messageStream(input.sessionID)) {
if (input.limit && result.length >= input.limit) break
result.push(msg)
}
result.reverse()
return result
},
)