@mcp-abap-adt/pg-vector-rag 26.0.0 → 28.0.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/README.md +27 -5
- package/dist/__tests__/catalog.test.d.ts +2 -0
- package/dist/__tests__/catalog.test.d.ts.map +1 -0
- package/dist/__tests__/catalog.test.js +250 -0
- package/dist/__tests__/catalog.test.js.map +1 -0
- package/dist/__tests__/connection.test.js +39 -11
- package/dist/__tests__/connection.test.js.map +1 -1
- package/dist/__tests__/credential.test.d.ts +2 -0
- package/dist/__tests__/credential.test.d.ts.map +1 -0
- package/dist/__tests__/credential.test.js +72 -0
- package/dist/__tests__/credential.test.js.map +1 -0
- package/dist/__tests__/fake-pg.d.ts +21 -0
- package/dist/__tests__/fake-pg.d.ts.map +1 -0
- package/dist/__tests__/fake-pg.js +100 -0
- package/dist/__tests__/fake-pg.js.map +1 -0
- package/dist/__tests__/pg-vector-rag-provider.test.js +10 -11
- package/dist/__tests__/pg-vector-rag-provider.test.js.map +1 -1
- package/dist/__tests__/pg-vector-rag.test.js +63 -0
- package/dist/__tests__/pg-vector-rag.test.js.map +1 -1
- package/dist/__tests__/rag-filter-conformance.test.d.ts +2 -0
- package/dist/__tests__/rag-filter-conformance.test.d.ts.map +1 -0
- package/dist/__tests__/rag-filter-conformance.test.js +17 -0
- package/dist/__tests__/rag-filter-conformance.test.js.map +1 -0
- package/dist/__tests__/storing-pg.d.ts +18 -0
- package/dist/__tests__/storing-pg.d.ts.map +1 -0
- package/dist/__tests__/storing-pg.js +77 -0
- package/dist/__tests__/storing-pg.js.map +1 -0
- package/dist/catalog.d.ts +19 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +42 -0
- package/dist/catalog.js.map +1 -0
- package/dist/connection.d.ts +27 -5
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +28 -4
- package/dist/connection.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/pg-vector-rag-provider.d.ts +45 -14
- package/dist/pg-vector-rag-provider.d.ts.map +1 -1
- package/dist/pg-vector-rag-provider.js +205 -23
- package/dist/pg-vector-rag-provider.js.map +1 -1
- package/dist/pg-vector-rag.d.ts +2 -1
- package/dist/pg-vector-rag.d.ts.map +1 -1
- package/dist/pg-vector-rag.js +57 -18
- package/dist/pg-vector-rag.js.map +1 -1
- package/dist/schema.d.ts +3 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +3 -2
- package/dist/schema.js.map +1 -1
- package/package.json +7 -3
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
import type { IEmbedder, IIdStrategy, IRag, IRagEditor, RagCollectionScope, Result } from '@mcp-abap-adt/llm-agent';
|
|
1
|
+
import type { IEmbedder, IIdStrategy, IRag, IRagEditor, RagCatalogDescription, RagCollectionRecord, RagCollectionScope, RagProviderCreateCollectionOptions, Result } from '@mcp-abap-adt/llm-agent';
|
|
2
2
|
import { AbstractRagProvider, RagError } from '@mcp-abap-adt/llm-agent';
|
|
3
3
|
import type { PgVectorRagConfig } from './connection.js';
|
|
4
4
|
import { type PgClient } from './pg-vector-rag.js';
|
|
5
|
+
type Handles = {
|
|
6
|
+
rag: IRag;
|
|
7
|
+
editor: IRagEditor;
|
|
8
|
+
};
|
|
5
9
|
export interface PgVectorRagProviderConfig {
|
|
6
10
|
name: string;
|
|
7
11
|
embedder: IEmbedder;
|
|
8
12
|
connection: PgVectorRagConfig | string;
|
|
9
13
|
defaultDimension?: number;
|
|
14
|
+
/**
|
|
15
|
+
* `true` (default): the provider creates its catalog table on first use and
|
|
16
|
+
* each collection's table in `createCollection`. `false`: it issues no DDL at
|
|
17
|
+
* all — the operator creates the catalog (`createCatalogTableSql`) and the
|
|
18
|
+
* tables, and `createCollection` requires the table and records it.
|
|
19
|
+
*/
|
|
10
20
|
autoCreateSchema?: boolean;
|
|
11
21
|
editable?: boolean;
|
|
12
22
|
supportedScopes?: readonly RagCollectionScope[];
|
|
@@ -16,12 +26,14 @@ export interface PgVectorRagProviderConfig {
|
|
|
16
26
|
userId?: string;
|
|
17
27
|
}) => IIdStrategy;
|
|
18
28
|
/**
|
|
19
|
-
* Optional factory for driver
|
|
20
|
-
* and
|
|
21
|
-
*
|
|
22
|
-
*
|
|
29
|
+
* Optional factory for the driver client the provider uses for catalog and
|
|
30
|
+
* schema statements and hands each collection handle. Omitted, the provider
|
|
31
|
+
* opens one pool of its own from `connection` for its statements, and each
|
|
32
|
+
* handle opens its own.
|
|
23
33
|
*/
|
|
24
34
|
clientFactory?: () => PgClient;
|
|
35
|
+
/** The table holding one record per collection. Default `rag_collection_catalog`. */
|
|
36
|
+
catalogTable?: string;
|
|
25
37
|
}
|
|
26
38
|
export declare class PgVectorRagProvider extends AbstractRagProvider {
|
|
27
39
|
readonly name: string;
|
|
@@ -33,17 +45,36 @@ export declare class PgVectorRagProvider extends AbstractRagProvider {
|
|
|
33
45
|
private readonly defaultDimension;
|
|
34
46
|
private readonly autoCreateSchema;
|
|
35
47
|
private readonly clientFactory?;
|
|
48
|
+
private readonly catalogTable;
|
|
49
|
+
private ownClient?;
|
|
50
|
+
private catalogReady?;
|
|
36
51
|
constructor(cfg: PgVectorRagProviderConfig);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Creates the store with a statement that fails if it exists, then commits
|
|
54
|
+
* the creation by writing the record last, create-if-absent (§6.3).
|
|
55
|
+
*/
|
|
56
|
+
createCollection(name: string, opts: RagProviderCreateCollectionOptions): Promise<Result<Handles, RagError>>;
|
|
57
|
+
/** The catalog, read back through the shared row check. Creates nothing. */
|
|
58
|
+
describeCollections(): Promise<Result<RagCatalogDescription, RagError>>;
|
|
59
|
+
/**
|
|
60
|
+
* Handles for a store that exists. Issues no statement, and the handles run
|
|
61
|
+
* with lazy schema creation off, so a store that is gone fails rather than
|
|
62
|
+
* coming back without a record.
|
|
63
|
+
*/
|
|
64
|
+
openCollection(record: RagCollectionRecord): Promise<Result<Handles, RagError>>;
|
|
65
|
+
/** The record first, then the data (§6.3). */
|
|
45
66
|
deleteCollection(name: string): Promise<Result<void, RagError>>;
|
|
46
67
|
listCollections(): Promise<Result<string[], RagError>>;
|
|
47
|
-
private
|
|
68
|
+
private createStore;
|
|
69
|
+
private writeRecord;
|
|
70
|
+
private handles;
|
|
71
|
+
private duplicate;
|
|
72
|
+
private refuseCatalogName;
|
|
73
|
+
private dimension;
|
|
74
|
+
private adminClient;
|
|
75
|
+
private ensureCatalog;
|
|
76
|
+
private tableExists;
|
|
77
|
+
private recordExists;
|
|
48
78
|
}
|
|
79
|
+
export {};
|
|
49
80
|
//# sourceMappingURL=pg-vector-rag-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-vector-rag-provider.d.ts","sourceRoot":"","sources":["../src/pg-vector-rag-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,IAAI,EACJ,UAAU,EACV,kBAAkB,EAClB,MAAM,EACP,MAAM,yBAAyB,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"pg-vector-rag-provider.d.ts","sourceRoot":"","sources":["../src/pg-vector-rag-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { AbstractRagProvider, RagError } from '@mcp-abap-adt/llm-agent';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { AbstractRagProvider, CatalogRecordDeleteError, DuplicateCollectionError, describeRagCatalogRows, encodeRagAttributes, OrphanStoreError, RagError, ragOwnerKeys, validateRagOwner, } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
import { createCatalogTableSql, DEFAULT_CATALOG_TABLE, deleteRecordSql, insertRecordSql, probeTableSql, recordExistsSql, selectRecordsSql, tableExistsSql, } from './catalog.js';
|
|
3
|
+
import { createPgClient, PgVectorRag } from './pg-vector-rag.js';
|
|
4
|
+
import { assertCollectionName, createExtensionSql, createTableSql, dropTableSql, quoteIdent, } from './schema.js';
|
|
4
5
|
function normalizeConnection(c) {
|
|
5
6
|
return typeof c === 'string'
|
|
6
7
|
? { connectionString: c, collectionName: '__unused' }
|
|
@@ -16,6 +17,9 @@ export class PgVectorRagProvider extends AbstractRagProvider {
|
|
|
16
17
|
defaultDimension;
|
|
17
18
|
autoCreateSchema;
|
|
18
19
|
clientFactory;
|
|
20
|
+
catalogTable;
|
|
21
|
+
ownClient;
|
|
22
|
+
catalogReady;
|
|
19
23
|
constructor(cfg) {
|
|
20
24
|
super();
|
|
21
25
|
this.name = cfg.name;
|
|
@@ -26,25 +30,48 @@ export class PgVectorRagProvider extends AbstractRagProvider {
|
|
|
26
30
|
this.editable = cfg.editable ?? true;
|
|
27
31
|
this.supportedScopes = cfg.supportedScopes ?? ['session', 'user', 'global'];
|
|
28
32
|
this.clientFactory = cfg.clientFactory;
|
|
33
|
+
this.catalogTable = cfg.catalogTable ?? DEFAULT_CATALOG_TABLE;
|
|
34
|
+
assertCollectionName(this.catalogTable);
|
|
29
35
|
if (cfg.idStrategyFactory)
|
|
30
36
|
this.idStrategyFactory = cfg.idStrategyFactory;
|
|
31
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates the store with a statement that fails if it exists, then commits
|
|
40
|
+
* the creation by writing the record last, create-if-absent (§6.3).
|
|
41
|
+
*/
|
|
32
42
|
async createCollection(name, opts) {
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
35
|
-
return
|
|
43
|
+
const checked = this.checkCreateOptions(opts);
|
|
44
|
+
if (!checked.ok)
|
|
45
|
+
return checked;
|
|
46
|
+
const refused = this.refuseCatalogName(name);
|
|
47
|
+
if (refused)
|
|
48
|
+
return refused;
|
|
36
49
|
try {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
collectionName: name,
|
|
40
|
-
dimension: this.connection.dimension ?? this.defaultDimension,
|
|
41
|
-
autoCreateSchema: this.autoCreateSchema,
|
|
42
|
-
embedder: this.embedder,
|
|
43
|
-
}, this.clientFactory?.());
|
|
50
|
+
assertCollectionName(name);
|
|
51
|
+
const client = await this.adminClient();
|
|
44
52
|
if (this.autoCreateSchema)
|
|
45
|
-
await
|
|
46
|
-
|
|
47
|
-
|
|
53
|
+
await this.ensureCatalog(client);
|
|
54
|
+
if (await this.recordExists(client, name))
|
|
55
|
+
return this.duplicate(name, opts);
|
|
56
|
+
if (opts.adoptExisting === true || !this.autoCreateSchema) {
|
|
57
|
+
// Adoption takes over a store that is there and creates nothing: the
|
|
58
|
+
// probe fails with the backend's own error when it is not.
|
|
59
|
+
await client.query(probeTableSql(name));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const created = await this.createStore(client, name, opts);
|
|
63
|
+
if (!created.ok)
|
|
64
|
+
return created;
|
|
65
|
+
}
|
|
66
|
+
const recorded = await this.writeRecord(client, {
|
|
67
|
+
...checked.value,
|
|
68
|
+
storeName: name,
|
|
69
|
+
name: opts.collectionName ?? name,
|
|
70
|
+
attributes: opts.attributes,
|
|
71
|
+
}, opts);
|
|
72
|
+
if (!recorded.ok)
|
|
73
|
+
return recorded;
|
|
74
|
+
return { ok: true, value: this.handles(name, checked.value) };
|
|
48
75
|
}
|
|
49
76
|
catch (err) {
|
|
50
77
|
return {
|
|
@@ -53,9 +80,56 @@ export class PgVectorRagProvider extends AbstractRagProvider {
|
|
|
53
80
|
};
|
|
54
81
|
}
|
|
55
82
|
}
|
|
83
|
+
/** The catalog, read back through the shared row check. Creates nothing. */
|
|
84
|
+
async describeCollections() {
|
|
85
|
+
try {
|
|
86
|
+
const client = await this.adminClient();
|
|
87
|
+
if (!(await this.tableExists(client, this.catalogTable))) {
|
|
88
|
+
return { ok: true, value: { records: [], rejected: [] } };
|
|
89
|
+
}
|
|
90
|
+
const { rows } = await client.query(selectRecordsSql(this.catalogTable));
|
|
91
|
+
return { ok: true, value: describeRagCatalogRows(rows) };
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
return { ok: false, error: new RagError(String(err), 'RAG_LIST_ERROR') };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Handles for a store that exists. Issues no statement, and the handles run
|
|
99
|
+
* with lazy schema creation off, so a store that is gone fails rather than
|
|
100
|
+
* coming back without a record.
|
|
101
|
+
*/
|
|
102
|
+
async openCollection(record) {
|
|
103
|
+
const owner = validateRagOwner(record);
|
|
104
|
+
if (!owner.ok)
|
|
105
|
+
return owner;
|
|
106
|
+
try {
|
|
107
|
+
return { ok: true, value: this.handles(record.storeName, owner.value) };
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
return { ok: false, error: new RagError(String(err), 'RAG_OPEN_ERROR') };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** The record first, then the data (§6.3). */
|
|
56
114
|
async deleteCollection(name) {
|
|
115
|
+
const refused = this.refuseCatalogName(name);
|
|
116
|
+
if (refused)
|
|
117
|
+
return refused;
|
|
118
|
+
let client;
|
|
119
|
+
try {
|
|
120
|
+
client = await this.adminClient();
|
|
121
|
+
if (await this.tableExists(client, this.catalogTable)) {
|
|
122
|
+
await client.query(deleteRecordSql(this.catalogTable), [name]);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
// Stop: record and data both survive, so nothing was deleted — retry it.
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
error: new CatalogRecordDeleteError(name, String(err)),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
57
132
|
try {
|
|
58
|
-
const client = this.requireClient();
|
|
59
133
|
await client.query(dropTableSql(name));
|
|
60
134
|
return { ok: true, value: undefined };
|
|
61
135
|
}
|
|
@@ -68,20 +142,128 @@ export class PgVectorRagProvider extends AbstractRagProvider {
|
|
|
68
142
|
}
|
|
69
143
|
async listCollections() {
|
|
70
144
|
try {
|
|
71
|
-
const client = this.
|
|
145
|
+
const client = await this.adminClient();
|
|
72
146
|
const schema = this.connection.schema ?? 'public';
|
|
73
147
|
const { rows } = await client.query('SELECT table_name FROM information_schema.tables WHERE table_schema = $1', [schema]);
|
|
74
|
-
return {
|
|
148
|
+
return {
|
|
149
|
+
ok: true,
|
|
150
|
+
value: rows
|
|
151
|
+
.map((r) => String(r.table_name))
|
|
152
|
+
.filter((t) => t !== this.catalogTable),
|
|
153
|
+
};
|
|
75
154
|
}
|
|
76
155
|
catch (err) {
|
|
77
156
|
return { ok: false, error: new RagError(String(err), 'RAG_LIST_ERROR') };
|
|
78
157
|
}
|
|
79
158
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
159
|
+
async createStore(client, name, opts) {
|
|
160
|
+
try {
|
|
161
|
+
await client.query(createExtensionSql());
|
|
162
|
+
await client.query(createTableSql(name, this.dimension(), { ifNotExists: false }));
|
|
163
|
+
return { ok: true, value: undefined };
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
if (!(await this.tableExists(client, name)))
|
|
167
|
+
throw err;
|
|
168
|
+
if (await this.recordExists(client, name))
|
|
169
|
+
return this.duplicate(name, opts);
|
|
170
|
+
return {
|
|
171
|
+
ok: false,
|
|
172
|
+
error: new OrphanStoreError(name, 'it exists without a record; another session may be creating or deleting this collection, so retry later, or take it over with adoptExisting, or remove it'),
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async writeRecord(client, record, opts) {
|
|
177
|
+
const { userId, sessionId } = ragOwnerKeys(record);
|
|
178
|
+
try {
|
|
179
|
+
await client.query(insertRecordSql(this.catalogTable), [
|
|
180
|
+
record.storeName,
|
|
181
|
+
record.name,
|
|
182
|
+
record.scope,
|
|
183
|
+
userId ?? null,
|
|
184
|
+
sessionId ?? null,
|
|
185
|
+
encodeRagAttributes(record.attributes),
|
|
186
|
+
]);
|
|
187
|
+
return { ok: true, value: undefined };
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
// Lost to another registry's write: its record points at this store, which stays.
|
|
191
|
+
if (await this.recordExists(client, record.storeName).catch(() => false)) {
|
|
192
|
+
return this.duplicate(record.storeName, opts);
|
|
193
|
+
}
|
|
194
|
+
// Never removed: between this failure and a removal another registry may
|
|
195
|
+
// adopt the store and record it, and a removal would leave that record
|
|
196
|
+
// without data (§6.3).
|
|
197
|
+
return {
|
|
198
|
+
ok: false,
|
|
199
|
+
error: new OrphanStoreError(record.storeName, `its record could not be written (${String(err)}); the store is left in place until it is adopted with adoptExisting or removed`),
|
|
200
|
+
};
|
|
83
201
|
}
|
|
84
|
-
|
|
202
|
+
}
|
|
203
|
+
handles(storeName, owner) {
|
|
204
|
+
const rag = new PgVectorRag({
|
|
205
|
+
...this.connection,
|
|
206
|
+
collectionName: storeName,
|
|
207
|
+
dimension: this.dimension(),
|
|
208
|
+
// No handle creates its store: createCollection does, and only it.
|
|
209
|
+
autoCreateSchema: false,
|
|
210
|
+
embedder: this.embedder,
|
|
211
|
+
}, this.clientFactory?.());
|
|
212
|
+
return { rag, editor: this.buildEditor(rag, this.pickIdStrategy(owner)) };
|
|
213
|
+
}
|
|
214
|
+
duplicate(storeName, opts) {
|
|
215
|
+
return {
|
|
216
|
+
ok: false,
|
|
217
|
+
error: new DuplicateCollectionError(opts.collectionName ?? storeName, `store '${storeName}' already has a record`),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
refuseCatalogName(name) {
|
|
221
|
+
if (name !== this.catalogTable)
|
|
222
|
+
return undefined;
|
|
223
|
+
return {
|
|
224
|
+
ok: false,
|
|
225
|
+
error: new RagError(`'${name}' is this provider's catalog table, not a collection`, 'INVALID_COLLECTION_NAME'),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
dimension() {
|
|
229
|
+
return this.connection.dimension ?? this.defaultDimension;
|
|
230
|
+
}
|
|
231
|
+
async adminClient() {
|
|
232
|
+
if (this.clientFactory)
|
|
233
|
+
return this.clientFactory();
|
|
234
|
+
this.ownClient ??= createPgClient(this.connection).catch((err) => {
|
|
235
|
+
this.ownClient = undefined;
|
|
236
|
+
throw err;
|
|
237
|
+
});
|
|
238
|
+
return this.ownClient;
|
|
239
|
+
}
|
|
240
|
+
ensureCatalog(client) {
|
|
241
|
+
this.catalogReady ??= (async () => {
|
|
242
|
+
if (await this.tableExists(client, this.catalogTable))
|
|
243
|
+
return;
|
|
244
|
+
try {
|
|
245
|
+
await client.query(createCatalogTableSql(this.catalogTable));
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
// Another process may have created it between the check and here.
|
|
249
|
+
if (!(await this.tableExists(client, this.catalogTable)))
|
|
250
|
+
throw err;
|
|
251
|
+
}
|
|
252
|
+
})().catch((err) => {
|
|
253
|
+
this.catalogReady = undefined;
|
|
254
|
+
throw err;
|
|
255
|
+
});
|
|
256
|
+
return this.catalogReady;
|
|
257
|
+
}
|
|
258
|
+
async tableExists(client, table) {
|
|
259
|
+
const { rows } = await client.query(tableExistsSql(), [quoteIdent(table)]);
|
|
260
|
+
return rows[0]?.present === true;
|
|
261
|
+
}
|
|
262
|
+
async recordExists(client, storeName) {
|
|
263
|
+
const { rows } = await client.query(recordExistsSql(this.catalogTable), [
|
|
264
|
+
storeName,
|
|
265
|
+
]);
|
|
266
|
+
return rows.length > 0;
|
|
85
267
|
}
|
|
86
268
|
}
|
|
87
269
|
//# sourceMappingURL=pg-vector-rag-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-vector-rag-provider.js","sourceRoot":"","sources":["../src/pg-vector-rag-provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pg-vector-rag-provider.js","sourceRoot":"","sources":["../src/pg-vector-rag-provider.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAiB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,UAAU,GACX,MAAM,aAAa,CAAC;AAmCrB,SAAS,mBAAmB,CAAC,CAA6B;IACxD,OAAO,OAAO,CAAC,KAAK,QAAQ;QAC1B,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE;QACrD,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IACjD,IAAI,CAAS;IACb,IAAI,GAAG,QAAQ,CAAC;IAChB,QAAQ,CAAU;IAClB,eAAe,CAAgC;IAEvC,QAAQ,CAAY;IACpB,UAAU,CAAoB;IAC9B,gBAAgB,CAAS;IACzB,gBAAgB,CAAU;IAC1B,aAAa,CAAkB;IAC/B,YAAY,CAAS;IAC9B,SAAS,CAAqB;IAC9B,YAAY,CAAiB;IAErC,YAAY,GAA8B;QACxC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,qBAAqB,CAAC;QAC9D,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,iBAAiB;YAAE,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CACpB,IAAY,EACZ,IAAwC;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,IAAI,CAAC;YACH,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,gBAAgB;gBAAE,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;gBACvC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1D,qEAAqE;gBACrE,2DAA2D;gBAC3D,MAAM,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,OAAO,CAAC,EAAE;oBAAE,OAAO,OAAO,CAAC;YAClC,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CACrC,MAAM,EACN;gBACE,GAAG,OAAO,CAAC,KAAK;gBAChB,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;gBACjC,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,EACD,IAAI,CACL,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,QAAQ,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC;aACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,mBAAmB;QAGvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gBACzD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC;YAC5D,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACzE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAClB,MAA2B;QAE3B,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,IAAI,MAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtD,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,yEAAyE;YACzE,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;aACvD,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC;aACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC;YAClD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CACjC,0EAA0E,EAC1E,CAAC,MAAM,CAAC,CACT,CAAC;YACF,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,IAAI;qBACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;qBAChC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,MAAgB,EAChB,IAAY,EACZ,IAAwC;QAExC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACzC,MAAM,MAAM,CAAC,KAAK,CAChB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAC/D,CAAC;YACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAAE,MAAM,GAAG,CAAC;YACvD,IAAI,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;gBACvC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,gBAAgB,CACzB,IAAI,EACJ,2JAA2J,CAC5J;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,MAAgB,EAChB,MAA2B,EAC3B,IAAwC;QAExC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACrD,MAAM,CAAC,SAAS;gBAChB,MAAM,CAAC,IAAI;gBACX,MAAM,CAAC,KAAK;gBACZ,MAAM,IAAI,IAAI;gBACd,SAAS,IAAI,IAAI;gBACjB,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC;aACvC,CAAC,CAAC;YACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kFAAkF;YAClF,IACE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EACpE,CAAC;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;YACD,yEAAyE;YACzE,uEAAuE;YACvE,uBAAuB;YACvB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,gBAAgB,CACzB,MAAM,CAAC,SAAS,EAChB,oCAAoC,MAAM,CAAC,GAAG,CAAC,iFAAiF,CACjI;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,SAAiB,EAAE,KAAyB;QAC1D,MAAM,GAAG,GAAG,IAAI,WAAW,CACzB;YACE,GAAG,IAAI,CAAC,UAAU;YAClB,cAAc,EAAE,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;YAC3B,mEAAmE;YACnE,gBAAgB,EAAE,KAAK;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,EACD,IAAI,CAAC,aAAa,EAAE,EAAE,CACvB,CAAC;QACF,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IAC5E,CAAC;IAEO,SAAS,CACf,SAAiB,EACjB,IAAwC;QAExC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,IAAI,wBAAwB,CACjC,IAAI,CAAC,cAAc,IAAI,SAAS,EAChC,UAAU,SAAS,wBAAwB,CAC5C;SACF,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,IAAY;QACpC,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC;QACjD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,IAAI,QAAQ,CACjB,IAAI,IAAI,sDAAsD,EAC9D,yBAAyB,CAC1B;SACF,CAAC;IACJ,CAAC;IAEO,SAAS;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QACpD,IAAI,CAAC,SAAS,KAAK,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACxE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,aAAa,CAAC,MAAgB;QACpC,IAAI,CAAC,YAAY,KAAK,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC;gBAAE,OAAO;YAC9D,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kEAAkE;gBAClE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;oBAAE,MAAM,GAAG,CAAC;YACtE,CAAC;QACH,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YAC1B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAgB,EAAE,KAAa;QACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,MAAgB,EAChB,SAAiB;QAEjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACtE,SAAS;SACV,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;CACF"}
|
package/dist/pg-vector-rag.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface PgClient {
|
|
|
9
9
|
}>;
|
|
10
10
|
end(): Promise<void>;
|
|
11
11
|
}
|
|
12
|
+
/** Opens the pool a handle, or a provider's catalog work, talks through. */
|
|
13
|
+
export declare function createPgClient(cfg: PgVectorRagConfig): Promise<PgClient>;
|
|
12
14
|
export declare class PgVectorRag implements IRag {
|
|
13
15
|
private readonly collectionName;
|
|
14
16
|
private readonly dimension;
|
|
@@ -20,7 +22,6 @@ export declare class PgVectorRag implements IRag {
|
|
|
20
22
|
constructor(config: PgVectorRagConfig & {
|
|
21
23
|
embedder: IEmbedder;
|
|
22
24
|
}, injectedClient?: PgClient);
|
|
23
|
-
private createDriverClient;
|
|
24
25
|
ensureSchema(): Promise<void>;
|
|
25
26
|
private maybeEnsureSchema;
|
|
26
27
|
query(embedding: IQueryEmbedding, k: number, options?: CallOptions): Promise<Result<RagResult[], RagError>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-vector-rag.d.ts","sourceRoot":"","sources":["../src/pg-vector-rag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,IAAI,EACJ,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,MAAM,EACP,MAAM,yBAAyB,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"pg-vector-rag.d.ts","sourceRoot":"","sources":["../src/pg-vector-rag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,eAAe,EACf,IAAI,EACJ,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,MAAM,EACP,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,QAAQ,EAET,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AASzD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,MAAM,WAAW,QAAQ;IACvB,KAAK,CACH,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAC1B,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAMD,4EAA4E;AAC5E,wBAAsB,cAAc,CAClC,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,QAAQ,CAAC,CAmBnB;AAED,qBAAa,WAAY,YAAW,IAAI;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAgB;gBAGpC,MAAM,EAAE,iBAAiB,GAAG;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,EACnD,cAAc,CAAC,EAAE,QAAQ;IAgBrB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YAWrB,iBAAiB;IAIzB,KAAK,CACT,SAAS,EAAE,eAAe,EAC1B,CAAC,EAAE,MAAM,EACT,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;IAuDnC,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;IAyBxC,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAa9C,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAW5B,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAIpB,WAAW;IAmBzB,MAAM,IAAI,iBAAiB;CAoC5B"}
|
package/dist/pg-vector-rag.js
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
|
-
import { FallbackQueryEmbedding, RagError } from '@mcp-abap-adt/llm-agent';
|
|
1
|
+
import { FallbackQueryEmbedding, RagError, ragIdentityFilter, } from '@mcp-abap-adt/llm-agent';
|
|
2
2
|
import { resolvePgConnectArgs } from './connection.js';
|
|
3
3
|
import { assertCollectionName, createExtensionSql, createTableSql, quoteIdent, } from './schema.js';
|
|
4
4
|
function vectorLiteral(vec) {
|
|
5
5
|
return `'[${vec.join(',')}]'::vector`;
|
|
6
6
|
}
|
|
7
|
+
/** Opens the pool a handle, or a provider's catalog work, talks through. */
|
|
8
|
+
export async function createPgClient(cfg) {
|
|
9
|
+
const args = await resolvePgConnectArgs(cfg);
|
|
10
|
+
const mod = (await import('pg'));
|
|
11
|
+
const PoolCtor = mod.Pool ?? mod.default?.Pool;
|
|
12
|
+
if (!PoolCtor)
|
|
13
|
+
throw new Error('pg module did not expose Pool');
|
|
14
|
+
const pool = new PoolCtor(args);
|
|
15
|
+
return {
|
|
16
|
+
query: (sql, params = []) => pool.query(sql, params),
|
|
17
|
+
end: () => pool.end(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
7
20
|
export class PgVectorRag {
|
|
8
21
|
collectionName;
|
|
9
22
|
dimension;
|
|
@@ -22,22 +35,10 @@ export class PgVectorRag {
|
|
|
22
35
|
// The rejection is re-thrown when clientPromise is actually awaited.
|
|
23
36
|
const driverPromise = injectedClient
|
|
24
37
|
? Promise.resolve(injectedClient)
|
|
25
|
-
:
|
|
38
|
+
: createPgClient(config);
|
|
26
39
|
driverPromise.catch(() => { });
|
|
27
40
|
this.clientPromise = driverPromise;
|
|
28
41
|
}
|
|
29
|
-
async createDriverClient(cfg) {
|
|
30
|
-
const args = resolvePgConnectArgs(cfg);
|
|
31
|
-
const mod = (await import('pg'));
|
|
32
|
-
const PoolCtor = mod.Pool ?? mod.default?.Pool;
|
|
33
|
-
if (!PoolCtor)
|
|
34
|
-
throw new Error('pg module did not expose Pool');
|
|
35
|
-
const pool = new PoolCtor(args);
|
|
36
|
-
return {
|
|
37
|
-
query: (sql, params = []) => pool.query(sql, params),
|
|
38
|
-
end: () => pool.end(),
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
42
|
async ensureSchema() {
|
|
42
43
|
if (this.schemaReady)
|
|
43
44
|
return;
|
|
@@ -63,11 +64,41 @@ export class PgVectorRag {
|
|
|
63
64
|
const client = await this.clientPromise;
|
|
64
65
|
const table = quoteIdent(this.collectionName);
|
|
65
66
|
const lit = vectorLiteral(vector);
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
// The filters, as parameterised conditions on the jsonb metadata (never
|
|
68
|
+
// interpolated) — the same contract VectorRag / QdrantRag apply:
|
|
69
|
+
// - session/user scope: `->>` yields NULL for a missing key, and
|
|
70
|
+
// NULL = $n is not true, so an unowned row is excluded;
|
|
71
|
+
// - `ragFilter.namespace`: the same, on `metadata.namespace`;
|
|
72
|
+
// - expiry: a numeric `metadata.ttl` (epoch seconds) in the past drops
|
|
73
|
+
// the row; a missing or non-numeric ttl never expires. The CASE keeps
|
|
74
|
+
// the float8 cast away from a non-numeric value, which would fail the
|
|
75
|
+
// whole query.
|
|
76
|
+
// The WHERE runs before ORDER BY … LIMIT: the table has no ANN index, so
|
|
77
|
+
// the scan is exact and LIMIT counts only matching rows.
|
|
78
|
+
const identity = ragIdentityFilter(options);
|
|
79
|
+
const targetNamespace = options?.ragFilter?.namespace;
|
|
80
|
+
const conditions = [];
|
|
81
|
+
const params = [];
|
|
82
|
+
if (identity?.sessionId !== undefined) {
|
|
83
|
+
params.push(identity.sessionId);
|
|
84
|
+
conditions.push(`metadata->>'sessionId' = $${params.length}`);
|
|
85
|
+
}
|
|
86
|
+
if (identity?.userId !== undefined) {
|
|
87
|
+
params.push(identity.userId);
|
|
88
|
+
conditions.push(`metadata->>'userId' = $${params.length}`);
|
|
89
|
+
}
|
|
90
|
+
if (typeof targetNamespace === 'string') {
|
|
91
|
+
params.push(targetNamespace);
|
|
92
|
+
conditions.push(`metadata->>'namespace' = $${params.length}`);
|
|
93
|
+
}
|
|
94
|
+
params.push(Date.now() / 1000);
|
|
95
|
+
conditions.push(`COALESCE(CASE WHEN jsonb_typeof(metadata->'ttl') = 'number' THEN (metadata->>'ttl')::float8 END, 'infinity'::float8) >= $${params.length}`);
|
|
96
|
+
const where = ` WHERE ${conditions.join(' AND ')}`;
|
|
97
|
+
const sql = `SELECT id, text, metadata, vector <=> ${lit} AS score FROM ${table}${where} ORDER BY vector <=> ${lit} LIMIT ${Math.max(1, k)}`;
|
|
98
|
+
const { rows } = await client.query(sql, params);
|
|
68
99
|
const results = rows.map((row) => ({
|
|
69
100
|
text: String(row.text ?? ''),
|
|
70
|
-
metadata: row
|
|
101
|
+
metadata: withId(row),
|
|
71
102
|
score: 1 - Number(row.score ?? 0),
|
|
72
103
|
}));
|
|
73
104
|
return { ok: true, value: results };
|
|
@@ -90,7 +121,7 @@ export class PgVectorRag {
|
|
|
90
121
|
ok: true,
|
|
91
122
|
value: {
|
|
92
123
|
text: String(row.text ?? ''),
|
|
93
|
-
metadata: row
|
|
124
|
+
metadata: withId(row),
|
|
94
125
|
score: 1,
|
|
95
126
|
},
|
|
96
127
|
};
|
|
@@ -176,4 +207,12 @@ export class PgVectorRag {
|
|
|
176
207
|
};
|
|
177
208
|
}
|
|
178
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* upsert keeps the id in its own column and out of the jsonb, so a read puts
|
|
212
|
+
* it back: readers find a record's id in its metadata, as every other store
|
|
213
|
+
* returns it (tool selection's toolNameFromRecord keys on it).
|
|
214
|
+
*/
|
|
215
|
+
function withId(row) {
|
|
216
|
+
return { ...(row.metadata ?? {}), id: String(row.id) };
|
|
217
|
+
}
|
|
179
218
|
//# sourceMappingURL=pg-vector-rag.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-vector-rag.js","sourceRoot":"","sources":["../src/pg-vector-rag.ts"],"names":[],"mappings":"AAUA,OAAO,
|
|
1
|
+
{"version":3,"file":"pg-vector-rag.js","sourceRoot":"","sources":["../src/pg-vector-rag.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export declare function assertCollectionName(name: string): void;
|
|
2
2
|
export declare function quoteIdent(ident: string): string;
|
|
3
3
|
export declare function createExtensionSql(): string;
|
|
4
|
-
export declare function createTableSql(collection: string, dimension: number
|
|
4
|
+
export declare function createTableSql(collection: string, dimension: number, opts?: {
|
|
5
|
+
ifNotExists?: boolean;
|
|
6
|
+
}): string;
|
|
5
7
|
export declare function dropTableSql(collection: string): string;
|
|
6
8
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,cAAc,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,MAAM,CAUR;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
package/dist/schema.js
CHANGED
|
@@ -12,9 +12,10 @@ export function quoteIdent(ident) {
|
|
|
12
12
|
export function createExtensionSql() {
|
|
13
13
|
return 'CREATE EXTENSION IF NOT EXISTS vector';
|
|
14
14
|
}
|
|
15
|
-
export function createTableSql(collection, dimension) {
|
|
15
|
+
export function createTableSql(collection, dimension, opts = {}) {
|
|
16
16
|
const table = quoteIdent(collection);
|
|
17
|
-
|
|
17
|
+
const clause = opts.ifNotExists === false ? '' : 'IF NOT EXISTS ';
|
|
18
|
+
return `CREATE TABLE ${clause}${table} (
|
|
18
19
|
id VARCHAR(255) PRIMARY KEY,
|
|
19
20
|
text TEXT,
|
|
20
21
|
vector vector(${dimension}),
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAE3D,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,QAAQ,CAChB,4BAA4B,IAAI,EAAE,EAClC,yBAAyB,CAC1B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,IAAI,KAAK,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,uCAAuC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAE3D,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,QAAQ,CAChB,4BAA4B,IAAI,EAAE,EAClC,yBAAyB,CAC1B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,IAAI,KAAK,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,uCAAuC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,SAAiB,EACjB,OAAkC,EAAE;IAEpC,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,OAAO,gBAAgB,MAAM,GAAG,KAAK;;;oBAGnB,SAAS;;;IAGzB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,wBAAwB,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;AAC1D,CAAC"}
|