@metad/contracts 3.6.2 → 3.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/.babelrc +5 -0
  2. package/.eslintrc.json +18 -0
  3. package/babel.config.json +1 -0
  4. package/index.cjs.js +5 -4233
  5. package/jest.config.ts +16 -0
  6. package/package.json +2 -2
  7. package/project.json +53 -0
  8. package/src/agent/{ai-model.d.ts → ai-model.ts} +2 -2
  9. package/src/agent/graph.ts +275 -0
  10. package/src/agent/index.ts +5 -0
  11. package/src/agent/token.ts +23 -0
  12. package/src/agent/utils.spec.ts +283 -0
  13. package/src/agent/utils.ts +122 -0
  14. package/src/agent/variables.ts +66 -0
  15. package/src/ai/ai-model.model.ts +232 -0
  16. package/src/ai/ai-provider.model.ts +53 -0
  17. package/src/ai/ai.model.ts +87 -0
  18. package/src/ai/chat-message-feedback.model.ts +31 -0
  19. package/src/ai/chat-message.model.ts +277 -0
  20. package/src/ai/chat.model.ts +207 -0
  21. package/src/ai/copilot-checkpoint.model.ts +25 -0
  22. package/src/ai/copilot-example.model.ts +23 -0
  23. package/src/ai/copilot-model.model.ts +31 -0
  24. package/src/ai/copilot-organization.model.ts +21 -0
  25. package/src/ai/copilot-provider.model.ts +46 -0
  26. package/src/ai/copilot-role.model.ts +48 -0
  27. package/src/ai/copilot-store.model.ts +34 -0
  28. package/src/ai/copilot-user.model.ts +24 -0
  29. package/src/ai/copilot.model.ts +47 -0
  30. package/src/ai/{environment.model.d.ts → environment.model.ts} +12 -10
  31. package/src/ai/feature.model.ts +6 -0
  32. package/src/ai/index.ts +40 -0
  33. package/src/ai/knowledge-doc-chunk.model.ts +123 -0
  34. package/src/ai/knowledge-doc-chunk.spec.ts +47 -0
  35. package/src/ai/knowledge-doc-page.model.ts +20 -0
  36. package/src/ai/knowledge-doc.model.ts +364 -0
  37. package/src/ai/knowledge-pipeline.ts +138 -0
  38. package/src/ai/knowledge-retrieval-log.model.ts +19 -0
  39. package/src/ai/knowledgebase-task.model.ts +46 -0
  40. package/src/ai/knowledgebase.model.ts +205 -0
  41. package/src/ai/rag-web.ts +54 -0
  42. package/src/ai/rag.ts +24 -0
  43. package/src/ai/role-permissions.ts +13 -0
  44. package/src/ai/types.ts +83 -0
  45. package/src/ai/xpert-agent-execution.model.ts +115 -0
  46. package/src/ai/xpert-agent.model.ts +264 -0
  47. package/src/ai/xpert-project.model.ts +103 -0
  48. package/src/ai/xpert-table.model.ts +100 -0
  49. package/src/ai/xpert-task.model.ts +32 -0
  50. package/src/ai/xpert-template.model.ts +53 -0
  51. package/src/ai/xpert-tool-mcp.model.ts +77 -0
  52. package/src/ai/xpert-tool.model.ts +216 -0
  53. package/src/ai/xpert-toolset.model.ts +220 -0
  54. package/src/ai/xpert-workflow-task.prompt.ts +71 -0
  55. package/src/ai/xpert-workflow.model.ts +502 -0
  56. package/src/ai/xpert-workspace.model.ts +42 -0
  57. package/src/ai/xpert.model.ts +637 -0
  58. package/src/ai/xpert.utils.ts +214 -0
  59. package/src/analytics/ai.ts +79 -0
  60. package/src/analytics/approval-policy.model.ts +40 -0
  61. package/src/analytics/business-area-user.model.ts +43 -0
  62. package/src/analytics/business-area.ts +20 -0
  63. package/src/analytics/certification.model.ts +12 -0
  64. package/src/analytics/chatbi-conversation.model.ts +16 -0
  65. package/src/analytics/chatbi-model.model.ts +22 -0
  66. package/src/analytics/collection.model.ts +8 -0
  67. package/src/analytics/comment.model.ts +14 -0
  68. package/src/analytics/data-source-type.ts +19 -0
  69. package/src/analytics/data-source.ts +72 -0
  70. package/src/analytics/favorite.ts +18 -0
  71. package/src/analytics/features.ts +19 -0
  72. package/src/analytics/feed-model.ts +15 -0
  73. package/src/analytics/gateway.ts +31 -0
  74. package/src/analytics/index.ts +39 -0
  75. package/src/analytics/indicator-app.ts +49 -0
  76. package/src/analytics/{indicator-market.d.ts → indicator-market.ts} +6 -2
  77. package/src/analytics/indicator.ts +143 -0
  78. package/src/analytics/model-query-log.model.ts +45 -0
  79. package/src/analytics/model-query.ts +22 -0
  80. package/src/analytics/{notification-destination.d.ts → notification-destination.ts} +9 -5
  81. package/src/analytics/{permission-approval-user.model.d.ts → permission-approval-user.model.ts} +10 -8
  82. package/src/analytics/permission-approval.model.ts +58 -0
  83. package/src/analytics/project.model.ts +56 -0
  84. package/src/analytics/role-permissions.ts +36 -0
  85. package/src/analytics/schema.ts +300 -0
  86. package/src/analytics/screenshot.model.ts +28 -0
  87. package/src/analytics/semantic-model-entity.ts +50 -0
  88. package/src/analytics/semantic-model-member.ts +49 -0
  89. package/src/analytics/semantic-model.ts +237 -0
  90. package/src/analytics/{story-point.d.ts → story-point.ts} +11 -6
  91. package/src/analytics/story-template.model.ts +34 -0
  92. package/src/analytics/story-widget.ts +15 -0
  93. package/src/analytics/story.ts +109 -0
  94. package/src/analytics/subscription.ts +43 -0
  95. package/src/analytics/visit.model.ts +39 -0
  96. package/src/analytics/webSocket.ts +53 -0
  97. package/src/api-key.model.ts +11 -0
  98. package/src/base-entity.model.ts +34 -0
  99. package/src/contact.model.ts +45 -0
  100. package/src/core.model.ts +103 -0
  101. package/src/{country.model.d.ts → country.model.ts} +3 -2
  102. package/src/currency.model.ts +582 -0
  103. package/src/{custom-smtp.model.d.ts → custom-smtp.model.ts} +21 -17
  104. package/src/date-picker.model.ts +5 -0
  105. package/src/email-template.model.ts +50 -0
  106. package/src/email.model.ts +46 -0
  107. package/src/employee.model.ts +199 -0
  108. package/src/entity-with-members.model.ts +16 -0
  109. package/src/feature.model.ts +108 -0
  110. package/src/file-provider.ts +37 -0
  111. package/src/help-center-article.model.ts +35 -0
  112. package/src/help-center.model.ts +33 -0
  113. package/src/http-status.enum.ts +58 -0
  114. package/src/import-export.model.ts +42 -0
  115. package/src/index.ts +60 -0
  116. package/src/integration/dify.ts +31 -0
  117. package/src/integration/dingtalk.ts +16 -0
  118. package/src/integration/fastgpt.ts +32 -0
  119. package/src/integration/firecrawl.ts +46 -0
  120. package/src/integration/github.ts +149 -0
  121. package/src/integration/index.ts +15 -0
  122. package/src/integration/lark.ts +79 -0
  123. package/src/integration/wecom.ts +16 -0
  124. package/src/integration.model.ts +119 -0
  125. package/src/invite.model.ts +144 -0
  126. package/src/language.model.ts +22 -0
  127. package/src/organization-contact.model.ts +84 -0
  128. package/src/{organization-department.model.d.ts → organization-department.model.ts} +16 -10
  129. package/src/organization-language.model.ts +24 -0
  130. package/src/organization-projects.model.ts +99 -0
  131. package/src/organization-team-employee-model.ts +14 -0
  132. package/src/organization-team-model.ts +25 -0
  133. package/src/organization.model.ts +266 -0
  134. package/src/{password-reset.model.d.ts → password-reset.model.ts} +14 -10
  135. package/src/{plain-object.model.d.ts → plain-object.model.ts} +1 -1
  136. package/src/plugin.ts +15 -0
  137. package/src/role-permission.model.ts +123 -0
  138. package/src/role.model.ts +31 -0
  139. package/src/schedule.ts +71 -0
  140. package/src/secret-token.model.ts +15 -0
  141. package/src/seed.model.ts +50 -0
  142. package/src/storage-file.model.ts +46 -0
  143. package/src/tag-entity.model.ts +23 -0
  144. package/src/tenant.model.ts +52 -0
  145. package/src/tools/index.ts +1 -0
  146. package/src/tools/sandbox.ts +5 -0
  147. package/src/translation.model.ts +37 -0
  148. package/src/types.ts +277 -0
  149. package/src/user-organization.model.ts +31 -0
  150. package/src/user.model.ts +151 -0
  151. package/src/visibility.model.ts +6 -0
  152. package/tsconfig.json +22 -0
  153. package/tsconfig.lib.json +10 -0
  154. package/tsconfig.spec.json +9 -0
  155. package/index.cjs.d.ts +0 -1
  156. package/index.esm.d.ts +0 -1
  157. package/index.esm.js +0 -4129
  158. package/src/agent/graph.d.ts +0 -148
  159. package/src/agent/index.d.ts +0 -5
  160. package/src/agent/token.d.ts +0 -21
  161. package/src/agent/utils.d.ts +0 -19
  162. package/src/agent/variables.d.ts +0 -14
  163. package/src/ai/ai-model.model.d.ts +0 -198
  164. package/src/ai/ai-provider.model.d.ts +0 -43
  165. package/src/ai/ai.model.d.ts +0 -82
  166. package/src/ai/chat-message-feedback.model.d.ts +0 -24
  167. package/src/ai/chat-message.model.d.ts +0 -222
  168. package/src/ai/chat.model.d.ts +0 -189
  169. package/src/ai/copilot-checkpoint.model.d.ts +0 -23
  170. package/src/ai/copilot-example.model.d.ts +0 -19
  171. package/src/ai/copilot-model.model.d.ts +0 -26
  172. package/src/ai/copilot-organization.model.d.ts +0 -17
  173. package/src/ai/copilot-provider.model.d.ts +0 -31
  174. package/src/ai/copilot-role.model.d.ts +0 -43
  175. package/src/ai/copilot-store.model.d.ts +0 -29
  176. package/src/ai/copilot-user.model.d.ts +0 -20
  177. package/src/ai/copilot.model.d.ts +0 -36
  178. package/src/ai/feature.model.d.ts +0 -6
  179. package/src/ai/index.d.ts +0 -39
  180. package/src/ai/knowledge-doc-chunk.model.d.ts +0 -60
  181. package/src/ai/knowledge-doc-page.model.d.ts +0 -15
  182. package/src/ai/knowledge-doc.model.d.ts +0 -192
  183. package/src/ai/knowledge-pipeline.d.ts +0 -107
  184. package/src/ai/knowledge-retrieval-log.model.d.ts +0 -10
  185. package/src/ai/knowledgebase-task.model.d.ts +0 -39
  186. package/src/ai/knowledgebase.model.d.ts +0 -162
  187. package/src/ai/rag-web.d.ts +0 -26
  188. package/src/ai/rag.d.ts +0 -24
  189. package/src/ai/role-permissions.d.ts +0 -13
  190. package/src/ai/types.d.ts +0 -39
  191. package/src/ai/xpert-agent-execution.model.d.ts +0 -96
  192. package/src/ai/xpert-agent.model.d.ts +0 -192
  193. package/src/ai/xpert-project.model.d.ts +0 -86
  194. package/src/ai/xpert-task.model.d.ts +0 -26
  195. package/src/ai/xpert-template.model.d.ts +0 -47
  196. package/src/ai/xpert-tool-mcp.model.d.ts +0 -67
  197. package/src/ai/xpert-tool.model.d.ts +0 -147
  198. package/src/ai/xpert-toolset.model.d.ts +0 -200
  199. package/src/ai/xpert-workflow-task.prompt.d.ts +0 -2
  200. package/src/ai/xpert-workflow.model.d.ts +0 -366
  201. package/src/ai/xpert-workspace.model.d.ts +0 -32
  202. package/src/ai/xpert.model.d.ts +0 -529
  203. package/src/ai/xpert.utils.d.ts +0 -80
  204. package/src/analytics/ai.d.ts +0 -73
  205. package/src/analytics/approval-policy.model.d.ts +0 -30
  206. package/src/analytics/business-area-user.model.d.ts +0 -35
  207. package/src/analytics/business-area.d.ts +0 -17
  208. package/src/analytics/certification.model.d.ts +0 -11
  209. package/src/analytics/chatbi-conversation.model.d.ts +0 -15
  210. package/src/analytics/chatbi-model.model.d.ts +0 -18
  211. package/src/analytics/collection.model.d.ts +0 -6
  212. package/src/analytics/comment.model.d.ts +0 -10
  213. package/src/analytics/data-source-type.d.ts +0 -16
  214. package/src/analytics/data-source.d.ts +0 -62
  215. package/src/analytics/favorite.d.ts +0 -14
  216. package/src/analytics/features.d.ts +0 -19
  217. package/src/analytics/feed-model.d.ts +0 -13
  218. package/src/analytics/gateway.d.ts +0 -27
  219. package/src/analytics/index.d.ts +0 -38
  220. package/src/analytics/indicator-app.d.ts +0 -44
  221. package/src/analytics/indicator.d.ts +0 -106
  222. package/src/analytics/model-query-log.model.d.ts +0 -41
  223. package/src/analytics/model-query.d.ts +0 -21
  224. package/src/analytics/permission-approval.model.d.ts +0 -47
  225. package/src/analytics/project.model.d.ts +0 -50
  226. package/src/analytics/role-permissions.d.ts +0 -25
  227. package/src/analytics/schema.d.ts +0 -262
  228. package/src/analytics/screenshot.model.d.ts +0 -25
  229. package/src/analytics/semantic-model-entity.d.ts +0 -37
  230. package/src/analytics/semantic-model-member.d.ts +0 -24
  231. package/src/analytics/semantic-model.d.ts +0 -175
  232. package/src/analytics/story-template.model.d.ts +0 -28
  233. package/src/analytics/story-widget.d.ts +0 -12
  234. package/src/analytics/story.d.ts +0 -93
  235. package/src/analytics/subscription.d.ts +0 -38
  236. package/src/analytics/visit.model.d.ts +0 -34
  237. package/src/analytics/webSocket.d.ts +0 -48
  238. package/src/api-key.model.d.ts +0 -10
  239. package/src/base-entity.model.d.ts +0 -27
  240. package/src/contact.model.d.ts +0 -41
  241. package/src/core.model.d.ts +0 -97
  242. package/src/currency.model.d.ts +0 -579
  243. package/src/date-picker.model.d.ts +0 -5
  244. package/src/email-template.model.d.ts +0 -39
  245. package/src/email.model.d.ts +0 -36
  246. package/src/employee.model.d.ts +0 -128
  247. package/src/entity-with-members.model.d.ts +0 -13
  248. package/src/feature.model.d.ts +0 -93
  249. package/src/file-provider.d.ts +0 -33
  250. package/src/help-center-article.model.d.ts +0 -0
  251. package/src/help-center.model.d.ts +0 -0
  252. package/src/http-status.enum.d.ts +0 -57
  253. package/src/import-export.model.d.ts +0 -36
  254. package/src/index.d.ts +0 -48
  255. package/src/integration/dify.d.ts +0 -0
  256. package/src/integration/dingtalk.d.ts +0 -2
  257. package/src/integration/fastgpt.d.ts +0 -0
  258. package/src/integration/firecrawl.d.ts +0 -2
  259. package/src/integration/github.d.ts +0 -69
  260. package/src/integration/index.d.ts +0 -4
  261. package/src/integration/lark.d.ts +0 -11
  262. package/src/integration/wecom.d.ts +0 -2
  263. package/src/integration.model.d.ts +0 -90
  264. package/src/invite.model.d.ts +0 -123
  265. package/src/language.model.d.ts +0 -19
  266. package/src/organization-contact.model.d.ts +0 -73
  267. package/src/organization-language.model.d.ts +0 -18
  268. package/src/organization-projects.model.d.ts +0 -80
  269. package/src/organization-team-employee-model.d.ts +0 -12
  270. package/src/organization-team-model.d.ts +0 -19
  271. package/src/organization.model.d.ts +0 -239
  272. package/src/plugin.d.ts +0 -13
  273. package/src/role-permission.model.d.ts +0 -61
  274. package/src/role.model.d.ts +0 -26
  275. package/src/schedule.d.ts +0 -27
  276. package/src/secret-token.model.d.ts +0 -11
  277. package/src/seed.model.d.ts +0 -37
  278. package/src/storage-file.model.d.ts +0 -40
  279. package/src/tag-entity.model.d.ts +0 -20
  280. package/src/tenant.model.d.ts +0 -40
  281. package/src/tools/index.d.ts +0 -1
  282. package/src/tools/sandbox.d.ts +0 -5
  283. package/src/translation.model.d.ts +0 -26
  284. package/src/types.d.ts +0 -241
  285. package/src/user-organization.model.d.ts +0 -24
  286. package/src/user.model.d.ts +0 -131
  287. package/src/visibility.model.d.ts +0 -6
