@ariaflowagents/rag 0.7.0 → 0.9.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 (59) hide show
  1. package/dist/embedders/AiSdkEmbedder.d.ts +24 -0
  2. package/dist/embedders/AiSdkEmbedder.d.ts.map +1 -0
  3. package/dist/embedders/AiSdkEmbedder.js +37 -0
  4. package/dist/embedders/AiSdkEmbedder.js.map +1 -0
  5. package/dist/embedders/index.d.ts +3 -0
  6. package/dist/embedders/index.d.ts.map +1 -0
  7. package/dist/embedders/index.js +2 -0
  8. package/dist/embedders/index.js.map +1 -0
  9. package/dist/index.d.ts +14 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +16 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/pipeline/RagPipeline.d.ts +52 -0
  14. package/dist/pipeline/RagPipeline.d.ts.map +1 -0
  15. package/dist/pipeline/RagPipeline.js +105 -0
  16. package/dist/pipeline/RagPipeline.js.map +1 -0
  17. package/dist/pipeline/index.d.ts +3 -0
  18. package/dist/pipeline/index.d.ts.map +1 -0
  19. package/dist/pipeline/index.js +2 -0
  20. package/dist/pipeline/index.js.map +1 -0
  21. package/dist/rerankers/LLMReranker.d.ts +28 -0
  22. package/dist/rerankers/LLMReranker.d.ts.map +1 -0
  23. package/dist/rerankers/LLMReranker.js +70 -0
  24. package/dist/rerankers/LLMReranker.js.map +1 -0
  25. package/dist/rerankers/index.d.ts +3 -0
  26. package/dist/rerankers/index.d.ts.map +1 -0
  27. package/dist/rerankers/index.js +2 -0
  28. package/dist/rerankers/index.js.map +1 -0
  29. package/dist/retrievers/HybridRetriever.d.ts +39 -0
  30. package/dist/retrievers/HybridRetriever.d.ts.map +1 -0
  31. package/dist/retrievers/HybridRetriever.js +56 -0
  32. package/dist/retrievers/HybridRetriever.js.map +1 -0
  33. package/dist/retrievers/VectorRetriever.d.ts +26 -0
  34. package/dist/retrievers/VectorRetriever.d.ts.map +1 -0
  35. package/dist/retrievers/VectorRetriever.js +36 -0
  36. package/dist/retrievers/VectorRetriever.js.map +1 -0
  37. package/dist/retrievers/index.d.ts +5 -0
  38. package/dist/retrievers/index.d.ts.map +1 -0
  39. package/dist/retrievers/index.js +3 -0
  40. package/dist/retrievers/index.js.map +1 -0
  41. package/dist/tools/createVectorRetrievalTool.d.ts +69 -0
  42. package/dist/tools/createVectorRetrievalTool.d.ts.map +1 -0
  43. package/dist/tools/createVectorRetrievalTool.js +81 -0
  44. package/dist/tools/createVectorRetrievalTool.js.map +1 -0
  45. package/dist/tools/index.d.ts +3 -0
  46. package/dist/tools/index.d.ts.map +1 -0
  47. package/dist/tools/index.js +2 -0
  48. package/dist/tools/index.js.map +1 -0
  49. package/dist/types.d.ts +260 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/vectorStores/InMemoryVectorStore.d.ts +21 -0
  52. package/dist/vectorStores/InMemoryVectorStore.d.ts.map +1 -0
  53. package/dist/vectorStores/InMemoryVectorStore.js +158 -0
  54. package/dist/vectorStores/InMemoryVectorStore.js.map +1 -0
  55. package/dist/vectorStores/index.d.ts +2 -0
  56. package/dist/vectorStores/index.d.ts.map +1 -0
  57. package/dist/vectorStores/index.js +2 -0
  58. package/dist/vectorStores/index.js.map +1 -0
  59. package/package.json +1 -1
