ugly-app 0.1.632 → 0.1.633
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/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/server/PostgresDoc.d.ts +0 -6
- package/dist/server/PostgresDoc.d.ts.map +1 -1
- package/dist/server/PostgresDoc.js +78 -12
- package/dist/server/PostgresDoc.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/server/PostgresDoc.ts +98 -13
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.633";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -25,12 +25,6 @@ export interface PgGetDocsOptions {
|
|
|
25
25
|
/** Relevance floor (0..1) for search/near. */
|
|
26
26
|
minScore?: number;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Query docs with structured filter + (optional) Postgres FTS + (optional)
|
|
30
|
-
* pgvector ANN, composed into ONE statement against the collection's `search`
|
|
31
|
-
* (tsvector) and `embedding` (vector) columns. The framework never embeds —
|
|
32
|
-
* `near` is a precomputed query embedding.
|
|
33
|
-
*/
|
|
34
28
|
export declare function pgGetDocs<T>(collection: string, filter?: Record<string, unknown>, options?: PgGetDocsOptions): Promise<T[]>;
|
|
35
29
|
export declare function pgGetQuery<T>(collection: string, pipeline: Record<string, unknown>[], options?: {
|
|
36
30
|
skip?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresDoc.d.ts","sourceRoot":"","sources":["../../src/server/PostgresDoc.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,kFAAkF;AAClF,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B;AAqCD,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAOnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"PostgresDoc.d.ts","sourceRoot":"","sources":["../../src/server/PostgresDoc.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,23 +37,41 @@ export async function pgGetDoc(collection, id) {
|
|
|
37
37
|
* (tsvector) and `embedding` (vector) columns. The framework never embeds —
|
|
38
38
|
* `near` is a precomputed query embedding.
|
|
39
39
|
*/
|
|
40
|
+
/**
|
|
41
|
+
* Reciprocal Rank Fusion. Each input is an ordered list of ids (best first).
|
|
42
|
+
* An id's fused score is Σ 1/(k + rank); k=60 is the canonical constant. Robust
|
|
43
|
+
* because it combines RANK positions, not raw scores on incomparable scales
|
|
44
|
+
* (ts_rank vs cosine distance). Returns ids ordered by fused score, best first.
|
|
45
|
+
*/
|
|
46
|
+
function rrfFuse(lists, k = 60) {
|
|
47
|
+
const score = new Map();
|
|
48
|
+
for (const list of lists) {
|
|
49
|
+
list.forEach((id, i) => {
|
|
50
|
+
score.set(id, (score.get(id) ?? 0) + 1 / (k + i + 1));
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return [...score.keys()].sort((a, b) => score.get(b) - score.get(a));
|
|
54
|
+
}
|
|
40
55
|
export async function pgGetDocs(collection, filter, options) {
|
|
41
56
|
const pool = getPool();
|
|
57
|
+
const hasNear = !!(options?.near && options.near.length > 0);
|
|
58
|
+
const hasSearch = !!options?.search?.query;
|
|
59
|
+
// ── Hybrid (search + near) → two independent ranked queries fused with RRF ──
|
|
60
|
+
// FTS arm (ts_rank over the keyword matches) and vector arm (cosine ANN) each
|
|
61
|
+
// rank on their own scale; RRF combines by rank position. This beats a single
|
|
62
|
+
// blended ORDER BY (ts_rank + cosine), whose terms live on incomparable scales.
|
|
63
|
+
if (hasNear && hasSearch) {
|
|
64
|
+
return rrfHybridGetDocs(pool, collection, filter, options);
|
|
65
|
+
}
|
|
42
66
|
const { where, values } = translateFilter(filter ?? {});
|
|
43
67
|
const conds = where ? [where] : [];
|
|
44
|
-
const hasNear = !!(options?.near && options.near.length > 0);
|
|
45
|
-
// Full-text search → ranked by ts_rank. When combined with a vector `near`
|
|
46
|
-
// (hybrid), FTS only BOOSTS the ranking — it does NOT hard-filter, so a
|
|
47
|
-
// semantically-near row without keyword overlap still surfaces. FTS-only
|
|
48
|
-
// queries do filter on a match.
|
|
49
68
|
let rankExpr = null;
|
|
50
|
-
if (
|
|
69
|
+
if (hasSearch) {
|
|
51
70
|
const lang = safeLanguage(options.search.language);
|
|
52
71
|
values.push(options.search.query);
|
|
53
72
|
const tsq = `websearch_to_tsquery('${lang}', $${values.length})`;
|
|
54
73
|
rankExpr = `ts_rank(search, ${tsq})`;
|
|
55
|
-
|
|
56
|
-
conds.push(`search @@ ${tsq}`);
|
|
74
|
+
conds.push(`search @@ ${tsq}`);
|
|
57
75
|
}
|
|
58
76
|
else if (!hasNear) {
|
|
59
77
|
void warnIfUnindexed(pool, collection, filter); // only meaningful for plain filters
|
|
@@ -76,10 +94,7 @@ export async function pgGetDocs(collection, filter, options) {
|
|
|
76
94
|
let sql = `SELECT _id, data, created, updated, version FROM "${collection}"`;
|
|
77
95
|
if (conds.length)
|
|
78
96
|
sql += ` WHERE ${conds.join(' AND ')}`;
|
|
79
|
-
|
|
80
|
-
if (rankExpr && simExpr)
|
|
81
|
-
sql += ` ORDER BY (${rankExpr} + ${simExpr}) DESC`;
|
|
82
|
-
else if (simExpr)
|
|
97
|
+
if (simExpr)
|
|
83
98
|
sql += ` ORDER BY ${simExpr} DESC`;
|
|
84
99
|
else if (rankExpr)
|
|
85
100
|
sql += ` ORDER BY ${rankExpr} DESC`;
|
|
@@ -96,6 +111,57 @@ export async function pgGetDocs(collection, filter, options) {
|
|
|
96
111
|
const result = await pool.query(sql, values);
|
|
97
112
|
return result.rows.map((r) => toDoc(r));
|
|
98
113
|
}
|
|
114
|
+
/** Hybrid getDocs: FTS arm + vector arm, fused with RRF, then hydrated. */
|
|
115
|
+
async function rrfHybridGetDocs(pool, collection, filter, options) {
|
|
116
|
+
const limit = options.limit ?? 10;
|
|
117
|
+
const skip = options.skip ?? 0;
|
|
118
|
+
// Over-fetch per arm so the fusion has depth to work with.
|
|
119
|
+
const armLimit = Math.min(Math.max(limit + skip, 10) * 5, 200);
|
|
120
|
+
const lang = safeLanguage(options.search.language);
|
|
121
|
+
// FTS arm — keyword matches ranked by ts_rank.
|
|
122
|
+
const ftsBase = translateFilter(filter ?? {});
|
|
123
|
+
const ftsConds = ftsBase.where ? [ftsBase.where] : [];
|
|
124
|
+
const ftsValues = ftsBase.values;
|
|
125
|
+
ftsValues.push(options.search.query);
|
|
126
|
+
const tsq = `websearch_to_tsquery('${lang}', $${ftsValues.length})`;
|
|
127
|
+
ftsConds.push(`search @@ ${tsq}`);
|
|
128
|
+
ftsValues.push(armLimit);
|
|
129
|
+
const ftsSql = `SELECT _id FROM "${collection}"` +
|
|
130
|
+
(ftsConds.length ? ` WHERE ${ftsConds.join(' AND ')}` : '') +
|
|
131
|
+
` ORDER BY ts_rank(search, ${tsq}) DESC LIMIT $${ftsValues.length}`;
|
|
132
|
+
// Vector arm — nearest neighbours by cosine distance.
|
|
133
|
+
const vecBase = translateFilter(filter ?? {});
|
|
134
|
+
const vecConds = vecBase.where ? [vecBase.where] : [];
|
|
135
|
+
const vecValues = vecBase.values;
|
|
136
|
+
vecValues.push(toVectorLiteral(options.near));
|
|
137
|
+
const simExpr = `(1 - (embedding <=> $${vecValues.length}::vector))`;
|
|
138
|
+
vecConds.push(`embedding IS NOT NULL`);
|
|
139
|
+
if (options.minScore !== undefined && Number.isFinite(options.minScore)) {
|
|
140
|
+
vecConds.push(`${simExpr} >= ${Number(options.minScore)}`);
|
|
141
|
+
}
|
|
142
|
+
vecValues.push(armLimit);
|
|
143
|
+
const vecSql = `SELECT _id FROM "${collection}"` +
|
|
144
|
+
(vecConds.length ? ` WHERE ${vecConds.join(' AND ')}` : '') +
|
|
145
|
+
` ORDER BY embedding <=> $${vecValues.length - 1}::vector LIMIT $${vecValues.length}`;
|
|
146
|
+
const [ftsRes, vecRes] = await Promise.all([
|
|
147
|
+
pool.query(ftsSql, ftsValues),
|
|
148
|
+
pool.query(vecSql, vecValues),
|
|
149
|
+
]);
|
|
150
|
+
const fused = rrfFuse([
|
|
151
|
+
ftsRes.rows.map((r) => r._id),
|
|
152
|
+
vecRes.rows.map((r) => r._id),
|
|
153
|
+
]);
|
|
154
|
+
const pageIds = fused.slice(skip, skip + limit);
|
|
155
|
+
if (pageIds.length === 0)
|
|
156
|
+
return [];
|
|
157
|
+
// Hydrate the page in one query, then restore the fused order.
|
|
158
|
+
const hy = await pool.query(`SELECT _id, data, created, updated, version FROM "${collection}" WHERE _id = ANY($1)`, [pageIds]);
|
|
159
|
+
const byId = new Map(hy.rows.map((r) => [r._id, r]));
|
|
160
|
+
return pageIds
|
|
161
|
+
.map((id) => byId.get(id))
|
|
162
|
+
.filter((r) => r !== undefined)
|
|
163
|
+
.map((r) => toDoc(r));
|
|
164
|
+
}
|
|
99
165
|
export async function pgGetQuery(collection, pipeline, options) {
|
|
100
166
|
const pool = getPool();
|
|
101
167
|
const { sql, values } = translatePipeline(collection, pipeline, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresDoc.js","sourceRoot":"","sources":["../../src/server/PostgresDoc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PostgresDoc.js","sourceRoot":"","sources":["../../src/server/PostgresDoc.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ugly-app",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.633",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
|
|
6
6
|
"files": [
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.633";
|
|
@@ -92,28 +92,49 @@ export interface PgGetDocsOptions {
|
|
|
92
92
|
* (tsvector) and `embedding` (vector) columns. The framework never embeds —
|
|
93
93
|
* `near` is a precomputed query embedding.
|
|
94
94
|
*/
|
|
95
|
+
/**
|
|
96
|
+
* Reciprocal Rank Fusion. Each input is an ordered list of ids (best first).
|
|
97
|
+
* An id's fused score is Σ 1/(k + rank); k=60 is the canonical constant. Robust
|
|
98
|
+
* because it combines RANK positions, not raw scores on incomparable scales
|
|
99
|
+
* (ts_rank vs cosine distance). Returns ids ordered by fused score, best first.
|
|
100
|
+
*/
|
|
101
|
+
function rrfFuse(lists: string[][], k = 60): string[] {
|
|
102
|
+
const score = new Map<string, number>();
|
|
103
|
+
for (const list of lists) {
|
|
104
|
+
list.forEach((id, i) => {
|
|
105
|
+
score.set(id, (score.get(id) ?? 0) + 1 / (k + i + 1));
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return [...score.keys()].sort((a, b) => score.get(b)! - score.get(a)!);
|
|
109
|
+
}
|
|
110
|
+
|
|
95
111
|
export async function pgGetDocs<T>(
|
|
96
112
|
collection: string,
|
|
97
113
|
filter?: Record<string, unknown>,
|
|
98
114
|
options?: PgGetDocsOptions,
|
|
99
115
|
): Promise<T[]> {
|
|
100
116
|
const pool = getPool();
|
|
117
|
+
const hasNear = !!(options?.near && options.near.length > 0);
|
|
118
|
+
const hasSearch = !!options?.search?.query;
|
|
119
|
+
|
|
120
|
+
// ── Hybrid (search + near) → two independent ranked queries fused with RRF ──
|
|
121
|
+
// FTS arm (ts_rank over the keyword matches) and vector arm (cosine ANN) each
|
|
122
|
+
// rank on their own scale; RRF combines by rank position. This beats a single
|
|
123
|
+
// blended ORDER BY (ts_rank + cosine), whose terms live on incomparable scales.
|
|
124
|
+
if (hasNear && hasSearch) {
|
|
125
|
+
return rrfHybridGetDocs<T>(pool, collection, filter, options!);
|
|
126
|
+
}
|
|
127
|
+
|
|
101
128
|
const { where, values } = translateFilter(filter ?? {});
|
|
102
129
|
const conds: string[] = where ? [where] : [];
|
|
103
130
|
|
|
104
|
-
const hasNear = !!(options?.near && options.near.length > 0);
|
|
105
|
-
|
|
106
|
-
// Full-text search → ranked by ts_rank. When combined with a vector `near`
|
|
107
|
-
// (hybrid), FTS only BOOSTS the ranking — it does NOT hard-filter, so a
|
|
108
|
-
// semantically-near row without keyword overlap still surfaces. FTS-only
|
|
109
|
-
// queries do filter on a match.
|
|
110
131
|
let rankExpr: string | null = null;
|
|
111
|
-
if (
|
|
112
|
-
const lang = safeLanguage(options
|
|
113
|
-
values.push(options
|
|
132
|
+
if (hasSearch) {
|
|
133
|
+
const lang = safeLanguage(options!.search!.language);
|
|
134
|
+
values.push(options!.search!.query);
|
|
114
135
|
const tsq = `websearch_to_tsquery('${lang}', $${values.length})`;
|
|
115
136
|
rankExpr = `ts_rank(search, ${tsq})`;
|
|
116
|
-
|
|
137
|
+
conds.push(`search @@ ${tsq}`);
|
|
117
138
|
} else if (!hasNear) {
|
|
118
139
|
void warnIfUnindexed(pool, collection, filter); // only meaningful for plain filters
|
|
119
140
|
}
|
|
@@ -136,9 +157,7 @@ export async function pgGetDocs<T>(
|
|
|
136
157
|
let sql = `SELECT _id, data, created, updated, version FROM "${collection}"`;
|
|
137
158
|
if (conds.length) sql += ` WHERE ${conds.join(' AND ')}`;
|
|
138
159
|
|
|
139
|
-
|
|
140
|
-
if (rankExpr && simExpr) sql += ` ORDER BY (${rankExpr} + ${simExpr}) DESC`;
|
|
141
|
-
else if (simExpr) sql += ` ORDER BY ${simExpr} DESC`;
|
|
160
|
+
if (simExpr) sql += ` ORDER BY ${simExpr} DESC`;
|
|
142
161
|
else if (rankExpr) sql += ` ORDER BY ${rankExpr} DESC`;
|
|
143
162
|
else if (options?.sort) sql += ` ORDER BY ${translateSort(options.sort)}`;
|
|
144
163
|
|
|
@@ -154,6 +173,72 @@ export async function pgGetDocs<T>(
|
|
|
154
173
|
return result.rows.map((r) => toDoc(r) as T);
|
|
155
174
|
}
|
|
156
175
|
|
|
176
|
+
/** Hybrid getDocs: FTS arm + vector arm, fused with RRF, then hydrated. */
|
|
177
|
+
async function rrfHybridGetDocs<T>(
|
|
178
|
+
pool: ReturnType<typeof getPool>,
|
|
179
|
+
collection: string,
|
|
180
|
+
filter: Record<string, unknown> | undefined,
|
|
181
|
+
options: PgGetDocsOptions,
|
|
182
|
+
): Promise<T[]> {
|
|
183
|
+
const limit = options.limit ?? 10;
|
|
184
|
+
const skip = options.skip ?? 0;
|
|
185
|
+
// Over-fetch per arm so the fusion has depth to work with.
|
|
186
|
+
const armLimit = Math.min(Math.max(limit + skip, 10) * 5, 200);
|
|
187
|
+
const lang = safeLanguage(options.search!.language);
|
|
188
|
+
|
|
189
|
+
// FTS arm — keyword matches ranked by ts_rank.
|
|
190
|
+
const ftsBase = translateFilter(filter ?? {});
|
|
191
|
+
const ftsConds = ftsBase.where ? [ftsBase.where] : [];
|
|
192
|
+
const ftsValues = ftsBase.values;
|
|
193
|
+
ftsValues.push(options.search!.query);
|
|
194
|
+
const tsq = `websearch_to_tsquery('${lang}', $${ftsValues.length})`;
|
|
195
|
+
ftsConds.push(`search @@ ${tsq}`);
|
|
196
|
+
ftsValues.push(armLimit);
|
|
197
|
+
const ftsSql =
|
|
198
|
+
`SELECT _id FROM "${collection}"` +
|
|
199
|
+
(ftsConds.length ? ` WHERE ${ftsConds.join(' AND ')}` : '') +
|
|
200
|
+
` ORDER BY ts_rank(search, ${tsq}) DESC LIMIT $${ftsValues.length}`;
|
|
201
|
+
|
|
202
|
+
// Vector arm — nearest neighbours by cosine distance.
|
|
203
|
+
const vecBase = translateFilter(filter ?? {});
|
|
204
|
+
const vecConds = vecBase.where ? [vecBase.where] : [];
|
|
205
|
+
const vecValues = vecBase.values;
|
|
206
|
+
vecValues.push(toVectorLiteral(options.near!));
|
|
207
|
+
const simExpr = `(1 - (embedding <=> $${vecValues.length}::vector))`;
|
|
208
|
+
vecConds.push(`embedding IS NOT NULL`);
|
|
209
|
+
if (options.minScore !== undefined && Number.isFinite(options.minScore)) {
|
|
210
|
+
vecConds.push(`${simExpr} >= ${Number(options.minScore)}`);
|
|
211
|
+
}
|
|
212
|
+
vecValues.push(armLimit);
|
|
213
|
+
const vecSql =
|
|
214
|
+
`SELECT _id FROM "${collection}"` +
|
|
215
|
+
(vecConds.length ? ` WHERE ${vecConds.join(' AND ')}` : '') +
|
|
216
|
+
` ORDER BY embedding <=> $${vecValues.length - 1}::vector LIMIT $${vecValues.length}`;
|
|
217
|
+
|
|
218
|
+
const [ftsRes, vecRes] = await Promise.all([
|
|
219
|
+
pool.query<{ _id: string }>(ftsSql, ftsValues),
|
|
220
|
+
pool.query<{ _id: string }>(vecSql, vecValues),
|
|
221
|
+
]);
|
|
222
|
+
|
|
223
|
+
const fused = rrfFuse([
|
|
224
|
+
ftsRes.rows.map((r) => r._id),
|
|
225
|
+
vecRes.rows.map((r) => r._id),
|
|
226
|
+
]);
|
|
227
|
+
const pageIds = fused.slice(skip, skip + limit);
|
|
228
|
+
if (pageIds.length === 0) return [];
|
|
229
|
+
|
|
230
|
+
// Hydrate the page in one query, then restore the fused order.
|
|
231
|
+
const hy = await pool.query<FullRow>(
|
|
232
|
+
`SELECT _id, data, created, updated, version FROM "${collection}" WHERE _id = ANY($1)`,
|
|
233
|
+
[pageIds],
|
|
234
|
+
);
|
|
235
|
+
const byId = new Map(hy.rows.map((r) => [r._id, r]));
|
|
236
|
+
return pageIds
|
|
237
|
+
.map((id) => byId.get(id))
|
|
238
|
+
.filter((r): r is FullRow => r !== undefined)
|
|
239
|
+
.map((r) => toDoc(r) as T);
|
|
240
|
+
}
|
|
241
|
+
|
|
157
242
|
export async function pgGetQuery<T>(
|
|
158
243
|
collection: string,
|
|
159
244
|
pipeline: Record<string, unknown>[],
|