@hazeljs/rag 0.2.4 → 0.3.1

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 (40) hide show
  1. package/dist/__tests__/errors/rag.error.test.d.ts +2 -0
  2. package/dist/__tests__/errors/rag.error.test.d.ts.map +1 -0
  3. package/dist/__tests__/errors/rag.error.test.js +95 -0
  4. package/dist/__tests__/errors/rag.error.test.js.map +1 -0
  5. package/dist/__tests__/reranking/cohere.reranker.test.d.ts +2 -0
  6. package/dist/__tests__/reranking/cohere.reranker.test.d.ts.map +1 -0
  7. package/dist/__tests__/reranking/cohere.reranker.test.js +68 -0
  8. package/dist/__tests__/reranking/cohere.reranker.test.js.map +1 -0
  9. package/dist/__tests__/utils/debug.test.d.ts +2 -0
  10. package/dist/__tests__/utils/debug.test.d.ts.map +1 -0
  11. package/dist/__tests__/utils/debug.test.js +99 -0
  12. package/dist/__tests__/utils/debug.test.js.map +1 -0
  13. package/dist/errors/rag.error.d.ts +33 -0
  14. package/dist/errors/rag.error.d.ts.map +1 -0
  15. package/dist/errors/rag.error.js +64 -0
  16. package/dist/errors/rag.error.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +11 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/rag-pipeline.d.ts +39 -3
  22. package/dist/rag-pipeline.d.ts.map +1 -1
  23. package/dist/rag-pipeline.js +141 -11
  24. package/dist/rag-pipeline.js.map +1 -1
  25. package/dist/rag.service.d.ts +60 -11
  26. package/dist/rag.service.d.ts.map +1 -1
  27. package/dist/rag.service.js +390 -28
  28. package/dist/rag.service.js.map +1 -1
  29. package/dist/reranking/cohere.reranker.d.ts +34 -0
  30. package/dist/reranking/cohere.reranker.d.ts.map +1 -0
  31. package/dist/reranking/cohere.reranker.js +58 -0
  32. package/dist/reranking/cohere.reranker.js.map +1 -0
  33. package/dist/types/index.d.ts +10 -0
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/index.js.map +1 -1
  36. package/dist/utils/debug.d.ts +29 -0
  37. package/dist/utils/debug.d.ts.map +1 -0
  38. package/dist/utils/debug.js +82 -0
  39. package/dist/utils/debug.js.map +1 -0
  40. package/package.json +4 -4
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rag.error.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag.error.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/errors/rag.error.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rag_error_1 = require("../../errors/rag.error");
4
+ describe('RAGError', () => {
5
+ describe('constructor', () => {
6
+ it('should create error with message and code', () => {
7
+ const error = new rag_error_1.RAGError('Test error', rag_error_1.RAGErrorCode.VECTOR_STORE_ERROR);
8
+ expect(error).toBeInstanceOf(Error);
9
+ expect(error).toBeInstanceOf(rag_error_1.RAGError);
10
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.VECTOR_STORE_ERROR);
11
+ expect(error.message).toBe('Test error');
12
+ expect(error.name).toBe('RAGError');
13
+ });
14
+ it('should include cause if provided', () => {
15
+ const cause = new Error('Original error');
16
+ const error = new rag_error_1.RAGError('Wrapper error', rag_error_1.RAGErrorCode.EMBEDDING_ERROR, cause);
17
+ expect(error.cause).toBe(cause);
18
+ });
19
+ });
20
+ describe('static factory methods', () => {
21
+ it('should create vectorStoreError', () => {
22
+ const error = rag_error_1.RAGError.vectorStoreError('Connection failed');
23
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.VECTOR_STORE_ERROR);
24
+ expect(error.message).toBe('Connection failed');
25
+ });
26
+ it('should create embeddingError', () => {
27
+ const error = rag_error_1.RAGError.embeddingError('API key invalid');
28
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.EMBEDDING_ERROR);
29
+ expect(error.message).toBe('API key invalid');
30
+ });
31
+ it('should create loaderError', () => {
32
+ const error = rag_error_1.RAGError.loaderError('./test.pdf');
33
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.LOADER_ERROR);
34
+ expect(error.message).toContain('./test.pdf');
35
+ });
36
+ it('should create splitterError', () => {
37
+ const error = rag_error_1.RAGError.splitterError('Invalid chunk size');
38
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.SPLITTER_ERROR);
39
+ expect(error.message).toBe('Invalid chunk size');
40
+ });
41
+ it('should create generationError', () => {
42
+ const error = rag_error_1.RAGError.generationError('No LLM configured');
43
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.LLM_GENERATION_ERROR);
44
+ expect(error.message).toContain('No LLM configured');
45
+ });
46
+ it('should create indexError', () => {
47
+ const error = rag_error_1.RAGError.indexError('Indexing failed');
48
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.INDEX_ERROR);
49
+ expect(error.message).toBe('Indexing failed');
50
+ });
51
+ it('should create retrievalError', () => {
52
+ const error = rag_error_1.RAGError.retrievalError('Search failed');
53
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.RETRIEVAL_ERROR);
54
+ expect(error.message).toBe('Search failed');
55
+ });
56
+ it('should create unsupportedFormat error', () => {
57
+ const error = rag_error_1.RAGError.unsupportedFormat('.xyz');
58
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.UNSUPPORTED_FORMAT);
59
+ expect(error.message).toContain('.xyz');
60
+ });
61
+ it('should create missingDependency error', () => {
62
+ const error = rag_error_1.RAGError.missingDependency('pdf-parse', 'PDF loading');
63
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.MISSING_DEPENDENCY);
64
+ expect(error.message).toContain('pdf-parse');
65
+ expect(error.message).toContain('PDF loading');
66
+ });
67
+ it('should create configurationError', () => {
68
+ const error = rag_error_1.RAGError.configurationError('Invalid config');
69
+ expect(error.code).toBe(rag_error_1.RAGErrorCode.CONFIGURATION_ERROR);
70
+ expect(error.message).toBe('Invalid config');
71
+ });
72
+ });
73
+ describe('error handling', () => {
74
+ it('should be catchable as Error', () => {
75
+ try {
76
+ throw rag_error_1.RAGError.vectorStoreError('Test');
77
+ }
78
+ catch (error) {
79
+ expect(error).toBeInstanceOf(Error);
80
+ expect(error).toBeInstanceOf(rag_error_1.RAGError);
81
+ }
82
+ });
83
+ it('should preserve stack trace', () => {
84
+ const error = rag_error_1.RAGError.embeddingError('Test');
85
+ expect(error.stack).toBeDefined();
86
+ expect(error.stack).toContain('RAGError');
87
+ });
88
+ it('should handle cause in factory methods', () => {
89
+ const cause = new Error('Root cause');
90
+ const error = rag_error_1.RAGError.vectorStoreError('Connection failed', cause);
91
+ expect(error.cause).toBe(cause);
92
+ });
93
+ });
94
+ });
95
+ //# sourceMappingURL=rag.error.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag.error.test.js","sourceRoot":"","sources":["../../../src/__tests__/errors/rag.error.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cohere.reranker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.reranker.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/reranking/cohere.reranker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cohere_ai_1 = require("cohere-ai");
4
+ const cohere_reranker_1 = require("../../reranking/cohere.reranker");
5
+ // Mock cohere-ai module
6
+ jest.mock('cohere-ai', () => ({
7
+ CohereClient: jest.fn().mockImplementation(() => ({
8
+ rerank: jest.fn(),
9
+ })),
10
+ }), { virtual: true });
11
+ describe('CohereReranker', () => {
12
+ let reranker;
13
+ let mockCohereClient;
14
+ beforeEach(() => {
15
+ jest.clearAllMocks();
16
+ mockCohereClient = new cohere_ai_1.CohereClient();
17
+ reranker = new cohere_reranker_1.CohereReranker({ apiKey: 'test-key' });
18
+ // In actual implementation, this.client = new CohereClient
19
+ // We need to ensure reranker.client is the one we control
20
+ reranker.client = mockCohereClient;
21
+ });
22
+ it('reranks results using Cohere API', async () => {
23
+ const results = [
24
+ { id: '1', content: 'Apple is a fruit', score: 0.5, metadata: {} },
25
+ { id: '2', content: 'Banana is long', score: 0.4, metadata: {} },
26
+ ];
27
+ mockCohereClient.rerank.mockResolvedValue({
28
+ results: [
29
+ { index: 1, relevanceScore: 0.95 },
30
+ { index: 0, relevanceScore: 0.85 },
31
+ ],
32
+ });
33
+ const output = await reranker.rerank('Tell me about banana', results);
34
+ expect(output).toHaveLength(2);
35
+ expect(output[0].id).toBe('2'); // Banana index 1 moved to top
36
+ expect(output[0].score).toBe(0.95);
37
+ expect(output[1].id).toBe('1');
38
+ expect(output[1].score).toBe(0.85);
39
+ expect(mockCohereClient.rerank).toHaveBeenCalledWith(expect.objectContaining({
40
+ query: 'Tell me about banana',
41
+ documents: ['Apple is a fruit', 'Banana is long'],
42
+ }));
43
+ });
44
+ it('returns empty array if input results are empty', async () => {
45
+ const output = await reranker.rerank('query', []);
46
+ expect(output).toEqual([]);
47
+ expect(mockCohereClient.rerank).not.toHaveBeenCalled();
48
+ });
49
+ it('handles Cohere API errors gracefully', async () => {
50
+ mockCohereClient.rerank.mockRejectedValue(new Error('API Down'));
51
+ await expect(reranker.rerank('q', [{ id: '1', content: 'c', score: 1, metadata: {} }])).rejects.toThrow('Failed to rerank results using Cohere: Error: API Down');
52
+ });
53
+ it('uses default model and maxChunksPerDoc if not provided', () => {
54
+ const customReranker = new cohere_reranker_1.CohereReranker({ apiKey: 'k' });
55
+ expect(customReranker.model).toBe('rerank-english-v3.0');
56
+ expect(customReranker.maxChunksPerDoc).toBe(10);
57
+ });
58
+ it('uses custom model and maxChunksPerDoc if provided', () => {
59
+ const customReranker = new cohere_reranker_1.CohereReranker({
60
+ apiKey: 'k',
61
+ model: 'rerank-multilingual-v3.0',
62
+ maxChunksPerDoc: 5,
63
+ });
64
+ expect(customReranker.model).toBe('rerank-multilingual-v3.0');
65
+ expect(customReranker.maxChunksPerDoc).toBe(5);
66
+ });
67
+ });
68
+ //# sourceMappingURL=cohere.reranker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.reranker.test.js","sourceRoot":"","sources":["../../../src/__tests__/reranking/cohere.reranker.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=debug.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/debug.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const debug_1 = require("../../utils/debug");
4
+ describe('debug utility', () => {
5
+ let originalEnv;
6
+ let consoleErrorSpy;
7
+ let log;
8
+ beforeEach(() => {
9
+ originalEnv = process.env.HAZELJS_DEBUG;
10
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
11
+ log = (0, debug_1.debug)('rag');
12
+ });
13
+ afterEach(() => {
14
+ if (originalEnv !== undefined) {
15
+ process.env.HAZELJS_DEBUG = originalEnv;
16
+ }
17
+ else {
18
+ delete process.env.HAZELJS_DEBUG;
19
+ }
20
+ consoleErrorSpy.mockRestore();
21
+ (0, debug_1.setDebugEnabled)(false);
22
+ });
23
+ describe('environment variable detection', () => {
24
+ it('should enable debug when HAZELJS_DEBUG=true', () => {
25
+ (0, debug_1.setDebugEnabled)(true);
26
+ log('test message');
27
+ expect(consoleErrorSpy).toHaveBeenCalled();
28
+ });
29
+ it('should enable debug when HAZELJS_DEBUG=1', () => {
30
+ process.env.HAZELJS_DEBUG = '1';
31
+ (0, debug_1.setDebugEnabled)(true);
32
+ log('test message');
33
+ expect(consoleErrorSpy).toHaveBeenCalled();
34
+ });
35
+ it('should not log when debug is disabled', () => {
36
+ (0, debug_1.setDebugEnabled)(false);
37
+ log('test message');
38
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
39
+ });
40
+ });
41
+ describe('setDebugEnabled', () => {
42
+ it('should enable debug logging', () => {
43
+ (0, debug_1.setDebugEnabled)(true);
44
+ log('test message');
45
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('[hazeljs:rag]'));
46
+ });
47
+ it('should disable debug logging', () => {
48
+ (0, debug_1.setDebugEnabled)(false);
49
+ log('test message');
50
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
51
+ });
52
+ });
53
+ describe('debug function', () => {
54
+ beforeEach(() => {
55
+ (0, debug_1.setDebugEnabled)(true);
56
+ });
57
+ it('should log with timestamp and prefix', () => {
58
+ log('test message');
59
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringMatching(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z \[hazeljs:rag\] test message$/));
60
+ });
61
+ it('should handle string formatting with %s', () => {
62
+ log('user=%s action=%s', 'alice', 'login');
63
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('user=alice action=login'));
64
+ });
65
+ it('should handle number formatting with %d', () => {
66
+ log('count=%d total=%d', 5, 100);
67
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('count=5 total=100'));
68
+ });
69
+ it('should handle JSON formatting with %j', () => {
70
+ log('data=%j', { key: 'value' });
71
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('data={"key":"value"}'));
72
+ });
73
+ it('should handle remaining arguments', () => {
74
+ log('message', 'extra', 123);
75
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('message extra 123'));
76
+ });
77
+ it('should create scoped loggers', () => {
78
+ const aiLog = (0, debug_1.debug)('ai');
79
+ const ragLog = (0, debug_1.debug)('rag');
80
+ aiLog('ai message');
81
+ ragLog('rag message');
82
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('[hazeljs:ai]'));
83
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('[hazeljs:rag]'));
84
+ });
85
+ it('should not log when disabled', () => {
86
+ (0, debug_1.setDebugEnabled)(false);
87
+ log('should not appear');
88
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
89
+ });
90
+ });
91
+ describe('performance', () => {
92
+ it('should skip logging when disabled', () => {
93
+ (0, debug_1.setDebugEnabled)(false);
94
+ log('message with %s', 'formatting');
95
+ expect(consoleErrorSpy).not.toHaveBeenCalled();
96
+ });
97
+ });
98
+ });
99
+ //# sourceMappingURL=debug.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.test.js","sourceRoot":"","sources":["../../../src/__tests__/utils/debug.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Structured RAG errors for robust handling and observability.
3
+ *
4
+ * Mirrors the `AgentError` pattern from `@hazeljs/agent` for consistency.
5
+ */
6
+ export declare enum RAGErrorCode {
7
+ VECTOR_STORE_ERROR = "RAG_VECTOR_STORE_ERROR",
8
+ EMBEDDING_ERROR = "RAG_EMBEDDING_ERROR",
9
+ LOADER_ERROR = "RAG_LOADER_ERROR",
10
+ SPLITTER_ERROR = "RAG_SPLITTER_ERROR",
11
+ LLM_GENERATION_ERROR = "RAG_LLM_GENERATION_ERROR",
12
+ INDEX_ERROR = "RAG_INDEX_ERROR",
13
+ RETRIEVAL_ERROR = "RAG_RETRIEVAL_ERROR",
14
+ UNSUPPORTED_FORMAT = "RAG_UNSUPPORTED_FORMAT",
15
+ MISSING_DEPENDENCY = "RAG_MISSING_DEPENDENCY",
16
+ CONFIGURATION_ERROR = "RAG_CONFIGURATION_ERROR"
17
+ }
18
+ export declare class RAGError extends Error {
19
+ readonly code: RAGErrorCode;
20
+ readonly cause?: Error;
21
+ constructor(message: string, code: RAGErrorCode, cause?: Error);
22
+ static vectorStoreError(message: string, cause?: Error): RAGError;
23
+ static embeddingError(message: string, cause?: Error): RAGError;
24
+ static loaderError(source: string, cause?: Error): RAGError;
25
+ static splitterError(message: string, cause?: Error): RAGError;
26
+ static generationError(message: string, cause?: Error): RAGError;
27
+ static indexError(message: string, cause?: Error): RAGError;
28
+ static retrievalError(message: string, cause?: Error): RAGError;
29
+ static unsupportedFormat(extension: string): RAGError;
30
+ static missingDependency(packageName: string, feature: string): RAGError;
31
+ static configurationError(message: string): RAGError;
32
+ }
33
+ //# sourceMappingURL=rag.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag.error.d.ts","sourceRoot":"","sources":["../../src/errors/rag.error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,YAAY;IACtB,kBAAkB,2BAA2B;IAC7C,eAAe,wBAAwB;IACvC,YAAY,qBAAqB;IACjC,cAAc,uBAAuB;IACrC,oBAAoB,6BAA6B;IACjD,WAAW,oBAAoB;IAC/B,eAAe,wBAAwB;IACvC,kBAAkB,2BAA2B;IAC7C,kBAAkB,2BAA2B;IAC7C,mBAAmB,4BAA4B;CAChD;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,KAAK;IAQ9D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAIjE,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAI/D,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAQ3D,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAI9D,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAQhE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAI3D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ;IAI/D,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ;IAQrD,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ;IAQxE,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ;CAGrD"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * Structured RAG errors for robust handling and observability.
4
+ *
5
+ * Mirrors the `AgentError` pattern from `@hazeljs/agent` for consistency.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RAGError = exports.RAGErrorCode = void 0;
9
+ var RAGErrorCode;
10
+ (function (RAGErrorCode) {
11
+ RAGErrorCode["VECTOR_STORE_ERROR"] = "RAG_VECTOR_STORE_ERROR";
12
+ RAGErrorCode["EMBEDDING_ERROR"] = "RAG_EMBEDDING_ERROR";
13
+ RAGErrorCode["LOADER_ERROR"] = "RAG_LOADER_ERROR";
14
+ RAGErrorCode["SPLITTER_ERROR"] = "RAG_SPLITTER_ERROR";
15
+ RAGErrorCode["LLM_GENERATION_ERROR"] = "RAG_LLM_GENERATION_ERROR";
16
+ RAGErrorCode["INDEX_ERROR"] = "RAG_INDEX_ERROR";
17
+ RAGErrorCode["RETRIEVAL_ERROR"] = "RAG_RETRIEVAL_ERROR";
18
+ RAGErrorCode["UNSUPPORTED_FORMAT"] = "RAG_UNSUPPORTED_FORMAT";
19
+ RAGErrorCode["MISSING_DEPENDENCY"] = "RAG_MISSING_DEPENDENCY";
20
+ RAGErrorCode["CONFIGURATION_ERROR"] = "RAG_CONFIGURATION_ERROR";
21
+ })(RAGErrorCode || (exports.RAGErrorCode = RAGErrorCode = {}));
22
+ class RAGError extends Error {
23
+ constructor(message, code, cause) {
24
+ super(message);
25
+ this.name = 'RAGError';
26
+ this.code = code;
27
+ this.cause = cause;
28
+ Object.setPrototypeOf(this, RAGError.prototype);
29
+ }
30
+ static vectorStoreError(message, cause) {
31
+ return new RAGError(message, RAGErrorCode.VECTOR_STORE_ERROR, cause);
32
+ }
33
+ static embeddingError(message, cause) {
34
+ return new RAGError(message, RAGErrorCode.EMBEDDING_ERROR, cause);
35
+ }
36
+ static loaderError(source, cause) {
37
+ return new RAGError(`Failed to load documents from "${source}". Check that the file exists and is readable.`, RAGErrorCode.LOADER_ERROR, cause);
38
+ }
39
+ static splitterError(message, cause) {
40
+ return new RAGError(message, RAGErrorCode.SPLITTER_ERROR, cause);
41
+ }
42
+ static generationError(message, cause) {
43
+ return new RAGError(`LLM generation failed: ${message}. Ensure an llmFunction is configured.`, RAGErrorCode.LLM_GENERATION_ERROR, cause);
44
+ }
45
+ static indexError(message, cause) {
46
+ return new RAGError(message, RAGErrorCode.INDEX_ERROR, cause);
47
+ }
48
+ static retrievalError(message, cause) {
49
+ return new RAGError(message, RAGErrorCode.RETRIEVAL_ERROR, cause);
50
+ }
51
+ static unsupportedFormat(extension) {
52
+ return new RAGError(`Unsupported file format "${extension}". ` +
53
+ `Supported: .txt, .log, .json, .csv, .md, .mdx, .html, .htm, .pdf, .docx`, RAGErrorCode.UNSUPPORTED_FORMAT);
54
+ }
55
+ static missingDependency(packageName, feature) {
56
+ return new RAGError(`The "${feature}" feature requires the "${packageName}" package. ` +
57
+ `Install it with: npm install ${packageName}`, RAGErrorCode.MISSING_DEPENDENCY);
58
+ }
59
+ static configurationError(message) {
60
+ return new RAGError(message, RAGErrorCode.CONFIGURATION_ERROR);
61
+ }
62
+ }
63
+ exports.RAGError = RAGError;
64
+ //# sourceMappingURL=rag.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rag.error.js","sourceRoot":"","sources":["../../src/errors/rag.error.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,IAAY,YAWX;AAXD,WAAY,YAAY;IACtB,6DAA6C,CAAA;IAC7C,uDAAuC,CAAA;IACvC,iDAAiC,CAAA;IACjC,qDAAqC,CAAA;IACrC,iEAAiD,CAAA;IACjD,+CAA+B,CAAA;IAC/B,uDAAuC,CAAA;IACvC,6DAA6C,CAAA;IAC7C,6DAA6C,CAAA;IAC7C,+DAA+C,CAAA;AACjD,CAAC,EAXW,YAAY,4BAAZ,YAAY,QAWvB;AAED,MAAa,QAAS,SAAQ,KAAK;IAIjC,YAAY,OAAe,EAAE,IAAkB,EAAE,KAAa;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAe,EAAE,KAAa;QACpD,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,OAAe,EAAE,KAAa;QAClD,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,MAAc,EAAE,KAAa;QAC9C,OAAO,IAAI,QAAQ,CACjB,kCAAkC,MAAM,gDAAgD,EACxF,YAAY,CAAC,YAAY,EACzB,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,OAAe,EAAE,KAAa;QACjD,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,OAAe,EAAE,KAAa;QACnD,OAAO,IAAI,QAAQ,CACjB,0BAA0B,OAAO,wCAAwC,EACzE,YAAY,CAAC,oBAAoB,EACjC,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,OAAe,EAAE,KAAa;QAC9C,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,OAAe,EAAE,KAAa;QAClD,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QACxC,OAAO,IAAI,QAAQ,CACjB,4BAA4B,SAAS,KAAK;YACxC,yEAAyE,EAC3E,YAAY,CAAC,kBAAkB,CAChC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,WAAmB,EAAE,OAAe;QAC3D,OAAO,IAAI,QAAQ,CACjB,QAAQ,OAAO,2BAA2B,WAAW,aAAa;YAChE,gCAAgC,WAAW,EAAE,EAC/C,YAAY,CAAC,kBAAkB,CAChC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,OAAe;QACvC,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAC;IACjE,CAAC;CACF;AAnED,4BAmEC"}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ export * from './decorators/embeddable.decorator';
11
11
  export * from './decorators/semantic-search.decorator';