package/jest.config.ts ADDED
@@ -0,0 +1,16 @@
1
+ /* eslint-disable */
2
+ export default {
3
+ displayName: 'contracts',
4
+ preset: '../../jest.preset.js',
5
+ globals: {},
6
+ transform: {
7
+ '^.+\\.[tj]s$': [
8
+ 'ts-jest',
9
+ {
10
+ tsconfig: '<rootDir>/tsconfig.spec.json'
11
+ }
12
+ ]
13
+ },
14
+ moduleFileExtensions: ['ts', 'js', 'html'],
15
+ coverageDirectory: '../../coverage/packages/contracts'
16
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metad/contracts",
3
- "version": "3.6.2",
3
+ "version": "3.6.7",
4
4
  "license": "AGPL-3.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,4 +14,4 @@
14
14
  },
15
15
  "module": "./index.esm.js",
16
16
  "main": "./index.cjs.js"
17
- }
17
+ }
package/project.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "contracts",
3
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
+ "sourceRoot": "packages/contracts/src",
5
+ "projectType": "library",
6
+ "targets": {
7
+ "build": {
8
+ "executor": "@nx/rollup:rollup",
9
+ "outputs": ["{options.outputPath}"],
10
+ "options": {
11
+ "outputPath": "packages/contracts/dist",
12
+ "project": "packages/contracts/package.json",
13
+ "main": "packages/contracts/src/index.ts",
14
+ "tsConfig": "packages/contracts/tsconfig.lib.json",
15
+ "assets": [
16
+ {
17
+ "glob": "README.md",
18
+ "input": "packages/contracts/",
19
+ "output": "."
20
+ }
21
+ ],
22
+ "compiler": "swc",
23
+ "format": ["cjs", "esm"]
24
+ }
25
+ },
26
+ "publish": {
27
+ "command": "node tools/scripts/publish.mjs contracts {args.ver} {args.tag}",
28
+ "dependsOn": ["build"]
29
+ },
30
+ "lint": {
31
+ "executor": "@nx/eslint:lint",
32
+ "outputs": ["{options.outputFile}"],
33
+ "options": {
34
+ "lintFilePatterns": ["packages/contracts/**/*.ts", "packages/contracts/package.json"]
35
+ }
36
+ },
37
+ "test": {
38
+ "executor": "@nx/jest:jest",
39
+ "outputs": ["{workspaceRoot}/coverage/packages/contracts"],
40
+ "options": {
41
+ "jestConfig": "packages/contracts/jest.config.ts"
42
+ }
43
+ },
44
+ "nx-release-publish": {
45
+ "executor": "@nx/js:release-publish",
46
+ "options": {
47
+ "packageRoot": "packages/contracts/dist",
48
+ "access": "public"
49
+ }
50
+ }
51
+ },
52
+ "tags": []
53
+ }
@@ -1,4 +1,4 @@
1
- export declare enum AiModelTypeEnum {
1
+ export enum AiModelTypeEnum {
2
2
  LLM = "llm",
3
3
  TEXT_EMBEDDING = "text-embedding",
4
4
  RERANK = "rerank",
@@ -6,4 +6,4 @@ export declare enum AiModelTypeEnum {
6
6
  MODERATION = "moderation",
7
7
  TTS = "tts",
8
8
  TEXT2IMG = "text2img"
9
- }
9
+ }
@@ -0,0 +1,275 @@
1
+ import { BaseMessage } from '@langchain/core/messages'
2
+ import { RunnableConfig } from '@langchain/core/runnables'
3
+ import { Subscriber } from 'rxjs'
4
+ import { IWFNTrigger, TWorkflowVarGroup, WorkflowNodeTypeEnum } from '../ai/xpert-workflow.model'
5
+ import { TMessageContentComplex } from '../ai/chat-message.model'
6
+ import { I18nObject } from '../types'
7
+ import { TStateVariable, TXpertGraph, TXpertParameter, TXpertTeamNode, XpertParameterTypeEnum } from '../ai/xpert.model'
8
+ import { agentLabel, IXpertAgent } from '../ai/xpert-agent.model'
9
+
10
+ /**
11
+ * @deprecated can use getCurrentTaskInput instead?
12
+ */
13
+ export const CONTEXT_VARIABLE_CURRENTSTATE = 'currentState'
14
+ export const STATE_VARIABLE_SYS = 'sys'
15
+ export const STATE_VARIABLE_HUMAN = 'human'
16
+ export const GRAPH_NODE_SUMMARIZE_CONVERSATION = 'summarize_conversation'
17
+ export const GRAPH_NODE_TITLE_CONVERSATION = 'title_conversation'
18
+ export const STATE_VARIABLE_FILES = 'files'
19
+ export const STATE_VARIABLE_INPUT = 'input'
20
+ export const STATE_SYS_VOLUME = 'volume'
21
+ export const STATE_SYS_WORKSPACE_PATH = 'workspace_path'
22
+ export const STATE_SYS_WORKSPACE_URL = 'workspace_url'
23
+ export const STATE_VARIABLE_TITLE_CHANNEL = channelName('title')
24
+
25
+ export type TMessageChannel = {
26
+ system: string
27
+ messages: BaseMessage[]
28
+ summary?: string
29
+ error?: string | null
30
+ }
31
+
32
+ export type TAgentRunnableConfigurable = {
33
+ /**
34
+ * Thread id
35
+ */
36
+ thread_id: string
37
+ checkpoint_ns: string
38
+ checkpoint_id: string
39
+ tool_call_id?: string
40
+
41
+ // Custom configurable of invoke
42
+ tenantId: string
43
+ organizationId: string
44
+ language: string
45
+ userId: string
46
+ /**
47
+ * Xpert project id
48
+ */
49
+ projectId?: string
50
+ xpertId?: string
51
+ // Caller
52
+ agentKey: string
53
+ xpertName?: string
54
+ toolName?: string
55
+
56
+ subscriber: Subscriber<any>
57
+ /**
58
+ * Execution id of agent workflow node
59
+ */
60
+ executionId: string
61
+ // /**
62
+ // * Knowledge xpert's knowledgebase
63
+ // */
64
+ // knowledgebaseId?: string
65
+ // knowledgeTaskId?: string
66
+
67
+ signal?: AbortSignal
68
+ }
69
+
70
+ export type TToolCall = {
71
+ id?: string
72
+ name: string
73
+ type?: 'tool_call'
74
+ args: Record<string, any>
75
+ }
76
+
77
+ /**
78
+ *
79
+ * Example:
80
+ *
81
+ * ```typescript
82
+ * const result = interrupt<TInterruptMessage<{ name: string }>, { projectId: string }>({
83
+ * category: 'BI',
84
+ * type: 'switch_project',
85
+ * title: {
86
+ * en_US: 'Switch project',
87
+ * zh_Hans: '切换项目'
88
+ * },
89
+ * message: {
90
+ * en_US: 'Please select a project or create a new one',
91
+ * zh_Hans: '请选择或创建一个新的项目'
92
+ * },
93
+ * data: { name: '' }
94
+ * })
95
+ * ```
96
+ */
97
+ export type TInterruptMessage<T = unknown> = {
98
+ /**
99
+ * Major categories of interrupt components
100
+ */
101
+ category: 'BI'
102
+ /**
103
+ * The specific type of interactive component
104
+ */
105
+ type: string
106
+ /**
107
+ * Title of the interrupt component
108
+ */
109
+ title: string | I18nObject
110
+ /**
111
+ * Message content of the interrupt component
112
+ */
113
+ message: string | I18nObject
114
+ /**
115
+ * Additional data
116
+ */
117
+ data?: T
118
+ }
119
+
120
+ export type TInterruptCommand = {
121
+ resume?: any
122
+ update?: any
123
+ toolCalls?: TToolCall[]
124
+ agentKey?: string
125
+ }
126
+
127
+ // Helpers
128
+ export function channelName(name: string) {
129
+ return name.toLowerCase() + '_channel'
130
+ }
131
+
132
+ export function messageContentText(content: string | TMessageContentComplex) {
133
+ return typeof content === 'string' ? content : content.type === 'text' ? content.text : ''
134
+ }
135
+
136
+ export function getWorkspaceFromRunnable(configurable: TAgentRunnableConfigurable): {type?: 'project' | 'conversation'; id?: string} {
137
+ return configurable?.projectId ? {type: 'project', id: ''} :
138
+ configurable?.thread_id ? {
139
+ type: 'conversation',
140
+ id: configurable.thread_id
141
+ } : {}
142
+ }
143
+
144
+ export function getToolCallFromConfig(config): TToolCall {
145
+ return config?.toolCall || config?.configurable?.toolCall
146
+ }
147
+
148
+ export function getToolCallIdFromConfig(config): string {
149
+ return config.metadata?.tool_call_id || config?.configurable?.tool_call_id || getToolCallFromConfig(config)?.id
150
+ }
151
+
152
+ /**
153
+ * Compute long-term memory namespace:
154
+ * 1. When a user talks to a digital expert individually, use `ExpertId` + `UserId` to store memory
155
+ * 2. When talking to a digital expert in a project, all users and digital experts share `ProjectId` to store memory
156
+ *
157
+ * @param config
158
+ * @returns
159
+ */
160
+ export function getStoreNamespace(config: RunnableConfig): string[] {
161
+ const configurable = config.configurable as TAgentRunnableConfigurable
162
+ return configurableStoreNamespace(configurable)
163
+ }
164
+
165
+ export function configurableStoreNamespace(configurable: Partial<TAgentRunnableConfigurable>): string[] {
166
+ return configurable?.projectId ? [configurable?.projectId] : configurable?.userId ? [configurable.xpertId, configurable.userId] : []
167
+ }
168
+
169
+ /**
170
+ * Set value into variable of state.
171
+ *
172
+ * @param state
173
+ * @param varName
174
+ * @param value
175
+ * @returns
176
+ */
177
+ export function setStateVariable(state: Record<string, any>, varName: string, value: any) {
178
+ const [agentChannelName, variableName] = varName.split('.')
179
+ if (variableName) {
180
+ state[agentChannelName] = {
181
+ ...(state[agentChannelName] ?? {}),
182
+ [variableName]: value
183
+ }
184
+ } else {
185
+ state[agentChannelName] = value
186
+ }
187
+
188
+ return state
189
+ }
190
+
191
+ /**
192
+ * Get agent variable group from graph.
193
+ *
194
+ * @param key
195
+ * @param graph
196
+ * @returns
197
+ */
198
+ export function getAgentVarGroup(key: string, graph: TXpertGraph): TWorkflowVarGroup {
199
+ const node = graph.nodes.find((_) => _.type === 'agent' && _.key === key) as TXpertTeamNode & {type: 'agent'}
200
+
201
+ const variables: TXpertParameter[] = []
202
+ const varGroup: TWorkflowVarGroup = {
203
+ group: {
204
+ name: channelName(node.key),
205
+ description: {
206
+ en_US: agentLabel(node.entity)
207
+ },
208
+ },
209
+ variables
210
+ }
211
+
212
+ variables.push({
213
+ name: `messages`,
214
+ type: XpertParameterTypeEnum.ARRAY,
215
+ description: {
216
+ zh_Hans: `消息列表`,
217
+ en_US: `Message List`
218
+ }
219
+ })
220
+ variables.push({
221
+ name: `output`,
222
+ type: XpertParameterTypeEnum.STRING,
223
+ description: {
224
+ zh_Hans: `输出`,
225
+ en_US: `Output`
226
+ }
227
+ })
228
+ variables.push({
229
+ name: `error`,
230
+ type: XpertParameterTypeEnum.STRING,
231
+ description: {
232
+ zh_Hans: `错误`,
233
+ en_US: `Error`
234
+ }
235
+ })
236
+ const agent = <IXpertAgent>node.entity
237
+ if (agent.options?.structuredOutputMethod && agent.outputVariables) {
238
+ agent.outputVariables.forEach((variable) => {
239
+ variables.push({
240
+ name: variable.name || '',
241
+ type: variable.type as TStateVariable['type'],
242
+ description: variable.description,
243
+ item: variable.item
244
+ })
245
+ })
246
+ }
247
+
248
+ return varGroup
249
+ }
250
+
251
+
252
+ // Swarm
253
+ /**
254
+ * Get swarm partners of agent in team
255
+ *
256
+ * @param graph
257
+ * @param agentKey
258
+ */
259
+ export function getSwarmPartners(graph: TXpertGraph, agentKey: string, partners: string[], leaderKey?: string) {
260
+ const connections = graph.connections.filter((conn) => conn.type === 'agent' && conn.to === agentKey && (leaderKey ? conn.from !== leaderKey : true)
261
+ && graph.connections.some((_) => _.type === 'agent' && _.to === conn.from && _.from === agentKey))
262
+
263
+ connections.forEach((conn) => {
264
+ const key = conn.from
265
+ if (partners.indexOf(key) < 0) {
266
+ partners.push(key)
267
+ getSwarmPartners(graph, key, partners)
268
+ }
269
+ })
270
+ return partners
271
+ }
272
+
273
+ export function getWorkflowTriggers(graph: TXpertGraph, from: string) {
274
+ return graph.nodes.filter((node) => node.type === 'workflow' && node.entity.type === WorkflowNodeTypeEnum.TRIGGER && (<IWFNTrigger>node.entity).from === from)
275
+ }
@@ -0,0 +1,5 @@
1
+ export * from './ai-model'
2
+ export * from './token'
3
+ export * from './graph'
4
+ export * from './utils'
5
+ export * from './variables'
@@ -0,0 +1,23 @@
1
+ export type TTokenUsage = {
2
+ promptTokens: number
3
+ completionTokens: number
4
+ totalTokens: number
5
+ }
6
+
7
+ export interface IModelUsage {
8
+ totalTokens: number
9
+ totalPrice: number
10
+ currency: string
11
+ latency: number
12
+ }
13
+
14
+ export interface ILLMUsage extends IModelUsage {
15
+ promptTokens: number
16
+ promptUnitPrice: number
17
+ promptPriceUnit: number
18
+ promptPrice: number
19
+ completionTokens: number
20
+ completionUnitPrice: number
21
+ completionPriceUnit: number
22
+ completionPrice: number
23
+ }
@@ -0,0 +1,283 @@
1
+ import { TXpertGraph } from '../ai/xpert.model'
2
+ import { DeepPartial } from '../types'
3
+ import { allChannels, findStartNodes, getCurrentGraph } from './utils'
4
+
5
+ describe('findStartNodes', () => {
6
+ it('should return the correct start nodes for a given key', () => {
7
+ const graph: DeepPartial<TXpertGraph> = {
8
+ connections: [
9
+ { from: 'A', to: 'B' },
10
+ { from: 'B', to: 'C' },
11
+ { from: 'D', to: 'C' },
12
+ { from: 'C', to: 'E' },
13
+ { from: 'E', to: 'F' }
14
+ ]
15
+ }
16
+
17
+ const startNodes = findStartNodes(graph, 'C')
18
+ expect(startNodes).toEqual(expect.arrayContaining(['A', 'D']))
19
+ })
20
+
21
+ it('should return the node itself if it has no upstream nodes', () => {
22
+ const graph: DeepPartial<TXpertGraph> = {
23
+ connections: [
24
+ { from: 'A', to: 'B' },
25
+ { from: 'B', to: 'C' }
26
+ ]
27
+ }
28
+
29
+ const startNodes = findStartNodes(graph, 'A')
30
+ expect(startNodes).toEqual(['A'])
31
+ })
32
+
33
+ it('should return an empty array if the key is not in the graph', () => {
34
+ const graph: DeepPartial<TXpertGraph> = {
35
+ connections: [
36
+ { from: 'A', to: 'B' },
37
+ { from: 'B', to: 'C' }
38
+ ]
39
+ }
40
+
41
+ const startNodes = findStartNodes(graph, 'Z')
42
+ expect(startNodes).toEqual(['Z'])
43
+ })
44
+
45
+ it('should use start part of from key', () => {
46
+ const graph: DeepPartial<TXpertGraph> = {
47
+ connections: [
48
+ {
49
+ type: "edge",
50
+ // key: "Knowledge_XlSM1H1rCb/Router_zBkMXfqpXk",
51
+ from: "Knowledge_XlSM1H1rCb",
52
+ to: "Router_zBkMXfqpXk",
53
+ },
54
+ {
55
+ type: "edge",
56
+ // key: "Router_zBkMXfqpXk/oUluRQoFdV/Agent_cPnbaxekWd",
57
+ from: "Router_zBkMXfqpXk/oUluRQoFdV",
58
+ to: "Agent_cPnbaxekWd",
59
+ },
60
+ {
61
+ type: "edge",
62
+ // key: "Router_zBkMXfqpXk/else/Answer_Pb7cYUvTJU",
63
+ from: "Router_zBkMXfqpXk/else",
64
+ to: "Answer_Pb7cYUvTJU",
65
+ },
66
+ ]
67
+ }
68
+
69
+ const startNodes = findStartNodes(graph, 'Agent_cPnbaxekWd')
70
+ expect(startNodes).toEqual(['Knowledge_XlSM1H1rCb'])
71
+ })
72
+
73
+ it('only edge connections', () => {
74
+ const graph: DeepPartial<TXpertGraph> = {
75
+ connections: [
76
+ {
77
+ type: 'edge',
78
+ key: 'Agent_UMVcdTL9w1/Iterating_jsCXACz4wh',
79
+ from: 'Agent_UMVcdTL9w1',
80
+ to: 'Iterating_jsCXACz4wh'
81
+ },
82
+ {
83
+ type: 'agent',
84
+ key: 'Iterating_jsCXACz4wh/Agent_albUSvIcdF',
85
+ from: 'Iterating_jsCXACz4wh',
86
+ to: 'Agent_albUSvIcdF'
87
+ },
88
+ {
89
+ type: 'edge',
90
+ key: 'Agent_albUSvIcdF/Http_T9uLo1NJUV',
91
+ from: 'Agent_albUSvIcdF',
92
+ to: 'Http_T9uLo1NJUV'
93
+ },
94
+ {
95
+ type: 'edge',
96
+ key: 'Iterating_jsCXACz4wh/Code_27ERnJwa2t',
97
+ from: 'Iterating_jsCXACz4wh',
98
+ to: 'Code_27ERnJwa2t'
99
+ },
100
+ {
101
+ type: 'edge',
102
+ key: 'Code_27ERnJwa2t/Agent_M2Wa9MQVpM',
103
+ from: 'Code_27ERnJwa2t',
104
+ to: 'Agent_M2Wa9MQVpM'
105
+ },
106
+ {
107
+ type: 'edge',
108
+ key: 'Agent_M2Wa9MQVpM/Answer_uzsdBtAqPq',
109
+ from: 'Agent_M2Wa9MQVpM',
110
+ to: 'Answer_uzsdBtAqPq'
111
+ }
112
+ ]
113
+ }
114
+
115
+ const startNodes = findStartNodes(graph, 'Agent_albUSvIcdF')
116
+ expect(startNodes).toEqual(['Agent_albUSvIcdF'])
117
+ })
118
+
119
+ it('only edge connections', () => {
120
+ const graph: DeepPartial<TXpertGraph> = {
121
+ nodes: [],
122
+ connections: [
123
+ {
124
+ type: 'edge',
125
+ key: 'Agent_UMVcdTL9w1/Iterating_jsCXACz4wh',
126
+ from: 'Agent_UMVcdTL9w1',
127
+ to: 'Iterating_jsCXACz4wh'
128
+ },
129
+ {
130
+ type: 'agent',
131
+ key: 'Iterating_jsCXACz4wh/Agent_albUSvIcdF',
132
+ from: 'Iterating_jsCXACz4wh',
133
+ to: 'Agent_albUSvIcdF'
134
+ },
135
+ {
136
+ type: 'edge',
137
+ key: 'Agent_albUSvIcdF/Http_T9uLo1NJUV',
138
+ from: 'Agent_albUSvIcdF',
139
+ to: 'Http_T9uLo1NJUV'
140
+ },
141
+ {
142
+ type: 'edge',
143
+ key: 'Iterating_jsCXACz4wh/Code_27ERnJwa2t',
144
+ from: 'Iterating_jsCXACz4wh',
145
+ to: 'Code_27ERnJwa2t'
146
+ },
147
+ {
148
+ type: 'edge',
149
+ key: 'Code_27ERnJwa2t/Agent_M2Wa9MQVpM',
150
+ from: 'Code_27ERnJwa2t',
151
+ to: 'Agent_M2Wa9MQVpM'
152
+ },
153
+ {
154
+ type: 'edge',
155
+ key: 'Agent_M2Wa9MQVpM/Answer_uzsdBtAqPq',
156
+ from: 'Agent_M2Wa9MQVpM',
157
+ to: 'Answer_uzsdBtAqPq'
158
+ }
159
+ ]
160
+ }
161
+
162
+ const startNodes = getCurrentGraph(graph as TXpertGraph, 'Agent_albUSvIcdF')
163
+ expect(startNodes).toEqual(['Agent_albUSvIcdF'])
164
+ })
165
+
166
+ })
167
+
168
+ describe('allChannels', () => {
169
+ it('should return the correct start nodes for a given key', () => {
170
+ const graph: DeepPartial<TXpertGraph> = {
171
+ nodes: [
172
+ {
173
+ type: "agent",
174
+ key: "Agent_xv0UeM91O6",
175
+ },
176
+ {
177
+ type: "agent",
178
+ key: "Agent_DiQbU6FKZ6",
179
+ },
180
+ {
181
+ type: "workflow",
182
+ key: "Router_Q1uTcWa1rZ",
183
+ },
184
+ {
185
+ type: "workflow",
186
+ key: "Code_MlXFPNEphR",
187
+ },
188
+ {
189
+ type: "workflow",
190
+ key: "Knowledge_PJ2H5EObqJ",
191
+ },
192
+ {
193
+ type: "workflow",
194
+ key: "Router_A1Na6n49Ri",
195
+ },
196
+ {
197
+ type: "workflow",
198
+ key: "Code_1uEOTXgBNQ",
199
+ },
200
+ {
201
+ type: "workflow",
202
+ key: "Answer_za0cCTiayv",
203
+ },
204
+ {
205
+ type: "workflow",
206
+ key: "Iterating_CsvbR5teUm",
207
+ },
208
+ {
209
+ type: "workflow",
210
+ key: "Answer_SowVtmiosK",
211
+ },
212
+ ],
213
+ connections: [
214
+ {
215
+ type: "edge",
216
+ key: "Router_Q1uTcWa1rZ/TT9sQAeTa2/Agent_DiQbU6FKZ6",
217
+ from: "Router_Q1uTcWa1rZ/TT9sQAeTa2",
218
+ to: "Agent_DiQbU6FKZ6",
219
+ },
220
+ {
221
+ type: "edge",
222
+ key: "Knowledge_PJ2H5EObqJ/Router_A1Na6n49Ri",
223
+ from: "Knowledge_PJ2H5EObqJ",
224
+ to: "Router_A1Na6n49Ri",
225
+ },
226
+ {
227
+ type: "edge",
228
+ key: "Router_A1Na6n49Ri/2syn8OhkzH/Agent_xv0UeM91O6",
229
+ from: "Router_A1Na6n49Ri/2syn8OhkzH",
230
+ to: "Agent_xv0UeM91O6",
231
+ },
232
+ {
233
+ type: "edge",
234
+ key: "Router_A1Na6n49Ri/else/Code_1uEOTXgBNQ",
235
+ from: "Router_A1Na6n49Ri/else",
236
+ to: "Code_1uEOTXgBNQ",
237
+ },
238
+ {
239
+ type: "edge",
240
+ key: "Router_Q1uTcWa1rZ/else/Answer_za0cCTiayv",
241
+ from: "Router_Q1uTcWa1rZ/else",
242
+ to: "Answer_za0cCTiayv",
243
+ },
244
+ {
245
+ type: "edge",
246
+ key: "Code_MlXFPNEphR/Router_Q1uTcWa1rZ",
247
+ from: "Code_MlXFPNEphR",
248
+ to: "Router_Q1uTcWa1rZ",
249
+ },
250
+ {
251
+ type: "edge",
252
+ key: "Code_1uEOTXgBNQ/Iterating_CsvbR5teUm",
253
+ from: "Code_1uEOTXgBNQ",
254
+ to: "Iterating_CsvbR5teUm",
255
+ },
256
+ {
257
+ type: "agent",
258
+ key: "Iterating_CsvbR5teUm/Agent_DiQbU6FKZ6",
259
+ from: "Iterating_CsvbR5teUm",
260
+ to: "Agent_DiQbU6FKZ6",
261
+ },
262
+ {
263
+ type: "edge",
264
+ key: "Iterating_CsvbR5teUm/Answer_SowVtmiosK",
265
+ from: "Iterating_CsvbR5teUm",
266
+ to: "Answer_SowVtmiosK",
267
+ },
268
+ ],
269
+ }
270
+
271
+ const key = 'Agent_xv0UeM91O6'
272
+ const workflowNodes = allChannels(graph as TXpertGraph, key)
273
+ expect(workflowNodes).toEqual(expect.arrayContaining([
274
+ 'Agent_xv0UeM91O6',
275
+ 'Knowledge_PJ2H5EObqJ',
276
+ 'Code_1uEOTXgBNQ',
277
+ 'Iterating_CsvbR5teUm',
278
+ 'Answer_SowVtmiosK',
279
+ ]))
280
+
281
+ expect(workflowNodes).toEqual(expect.not.arrayContaining(['Router_Q1uTcWa1rZ']))
282
+ })
283
+ })