effect-dynamodb 1.9.5 → 1.11.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/dist/Aggregate.d.ts.map +1 -1
- package/dist/Aggregate.js +5 -42
- package/dist/Aggregate.js.map +1 -1
- package/dist/DynamoClient.d.ts +88 -5
- package/dist/DynamoClient.d.ts.map +1 -1
- package/dist/DynamoClient.js +158 -4
- package/dist/DynamoClient.js.map +1 -1
- package/dist/Entity.d.ts +35 -17
- package/dist/Entity.d.ts.map +1 -1
- package/dist/Entity.js +503 -16
- package/dist/Entity.js.map +1 -1
- package/dist/Table.d.ts +78 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +153 -0
- package/dist/Table.js.map +1 -1
- package/dist/VectorSearchEmulation.d.ts +101 -0
- package/dist/VectorSearchEmulation.d.ts.map +1 -0
- package/dist/VectorSearchEmulation.js +290 -0
- package/dist/VectorSearchEmulation.js.map +1 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/BoundCrud.d.ts +62 -48
- package/dist/internal/BoundCrud.d.ts.map +1 -1
- package/dist/internal/BoundCrud.js +7 -1
- package/dist/internal/BoundCrud.js.map +1 -1
- package/dist/internal/BoundVectorQuery.d.ts +130 -0
- package/dist/internal/BoundVectorQuery.d.ts.map +1 -0
- package/dist/internal/BoundVectorQuery.js +257 -0
- package/dist/internal/BoundVectorQuery.js.map +1 -0
- package/dist/internal/EntityCombinators.d.ts +16 -0
- package/dist/internal/EntityCombinators.d.ts.map +1 -1
- package/dist/internal/EntityCombinators.js +25 -1
- package/dist/internal/EntityCombinators.js.map +1 -1
- package/dist/internal/EntityOps.d.ts +19 -6
- package/dist/internal/EntityOps.d.ts.map +1 -1
- package/dist/internal/EntityOps.js +5 -2
- package/dist/internal/EntityOps.js.map +1 -1
- package/dist/internal/TransactableOps.d.ts +1 -1
- package/dist/internal/TransactableOps.d.ts.map +1 -1
- package/package.json +6 -6
package/dist/Table.d.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import type { DescribeTableCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
11
11
|
import type * as DynamoSchema from "@effect-dynamodb/schema/DynamoSchema.js";
|
|
12
12
|
import type { IndexDefinition } from "@effect-dynamodb/schema/KeyComposer.js";
|
|
13
|
+
import type { VectorIndexDefinition } from "@effect-dynamodb/schema/VectorIndex.js";
|
|
13
14
|
import { type Config, Context, Effect, Layer } from "effect";
|
|
14
15
|
import type { DynamoClientError } from "./DynamoClient.js";
|
|
15
16
|
/** Runtime table configuration injected via Effect Layer. */
|
|
@@ -34,7 +35,12 @@ export declare const resolveTtlAttributeName: (tc: TableConfig) => string;
|
|
|
34
35
|
/** Minimal entity shape for Table membership (avoids circular import with Entity.ts) */
|
|
35
36
|
interface EntityLike {
|
|
36
37
|
readonly _tag: "Entity";
|
|
38
|
+
readonly entityType?: string | undefined;
|
|
37
39
|
readonly indexes: Record<string, IndexDefinition>;
|
|
40
|
+
/** Normalized vector index definitions (absent on entities without any). */
|
|
41
|
+
readonly _vectorIndexes?: Record<string, VectorIndexDefinition> | undefined;
|
|
42
|
+
/** Domain field name → stored DynamoDB attribute name (`storedAs` renames). */
|
|
43
|
+
readonly _resolveDbName?: ((domainName: string) => string) | undefined;
|
|
38
44
|
readonly _configure: (schema: DynamoSchema.DynamoSchema, tableTag: Context.Service<TableConfig, TableConfig>) => void;
|
|
39
45
|
}
|
|
40
46
|
/** Minimal aggregate shape for Table membership (avoids circular import with Aggregate.ts) */
|
|
@@ -114,6 +120,69 @@ export declare const make: <const TEntities extends Record<string, EntityLike> =
|
|
|
114
120
|
readonly entities?: TEntities;
|
|
115
121
|
readonly aggregates?: TAggregates;
|
|
116
122
|
}) => Table<TEntities, TAggregates>;
|
|
123
|
+
/**
|
|
124
|
+
* Merge every registered entity's vector index declarations into one map keyed
|
|
125
|
+
* by physical index name, validating that all sharers agree.
|
|
126
|
+
*
|
|
127
|
+
* Sharing a physical vector index across entities is the norm in single-table
|
|
128
|
+
* designs — the quota is 5 per table — and it is safe precisely because the
|
|
129
|
+
* composed `__edd_vp_<name>__` partition value carries the entity type, so a
|
|
130
|
+
* search never crosses entity boundaries (see `DESIGN.md §14`).
|
|
131
|
+
*
|
|
132
|
+
* @throws when two entities disagree on `dimensions` or `distance` (EDD-9035),
|
|
133
|
+
* or when more than {@link MAX_VECTOR_INDEXES_PER_TABLE} distinct physical
|
|
134
|
+
* indexes are declared (EDD-9034).
|
|
135
|
+
*/
|
|
136
|
+
export declare const mergeVectorIndexes: (entities: Record<string, EntityLike>) => Map<string, MergedVectorIndex>;
|
|
137
|
+
/** A physical vector index resolved across every entity that declares it. */
|
|
138
|
+
export interface MergedVectorIndex {
|
|
139
|
+
/** The first declaring entity's definition — authoritative for dimensions/distance. */
|
|
140
|
+
readonly definition: VectorIndexDefinition;
|
|
141
|
+
/** Entity type of the first declarer, used in conflict messages. */
|
|
142
|
+
readonly owner: string;
|
|
143
|
+
/** Union of every sharer's declared `filters` (domain names). */
|
|
144
|
+
readonly filters: ReadonlyArray<string>;
|
|
145
|
+
/** Stored-name resolver for the first declarer's `storedAs` renames. */
|
|
146
|
+
readonly resolveDbName: (domainName: string) => string;
|
|
147
|
+
/**
|
|
148
|
+
* `AttributeDefinitions` scalar type per STORED filter attribute name,
|
|
149
|
+
* merged across sharers (EDD-9040 on conflict). CreateTable/UpdateTable must
|
|
150
|
+
* declare every SearchSchema element in `AttributeDefinitions`.
|
|
151
|
+
*/
|
|
152
|
+
readonly filterStoredTypes: Readonly<Record<string, "S" | "N">>;
|
|
153
|
+
}
|
|
154
|
+
/** Vector index definition for CreateTable / UpdateTable input. */
|
|
155
|
+
export interface VectorIndexSpec {
|
|
156
|
+
readonly IndexName: string;
|
|
157
|
+
readonly VectorAttribute: {
|
|
158
|
+
readonly AttributeName: string;
|
|
159
|
+
};
|
|
160
|
+
readonly Dimensions: number;
|
|
161
|
+
readonly DistanceFunction: "COSINE" | "EUCLIDEAN" | "DOT_PRODUCT";
|
|
162
|
+
readonly Projection: {
|
|
163
|
+
readonly ProjectionType: "ALL";
|
|
164
|
+
};
|
|
165
|
+
readonly SearchSchema?: Array<{
|
|
166
|
+
readonly AttributeName: string;
|
|
167
|
+
readonly SearchSchemaElementType: "HASH" | "INLINE_FILTER";
|
|
168
|
+
}> | undefined;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Map a normalized {@link VectorIndexDefinition} onto the AWS `VectorIndex`
|
|
172
|
+
* shape. The composed partition attribute is always the single `HASH` element;
|
|
173
|
+
* declared filters follow as `INLINE_FILTER` elements.
|
|
174
|
+
*
|
|
175
|
+
* `filters` may be supplied pre-unioned across every entity that shares the
|
|
176
|
+
* physical index (see {@link mergeVectorIndexes}) — a shared index must declare
|
|
177
|
+
* the union, or a sharer's filter attribute would simply not be indexed.
|
|
178
|
+
*
|
|
179
|
+
* Filter names are emitted as STORED attribute names: an entity may rename a
|
|
180
|
+
* field with `storedAs`, and the index has to point at what is actually on disk.
|
|
181
|
+
*/
|
|
182
|
+
export declare const toVectorIndexSpec: (definition: VectorIndexDefinition, options?: {
|
|
183
|
+
readonly filters?: ReadonlyArray<string> | undefined;
|
|
184
|
+
readonly resolveDbName?: ((domainName: string) => string) | undefined;
|
|
185
|
+
}) => VectorIndexSpec;
|
|
117
186
|
/** A single key schema element for CreateTable input. */
|
|
118
187
|
export interface KeySchemaElement {
|
|
119
188
|
readonly AttributeName: string;
|
|
@@ -150,6 +219,15 @@ export interface TableDefinition {
|
|
|
150
219
|
readonly AttributeDefinitions: Array<AttributeDefinition>;
|
|
151
220
|
readonly GlobalSecondaryIndexes?: Array<GlobalSecondaryIndex> | undefined;
|
|
152
221
|
readonly LocalSecondaryIndexes?: Array<LocalSecondaryIndex> | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* Merged vector indexes from every registered entity, deduplicated by physical
|
|
224
|
+
* name. Every `SearchSchema` element (the composed HASH partition attribute
|
|
225
|
+
* and each INLINE_FILTER attribute) is also added to `AttributeDefinitions` —
|
|
226
|
+
* the live service rejects the table otherwise ("One element in SearchSchema
|
|
227
|
+
* is not defined in attribute definitions"). The vector attribute itself is
|
|
228
|
+
* NOT declared; DynamoDB derives it from the `VectorIndex` declaration.
|
|
229
|
+
*/
|
|
230
|
+
readonly VectorIndexes?: Array<VectorIndexSpec> | undefined;
|
|
153
231
|
}
|
|
154
232
|
/**
|
|
155
233
|
* Derive CreateTable input from a table's registered members.
|
package/dist/Table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../src/Table.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../src/Table.ts"],"names":[],"mappings":"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"}
|
package/dist/Table.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Use `DynamoClient.make()` to get a typed client with bound entity operations.
|
|
9
9
|
*/
|
|
10
|
+
import { MAX_INLINE_FILTERS, MAX_VECTOR_INDEXES_PER_TABLE, toWireDistanceFunction, } from "@effect-dynamodb/schema/VectorIndex.js";
|
|
10
11
|
import { Context, Effect, Layer } from "effect";
|
|
11
12
|
/** Default attribute name used for DynamoDB TTL when {@link TableConfig.ttlAttributeName} is unset. */
|
|
12
13
|
export const DEFAULT_TTL_ATTRIBUTE_NAME = "_ttl";
|
|
@@ -51,6 +52,11 @@ export const make = (config) => {
|
|
|
51
52
|
entity._configure(config.schema, Tag);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
55
|
+
// Cross-entity vector index agreement. `Dimensions` and `DistanceFunction` are
|
|
56
|
+
// immutable at the DynamoDB level, so two entities sharing a physical vector
|
|
57
|
+
// index cannot disagree — catch it at definition time rather than on the
|
|
58
|
+
// CreateTable round trip.
|
|
59
|
+
validateSharedVectorIndexes(entities);
|
|
54
60
|
return {
|
|
55
61
|
_tag: "Table",
|
|
56
62
|
schema: config.schema,
|
|
@@ -70,6 +76,122 @@ export const make = (config) => {
|
|
|
70
76
|
})),
|
|
71
77
|
};
|
|
72
78
|
};
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// Vector index merging + validation
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
/**
|
|
83
|
+
* Merge every registered entity's vector index declarations into one map keyed
|
|
84
|
+
* by physical index name, validating that all sharers agree.
|
|
85
|
+
*
|
|
86
|
+
* Sharing a physical vector index across entities is the norm in single-table
|
|
87
|
+
* designs — the quota is 5 per table — and it is safe precisely because the
|
|
88
|
+
* composed `__edd_vp_<name>__` partition value carries the entity type, so a
|
|
89
|
+
* search never crosses entity boundaries (see `DESIGN.md §14`).
|
|
90
|
+
*
|
|
91
|
+
* @throws when two entities disagree on `dimensions` or `distance` (EDD-9035),
|
|
92
|
+
* or when more than {@link MAX_VECTOR_INDEXES_PER_TABLE} distinct physical
|
|
93
|
+
* indexes are declared (EDD-9034).
|
|
94
|
+
*/
|
|
95
|
+
export const mergeVectorIndexes = (entities) => {
|
|
96
|
+
const merged = new Map();
|
|
97
|
+
for (const [entityKey, entity] of Object.entries(entities)) {
|
|
98
|
+
const declared = entity._vectorIndexes;
|
|
99
|
+
if (!declared)
|
|
100
|
+
continue;
|
|
101
|
+
const owner = entity.entityType ?? entityKey;
|
|
102
|
+
const resolveDbName = entity._resolveDbName ?? ((domainName) => domainName);
|
|
103
|
+
for (const definition of Object.values(declared)) {
|
|
104
|
+
const existing = merged.get(definition.index);
|
|
105
|
+
if (existing === undefined) {
|
|
106
|
+
merged.set(definition.index, {
|
|
107
|
+
definition,
|
|
108
|
+
owner,
|
|
109
|
+
filters: [...definition.filters],
|
|
110
|
+
resolveDbName,
|
|
111
|
+
filterStoredTypes: Object.fromEntries(definition.filters.map((f) => [resolveDbName(f), definition.filterTypes[f] ?? "S"])),
|
|
112
|
+
});
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (existing.definition.dimensions !== definition.dimensions ||
|
|
116
|
+
existing.definition.distance !== definition.distance) {
|
|
117
|
+
throw new Error(`[EDD-9035] Vector index "${definition.index}" is shared by entities "${existing.owner}" ` +
|
|
118
|
+
`and "${owner}" with conflicting settings: ` +
|
|
119
|
+
`${existing.definition.dimensions}/${existing.definition.distance} vs ` +
|
|
120
|
+
`${definition.dimensions}/${definition.distance}. Dimensions and distance function are ` +
|
|
121
|
+
`immutable on a DynamoDB vector index — every entity sharing one must agree.`);
|
|
122
|
+
}
|
|
123
|
+
// Filters, unlike dimensions/distance, are per-entity access patterns
|
|
124
|
+
// rather than a shared physical property — one index can serve several
|
|
125
|
+
// entities filtering on different attributes. Union them; keeping only
|
|
126
|
+
// the first entity's set would silently leave the other sharers' filter
|
|
127
|
+
// attributes out of the SearchSchema (and un-filterable at runtime).
|
|
128
|
+
for (const filter of definition.filters) {
|
|
129
|
+
const stored = resolveDbName(filter);
|
|
130
|
+
const storedType = definition.filterTypes[filter] ?? "S";
|
|
131
|
+
const existingType = existing.filterStoredTypes[stored];
|
|
132
|
+
if (existingType !== undefined && existingType !== storedType) {
|
|
133
|
+
throw new Error(`[EDD-9040] Vector index "${definition.index}" filter attribute "${stored}" is ` +
|
|
134
|
+
`declared with AttributeDefinitions type "${existingType}" by entity ` +
|
|
135
|
+
`"${existing.owner}" and "${storedType}" by entity "${owner}". A shared ` +
|
|
136
|
+
`SearchSchema attribute must have one scalar type.`);
|
|
137
|
+
}
|
|
138
|
+
existing.filterStoredTypes[stored] = storedType;
|
|
139
|
+
if (existing.filters.some((f) => existing.resolveDbName(f) === stored))
|
|
140
|
+
continue;
|
|
141
|
+
existing.filters.push(filter);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
for (const [indexName, entry] of merged) {
|
|
146
|
+
if (entry.filters.length > MAX_INLINE_FILTERS) {
|
|
147
|
+
throw new Error(`[EDD-9032] Vector index "${indexName}" resolves to ${entry.filters.length} INLINE_FILTER ` +
|
|
148
|
+
`attributes once unioned across the entities sharing it ` +
|
|
149
|
+
`(${[...entry.filters].sort().join(", ")}). DynamoDB allows at most ` +
|
|
150
|
+
`${MAX_INLINE_FILTERS} per vector index.`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (merged.size > MAX_VECTOR_INDEXES_PER_TABLE) {
|
|
154
|
+
throw new Error(`[EDD-9034] Table declares ${merged.size} vector indexes ` +
|
|
155
|
+
`(${[...merged.keys()].sort().join(", ")}). DynamoDB allows at most ` +
|
|
156
|
+
`${MAX_VECTOR_INDEXES_PER_TABLE} per table.`);
|
|
157
|
+
}
|
|
158
|
+
return merged;
|
|
159
|
+
};
|
|
160
|
+
/** @internal Run {@link mergeVectorIndexes} purely for its validation effect. */
|
|
161
|
+
const validateSharedVectorIndexes = (entities) => {
|
|
162
|
+
mergeVectorIndexes(entities);
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Map a normalized {@link VectorIndexDefinition} onto the AWS `VectorIndex`
|
|
166
|
+
* shape. The composed partition attribute is always the single `HASH` element;
|
|
167
|
+
* declared filters follow as `INLINE_FILTER` elements.
|
|
168
|
+
*
|
|
169
|
+
* `filters` may be supplied pre-unioned across every entity that shares the
|
|
170
|
+
* physical index (see {@link mergeVectorIndexes}) — a shared index must declare
|
|
171
|
+
* the union, or a sharer's filter attribute would simply not be indexed.
|
|
172
|
+
*
|
|
173
|
+
* Filter names are emitted as STORED attribute names: an entity may rename a
|
|
174
|
+
* field with `storedAs`, and the index has to point at what is actually on disk.
|
|
175
|
+
*/
|
|
176
|
+
export const toVectorIndexSpec = (definition, options) => {
|
|
177
|
+
const resolveDbName = options?.resolveDbName ?? ((domainName) => domainName);
|
|
178
|
+
const filters = options?.filters ?? definition.filters;
|
|
179
|
+
const SearchSchema = [{ AttributeName: definition.partitionField, SearchSchemaElementType: "HASH" }];
|
|
180
|
+
for (const filter of filters) {
|
|
181
|
+
SearchSchema.push({
|
|
182
|
+
AttributeName: resolveDbName(filter),
|
|
183
|
+
SearchSchemaElementType: "INLINE_FILTER",
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
IndexName: definition.index,
|
|
188
|
+
VectorAttribute: { AttributeName: definition.vectorField },
|
|
189
|
+
Dimensions: definition.dimensions,
|
|
190
|
+
DistanceFunction: toWireDistanceFunction(definition.distance),
|
|
191
|
+
Projection: { ProjectionType: "ALL" },
|
|
192
|
+
SearchSchema,
|
|
193
|
+
};
|
|
194
|
+
};
|
|
73
195
|
/**
|
|
74
196
|
* Derive CreateTable input from a table's registered members.
|
|
75
197
|
*
|
|
@@ -187,6 +309,25 @@ export const definition = (table) => {
|
|
|
187
309
|
const AttributeDefinitions = Array.from(attributeNames)
|
|
188
310
|
.sort()
|
|
189
311
|
.map((name) => ({ AttributeName: name, AttributeType: "S" }));
|
|
312
|
+
// Every SearchSchema element must appear in AttributeDefinitions (verified
|
|
313
|
+
// against the live service; DynamoDB Local silently accepts their absence).
|
|
314
|
+
// The composed HASH partition attribute is always a string; filter types are
|
|
315
|
+
// derived from the model schema at Entity.make (EDD-9039).
|
|
316
|
+
const vectorAttributeDefs = (merged) => {
|
|
317
|
+
const defs = new Map();
|
|
318
|
+
for (const entry of merged.values()) {
|
|
319
|
+
if (!attributeNames.has(entry.definition.partitionField)) {
|
|
320
|
+
defs.set(entry.definition.partitionField, "S");
|
|
321
|
+
}
|
|
322
|
+
for (const [stored, type] of Object.entries(entry.filterStoredTypes)) {
|
|
323
|
+
if (!attributeNames.has(stored))
|
|
324
|
+
defs.set(stored, type);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return Array.from(defs.entries())
|
|
328
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
329
|
+
.map(([AttributeName, AttributeType]) => ({ AttributeName, AttributeType }));
|
|
330
|
+
};
|
|
190
331
|
const GlobalSecondaryIndexes = gsiMap.size > 0
|
|
191
332
|
? Array.from(gsiMap.entries())
|
|
192
333
|
.sort(([a], [b]) => a.localeCompare(b))
|
|
@@ -211,11 +352,23 @@ export const definition = (table) => {
|
|
|
211
352
|
Projection: { ProjectionType: "ALL" },
|
|
212
353
|
}))
|
|
213
354
|
: undefined;
|
|
355
|
+
const mergedVectorIndexes = mergeVectorIndexes(table.entities);
|
|
356
|
+
const VectorIndexes = mergedVectorIndexes.size > 0
|
|
357
|
+
? Array.from(mergedVectorIndexes.entries())
|
|
358
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
359
|
+
.map(([, entry]) => toVectorIndexSpec(entry.definition, {
|
|
360
|
+
filters: entry.filters,
|
|
361
|
+
resolveDbName: entry.resolveDbName,
|
|
362
|
+
}))
|
|
363
|
+
: undefined;
|
|
364
|
+
AttributeDefinitions.push(...vectorAttributeDefs(mergedVectorIndexes));
|
|
214
365
|
const result = { KeySchema, AttributeDefinitions };
|
|
215
366
|
if (GlobalSecondaryIndexes)
|
|
216
367
|
result.GlobalSecondaryIndexes = GlobalSecondaryIndexes;
|
|
217
368
|
if (LocalSecondaryIndexes)
|
|
218
369
|
result.LocalSecondaryIndexes = LocalSecondaryIndexes;
|
|
370
|
+
if (VectorIndexes)
|
|
371
|
+
result.VectorIndexes = VectorIndexes;
|
|
219
372
|
return result;
|
|
220
373
|
};
|
|
221
374
|
//# sourceMappingURL=Table.js.map
|
package/dist/Table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../src/Table.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../src/Table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VectorSearchEmulation — a local stand-in for DynamoDB `SearchVectors`.
|
|
3
|
+
*
|
|
4
|
+
* DynamoDB Local does not implement vector search: `CreateTable` silently
|
|
5
|
+
* accepts and discards `VectorIndexes`, and `SearchVectors` fails with
|
|
6
|
+
* `UnknownOperationException`. LocalStack wraps DynamoDB Local and inherits the
|
|
7
|
+
* gap. Without an emulation layer there is no way to exercise the full
|
|
8
|
+
* write → search round trip without an AWS account, which would leave the most
|
|
9
|
+
* interesting half of the feature untested.
|
|
10
|
+
*
|
|
11
|
+
* This layer wraps a `DynamoClient` layer and replaces `searchVectors` with a
|
|
12
|
+
* Scan + brute-force implementation. Every other operation passes through
|
|
13
|
+
* untouched, so the same layer stack serves the connected suite and the
|
|
14
|
+
* runnable example.
|
|
15
|
+
*
|
|
16
|
+
* Fidelity is deliberate, not approximate: all three distance functions are
|
|
17
|
+
* computed exactly as the developer guide documents them (including the score
|
|
18
|
+
* DIRECTIONS, which differ), the HASH/INLINE_FILTER equality predicates are
|
|
19
|
+
* evaluated, `ProjectionExpression` is honoured, and results are truncated to
|
|
20
|
+
* `TopK`. The ranking output is unit-tested against the developer guide's
|
|
21
|
+
* reference table.
|
|
22
|
+
*
|
|
23
|
+
* What it does NOT emulate: approximate (as opposed to exact) nearest-neighbour
|
|
24
|
+
* behaviour, backfill states, or consumed-capacity reporting. An emulated search
|
|
25
|
+
* is an exhaustive scan, so it is exact and slow — correct for tests, useless
|
|
26
|
+
* for load.
|
|
27
|
+
*
|
|
28
|
+
* See `DESIGN.md §14 Vector Search`.
|
|
29
|
+
*/
|
|
30
|
+
import type { DistanceFunction } from "@effect-dynamodb/schema/VectorIndex.js";
|
|
31
|
+
import { Layer } from "effect";
|
|
32
|
+
import { DynamoClient, type DynamoClientService } from "./DynamoClient.js";
|
|
33
|
+
/** What the emulator needs to know about a physical vector index. */
|
|
34
|
+
export interface EmulatedVectorIndex {
|
|
35
|
+
/** Attribute holding the stored embedding (`L` of `N`). */
|
|
36
|
+
readonly vectorAttribute: string;
|
|
37
|
+
/** Distance function used to score candidates. */
|
|
38
|
+
readonly distance: DistanceFunction;
|
|
39
|
+
/**
|
|
40
|
+
* The composed HASH attribute. Always a legal `SearchConditionExpression`
|
|
41
|
+
* operand.
|
|
42
|
+
*/
|
|
43
|
+
readonly partitionAttribute?: string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* `INLINE_FILTER` attributes (STORED names). A condition on anything else is
|
|
46
|
+
* a `ValidationException` on real DynamoDB, so the emulator rejects it too —
|
|
47
|
+
* otherwise an undeclared filter would pass every local test and only fail
|
|
48
|
+
* in production.
|
|
49
|
+
*/
|
|
50
|
+
readonly filterAttributes?: ReadonlyArray<string> | undefined;
|
|
51
|
+
}
|
|
52
|
+
/** Minimal structural shape of a `Table` — avoids importing the full type. */
|
|
53
|
+
interface TableLikeForEmulation {
|
|
54
|
+
readonly entities: Record<string, {
|
|
55
|
+
readonly _tag: "Entity";
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Options for {@link layer}.
|
|
60
|
+
*
|
|
61
|
+
* `tables` is the ergonomic form: every registered entity's vector index
|
|
62
|
+
* declarations are read straight off the table, so the emulator always agrees
|
|
63
|
+
* with the definitions the writes used. `indexes` is the escape hatch for
|
|
64
|
+
* hand-rolled setups.
|
|
65
|
+
*
|
|
66
|
+
* An index that appears in neither falls back to the library naming convention
|
|
67
|
+
* (`__edd_v_<IndexName>__`) with cosine distance — enough for a smoke test, but
|
|
68
|
+
* a declared table is what you want.
|
|
69
|
+
*/
|
|
70
|
+
export interface EmulationOptions {
|
|
71
|
+
readonly tables?: Record<string, TableLikeForEmulation> | undefined;
|
|
72
|
+
readonly indexes?: Record<string, EmulatedVectorIndex> | undefined;
|
|
73
|
+
}
|
|
74
|
+
/** @internal Dot product. Higher is more similar; may be negative. */
|
|
75
|
+
export declare const dotProduct: (a: ReadonlyArray<number>, b: ReadonlyArray<number>) => number;
|
|
76
|
+
/**
|
|
77
|
+
* @internal Cosine DISTANCE (`1 - cosine similarity`), range 0…2.
|
|
78
|
+
* Lower is more similar — the same direction DynamoDB reports.
|
|
79
|
+
*/
|
|
80
|
+
export declare const cosineDistance: (a: ReadonlyArray<number>, b: ReadonlyArray<number>) => number;
|
|
81
|
+
/** @internal Euclidean (L2) distance, range 0…∞. Lower is more similar. */
|
|
82
|
+
export declare const euclideanDistance: (a: ReadonlyArray<number>, b: ReadonlyArray<number>) => number;
|
|
83
|
+
/** @internal Score a candidate exactly as DynamoDB would report it. */
|
|
84
|
+
export declare const scoreVector: (query: ReadonlyArray<number>, candidate: ReadonlyArray<number>, distance: DistanceFunction) => number;
|
|
85
|
+
/**
|
|
86
|
+
* Wrap a {@link DynamoClientService} so `searchVectors` is emulated locally.
|
|
87
|
+
* Every other operation delegates to the wrapped service unchanged.
|
|
88
|
+
*/
|
|
89
|
+
export declare const wrap: (service: DynamoClientService, options?: EmulationOptions) => DynamoClientService;
|
|
90
|
+
/**
|
|
91
|
+
* Wrap a `DynamoClient` layer so `searchVectors` is emulated locally.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* const DdbLocal = DynamoClient.layer({ region: "us-east-1", endpoint: "http://localhost:8000" })
|
|
96
|
+
* const Emulated = VectorSearchEmulation.layer(DdbLocal, { tables: { MainTable } })
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare const layer: <E, R>(inner: Layer.Layer<DynamoClient, E, R>, options?: EmulationOptions) => Layer.Layer<DynamoClient, E, R>;
|
|
100
|
+
export {};
|
|
101
|
+
//# sourceMappingURL=VectorSearchEmulation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VectorSearchEmulation.d.ts","sourceRoot":"","sources":["../src/VectorSearchEmulation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAWH,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,wCAAwC,CAAA;AAE/C,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,YAAY,EAA0B,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAOlG,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;CAC9D;AAED,8EAA8E;AAC9E,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;CAC/D;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,SAAS,CAAA;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG,SAAS,CAAA;CACnE;AAkCD,sEAAsE;AACtE,eAAO,MAAM,UAAU,GAAI,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,KAAG,MAI/E,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,KAAG,MAKnF,CAAA;AAED,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,GAAI,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,KAAG,MAOtF,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,WAAW,GACtB,OAAO,aAAa,CAAC,MAAM,CAAC,EAC5B,WAAW,aAAa,CAAC,MAAM,CAAC,EAChC,UAAU,gBAAgB,KACzB,MASF,CAAA;AA8ED;;;GAGG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,mBAAmB,EAC5B,UAAU,gBAAgB,KACzB,mBAmHF,CAAA;AAeD;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EACxB,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,EACtC,UAAU,gBAAgB,KACzB,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAIgC,CAAA"}
|