12
12
  export * from './embeddings/openai-embeddings';
13
13
  export * from './embeddings/cohere-embeddings';
14
+ export * from './reranking/cohere.reranker';
14
15
  export * from './vector-stores/memory-vector-store';
15
16
  export * from './vector-stores/pinecone.store';
16
17
  export * from './vector-stores/qdrant.store';
@@ -26,4 +27,6 @@ export * from './memory';
26
27
  export * from './rag-pipeline-with-memory';
27
28
  export * from './agentic';
28
29
  export * from './graph';
30
+ export { RAGError, RAGErrorCode } from './errors/rag.error';
31
+ export { debug, setDebugEnabled } from './utils/debug';
29
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAG/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,0CAA0C,CAAC;AAGzD,cAAc,WAAW,CAAC;AAG1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,UAAU,CAAC;AACzB,cAAc,4BAA4B,CAAC;AAG3C,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAG7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,0CAA0C,CAAC;AAGzD,cAAc,WAAW,CAAC;AAG1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,UAAU,CAAC;AACzB,cAAc,4BAA4B,CAAC;AAG3C,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.setDebugEnabled = exports.debug = exports.RAGErrorCode = exports.RAGError = void 0;
21
22
  // Core types
22
23
  __exportStar(require("./types"), exports);
23
24
  // RAG Pipeline