@@ -0,0 +1,24 @@
1
+ import type { EmbeddingModel } from 'ai';
2
+ import type { Embedder } from '../types.js';
3
+ export interface AiSdkEmbedderOptions {
4
+ /** Any Vercel AI SDK embedding model. */
5
+ model: EmbeddingModel;
6
+ }
7
+ /**
8
+ * Embedder implementation backed by the Vercel AI SDK.
9
+ *
10
+ * Supports any provider registered with the AI SDK:
11
+ * - openai.embedding('text-embedding-3-small')
12
+ * - google.embedding('text-embedding-004')
13
+ * - cohere.embedding('embed-english-v3.0')
14
+ * - mistral.embedding('mistral-embed')
15
+ */
16
+ export declare class AiSdkEmbedder implements Embedder {
17
+ private readonly model;
18
+ private cachedDimension;
19
+ constructor(options: AiSdkEmbedderOptions);
20
+ get dimension(): number | undefined;
21
+ embed(text: string): Promise<readonly number[]>;
22
+ embedMany(texts: string[]): Promise<readonly (readonly number[])[]>;
23
+ }
24
+ //# sourceMappingURL=AiSdkEmbedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiSdkEmbedder.d.ts","sourceRoot":"","sources":["../../src/embedders/AiSdkEmbedder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,KAAK,EAAE,cAAc,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,QAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAqB;gBAEhC,OAAO,EAAE,oBAAoB;IAIzC,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAEK,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAQ/C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CAQ1E"}
@@ -0,0 +1,37 @@
1
+ import { embed, embedMany } from 'ai';
2
+ /**
3
+ * Embedder implementation backed by the Vercel AI SDK.
4
+ *
5
+ * Supports any provider registered with the AI SDK:
6
+ * - openai.embedding('text-embedding-3-small')
7
+ * - google.embedding('text-embedding-004')
8
+ * - cohere.embedding('embed-english-v3.0')
9
+ * - mistral.embedding('mistral-embed')
10
+ */
11
+ export class AiSdkEmbedder {
12
+ model;
13
+ cachedDimension;
14
+ constructor(options) {
15
+ this.model = options.model;
16
+ }
17
+ get dimension() {
18
+ return this.cachedDimension;
19
+ }
20
+ async embed(text) {
21
+ const result = await embed({ model: this.model, value: text });
22
+ if (!this.cachedDimension) {
23
+ this.cachedDimension = result.embedding.length;
24
+ }
25
+ return result.embedding;
26
+ }
27
+ async embedMany(texts) {
28
+ if (texts.length === 0)
29
+ return [];
30
+ const result = await embedMany({ model: this.model, values: texts });
31
+ if (!this.cachedDimension && result.embeddings.length > 0) {
32
+ this.cachedDimension = result.embeddings[0].length;
33
+ }
34
+ return result.embeddings;
35
+ }
36
+ }
37
+ //# sourceMappingURL=AiSdkEmbedder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiSdkEmbedder.js","sourceRoot":"","sources":["../../src/embedders/AiSdkEmbedder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAStC;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAa;IACP,KAAK,CAAiB;IAC/B,eAAe,CAAqB;IAE5C,YAAY,OAA6B;QACvC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAe;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,CAAC;QACD,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export { AiSdkEmbedder } from './AiSdkEmbedder.js';
2
+ export type { AiSdkEmbedderOptions } from './AiSdkEmbedder.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embedders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AiSdkEmbedder } from './AiSdkEmbedder.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedders/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,18 @@ export type { KnowledgeChunk, KnowledgeSource, Chunker, ChunkOptions, RetrievalH
2
2
  export { createMarkdownChunker, createRecursiveChunker } from './chunkers.js';
3
3
  export { createStaticKnowledgeSource } from './source.js';
4
4
  export { createLLMRetriever } from './llmRetriever.js';
5
+ export type { Chunk, Document, DocumentLoader, Embedder, VectorEntry, VectorQueryResult, VectorQueryParams, CreateIndexParams, IndexStats, VectorFilter, VectorFilterCondition, VectorStore, RetrievalResult, RetrievalOptions, Retriever, RerankerOptions, Reranker, } from './types.js';
6
+ export { AiSdkEmbedder } from './embedders/index.js';
7
+ export type { AiSdkEmbedderOptions } from './embedders/index.js';
8
+ export { InMemoryVectorStore } from './vectorStores/index.js';
9
+ export { VectorRetriever } from './retrievers/index.js';
10
+ export type { VectorRetrieverOptions } from './retrievers/index.js';
11
+ export { HybridRetriever } from './retrievers/index.js';
12
+ export type { HybridRetrieverSource, HybridRetrieverOptions } from './retrievers/index.js';
13
+ export { LLMReranker } from './rerankers/index.js';
14
+ export type { LLMRerankerOptions } from './rerankers/index.js';
15
+ export { RagPipeline } from './pipeline/index.js';
16
+ export type { RagPipelineOptions } from './pipeline/index.js';
17
+ export { createVectorRetrievalTool } from './tools/index.js';
18
+ export type { VectorRetrievalToolOptions, VectorRetrievalToolOutput, VectorRetrievalToolInput, FilterableFieldDescriptor, } from './tools/index.js';
5
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,eAAe,EACf,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,cAAc,EACd,eAAe,EACf,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAOvD,YAAY,EACV,KAAK,EACL,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,QAAQ,GACT,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAG3F,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,20 @@
1
+ // ---------------------------------------------------------------------------
2
+ // CAG (Chunk and Generate) primitives
3
+ // ---------------------------------------------------------------------------
1
4
  export { createMarkdownChunker, createRecursiveChunker } from './chunkers.js';
2
5
  export { createStaticKnowledgeSource } from './source.js';
3
6
  export { createLLMRetriever } from './llmRetriever.js';
7
+ // Embedders
8
+ export { AiSdkEmbedder } from './embedders/index.js';
9
+ // Vector stores
10
+ export { InMemoryVectorStore } from './vectorStores/index.js';
11
+ // Retrievers
12
+ export { VectorRetriever } from './retrievers/index.js';
13
+ export { HybridRetriever } from './retrievers/index.js';
14
+ // Rerankers
15
+ export { LLMReranker } from './rerankers/index.js';
16
+ // Pipeline
17
+ export { RagPipeline } from './pipeline/index.js';
18
+ // Tools
19
+ export { createVectorRetrievalTool } from './tools/index.js';
4
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAY9E,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA2BvD,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,gBAAgB;AAChB,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,aAAa;AACb,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,QAAQ;AACR,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { Embedder, VectorStore, Chunker, Reranker, Document, RetrievalResult, RetrievalOptions, Retriever } from '../types.js';
2
+ export interface RagPipelineOptions {
3
+ /** Embedder for converting text to vectors. */
4
+ embedder: Embedder;
5
+ /** Vector store for persistent storage and similarity search. */
6
+ vectorStore: VectorStore;
7
+ /** Chunker for splitting documents into chunks. */
8
+ chunker: Chunker;
9
+ /** Index name for this pipeline's data. */
10
+ indexName: string;
11
+ /** Optional reranker for post-retrieval refinement. */
12
+ reranker?: Reranker;
13
+ /** Default topK for retrieval. Default: 10. */
14
+ topK?: number;
15
+ /** Distance metric for index creation. Default: 'cosine'. */
16
+ metric?: 'cosine' | 'euclidean' | 'dotproduct';
17
+ /** Batch size for embedMany calls. Default: 100. */
18
+ batchSize?: number;
19
+ }
20
+ /**
21
+ * Convenience class that wires embedder, vector store, chunker,
22
+ * and optional reranker into a single ingestion + retrieval pipeline.
23
+ *
24
+ * Implements the Retriever interface so it can be passed directly
25
+ * to createVectorRetrievalTool() or used as an agent retriever.
26
+ */
27
+ export declare class RagPipeline implements Retriever {
28
+ private readonly embedder;
29
+ private readonly vectorStore;
30
+ private readonly chunker;
31
+ private readonly indexName;
32
+ private readonly reranker?;
33
+ private readonly defaultTopK;
34
+ private readonly metric;
35
+ private readonly batchSize;
36
+ constructor(options: RagPipelineOptions);
37
+ /**
38
+ * Ensure the vector index exists, creating it if necessary.
39
+ * Requires at least one embed() call to determine dimension.
40
+ */
41
+ ensureIndex(): Promise<void>;
42
+ /**
43
+ * Ingest documents: chunk, embed, and store in the vector store.
44
+ */
45
+ ingest(documents: Document[]): Promise<void>;
46
+ /**
47
+ * Retrieve relevant chunks for a query.
48
+ * Implements the Retriever interface.
49
+ */
50
+ retrieve(query: string, options?: RetrievalOptions): Promise<RetrievalResult[]>;
51
+ }
52
+ //# sourceMappingURL=RagPipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RagPipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/RagPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,SAAS,EACV,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,QAAQ,EAAE,QAAQ,CAAC;IACnB,iEAAiE;IACjE,WAAW,EAAE,WAAW,CAAC;IACzB,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;IAC/C,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,OAAO,EAAE,kBAAkB;IAWvC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBlC;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiClD;;;OAGG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC;CA4B9B"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Convenience class that wires embedder, vector store, chunker,
3
+ * and optional reranker into a single ingestion + retrieval pipeline.
4
+ *
5
+ * Implements the Retriever interface so it can be passed directly
6
+ * to createVectorRetrievalTool() or used as an agent retriever.
7
+ */
8
+ export class RagPipeline {
9
+ embedder;
10
+ vectorStore;
11
+ chunker;
12
+ indexName;
13
+ reranker;
14
+ defaultTopK;
15
+ metric;
16
+ batchSize;
17
+ constructor(options) {
18
+ this.embedder = options.embedder;
19
+ this.vectorStore = options.vectorStore;
20
+ this.chunker = options.chunker;
21
+ this.indexName = options.indexName;
22
+ this.reranker = options.reranker;
23
+ this.defaultTopK = options.topK ?? 10;
24
+ this.metric = options.metric ?? 'cosine';
25
+ this.batchSize = options.batchSize ?? 100;
26
+ }
27
+ /**
28
+ * Ensure the vector index exists, creating it if necessary.
29
+ * Requires at least one embed() call to determine dimension.
30
+ */
31
+ async ensureIndex() {
32
+ const indexes = await this.vectorStore.listIndexes();
33
+ if (indexes.includes(this.indexName))
34
+ return;
35
+ let dimension = this.embedder.dimension;
36
+ if (!dimension) {
37
+ const probe = await this.embedder.embed('dimension probe');
38
+ dimension = probe.length;
39
+ }
40
+ await this.vectorStore.createIndex({
41
+ indexName: this.indexName,
42
+ dimension,
43
+ metric: this.metric,
44
+ });
45
+ }
46
+ /**
47
+ * Ingest documents: chunk, embed, and store in the vector store.
48
+ */
49
+ async ingest(documents) {
50
+ await this.ensureIndex();
51
+ for (const doc of documents) {
52
+ const chunks = this.chunker.chunk(doc.text);
53
+ if (chunks.length === 0)
54
+ continue;
55
+ const texts = chunks.map(c => c.text);
56
+ // Batch embedding to respect provider limits
57
+ const allEmbeddings = [];
58
+ for (let i = 0; i < texts.length; i += this.batchSize) {
59
+ const batch = texts.slice(i, i + this.batchSize);
60
+ const embeddings = await this.embedder.embedMany(batch);
61
+ allEmbeddings.push(...embeddings);
62
+ }
63
+ const entries = chunks.map((chunk, i) => ({
64
+ id: `${doc.id}:${chunk.id}`,
65
+ vector: allEmbeddings[i],
66
+ metadata: {
67
+ ...(chunk.meta ?? {}),
68
+ ...(doc.metadata ?? {}),
69
+ sourceDocId: doc.id,
70
+ chunkId: chunk.id,
71
+ },
72
+ document: chunk.text,
73
+ }));
74
+ await this.vectorStore.upsert(this.indexName, entries);
75
+ }
76
+ }
77
+ /**
78
+ * Retrieve relevant chunks for a query.
79
+ * Implements the Retriever interface.
80
+ */
81
+ async retrieve(query, options) {
82
+ const topK = options?.topK ?? this.defaultTopK;
83
+ const queryVector = await this.embedder.embed(query);
84
+ // Fetch more than topK if reranking, to give the reranker a wider pool
85
+ const fetchK = this.reranker ? topK * 3 : topK;
86
+ const results = await this.vectorStore.query(this.indexName, {
87
+ queryVector,
88
+ topK: fetchK,
89
+ filter: options?.filter,
90
+ includeDocuments: true,
91
+ });
92
+ let mapped = results.map(r => ({
93
+ id: r.id,
94
+ text: r.document ?? '',
95
+ score: r.score,
96
+ metadata: r.metadata,
97
+ sourceId: this.indexName,
98
+ }));
99
+ if (this.reranker) {
100
+ mapped = await this.reranker.rerank(query, mapped, { topK });
101
+ }
102
+ return mapped.slice(0, topK);
103
+ }
104
+ }
105
+ //# sourceMappingURL=RagPipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RagPipeline.js","sourceRoot":"","sources":["../../src/pipeline/RagPipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { RagPipeline } from './RagPipeline.js';
2
+ export type { RagPipelineOptions } from './RagPipeline.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { RagPipeline } from './RagPipeline.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pipeline/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { LanguageModel } from 'ai';
2
+ import type { Reranker, RetrievalResult, RerankerOptions } from '../types.js';
3
+ export interface LLMRerankerOptions {
4
+ /** The language model to use for scoring. */
5
+ model: LanguageModel;
6
+ /** Maximum number of results to return after reranking. Default: 5. */
7
+ topK?: number;
8
+ /** Whether to include the LLM's reasoning in results. Default: true. */
9
+ includeReasons?: boolean;
10
+ /** Maximum characters of document text to include per candidate. Default: 1500. */
11
+ candidateMaxChars?: number;
12
+ }
13
+ /**
14
+ * Reranker that uses a language model to judge relevance.
15
+ *
16
+ * Each candidate document is presented to the LLM alongside the query.
17
+ * The LLM scores each candidate on a 0-10 scale and optionally provides
18
+ * a reason for the score. Results are reordered by LLM-assigned score.
19
+ */
20
+ export declare class LLMReranker implements Reranker {
21
+ private readonly model;
22
+ private readonly defaultTopK;
23
+ private readonly includeReasons;
24
+ private readonly candidateMaxChars;
25
+ constructor(options: LLMRerankerOptions);
26
+ rerank(query: string, results: RetrievalResult[], options?: RerankerOptions): Promise<RetrievalResult[]>;
27
+ }
28
+ //# sourceMappingURL=LLMReranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMReranker.d.ts","sourceRoot":"","sources":["../../src/rerankers/LLMReranker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,KAAK,EAAE,aAAa,CAAC;IACrB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAYD;;;;;;GAMG;AACH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,OAAO,EAAE,kBAAkB;IAOjC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,EAAE,CAAC;CAqD9B"}
@@ -0,0 +1,70 @@
1
+ import { generateText, Output } from 'ai';
2
+ import { z } from 'zod';
3
+ const scoringSchema = z.object({
4
+ scored: z.array(z.object({
5
+ id: z.string(),
6
+ score: z.number().min(0).max(10),
7
+ reason: z.string().optional(),
8
+ })),
9
+ });
10
+ /**
11
+ * Reranker that uses a language model to judge relevance.
12
+ *
13
+ * Each candidate document is presented to the LLM alongside the query.
14
+ * The LLM scores each candidate on a 0-10 scale and optionally provides
15
+ * a reason for the score. Results are reordered by LLM-assigned score.
16
+ */
17
+ export class LLMReranker {
18
+ model;
19
+ defaultTopK;
20
+ includeReasons;
21
+ candidateMaxChars;
22
+ constructor(options) {
23
+ this.model = options.model;
24
+ this.defaultTopK = options.topK ?? 5;
25
+ this.includeReasons = options.includeReasons ?? true;
26
+ this.candidateMaxChars = options.candidateMaxChars ?? 1500;
27
+ }
28
+ async rerank(query, results, options) {
29
+ const topK = options?.topK ?? this.defaultTopK;
30
+ if (results.length === 0)
31
+ return [];
32
+ const candidateBlock = results
33
+ .map((r, i) => `[${i}] ID: ${r.id}\n` +
34
+ `Text: ${r.text.slice(0, this.candidateMaxChars)}`)
35
+ .join('\n\n');
36
+ const systemPrompt = 'You are a relevance judge. You will be given a query and a list of ' +
37
+ 'candidate documents. Score each document from 0 (completely irrelevant) ' +
38
+ 'to 10 (perfectly relevant) based on how well it answers the query. ' +
39
+ 'Only use candidate IDs from the provided list. Return ALL candidates scored.';
40
+ const userPrompt = `Query: ${query}\n\n` +
41
+ `Candidates:\n${candidateBlock}`;
42
+ const { experimental_output } = await generateText({
43
+ model: this.model,
44
+ system: systemPrompt,
45
+ prompt: userPrompt,
46
+ experimental_output: Output.object({ schema: scoringSchema }),
47
+ });
48
+ if (!experimental_output)
49
+ return results.slice(0, topK);
50
+ const scoreMap = new Map();
51
+ for (const scored of experimental_output.scored) {
52
+ scoreMap.set(scored.id, {
53
+ score: scored.score,
54
+ reason: scored.reason,
55
+ });
56
+ }
57
+ const reranked = results
58
+ .map(r => {
59
+ const llmScore = scoreMap.get(r.id);
60
+ return {
61
+ ...r,
62
+ score: llmScore ? llmScore.score / 10 : 0,
63
+ reason: this.includeReasons ? llmScore?.reason : undefined,
64
+ };
65
+ })
66
+ .sort((a, b) => (b.score ?? 0) - (a.score ?? 0));
67
+ return reranked.slice(0, topK);
68
+ }
69
+ }
70
+ //# sourceMappingURL=LLMReranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMReranker.js","sourceRoot":"","sources":["../../src/rerankers/LLMReranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { LLMReranker } from './LLMReranker.js';
2
+ export type { LLMRerankerOptions } from './LLMReranker.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rerankers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { LLMReranker } from './LLMReranker.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rerankers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { Retriever, RetrievalResult, RetrievalOptions } from '../types.js';
2
+ export interface HybridRetrieverSource {
3
+ /** The retriever to include in the hybrid. */
4
+ retriever: Retriever;
5
+ /** Relative weight for this retriever in fusion scoring. Default: 1.0. */
6
+ weight?: number;
7
+ }
8
+ export interface HybridRetrieverOptions {
9
+ /** The retrievers to combine. */
10
+ sources: HybridRetrieverSource[];
11
+ /**
12
+ * The k parameter for reciprocal rank fusion.
13
+ * Higher values give more weight to lower-ranked results.
14
+ * Default: 60 (standard RRF constant).
15
+ */
16
+ k?: number;
17
+ /** Default number of results to return. Default: 10. */
18
+ topK?: number;
19
+ }
20
+ /**
21
+ * Retriever that combines multiple retrieval strategies using
22
+ * reciprocal rank fusion (RRF).
23
+ *
24
+ * RRF is a rank-based fusion method that does not require score
25
+ * normalization across retrievers. It works well when combining
26
+ * retrievers with incompatible scoring scales (e.g., cosine similarity
27
+ * from a vector store with BM25 scores from keyword search).
28
+ *
29
+ * Reference: Cormack, Clarke, Buettcher. "Reciprocal Rank Fusion
30
+ * outperforms Condorcet and individual Rank Learning Methods." (2009)
31
+ */
32
+ export declare class HybridRetriever implements Retriever {
33
+ private readonly sources;
34
+ private readonly k;
35
+ private readonly defaultTopK;
36
+ constructor(options: HybridRetrieverOptions);
37
+ retrieve(query: string, options?: RetrievalOptions): Promise<RetrievalResult[]>;
38
+ }
39
+ //# sourceMappingURL=HybridRetriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridRetriever.d.ts","sourceRoot":"","sources":["../../src/retrievers/HybridRetriever.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,SAAS,EAAE,SAAS,CAAC;IACrB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC;;;;OAIG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,EAAE,sBAAsB;IAMrC,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC;CA2C9B"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Retriever that combines multiple retrieval strategies using
3
+ * reciprocal rank fusion (RRF).
4
+ *
5
+ * RRF is a rank-based fusion method that does not require score
6
+ * normalization across retrievers. It works well when combining
7
+ * retrievers with incompatible scoring scales (e.g., cosine similarity
8
+ * from a vector store with BM25 scores from keyword search).
9
+ *
10
+ * Reference: Cormack, Clarke, Buettcher. "Reciprocal Rank Fusion
11
+ * outperforms Condorcet and individual Rank Learning Methods." (2009)
12
+ */
13
+ export class HybridRetriever {
14
+ sources;
15
+ k;
16
+ defaultTopK;
17
+ constructor(options) {
18
+ this.sources = options.sources;
19
+ this.k = options.k ?? 60;
20
+ this.defaultTopK = options.topK ?? 10;
21
+ }
22
+ async retrieve(query, options) {
23
+ const topK = options?.topK ?? this.defaultTopK;
24
+ // Run all retrievers in parallel
25
+ const allResults = await Promise.all(this.sources.map(s => s.retriever.retrieve(query, options)));
26
+ // Reciprocal rank fusion
27
+ const fusedScores = new Map();
28
+ const bestResult = new Map();
29
+ for (let i = 0; i < allResults.length; i++) {
30
+ const weight = this.sources[i].weight ?? 1.0;
31
+ const results = allResults[i];
32
+ for (let rank = 0; rank < results.length; rank++) {
33
+ const result = results[rank];
34
+ const rrfScore = weight / (this.k + rank + 1);
35
+ fusedScores.set(result.id, (fusedScores.get(result.id) ?? 0) + rrfScore);
36
+ // Keep the result with the highest original score for metadata
37
+ const existing = bestResult.get(result.id);
38
+ if (!existing || (result.score ?? 0) > (existing.score ?? 0)) {
39
+ bestResult.set(result.id, result);
40
+ }
41
+ }
42
+ }
43
+ // Sort by fused score, return top K
44
+ const sorted = Array.from(fusedScores.entries())
45
+ .sort((a, b) => b[1] - a[1])
46
+ .slice(0, topK);
47
+ return sorted.map(([id, rrfScore]) => {
48
+ const result = bestResult.get(id);
49
+ return {
50
+ ...result,
51
+ score: rrfScore,
52
+ };
53
+ });
54
+ }
55
+ }
56
+ //# sourceMappingURL=HybridRetriever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HybridRetriever.js","sourceRoot":"","sources":["../../src/retrievers/HybridRetriever.ts"],"names":[],"mappings":"AA0BA;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,eAAe;IACT,OAAO,CAA0B;IACjC,CAAC,CAAS;IACV,WAAW,CAAS;IAErC,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAAa,EACb,OAA0B;QAE1B,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QAE/C,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAC5D,CAAC;QAEF,yBAAyB;QACzB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;YAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC9C,WAAW,CAAC,GAAG,CACb,MAAM,CAAC,EAAE,EACT,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAC7C,CAAC;gBACF,+DAA+D;gBAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;oBAC7D,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;aAC7C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAElB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;YACnC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YACnC,OAAO;gBACL,GAAG,MAAM;gBACT,KAAK,EAAE,QAAQ;aAChB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import type { Retriever, RetrievalResult, RetrievalOptions, VectorStore, Embedder } from '../types.js';
2
+ export interface VectorRetrieverOptions {
3
+ /** The vector store to query. */
4
+ vectorStore: VectorStore;
5
+ /** The embedder to convert query text to vectors. */
6
+ embedder: Embedder;
7
+ /** The index name to query. */
8
+ indexName: string;
9
+ /** Default number of results to return. Default: 10. */
10
+ topK?: number;
11
+ }
12
+ /**
13
+ * Retriever backed by vector similarity search.
14
+ *
15
+ * Embeds the query using the provided Embedder, then queries the
16
+ * VectorStore for the most similar entries.
17
+ */
18
+ export declare class VectorRetriever implements Retriever {
19
+ private readonly vectorStore;
20
+ private readonly embedder;
21
+ private readonly indexName;
22
+ private readonly defaultTopK;
23
+ constructor(options: VectorRetrieverOptions);
24
+ retrieve(query: string, options?: RetrievalOptions): Promise<RetrievalResult[]>;
25
+ }
26
+ //# sourceMappingURL=VectorRetriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VectorRetriever.d.ts","sourceRoot":"","sources":["../../src/retrievers/VectorRetriever.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACT,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,sBAAsB;IACrC,iCAAiC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,qDAAqD;IACrD,QAAQ,EAAE,QAAQ,CAAC;IACnB,+BAA+B;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,EAAE,sBAAsB;IAOrC,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,EAAE,CAAC;CAmB9B"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Retriever backed by vector similarity search.
3
+ *
4
+ * Embeds the query using the provided Embedder, then queries the
5
+ * VectorStore for the most similar entries.
6
+ */
7
+ export class VectorRetriever {
8
+ vectorStore;
9
+ embedder;
10
+ indexName;
11
+ defaultTopK;
12
+ constructor(options) {
13
+ this.vectorStore = options.vectorStore;
14
+ this.embedder = options.embedder;
15
+ this.indexName = options.indexName;
16
+ this.defaultTopK = options.topK ?? 10;
17
+ }
18
+ async retrieve(query, options) {
19
+ const queryVector = await this.embedder.embed(query);
20
+ const topK = options?.topK ?? this.defaultTopK;
21
+ const results = await this.vectorStore.query(this.indexName, {
22
+ queryVector,
23
+ topK,
24
+ filter: options?.filter,
25
+ includeDocuments: true,
26
+ });
27
+ return results.map(r => ({
28
+ id: r.id,
29
+ text: r.document ?? '',
30
+ score: r.score,
31
+ metadata: r.metadata,
32
+ sourceId: this.indexName,
33
+ }));
34
+ }
35
+ }
36
+ //# sourceMappingURL=VectorRetriever.js.map