@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,41 @@
|
|
|
1
|
+
export var SessionManagerErrorCodes;
|
|
2
|
+
(function (SessionManagerErrorCodes) {
|
|
3
|
+
SessionManagerErrorCodes["NO_USER_ROOMS_FOUND"] = "NO_USER_ROOMS_FOUND";
|
|
4
|
+
SessionManagerErrorCodes["ROOM_NOT_FOUND"] = "ROOM_NOT_FOUND";
|
|
5
|
+
SessionManagerErrorCodes["USER_NOT_IN_ROOM"] = "USER_NOT_IN_ROOM";
|
|
6
|
+
})(SessionManagerErrorCodes || (SessionManagerErrorCodes = {}));
|
|
7
|
+
export class SessionManagerError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
constructor(message, code) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.code = code;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class NoUserRoomsFoundError extends SessionManagerError {
|
|
15
|
+
constructor(did) {
|
|
16
|
+
super(`No user rooms found for the given did ${did}`, SessionManagerErrorCodes.NO_USER_ROOMS_FOUND);
|
|
17
|
+
}
|
|
18
|
+
isNoUserRoomsFoundError(error) {
|
|
19
|
+
return (error instanceof NoUserRoomsFoundError &&
|
|
20
|
+
error.code === SessionManagerErrorCodes.NO_USER_ROOMS_FOUND);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class RoomNotFoundError extends SessionManagerError {
|
|
24
|
+
constructor(roomId) {
|
|
25
|
+
super(`Room ${roomId} not found`, SessionManagerErrorCodes.ROOM_NOT_FOUND);
|
|
26
|
+
}
|
|
27
|
+
isRoomNotFoundError(error) {
|
|
28
|
+
return (error instanceof RoomNotFoundError &&
|
|
29
|
+
error.code === SessionManagerErrorCodes.ROOM_NOT_FOUND);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export class UserNotInRoomError extends SessionManagerError {
|
|
33
|
+
constructor(did, roomId) {
|
|
34
|
+
super(`User ${did} not in room ${roomId}`, SessionManagerErrorCodes.USER_NOT_IN_ROOM);
|
|
35
|
+
}
|
|
36
|
+
isUserNotInRoomError(error) {
|
|
37
|
+
return (error instanceof UserNotInRoomError &&
|
|
38
|
+
error.code === SessionManagerErrorCodes.USER_NOT_IN_ROOM);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/services/session-manager/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,wBAIX;AAJD,WAAY,wBAAwB;IAClC,uEAA2C,CAAA;IAC3C,6DAAiC,CAAA;IACjC,iEAAqC,CAAA;AACvC,CAAC,EAJW,wBAAwB,KAAxB,wBAAwB,QAInC;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAG1B;IAFlB,YACE,OAAe,EACC,IAA8B;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,SAAI,GAAJ,IAAI,CAA0B;IAGhD,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,mBAAmB;IAC5D,YAAY,GAAW;QACrB,KAAK,CACH,yCAAyC,GAAG,EAAE,EAC9C,wBAAwB,CAAC,mBAAmB,CAC7C,CAAC;IACJ,CAAC;IACD,uBAAuB,CAAC,KAAc;QACpC,OAAO,CACL,KAAK,YAAY,qBAAqB;YACtC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,mBAAmB,CAC5D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IACxD,YAAY,MAAc;QACxB,KAAK,CAAC,QAAQ,MAAM,YAAY,EAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAC7E,CAAC;IACD,mBAAmB,CAAC,KAAc;QAChC,OAAO,CACL,KAAK,YAAY,iBAAiB;YAClC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,cAAc,CACvD,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;IACzD,YAAY,GAAW,EAAE,MAAc;QACrC,KAAK,CACH,QAAQ,GAAG,gBAAgB,MAAM,EAAE,EACnC,wBAAwB,CAAC,gBAAgB,CAC1C,CAAC;IACJ,CAAC;IACD,oBAAoB,CAAC,KAAc;QACjC,OAAO,CACL,KAAK,YAAY,kBAAkB;YACnC,KAAK,CAAC,IAAI,KAAK,wBAAwB,CAAC,gBAAgB,CACzD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/session-manager/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/session-manager/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { MatrixManager } from '@ixo/matrix';
|
|
2
|
+
import { Database } from 'better-sqlite3';
|
|
3
|
+
import { MemoryEngineService } from '../memory-engine/memory-engine.service.js';
|
|
4
|
+
import { type UserContextData } from '../memory-engine/types.js';
|
|
5
|
+
import { type ChatSession, type CreateChatSessionDto, type CreateChatSessionResponseDto, type DeleteChatSessionDto, type ListChatSessionsDto, type ListChatSessionsResponseDto } from './dto.js';
|
|
6
|
+
export interface IDatabaseSyncService {
|
|
7
|
+
getUserDatabase(userDid: string): Promise<Database>;
|
|
8
|
+
}
|
|
9
|
+
export declare class SessionManagerService {
|
|
10
|
+
private readonly syncService;
|
|
11
|
+
readonly matrixManger: MatrixManager;
|
|
12
|
+
private readonly memoryEngineService?;
|
|
13
|
+
constructor(syncService: IDatabaseSyncService, matrixManger?: MatrixManager, memoryEngineService?: MemoryEngineService | undefined);
|
|
14
|
+
getSessionsStateKey({ oracleEntityDid, }: {
|
|
15
|
+
oracleEntityDid: string;
|
|
16
|
+
}): `${string}_${string}`;
|
|
17
|
+
private createMessageTitle;
|
|
18
|
+
updateLastProcessedCount({ sessionId, did, lastProcessedCount, }: {
|
|
19
|
+
sessionId: string;
|
|
20
|
+
did: string;
|
|
21
|
+
lastProcessedCount: number;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
syncSessionSet({ sessionId, did, messages, oracleEntityDid, oracleName, roomId: _roomId, lastProcessedCount, oracleDid, userContext, slackThreadTs, }: {
|
|
24
|
+
sessionId: string;
|
|
25
|
+
did: string;
|
|
26
|
+
messages: string[];
|
|
27
|
+
oracleEntityDid: string;
|
|
28
|
+
oracleName: string;
|
|
29
|
+
roomId?: string;
|
|
30
|
+
lastProcessedCount?: number;
|
|
31
|
+
oracleDid: string;
|
|
32
|
+
userContext?: UserContextData;
|
|
33
|
+
slackThreadTs?: string;
|
|
34
|
+
}): Promise<ChatSession>;
|
|
35
|
+
getSession(sessionId: string, did: string, throwOnNotFound?: boolean): Promise<ChatSession | undefined>;
|
|
36
|
+
listSessions(listSessionsDto: ListChatSessionsDto): Promise<ListChatSessionsResponseDto>;
|
|
37
|
+
createSession(createSessionDto: CreateChatSessionDto): Promise<CreateChatSessionResponseDto>;
|
|
38
|
+
deleteSession(deleteSessionDto: DeleteChatSessionDto): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=session-manager.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.service.d.ts","sourceRoot":"","sources":["../../../src/services/session-manager/session-manager.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,4BAA4B,EACjC,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EACjC,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACrD;AAED,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,WAAW;aACZ,YAAY;IAC5B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAFpB,WAAW,EAAE,oBAAoB,EAClC,YAAY,gBAA8B,EACzC,mBAAmB,CAAC,EAAE,mBAAmB,YAAA;IAGrD,mBAAmB,CAAC,EACzB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,MAAM,CAAC;KACzB,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE;YAIX,kBAAkB;IAsEnB,wBAAwB,CAAC,EACpC,SAAS,EACT,GAAG,EACH,kBAAkB,GACnB,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,kBAAkB,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAQJ,cAAc,CAAC,EAC1B,SAAS,EACT,GAAG,EACH,QAAQ,EACR,eAAe,EACf,UAAU,EACV,MAAM,EAAE,OAAO,EACf,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,aAAa,GACd,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,eAAe,CAAC;QAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwFX,UAAU,CACrB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,eAAe,GAAE,OAAc,GAC9B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAuDtB,YAAY,CACvB,eAAe,EAAE,mBAAmB,GACnC,OAAO,CAAC,2BAA2B,CAAC;IAsD1B,aAAa,CACxB,gBAAgB,EAAE,oBAAoB,GACrC,OAAO,CAAC,4BAA4B,CAAC;IAgD3B,aAAa,CACxB,gBAAgB,EAAE,oBAAoB,GACrC,OAAO,CAAC,IAAI,CAAC;CAMjB"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { Logger } from '@ixo/logger';
|
|
2
|
+
import { MatrixManager } from '@ixo/matrix';
|
|
3
|
+
import { getMatrixHomeServerCroppedForDid } from '@ixo/oracles-chain-client';
|
|
4
|
+
import { getChatOpenAiModel } from '../../ai/index.js';
|
|
5
|
+
export class SessionManagerService {
|
|
6
|
+
syncService;
|
|
7
|
+
matrixManger;
|
|
8
|
+
memoryEngineService;
|
|
9
|
+
constructor(syncService, matrixManger = MatrixManager.getInstance(), memoryEngineService) {
|
|
10
|
+
this.syncService = syncService;
|
|
11
|
+
this.matrixManger = matrixManger;
|
|
12
|
+
this.memoryEngineService = memoryEngineService;
|
|
13
|
+
}
|
|
14
|
+
getSessionsStateKey({ oracleEntityDid, }) {
|
|
15
|
+
return `${oracleEntityDid}_sessions`;
|
|
16
|
+
}
|
|
17
|
+
async createMessageTitle({ messages, }) {
|
|
18
|
+
if (messages.length === 0) {
|
|
19
|
+
return 'Untitled';
|
|
20
|
+
}
|
|
21
|
+
const llm = getChatOpenAiModel({
|
|
22
|
+
model: 'meta-llama/llama-3.1-8b-instruct',
|
|
23
|
+
temperature: 0.3,
|
|
24
|
+
apiKey: process.env.OPEN_ROUTER_API_KEY,
|
|
25
|
+
timeout: 20 * 1000 * 60,
|
|
26
|
+
configuration: {
|
|
27
|
+
baseURL: 'https://openrouter.ai/api/v1',
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const response = await llm.invoke(`Based on this messages messages, Add a title for this convo and only based on the messages? MAKE SURE TO ONLY RESPOND WITH THE TITLE.
|
|
31
|
+
|
|
32
|
+
## RESPONSE FORMAT
|
|
33
|
+
ONLY RESPOND WITH THE TITLE not anything else that title will be saved to the store directly from your response so generated based on the messages.
|
|
34
|
+
|
|
35
|
+
EXample
|
|
36
|
+
|
|
37
|
+
Input:
|
|
38
|
+
<messages>
|
|
39
|
+
Hello, how are you?
|
|
40
|
+
I'm good, thank you!
|
|
41
|
+
did u see the new feature i added?
|
|
42
|
+
yes but i didn't like it
|
|
43
|
+
</messages>
|
|
44
|
+
|
|
45
|
+
Output:
|
|
46
|
+
Conversation about a new feature
|
|
47
|
+
|
|
48
|
+
___________________________________________________________
|
|
49
|
+
|
|
50
|
+
Input:
|
|
51
|
+
<messages>
|
|
52
|
+
What are the store opening hours?
|
|
53
|
+
We are open from 9am to 5pm, Monday to Friday.
|
|
54
|
+
</messages>
|
|
55
|
+
|
|
56
|
+
Output:
|
|
57
|
+
Store Opening Hours Information
|
|
58
|
+
___________________________________________________________
|
|
59
|
+
Input:
|
|
60
|
+
<messages>
|
|
61
|
+
Can you help me reset my password?
|
|
62
|
+
Sure, I can assist you with that.
|
|
63
|
+
</messages>
|
|
64
|
+
|
|
65
|
+
Output:
|
|
66
|
+
Password Reset Assistance
|
|
67
|
+
|
|
68
|
+
___________________________________________________________
|
|
69
|
+
# the out put should be only the title not anything else that title will be saved to the store directly from your response so generated based on the messages.
|
|
70
|
+
|
|
71
|
+
USER MESSAGES:
|
|
72
|
+
<messages>
|
|
73
|
+
${messages.join('\n\n')}
|
|
74
|
+
</messages>
|
|
75
|
+
`);
|
|
76
|
+
const title = response.content.toString();
|
|
77
|
+
return title;
|
|
78
|
+
}
|
|
79
|
+
async updateLastProcessedCount({ sessionId, did, lastProcessedCount, }) {
|
|
80
|
+
const db = await this.syncService.getUserDatabase(did);
|
|
81
|
+
db.prepare('UPDATE sessions SET last_processed_count = ? WHERE session_id = ?').run(lastProcessedCount, sessionId);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
async syncSessionSet({ sessionId, did, messages, oracleEntityDid, oracleName, roomId: _roomId, lastProcessedCount, oracleDid, userContext, slackThreadTs, }) {
|
|
85
|
+
const db = await this.syncService.getUserDatabase(did);
|
|
86
|
+
const selectedSession = await this.getSession(sessionId, did, false);
|
|
87
|
+
if (!selectedSession) {
|
|
88
|
+
const session = {
|
|
89
|
+
sessionId,
|
|
90
|
+
oracleName,
|
|
91
|
+
title: await this.createMessageTitle({
|
|
92
|
+
messages,
|
|
93
|
+
}),
|
|
94
|
+
lastUpdatedAt: new Date().toISOString(),
|
|
95
|
+
createdAt: new Date().toISOString(),
|
|
96
|
+
oracleEntityDid,
|
|
97
|
+
oracleDid,
|
|
98
|
+
userContext,
|
|
99
|
+
slackThreadTs,
|
|
100
|
+
};
|
|
101
|
+
db.prepare(`
|
|
102
|
+
INSERT INTO sessions (
|
|
103
|
+
session_id, title, last_updated_at, created_at, oracle_name,
|
|
104
|
+
oracle_did, oracle_entity_did, last_processed_count,
|
|
105
|
+
user_context, room_id, slack_thread_ts
|
|
106
|
+
)
|
|
107
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
108
|
+
`).run(session.sessionId, session.title ?? null, session.lastUpdatedAt, session.createdAt, session.oracleName, session.oracleDid, session.oracleEntityDid, session.lastProcessedCount ?? null, session.userContext ? JSON.stringify(session.userContext) : null, session.roomId ?? null, session.slackThreadTs ?? null);
|
|
109
|
+
return session;
|
|
110
|
+
}
|
|
111
|
+
const hasEnoughMessages = messages.length >= 2;
|
|
112
|
+
const needsTitleUpdate = !selectedSession.title ||
|
|
113
|
+
selectedSession.title.toLowerCase() === 'untitled' ||
|
|
114
|
+
(selectedSession.title && selectedSession.title.trim() === '');
|
|
115
|
+
const allowTitleUpdate = hasEnoughMessages && needsTitleUpdate;
|
|
116
|
+
const title = allowTitleUpdate
|
|
117
|
+
? await this.createMessageTitle({
|
|
118
|
+
messages,
|
|
119
|
+
})
|
|
120
|
+
: selectedSession.title;
|
|
121
|
+
const lastUpdatedAt = new Date().toISOString();
|
|
122
|
+
const updatedSession = {
|
|
123
|
+
...selectedSession,
|
|
124
|
+
title,
|
|
125
|
+
lastUpdatedAt,
|
|
126
|
+
lastProcessedCount,
|
|
127
|
+
slackThreadTs,
|
|
128
|
+
};
|
|
129
|
+
db.prepare(`
|
|
130
|
+
UPDATE sessions
|
|
131
|
+
SET title = ?, last_updated_at = ?, last_processed_count = ?, slack_thread_ts = ?
|
|
132
|
+
WHERE session_id = ?
|
|
133
|
+
`).run(updatedSession.title ?? null, lastUpdatedAt, updatedSession.lastProcessedCount ?? null, updatedSession.slackThreadTs ?? null, sessionId);
|
|
134
|
+
return updatedSession;
|
|
135
|
+
}
|
|
136
|
+
async getSession(sessionId, did, throwOnNotFound = true) {
|
|
137
|
+
const db = await this.syncService.getUserDatabase(did);
|
|
138
|
+
const row = db
|
|
139
|
+
.prepare(`SELECT
|
|
140
|
+
session_id, title, last_updated_at, created_at, oracle_name,
|
|
141
|
+
oracle_did, oracle_entity_did, last_processed_count,
|
|
142
|
+
user_context, room_id, slack_thread_ts
|
|
143
|
+
FROM sessions
|
|
144
|
+
WHERE session_id = ?`)
|
|
145
|
+
.get(sessionId);
|
|
146
|
+
const selectedSession = row
|
|
147
|
+
? {
|
|
148
|
+
sessionId: row.session_id,
|
|
149
|
+
title: row.title ?? undefined,
|
|
150
|
+
lastUpdatedAt: row.last_updated_at,
|
|
151
|
+
createdAt: row.created_at,
|
|
152
|
+
oracleName: row.oracle_name,
|
|
153
|
+
oracleDid: row.oracle_did,
|
|
154
|
+
oracleEntityDid: row.oracle_entity_did,
|
|
155
|
+
lastProcessedCount: row.last_processed_count ?? undefined,
|
|
156
|
+
userContext: row.user_context
|
|
157
|
+
? JSON.parse(row.user_context)
|
|
158
|
+
: undefined,
|
|
159
|
+
roomId: row.room_id ?? undefined,
|
|
160
|
+
slackThreadTs: row.slack_thread_ts ?? undefined,
|
|
161
|
+
}
|
|
162
|
+
: undefined;
|
|
163
|
+
if (!selectedSession) {
|
|
164
|
+
if (throwOnNotFound) {
|
|
165
|
+
throw new Error('Session not found');
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
return selectedSession;
|
|
170
|
+
}
|
|
171
|
+
async listSessions(listSessionsDto) {
|
|
172
|
+
const db = await this.syncService.getUserDatabase(listSessionsDto.did);
|
|
173
|
+
const limit = listSessionsDto.limit ?? 20;
|
|
174
|
+
const offset = listSessionsDto.offset ?? 0;
|
|
175
|
+
const rows = db
|
|
176
|
+
.prepare(`SELECT
|
|
177
|
+
session_id, title, last_updated_at, created_at, oracle_name,
|
|
178
|
+
oracle_did, oracle_entity_did, last_processed_count,
|
|
179
|
+
user_context, room_id, slack_thread_ts,
|
|
180
|
+
COUNT(*) OVER() as total
|
|
181
|
+
FROM sessions
|
|
182
|
+
ORDER BY last_updated_at DESC
|
|
183
|
+
LIMIT ? OFFSET ?`)
|
|
184
|
+
.all(limit, offset);
|
|
185
|
+
const total = rows[0]?.total ?? 0;
|
|
186
|
+
const sessions = rows.map((row) => ({
|
|
187
|
+
sessionId: row.session_id,
|
|
188
|
+
title: row.title ?? undefined,
|
|
189
|
+
lastUpdatedAt: row.last_updated_at,
|
|
190
|
+
createdAt: row.created_at,
|
|
191
|
+
oracleName: row.oracle_name,
|
|
192
|
+
oracleDid: row.oracle_did,
|
|
193
|
+
oracleEntityDid: row.oracle_entity_did,
|
|
194
|
+
lastProcessedCount: row.last_processed_count ?? undefined,
|
|
195
|
+
userContext: row.user_context
|
|
196
|
+
? JSON.parse(row.user_context)
|
|
197
|
+
: undefined,
|
|
198
|
+
roomId: row.room_id ?? undefined,
|
|
199
|
+
slackThreadTs: row.slack_thread_ts ?? undefined,
|
|
200
|
+
}));
|
|
201
|
+
return { sessions, total };
|
|
202
|
+
}
|
|
203
|
+
async createSession(createSessionDto) {
|
|
204
|
+
const userHomeServer = createSessionDto.homeServer || await getMatrixHomeServerCroppedForDid(createSessionDto.did);
|
|
205
|
+
const { roomId } = await this.matrixManger.getOracleRoomIdWithHomeServer({
|
|
206
|
+
userDid: createSessionDto.did,
|
|
207
|
+
oracleEntityDid: createSessionDto.oracleEntityDid,
|
|
208
|
+
userHomeServer,
|
|
209
|
+
});
|
|
210
|
+
if (!roomId) {
|
|
211
|
+
throw new Error('Room ID not found');
|
|
212
|
+
}
|
|
213
|
+
const eventId = await this.matrixManger.sendMessage({
|
|
214
|
+
message: 'New Conversation Started',
|
|
215
|
+
roomId,
|
|
216
|
+
isOracleAdmin: true,
|
|
217
|
+
});
|
|
218
|
+
let userContext;
|
|
219
|
+
if (this.memoryEngineService) {
|
|
220
|
+
try {
|
|
221
|
+
Logger.debug('Gathering user context from Memory Engine');
|
|
222
|
+
userContext = await this.memoryEngineService.gatherUserContext({
|
|
223
|
+
oracleDid: createSessionDto.oracleDid,
|
|
224
|
+
userDid: createSessionDto.did,
|
|
225
|
+
roomId,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
Logger.error('Failed to gather user context:', error);
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const session = await this.syncSessionSet({
|
|
234
|
+
sessionId: eventId,
|
|
235
|
+
oracleName: createSessionDto.oracleName,
|
|
236
|
+
did: createSessionDto.did,
|
|
237
|
+
oracleEntityDid: createSessionDto.oracleEntityDid,
|
|
238
|
+
oracleDid: createSessionDto.oracleDid,
|
|
239
|
+
messages: [],
|
|
240
|
+
roomId,
|
|
241
|
+
userContext,
|
|
242
|
+
slackThreadTs: createSessionDto.slackThreadTs,
|
|
243
|
+
});
|
|
244
|
+
return session;
|
|
245
|
+
}
|
|
246
|
+
async deleteSession(deleteSessionDto) {
|
|
247
|
+
const db = await this.syncService.getUserDatabase(deleteSessionDto.did);
|
|
248
|
+
db.prepare('DELETE FROM sessions WHERE session_id = ?').run(deleteSessionDto.sessionId);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=session-manager.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.service.js","sourceRoot":"","sources":["../../../src/services/session-manager/session-manager.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const getSubscriptionUrlByNetwork: (network: "mainnet" | "testnet" | "devnet") => string;
|
|
2
|
+
export interface ClaimCollectionsDto {
|
|
3
|
+
oracleClaimsCollectionId?: string;
|
|
4
|
+
subscriptionClaimsCollectionId?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface GetMySubscriptionsResponseDto {
|
|
7
|
+
claimCollections: ClaimCollectionsDto;
|
|
8
|
+
currentPlan: string;
|
|
9
|
+
currentPlanName: string;
|
|
10
|
+
totalCredits: number;
|
|
11
|
+
planCredits: number;
|
|
12
|
+
status: 'active' | 'inactive' | 'processing' | 'trial';
|
|
13
|
+
adminAddress: string;
|
|
14
|
+
}
|
|
15
|
+
export interface GetUserSubscriptionParams {
|
|
16
|
+
network: 'mainnet' | 'testnet' | 'devnet';
|
|
17
|
+
bearerToken: string;
|
|
18
|
+
subscriptionUrl?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const getUserSubscription: ({ bearerToken, network, subscriptionUrl: _subscriptionUrl, }: GetUserSubscriptionParams) => Promise<GetMySubscriptionsResponseDto | null>;
|
|
21
|
+
//# sourceMappingURL=get-user-subscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-user-subscription.d.ts","sourceRoot":"","sources":["../../src/utils/get-user-subscription.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,GACtC,SAAS,SAAS,GAAG,SAAS,GAAG,QAAQ,WAO1C,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,6BAA6B;IAC5C,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC;IACvD,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,mBAAmB,GAAU,8DAIvC,yBAAyB,KAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAyC1E,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Logger } from '@ixo/logger';
|
|
2
|
+
export const getSubscriptionUrlByNetwork = (network) => {
|
|
3
|
+
return {
|
|
4
|
+
mainnet: 'https://subscriptions-api-mainnet.ixo-api.workers.dev',
|
|
5
|
+
testnet: 'https://subscriptions-api-testnet.ixo-api.workers.dev',
|
|
6
|
+
devnet: 'https://subscriptions-api.ixo-api.workers.dev',
|
|
7
|
+
}[network];
|
|
8
|
+
};
|
|
9
|
+
export const getUserSubscription = async ({ bearerToken, network, subscriptionUrl: _subscriptionUrl, }) => {
|
|
10
|
+
const subscriptionUrl = _subscriptionUrl ?? getSubscriptionUrlByNetwork(network);
|
|
11
|
+
try {
|
|
12
|
+
Logger.debug('Fetching user subscription from:', subscriptionUrl);
|
|
13
|
+
const response = await fetch(`${subscriptionUrl.endsWith('/') ? subscriptionUrl.slice(0, -1) : subscriptionUrl}/api/v1/subscriptions`, {
|
|
14
|
+
method: 'GET',
|
|
15
|
+
headers: {
|
|
16
|
+
Authorization: `Bearer ${bearerToken}`,
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
console.error(`Failed to fetch user subscription: ${response.status} ${response.statusText}`);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const data = await response.json();
|
|
25
|
+
if (!data) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const subscription = data;
|
|
29
|
+
return {
|
|
30
|
+
claimCollections: subscription.claimCollections,
|
|
31
|
+
currentPlan: subscription.currentPlan,
|
|
32
|
+
currentPlanName: subscription.currentPlanName,
|
|
33
|
+
totalCredits: subscription.totalCredits,
|
|
34
|
+
planCredits: subscription.planCredits,
|
|
35
|
+
status: subscription.status,
|
|
36
|
+
adminAddress: subscription.adminAddress,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('Error fetching user subscription:', error);
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=get-user-subscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-user-subscription.js","sourceRoot":"","sources":["../../src/utils/get-user-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAyC,EACzC,EAAE;IACF,OAAO;QACL,OAAO,EAAE,uDAAuD;QAChE,OAAO,EAAE,uDAAuD;QAChE,MAAM,EAAE,+CAA+C;KACxD,CAAC,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AA4BF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,EACxC,WAAW,EACX,OAAO,EACP,eAAe,EAAE,gBAAgB,GACP,EAAiD,EAAE;IAC7E,MAAM,eAAe,GACnB,gBAAgB,IAAI,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,eAAe,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,uBAAuB,EACxG;YACE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CACX,sCAAsC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC/E,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,IAAmC,CAAC;QACzD,OAAO;YACL,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;YAC/C,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,YAAY,EAAE,YAAY,CAAC,YAAY;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# AI Module Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The AI module in `@ixo/common` provides a suite of AI-powered tools and utilities designed to extend the capabilities of ixo oracles. It integrates with OpenAI and LangChain for language model interactions, document processing, semantic routing, and includes various utility functions.
|
|
6
|
+
|
|
7
|
+
## Components
|
|
8
|
+
|
|
9
|
+
### 1. Checkpointing
|
|
10
|
+
|
|
11
|
+
The checkpointing system enables persistence of LangChain graph states using SQLite. Optionally, you can also integrate with Matrix-based checkpointing by importing from `@ixo/matrix`.
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { SqliteSaver } from '@ixo/common/ai';
|
|
15
|
+
|
|
16
|
+
const checkpointer = new SqliteSaver('./checkpoints');
|
|
17
|
+
const graph = workflow.compile({
|
|
18
|
+
checkpointer,
|
|
19
|
+
});
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 2. Nodes
|
|
23
|
+
|
|
24
|
+
#### Find Docs Node
|
|
25
|
+
|
|
26
|
+
this node to be used to find the most relevant documents from a vector database with langgraph
|
|
27
|
+
|
|
28
|
+
#### Fake Node
|
|
29
|
+
|
|
30
|
+
this node is a fake node to pass the state to the next node
|
|
31
|
+
|
|
32
|
+
### 3. Semantic Routing
|
|
33
|
+
|
|
34
|
+
The semantic router creates intelligent routing based on content analysis using OpenAI:
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { createSemanticRouter } from '@ixo/common/ai';
|
|
38
|
+
|
|
39
|
+
const routes = {
|
|
40
|
+
generateBlog: 'if the intent is blog',
|
|
41
|
+
generateSocialMediaPost: 'if the intent is post',
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const router = createSemanticRouter(routes, ['intent'], 'gpt-4o-mini');
|
|
45
|
+
|
|
46
|
+
// Use the router
|
|
47
|
+
const nextRoute = await router({
|
|
48
|
+
intent: 'Create a blog post about AI',
|
|
49
|
+
});
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Features:
|
|
53
|
+
|
|
54
|
+
- Type-safe route creation and validation
|
|
55
|
+
- Supports 'gpt-4o-mini' and 'gpt-4o' models
|
|
56
|
+
- Handles complex routing scenarios
|
|
57
|
+
- Integrated with LangSmith for tracing
|
|
58
|
+
|
|
59
|
+
### 4. OpenAI Integration
|
|
60
|
+
|
|
61
|
+
The module provides convenient OpenAI model factories:
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
import {
|
|
65
|
+
getChatOpenAiModel,
|
|
66
|
+
getOpenAiEmbeddings,
|
|
67
|
+
getOpenAiClient,
|
|
68
|
+
} from '@ixo/common/ai/models';
|
|
69
|
+
|
|
70
|
+
// Get a ChatOpenAI instance
|
|
71
|
+
const chatModel = getChatOpenAiModel();
|
|
72
|
+
|
|
73
|
+
// Get embeddings model
|
|
74
|
+
const embeddings = getOpenAiEmbeddings({
|
|
75
|
+
model: 'text-embedding-3-small',
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// Get raw OpenAI client
|
|
79
|
+
const openai = getOpenAiClient();
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 5. Tools & Utilities
|
|
83
|
+
|
|
84
|
+
For detailed documentation on available tools, please refer to the [Tools Documentation](./tools.md).
|