@@ -29,9 +30,10 @@ __exportStar(require("./rag.module"), exports);
29
30
  __exportStar(require("./decorators/rag.decorator"), exports);
30
31
  __exportStar(require("./decorators/embeddable.decorator"), exports);
31
32
  __exportStar(require("./decorators/semantic-search.decorator"), exports);
32
- // Embeddings
33
+ // Embeddings & Reranking
33
34
  __exportStar(require("./embeddings/openai-embeddings"), exports);
34
35
  __exportStar(require("./embeddings/cohere-embeddings"), exports);
36
+ __exportStar(require("./reranking/cohere.reranker"), exports);
35
37
  // Vector Stores
36
38
  __exportStar(require("./vector-stores/memory-vector-store"), exports);
37
39
  __exportStar(require("./vector-stores/pinecone.store"), exports);
@@ -55,4 +57,12 @@ __exportStar(require("./rag-pipeline-with-memory"), exports);
55
57
  __exportStar(require("./agentic"), exports);
56
58
  // GraphRAG - Knowledge graph-based retrieval (entity + community search)
57
59
  __exportStar(require("./graph"), exports);
60
+ // Errors
61
+ var rag_error_1 = require("./errors/rag.error");
62
+ Object.defineProperty(exports, "RAGError", { enumerable: true, get: function () { return rag_error_1.RAGError; } });
63
+ Object.defineProperty(exports, "RAGErrorCode", { enumerable: true, get: function () { return rag_error_1.RAGErrorCode; } });
64
+ // Debug utility
65
+ var debug_1 = require("./utils/debug");
66
+ Object.defineProperty(exports, "debug", { enumerable: true, get: function () { return debug_1.debug; } });
67
+ Object.defineProperty(exports, "setDebugEnabled", { enumerable: true, get: function () { return debug_1.setDebugEnabled; } });
58
68
  //# 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":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,aAAa;AACb,0CAAwB;AAExB,eAAe;AACf,iDAA+B;AAE/B,uBAAuB;AACvB,gDAA8B;AAC9B,+CAA6B;AAE7B,aAAa;AACb,6DAA2C;AAC3C,oEAAkD;AAClD,yEAAuD;AAEvD,aAAa;AACb,iEAA+C;AAC/C,iEAA+C;AAE/C,gBAAgB;AAChB,sEAAoD;AACpD,iEAA+C;AAC/C,+DAA6C;AAC7C,iEAA+C;AAC/C,+DAA6C;AAE7C,iBAAiB;AACjB,2EAAyD;AAEzD,mBAAmB;AACnB,4CAA0B;AAE1B,uBAAuB;AACvB,mDAAiC;AACjC,4DAA0C;AAC1C,0DAAwC;AAExC,QAAQ;AACR,qDAAmC;AAEnC,SAAS;AACT,2CAAyB;AACzB,6DAA2C;AAE3C,2DAA2D;AAC3D,4CAA0B;AAE1B,yEAAyE;AACzE,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,aAAa;AACb,0CAAwB;AAExB,eAAe;AACf,iDAA+B;AAE/B,uBAAuB;AACvB,gDAA8B;AAC9B,+CAA6B;AAE7B,aAAa;AACb,6DAA2C;AAC3C,oEAAkD;AAClD,yEAAuD;AAEvD,yBAAyB;AACzB,iEAA+C;AAC/C,iEAA+C;AAC/C,8DAA4C;AAE5C,gBAAgB;AAChB,sEAAoD;AACpD,iEAA+C;AAC/C,+DAA6C;AAC7C,iEAA+C;AAC/C,+DAA6C;AAE7C,iBAAiB;AACjB,2EAAyD;AAEzD,mBAAmB;AACnB,4CAA0B;AAE1B,uBAAuB;AACvB,mDAAiC;AACjC,4DAA0C;AAC1C,0DAAwC;AAExC,QAAQ;AACR,qDAAmC;AAEnC,SAAS;AACT,2CAAyB;AACzB,6DAA2C;AAE3C,2DAA2D;AAC3D,4CAA0B;AAE1B,yEAAyE;AACzE,0CAAwB;AAExB,SAAS;AACT,gDAA4D;AAAnD,qGAAA,QAAQ,OAAA;AAAE,yGAAA,YAAY,OAAA;AAE/B,gBAAgB;AAChB,uCAAuD;AAA9C,8FAAA,KAAK,OAAA;AAAE,wGAAA,eAAe,OAAA"}
