@mcp-abap-adt/qdrant-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.
Files changed (34) hide show
  1. package/README.md +22 -0
  2. package/dist/__tests__/catalog.test.d.ts +2 -0
  3. package/dist/__tests__/catalog.test.d.ts.map +1 -0
  4. package/dist/__tests__/catalog.test.js +241 -0
  5. package/dist/__tests__/catalog.test.js.map +1 -0
  6. package/dist/__tests__/credential.test.d.ts +2 -0
  7. package/dist/__tests__/credential.test.d.ts.map +1 -0
  8. package/dist/__tests__/credential.test.js +93 -0
  9. package/dist/__tests__/credential.test.js.map +1 -0
  10. package/dist/__tests__/qdrant-stub.d.ts +52 -0
  11. package/dist/__tests__/qdrant-stub.d.ts.map +1 -0
  12. package/dist/__tests__/qdrant-stub.js +206 -0
  13. package/dist/__tests__/qdrant-stub.js.map +1 -0
  14. package/dist/__tests__/rag-filter-conformance.test.d.ts +2 -0
  15. package/dist/__tests__/rag-filter-conformance.test.d.ts.map +1 -0
  16. package/dist/__tests__/rag-filter-conformance.test.js +25 -0
  17. package/dist/__tests__/rag-filter-conformance.test.js.map +1 -0
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/qdrant-rag-provider.d.ts +41 -11
  23. package/dist/qdrant-rag-provider.d.ts.map +1 -1
  24. package/dist/qdrant-rag-provider.js +296 -29
  25. package/dist/qdrant-rag-provider.js.map +1 -1
  26. package/dist/qdrant-rag-provider.test.js +0 -11
  27. package/dist/qdrant-rag-provider.test.js.map +1 -1
  28. package/dist/qdrant-rag.d.ts +23 -2
  29. package/dist/qdrant-rag.d.ts.map +1 -1
  30. package/dist/qdrant-rag.js +45 -19
  31. package/dist/qdrant-rag.js.map +1 -1
  32. package/dist/qdrant-rag.test.js +51 -3
  33. package/dist/qdrant-rag.test.js.map +1 -1
  34. package/package.json +5 -4
