@ixo/common 1.1.0 → 1.1.2
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +0 -6
- package/README.md +1 -6
- package/dist/ai/nodes/generic-chat/generic-chat.node.d.ts +4 -4
- package/dist/ai/nodes/generic-chat/generic-chat.node.d.ts.map +1 -1
- package/dist/ai/nodes/generic-chat/generic-chat.node.js +1 -1
- package/dist/ai/nodes/generic-chat/generic-chat.node.js.map +1 -1
- package/dist/ai/semantic-router-factory/create-semantic-router.d.ts +2 -2
- package/dist/ai/semantic-router-factory/create-semantic-router.d.ts.map +1 -1
- package/dist/ai/semantic-router-factory/create-semantic-router.js.map +1 -1
- package/dist/ai/tools/action-caller.d.ts +3 -3
- package/dist/ai/tools/action-caller.d.ts.map +1 -1
- package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.d.ts.map +1 -1
- package/dist/ai/tools/ask-ixo-guru/ask-ixo-guru.js.map +1 -1
- package/dist/ai/tools/browser-tool-caller.d.ts +3 -3
- package/dist/ai/tools/browser-tool-caller.d.ts.map +1 -1
- package/dist/ai/tools/frontend-tool-caller.d.ts +2 -2
- package/dist/ai/tools/frontend-tool-caller.d.ts.map +1 -1
- package/dist/ai/tools/frontend-tool-caller.js +2 -1
- package/dist/ai/tools/frontend-tool-caller.js.map +1 -1
- package/dist/ai/tools/log-action-to-matrix.d.ts +2 -2
- package/dist/ai/tools/log-action-to-matrix.d.ts.map +1 -1
- package/dist/ai/tools/log-action-to-matrix.js.map +1 -1
- package/dist/ai/tools/parser-action-tool.d.ts +2 -2
- package/dist/ai/tools/parser-action-tool.d.ts.map +1 -1
- package/dist/ai/tools/parser-action-tool.js +5 -5
- package/dist/ai/tools/parser-action-tool.js.map +1 -1
- package/dist/ai/tools/parser-browser-tool.d.ts +2 -2
- package/dist/ai/tools/parser-browser-tool.d.ts.map +1 -1
- package/dist/ai/tools/parser-browser-tool.js +1 -1
- package/dist/ai/tools/parser-browser-tool.js.map +1 -1
- package/dist/ai/tools/scrape-web-page.d.ts +1 -1
- package/dist/ai/tools/scrape-web-page.d.ts.map +1 -1
- package/dist/ai/utils/doc-splitter.js.map +1 -1
- package/dist/ai/utils/generate-questions-from-chunks.d.ts +1 -1
- package/dist/ai/utils/generate-questions-from-chunks.d.ts.map +1 -1
- package/dist/ai/utils/json-to-yaml.js.map +1 -1
- package/dist/ai/utils/load-file.js +1 -1
- package/dist/ai/utils/load-file.js.map +1 -1
- package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.d.ts.map +1 -1
- package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js +5 -3
- package/dist/ai/utils/transformGraphStateMessageToListMessageResponse.js.map +1 -1
- package/dist/ai/utils/verify-matrix-openId-token.d.ts.map +1 -1
- package/dist/ai/utils/verify-matrix-openId-token.js +2 -2
- package/dist/ai/utils/verify-matrix-openId-token.js.map +1 -1
- package/dist/services/env/env.service.d.ts.map +1 -1
- package/dist/services/env/env.service.js.map +1 -1
- package/dist/services/session-manager/session-manager.service.d.ts +2 -2
- package/dist/services/session-manager/session-manager.service.d.ts.map +1 -1
- package/dist/services/session-manager/session-manager.service.js +3 -2
- package/dist/services/session-manager/session-manager.service.js.map +1 -1
- package/package.json +7 -11
- package/src/ai/index.ts +1 -1
- package/src/ai/models/openai.test.ts +7 -8
- package/src/ai/nodes/generic-chat/generic-chat.node.ts +7 -4
- package/src/ai/nodes/generic-chat/index.ts +1 -1
- package/src/ai/nodes/index.ts +1 -1
- package/src/ai/semantic-router-factory/create-semantic-router.test.ts +8 -5
- package/src/ai/semantic-router-factory/create-semantic-router.ts +8 -5
- package/src/ai/tools/action-caller.ts +3 -3
- package/src/ai/tools/ask-ixo-guru/ask-ixo-guru.ts +6 -4
- package/src/ai/tools/browser-tool-caller.ts +3 -3
- package/src/ai/tools/frontend-tool-caller.ts +11 -6
- package/src/ai/tools/log-action-to-matrix.ts +2 -3
- package/src/ai/tools/parser-action-tool.ts +8 -8
- package/src/ai/tools/parser-browser-tool.ts +4 -4
- package/src/ai/tools/retriever-tool/retriever-tool.test.ts +30 -23
- package/src/ai/tools/scrape-web-page.ts +1 -1
- package/src/ai/utils/__tests__/doc-relevance-checker.test.ts +5 -3
- package/src/ai/utils/__tests__/json-to-yaml.test.ts +1 -1
- package/src/ai/utils/doc-splitter.ts +1 -1
- package/src/ai/utils/generate-questions-from-chunks.ts +1 -1
- package/src/ai/utils/json-to-yaml.ts +1 -1
- package/src/ai/utils/load-file.ts +1 -1
- package/src/ai/utils/transformGraphStateMessageToListMessageResponse.ts +8 -4
- package/src/ai/utils/verify-matrix-openId-token.ts +9 -6
- package/src/services/env/env-service.test.ts +1 -1
- package/src/services/env/env.service.ts +0 -1
- package/src/services/session-manager/session-manager.service.ts +6 -4
- package/src/utils/index.ts +1 -1
- package/tsconfig.json +8 -2
- package/tsconfig.tsbuildinfo +1 -1
- package/vitest.config.ts +2 -0
- package/.eslintrc.js +0 -9
- package/.prettierignore +0 -3
- package/.prettierrc.cjs +0 -4
- package/dist/ai/models/openai.test.d.ts +0 -2
- package/dist/ai/models/openai.test.d.ts.map +0 -1
- package/dist/ai/models/openai.test.js +0 -58
- package/dist/ai/models/openai.test.js.map +0 -1
- package/dist/ai/semantic-router-factory/create-semantic-router.test.d.ts +0 -2
- package/dist/ai/semantic-router-factory/create-semantic-router.test.d.ts.map +0 -1
- package/dist/ai/semantic-router-factory/create-semantic-router.test.js +0 -68
- package/dist/ai/semantic-router-factory/create-semantic-router.test.js.map +0 -1
- package/dist/ai/tools/retriever-tool/retriever-tool.test.d.ts +0 -2
- package/dist/ai/tools/retriever-tool/retriever-tool.test.d.ts.map +0 -1
- package/dist/ai/tools/retriever-tool/retriever-tool.test.js +0 -119
- package/dist/ai/tools/retriever-tool/retriever-tool.test.js.map +0 -1
- package/dist/ai/utils/__tests__/chunk-arr.test.d.ts +0 -2
- package/dist/ai/utils/__tests__/chunk-arr.test.d.ts.map +0 -1
- package/dist/ai/utils/__tests__/chunk-arr.test.js +0 -37
- package/dist/ai/utils/__tests__/chunk-arr.test.js.map +0 -1
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.d.ts +0 -2
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.d.ts.map +0 -1
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.js +0 -80
- package/dist/ai/utils/__tests__/doc-relevance-checker.test.js.map +0 -1
- package/dist/ai/utils/__tests__/doc-splitter.test.d.ts +0 -2
- package/dist/ai/utils/__tests__/doc-splitter.test.d.ts.map +0 -1
- package/dist/ai/utils/__tests__/doc-splitter.test.js +0 -35
- package/dist/ai/utils/__tests__/doc-splitter.test.js.map +0 -1
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.d.ts +0 -2
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.d.ts.map +0 -1
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.js +0 -47
- package/dist/ai/utils/__tests__/filter-similarity-search-results.test.js.map +0 -1
- package/dist/ai/utils/__tests__/json-to-yaml.test.d.ts +0 -2
- package/dist/ai/utils/__tests__/json-to-yaml.test.d.ts.map +0 -1
- package/dist/ai/utils/__tests__/json-to-yaml.test.js +0 -63
- package/dist/ai/utils/__tests__/json-to-yaml.test.js.map +0 -1
- package/dist/ai/utils/__tests__/stringify-docs.test.d.ts +0 -2
- package/dist/ai/utils/__tests__/stringify-docs.test.d.ts.map +0 -1
- package/dist/ai/utils/__tests__/stringify-docs.test.js +0 -54
- package/dist/ai/utils/__tests__/stringify-docs.test.js.map +0 -1
- package/dist/services/env/env-service.test.d.ts +0 -2
- package/dist/services/env/env-service.test.d.ts.map +0 -1
- package/dist/services/env/env-service.test.js +0 -99
- package/dist/services/env/env-service.test.js.map +0 -1
- package/jest.config.js +0 -6
|
@@ -1 +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;
|
|
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,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AACrF,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;IAkD3B,aAAa,CACxB,gBAAgB,EAAE,oBAAoB,GACrC,OAAO,CAAC,IAAI,CAAC;CAMjB"}
|
|
@@ -73,7 +73,7 @@ ___________________________________________________________
|
|
|
73
73
|
${messages.join('\n\n')}
|
|
74
74
|
</messages>
|
|
75
75
|
`);
|
|
76
|
-
const title = response.content
|
|
76
|
+
const title = String(response.content);
|
|
77
77
|
return title;
|
|
78
78
|
}
|
|
79
79
|
async updateLastProcessedCount({ sessionId, did, lastProcessedCount, }) {
|
|
@@ -201,7 +201,8 @@ ___________________________________________________________
|
|
|
201
201
|
return { sessions, total };
|
|
202
202
|
}
|
|
203
203
|
async createSession(createSessionDto) {
|
|
204
|
-
const userHomeServer = createSessionDto.homeServer ||
|
|
204
|
+
const userHomeServer = createSessionDto.homeServer ||
|
|
205
|
+
(await getMatrixHomeServerCroppedForDid(createSessionDto.did));
|
|
205
206
|
const { roomId } = await this.matrixManger.getOracleRoomIdWithHomeServer({
|
|
206
207
|
userDid: createSessionDto.did,
|
|
207
208
|
oracleEntityDid: createSessionDto.oracleEntityDid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.service.js","sourceRoot":"","sources":["../../../src/services/session-manager/session-manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAgBvD,MAAM,OAAO,qBAAqB;IAEb;IACD;IACC;IAHnB,YACmB,WAAiC,EAClC,eAAe,aAAa,CAAC,WAAW,EAAE,EACzC,mBAAyC;QAFzC,gBAAW,GAAX,WAAW,CAAsB;QAClC,iBAAY,GAAZ,YAAY,CAA8B;QACzC,wBAAmB,GAAnB,mBAAmB,CAAsB;IACzD,CAAC;IAEG,mBAAmB,CAAC,EACzB,eAAe,GAGhB;QACC,OAAO,GAAG,eAAe,WAAW,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,EAC/B,QAAQ,GAGT;QACC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,MAAM,GAAG,GAAG,kBAAkB,CAAC;YAC7B,KAAK,EAAE,kCAAkC;YACzC,WAAW,EAAE,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;YACvC,OAAO,EAAE,EAAE,GAAG,IAAI,GAAG,EAAE;YACvB,aAAa,EAAE;gBACb,OAAO,EAAE,8BAA8B;aACxC;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,CAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2CE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;;OAEtB,CACF,CAAC;QAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"session-manager.service.js","sourceRoot":"","sources":["../../../src/services/session-manager/session-manager.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ixo/common",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -24,23 +24,19 @@
|
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@jest/types": "^29.6.3",
|
|
28
27
|
"@langchain/langgraph-checkpoint-validation": "^1.0.0",
|
|
29
28
|
"@testcontainers/postgresql": "^10.16.0",
|
|
30
29
|
"@types/better-sqlite3": "^7.6.13",
|
|
31
|
-
"@types/jest": "^29.5.14",
|
|
32
30
|
"@types/node": "^22.7.3",
|
|
33
31
|
"@types/store": "^2.0.5",
|
|
34
32
|
"better-sqlite3": "^12.4.6",
|
|
35
|
-
"jest": "^29.7.0",
|
|
36
33
|
"testcontainers": "^10.16.0",
|
|
37
|
-
"ts-jest": "^29.2.5",
|
|
38
34
|
"typescript": "^5.3.3",
|
|
39
|
-
"@ixo/eslint-config": "1.0.0",
|
|
40
35
|
"@ixo/data-store": "^1.0.1",
|
|
41
|
-
"@ixo/
|
|
36
|
+
"@ixo/eslint-config": "2.0.0",
|
|
37
|
+
"@ixo/oracles-events": "^1.0.3",
|
|
42
38
|
"@ixo/typescript-config": "1.0.0",
|
|
43
|
-
"@ixo/
|
|
39
|
+
"@ixo/vitest-config": "1.0.0"
|
|
44
40
|
},
|
|
45
41
|
"dependencies": {
|
|
46
42
|
"@cosmjs/proto-signing": "^0.33.0",
|
|
@@ -71,11 +67,11 @@
|
|
|
71
67
|
"store": "^2.0.12",
|
|
72
68
|
"zod": "^4.1.12",
|
|
73
69
|
"@ixo/logger": "0.0.2",
|
|
74
|
-
"@ixo/
|
|
75
|
-
"@ixo/
|
|
70
|
+
"@ixo/oracles-chain-client": "1.2.0",
|
|
71
|
+
"@ixo/matrix": "1.2.2"
|
|
76
72
|
},
|
|
77
73
|
"scripts": {
|
|
78
74
|
"build": "tsc && tsc-alias",
|
|
79
|
-
"test": "
|
|
75
|
+
"test": "vitest run"
|
|
80
76
|
}
|
|
81
77
|
}
|
package/src/ai/index.ts
CHANGED
|
@@ -6,7 +6,7 @@ const originalEnv = process.env;
|
|
|
6
6
|
|
|
7
7
|
describe('OpenAI Models', () => {
|
|
8
8
|
beforeEach(() => {
|
|
9
|
-
|
|
9
|
+
vi.resetModules();
|
|
10
10
|
process.env = { ...originalEnv };
|
|
11
11
|
process.env.OPENAI_API_KEY = 'test-api-key';
|
|
12
12
|
});
|
|
@@ -21,8 +21,7 @@ describe('OpenAI Models', () => {
|
|
|
21
21
|
|
|
22
22
|
expect(model).toBeInstanceOf(ChatOpenAI);
|
|
23
23
|
expect(model).toHaveProperty('temperature', 0.2);
|
|
24
|
-
expect(model).toHaveProperty('
|
|
25
|
-
expect(model).toHaveProperty('apiKey', 'test-api-key');
|
|
24
|
+
expect(model).toHaveProperty('model', 'gpt-4o-mini');
|
|
26
25
|
});
|
|
27
26
|
|
|
28
27
|
it('should override default parameters when provided', () => {
|
|
@@ -36,8 +35,7 @@ describe('OpenAI Models', () => {
|
|
|
36
35
|
|
|
37
36
|
expect(model).toBeInstanceOf(ChatOpenAI);
|
|
38
37
|
expect(model).toHaveProperty('temperature', 0.8);
|
|
39
|
-
expect(model).toHaveProperty('
|
|
40
|
-
expect(model).toHaveProperty('apiKey', 'custom-api-key');
|
|
38
|
+
expect(model).toHaveProperty('model', 'gpt-4');
|
|
41
39
|
});
|
|
42
40
|
});
|
|
43
41
|
|
|
@@ -62,11 +60,12 @@ describe('OpenAI Models', () => {
|
|
|
62
60
|
});
|
|
63
61
|
|
|
64
62
|
describe('Error handling', () => {
|
|
65
|
-
it('should
|
|
63
|
+
it('should still create model when OPENAI_API_KEY is not set (validation deferred to call)', () => {
|
|
66
64
|
delete process.env.OPENAI_API_KEY;
|
|
67
65
|
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
// Newer @langchain/openai defers API key validation to invocation time
|
|
67
|
+
const model = getChatOpenAiModel();
|
|
68
|
+
expect(model).toBeInstanceOf(ChatOpenAI);
|
|
70
69
|
});
|
|
71
70
|
});
|
|
72
71
|
});
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { Logger } from '@ixo/logger';
|
|
2
|
-
import { BaseMessage } from '@langchain/core/messages';
|
|
2
|
+
import { type BaseMessage } from '@langchain/core/messages';
|
|
3
3
|
import {
|
|
4
4
|
ChatPromptTemplate,
|
|
5
5
|
MessagesPlaceholder,
|
|
6
6
|
} from '@langchain/core/prompts';
|
|
7
|
-
import { RunnableConfig } from '@langchain/core/runnables';
|
|
8
|
-
import { StructuredTool, Tool } from '@langchain/core/tools';
|
|
7
|
+
import { type RunnableConfig } from '@langchain/core/runnables';
|
|
8
|
+
import { type StructuredTool, type Tool } from '@langchain/core/tools';
|
|
9
9
|
import { getChatOpenAiModel } from 'src/ai/models/openai.js';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
GENERIC_CHAT_PROMPT,
|
|
12
|
+
type InputVariables,
|
|
13
|
+
} from './generic-chat.prompt.js';
|
|
11
14
|
|
|
12
15
|
type StateWithMessages<S extends object> = {
|
|
13
16
|
messages: BaseMessage[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './generic-chat.node.js';
|
|
1
|
+
export * from './generic-chat.node.js';
|
package/src/ai/nodes/index.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { createSemanticRouter } from './create-semantic-router.js';
|
|
2
2
|
|
|
3
|
-
const parse =
|
|
4
|
-
const create =
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
const parse = vi.fn();
|
|
4
|
+
const create = vi.fn();
|
|
5
|
+
vi.mock('langfuse', () => ({
|
|
6
|
+
observeOpenAI: vi.fn((client: unknown) => client),
|
|
7
|
+
}));
|
|
8
|
+
vi.mock('openai', () => ({
|
|
9
|
+
OpenAI: vi.fn().mockImplementation(() => {
|
|
7
10
|
function fn(): unknown {
|
|
8
11
|
return {};
|
|
9
12
|
}
|
|
@@ -15,7 +18,7 @@ jest.mock('openai', () => ({
|
|
|
15
18
|
};
|
|
16
19
|
|
|
17
20
|
fn.chat = {
|
|
18
|
-
completions: { create },
|
|
21
|
+
completions: { create, parse },
|
|
19
22
|
};
|
|
20
23
|
return fn;
|
|
21
24
|
}),
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { Logger } from '@ixo/logger';
|
|
2
2
|
import { PromptTemplate } from '@langchain/core/prompts';
|
|
3
|
-
import { LangfuseConfig, observeOpenAI } from 'langfuse';
|
|
3
|
+
import { type LangfuseConfig, observeOpenAI } from 'langfuse';
|
|
4
4
|
import { OpenAI } from 'openai';
|
|
5
5
|
import { zodResponseFormat } from 'openai/helpers/zod';
|
|
6
|
-
import
|
|
6
|
+
import z from 'zod';
|
|
7
7
|
import { type EnsureKeys } from '../types.js';
|
|
8
8
|
import { jsonToYaml } from '../utils/index.js';
|
|
9
9
|
import { semanticRouterPrompt } from './semantic-router-prompt.js';
|
|
10
10
|
import { validateRoutes } from './validate-routes.js';
|
|
11
|
-
import { APIPromise } from 'openai/index.js';
|
|
12
|
-
import { ParsedChatCompletion } from 'openai/resources/chat/completions.mjs';
|
|
11
|
+
import { type APIPromise } from 'openai/index.js';
|
|
12
|
+
import { type ParsedChatCompletion } from 'openai/resources/chat/completions.mjs';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Creates a semantic router that resolves the path based on the given routes and basedOn value.
|
|
@@ -45,7 +45,10 @@ export const createSemanticRouter = <
|
|
|
45
45
|
) => Promise<keyof R>) => {
|
|
46
46
|
const keys = validateRoutes(routes, basedOn);
|
|
47
47
|
const schema = z.object({
|
|
48
|
-
nextRoute: z.enum(
|
|
48
|
+
nextRoute: z.enum(
|
|
49
|
+
keys as [string, ...string[]],
|
|
50
|
+
'The routes that will be used to resolve the path',
|
|
51
|
+
),
|
|
49
52
|
});
|
|
50
53
|
return async <T extends Record<string, unknown>>(
|
|
51
54
|
state: EnsureKeys<T, K>,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { callFrontendTool } from './frontend-tool-caller.js';
|
|
2
2
|
|
|
3
3
|
export interface AgActionResult {
|
|
4
|
-
result?:
|
|
4
|
+
result?: unknown;
|
|
5
5
|
error?: string;
|
|
6
6
|
success: boolean;
|
|
7
7
|
}
|
|
@@ -10,7 +10,7 @@ export interface IAgActionCallerParams {
|
|
|
10
10
|
sessionId: string;
|
|
11
11
|
toolCallId: string;
|
|
12
12
|
toolName: string;
|
|
13
|
-
args:
|
|
13
|
+
args: Record<string, unknown>;
|
|
14
14
|
timeout?: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -25,7 +25,7 @@ export async function callAgAction({
|
|
|
25
25
|
toolName,
|
|
26
26
|
args,
|
|
27
27
|
timeout = 10000, // 10 seconds for UI actions
|
|
28
|
-
}: IAgActionCallerParams): Promise<
|
|
28
|
+
}: IAgActionCallerParams): Promise<unknown> {
|
|
29
29
|
return callFrontendTool({
|
|
30
30
|
sessionId,
|
|
31
31
|
toolId: toolCallId,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { tool } from '@langchain/core/tools';
|
|
2
|
-
import
|
|
2
|
+
import z from 'zod';
|
|
3
3
|
import { jsonToYaml } from '../../utils/json-to-yaml.js';
|
|
4
4
|
|
|
5
5
|
export type RequestPayload = {
|
|
@@ -65,9 +65,11 @@ export const askIXOGuruTool = tool(callGuruApi, {
|
|
|
65
65
|
description:
|
|
66
66
|
'Ask the IXO Guru AI a question - IXO guru has access to internal knowledge base of IXO organization this tool will return the answer and the session ID to use for chat history if you want to continue a conversation within the same session send the same session ID otherwise a new session ID',
|
|
67
67
|
schema: z.object({
|
|
68
|
-
question: z.string(
|
|
68
|
+
question: z.string('The question to ask the IXO Guru AI'),
|
|
69
69
|
sessionId: z
|
|
70
|
-
.string(
|
|
71
|
-
|
|
70
|
+
.string(
|
|
71
|
+
'The session ID to use for chat history if you want to continue a conversation within the same session send the same session ID otherwise a new session ID',
|
|
72
|
+
)
|
|
73
|
+
.uuid('Session ID must be a valid UUID'),
|
|
72
74
|
}),
|
|
73
75
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { callFrontendTool } from './frontend-tool-caller.js';
|
|
2
2
|
|
|
3
3
|
export interface BrowserToolResult {
|
|
4
|
-
result?:
|
|
4
|
+
result?: unknown;
|
|
5
5
|
error?: string;
|
|
6
6
|
success: boolean;
|
|
7
7
|
}
|
|
@@ -10,7 +10,7 @@ export interface IBrowserToolCallerParams {
|
|
|
10
10
|
sessionId: string;
|
|
11
11
|
toolCallId: string;
|
|
12
12
|
toolName: string;
|
|
13
|
-
args:
|
|
13
|
+
args: Record<string, unknown>;
|
|
14
14
|
timeout?: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -25,7 +25,7 @@ export async function callBrowserTool({
|
|
|
25
25
|
toolName,
|
|
26
26
|
args,
|
|
27
27
|
timeout = 15000,
|
|
28
|
-
}: IBrowserToolCallerParams): Promise<
|
|
28
|
+
}: IBrowserToolCallerParams): Promise<unknown> {
|
|
29
29
|
return callFrontendTool({
|
|
30
30
|
sessionId,
|
|
31
31
|
toolId: toolCallId,
|
|
@@ -6,7 +6,7 @@ export interface IFrontendToolCallerParams {
|
|
|
6
6
|
sessionId: string;
|
|
7
7
|
toolId: string;
|
|
8
8
|
toolName: string;
|
|
9
|
-
args:
|
|
9
|
+
args: Record<string, unknown>;
|
|
10
10
|
toolType: 'browser' | 'agui';
|
|
11
11
|
timeout?: number;
|
|
12
12
|
}
|
|
@@ -24,7 +24,7 @@ export async function callFrontendTool({
|
|
|
24
24
|
args,
|
|
25
25
|
toolType,
|
|
26
26
|
timeout = 15000,
|
|
27
|
-
}: IFrontendToolCallerParams): Promise<
|
|
27
|
+
}: IFrontendToolCallerParams): Promise<unknown> {
|
|
28
28
|
// Step 1: Emit appropriate event based on tool type
|
|
29
29
|
if (toolType === 'browser') {
|
|
30
30
|
new BrowserToolCallEvent({
|
|
@@ -42,7 +42,7 @@ export async function callFrontendTool({
|
|
|
42
42
|
toolName,
|
|
43
43
|
args,
|
|
44
44
|
status: 'isRunning',
|
|
45
|
-
}
|
|
45
|
+
}).emit();
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
// Step 2: Wait for result via rootEventEmitter
|
|
@@ -50,9 +50,14 @@ export async function callFrontendTool({
|
|
|
50
50
|
toolType === 'browser' ? 'browser_tool_result' : 'action_call_result';
|
|
51
51
|
|
|
52
52
|
return await new Promise((resolve, reject) => {
|
|
53
|
+
// eslint-disable-next-line prefer-const -- assigned after handler definition due to mutual reference
|
|
53
54
|
let timeoutHandle: NodeJS.Timeout;
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
const resultHandler = (...args: unknown[]) => {
|
|
56
|
+
const data = args[0] as {
|
|
57
|
+
toolCallId: string;
|
|
58
|
+
error?: string;
|
|
59
|
+
result?: Record<string, unknown>;
|
|
60
|
+
};
|
|
56
61
|
const receivedId = data.toolCallId;
|
|
57
62
|
if (receivedId === toolId) {
|
|
58
63
|
clearTimeout(timeoutHandle);
|
|
@@ -63,7 +68,7 @@ export async function callFrontendTool({
|
|
|
63
68
|
reject(new Error(data.error));
|
|
64
69
|
} else if (toolType === 'agui' && data.result?.success === false) {
|
|
65
70
|
// AG-UI specific error handling
|
|
66
|
-
reject(new Error(data.result.error || 'Action failed'));
|
|
71
|
+
reject(new Error((data.result.error as string) || 'Action failed'));
|
|
67
72
|
} else {
|
|
68
73
|
resolve(data.result);
|
|
69
74
|
}
|
|
@@ -3,11 +3,10 @@ import { MatrixManager } from '@ixo/matrix';
|
|
|
3
3
|
|
|
4
4
|
const matrixManager = MatrixManager.getInstance();
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
interface IAction {
|
|
8
7
|
name: string;
|
|
9
|
-
args: Record<string,
|
|
10
|
-
result:
|
|
8
|
+
args: Record<string, unknown>;
|
|
9
|
+
result: unknown;
|
|
11
10
|
error?: string;
|
|
12
11
|
success: boolean;
|
|
13
12
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IRunnableConfigWithRequiredFields } from '@ixo/matrix';
|
|
1
|
+
import { type IRunnableConfigWithRequiredFields } from '@ixo/matrix';
|
|
2
2
|
import { tool } from '@langchain/core/tools';
|
|
3
3
|
import { callAgAction } from './action-caller.js';
|
|
4
4
|
import { logActionToMatrix } from './log-action-to-matrix.js';
|
|
@@ -6,7 +6,7 @@ import { logActionToMatrix } from './log-action-to-matrix.js';
|
|
|
6
6
|
interface IParseAgActionParams {
|
|
7
7
|
name: string;
|
|
8
8
|
description: string;
|
|
9
|
-
schema: Record<string,
|
|
9
|
+
schema: Record<string, unknown>;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
// Helper function to parse AG-UI action into LangChain tool
|
|
@@ -27,14 +27,14 @@ export function parserActionTool(action: IParseAgActionParams) {
|
|
|
27
27
|
sessionId,
|
|
28
28
|
toolCallId: `ag_${requestId}`,
|
|
29
29
|
toolName: name,
|
|
30
|
-
args: input,
|
|
30
|
+
args: input as Record<string, unknown>,
|
|
31
31
|
timeout: 5000, // 5 seconds
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
if (configs?.matrix.roomId) {
|
|
35
|
-
logActionToMatrix(
|
|
35
|
+
void logActionToMatrix(
|
|
36
36
|
{
|
|
37
|
-
name
|
|
37
|
+
name,
|
|
38
38
|
args: input as Record<string, unknown>,
|
|
39
39
|
result,
|
|
40
40
|
success: true,
|
|
@@ -50,9 +50,9 @@ export function parserActionTool(action: IParseAgActionParams) {
|
|
|
50
50
|
return JSON.stringify(result);
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
|
-
name
|
|
54
|
-
description
|
|
55
|
-
schema
|
|
53
|
+
name,
|
|
54
|
+
description,
|
|
55
|
+
schema,
|
|
56
56
|
metadata: {
|
|
57
57
|
actionTool: true,
|
|
58
58
|
},
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { IRunnableConfigWithRequiredFields } from '@ixo/matrix';
|
|
1
|
+
import { type IRunnableConfigWithRequiredFields } from '@ixo/matrix';
|
|
2
2
|
import { tool } from '@langchain/core/tools';
|
|
3
3
|
import { callBrowserTool } from './browser-tool-caller.js';
|
|
4
4
|
import { logActionToMatrix } from './log-action-to-matrix.js';
|
|
5
5
|
|
|
6
6
|
interface IParserBrowserToolParams {
|
|
7
7
|
description: string;
|
|
8
|
-
schema: Record<string,
|
|
8
|
+
schema: Record<string, unknown>;
|
|
9
9
|
toolName: string;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -23,12 +23,12 @@ export function parserBrowserTool(params: IParserBrowserToolParams) {
|
|
|
23
23
|
const result = await callBrowserTool({
|
|
24
24
|
sessionId,
|
|
25
25
|
toolName,
|
|
26
|
-
args: input,
|
|
26
|
+
args: input as Record<string, unknown>,
|
|
27
27
|
toolCallId: `tc-${requestId}`,
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
if (configs?.matrix.roomId) {
|
|
31
|
-
logActionToMatrix(
|
|
31
|
+
void logActionToMatrix(
|
|
32
32
|
{
|
|
33
33
|
name: toolName,
|
|
34
34
|
args: input as Record<string, unknown>,
|
|
@@ -6,36 +6,36 @@ import { retrieverToolFactory } from './retriever-tool.js';
|
|
|
6
6
|
const fakeModel = new FakeChatModel({});
|
|
7
7
|
|
|
8
8
|
// Mock the logger to prevent console output during tests
|
|
9
|
-
|
|
9
|
+
vi.mock('@ixo/logger', () => ({
|
|
10
10
|
Logger: {
|
|
11
|
-
error:
|
|
11
|
+
error: vi.fn(),
|
|
12
12
|
},
|
|
13
13
|
}));
|
|
14
14
|
|
|
15
15
|
// Mock the OpenAI model
|
|
16
|
-
|
|
16
|
+
vi.mock('../../models/openai', () => ({
|
|
17
17
|
getChatOpenAiModel: () => fakeModel,
|
|
18
18
|
}));
|
|
19
19
|
|
|
20
20
|
// Mock the doc relevance checker
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
default: jest.fn().mockResolvedValue(true),
|
|
21
|
+
vi.mock('../../utils/doc-relevance-checker', () => ({
|
|
22
|
+
default: vi.fn().mockResolvedValue(true),
|
|
24
23
|
}));
|
|
25
|
-
const fakeDocRelevanceChecker =
|
|
24
|
+
const fakeDocRelevanceChecker = vi.fn().mockResolvedValue(true);
|
|
26
25
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
vi.spyOn(
|
|
27
|
+
await import('../../utils/doc-relevance-checker'),
|
|
28
|
+
'default',
|
|
29
|
+
).mockImplementation(fakeDocRelevanceChecker);
|
|
30
30
|
|
|
31
31
|
describe('RetrieverTool', () => {
|
|
32
|
-
let mockStore:
|
|
33
|
-
|
|
32
|
+
let mockStore: { queryWithSimilarity: ReturnType<typeof vi.fn> };
|
|
33
|
+
const mockModel: FakeChatModel = new FakeChatModel({});
|
|
34
34
|
|
|
35
35
|
beforeEach(() => {
|
|
36
36
|
mockStore = {
|
|
37
|
-
queryWithSimilarity:
|
|
38
|
-
}
|
|
37
|
+
queryWithSimilarity: vi.fn(),
|
|
38
|
+
};
|
|
39
39
|
});
|
|
40
40
|
|
|
41
41
|
it('should retrieve documents with default settings', async () => {
|
|
@@ -46,7 +46,9 @@ describe('RetrieverTool', () => {
|
|
|
46
46
|
|
|
47
47
|
mockStore.queryWithSimilarity.mockResolvedValue(mockDocs);
|
|
48
48
|
|
|
49
|
-
const tool = retrieverToolFactory({
|
|
49
|
+
const tool = retrieverToolFactory({
|
|
50
|
+
store: mockStore as unknown as VectorDBDataStore,
|
|
51
|
+
});
|
|
50
52
|
const result = (await tool.invoke({ query: 'test query' })) as Document[];
|
|
51
53
|
|
|
52
54
|
expect(mockStore.queryWithSimilarity).toHaveBeenCalledWith('test query', {
|
|
@@ -76,7 +78,7 @@ describe('RetrieverTool', () => {
|
|
|
76
78
|
const requestId = 'test-request-id';
|
|
77
79
|
|
|
78
80
|
const tool = retrieverToolFactory({
|
|
79
|
-
store: mockStore,
|
|
81
|
+
store: mockStore as unknown as VectorDBDataStore,
|
|
80
82
|
map: resultsMap,
|
|
81
83
|
requestId,
|
|
82
84
|
});
|
|
@@ -89,7 +91,9 @@ describe('RetrieverTool', () => {
|
|
|
89
91
|
it('should return undefined when no documents found', async () => {
|
|
90
92
|
mockStore.queryWithSimilarity.mockResolvedValue([]);
|
|
91
93
|
|
|
92
|
-
const tool = retrieverToolFactory({
|
|
94
|
+
const tool = retrieverToolFactory({
|
|
95
|
+
store: mockStore as unknown as VectorDBDataStore,
|
|
96
|
+
});
|
|
93
97
|
const result = await tool.invoke({ query: 'test query' });
|
|
94
98
|
|
|
95
99
|
expect(result).toBeUndefined();
|
|
@@ -102,7 +106,7 @@ describe('RetrieverTool', () => {
|
|
|
102
106
|
mockStore.queryWithSimilarity.mockResolvedValue(mockDocs);
|
|
103
107
|
|
|
104
108
|
const tool = retrieverToolFactory({
|
|
105
|
-
store: mockStore,
|
|
109
|
+
store: mockStore as unknown as VectorDBDataStore,
|
|
106
110
|
similarThreshold: 0.5,
|
|
107
111
|
model: mockModel,
|
|
108
112
|
});
|
|
@@ -120,12 +124,15 @@ describe('RetrieverTool', () => {
|
|
|
120
124
|
mockStore.queryWithSimilarity.mockResolvedValue(mockDocs);
|
|
121
125
|
|
|
122
126
|
// Mock the relevance checker to throw an error
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
const docRelevanceModule = await import(
|
|
128
|
+
'../../utils/doc-relevance-checker'
|
|
129
|
+
);
|
|
130
|
+
(
|
|
131
|
+
docRelevanceModule.default as ReturnType<typeof vi.fn>
|
|
132
|
+
).mockRejectedValueOnce(new Error('Test error'));
|
|
126
133
|
|
|
127
134
|
const tool = retrieverToolFactory({
|
|
128
|
-
store: mockStore,
|
|
135
|
+
store: mockStore as unknown as VectorDBDataStore,
|
|
129
136
|
similarThreshold: 0.5,
|
|
130
137
|
model: mockModel,
|
|
131
138
|
});
|
|
@@ -142,7 +149,7 @@ describe('RetrieverTool', () => {
|
|
|
142
149
|
mockStore.queryWithSimilarity.mockResolvedValue(mockDocs);
|
|
143
150
|
const filters = { category: 'test' };
|
|
144
151
|
const tool = retrieverToolFactory({
|
|
145
|
-
store: mockStore,
|
|
152
|
+
store: mockStore as unknown as VectorDBDataStore,
|
|
146
153
|
filters,
|
|
147
154
|
});
|
|
148
155
|
|
|
@@ -2,7 +2,7 @@ import { PlaywrightWebBaseLoader } from '@langchain/community/document_loaders/w
|
|
|
2
2
|
import { HtmlToTextTransformer } from '@langchain/community/document_transformers/html_to_text';
|
|
3
3
|
import { Document } from '@langchain/core/documents';
|
|
4
4
|
import { PromptTemplate } from '@langchain/core/prompts';
|
|
5
|
-
import { ChatOpenAI } from '@langchain/openai';
|
|
5
|
+
import { type ChatOpenAI } from '@langchain/openai';
|
|
6
6
|
import { createAgent } from 'langchain';
|
|
7
7
|
|
|
8
8
|
export const scrapeWebPage = async (url: string) => {
|
|
@@ -4,18 +4,20 @@ import { ChatPromptTemplate } from '@langchain/core/prompts';
|
|
|
4
4
|
import { FakeChatModel } from '@langchain/core/utils/testing';
|
|
5
5
|
import checkDocRelevance from '../doc-relevance-checker.js';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
vi.spyOn(ChatPromptTemplate, 'fromTemplate');
|
|
8
8
|
|
|
9
9
|
describe('checkDocRelevance', () => {
|
|
10
10
|
// Create a mock model that simulates relevance checking
|
|
11
11
|
const createMockModel = (returnValue: boolean): BaseChatModel => {
|
|
12
12
|
const mockModel = new FakeChatModel({});
|
|
13
|
-
mockModel.withStructuredOutput =
|
|
13
|
+
mockModel.withStructuredOutput = vi.fn().mockReturnValue({
|
|
14
14
|
pipe: () => ({
|
|
15
15
|
invoke: async () => ({ answer: returnValue }),
|
|
16
16
|
}),
|
|
17
17
|
});
|
|
18
|
-
(
|
|
18
|
+
(
|
|
19
|
+
ChatPromptTemplate.fromTemplate as ReturnType<typeof vi.fn>
|
|
20
|
+
).mockReturnValue({
|
|
19
21
|
pipe: () => ({
|
|
20
22
|
invoke: async () => ({ answer: returnValue }),
|
|
21
23
|
}),
|
|
@@ -30,7 +30,7 @@ describe('jsonToYaml', () => {
|
|
|
30
30
|
const json = {
|
|
31
31
|
fruits: ['apple', 'banana', 'orange'],
|
|
32
32
|
};
|
|
33
|
-
const expected = 'fruits:\n
|
|
33
|
+
const expected = 'fruits:\n - apple\n - banana\n - orange';
|
|
34
34
|
expect(jsonToYaml(json)).toBe(expected);
|
|
35
35
|
});
|
|
36
36
|
|