@@ -4,10 +4,47 @@
4
4
  */
5
5
  import { RAGConfig, RAGQueryOptions, RAGResponse, Document, SearchResult, RetrievalStrategy } from './types';
6
6
  export type LLMFunction = (prompt: string) => Promise<string>;
7
+ /**
8
+ * Shorthand configuration for `RAGPipeline.from()`.
9
+ *
10
+ * Only `provider` (or `apiKey`) is required — everything else has sensible defaults.
11
+ */
12
+ export interface RAGPipelineQuickConfig {
13
+ /** Embedding provider name. Defaults to `'openai'`. */
14
+ provider?: 'openai' | 'cohere';
15
+ /** API key for the embedding provider. Falls back to `OPENAI_API_KEY` / `COHERE_API_KEY` env vars. */
16
+ apiKey?: string;
17
+ /** Embedding model name (provider-specific). */
18
+ embeddingModel?: string;
19
+ /** Vector store to use. Defaults to in-memory. */
20
+ vectorStore?: 'memory';
21
+ /** Number of results to return. Default: 5. */
22
+ topK?: number;
23
+ /** Chunk size for text splitting. Default: 1000. */
24
+ chunkSize?: number;
25
+ /** Chunk overlap for text splitting. Default: 200. */
26
+ chunkOverlap?: number;
27
+ /** LLM function for answer generation. */
28
+ llm?: LLMFunction;
29
+ }
7
30
  export declare class RAGPipeline {
8
31
  private config;
9
32
  private llmFunction?;
33
+ private bm25;
34
+ private bm25Indexed;
10
35
  constructor(config: RAGConfig, llmFunction?: LLMFunction);
36
+ /**
37
+ * Create a RAGPipeline with sensible defaults from minimal configuration.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const pipeline = RAGPipeline.from({ provider: 'openai', topK: 5, llm: myLLM });
42
+ * await pipeline.initialize();
43
+ * await pipeline.addDocuments(docs);
44
+ * const result = await pipeline.query('What is X?');
45
+ * ```
46
+ */
47
+ static from(quick?: RAGPipelineQuickConfig): RAGPipeline;
11
48
  /**
12
49
  * Initialize the RAG pipeline
13
50
  */
@@ -30,9 +67,8 @@ export declare class RAGPipeline {
30
67
  */
31
68
  private retrieveWithMMR;
32
69
  /**
33
- * Hybrid retrieval (combines keyword and semantic search)
34
- * For now, just returns semantic search results
35
- * TODO: Implement keyword search integration
70
+ * Hybrid retrieval combines BM25 keyword search with vector similarity.
71
+ * Uses weighted score fusion (default 0.7 vector, 0.3 keyword).
36
72
  */
37
73
  private retrieveHybrid;
38
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"rag-pipeline.d.ts","sourceRoot":"","sources":["../src/rag-pipeline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,SAAS,EACT,eAAe,EACf,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9D,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAc;gBAEtB,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW;IAKxD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAW5D;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8B/E;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,EAC7B,QAAQ,GAAE,iBAAgD,GACzD,OAAO,CAAC,YAAY,EAAE,CAAC;IAgB1B;;;OAGG;YACW,eAAe;IA6D7B;;;;OAIG;YACW,cAAc;IAS5B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,cAAc;IAU5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"rag-pipeline.d.ts","sourceRoot":"","sources":["../src/rag-pipeline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,SAAS,EACT,eAAe,EACf,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAOjB,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,uDAAuD;IACvD,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW;IAMxD;;;;;;;;;;OAUG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,GAAE,sBAA2B,GAAG,WAAW;IAyD5D;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0B5D;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8B/E;;OAEG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,EAC7B,QAAQ,GAAE,iBAAgD,GACzD,OAAO,CAAC,YAAY,EAAE,CAAC;IA8B1B;;;OAGG;YACW,eAAe;IA6D7B;;;OAGG;YACW,cAAc;IA4D5B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;YACW,cAAc;IAU5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACG,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}