@@ -1,50 +1,168 @@
1
- import { AbstractRagProvider as BaseRagProvider, RagError, } from '@mcp-abap-adt/llm-agent';
2
- import { QdrantRag } from './qdrant-rag.js';
1
+ import { AbstractRagProvider as BaseRagProvider, CatalogRecordDeleteError, DuplicateCollectionError, describeRagCatalogRows, encodeRagAttributes, OrphanStoreError, RagError, ragOwnerKeys, validateRagOwner, } from '@mcp-abap-adt/llm-agent';
2
+ import { deterministicUUID, QdrantRag } from './qdrant-rag.js';
3
+ /** The collection a QdrantRagProvider keeps one point per collection in, by default. */
4
+ export const DEFAULT_CATALOG_COLLECTION = 'rag_collection_catalog';
5
+ /** Embedded once per collection created, to learn the size Qdrant fixes at creation. */
6
+ const DIMENSION_PROBE = 'dimension probe';
7
+ const SCROLL_PAGE = 256;
3
8
  export class QdrantRagProvider extends BaseRagProvider {
4
9
  name;
5
10
  kind = 'vector';
6
11
  editable;
7
12
  supportedScopes;
8
13
  url;
9
- apiKey;
14
+ credential;
10
15
  embedder;
11
16
  timeoutMs;
17
+ catalog;
18
+ catalogReady;
12
19
  constructor(cfg) {
13
20
  super();
14
21
  this.name = cfg.name;
15
22
  this.url = cfg.url.replace(/\/+$/, '');
16
- this.apiKey = cfg.apiKey;
23
+ this.credential = cfg.credential;
17
24
  this.embedder = cfg.embedder;
18
25
  this.timeoutMs = cfg.timeoutMs;
19
26
  this.editable = cfg.editable ?? true;
20
27
  this.supportedScopes = cfg.supportedScopes ?? ['session', 'user', 'global'];
28
+ this.catalog = cfg.catalogCollection ?? DEFAULT_CATALOG_COLLECTION;
21
29
  if (cfg.idStrategyFactory)
22
30
  this.idStrategyFactory = cfg.idStrategyFactory;
23
31
  }
32
+ /**
33
+ * Creates the collection — sized by one probe embedding — with a request that
34
+ * fails if it exists, then commits the creation by writing the record last,
35
+ * create-if-absent (§6.3).
36
+ */
24
37
  async createCollection(name, opts) {
25
- const scopeCheck = this.checkScope(opts.scope);
26
- if (!scopeCheck.ok)
27
- return scopeCheck;
28
- const rag = new QdrantRag({
29
- url: this.url,
30
- apiKey: this.apiKey,
31
- embedder: this.embedder,
32
- collectionName: name,
33
- timeoutMs: this.timeoutMs,
34
- });
35
- const editor = this.buildEditor(rag, this.pickIdStrategy(opts));
36
- return { ok: true, value: { rag, editor } };
38
+ const checked = this.checkCreateOptions(opts);
39
+ if (!checked.ok)
40
+ return checked;
41
+ const refused = this.refuseCatalogName(name);
42
+ if (refused)
43
+ return refused;
44
+ try {
45
+ await this.ensureCatalog();
46
+ if (await this.readRecord(name))
47
+ return this.duplicate(name, opts);
48
+ if (opts.adoptExisting === true) {
49
+ if (!(await this.collectionExists(name))) {
50
+ return {
51
+ ok: false,
52
+ error: new RagError(`Qdrant collection '${name}' does not exist; adoptExisting takes over an existing store and creates nothing`, 'RAG_CREATE_ERROR'),
53
+ };
54
+ }
55
+ }
56
+ else {
57
+ const created = await this.createStore(name, opts);
58
+ if (!created.ok)
59
+ return created;
60
+ }
61
+ const recorded = await this.writeRecord({
62
+ ...checked.value,
63
+ storeName: name,
64
+ name: opts.collectionName ?? name,
65
+ attributes: opts.attributes,
66
+ }, opts);
67
+ if (!recorded.ok)
68
+ return recorded;
69
+ return { ok: true, value: this.handles(name, checked.value) };
70
+ }
71
+ catch (err) {
72
+ return {
73
+ ok: false,
74
+ error: err instanceof RagError
75
+ ? err
76
+ : new RagError(String(err), 'RAG_CREATE_ERROR'),
77
+ };
78
+ }
79
+ }
80
+ /** The catalog, paged and read back through the shared row check. Creates nothing. */
81
+ async describeCollections() {
82
+ try {
83
+ if (!(await this.collectionExists(this.catalog))) {
84
+ return { ok: true, value: { records: [], rejected: [] } };
85
+ }
86
+ const rows = [];
87
+ let offset = null;
88
+ do {
89
+ const res = await this.request(`/collections/${this.catalog}/points/scroll`, {
90
+ method: 'POST',
91
+ body: JSON.stringify({
92
+ limit: SCROLL_PAGE,
93
+ with_payload: true,
94
+ with_vector: false,
95
+ ...(offset === null ? {} : { offset }),
96
+ }),
97
+ });
98
+ if (!res.ok) {
99
+ throw new RagError(`Qdrant catalog scroll failed: HTTP ${res.status} ${await res.text()}`, 'RAG_LIST_ERROR');
100
+ }
101
+ const json = (await res.json());
102
+ for (const point of json.result?.points ?? []) {
103
+ const p = point.payload ?? {};
104
+ rows.push({
105
+ storeName: p.store_name,
106
+ name: p.collection_name,
107
+ scope: p.scope,
108
+ userId: p.user_id,
109
+ sessionId: p.session_id,
110
+ attributesJson: p.attributes_json,
111
+ });
112
+ }
113
+ offset = json.result?.next_page_offset ?? null;
114
+ } while (offset !== null);
115
+ return { ok: true, value: describeRagCatalogRows(rows) };
116
+ }
117
+ catch (err) {
118
+ return {
119
+ ok: false,
120
+ error: err instanceof RagError
121
+ ? err
122
+ : new RagError(String(err), 'RAG_LIST_ERROR'),
123
+ };
124
+ }
37
125
  }
126
+ /** Handles for a collection that exists. Issues no request, and the handles never create. */
127
+ async openCollection(record) {
128
+ const owner = validateRagOwner(record);
129
+ if (!owner.ok)
130
+ return owner;
131
+ try {
132
+ return { ok: true, value: this.handles(record.storeName, owner.value) };
133
+ }
134
+ catch (err) {
135
+ return { ok: false, error: new RagError(String(err), 'RAG_OPEN_ERROR') };
136
+ }
137
+ }
138
+ /** The record first, then the collection (§6.3). */
38
139
  async deleteCollection(name) {
140
+ const refused = this.refuseCatalogName(name);
141
+ if (refused)
142
+ return refused;
39
143
  try {
40
- const headers = {
41
- 'Content-Type': 'application/json',
144
+ if (await this.collectionExists(this.catalog)) {
145
+ const res = await this.request(`/collections/${this.catalog}/points/delete?wait=true`, {
146
+ method: 'POST',
147
+ body: JSON.stringify({ points: [await deterministicUUID(name)] }),
148
+ });
149
+ if (!res.ok) {
150
+ return {
151
+ ok: false,
152
+ error: new CatalogRecordDeleteError(name, `HTTP ${res.status} ${await res.text()}`),
153
+ };
154
+ }
155
+ }
156
+ }
157
+ catch (err) {
158
+ return {
159
+ ok: false,
160
+ error: new CatalogRecordDeleteError(name, String(err)),
42
161
  };
43
- if (this.apiKey)
44
- headers['api-key'] = this.apiKey;
45
- const res = await fetch(`${this.url}/collections/${name}`, {
162
+ }
163
+ try {
164
+ const res = await this.request(`/collections/${name}`, {
46
165
  method: 'DELETE',
47
- headers,
48
166
  });
49
167
  if (!res.ok) {
50
168
  const body = await res.text();
@@ -64,12 +182,7 @@ export class QdrantRagProvider extends BaseRagProvider {
64
182
  }
65
183
  async listCollections() {
66
184
  try {
67
- const headers = {
68
- 'Content-Type': 'application/json',
69
- };
70
- if (this.apiKey)
71
- headers['api-key'] = this.apiKey;
72
- const res = await fetch(`${this.url}/collections`, { headers });
185
+ const res = await this.request('/collections');
73
186
  if (!res.ok) {
74
187
  const body = await res.text();
75
188
  return {
@@ -79,7 +192,7 @@ export class QdrantRagProvider extends BaseRagProvider {
79
192
  }
80
193
  const json = (await res.json());
81
194
  const names = json.result?.collections?.map((c) => c.name) ?? [];
82
- return { ok: true, value: names };
195
+ return { ok: true, value: names.filter((n) => n !== this.catalog) };
83
196
  }
84
197
  catch (err) {
85
198
  return {
@@ -88,5 +201,159 @@ export class QdrantRagProvider extends BaseRagProvider {
88
201
  };
89
202
  }
90
203
  }
204
+ async createStore(name, opts) {
205
+ // Qdrant fixes a collection's vector size at creation and IEmbedder
206
+ // declares none, so one probe embedding learns it — once per collection
207
+ // created, none per write.
208
+ const { vector } = await this.embedder.embed(DIMENSION_PROBE);
209
+ const res = await this.request(`/collections/${name}`, {
210
+ method: 'PUT',
211
+ body: JSON.stringify({
212
+ vectors: { size: vector.length, distance: 'Cosine' },
213
+ }),
214
+ });
215
+ if (res.ok)
216
+ return { ok: true, value: undefined };
217
+ const body = await res.text();
218
+ if (!(await this.collectionExists(name))) {
219
+ return {
220
+ ok: false,
221
+ error: new RagError(`Qdrant create collection failed: ${body}`, 'RAG_CREATE_ERROR'),
222
+ };
223
+ }
224
+ if (await this.readRecord(name))
225
+ return this.duplicate(name, opts);
226
+ return {
227
+ ok: false,
228
+ 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'),
229
+ };
230
+ }
231
+ async writeRecord(record, opts) {
232
+ const { userId, sessionId } = ragOwnerKeys(record);
233
+ const writeId = crypto.randomUUID();
234
+ const payload = {
235
+ store_name: record.storeName,
236
+ collection_name: record.name,
237
+ scope: record.scope,
238
+ ...(userId === undefined ? {} : { user_id: userId }),
239
+ ...(sessionId === undefined ? {} : { session_id: sessionId }),
240
+ attributes_json: encodeRagAttributes(record.attributes),
241
+ write_id: writeId,
242
+ };
243
+ let failure;
244
+ try {
245
+ const res = await this.request(`/collections/${this.catalog}/points?wait=true`, {
246
+ method: 'PUT',
247
+ body: JSON.stringify({
248
+ points: [
249
+ {
250
+ id: await deterministicUUID(record.storeName),
251
+ vector: [1],
252
+ payload,
253
+ },
254
+ ],
255
+ update_mode: 'insert_only',
256
+ }),
257
+ });
258
+ if (!res.ok)
259
+ failure = `HTTP ${res.status} ${await res.text()}`;
260
+ }
261
+ catch (err) {
262
+ failure = String(err);
263
+ }
264
+ // insert_only IGNORES a write whose point exists (Qdrant ≥ 1.17), so the
265
+ // outcome is read back: the record is this call's only if it carries this
266
+ // call's write id.
267
+ const stored = await this.readRecord(record.storeName).catch(() => undefined);
268
+ if (stored?.write_id === writeId)
269
+ return { ok: true, value: undefined };
270
+ if (stored)
271
+ return this.duplicate(record.storeName, opts);
272
+ // Never removed: another registry may adopt the collection and record it
273
+ // before a removal could run (§6.3).
274
+ return {
275
+ ok: false,
276
+ error: new OrphanStoreError(record.storeName, `its record could not be written (${failure ?? 'the write was accepted, but no record was found'}); the collection is left in place until it is adopted with adoptExisting or removed`),
277
+ };
278
+ }
279
+ handles(storeName, owner) {
280
+ const rag = new QdrantRag({
281
+ url: this.url,
282
+ credential: this.credential,
283
+ embedder: this.embedder,
284
+ collectionName: storeName,
285
+ timeoutMs: this.timeoutMs,
286
+ autoCreateCollection: false,
287
+ });
288
+ return { rag, editor: this.buildEditor(rag, this.pickIdStrategy(owner)) };
289
+ }
290
+ duplicate(storeName, opts) {
291
+ return {
292
+ ok: false,
293
+ error: new DuplicateCollectionError(opts.collectionName ?? storeName, `collection '${storeName}' already has a record`),
294
+ };
295
+ }
296
+ refuseCatalogName(name) {
297
+ if (name !== this.catalog)
298
+ return undefined;
299
+ return {
300
+ ok: false,
301
+ error: new RagError(`'${name}' is this provider's catalog collection, not a collection`, 'INVALID_COLLECTION_NAME'),
302
+ };
303
+ }
304
+ ensureCatalog() {
305
+ this.catalogReady ??= (async () => {
306
+ if (await this.collectionExists(this.catalog))
307
+ return;
308
+ const res = await this.request(`/collections/${this.catalog}`, {
309
+ method: 'PUT',
310
+ body: JSON.stringify({ vectors: { size: 1, distance: 'Dot' } }),
311
+ });
312
+ if (res.ok)
313
+ return;
314
+ const body = await res.text();
315
+ // Another process may have created it between the check and here.
316
+ if (!(await this.collectionExists(this.catalog))) {
317
+ throw new RagError(`Qdrant could not create the catalog collection '${this.catalog}': ${body}`, 'RAG_CREATE_ERROR');
318
+ }
319
+ })().catch((err) => {
320
+ this.catalogReady = undefined;
321
+ throw err;
322
+ });
323
+ return this.catalogReady;
324
+ }
325
+ async collectionExists(name) {
326
+ const res = await this.request(`/collections/${name}`);
327
+ if (res.ok)
328
+ return true;
329
+ if (res.status === 404)
330
+ return false;
331
+ throw new RagError(`Qdrant could not say whether collection '${name}' exists: HTTP ${res.status} ${await res.text()}`, 'RAG_BACKEND_ERROR');
332
+ }
333
+ /** The catalog point's payload, or undefined when there is none (or no catalog yet). */
334
+ async readRecord(storeName) {
335
+ const res = await this.request(`/collections/${this.catalog}/points`, {
336
+ method: 'POST',
337
+ body: JSON.stringify({
338
+ ids: [await deterministicUUID(storeName)],
339
+ with_payload: true,
340
+ }),
341
+ });
342
+ if (res.status === 404)
343
+ return undefined;
344
+ if (!res.ok) {
345
+ throw new RagError(`Qdrant catalog read failed: HTTP ${res.status} ${await res.text()}`, 'RAG_BACKEND_ERROR');
346
+ }
347
+ const json = (await res.json());
348
+ return json.result?.[0]?.payload;
349
+ }
350
+ async request(path, init = {}) {
351
+ const headers = {
352
+ 'Content-Type': 'application/json',
353
+ };
354
+ if (this.credential)
355
+ headers['api-key'] = await this.credential.secret();
356
+ return fetch(`${this.url}${path}`, { ...init, headers });
357
+ }
91
358
  }
92
359
  //# sourceMappingURL=qdrant-rag-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qdrant-rag-provider.js","sourceRoot":"","sources":["../src/qdrant-rag-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qdrant-rag-provider.js","sourceRoot":"","sources":["../src/qdrant-rag-provider.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@ import assert from 'node:assert/strict';
2
2
  import http from 'node:http';
3
3
  import { after, before, describe, it } from 'node:test';
4
4
  import { UnsupportedScopeError } from '@mcp-abap-adt/llm-agent';
5
- import { QdrantRag } from './qdrant-rag.js';
6
5
  import { QdrantRagProvider } from './qdrant-rag-provider.js';
7
6
  function makeEmbedder(dim = 3) {
8
7
  return {
@@ -107,16 +106,6 @@ describe('QdrantRagProvider', () => {
107
106
  'user',
108
107
  ]);
109
108
  });
110
- it('creates a QdrantRag targeting the collection name', async () => {
111
- const p = new QdrantRagProvider({
112
- name: 'qdrant',
113
- url: baseUrl,
114
- embedder: makeEmbedder(),
115
- });
116
- const res = await p.createCollection('test-a', { scope: 'global' });
117
- assert.ok(res.ok);
118
- assert.ok(res.value.rag instanceof QdrantRag);
119
- });
120
109
  it('rejects unsupported scope when supportedScopes is restricted', async () => {
121
110
  const p = new QdrantRagProvider({
122
111
  name: 'q',
@@ -1 +1 @@
1
- {"version":3,"file":"qdrant-rag-provider.test.js","sourceRoot":"","sources":["../src/qdrant-rag-provider.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qdrant-rag-provider.test.js","sourceRoot":"","sources":["../src/qdrant-rag-provider.test.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,43 @@
1
+ import type { IApiKeyCredential } from '@mcp-abap-adt/interfaces-auth';
1
2
  import type { IEmbedder, IQueryEmbedding, IRag, IRagBackendWriter } from '@mcp-abap-adt/llm-agent';
2
3
  import { type CallOptions, RagError, type RagMetadata, type RagResult, type Result } from '@mcp-abap-adt/llm-agent';
4
+ /**
5
+ * Derive a deterministic UUID from a stable string key using SHA-256.
6
+ * The first 16 bytes of the hash are formatted as a UUID v5-style string.
7
+ */
8
+ export declare function deterministicUUID(key: string): Promise<string>;
3
9
  export interface QdrantRagConfig {
4
10
  url: string;
5
11
  collectionName: string;
6
12
  embedder: IEmbedder;
7
- apiKey?: string;
13
+ /**
14
+ * Asked for fresh on every request — never cached — so a rotating key
15
+ * rotates and a resolved-once secret is never frozen for this object's
16
+ * lifetime. Optional: an unauthenticated Qdrant deployment works today
17
+ * without one.
18
+ */
19
+ credential?: IApiKeyCredential;
8
20
  /**
9
21
  * Per-request timeout in ms. **No default** — unset, a request is bounded
10
22
  * only by the caller's own signal.
11
23
  */
12
24
  timeoutMs?: number;
25
+ /**
26
+ * Create the collection on the first write when it is missing, sized from
27
+ * that write's vector. Default `true` — a store configured directly relies on
28
+ * it. `QdrantRagProvider` passes `false`: its collections are created by
29
+ * `createCollection` only, so a handle whose collection is gone fails instead
30
+ * of recreating it without a catalog record (§6.3).
31
+ */
32
+ autoCreateCollection?: boolean;
13
33
  }
14
34
  export declare class QdrantRag implements IRag {
15
35
  private readonly url;
16
36
  private readonly collectionName;
17
37
  private readonly embedder;
18
- private readonly apiKey?;
38
+ private readonly credential?;
19
39
  private readonly timeoutMs;
40
+ private readonly autoCreateCollection;
20
41
  private collectionEnsured;
21
42
  constructor(config: QdrantRagConfig);
22
43
  private _headers;
@@ -1 +1 @@
1
- {"version":3,"file":"qdrant-rag.d.ts","sourceRoot":"","sources":["../src/qdrant-rag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,IAAI,EACJ,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,WAAW,EAEhB,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,MAAM,EACZ,MAAM,yBAAyB,CAAC;AAcjC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAU,YAAW,IAAI;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,eAAe;IAQnC,OAAO,CAAC,QAAQ;YAMF,MAAM;YA8BN,iBAAiB;YA2DjB,iBAAiB;IA0CzB,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAa5B,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAO5B,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;IA6EnC,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;IAyCxC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IA4BzE,MAAM,IAAI,iBAAiB;CA8G5B"}
1
+ {"version":3,"file":"qdrant-rag.d.ts","sourceRoot":"","sources":["../src/qdrant-rag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,IAAI,EACJ,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,KAAK,WAAW,EAEhB,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,MAAM,EAEZ,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMpE;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,qBAAa,SAAU,YAAW,IAAI;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAY;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,eAAe;YASrB,QAAQ;YAMR,MAAM;YA8BN,iBAAiB;YA2DjB,iBAAiB;IA4CzB,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAa5B,iBAAiB,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAO5B,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;IAiGnC,OAAO,CACX,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;IAyCxC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IA4BzE,MAAM,IAAI,iBAAiB;CAmH5B"}
@@ -1,9 +1,9 @@
1
- import { FallbackQueryEmbedding, RagError, } from '@mcp-abap-adt/llm-agent';
1
+ import { FallbackQueryEmbedding, RagError, ragIdentityFilter, } from '@mcp-abap-adt/llm-agent';
2
2
  /**
3
3
  * Derive a deterministic UUID from a stable string key using SHA-256.
4
4
  * The first 16 bytes of the hash are formatted as a UUID v5-style string.
5
5
  */
6
- async function deterministicUUID(key) {
6
+ export async function deterministicUUID(key) {
7
7
  const data = new TextEncoder().encode(key);
8
8
  const hashBuffer = await globalThis.crypto.subtle.digest('SHA-256', data);
9
9
  const bytes = new Uint8Array(hashBuffer, 0, 16);
@@ -14,20 +14,22 @@ export class QdrantRag {
14
14
  url;
15
15
  collectionName;
16
16
  embedder;
17
- apiKey;
17
+ credential;
18
18
  timeoutMs;
19
+ autoCreateCollection;
19
20
  collectionEnsured = false;
20
21
  constructor(config) {
21
22
  this.url = config.url.replace(/\/+$/, '');
22
23
  this.collectionName = config.collectionName;
23
24
  this.embedder = config.embedder;
24
- this.apiKey = config.apiKey;
25
+ this.credential = config.credential;
25
26
  this.timeoutMs = config.timeoutMs;
27
+ this.autoCreateCollection = config.autoCreateCollection ?? true;
26
28
  }
27
- _headers() {
29
+ async _headers() {
28
30
  const h = { 'Content-Type': 'application/json' };
29
- if (this.apiKey)
30
- h['api-key'] = this.apiKey;
31
+ if (this.credential)
32
+ h['api-key'] = await this.credential.secret();
31
33
  return h;
32
34
  }
33
35
  async _fetch(path, init, signal) {
@@ -48,7 +50,7 @@ export class QdrantRag {
48
50
  return await fetch(`${this.url}${path}`, {
49
51
  ...init,
50
52
  signal: ctrl.signal,
51
- headers: { ...this._headers(), ...(init.headers ?? {}) },
53
+ headers: { ...(await this._headers()), ...(init.headers ?? {}) },
52
54
  });
53
55
  }
54
56
  finally {
@@ -98,7 +100,9 @@ export class QdrantRag {
98
100
  }
99
101
  async upsertKnownVector(text, vector, metadata, options) {
100
102
  try {
101
- await this._ensureCollection(vector.length, options?.signal);
103
+ if (this.autoCreateCollection) {
104
+ await this._ensureCollection(vector.length, options?.signal);
105
+ }
102
106
  const pointId = metadata?.id
103
107
  ? await deterministicUUID(metadata.id)
104
108
  : crypto.randomUUID();
@@ -166,20 +170,40 @@ export class QdrantRag {
166
170
  limit: k,
167
171
  with_payload: true,
168
172
  };
173
+ // The session/user scope. upsert spreads metadata flat into the
174
+ // payload, so `sessionId` / `userId` are top-level payload keys. A point
175
+ // without the key does not match a `match` condition, so an unowned
176
+ // point is never returned to a scoped query. Qdrant applies the filter
177
+ // inside the search, so `limit: k` counts only matching points.
178
+ const identity = ragIdentityFilter(options);
179
+ const identityMust = [];
180
+ if (identity?.sessionId !== undefined) {
181
+ identityMust.push({
182
+ key: 'sessionId',
183
+ match: { value: identity.sessionId },
184
+ });
185
+ }
186
+ if (identity?.userId !== undefined) {
187
+ identityMust.push({ key: 'userId', match: { value: identity.userId } });
188
+ }
169
189
  if (must.length > 0) {
170
190
  body.filter = {
191
+ // Top-level `must` is ANDed with the `should` below (at least one
192
+ // of which must hold), so the identity scope applies to both the
193
+ // TTL-bearing and the TTL-less branch.
194
+ ...(identityMust.length > 0 ? { must: identityMust } : {}),
171
195
  should: [
172
196
  { must },
173
- // Also match points without TTL set (no ttl field)
197
+ // Points with NO ttl field. `is_empty`, not "no ttl >= 0": that
198
+ // let a negative ttl — a time in the past, so expired — through
199
+ // as if it had none (PR #308 review).
174
200
  {
175
- must_not: [{ key: 'ttl', range: { gte: 0 } }],
176
- ...(targetNamespace !== undefined
177
- ? {
178
- must: [
179
- { key: 'namespace', match: { value: targetNamespace } },
180
- ],
181
- }
182
- : {}),
201
+ must: [
202
+ { is_empty: { key: 'ttl' } },
203
+ ...(targetNamespace !== undefined
204
+ ? [{ key: 'namespace', match: { value: targetNamespace } }]
205
+ : []),
206
+ ],
183
207
  },
184
208
  ],
185
209
  };
@@ -323,7 +347,9 @@ export class QdrantRag {
323
347
  if (items.length === 0)
324
348
  return { ok: true, value: undefined };
325
349
  try {
326
- await this._ensureCollection(items[0].vector.length, options?.signal);
350
+ if (this.autoCreateCollection) {
351
+ await this._ensureCollection(items[0].vector.length, options?.signal);
352
+ }
327
353
  const points = await Promise.all(items.map(async ({ id, text, vector, metadata }) => ({
328
354
  id: await deterministicUUID(id),
329
355
  vector,