@earendil-works/pi-durable 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +186 -0
- package/README.md +181 -84
- package/dist/codemode/codemode.d.ts +4 -4
- package/dist/codemode/codemode.d.ts.map +1 -1
- package/dist/codemode/codemode.js +9 -12
- package/dist/codemode/codemode.js.map +1 -1
- package/dist/codemode/models.js +4 -4
- package/dist/codemode/models.js.map +1 -1
- package/dist/env/index.d.ts +12 -10
- package/dist/env/index.d.ts.map +1 -1
- package/dist/env/index.js.map +1 -1
- package/dist/env/node-watch.d.ts +3 -3
- package/dist/env/node-watch.d.ts.map +1 -1
- package/dist/env/node-watch.js +18 -16
- package/dist/env/node-watch.js.map +1 -1
- package/dist/env/node.d.ts +2 -2
- package/dist/env/node.d.ts.map +1 -1
- package/dist/env/node.js +1 -1
- package/dist/env/node.js.map +1 -1
- package/dist/errors.d.ts +18 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +26 -3
- package/dist/errors.js.map +1 -1
- package/dist/harness/agent.d.ts.map +1 -1
- package/dist/harness/agent.js +10 -2
- package/dist/harness/agent.js.map +1 -1
- package/dist/harness/compaction.d.ts.map +1 -1
- package/dist/harness/compaction.js +19 -2
- package/dist/harness/compaction.js.map +1 -1
- package/dist/harness/context.d.ts +23 -7
- package/dist/harness/context.d.ts.map +1 -1
- package/dist/harness/context.js +71 -25
- package/dist/harness/context.js.map +1 -1
- package/dist/harness/define.d.ts +7 -3
- package/dist/harness/define.d.ts.map +1 -1
- package/dist/harness/define.js +4 -0
- package/dist/harness/define.js.map +1 -1
- package/dist/harness/generation.d.ts +38 -5
- package/dist/harness/generation.d.ts.map +1 -1
- package/dist/harness/generation.js +445 -96
- package/dist/harness/generation.js.map +1 -1
- package/dist/harness/harness.d.ts +2 -0
- package/dist/harness/harness.d.ts.map +1 -1
- package/dist/harness/harness.js +87 -62
- package/dist/harness/harness.js.map +1 -1
- package/dist/harness/inbox.d.ts +5 -1
- package/dist/harness/inbox.d.ts.map +1 -1
- package/dist/harness/inbox.js +4 -1
- package/dist/harness/inbox.js.map +1 -1
- package/dist/harness/json.d.ts +20 -4
- package/dist/harness/json.d.ts.map +1 -1
- package/dist/harness/json.js +23 -5
- package/dist/harness/json.js.map +1 -1
- package/dist/harness/live.d.ts +122 -16
- package/dist/harness/live.d.ts.map +1 -1
- package/dist/harness/live.js +93 -12
- package/dist/harness/live.js.map +1 -1
- package/dist/harness/partial-changes.d.ts +54 -0
- package/dist/harness/partial-changes.d.ts.map +1 -0
- package/dist/harness/partial-changes.js +162 -0
- package/dist/harness/partial-changes.js.map +1 -0
- package/dist/harness/registry-reader.d.ts +11 -0
- package/dist/harness/registry-reader.d.ts.map +1 -0
- package/dist/harness/registry-reader.js +25 -0
- package/dist/harness/registry-reader.js.map +1 -0
- package/dist/harness/scheduler.d.ts +46 -19
- package/dist/harness/scheduler.d.ts.map +1 -1
- package/dist/harness/scheduler.js +973 -376
- package/dist/harness/scheduler.js.map +1 -1
- package/dist/harness/submissions.d.ts +17 -10
- package/dist/harness/submissions.d.ts.map +1 -1
- package/dist/harness/submissions.js +62 -25
- package/dist/harness/submissions.js.map +1 -1
- package/dist/harness/task-graph.d.ts +12 -9
- package/dist/harness/task-graph.d.ts.map +1 -1
- package/dist/harness/task-graph.js +38 -28
- package/dist/harness/task-graph.js.map +1 -1
- package/dist/harness/telemetry.d.ts +11 -11
- package/dist/harness/telemetry.d.ts.map +1 -1
- package/dist/harness/telemetry.js +7 -7
- package/dist/harness/telemetry.js.map +1 -1
- package/dist/harness/tool.d.ts +2 -0
- package/dist/harness/tool.d.ts.map +1 -1
- package/dist/harness/tool.js +171 -55
- package/dist/harness/tool.js.map +1 -1
- package/dist/harness/transcript.d.ts +72 -0
- package/dist/harness/transcript.d.ts.map +1 -0
- package/dist/harness/transcript.js +264 -0
- package/dist/harness/transcript.js.map +1 -0
- package/dist/harness/types.d.ts +218 -59
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/harness/util.d.ts +3 -1
- package/dist/harness/util.d.ts.map +1 -1
- package/dist/harness/util.js +9 -0
- package/dist/harness/util.js.map +1 -1
- package/dist/harness/view.d.ts +43 -22
- package/dist/harness/view.d.ts.map +1 -1
- package/dist/harness/view.js +130 -71
- package/dist/harness/view.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/search.d.ts +19 -3
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +107 -44
- package/dist/search.js.map +1 -1
- package/dist/session/cached-storage.d.ts +71 -0
- package/dist/session/cached-storage.d.ts.map +1 -0
- package/dist/session/cached-storage.js +269 -0
- package/dist/session/cached-storage.js.map +1 -0
- package/dist/session/conversation-tails.d.ts +33 -0
- package/dist/session/conversation-tails.d.ts.map +1 -0
- package/dist/session/conversation-tails.js +101 -0
- package/dist/session/conversation-tails.js.map +1 -0
- package/dist/session/keys.d.ts +68 -0
- package/dist/session/keys.d.ts.map +1 -0
- package/dist/session/keys.js +161 -0
- package/dist/session/keys.js.map +1 -0
- package/dist/session/session.d.ts +167 -26
- package/dist/session/session.d.ts.map +1 -1
- package/dist/session/session.js +1029 -171
- package/dist/session/session.js.map +1 -1
- package/dist/session/transaction.d.ts +81 -3
- package/dist/session/transaction.d.ts.map +1 -1
- package/dist/session/transaction.js +224 -37
- package/dist/session/transaction.js.map +1 -1
- package/dist/session/writer.d.ts +74 -0
- package/dist/session/writer.d.ts.map +1 -0
- package/dist/session/writer.js +294 -0
- package/dist/session/writer.js.map +1 -0
- package/dist/storage/indexeddb.d.ts +10 -2
- package/dist/storage/indexeddb.d.ts.map +1 -1
- package/dist/storage/indexeddb.js +91 -41
- package/dist/storage/indexeddb.js.map +1 -1
- package/dist/storage/jsonl/storage.d.ts +14 -2
- package/dist/storage/jsonl/storage.d.ts.map +1 -1
- package/dist/storage/jsonl/storage.js +88 -24
- package/dist/storage/jsonl/storage.js.map +1 -1
- package/dist/storage/memory.d.ts +7 -2
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +28 -2
- package/dist/storage/memory.js.map +1 -1
- package/dist/storage/sqlite/storage.d.ts +14 -2
- package/dist/storage/sqlite/storage.d.ts.map +1 -1
- package/dist/storage/sqlite/storage.js +110 -36
- package/dist/storage/sqlite/storage.js.map +1 -1
- package/dist/storage/store/commit.d.ts +33 -0
- package/dist/storage/store/commit.d.ts.map +1 -0
- package/dist/storage/store/commit.js +286 -0
- package/dist/storage/store/commit.js.map +1 -0
- package/dist/storage/store/documents.d.ts +43 -0
- package/dist/storage/store/documents.d.ts.map +1 -0
- package/dist/storage/store/documents.js +102 -0
- package/dist/storage/store/documents.js.map +1 -0
- package/dist/storage/store/index.d.ts +2 -0
- package/dist/storage/store/index.d.ts.map +1 -0
- package/dist/storage/store/index.js +2 -0
- package/dist/storage/store/index.js.map +1 -0
- package/dist/storage/store/queries.d.ts +49 -0
- package/dist/storage/store/queries.d.ts.map +1 -0
- package/dist/storage/store/queries.js +93 -0
- package/dist/storage/store/queries.js.map +1 -0
- package/dist/storage/store/storage.d.ts +59 -0
- package/dist/storage/store/storage.d.ts.map +1 -0
- package/dist/storage/store/storage.js +438 -0
- package/dist/storage/store/storage.js.map +1 -0
- package/dist/storage/store/tables.d.ts +54 -0
- package/dist/storage/store/tables.d.ts.map +1 -0
- package/dist/storage/store/tables.js +108 -0
- package/dist/storage/store/tables.js.map +1 -0
- package/dist/testing/commit-writes.d.ts +5 -0
- package/dist/testing/commit-writes.d.ts.map +1 -0
- package/dist/testing/commit-writes.js +12 -0
- package/dist/testing/commit-writes.js.map +1 -0
- package/dist/testing/env-conformance.js +7 -7
- package/dist/testing/env-conformance.js.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/storage-benchmark.d.ts.map +1 -1
- package/dist/testing/storage-benchmark.js +18 -17
- package/dist/testing/storage-benchmark.js.map +1 -1
- package/dist/testing/storage-conformance.d.ts.map +1 -1
- package/dist/testing/storage-conformance.js +354 -69
- package/dist/testing/storage-conformance.js.map +1 -1
- package/dist/tool-search/tool-search.d.ts +6 -12
- package/dist/tool-search/tool-search.d.ts.map +1 -1
- package/dist/tool-search/tool-search.js +7 -7
- package/dist/tool-search/tool-search.js.map +1 -1
- package/dist/tools/bash.d.ts +12 -12
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +16 -15
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts +7 -7
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +9 -9
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/index.d.ts +32 -32
- package/dist/tools/read.d.ts +6 -6
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +19 -8
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/write.d.ts +4 -4
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +5 -5
- package/dist/tools/write.js.map +1 -1
- package/dist/types.d.ts +223 -77
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +19 -12
- package/dist/harness/events.d.ts +0 -186
- package/dist/harness/events.d.ts.map +0 -1
- package/dist/harness/events.js +0 -373
- package/dist/harness/events.js.map +0 -1
- package/dist/session/observation.d.ts +0 -42
- package/dist/session/observation.d.ts.map +0 -1
- package/dist/session/observation.js +0 -281
- package/dist/session/observation.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-benchmark.js","sourceRoot":"","sources":["../../src/testing/storage-benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonValue } from \"@earendil-works/chord\";\nimport { BACKGROUND_CONTEXT } from \"@earendil-works/chord/context\";\nimport type {\n\tConversationId,\n\tDocumentCreate,\n\tDocumentId,\n\tEntryId,\n\tSeq,\n\tStorage,\n\tStorageWrite,\n\tSubmissionId,\n\tTaskId,\n\tTaskRecord,\n} from \"../types.ts\";\nimport { ROOT_CONVERSATION_ID } from \"../types.ts\";\n\nexport type StorageBenchmarkScale = {\n\treadonly name: string;\n\treadonly entryCount: number;\n\treadonly taskCount: number;\n\treadonly documentCount: number;\n};\n\nexport const STORAGE_MEMORY_SCALES: readonly StorageBenchmarkScale[] = [\n\t{ name: \"1k\", entryCount: 1_000, taskCount: 200, documentCount: 200 },\n\t{ name: \"10k\", entryCount: 10_000, taskCount: 2_000, documentCount: 2_000 },\n];\n\nexport const TIMING_SCALE: StorageBenchmarkScale = {\n\tname: \"timing\",\n\tentryCount: 1_000,\n\ttaskCount: 300,\n\tdocumentCount: 300,\n};\n\nconst REPLAY_TAILS = [0, 16, 128, 1_024] as const;\nconst HISTORY_SEGMENT_LENGTH = 128;\nconst FORK_DEPTH = 8;\nconst ENTRIES_PER_FORK = 32;\nconst BATCH_SIZE = 100;\n\nexport function storageBenchmarkPrimaryRecordCount(scale: StorageBenchmarkScale): number {\n\treturn (\n\t\t1 +\n\t\tscale.entryCount +\n\t\tscale.taskCount +\n\t\tscale.documentCount +\n\t\tREPLAY_TAILS.length +\n\t\t1 +\n\t\tFORK_DEPTH * (1 + ENTRIES_PER_FORK)\n\t);\n}\n\ntype StoredTask = TaskRecord<JsonValue, JsonValue, JsonValue>;\n\nexport type StorageBenchmarkDataset = {\n\treadonly firstEntryId: EntryId;\n\treadonly filteredTaskCount: number;\n\treadonly exactDocumentId: DocumentId;\n\treadonly exactDocumentKey: string;\n\treadonly replayDocumentIds: Readonly<Record<(typeof REPLAY_TAILS)[number], DocumentId>>;\n\treadonly historicalDocumentId: DocumentId;\n\treadonly ancientAt: Seq;\n\treadonly recentAt: Seq;\n\treadonly deepestConversationId: ConversationId;\n\treadonly ancestorHeadEntryId: EntryId;\n};\n\nfunction task(id: TaskId<JsonValue>, index: number): StoredTask {\n\tconst statuses = [\"pending\", \"running\", \"terminal\"] as const;\n\tconst status = statuses[index % statuses.length];\n\tconst common = {\n\t\tid,\n\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\tkind: index % 4 === 0 ? \"benchmark.filtered\" : \"benchmark.other\",\n\t\tversion: 1,\n\t\tinput: { index },\n\t\tbackground: index % 5 === 0,\n\t\tabortRequested: index % 7 === 0,\n\t};\n\tif (status === \"terminal\") {\n\t\treturn { ...common, state: { status, outcome: { status: \"completed\", result: { index } } } };\n\t}\n\treturn { ...common, state: { status, checkpoint: { index, payload: \"x\".repeat(64) } } };\n}\n\n/** Seed deterministic representative data through only the public `Storage` contract. */\nexport async function seedStorageBenchmark(\n\tstorage: Storage,\n\tscale: StorageBenchmarkScale = TIMING_SCALE,\n): Promise<StorageBenchmarkDataset> {\n\tawait storage.commit([{ type: \"conversation\", value: { id: ROOT_CONVERSATION_ID } }], BACKGROUND_CONTEXT);\n\n\tlet firstEntryId: EntryId | undefined;\n\tfor (let start = 0; start < scale.entryCount; start += BATCH_SIZE) {\n\t\tconst writes: StorageWrite[] = [];\n\t\tfor (let index = start; index < Math.min(start + BATCH_SIZE, scale.entryCount); index++) {\n\t\t\tconst id = await storage.mintId<EntryId>();\n\t\t\tif (index === 0) firstEntryId = id;\n\t\t\twrites.push({\n\t\t\t\ttype: \"entry\",\n\t\t\t\tvalue: {\n\t\t\t\t\tid,\n\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\tkind: \"benchmark.entry\",\n\t\t\t\t\t...(index === 0 ? { head: id } : {}),\n\t\t\t\t\tdata: { index, text: `entry-${index}-${\"x\".repeat(96)}` },\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tawait storage.commit(writes, BACKGROUND_CONTEXT);\n\t}\n\n\tfor (let start = 0; start < scale.taskCount; start += BATCH_SIZE) {\n\t\tconst writes: StorageWrite[] = [];\n\t\tfor (let index = start; index < Math.min(start + BATCH_SIZE, scale.taskCount); index++) {\n\t\t\twrites.push({ type: \"task\", value: task(await storage.mintId<TaskId<JsonValue>>(), index) });\n\t\t}\n\t\tawait storage.commit(writes, BACKGROUND_CONTEXT);\n\t}\n\n\tlet exactDocumentId: DocumentId | undefined;\n\tfor (let start = 0; start < scale.documentCount; start += BATCH_SIZE) {\n\t\tconst writes: StorageWrite[] = [];\n\t\tfor (let index = start; index < Math.min(start + BATCH_SIZE, scale.documentCount); index++) {\n\t\t\tconst id = await storage.mintId<DocumentId>();\n\t\t\texactDocumentId = id;\n\t\t\twrites.push({\n\t\t\t\ttype: \"document.create\",\n\t\t\t\trecord: { id, kind: \"benchmark.family\", key: `key-${index}`, scope: { kind: \"session\" } },\n\t\t\t\tcontent: { kind: \"base\", version: 1, value: { index, text: \"x\".repeat(128) } },\n\t\t\t});\n\t\t}\n\t\tawait storage.commit(writes, BACKGROUND_CONTEXT);\n\t}\n\n\tconst replayEntries = await Promise.all(\n\t\tREPLAY_TAILS.map(async (tail) => {\n\t\t\tconst id = await storage.mintId<DocumentId>();\n\t\t\treturn { tail, id };\n\t\t}),\n\t);\n\tawait storage.commit(\n\t\treplayEntries.map(({ tail, id }) => ({\n\t\t\ttype: \"document.create\" as const,\n\t\t\trecord: {\n\t\t\t\tid,\n\t\t\t\tkind: \"benchmark.replay\",\n\t\t\t\tkey: String(tail),\n\t\t\t\tscope: { kind: \"conversation\" as const, conversationId: ROOT_CONVERSATION_ID },\n\t\t\t\thistory: \"rewindable\" as const,\n\t\t\t\tfork: \"asOf\" as const,\n\t\t\t},\n\t\t\tcontent: { kind: \"base\" as const, version: 1, value: { count: 0, text: \"x\".repeat(64) } },\n\t\t})),\n\t\tBACKGROUND_CONTEXT,\n\t);\n\tfor (let count = 1; count <= REPLAY_TAILS.at(-1)!; count++) {\n\t\tawait storage.commit(\n\t\t\treplayEntries\n\t\t\t\t.filter(({ tail }) => count <= tail)\n\t\t\t\t.map(({ id }) => ({\n\t\t\t\t\ttype: \"document.change\" as const,\n\t\t\t\t\tid,\n\t\t\t\t\tcontent: { kind: \"delta\" as const, version: 1, ops: [[\"s\", [\"count\"], count] as const] },\n\t\t\t\t})),\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t}\n\n\tconst historicalDocumentId = await storage.mintId<DocumentId>();\n\tconst historicalRecord = {\n\t\tid: historicalDocumentId,\n\t\tkind: \"benchmark.history\",\n\t\tscope: { kind: \"conversation\", conversationId: ROOT_CONVERSATION_ID },\n\t\thistory: \"rewindable\",\n\t\tfork: \"asOf\",\n\t} satisfies DocumentCreate;\n\tawait storage.commit(\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"document.create\",\n\t\t\t\trecord: historicalRecord,\n\t\t\t\tcontent: { kind: \"base\", version: 1, value: { count: 0 } },\n\t\t\t},\n\t\t],\n\t\tBACKGROUND_CONTEXT,\n\t);\n\tlet ancientAt: Seq | undefined;\n\tfor (let count = 1; count <= HISTORY_SEGMENT_LENGTH; count++) {\n\t\tancientAt = await storage.commit(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\tid: historicalDocumentId,\n\t\t\t\t\tcontent: { kind: \"delta\", version: 1, ops: [[\"s\", [\"count\"], count]] },\n\t\t\t\t},\n\t\t\t],\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t}\n\tawait storage.commit(\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"document.change\",\n\t\t\t\tid: historicalDocumentId,\n\t\t\t\tcontent: { kind: \"base\", version: 1, value: { count: HISTORY_SEGMENT_LENGTH } },\n\t\t\t},\n\t\t],\n\t\tBACKGROUND_CONTEXT,\n\t);\n\tif (ancientAt === undefined) throw new Error(\"Benchmark history seed produced no commits\");\n\tlet recentAt = ancientAt;\n\tfor (let count = HISTORY_SEGMENT_LENGTH + 1; count <= HISTORY_SEGMENT_LENGTH * 2; count++) {\n\t\trecentAt = await storage.commit(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\tid: historicalDocumentId,\n\t\t\t\t\tcontent: { kind: \"delta\", version: 1, ops: [[\"s\", [\"count\"], count]] },\n\t\t\t\t},\n\t\t\t],\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t}\n\n\tif (firstEntryId === undefined) throw new Error(\"Benchmark scale must create entries\");\n\tlet parentConversationId = ROOT_CONVERSATION_ID;\n\tlet parentAt = firstEntryId;\n\tlet deepestConversationId = ROOT_CONVERSATION_ID;\n\tfor (let depth = 0; depth < FORK_DEPTH; depth++) {\n\t\tconst conversationId = await storage.mintId<ConversationId>();\n\t\tawait storage.commit(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttype: \"conversation\",\n\t\t\t\t\tvalue: { id: conversationId, parent: { conversationId: parentConversationId, at: parentAt } },\n\t\t\t\t},\n\t\t\t],\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t\tconst ids = await Promise.all(Array.from({ length: ENTRIES_PER_FORK }, () => storage.mintId<EntryId>()));\n\t\tawait storage.commit(\n\t\t\tids.map((id, index) => ({\n\t\t\t\ttype: \"entry\" as const,\n\t\t\t\tvalue: {\n\t\t\t\t\tid,\n\t\t\t\t\tconversationId,\n\t\t\t\t\tkind: \"benchmark.fork\",\n\t\t\t\t\tdata: { depth, index },\n\t\t\t\t},\n\t\t\t})),\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t\tparentConversationId = conversationId;\n\t\tparentAt = ids.at(-1)!;\n\t\tdeepestConversationId = conversationId;\n\t}\n\n\tif (exactDocumentId === undefined) throw new Error(\"Benchmark scale must create documents\");\n\treturn {\n\t\tfirstEntryId,\n\t\tfilteredTaskCount: Math.min(50, Math.ceil(scale.taskCount / 60)),\n\t\texactDocumentId,\n\t\texactDocumentKey: `key-${scale.documentCount - 1}`,\n\t\treplayDocumentIds: Object.fromEntries(replayEntries.map(({ tail, id }) => [tail, id])) as Record<\n\t\t\t(typeof REPLAY_TAILS)[number],\n\t\t\tDocumentId\n\t\t>,\n\t\thistoricalDocumentId,\n\t\tancientAt,\n\t\trecentAt,\n\t\tdeepestConversationId,\n\t\tancestorHeadEntryId: firstEntryId,\n\t};\n}\n\nexport type StorageReadBenchmark = {\n\treadonly name: string;\n\trun(storage: Storage, dataset: StorageBenchmarkDataset): Promise<number>;\n\texpected(dataset: StorageBenchmarkDataset): number;\n};\n\nexport const STORAGE_READ_BENCHMARKS: readonly StorageReadBenchmark[] = [\n\t{\n\t\tname: \"exact entry lookup\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (await storage.entry(dataset.firstEntryId, BACKGROUND_CONTEXT))?.entry.id ?? -1;\n\t\t},\n\t\texpected: ({ firstEntryId }) => firstEntryId,\n\t},\n\t{\n\t\tname: \"entry page scan (100)\",\n\t\tasync run(storage) {\n\t\t\treturn (\n\t\t\t\tawait storage.scanEntries({ conversationId: ROOT_CONVERSATION_ID }, 100, undefined, BACKGROUND_CONTEXT)\n\t\t\t).items.length;\n\t\t},\n\t\texpected: () => 100,\n\t},\n\t{\n\t\tname: \"filtered task scan (50)\",\n\t\tasync run(storage) {\n\t\t\treturn (\n\t\t\t\tawait storage.scanTasks(\n\t\t\t\t\t{ kind: \"benchmark.filtered\", status: \"pending\", background: true },\n\t\t\t\t\t50,\n\t\t\t\t\tundefined,\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t)\n\t\t\t).items.length;\n\t\t},\n\t\texpected: ({ filteredTaskCount }) => filteredTaskCount,\n\t},\n\t{\n\t\tname: \"exact document address among many\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (\n\t\t\t\t(\n\t\t\t\t\tawait storage.findDocument(\n\t\t\t\t\t\t{ kind: \"benchmark.family\", key: dataset.exactDocumentKey, scope: { kind: \"session\" } },\n\t\t\t\t\t\t\"current\",\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t)\n\t\t\t\t)?.id ?? -1\n\t\t\t);\n\t\t},\n\t\texpected: ({ exactDocumentId }) => exactDocumentId,\n\t},\n\t...REPLAY_TAILS.map(\n\t\t(tail): StorageReadBenchmark => ({\n\t\t\tname: `document replay tail (${tail})`,\n\t\t\tasync run(storage, dataset) {\n\t\t\t\treturn Number(\n\t\t\t\t\t(await storage.document(dataset.replayDocumentIds[tail], \"current\", BACKGROUND_CONTEXT))?.value.count,\n\t\t\t\t);\n\t\t\t},\n\t\t\texpected: () => tail,\n\t\t}),\n\t),\n\t{\n\t\tname: \"ancient historical read before newer base\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn Number(\n\t\t\t\t(await storage.document(dataset.historicalDocumentId, dataset.ancientAt, BACKGROUND_CONTEXT))?.value.count,\n\t\t\t);\n\t\t},\n\t\texpected: () => HISTORY_SEGMENT_LENGTH,\n\t},\n\t{\n\t\tname: \"recent historical read after newer base\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn Number(\n\t\t\t\t(await storage.document(dataset.historicalDocumentId, dataset.recentAt, BACKGROUND_CONTEXT))?.value.count,\n\t\t\t);\n\t\t},\n\t\texpected: () => HISTORY_SEGMENT_LENGTH * 2,\n\t},\n\t{\n\t\tname: \"fork-depth history scan (100)\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (\n\t\t\t\tawait storage.scanEntries(\n\t\t\t\t\t{ conversationId: dataset.deepestConversationId },\n\t\t\t\t\t100,\n\t\t\t\t\tundefined,\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t)\n\t\t\t).items.length;\n\t\t},\n\t\texpected: () => 100,\n\t},\n\t{\n\t\tname: \"fork-depth head lookup\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (\n\t\t\t\t(await storage.findLatestHeadMarker(dataset.deepestConversationId, undefined, BACKGROUND_CONTEXT))?.id ?? -1\n\t\t\t);\n\t\t},\n\t\texpected: ({ ancestorHeadEntryId }) => ancestorHeadEntryId,\n\t},\n];\n\nexport type StorageWriteBenchmark = {\n\treadonly name: string;\n\treadonly expected: number;\n\trun(storage: Storage): Promise<number>;\n};\n\n/** Seed the common state expected by every write benchmark sample. */\nexport async function seedStorageWriteBenchmark(storage: Storage): Promise<void> {\n\tawait storage.commit([{ type: \"conversation\", value: { id: ROOT_CONVERSATION_ID } }], BACKGROUND_CONTEXT);\n\tawait storage.commit(\n\t\tawait Promise.all(\n\t\t\tArray.from({ length: 100 }, async (_, index) => ({\n\t\t\t\ttype: \"entry\" as const,\n\t\t\t\tvalue: {\n\t\t\t\t\tid: await storage.mintId<EntryId>(),\n\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\tkind: \"benchmark.baseline\",\n\t\t\t\t\tdata: { index },\n\t\t\t\t},\n\t\t\t})),\n\t\t),\n\t\tBACKGROUND_CONTEXT,\n\t);\n}\n\nexport const STORAGE_WRITE_BENCHMARKS: readonly StorageWriteBenchmark[] = [\n\t{\n\t\tname: \"commit one entry\",\n\t\texpected: 1,\n\t\tasync run(storage) {\n\t\t\tconst id = await storage.mintId<EntryId>();\n\t\t\tawait storage.commit(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\t\t\tkind: \"benchmark.write\",\n\t\t\t\t\t\t\tdata: { text: \"x\".repeat(128) },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\treturn 1;\n\t\t},\n\t},\n\t{\n\t\tname: \"commit 100 entries\",\n\t\texpected: 100,\n\t\tasync run(storage) {\n\t\t\tconst writes = await Promise.all(\n\t\t\t\tArray.from(\n\t\t\t\t\t{ length: 100 },\n\t\t\t\t\tasync (_, index): Promise<StorageWrite> => ({\n\t\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tid: await storage.mintId<EntryId>(),\n\t\t\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\t\t\tkind: \"benchmark.write\",\n\t\t\t\t\t\t\tdata: { index, text: \"x\".repeat(128) },\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait storage.commit(writes, BACKGROUND_CONTEXT);\n\t\t\treturn writes.length;\n\t\t},\n\t},\n\t{\n\t\tname: \"commit mixed entry/task/submission/document\",\n\t\texpected: 4,\n\t\tasync run(storage) {\n\t\t\tconst entryId = await storage.mintId<EntryId>();\n\t\t\tconst taskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst submissionId = await storage.mintId<SubmissionId>();\n\t\t\tconst documentId = await storage.mintId<DocumentId>();\n\t\t\tconst writes: readonly StorageWrite[] = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\tvalue: { id: entryId, conversationId: ROOT_CONVERSATION_ID, kind: \"benchmark.mixed\" },\n\t\t\t\t},\n\t\t\t\t{ type: \"task\", value: task(taskId, taskId) },\n\t\t\t\t{\n\t\t\t\t\ttype: \"submission\",\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tid: submissionId,\n\t\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\t\trequestId: `benchmark-${submissionId}`,\n\t\t\t\t\t\ttype: \"write\",\n\t\t\t\t\t\tstatus: \"done\",\n\t\t\t\t\t\tentry: entryId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\trecord: { id: documentId, kind: \"benchmark.mixed\", key: String(documentId), scope: { kind: \"session\" } },\n\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { entryId, taskId } },\n\t\t\t\t},\n\t\t\t];\n\t\t\tawait storage.commit(writes, BACKGROUND_CONTEXT);\n\t\t\treturn writes.length;\n\t\t},\n\t},\n];\n"]}
|
|
1
|
+
{"version":3,"file":"storage-benchmark.js","sourceRoot":"","sources":["../../src/testing/storage-benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonValue } from \"@earendil-works/chord\";\nimport { BACKGROUND_CONTEXT } from \"@earendil-works/chord/context\";\nimport type {\n\tConversationId,\n\tDocumentCreate,\n\tDocumentId,\n\tEntryId,\n\tSeq,\n\tStorage,\n\tStorageWrite,\n\tSubmissionId,\n\tTaskId,\n\tTaskRecord,\n} from \"../types.ts\";\nimport { ROOT_CONVERSATION_ID } from \"../types.ts\";\nimport { commitWrites } from \"./commit-writes.ts\";\n\nexport type StorageBenchmarkScale = {\n\treadonly name: string;\n\treadonly entryCount: number;\n\treadonly taskCount: number;\n\treadonly documentCount: number;\n};\n\nexport const STORAGE_MEMORY_SCALES: readonly StorageBenchmarkScale[] = [\n\t{ name: \"1k\", entryCount: 1_000, taskCount: 200, documentCount: 200 },\n\t{ name: \"10k\", entryCount: 10_000, taskCount: 2_000, documentCount: 2_000 },\n];\n\nexport const TIMING_SCALE: StorageBenchmarkScale = {\n\tname: \"timing\",\n\tentryCount: 1_000,\n\ttaskCount: 300,\n\tdocumentCount: 300,\n};\n\nconst REPLAY_TAILS = [0, 16, 128, 1_024] as const;\nconst HISTORY_SEGMENT_LENGTH = 128;\nconst FORK_DEPTH = 8;\nconst ENTRIES_PER_FORK = 32;\nconst BATCH_SIZE = 100;\n\nexport function storageBenchmarkPrimaryRecordCount(scale: StorageBenchmarkScale): number {\n\treturn (\n\t\t1 +\n\t\tscale.entryCount +\n\t\tscale.taskCount +\n\t\tscale.documentCount +\n\t\tREPLAY_TAILS.length +\n\t\t1 +\n\t\tFORK_DEPTH * (1 + ENTRIES_PER_FORK)\n\t);\n}\n\ntype StoredTask = TaskRecord<JsonValue, JsonValue, JsonValue>;\n\nexport type StorageBenchmarkDataset = {\n\treadonly firstEntryId: EntryId;\n\treadonly filteredTaskCount: number;\n\treadonly exactDocumentId: DocumentId;\n\treadonly exactDocumentKey: string;\n\treadonly replayDocumentIds: Readonly<Record<(typeof REPLAY_TAILS)[number], DocumentId>>;\n\treadonly historicalDocumentId: DocumentId;\n\treadonly ancientAt: Seq;\n\treadonly recentAt: Seq;\n\treadonly deepestConversationId: ConversationId;\n\treadonly ancestorHeadEntryId: EntryId;\n};\n\nfunction task(id: TaskId<JsonValue>, index: number): StoredTask {\n\tconst statuses = [\"pending\", \"running\", \"terminal\"] as const;\n\tconst status = statuses[index % statuses.length];\n\tconst common = {\n\t\tid,\n\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\tkind: index % 4 === 0 ? \"benchmark.filtered\" : \"benchmark.other\",\n\t\tversion: 1,\n\t\tinput: { index },\n\t\tbackground: index % 5 === 0,\n\t\tabortRequested: index % 7 === 0,\n\t};\n\tif (status === \"terminal\") {\n\t\treturn { ...common, state: { status, outcome: { status: \"completed\", result: { index } } } };\n\t}\n\treturn { ...common, state: { status, checkpoint: { index, payload: \"x\".repeat(64) } } };\n}\n\n/** Seed deterministic representative data through only the public `Storage` contract. */\nexport async function seedStorageBenchmark(\n\tstorage: Storage,\n\tscale: StorageBenchmarkScale = TIMING_SCALE,\n): Promise<StorageBenchmarkDataset> {\n\tawait commitWrites(storage, [{ type: \"conversation\", value: { id: ROOT_CONVERSATION_ID } }], BACKGROUND_CONTEXT);\n\n\tlet firstEntryId: EntryId | undefined;\n\tfor (let start = 0; start < scale.entryCount; start += BATCH_SIZE) {\n\t\tconst writes: StorageWrite[] = [];\n\t\tfor (let index = start; index < Math.min(start + BATCH_SIZE, scale.entryCount); index++) {\n\t\t\tconst id = await storage.mintId<EntryId>();\n\t\t\tif (index === 0) firstEntryId = id;\n\t\t\twrites.push({\n\t\t\t\ttype: \"entry\",\n\t\t\t\tvalue: {\n\t\t\t\t\tid,\n\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\tkind: \"benchmark.entry\",\n\t\t\t\t\t...(index === 0 ? { head: id } : {}),\n\t\t\t\t\tdata: { index, text: `entry-${index}-${\"x\".repeat(96)}` },\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t\tawait commitWrites(storage, writes, BACKGROUND_CONTEXT);\n\t}\n\n\tfor (let start = 0; start < scale.taskCount; start += BATCH_SIZE) {\n\t\tconst writes: StorageWrite[] = [];\n\t\tfor (let index = start; index < Math.min(start + BATCH_SIZE, scale.taskCount); index++) {\n\t\t\twrites.push({ type: \"task\", value: task(await storage.mintId<TaskId<JsonValue>>(), index) });\n\t\t}\n\t\tawait commitWrites(storage, writes, BACKGROUND_CONTEXT);\n\t}\n\n\tlet exactDocumentId: DocumentId | undefined;\n\tfor (let start = 0; start < scale.documentCount; start += BATCH_SIZE) {\n\t\tconst writes: StorageWrite[] = [];\n\t\tfor (let index = start; index < Math.min(start + BATCH_SIZE, scale.documentCount); index++) {\n\t\t\tconst id = await storage.mintId<DocumentId>();\n\t\t\texactDocumentId = id;\n\t\t\twrites.push({\n\t\t\t\ttype: \"document.create\",\n\t\t\t\trecord: { id, kind: \"benchmark.family\", key: `key-${index}`, scope: { kind: \"session\" } },\n\t\t\t\tcontent: { kind: \"base\", version: 1, value: { index, text: \"x\".repeat(128) } },\n\t\t\t});\n\t\t}\n\t\tawait commitWrites(storage, writes, BACKGROUND_CONTEXT);\n\t}\n\n\tconst replayEntries = await Promise.all(\n\t\tREPLAY_TAILS.map(async (tail) => {\n\t\t\tconst id = await storage.mintId<DocumentId>();\n\t\t\treturn { tail, id };\n\t\t}),\n\t);\n\tawait commitWrites(\n\t\tstorage,\n\t\treplayEntries.map(({ tail, id }) => ({\n\t\t\ttype: \"document.create\" as const,\n\t\t\trecord: {\n\t\t\t\tid,\n\t\t\t\tkind: \"benchmark.replay\",\n\t\t\t\tkey: String(tail),\n\t\t\t\tscope: { kind: \"conversation\" as const, conversationId: ROOT_CONVERSATION_ID },\n\t\t\t\thistory: \"rewindable\" as const,\n\t\t\t\tfork: \"asOf\" as const,\n\t\t\t},\n\t\t\tcontent: { kind: \"base\" as const, version: 1, value: { count: 0, text: \"x\".repeat(64) } },\n\t\t})),\n\t\tBACKGROUND_CONTEXT,\n\t);\n\tfor (let count = 1; count <= REPLAY_TAILS.at(-1)!; count++) {\n\t\tawait commitWrites(\n\t\t\tstorage,\n\t\t\treplayEntries\n\t\t\t\t.filter(({ tail }) => count <= tail)\n\t\t\t\t.map(({ id }) => ({\n\t\t\t\t\ttype: \"document.change\" as const,\n\t\t\t\t\tid,\n\t\t\t\t\tcontent: { kind: \"delta\" as const, version: 1, ops: [[\"s\", [\"count\"], count] as const] },\n\t\t\t\t})),\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t}\n\n\tconst historicalDocumentId = await storage.mintId<DocumentId>();\n\tconst historicalRecord = {\n\t\tid: historicalDocumentId,\n\t\tkind: \"benchmark.history\",\n\t\tscope: { kind: \"conversation\", conversationId: ROOT_CONVERSATION_ID },\n\t\thistory: \"rewindable\",\n\t\tfork: \"asOf\",\n\t} satisfies DocumentCreate;\n\tawait commitWrites(\n\t\tstorage,\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"document.create\",\n\t\t\t\trecord: historicalRecord,\n\t\t\t\tcontent: { kind: \"base\", version: 1, value: { count: 0 } },\n\t\t\t},\n\t\t],\n\t\tBACKGROUND_CONTEXT,\n\t);\n\tlet ancientAt: Seq | undefined;\n\tfor (let count = 1; count <= HISTORY_SEGMENT_LENGTH; count++) {\n\t\tancientAt = await commitWrites(\n\t\t\tstorage,\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\tid: historicalDocumentId,\n\t\t\t\t\tcontent: { kind: \"delta\", version: 1, ops: [[\"s\", [\"count\"], count]] },\n\t\t\t\t},\n\t\t\t],\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t}\n\tawait commitWrites(\n\t\tstorage,\n\t\t[\n\t\t\t{\n\t\t\t\ttype: \"document.change\",\n\t\t\t\tid: historicalDocumentId,\n\t\t\t\tcontent: { kind: \"base\", version: 1, value: { count: HISTORY_SEGMENT_LENGTH } },\n\t\t\t},\n\t\t],\n\t\tBACKGROUND_CONTEXT,\n\t);\n\tif (ancientAt === undefined) throw new Error(\"Benchmark history seed produced no commits\");\n\tlet recentAt = ancientAt;\n\tfor (let count = HISTORY_SEGMENT_LENGTH + 1; count <= HISTORY_SEGMENT_LENGTH * 2; count++) {\n\t\trecentAt = await commitWrites(\n\t\t\tstorage,\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttype: \"document.change\",\n\t\t\t\t\tid: historicalDocumentId,\n\t\t\t\t\tcontent: { kind: \"delta\", version: 1, ops: [[\"s\", [\"count\"], count]] },\n\t\t\t\t},\n\t\t\t],\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t}\n\n\tif (firstEntryId === undefined) throw new Error(\"Benchmark scale must create entries\");\n\tlet parentConversationId = ROOT_CONVERSATION_ID;\n\tlet parentAt = firstEntryId;\n\tlet deepestConversationId = ROOT_CONVERSATION_ID;\n\tfor (let depth = 0; depth < FORK_DEPTH; depth++) {\n\t\tconst conversationId = await storage.mintId<ConversationId>();\n\t\tawait commitWrites(\n\t\t\tstorage,\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\ttype: \"conversation\",\n\t\t\t\t\tvalue: { id: conversationId, parent: { conversationId: parentConversationId, at: parentAt } },\n\t\t\t\t},\n\t\t\t],\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t\tconst ids = await Promise.all(Array.from({ length: ENTRIES_PER_FORK }, () => storage.mintId<EntryId>()));\n\t\tawait commitWrites(\n\t\t\tstorage,\n\t\t\tids.map((id, index) => ({\n\t\t\t\ttype: \"entry\" as const,\n\t\t\t\tvalue: {\n\t\t\t\t\tid,\n\t\t\t\t\tconversationId,\n\t\t\t\t\tkind: \"benchmark.fork\",\n\t\t\t\t\tdata: { depth, index },\n\t\t\t\t},\n\t\t\t})),\n\t\t\tBACKGROUND_CONTEXT,\n\t\t);\n\t\tparentConversationId = conversationId;\n\t\tparentAt = ids.at(-1)!;\n\t\tdeepestConversationId = conversationId;\n\t}\n\n\tif (exactDocumentId === undefined) throw new Error(\"Benchmark scale must create documents\");\n\treturn {\n\t\tfirstEntryId,\n\t\tfilteredTaskCount: Math.min(50, Math.ceil(scale.taskCount / 60)),\n\t\texactDocumentId,\n\t\texactDocumentKey: `key-${scale.documentCount - 1}`,\n\t\treplayDocumentIds: Object.fromEntries(replayEntries.map(({ tail, id }) => [tail, id])) as Record<\n\t\t\t(typeof REPLAY_TAILS)[number],\n\t\t\tDocumentId\n\t\t>,\n\t\thistoricalDocumentId,\n\t\tancientAt,\n\t\trecentAt,\n\t\tdeepestConversationId,\n\t\tancestorHeadEntryId: firstEntryId,\n\t};\n}\n\nexport type StorageReadBenchmark = {\n\treadonly name: string;\n\trun(storage: Storage, dataset: StorageBenchmarkDataset): Promise<number>;\n\texpected(dataset: StorageBenchmarkDataset): number;\n};\n\nexport const STORAGE_READ_BENCHMARKS: readonly StorageReadBenchmark[] = [\n\t{\n\t\tname: \"exact entry lookup\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (await storage.entry(dataset.firstEntryId, BACKGROUND_CONTEXT))?.entry.id ?? -1;\n\t\t},\n\t\texpected: ({ firstEntryId }) => firstEntryId,\n\t},\n\t{\n\t\tname: \"entry page scan (100)\",\n\t\tasync run(storage) {\n\t\t\treturn (\n\t\t\t\tawait storage.scanEntries({ conversationId: ROOT_CONVERSATION_ID }, 100, undefined, BACKGROUND_CONTEXT)\n\t\t\t).items.length;\n\t\t},\n\t\texpected: () => 100,\n\t},\n\t{\n\t\tname: \"filtered task scan (50)\",\n\t\tasync run(storage) {\n\t\t\treturn (\n\t\t\t\tawait storage.scanTasks(\n\t\t\t\t\t{ kind: \"benchmark.filtered\", status: \"pending\", background: true },\n\t\t\t\t\t50,\n\t\t\t\t\tundefined,\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t)\n\t\t\t).items.length;\n\t\t},\n\t\texpected: ({ filteredTaskCount }) => filteredTaskCount,\n\t},\n\t{\n\t\tname: \"exact document address among many\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (\n\t\t\t\t(\n\t\t\t\t\tawait storage.findDocument(\n\t\t\t\t\t\t{ kind: \"benchmark.family\", key: dataset.exactDocumentKey, scope: { kind: \"session\" } },\n\t\t\t\t\t\t\"current\",\n\t\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t\t)\n\t\t\t\t)?.id ?? -1\n\t\t\t);\n\t\t},\n\t\texpected: ({ exactDocumentId }) => exactDocumentId,\n\t},\n\t...REPLAY_TAILS.map(\n\t\t(tail): StorageReadBenchmark => ({\n\t\t\tname: `document replay tail (${tail})`,\n\t\t\tasync run(storage, dataset) {\n\t\t\t\treturn Number(\n\t\t\t\t\t(await storage.document(dataset.replayDocumentIds[tail], \"current\", BACKGROUND_CONTEXT))?.value.count,\n\t\t\t\t);\n\t\t\t},\n\t\t\texpected: () => tail,\n\t\t}),\n\t),\n\t{\n\t\tname: \"ancient historical read before newer base\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn Number(\n\t\t\t\t(await storage.document(dataset.historicalDocumentId, dataset.ancientAt, BACKGROUND_CONTEXT))?.value.count,\n\t\t\t);\n\t\t},\n\t\texpected: () => HISTORY_SEGMENT_LENGTH,\n\t},\n\t{\n\t\tname: \"recent historical read after newer base\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn Number(\n\t\t\t\t(await storage.document(dataset.historicalDocumentId, dataset.recentAt, BACKGROUND_CONTEXT))?.value.count,\n\t\t\t);\n\t\t},\n\t\texpected: () => HISTORY_SEGMENT_LENGTH * 2,\n\t},\n\t{\n\t\tname: \"fork-depth history scan (100)\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (\n\t\t\t\tawait storage.scanEntries(\n\t\t\t\t\t{ conversationId: dataset.deepestConversationId },\n\t\t\t\t\t100,\n\t\t\t\t\tundefined,\n\t\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t\t)\n\t\t\t).items.length;\n\t\t},\n\t\texpected: () => 100,\n\t},\n\t{\n\t\tname: \"fork-depth head lookup\",\n\t\tasync run(storage, dataset) {\n\t\t\treturn (\n\t\t\t\t(await storage.findLatestHeadMarker(dataset.deepestConversationId, undefined, BACKGROUND_CONTEXT))?.id ?? -1\n\t\t\t);\n\t\t},\n\t\texpected: ({ ancestorHeadEntryId }) => ancestorHeadEntryId,\n\t},\n];\n\nexport type StorageWriteBenchmark = {\n\treadonly name: string;\n\treadonly expected: number;\n\trun(storage: Storage): Promise<number>;\n};\n\n/** Seed the common state expected by every write benchmark sample. */\nexport async function seedStorageWriteBenchmark(storage: Storage): Promise<void> {\n\tawait commitWrites(storage, [{ type: \"conversation\", value: { id: ROOT_CONVERSATION_ID } }], BACKGROUND_CONTEXT);\n\tawait commitWrites(\n\t\tstorage,\n\t\tawait Promise.all(\n\t\t\tArray.from({ length: 100 }, async (_, index) => ({\n\t\t\t\ttype: \"entry\" as const,\n\t\t\t\tvalue: {\n\t\t\t\t\tid: await storage.mintId<EntryId>(),\n\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\tkind: \"benchmark.baseline\",\n\t\t\t\t\tdata: { index },\n\t\t\t\t},\n\t\t\t})),\n\t\t),\n\t\tBACKGROUND_CONTEXT,\n\t);\n}\n\nexport const STORAGE_WRITE_BENCHMARKS: readonly StorageWriteBenchmark[] = [\n\t{\n\t\tname: \"commit one entry\",\n\t\texpected: 1,\n\t\tasync run(storage) {\n\t\t\tconst id = await storage.mintId<EntryId>();\n\t\t\tawait commitWrites(\n\t\t\t\tstorage,\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\t\t\tkind: \"benchmark.write\",\n\t\t\t\t\t\t\tdata: { text: \"x\".repeat(128) },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tBACKGROUND_CONTEXT,\n\t\t\t);\n\t\t\treturn 1;\n\t\t},\n\t},\n\t{\n\t\tname: \"commit 100 entries\",\n\t\texpected: 100,\n\t\tasync run(storage) {\n\t\t\tconst writes = await Promise.all(\n\t\t\t\tArray.from(\n\t\t\t\t\t{ length: 100 },\n\t\t\t\t\tasync (_, index): Promise<StorageWrite> => ({\n\t\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\tid: await storage.mintId<EntryId>(),\n\t\t\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\t\t\tkind: \"benchmark.write\",\n\t\t\t\t\t\t\tdata: { index, text: \"x\".repeat(128) },\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\t\t\tawait commitWrites(storage, writes, BACKGROUND_CONTEXT);\n\t\t\treturn writes.length;\n\t\t},\n\t},\n\t{\n\t\tname: \"commit mixed entry/task/submission/document\",\n\t\texpected: 4,\n\t\tasync run(storage) {\n\t\t\tconst entryId = await storage.mintId<EntryId>();\n\t\t\tconst taskId = await storage.mintId<TaskId<JsonValue>>();\n\t\t\tconst submissionId = await storage.mintId<SubmissionId>();\n\t\t\tconst documentId = await storage.mintId<DocumentId>();\n\t\t\tconst writes: readonly StorageWrite[] = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"entry\",\n\t\t\t\t\tvalue: { id: entryId, conversationId: ROOT_CONVERSATION_ID, kind: \"benchmark.mixed\" },\n\t\t\t\t},\n\t\t\t\t{ type: \"task\", value: task(taskId, taskId) },\n\t\t\t\t{\n\t\t\t\t\ttype: \"submission\",\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tid: submissionId,\n\t\t\t\t\t\tconversationId: ROOT_CONVERSATION_ID,\n\t\t\t\t\t\trequestId: `benchmark-${submissionId}`,\n\t\t\t\t\t\ttype: \"write\",\n\t\t\t\t\t\tstatus: \"done\",\n\t\t\t\t\t\tentry: entryId,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"document.create\",\n\t\t\t\t\trecord: { id: documentId, kind: \"benchmark.mixed\", key: String(documentId), scope: { kind: \"session\" } },\n\t\t\t\t\tcontent: { kind: \"base\", version: 1, value: { entryId, taskId } },\n\t\t\t\t},\n\t\t\t];\n\t\t\tawait commitWrites(storage, writes, BACKGROUND_CONTEXT);\n\t\t\treturn writes.length;\n\t\t},\n\t},\n];\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-conformance.d.ts","sourceRoot":"","sources":["../../src/testing/storage-conformance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage-conformance.d.ts","sourceRoot":"","sources":["../../src/testing/storage-conformance.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAgC,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAsGlH,8GAA8G;AAC9G,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,SAAS,sBAAsB,EAAE,CAk7D9G"}
|