@ixo/common 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +9 -0
- package/.prettierignore +3 -0
- package/.prettierrc.cjs +4 -0
- package/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +76 -0
- package/README.md +245 -0
- package/dist/ai/checkpointer/index.d.ts +2 -0
- package/dist/ai/checkpointer/index.d.ts.map +1 -0
- package/dist/ai/checkpointer/index.js +2 -0
- package/dist/ai/checkpointer/index.js.map +1 -0
- package/dist/ai/index.d.ts +9 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +9 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/models/index.d.ts +2 -0
- package/dist/ai/models/index.d.ts.map +1 -0
- package/dist/ai/models/index.js +2 -0
- package/dist/ai/models/index.js.map +1 -0
- package/dist/ai/models/openai.d.ts +10 -0
- package/dist/ai/models/openai.d.ts.map +1 -0
- package/dist/ai/models/openai.js +38 -0
- package/dist/ai/models/openai.js.map +1 -0
- package/dist/ai/models/openai.test.d.ts +2 -0
- package/dist/ai/models/openai.test.d.ts.map +1 -0
- package/dist/ai/models/openai.test.js +58 -0
- package/dist/ai/models/openai.test.js.map +1 -0
- package/dist/ai/nodes/create-fake-node.d.ts +2 -0
- package/dist/ai/nodes/create-fake-node.d.ts.map +1 -0
- package/dist/ai/nodes/create-fake-node.js +2 -0
- package/dist/ai/nodes/create-fake-node.js.map +1 -0
- package/dist/ai/nodes/find-docs/find-docs.prompt.d.ts +3 -0
- package/dist/ai/nodes/find-docs/find-docs.prompt.d.ts.map +1 -0
- package/dist/ai/nodes/find-docs/find-docs.prompt.js +61 -0
- package/dist/ai/nodes/find-docs/find-docs.prompt.js.map +1 -0
- package/dist/ai/nodes/find-docs/index.d.ts +3 -0
- package/dist/ai/nodes/find-docs/index.d.ts.map +1 -0
- package/dist/ai/nodes/find-docs/index.js +3 -0
- package/dist/ai/nodes/find-docs/index.js.map +1 -0
- package/dist/ai/nodes/find-docs/node.d.ts +17 -0
- package/dist/ai/nodes/find-docs/node.d.ts.map +1 -0
- package/dist/ai/nodes/find-docs/node.js +46 -0
- package/dist/ai/nodes/find-docs/node.js.map +1 -0
- package/dist/ai/nodes/generic-chat/generic-chat.node.d.ts +12 -0
- package/dist/ai/nodes/generic-chat/generic-chat.node.d.ts.map +1 -0
- package/dist/ai/nodes/generic-chat/generic-chat.node.js +34 -0
- package/dist/ai/nodes/generic-chat/generic-chat.node.js.map +1 -0
- package/dist/ai/nodes/generic-chat/generic-chat.prompt.d.ts +10 -0
- package/dist/ai/nodes/generic-chat/generic-chat.prompt.d.ts.map +1 -0
- package/dist/ai/nodes/generic-chat/generic-chat.prompt.js +58 -0
- package/dist/ai/nodes/generic-chat/generic-chat.prompt.js.map +1 -0
- package/dist/ai/nodes/generic-chat/index.d.ts +2 -0
- package/dist/ai/nodes/generic-chat/index.d.ts.map +1 -0
- package/dist/ai/nodes/generic-chat/index.js +2 -0
- package/dist/ai/nodes/generic-chat/index.js.map +1 -0
- package/dist/ai/nodes/index.d.ts +4 -0
- package/dist/ai/nodes/index.d.ts.map +1 -0
- package/dist/ai/nodes/index.js +4 -0
- package/dist/ai/nodes/index.js.map +1 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.d.ts +7 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.d.ts.map +1 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.js +71 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.js.map +1 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.test.d.ts +2 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.test.d.ts.map +1 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.test.js +68 -0
- package/dist/ai/semantic-router-factory/create-semantic-router.test.js.map +1 -0
- package/dist/ai/semantic-router-factory/index.d.ts +4 -0
- package/dist/ai/semantic-router-factory/index.d.ts.map +1 -0
- package/dist/ai/semantic-router-factory/index.js +4 -0
- package/dist/ai/semantic-router-factory/index.js.map +1 -0
- package/dist/ai/semantic-router-factory/semantic-router-prompt.d.ts +2 -0
- package/dist/ai/semantic-router-factory/semantic-router-prompt.d.ts.map +1 -0
- package/dist/ai/semantic-router-factory/semantic-router-prompt.js +169 -0
- package/dist/ai/semantic-router-factory/semantic-router-prompt.js.map +1 -0
- package/dist/ai/semantic-router-factory/validate-routes.d.ts +2 -0
- package/dist/ai/semantic-router-factory/validate-routes.d.ts.map +1 -0
- package/dist/ai/semantic-router-factory/validate-routes.js +16 -0
- package/dist/ai/semantic-router-factory/validate-routes.js.map +1 -0
- package/dist/ai/tools/action-caller.d.ts +14 -0
- package/dist/ai/tools/action-caller.d.ts.map +1 -0
- package/dist/ai/tools/action-caller.js +12 -0
- package/dist/ai/tools/action-caller.js.map +1 -0
- package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.d.ts +25 -0
- package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.d.ts.map +1 -0
- package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.js +46 -0
- package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.js.map +1 -0
- package/dist/ai/tools/ask-ixo-guru/index.d.ts +2 -0
- package/dist/ai/tools/ask-ixo-guru/index.d.ts.map +1 -0
- package/dist/ai/tools/ask-ixo-guru/index.js +2 -0
- package/dist/ai/tools/ask-ixo-guru/index.js.map +1 -0
- package/dist/ai/tools/browser-tool-caller.d.ts +14 -0
- package/dist/ai/tools/browser-tool-caller.d.ts.map +1 -0
- package/dist/ai/tools/browser-tool-caller.js +12 -0
- package/dist/ai/tools/browser-tool-caller.js.map +1 -0
- package/dist/ai/tools/frontend-tool-caller.d.ts +10 -0
- package/dist/ai/tools/frontend-tool-caller.d.ts.map +1 -0
- package/dist/ai/tools/frontend-tool-caller.js +50 -0
- package/dist/ai/tools/frontend-tool-caller.js.map +1 -0
- package/dist/ai/tools/index.d.ts +11 -0
- package/dist/ai/tools/index.d.ts.map +1 -0
- package/dist/ai/tools/index.js +11 -0
- package/dist/ai/tools/index.js.map +1 -0
- package/dist/ai/tools/log-action-to-matrix.d.ts +13 -0
- package/dist/ai/tools/log-action-to-matrix.d.ts.map +1 -0
- package/dist/ai/tools/log-action-to-matrix.js +14 -0
- package/dist/ai/tools/log-action-to-matrix.js.map +1 -0
- package/dist/ai/tools/parser-action-tool.d.ts +8 -0
- package/dist/ai/tools/parser-action-tool.d.ts.map +1 -0
- package/dist/ai/tools/parser-action-tool.js +40 -0
- package/dist/ai/tools/parser-action-tool.js.map +1 -0
- package/dist/ai/tools/parser-browser-tool.d.ts +8 -0
- package/dist/ai/tools/parser-browser-tool.d.ts.map +1 -0
- package/dist/ai/tools/parser-browser-tool.js +38 -0
- package/dist/ai/tools/parser-browser-tool.js.map +1 -0
- package/dist/ai/tools/retriever-tool/index.d.ts +2 -0
- package/dist/ai/tools/retriever-tool/index.d.ts.map +1 -0
- package/dist/ai/tools/retriever-tool/index.js +2 -0
- package/dist/ai/tools/retriever-tool/index.js.map +1 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.d.ts +18 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.d.ts.map +1 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.js +62 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.js.map +1 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.test.d.ts +2 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.test.d.ts.map +1 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.test.js +119 -0
- package/dist/ai/tools/retriever-tool/retriever-tool.test.js.map +1 -0
- package/dist/ai/tools/scrape-web-page.d.ts +7 -0
- package/dist/ai/tools/scrape-web-page.d.ts.map +1 -0
- package/dist/ai/tools/scrape-web-page.js +65 -0
- package/dist/ai/tools/scrape-web-page.js.map +1 -0
- package/dist/ai/tools/web-search-tool.d.ts +10 -0
- package/dist/ai/tools/web-search-tool.d.ts.map +1 -0
- package/dist/ai/tools/web-search-tool.js +30 -0
- package/dist/ai/tools/web-search-tool.js.map +1 -0
- package/dist/ai/types.d.ts +4 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/types.js +2 -0
- package/dist/ai/types.js.map +1 -0
- package/dist/ai/utils/__tests__/chunk-arr.test.d.ts +2 -0
- package/dist/ai/utils/__tests__/chunk-arr.test.d.ts.map +1 -0
- package/dist/ai/utils/__tests__/chunk-arr.test.js +37 -0
- package/dist/ai/utils/__tests__/chunk-arr.test.js.map +1 -0
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.d.ts +2 -0
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.d.ts.map +1 -0
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.js +80 -0
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.js.map +1 -0
- package/dist/ai/utils/__tests__/doc-splitter.test.d.ts +2 -0
- package/dist/ai/utils/__tests__/doc-splitter.test.d.ts.map +1 -0
- package/dist/ai/utils/__tests__/doc-splitter.test.js +35 -0
- package/dist/ai/utils/__tests__/doc-splitter.test.js.map +1 -0
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.d.ts +2 -0
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.d.ts.map +1 -0
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.js +47 -0
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.js.map +1 -0
- package/dist/ai/utils/__tests__/json-to-yaml.test.d.ts +2 -0
- package/dist/ai/utils/__tests__/json-to-yaml.test.d.ts.map +1 -0
- package/dist/ai/utils/__tests__/json-to-yaml.test.js +63 -0
- package/dist/ai/utils/__tests__/json-to-yaml.test.js.map +1 -0
- package/dist/ai/utils/__tests__/stringify-docs.test.d.ts +2 -0
- package/dist/ai/utils/__tests__/stringify-docs.test.d.ts.map +1 -0
- package/dist/ai/utils/__tests__/stringify-docs.test.js +54 -0
- package/dist/ai/utils/__tests__/stringify-docs.test.js.map +1 -0
- package/dist/ai/utils/chunk-arr.d.ts +3 -0
- package/dist/ai/utils/chunk-arr.d.ts.map +1 -0
- package/dist/ai/utils/chunk-arr.js +13 -0
- package/dist/ai/utils/chunk-arr.js.map +1 -0
- package/dist/ai/utils/doc-relevance-checker.d.ts +10 -0
- package/dist/ai/utils/doc-relevance-checker.d.ts.map +1 -0
- package/dist/ai/utils/doc-relevance-checker.js +37 -0
- package/dist/ai/utils/doc-relevance-checker.js.map +1 -0
- package/dist/ai/utils/doc-splitter.d.ts +3 -0
- package/dist/ai/utils/doc-splitter.d.ts.map +1 -0
- package/dist/ai/utils/doc-splitter.js +20 -0
- package/dist/ai/utils/doc-splitter.js.map +1 -0
- package/dist/ai/utils/filter-similarity-search-results.d.ts +4 -0
- package/dist/ai/utils/filter-similarity-search-results.d.ts.map +1 -0
- package/dist/ai/utils/filter-similarity-search-results.js +11 -0
- package/dist/ai/utils/filter-similarity-search-results.js.map +1 -0
- package/dist/ai/utils/generate-questions-from-chunks.d.ts +15 -0
- package/dist/ai/utils/generate-questions-from-chunks.d.ts.map +1 -0
- package/dist/ai/utils/generate-questions-from-chunks.js +101 -0
- package/dist/ai/utils/generate-questions-from-chunks.js.map +1 -0
- package/dist/ai/utils/index.d.ts +11 -0
- package/dist/ai/utils/index.d.ts.map +1 -0
- package/dist/ai/utils/index.js +11 -0
- package/dist/ai/utils/index.js.map +1 -0
- package/dist/ai/utils/json-to-yaml.d.ts +2 -0
- package/dist/ai/utils/json-to-yaml.d.ts.map +1 -0
- package/dist/ai/utils/json-to-yaml.js +25 -0
- package/dist/ai/utils/json-to-yaml.js.map +1 -0
- package/dist/ai/utils/load-file.d.ts +3 -0
- package/dist/ai/utils/load-file.d.ts.map +1 -0
- package/dist/ai/utils/load-file.js +133 -0
- package/dist/ai/utils/load-file.js.map +1 -0
- package/dist/ai/utils/stringify-docs.d.ts +3 -0
- package/dist/ai/utils/stringify-docs.d.ts.map +1 -0
- package/dist/ai/utils/stringify-docs.js +6 -0
- package/dist/ai/utils/stringify-docs.js.map +1 -0
- package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.d.ts +35 -0
- package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.d.ts.map +1 -0
- package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js +55 -0
- package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js.map +1 -0
- package/dist/ai/utils/verify-matrix-openId-token.d.ts +6 -0
- package/dist/ai/utils/verify-matrix-openId-token.d.ts.map +1 -0
- package/dist/ai/utils/verify-matrix-openId-token.js +36 -0
- package/dist/ai/utils/verify-matrix-openId-token.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/services/env/env-service.test.d.ts +2 -0
- package/dist/services/env/env-service.test.d.ts.map +1 -0
- package/dist/services/env/env-service.test.js +99 -0
- package/dist/services/env/env-service.test.js.map +1 -0
- package/dist/services/env/env.service.d.ts +11 -0
- package/dist/services/env/env.service.d.ts.map +1 -0
- package/dist/services/env/env.service.js +42 -0
- package/dist/services/env/env.service.js.map +1 -0
- package/dist/services/env/index.d.ts +2 -0
- package/dist/services/env/index.d.ts.map +1 -0
- package/dist/services/env/index.js +2 -0
- package/dist/services/env/index.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/memory-engine/memory-engine.service.d.ts +35 -0
- package/dist/services/memory-engine/memory-engine.service.d.ts.map +1 -0
- package/dist/services/memory-engine/memory-engine.service.js +295 -0
- package/dist/services/memory-engine/memory-engine.service.js.map +1 -0
- package/dist/services/memory-engine/types.d.ts +88 -0
- package/dist/services/memory-engine/types.d.ts.map +1 -0
- package/dist/services/memory-engine/types.js +2 -0
- package/dist/services/memory-engine/types.js.map +1 -0
- package/dist/services/session-manager/dto.d.ts +40 -0
- package/dist/services/session-manager/dto.d.ts.map +1 -0
- package/dist/services/session-manager/dto.js +170 -0
- package/dist/services/session-manager/dto.js.map +1 -0
- package/dist/services/session-manager/errors.d.ts +22 -0
- package/dist/services/session-manager/errors.d.ts.map +1 -0
- package/dist/services/session-manager/errors.js +41 -0
- package/dist/services/session-manager/errors.js.map +1 -0
- package/dist/services/session-manager/index.d.ts +4 -0
- package/dist/services/session-manager/index.d.ts.map +1 -0
- package/dist/services/session-manager/index.js +4 -0
- package/dist/services/session-manager/index.js.map +1 -0
- package/dist/services/session-manager/session-manager.service.d.ts +40 -0
- package/dist/services/session-manager/session-manager.service.d.ts.map +1 -0
- package/dist/services/session-manager/session-manager.service.js +251 -0
- package/dist/services/session-manager/session-manager.service.js.map +1 -0
- package/dist/utils/get-user-subscription.d.ts +21 -0
- package/dist/utils/get-user-subscription.d.ts.map +1 -0
- package/dist/utils/get-user-subscription.js +44 -0
- package/dist/utils/get-user-subscription.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/docs/ai-module.md +84 -0
- package/docs/services.md +168 -0
- package/docs/tools.md +325 -0
- package/jest.config.js +6 -0
- package/package.json +81 -0
- package/src/ai/checkpointer/index.ts +1 -0
- package/src/ai/index.ts +8 -0
- package/src/ai/models/index.ts +1 -0
- package/src/ai/models/openai.test.ts +72 -0
- package/src/ai/models/openai.ts +54 -0
- package/src/ai/nodes/create-fake-node.ts +1 -0
- package/src/ai/nodes/find-docs/find-docs.prompt.ts +61 -0
- package/src/ai/nodes/find-docs/index.ts +2 -0
- package/src/ai/nodes/find-docs/node.ts +83 -0
- package/src/ai/nodes/generic-chat/generic-chat.node.ts +58 -0
- package/src/ai/nodes/generic-chat/generic-chat.prompt.ts +66 -0
- package/src/ai/nodes/generic-chat/index.ts +1 -0
- package/src/ai/nodes/index.ts +3 -0
- package/src/ai/semantic-router-factory/create-semantic-router.test.ts +98 -0
- package/src/ai/semantic-router-factory/create-semantic-router.ts +136 -0
- package/src/ai/semantic-router-factory/index.ts +3 -0
- package/src/ai/semantic-router-factory/semantic-router-prompt.ts +168 -0
- package/src/ai/semantic-router-factory/validate-routes.ts +26 -0
- package/src/ai/tools/action-caller.ts +37 -0
- package/src/ai/tools/ask-ixo-guru/ask-ixo-guru.ts +73 -0
- package/src/ai/tools/ask-ixo-guru/index.ts +1 -0
- package/src/ai/tools/browser-tool-caller.ts +37 -0
- package/src/ai/tools/frontend-tool-caller.ts +86 -0
- package/src/ai/tools/index.ts +10 -0
- package/src/ai/tools/log-action-to-matrix.ts +30 -0
- package/src/ai/tools/parser-action-tool.ts +61 -0
- package/src/ai/tools/parser-browser-tool.ts +55 -0
- package/src/ai/tools/retriever-tool/index.ts +1 -0
- package/src/ai/tools/retriever-tool/retriever-tool.test.ts +156 -0
- package/src/ai/tools/retriever-tool/retriever-tool.ts +107 -0
- package/src/ai/tools/scrape-web-page.ts +75 -0
- package/src/ai/tools/web-search-tool.ts +38 -0
- package/src/ai/types.ts +6 -0
- package/src/ai/utils/__tests__/chunk-arr.test.ts +46 -0
- package/src/ai/utils/__tests__/doc-relevance-checker.test.ts +90 -0
- package/src/ai/utils/__tests__/doc-splitter.test.ts +42 -0
- package/src/ai/utils/__tests__/filter-similarity-search-results.test.ts +57 -0
- package/src/ai/utils/__tests__/json-to-yaml.test.ts +70 -0
- package/src/ai/utils/__tests__/stringify-docs.test.ts +61 -0
- package/src/ai/utils/chunk-arr.ts +13 -0
- package/src/ai/utils/doc-relevance-checker.ts +58 -0
- package/src/ai/utils/doc-splitter.ts +28 -0
- package/src/ai/utils/filter-similarity-search-results.ts +15 -0
- package/src/ai/utils/generate-questions-from-chunks.ts +114 -0
- package/src/ai/utils/index.ts +10 -0
- package/src/ai/utils/json-to-yaml.ts +32 -0
- package/src/ai/utils/load-file.ts +170 -0
- package/src/ai/utils/stringify-docs.ts +14 -0
- package/src/ai/utils/transformGraphStateMessageToListMessageResponse.ts +108 -0
- package/src/ai/utils/verify-matrix-openId-token.ts +46 -0
- package/src/index.ts +3 -0
- package/src/services/env/env-service.test.ts +153 -0
- package/src/services/env/env.service.ts +65 -0
- package/src/services/env/index.ts +1 -0
- package/src/services/index.ts +4 -0
- package/src/services/memory-engine/memory-engine.service.ts +486 -0
- package/src/services/memory-engine/types.ts +208 -0
- package/src/services/session-manager/dto.ts +120 -0
- package/src/services/session-manager/errors.ts +56 -0
- package/src/services/session-manager/index.ts +3 -0
- package/src/services/session-manager/session-manager.service.ts +405 -0
- package/src/utils/get-user-subscription.ts +84 -0
- package/src/utils/index.ts +1 -0
- package/tsconfig.json +16 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Document } from '@langchain/core/documents';
|
|
2
|
+
import { stringifyDocs } from '../stringify-docs.js';
|
|
3
|
+
describe('stringifyDocs', () => {
|
|
4
|
+
it('should stringify a single document', () => {
|
|
5
|
+
const doc = new Document({
|
|
6
|
+
pageContent: 'Test content',
|
|
7
|
+
metadata: { id: '123' },
|
|
8
|
+
});
|
|
9
|
+
const result = stringifyDocs([doc]);
|
|
10
|
+
expect(result).toBe('#ID:123\n Document: Test content \n \n ');
|
|
11
|
+
});
|
|
12
|
+
it('should stringify multiple documents', () => {
|
|
13
|
+
const docs = [
|
|
14
|
+
new Document({
|
|
15
|
+
pageContent: 'First content',
|
|
16
|
+
metadata: { id: '1' },
|
|
17
|
+
}),
|
|
18
|
+
new Document({
|
|
19
|
+
pageContent: 'Second content',
|
|
20
|
+
metadata: { id: '2' },
|
|
21
|
+
}),
|
|
22
|
+
];
|
|
23
|
+
const expected = '#ID:1\n Document: First content \n \n \n\n#ID:2\n Document: Second content \n \n ';
|
|
24
|
+
expect(stringifyDocs(docs)).toBe(expected);
|
|
25
|
+
});
|
|
26
|
+
it('should handle empty array', () => {
|
|
27
|
+
expect(stringifyDocs([])).toBe('');
|
|
28
|
+
});
|
|
29
|
+
it('should handle documents with special characters', () => {
|
|
30
|
+
const doc = new Document({
|
|
31
|
+
pageContent: 'Content with \n newline and \t tab',
|
|
32
|
+
metadata: { id: 'special' },
|
|
33
|
+
});
|
|
34
|
+
const expected = '#ID:special\n Document: Content with \n newline and \t tab \n \n ';
|
|
35
|
+
expect(stringifyDocs([doc])).toBe(expected);
|
|
36
|
+
});
|
|
37
|
+
it('should handle documents with empty content', () => {
|
|
38
|
+
const doc = new Document({
|
|
39
|
+
pageContent: '',
|
|
40
|
+
metadata: { id: 'empty' },
|
|
41
|
+
});
|
|
42
|
+
const expected = '#ID:empty\n Document: \n \n ';
|
|
43
|
+
expect(stringifyDocs([doc])).toBe(expected);
|
|
44
|
+
});
|
|
45
|
+
it('should handle documents with missing id in metadata', () => {
|
|
46
|
+
const doc = new Document({
|
|
47
|
+
pageContent: 'Test content',
|
|
48
|
+
metadata: {},
|
|
49
|
+
});
|
|
50
|
+
const expected = '#ID:undefined\n Document: Test content \n \n ';
|
|
51
|
+
expect(stringifyDocs([doc])).toBe(expected);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=stringify-docs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify-docs.test.js","sourceRoot":"","sources":["../../../../src/ai/utils/__tests__/stringify-docs.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;SACxB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG;YACX,IAAI,QAAQ,CAAC;gBACX,WAAW,EAAE,eAAe;gBAC5B,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;aACtB,CAAC;YACF,IAAI,QAAQ,CAAC;gBACX,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;aACtB,CAAC;SACH,CAAC;QACF,MAAM,QAAQ,GACZ,mFAAmF,CAAC;QACtF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;SAC5B,CAAC,CAAC;QACH,MAAM,QAAQ,GACZ,mEAAmE,CAAC;QACtE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,EAAE;YACf,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;SAC1B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,+BAA+B,CAAC;QACjD,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;YACvB,WAAW,EAAE,cAAc;YAC3B,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,+CAA+C,CAAC;QACjE,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-arr.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/chunk-arr.ts"],"names":[],"mappings":"AAAA,iBAAS,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAWzD;AACD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function chunkArr(array, chunkSize) {
|
|
2
|
+
if (chunkSize <= 0) {
|
|
3
|
+
throw new Error('Chunk size must be greater than 0');
|
|
4
|
+
}
|
|
5
|
+
const chunks = [];
|
|
6
|
+
for (let i = 0; i < array.length; i += chunkSize) {
|
|
7
|
+
const chunk = array.slice(i, i + chunkSize);
|
|
8
|
+
chunks.push(chunk);
|
|
9
|
+
}
|
|
10
|
+
return chunks;
|
|
11
|
+
}
|
|
12
|
+
export { chunkArr };
|
|
13
|
+
//# sourceMappingURL=chunk-arr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-arr.js","sourceRoot":"","sources":["../../../src/ai/utils/chunk-arr.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAI,KAAU,EAAE,SAAiB;IAChD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Document } from '@langchain/core/documents';
|
|
2
|
+
import { type BaseLanguageModel } from '@langchain/core/language_models/base';
|
|
3
|
+
type TCheckDocRelevanceArgs = {
|
|
4
|
+
doc: Document | string;
|
|
5
|
+
query: string;
|
|
6
|
+
model?: BaseLanguageModel;
|
|
7
|
+
};
|
|
8
|
+
declare function checkDocRelevance({ doc, model, query, }: TCheckDocRelevanceArgs): Promise<boolean>;
|
|
9
|
+
export default checkDocRelevance;
|
|
10
|
+
//# sourceMappingURL=doc-relevance-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-relevance-checker.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/doc-relevance-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAK9E,KAAK,sBAAsB,GAAG;IAC5B,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,iBAAe,iBAAiB,CAAC,EAC/B,GAAG,EACH,KAA4B,EAC5B,KAAK,GACN,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC3C;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChatPromptTemplate } from '@langchain/core/prompts';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
import { getChatOpenAiModel } from '../models/openai.js';
|
|
4
|
+
async function checkDocRelevance({ doc, model = getChatOpenAiModel(), query, }) {
|
|
5
|
+
const prompt = ChatPromptTemplate.fromTemplate(`You are an AI agent responsible for determining the relevance of a document to a given query.
|
|
6
|
+
|
|
7
|
+
DOCUMENT: ${typeof doc === 'string' ? doc : doc.pageContent}
|
|
8
|
+
QUERY: ${query}
|
|
9
|
+
|
|
10
|
+
### Acceptance Criteria
|
|
11
|
+
(1) Your goal is to identify DOCUMENTs that are completely unrelated to the QUERY.
|
|
12
|
+
(2) If the DOCUMENT contain any keywords or semantic meaning related to the QUERY, consider them relevant.
|
|
13
|
+
(3) It is acceptable if the DOCUMENT have some information that is unrelated to the QUERY, as long as (2) is met.
|
|
14
|
+
|
|
15
|
+
### Instructions
|
|
16
|
+
(1) Review the DOCUMENT and determine if it is relevant to the QUERY.
|
|
17
|
+
(2) Provide a boolean answer indicating the relevance of the DOCUMENT to the QUERY.
|
|
18
|
+
(3) If the DOCUMENT is relevant, set the answer to true. Otherwise, set the answer to false.
|
|
19
|
+
`);
|
|
20
|
+
const zodSchema = z.object({
|
|
21
|
+
answer: z.boolean(),
|
|
22
|
+
});
|
|
23
|
+
if (!model) {
|
|
24
|
+
throw new Error('Model is not set');
|
|
25
|
+
}
|
|
26
|
+
if (!model.withStructuredOutput) {
|
|
27
|
+
throw new Error('Model does not support structured output');
|
|
28
|
+
}
|
|
29
|
+
const structuredLlm = model.withStructuredOutput(zodSchema);
|
|
30
|
+
const chain = prompt.pipe(structuredLlm);
|
|
31
|
+
const response = await chain.invoke({
|
|
32
|
+
query,
|
|
33
|
+
});
|
|
34
|
+
return response.answer;
|
|
35
|
+
}
|
|
36
|
+
export default checkDocRelevance;
|
|
37
|
+
//# sourceMappingURL=doc-relevance-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-relevance-checker.js","sourceRoot":"","sources":["../../../src/ai/utils/doc-relevance-checker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQzD,KAAK,UAAU,iBAAiB,CAAC,EAC/B,GAAG,EACH,KAAK,GAAG,kBAAkB,EAAE,EAC5B,KAAK,GACkB;IACvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAC5C;;cAEU,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW;WAClD,KAAK;;;;;;;;;;;GAWb,CACA,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;KACpB,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAClC,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB,CAAC;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-splitter.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/doc-splitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO1D,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,QAAQ,EAAE,CAOvE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
const splitter = new RecursiveCharacterTextSplitter();
|
|
4
|
+
export const docSplitter = (text) => {
|
|
5
|
+
if (!text)
|
|
6
|
+
throw new Error('No text provided');
|
|
7
|
+
const _text = typeof text === 'string' ? [text] : text;
|
|
8
|
+
arrSchema.parse(_text);
|
|
9
|
+
return splitter.createDocuments(_text);
|
|
10
|
+
};
|
|
11
|
+
const arrSchema = z
|
|
12
|
+
.array(z.string({
|
|
13
|
+
message: 'Invalid text provided',
|
|
14
|
+
}), {
|
|
15
|
+
message: 'Invalid text provided in array',
|
|
16
|
+
})
|
|
17
|
+
.nonempty({
|
|
18
|
+
message: 'Text array cannot be empty',
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=doc-splitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-splitter.js","sourceRoot":"","sources":["../../../src/ai/utils/doc-splitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAQ,CAAC,MAAO,KAAK,CAAC;AAEtB,MAAM,QAAQ,GAAG,IAAI,8BAA8B,EAAE,CAAC;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAuB,EAAuB,EAAE;IAC1E,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEvB,OAAO,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC;KAChB,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;IACP,OAAO,EAAE,uBAAuB;CACjC,CAAC,EACF;IACE,OAAO,EAAE,gCAAgC;CAC1C,CACF;KACA,QAAQ,CAAC;IACR,OAAO,EAAE,4BAA4B;CACtC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Document } from '@langchain/core/documents';
|
|
2
|
+
declare function filterSimilaritySearchResults<Doc extends Document, Result extends [Doc, number][]>(results: Result, threshold: number): Doc[];
|
|
3
|
+
export { filterSimilaritySearchResults };
|
|
4
|
+
//# sourceMappingURL=filter-similarity-search-results.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-similarity-search-results.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/filter-similarity-search-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,iBAAS,6BAA6B,CACpC,GAAG,SAAS,QAAQ,EACpB,MAAM,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAC9B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,CAQ3C;AACD,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function filterSimilaritySearchResults(results, threshold) {
|
|
2
|
+
const filteredResults = [];
|
|
3
|
+
for (const [doc, score] of results) {
|
|
4
|
+
if (score >= threshold) {
|
|
5
|
+
filteredResults.push(doc);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return filteredResults;
|
|
9
|
+
}
|
|
10
|
+
export { filterSimilaritySearchResults };
|
|
11
|
+
//# sourceMappingURL=filter-similarity-search-results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-similarity-search-results.js","sourceRoot":"","sources":["../../../src/ai/utils/filter-similarity-search-results.ts"],"names":[],"mappings":"AAEA,SAAS,6BAA6B,CAGpC,OAAe,EAAE,SAAiB;IAClC,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AACD,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Document } from 'langchain';
|
|
2
|
+
export declare const generateQuestionsFromChunks: (content: string, chunks: Document[]) => Promise<QuestionGeneratorOutput["json_output"]>;
|
|
3
|
+
type QuestionGeneratorOutput = {
|
|
4
|
+
thoughts: string;
|
|
5
|
+
json_output: {
|
|
6
|
+
chunkId: string;
|
|
7
|
+
qas: {
|
|
8
|
+
type: string;
|
|
9
|
+
question: string;
|
|
10
|
+
answer: string;
|
|
11
|
+
}[];
|
|
12
|
+
}[];
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=generate-questions-from-chunks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-questions-from-chunks.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/generate-questions-from-chunks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,eAAO,MAAM,2BAA2B,GACtC,SAAS,MAAM,EACf,QAAQ,QAAQ,EAAE,KACjB,OAAO,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAmGhD,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC3D,EAAE,CAAC;CACL,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { getOpenAiClient } from '../models/openai.js';
|
|
2
|
+
export const generateQuestionsFromChunks = async (content, chunks) => {
|
|
3
|
+
const openai = getOpenAiClient();
|
|
4
|
+
const response = await openai.chat.completions.parse({
|
|
5
|
+
model: 'gpt-4o-mini',
|
|
6
|
+
messages: [
|
|
7
|
+
{
|
|
8
|
+
role: 'system',
|
|
9
|
+
content: [
|
|
10
|
+
{
|
|
11
|
+
type: 'text',
|
|
12
|
+
text: '# SYSTEM — “Question Generator with Visible Chain-of-Thought”\n\nYou are an expert dataset-builder. \nYour mission: turn raw knowledge into high-quality Q-A pairs for semantic search **while showing your reasoning**.\n\n---\n## INPUTS\n- **chunks** – array → `{ "id": string, "text": string }` \n- **fullText** – the complete source document.\n\n---\n## TASK\nFor **each** chunk:\n\n1. **THINK (visible)** \n • Analyse the chunk’s content. \n • Note key facts, entities, dates, numbers, causal links, etc. \n • Decide which facts yield **Direct** vs **Derived** questions. \n • *Keep thoughts ≤ 120 words.*\n\n2. **GENERATE** \n • **Direct Q-A** – 1-3 questions whose full answer text appears **verbatim (or nearly so)** in the *same chunk*. \n • **Derived Q-A** – 1-2 questions that require light inference or synthesis; answers may use the chunk **or** *fullText*. \n • Ensure **at least two distinct sections** of the chunk are represented among the questions.\n\n---\n## OUTPUT FORMAT \nReturn **one valid JSON object** that matches the schema below. \nOutput **nothing** else.\n\n```json\n{\n "thoughts": "<your chain-of-thought here>",\n "json_output": [\n {\n "chunkId": "...",\n "qas": [\n { "type": "direct", "question": "...?", "answer": "..." },\n { "type": "derived", "question": "...?", "answer": "..." }\n // …\n ]\n }\n // …more chunks\n ]\n}\n',
|
|
13
|
+
},
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
role: 'user',
|
|
18
|
+
content: [
|
|
19
|
+
{
|
|
20
|
+
type: 'text',
|
|
21
|
+
text: `## CHUNKS
|
|
22
|
+
${chunks
|
|
23
|
+
.map((chunk) => {
|
|
24
|
+
return `### CHUNK ${chunk.id}
|
|
25
|
+
${chunk.pageContent}`;
|
|
26
|
+
})
|
|
27
|
+
.join('\n')}
|
|
28
|
+
## FULL TEXT
|
|
29
|
+
${content}`,
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
response_format: {
|
|
35
|
+
type: 'json_schema',
|
|
36
|
+
json_schema: {
|
|
37
|
+
name: 'question_generator_output',
|
|
38
|
+
strict: true,
|
|
39
|
+
schema: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
properties: {
|
|
42
|
+
thoughts: {
|
|
43
|
+
type: 'string',
|
|
44
|
+
description: 'Visible chain-of-thought reasoning.',
|
|
45
|
+
},
|
|
46
|
+
json_output: {
|
|
47
|
+
type: 'array',
|
|
48
|
+
description: 'Array of chunks with their generated Q&A pairs.',
|
|
49
|
+
items: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
chunkId: {
|
|
53
|
+
type: 'string',
|
|
54
|
+
description: 'Identifier of the chunk.',
|
|
55
|
+
},
|
|
56
|
+
qas: {
|
|
57
|
+
type: 'array',
|
|
58
|
+
items: {
|
|
59
|
+
type: 'object',
|
|
60
|
+
properties: {
|
|
61
|
+
type: {
|
|
62
|
+
type: 'string',
|
|
63
|
+
enum: ['direct', 'derived'],
|
|
64
|
+
description: 'Question type: direct (verbatim) or derived (inference).',
|
|
65
|
+
},
|
|
66
|
+
question: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
description: 'The question text.',
|
|
69
|
+
},
|
|
70
|
+
answer: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
description: 'The answer text.',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
required: ['type', 'question', 'answer'],
|
|
76
|
+
additionalProperties: false,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
required: ['chunkId', 'qas'],
|
|
81
|
+
additionalProperties: false,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
required: ['thoughts', 'json_output'],
|
|
86
|
+
additionalProperties: false,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
temperature: 0,
|
|
91
|
+
max_completion_tokens: 9957,
|
|
92
|
+
top_p: 0.28,
|
|
93
|
+
frequency_penalty: 0,
|
|
94
|
+
presence_penalty: 0,
|
|
95
|
+
store: false,
|
|
96
|
+
});
|
|
97
|
+
const json = response.choices[0]?.message
|
|
98
|
+
.parsed;
|
|
99
|
+
return json.json_output;
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=generate-questions-from-chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-questions-from-chunks.js","sourceRoot":"","sources":["../../../src/ai/utils/generate-questions-from-chunks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,EAC9C,OAAe,EACf,MAAkB,EAC+B,EAAE;IACnD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QACnD,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,25CAA25C;qBACl6C;iBACF;aACF;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;YACN,MAAM;6BACL,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;4BACb,OAAO,aAAa,KAAK,CAAC,EAAE;cAC5B,KAAK,CAAC,WAAW,EAAE,CAAC;wBACtB,CAAC,CAAC;6BACD,IAAI,CAAC,IAAI,CAAC;;YAEX,OAAO,EAAE;qBACV;iBACF;aACF;SACF;QACD,eAAe,EAAE;YACf,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE;gBACX,IAAI,EAAE,2BAA2B;gBACjC,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,qCAAqC;yBACnD;wBACD,WAAW,EAAE;4BACX,IAAI,EAAE,OAAO;4BACb,WAAW,EAAE,iDAAiD;4BAC9D,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE;oCACV,OAAO,EAAE;wCACP,IAAI,EAAE,QAAQ;wCACd,WAAW,EAAE,0BAA0B;qCACxC;oCACD,GAAG,EAAE;wCACH,IAAI,EAAE,OAAO;wCACb,KAAK,EAAE;4CACL,IAAI,EAAE,QAAQ;4CACd,UAAU,EAAE;gDACV,IAAI,EAAE;oDACJ,IAAI,EAAE,QAAQ;oDACd,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;oDAC3B,WAAW,EACT,0DAA0D;iDAC7D;gDACD,QAAQ,EAAE;oDACR,IAAI,EAAE,QAAQ;oDACd,WAAW,EAAE,oBAAoB;iDAClC;gDACD,MAAM,EAAE;oDACN,IAAI,EAAE,QAAQ;oDACd,WAAW,EAAE,kBAAkB;iDAChC;6CACF;4CACD,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;4CACxC,oBAAoB,EAAE,KAAK;yCAC5B;qCACF;iCACF;gCACD,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC;gCAC5B,oBAAoB,EAAE,KAAK;6BAC5B;yBACF;qBACF;oBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC;oBACrC,oBAAoB,EAAE,KAAK;iBAC5B;aACF;SACF;QACD,WAAW,EAAE,CAAC;QACd,qBAAqB,EAAE,IAAI;QAC3B,KAAK,EAAE,IAAI;QACX,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,EAAE,CAAC;QACnB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO;SACtC,MAA4C,CAAC;IAChD,OAAO,IAAI,CAAC,WAAW,CAAC;AAC1B,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './chunk-arr.js';
|
|
2
|
+
export * from './doc-relevance-checker.js';
|
|
3
|
+
export * from './doc-splitter.js';
|
|
4
|
+
export * from './filter-similarity-search-results.js';
|
|
5
|
+
export * from './generate-questions-from-chunks.js';
|
|
6
|
+
export * from './json-to-yaml.js';
|
|
7
|
+
export * from './load-file.js';
|
|
8
|
+
export * from './stringify-docs.js';
|
|
9
|
+
export * from './transformGraphStateMessageToListMessageResponse.js';
|
|
10
|
+
export * from './verify-matrix-openId-token.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sDAAsD,CAAC;AACrE,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './chunk-arr.js';
|
|
2
|
+
export * from './doc-relevance-checker.js';
|
|
3
|
+
export * from './doc-splitter.js';
|
|
4
|
+
export * from './filter-similarity-search-results.js';
|
|
5
|
+
export * from './generate-questions-from-chunks.js';
|
|
6
|
+
export * from './json-to-yaml.js';
|
|
7
|
+
export * from './load-file.js';
|
|
8
|
+
export * from './stringify-docs.js';
|
|
9
|
+
export * from './transformGraphStateMessageToListMessageResponse.js';
|
|
10
|
+
export * from './verify-matrix-openId-token.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ai/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sDAAsD,CAAC;AACrE,cAAc,iCAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-to-yaml.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/json-to-yaml.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EACzC,MAAM,CAAC,EACP,oBAAe,KACd,MA4BF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const jsonToYaml = (json, indentLevel = 0) => {
|
|
2
|
+
const indent = ' '.repeat(indentLevel);
|
|
3
|
+
const isArray = Array.isArray(json);
|
|
4
|
+
if (isArray) {
|
|
5
|
+
return json
|
|
6
|
+
.map((item) => {
|
|
7
|
+
if (item !== null && typeof item === 'object') {
|
|
8
|
+
const nestedYaml = jsonToYaml(item, indentLevel + 1);
|
|
9
|
+
return `${indent}- \n${nestedYaml}`;
|
|
10
|
+
}
|
|
11
|
+
return `${indent}- ${item}`;
|
|
12
|
+
})
|
|
13
|
+
.join('\n');
|
|
14
|
+
}
|
|
15
|
+
return Object.entries(json)
|
|
16
|
+
.map(([key, value]) => {
|
|
17
|
+
if (value !== null && typeof value === 'object') {
|
|
18
|
+
const nestedYaml = jsonToYaml(value, indentLevel + 1);
|
|
19
|
+
return `${indent}${key}:\n${nestedYaml}`;
|
|
20
|
+
}
|
|
21
|
+
return `${indent}${key}: ${value}`;
|
|
22
|
+
})
|
|
23
|
+
.join('\n');
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=json-to-yaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-to-yaml.js","sourceRoot":"","sources":["../../../src/ai/utils/json-to-yaml.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,IAAO,EACP,WAAW,GAAG,CAAC,EACP,EAAE;IACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAExC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAQ,IAAyB;aAC9B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAE9C,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;gBACrD,OAAO,GAAG,MAAM,OAAO,UAAU,EAAE,CAAC;YACtC,CAAC;YACD,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;QAC9B,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAEhD,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YACtD,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,MAAM,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;IACrC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-file.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/load-file.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAoDrD,eAAO,MAAM,QAAQ,GACnB,MAAM,MAAM,EACZ,eAAe,WAAW,KACzB,OAAO,CAAC,QAAQ,EAAE,CAgDpB,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Logger } from '@ixo/logger';
|
|
2
|
+
import { DocxLoader } from '@langchain/community/document_loaders/fs/docx';
|
|
3
|
+
import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';
|
|
4
|
+
import { HtmlToTextTransformer } from '@langchain/community/document_transformers/html_to_text';
|
|
5
|
+
import { Document } from '@langchain/core/documents';
|
|
6
|
+
import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters';
|
|
7
|
+
import fs from 'node:fs/promises';
|
|
8
|
+
const splitter = new RecursiveCharacterTextSplitter({
|
|
9
|
+
chunkSize: 1000,
|
|
10
|
+
chunkOverlap: 200,
|
|
11
|
+
});
|
|
12
|
+
const determineFileType = (path, contentType) => {
|
|
13
|
+
const extension = path.split('.').pop()?.toLowerCase();
|
|
14
|
+
if (extension) {
|
|
15
|
+
if (['pdf'].includes(extension))
|
|
16
|
+
return 'pdf';
|
|
17
|
+
if (['md', 'markdown'].includes(extension))
|
|
18
|
+
return 'markdown';
|
|
19
|
+
if (['html', 'htm'].includes(extension))
|
|
20
|
+
return 'html';
|
|
21
|
+
if (['txt'].includes(extension))
|
|
22
|
+
return 'text';
|
|
23
|
+
if (['doc', 'docx'].includes(extension))
|
|
24
|
+
return 'doc';
|
|
25
|
+
}
|
|
26
|
+
if (contentType) {
|
|
27
|
+
if (contentType.includes('application/pdf'))
|
|
28
|
+
return 'pdf';
|
|
29
|
+
if (contentType.includes('text/markdown'))
|
|
30
|
+
return 'markdown';
|
|
31
|
+
if (contentType.includes('text/html'))
|
|
32
|
+
return 'html';
|
|
33
|
+
if (contentType.includes('text/plain'))
|
|
34
|
+
return 'text';
|
|
35
|
+
if (contentType.includes('application/msword') ||
|
|
36
|
+
contentType.includes('application/vnd.openxmlformats-officedocument.wordprocessingml.document')) {
|
|
37
|
+
return 'doc';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
export const loadFile = async (path, fetchOptions) => {
|
|
43
|
+
const isUrl = path.startsWith('http');
|
|
44
|
+
if (isUrl) {
|
|
45
|
+
try {
|
|
46
|
+
const response = await fetch(path, fetchOptions);
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const error = await getErrorFromResponse(response);
|
|
49
|
+
console.error(`Error fetching file from URL: ${path}`, error);
|
|
50
|
+
throw new Error(`Failed to fetch file from URL: ${path}`);
|
|
51
|
+
}
|
|
52
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
53
|
+
const fileType = determineFileType(path, contentType);
|
|
54
|
+
if (!fileType) {
|
|
55
|
+
throw new Error(`Unsupported file type. Content-Type: ${contentType}`);
|
|
56
|
+
}
|
|
57
|
+
const data = await response.arrayBuffer();
|
|
58
|
+
const blob = new Blob([data], {
|
|
59
|
+
type: contentType || 'application/octet-stream',
|
|
60
|
+
});
|
|
61
|
+
return processFile(blob, fileType);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
Logger.error(`Failed to load file from URL: ${path}`, error);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const buffer = await fs.readFile(path);
|
|
70
|
+
const blob = new Blob([buffer]);
|
|
71
|
+
const fileType = determineFileType(path);
|
|
72
|
+
if (!fileType) {
|
|
73
|
+
throw new Error(`Unsupported file type for file: ${path}`);
|
|
74
|
+
}
|
|
75
|
+
return processFile(blob, fileType);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
Logger.error(`Failed to load local file from path: ${path}`, error);
|
|
79
|
+
throw error;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const processFile = async (blob, fileType) => {
|
|
83
|
+
switch (fileType) {
|
|
84
|
+
case 'pdf': {
|
|
85
|
+
const pdfLoader = new PDFLoader(blob);
|
|
86
|
+
return pdfLoader.load();
|
|
87
|
+
}
|
|
88
|
+
case 'markdown': {
|
|
89
|
+
return loadMarkdown(blob);
|
|
90
|
+
}
|
|
91
|
+
case 'html': {
|
|
92
|
+
const html = await blobToString(blob);
|
|
93
|
+
const htmlSplitter = RecursiveCharacterTextSplitter.fromLanguage('html');
|
|
94
|
+
const transformer = new HtmlToTextTransformer();
|
|
95
|
+
const sequence = htmlSplitter.pipe(transformer);
|
|
96
|
+
const docs = await sequence.invoke([
|
|
97
|
+
new Document({
|
|
98
|
+
pageContent: html,
|
|
99
|
+
}),
|
|
100
|
+
]);
|
|
101
|
+
return docs;
|
|
102
|
+
}
|
|
103
|
+
case 'text':
|
|
104
|
+
return splitter.createDocuments([await blobToString(blob)]);
|
|
105
|
+
case 'doc': {
|
|
106
|
+
const docxLoader = new DocxLoader(blob);
|
|
107
|
+
return docxLoader.load();
|
|
108
|
+
}
|
|
109
|
+
default:
|
|
110
|
+
throw new Error(`Unsupported file type: ${fileType}`);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const loadMarkdown = async (blob) => {
|
|
114
|
+
const markdown = await blobToString(blob);
|
|
115
|
+
return splitter.createDocuments([markdown]);
|
|
116
|
+
};
|
|
117
|
+
const blobToString = async (blob) => {
|
|
118
|
+
const buffer = await blob.arrayBuffer();
|
|
119
|
+
return Buffer.from(buffer).toString('utf-8');
|
|
120
|
+
};
|
|
121
|
+
const getErrorFromResponse = async (response) => {
|
|
122
|
+
try {
|
|
123
|
+
const json = await response.json();
|
|
124
|
+
return json;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (response.bodyUsed)
|
|
128
|
+
return 'Unknown error';
|
|
129
|
+
const errorMessage = await response.text();
|
|
130
|
+
return errorMessage;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=load-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-file.js","sourceRoot":"","sources":["../../../src/ai/utils/load-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify-docs.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/stringify-docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO1D,eAAO,MAAM,aAAa,GAAI,MAAM,QAAQ,EAAE,KAAG,MAMhD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify-docs.js","sourceRoot":"","sources":["../../../src/ai/utils/stringify-docs.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAgB,EAAU,EAAE;IACxD,OAAO,IAAI;SACR,GAAG,CACF,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,CAAC,WAAW,SAAS,CACxE;SACA,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type BaseMessage } from '@langchain/core/messages';
|
|
2
|
+
interface ToolCall {
|
|
3
|
+
name: string;
|
|
4
|
+
id: string;
|
|
5
|
+
args: unknown;
|
|
6
|
+
status?: 'isRunning' | 'done';
|
|
7
|
+
output?: string;
|
|
8
|
+
}
|
|
9
|
+
interface MessageDto {
|
|
10
|
+
id: string;
|
|
11
|
+
type: 'ai' | 'human';
|
|
12
|
+
content: string;
|
|
13
|
+
toolCalls?: ToolCall[];
|
|
14
|
+
reasoning?: string;
|
|
15
|
+
isComplete?: boolean;
|
|
16
|
+
isReasoning?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ListOracleMessagesResponse {
|
|
19
|
+
messages: MessageDto[];
|
|
20
|
+
}
|
|
21
|
+
export interface CleanAdditionalKwargs {
|
|
22
|
+
msgFromMatrixRoom: boolean;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
oracleName: string;
|
|
25
|
+
reasoning?: string;
|
|
26
|
+
reasoningDetails?: Array<{
|
|
27
|
+
type: string;
|
|
28
|
+
text: string;
|
|
29
|
+
}>;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
export declare function transformGraphStateMessageToListMessageResponse(messages: BaseMessage[]): ListOracleMessagesResponse;
|
|
33
|
+
export declare const uuidFromString: (str: string) => string;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=transformGraphStateMessageToListMessageResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformGraphStateMessageToListMessageResponse.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/transformGraphStateMessageToListMessageResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,0BAA0B,CAAC;AAIlC,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AACD,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,+CAA+C,CAC7D,QAAQ,EAAE,WAAW,EAAE,GACtB,0BAA0B,CAuD5B;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAO5C,CAAC"}
|