@neuralinnovations/dataisland-sdk 0.0.1-dev4 → 0.0.1-dev40

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 (353) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +271 -36
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +3 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/package.json +103 -0
  8. package/dist/src/appBuilder.d.ts +44 -0
  9. package/dist/src/appBuilder.d.ts.map +1 -0
  10. package/dist/src/appBuilder.js +10 -0
  11. package/dist/src/appBuilder.js.map +1 -0
  12. package/dist/src/commands/deleteUserFullCommandHandler.d.ts +7 -0
  13. package/dist/src/commands/deleteUserFullCommandHandler.d.ts.map +1 -0
  14. package/dist/src/commands/deleteUserFullCommandHandler.js +21 -0
  15. package/dist/src/commands/deleteUserFullCommandHandler.js.map +1 -0
  16. package/dist/src/commands/startCommandHandler.d.ts +7 -0
  17. package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
  18. package/dist/src/commands/startCommandHandler.js +27 -0
  19. package/dist/src/commands/startCommandHandler.js.map +1 -0
  20. package/dist/src/context.d.ts +24 -0
  21. package/dist/src/context.d.ts.map +1 -0
  22. package/dist/src/context.js +31 -0
  23. package/dist/src/context.js.map +1 -0
  24. package/dist/src/credentials.d.ts +33 -0
  25. package/dist/src/credentials.d.ts.map +1 -0
  26. package/dist/src/credentials.js +87 -0
  27. package/dist/src/credentials.js.map +1 -0
  28. package/dist/src/dataIslandApp.d.ts +50 -0
  29. package/dist/src/dataIslandApp.d.ts.map +1 -0
  30. package/dist/src/dataIslandApp.js +10 -0
  31. package/dist/src/dataIslandApp.js.map +1 -0
  32. package/dist/src/disposable.d.ts +84 -0
  33. package/dist/src/disposable.d.ts.map +1 -0
  34. package/dist/src/disposable.js +147 -0
  35. package/dist/src/disposable.js.map +1 -0
  36. package/dist/src/dto/accessGroupResponse.d.ts +30 -0
  37. package/dist/src/dto/accessGroupResponse.d.ts.map +1 -0
  38. package/dist/src/dto/accessGroupResponse.js +3 -0
  39. package/dist/src/dto/accessGroupResponse.js.map +1 -0
  40. package/dist/src/dto/badRequestResponse.d.ts +6 -0
  41. package/dist/src/dto/badRequestResponse.d.ts.map +1 -0
  42. package/dist/src/dto/badRequestResponse.js +3 -0
  43. package/dist/src/dto/badRequestResponse.js.map +1 -0
  44. package/dist/src/dto/chatResponse.d.ts +83 -0
  45. package/dist/src/dto/chatResponse.d.ts.map +1 -0
  46. package/dist/src/dto/chatResponse.js +45 -0
  47. package/dist/src/dto/chatResponse.js.map +1 -0
  48. package/dist/src/dto/limitsResponse.d.ts +29 -0
  49. package/dist/src/dto/limitsResponse.d.ts.map +1 -0
  50. package/dist/src/dto/limitsResponse.js +13 -0
  51. package/dist/src/dto/limitsResponse.js.map +1 -0
  52. package/dist/src/dto/statisticsResponse.d.ts +11 -0
  53. package/dist/src/dto/statisticsResponse.d.ts.map +1 -0
  54. package/dist/src/dto/statisticsResponse.js +3 -0
  55. package/dist/src/dto/statisticsResponse.js.map +1 -0
  56. package/dist/src/dto/userInfoResponse.d.ts +88 -0
  57. package/dist/src/dto/userInfoResponse.d.ts.map +1 -0
  58. package/dist/src/dto/userInfoResponse.js +3 -0
  59. package/dist/src/dto/userInfoResponse.js.map +1 -0
  60. package/dist/src/dto/workspacesResponse.d.ts +45 -0
  61. package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
  62. package/dist/src/dto/workspacesResponse.js +3 -0
  63. package/dist/src/dto/workspacesResponse.js.map +1 -0
  64. package/dist/src/events.d.ts +17 -0
  65. package/dist/src/events.d.ts.map +1 -0
  66. package/dist/src/events.js +52 -0
  67. package/dist/src/events.js.map +1 -0
  68. package/dist/src/index.d.ts +66 -0
  69. package/dist/src/index.d.ts.map +1 -0
  70. package/dist/src/index.js +113 -0
  71. package/dist/src/index.js.map +1 -0
  72. package/dist/src/internal/app.impl.d.ts +28 -0
  73. package/dist/src/internal/app.impl.d.ts.map +1 -0
  74. package/dist/src/internal/app.impl.js +173 -0
  75. package/dist/src/internal/app.impl.js.map +1 -0
  76. package/dist/src/internal/appBuilder.impl.d.ts +27 -0
  77. package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
  78. package/dist/src/internal/appBuilder.impl.js +71 -0
  79. package/dist/src/internal/appBuilder.impl.js.map +1 -0
  80. package/dist/src/internal/createApp.impl.d.ts +4 -0
  81. package/dist/src/internal/createApp.impl.d.ts.map +1 -0
  82. package/dist/src/internal/createApp.impl.js +11 -0
  83. package/dist/src/internal/createApp.impl.js.map +1 -0
  84. package/dist/src/internal/registry.d.ts +66 -0
  85. package/dist/src/internal/registry.d.ts.map +1 -0
  86. package/dist/src/internal/registry.js +114 -0
  87. package/dist/src/internal/registry.js.map +1 -0
  88. package/dist/src/middleware.d.ts +6 -0
  89. package/dist/src/middleware.d.ts.map +1 -0
  90. package/dist/src/middleware.js +3 -0
  91. package/dist/src/middleware.js.map +1 -0
  92. package/dist/src/services/anonymousService.d.ts +8 -0
  93. package/dist/src/services/anonymousService.d.ts.map +1 -0
  94. package/dist/src/services/anonymousService.js +41 -0
  95. package/dist/src/services/anonymousService.js.map +1 -0
  96. package/dist/src/services/commandService.d.ts +18 -0
  97. package/dist/src/services/commandService.d.ts.map +1 -0
  98. package/dist/src/services/commandService.js +40 -0
  99. package/dist/src/services/commandService.js.map +1 -0
  100. package/dist/src/services/cookieService.d.ts +7 -0
  101. package/dist/src/services/cookieService.d.ts.map +1 -0
  102. package/dist/src/services/cookieService.js +18 -0
  103. package/dist/src/services/cookieService.js.map +1 -0
  104. package/dist/src/services/credentialService.d.ts +9 -0
  105. package/dist/src/services/credentialService.d.ts.map +1 -0
  106. package/dist/src/services/credentialService.js +26 -0
  107. package/dist/src/services/credentialService.js.map +1 -0
  108. package/dist/src/services/httpMethod.d.ts +2 -0
  109. package/dist/src/services/httpMethod.d.ts.map +1 -0
  110. package/dist/src/services/httpMethod.js +3 -0
  111. package/dist/src/services/httpMethod.js.map +1 -0
  112. package/dist/src/services/middlewareService.d.ts +10 -0
  113. package/dist/src/services/middlewareService.d.ts.map +1 -0
  114. package/dist/src/services/middlewareService.js +34 -0
  115. package/dist/src/services/middlewareService.js.map +1 -0
  116. package/dist/src/services/organizationService.d.ts +10 -0
  117. package/dist/src/services/organizationService.d.ts.map +1 -0
  118. package/dist/src/services/organizationService.js +19 -0
  119. package/dist/src/services/organizationService.js.map +1 -0
  120. package/dist/src/services/requestBuilder.d.ts +17 -0
  121. package/dist/src/services/requestBuilder.d.ts.map +1 -0
  122. package/dist/src/services/requestBuilder.js +105 -0
  123. package/dist/src/services/requestBuilder.js.map +1 -0
  124. package/dist/src/services/responseUtils.d.ts +8 -0
  125. package/dist/src/services/responseUtils.d.ts.map +1 -0
  126. package/dist/src/services/responseUtils.js +40 -0
  127. package/dist/src/services/responseUtils.js.map +1 -0
  128. package/dist/src/services/rpcService.d.ts +77 -0
  129. package/dist/src/services/rpcService.d.ts.map +1 -0
  130. package/dist/src/services/rpcService.js +125 -0
  131. package/dist/src/services/rpcService.js.map +1 -0
  132. package/dist/src/services/service.d.ts +21 -0
  133. package/dist/src/services/service.d.ts.map +1 -0
  134. package/dist/src/services/service.js +41 -0
  135. package/dist/src/services/service.js.map +1 -0
  136. package/dist/src/services/userProfileService.d.ts +9 -0
  137. package/dist/src/services/userProfileService.d.ts.map +1 -0
  138. package/dist/src/services/userProfileService.js +43 -0
  139. package/dist/src/services/userProfileService.js.map +1 -0
  140. package/dist/src/storages/chats/answer.d.ts +41 -0
  141. package/dist/src/storages/chats/answer.d.ts.map +1 -0
  142. package/dist/src/storages/chats/answer.impl.d.ts +29 -0
  143. package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
  144. package/dist/src/storages/chats/answer.impl.js +116 -0
  145. package/dist/src/storages/chats/answer.impl.js.map +1 -0
  146. package/dist/src/storages/chats/answer.js +15 -0
  147. package/dist/src/storages/chats/answer.js.map +1 -0
  148. package/dist/src/storages/chats/chat.d.ts +43 -0
  149. package/dist/src/storages/chats/chat.d.ts.map +1 -0
  150. package/dist/src/storages/chats/chat.impl.d.ts +25 -0
  151. package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
  152. package/dist/src/storages/chats/chat.impl.js +85 -0
  153. package/dist/src/storages/chats/chat.impl.js.map +1 -0
  154. package/dist/src/storages/chats/chat.js +12 -0
  155. package/dist/src/storages/chats/chat.js.map +1 -0
  156. package/dist/src/storages/chats/chats.d.ts +45 -0
  157. package/dist/src/storages/chats/chats.d.ts.map +1 -0
  158. package/dist/src/storages/chats/chats.impl.d.ts +19 -0
  159. package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
  160. package/dist/src/storages/chats/chats.impl.js +147 -0
  161. package/dist/src/storages/chats/chats.impl.js.map +1 -0
  162. package/dist/src/storages/chats/chats.js +16 -0
  163. package/dist/src/storages/chats/chats.js.map +1 -0
  164. package/dist/src/storages/files/file.d.ts +47 -0
  165. package/dist/src/storages/files/file.d.ts.map +1 -0
  166. package/dist/src/storages/files/file.impl.d.ts +25 -0
  167. package/dist/src/storages/files/file.impl.d.ts.map +1 -0
  168. package/dist/src/storages/files/file.impl.js +93 -0
  169. package/dist/src/storages/files/file.impl.js.map +1 -0
  170. package/dist/src/storages/files/file.js +17 -0
  171. package/dist/src/storages/files/file.js.map +1 -0
  172. package/dist/src/storages/files/files.d.ts +39 -0
  173. package/dist/src/storages/files/files.d.ts.map +1 -0
  174. package/dist/src/storages/files/files.impl.d.ts +24 -0
  175. package/dist/src/storages/files/files.impl.d.ts.map +1 -0
  176. package/dist/src/storages/files/files.impl.js +168 -0
  177. package/dist/src/storages/files/files.impl.js.map +1 -0
  178. package/dist/src/storages/files/files.js +20 -0
  179. package/dist/src/storages/files/files.js.map +1 -0
  180. package/dist/src/storages/files/filesPage.d.ts +28 -0
  181. package/dist/src/storages/files/filesPage.d.ts.map +1 -0
  182. package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
  183. package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
  184. package/dist/src/storages/files/filesPage.impl.js +38 -0
  185. package/dist/src/storages/files/filesPage.impl.js.map +1 -0
  186. package/dist/src/storages/files/filesPage.js +10 -0
  187. package/dist/src/storages/files/filesPage.js.map +1 -0
  188. package/dist/src/storages/groups/group.d.ts +63 -0
  189. package/dist/src/storages/groups/group.d.ts.map +1 -0
  190. package/dist/src/storages/groups/group.impl.d.ts +38 -0
  191. package/dist/src/storages/groups/group.impl.d.ts.map +1 -0
  192. package/dist/src/storages/groups/group.impl.js +210 -0
  193. package/dist/src/storages/groups/group.impl.js.map +1 -0
  194. package/dist/src/storages/groups/group.js +15 -0
  195. package/dist/src/storages/groups/group.js.map +1 -0
  196. package/dist/src/storages/groups/groups.d.ts +39 -0
  197. package/dist/src/storages/groups/groups.d.ts.map +1 -0
  198. package/dist/src/storages/groups/groups.impl.d.ts +30 -0
  199. package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
  200. package/dist/src/storages/groups/groups.impl.js +132 -0
  201. package/dist/src/storages/groups/groups.impl.js.map +1 -0
  202. package/dist/src/storages/groups/groups.js +20 -0
  203. package/dist/src/storages/groups/groups.js.map +1 -0
  204. package/dist/src/storages/organizations/organization.d.ts +95 -0
  205. package/dist/src/storages/organizations/organization.d.ts.map +1 -0
  206. package/dist/src/storages/organizations/organization.impl.d.ts +42 -0
  207. package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
  208. package/dist/src/storages/organizations/organization.impl.js +240 -0
  209. package/dist/src/storages/organizations/organization.impl.js.map +1 -0
  210. package/dist/src/storages/organizations/organization.js +18 -0
  211. package/dist/src/storages/organizations/organization.js.map +1 -0
  212. package/dist/src/storages/organizations/organizations.d.ts +46 -0
  213. package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
  214. package/dist/src/storages/organizations/organizations.impl.d.ts +38 -0
  215. package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
  216. package/dist/src/storages/organizations/organizations.impl.js +158 -0
  217. package/dist/src/storages/organizations/organizations.impl.js.map +1 -0
  218. package/dist/src/storages/organizations/organizations.js +20 -0
  219. package/dist/src/storages/organizations/organizations.js.map +1 -0
  220. package/dist/src/storages/user/userProfile.d.ts +54 -0
  221. package/dist/src/storages/user/userProfile.d.ts.map +1 -0
  222. package/dist/src/storages/user/userProfile.impl.d.ts +21 -0
  223. package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
  224. package/dist/src/storages/user/userProfile.impl.js +114 -0
  225. package/dist/src/storages/user/userProfile.impl.js.map +1 -0
  226. package/dist/src/storages/user/userProfile.js +12 -0
  227. package/dist/src/storages/user/userProfile.js.map +1 -0
  228. package/dist/src/storages/workspaces/workspace.d.ts +44 -0
  229. package/dist/src/storages/workspaces/workspace.d.ts.map +1 -0
  230. package/dist/src/storages/workspaces/workspace.impl.d.ts +23 -0
  231. package/dist/src/storages/workspaces/workspace.impl.d.ts.map +1 -0
  232. package/dist/src/storages/workspaces/workspace.impl.js +98 -0
  233. package/dist/src/storages/workspaces/workspace.impl.js.map +1 -0
  234. package/dist/src/storages/workspaces/workspace.js +18 -0
  235. package/dist/src/storages/workspaces/workspace.js.map +1 -0
  236. package/dist/src/storages/workspaces/workspaces.d.ts +47 -0
  237. package/dist/src/storages/workspaces/workspaces.d.ts.map +1 -0
  238. package/dist/src/storages/workspaces/workspaces.impl.d.ts +33 -0
  239. package/dist/src/storages/workspaces/workspaces.impl.d.ts.map +1 -0
  240. package/dist/src/storages/workspaces/workspaces.impl.js +152 -0
  241. package/dist/src/storages/workspaces/workspaces.impl.js.map +1 -0
  242. package/dist/src/storages/workspaces/workspaces.js +19 -0
  243. package/dist/src/storages/workspaces/workspaces.js.map +1 -0
  244. package/dist/src/unitTest.d.ts +12 -0
  245. package/dist/src/unitTest.d.ts.map +1 -0
  246. package/dist/src/unitTest.js +44 -0
  247. package/dist/src/unitTest.js.map +1 -0
  248. package/dist/src/utils/browserUtils.d.ts +4 -0
  249. package/dist/src/utils/browserUtils.d.ts.map +1 -0
  250. package/dist/src/utils/browserUtils.js +64 -0
  251. package/dist/src/utils/browserUtils.js.map +1 -0
  252. package/dist/src/utils/request.d.ts +6 -0
  253. package/dist/src/utils/request.d.ts.map +1 -0
  254. package/dist/src/utils/request.js +3 -0
  255. package/dist/src/utils/request.js.map +1 -0
  256. package/dist/src/utils/utils.d.ts +3 -0
  257. package/dist/src/utils/utils.d.ts.map +1 -0
  258. package/dist/src/utils/utils.js +13 -0
  259. package/dist/src/utils/utils.js.map +1 -0
  260. package/index.d.ts +1 -0
  261. package/index.js +1 -0
  262. package/package.json +46 -5
  263. package/src/commands/deleteUserFullCommandHandler.ts +19 -0
  264. package/src/commands/startCommandHandler.ts +16 -5
  265. package/src/context.ts +4 -2
  266. package/src/credentials.ts +22 -0
  267. package/src/{appSdk.ts → dataIslandApp.ts} +3 -3
  268. package/src/disposable.ts +18 -5
  269. package/src/dto/accessGroupResponse.ts +19 -16
  270. package/src/dto/badRequestResponse.ts +6 -0
  271. package/src/dto/chatResponse.ts +59 -54
  272. package/src/dto/limitsResponse.ts +33 -0
  273. package/src/dto/statisticsResponse.ts +12 -0
  274. package/src/dto/userInfoResponse.ts +59 -2
  275. package/src/dto/workspacesResponse.ts +5 -3
  276. package/src/index.ts +46 -24
  277. package/src/internal/app.impl.ts +42 -9
  278. package/src/internal/createApp.impl.ts +4 -4
  279. package/src/internal/registry.ts +54 -6
  280. package/src/middleware.ts +2 -0
  281. package/src/services/anonymousService.ts +43 -0
  282. package/src/services/commandService.ts +4 -2
  283. package/src/services/cookieService.ts +16 -0
  284. package/src/services/httpMethod.ts +1 -0
  285. package/src/services/middlewareService.ts +1 -0
  286. package/src/services/organizationService.ts +2 -2
  287. package/src/services/requestBuilder.ts +10 -8
  288. package/src/services/responseUtils.ts +12 -0
  289. package/src/services/rpcService.ts +1 -0
  290. package/src/services/userProfileService.ts +18 -4
  291. package/src/storages/chats/answer.impl.ts +160 -0
  292. package/src/storages/chats/answer.ts +53 -0
  293. package/src/storages/chats/chat.impl.ts +107 -0
  294. package/src/storages/chats/chat.ts +55 -0
  295. package/src/storages/chats/chats.impl.ts +204 -0
  296. package/src/storages/chats/chats.ts +53 -0
  297. package/src/storages/files/file.impl.ts +111 -0
  298. package/src/storages/files/file.ts +58 -0
  299. package/src/storages/{files.impl.ts → files/files.impl.ts} +67 -46
  300. package/src/storages/{files.ts → files/files.ts} +14 -7
  301. package/src/storages/files/filesPage.impl.ts +37 -0
  302. package/src/storages/{filesPage.ts → files/filesPage.ts} +6 -0
  303. package/src/storages/groups/group.impl.ts +276 -0
  304. package/src/storages/groups/group.ts +73 -0
  305. package/src/storages/groups/groups.impl.ts +175 -0
  306. package/src/storages/groups/groups.ts +45 -0
  307. package/src/storages/organizations/organization.impl.ts +357 -0
  308. package/src/storages/organizations/organization.ts +118 -0
  309. package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +31 -13
  310. package/src/storages/{organizations.ts → organizations/organizations.ts} +1 -1
  311. package/src/storages/user/userProfile.impl.ts +136 -0
  312. package/src/storages/user/userProfile.ts +69 -0
  313. package/src/storages/{workspace.impl.ts → workspaces/workspace.impl.ts} +27 -7
  314. package/src/storages/{workspace.ts → workspaces/workspace.ts} +8 -3
  315. package/src/storages/{workspaces.impl.ts → workspaces/workspaces.impl.ts} +27 -32
  316. package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
  317. package/src/unitTest.ts +14 -3
  318. package/src/utils/browserUtils.ts +68 -0
  319. package/src/utils/request.ts +6 -0
  320. package/src/utils/utils.ts +8 -0
  321. package/.browserslistrc +0 -5
  322. package/.editorconfig +0 -25
  323. package/.eslintrc.json +0 -44
  324. package/.github/workflows/publish-npm.yml +0 -28
  325. package/.prettierignore +0 -1
  326. package/.prettierrc +0 -11
  327. package/.yarnrc +0 -2
  328. package/babel.config.js +0 -6
  329. package/jest.config.ts +0 -199
  330. package/jest.setup.ts +0 -2
  331. package/src/storages/chat.ts +0 -21
  332. package/src/storages/chats.ts +0 -17
  333. package/src/storages/file.impl.ts +0 -69
  334. package/src/storages/file.ts +0 -28
  335. package/src/storages/groups.impl.ts +0 -337
  336. package/src/storages/groups.ts +0 -43
  337. package/src/storages/organization.impl.ts +0 -68
  338. package/src/storages/organization.ts +0 -33
  339. package/src/storages/userProfile.impl.ts +0 -56
  340. package/src/storages/userProfile.ts +0 -42
  341. package/test/commands.test.ts +0 -24
  342. package/test/data/test_file.pdf +0 -0
  343. package/test/disposable.test.ts +0 -39
  344. package/test/events.test.ts +0 -151
  345. package/test/files.test.ts +0 -52
  346. package/test/index.test.ts +0 -122
  347. package/test/organization.test.ts +0 -57
  348. package/test/registry.test.ts +0 -44
  349. package/test/services.test.ts +0 -56
  350. package/test/setup.ts +0 -54
  351. package/test/unitTest.test.ts +0 -21
  352. package/test/workspace.test.ts +0 -71
  353. package/tsconfig.json +0 -31
@@ -0,0 +1,160 @@
1
+ import { Context } from "../../context"
2
+ import {
3
+ AnswerDto,
4
+ AnswerStatus,
5
+ AnswerStepDto,
6
+ FetchAnswerResponse,
7
+ SourceDto,
8
+ StepType
9
+ } from "../../dto/chatResponse"
10
+ import { ResponseUtils } from "../../services/responseUtils"
11
+ import { RpcService } from "../../services/rpcService"
12
+ import { Answer, AnswerEvent, AnswerId } from "./answer"
13
+ import { Chat } from "./chat"
14
+
15
+ export class AnswerImpl extends Answer {
16
+
17
+ private _steps?: AnswerStepDto[]
18
+ private _status?: AnswerStatus
19
+ private _id?: AnswerId
20
+ private _question?: string
21
+ private _sources?: SourceDto[]
22
+ private _answer?: string
23
+ private _timestamp?: number
24
+
25
+ constructor(
26
+ private readonly chat: Chat,
27
+ private readonly context: Context) {
28
+ super()
29
+ }
30
+
31
+ initFromHistory(answer: AnswerDto): AnswerImpl {
32
+ this._id = answer.id
33
+ this._question = answer.question
34
+ this._answer = answer.context
35
+ this._sources = answer.sources
36
+ this._timestamp = answer.timestamp
37
+
38
+ return this
39
+ }
40
+
41
+ async initNew(id: AnswerId, question: string): Promise<AnswerImpl> {
42
+ this._id = id
43
+ this._question = question
44
+ this._answer = ""
45
+
46
+ await this.fetch()
47
+
48
+ return this
49
+ }
50
+
51
+ get id(): AnswerId {
52
+ return <AnswerId>this._id
53
+ }
54
+
55
+ get status(): AnswerStatus {
56
+ return <AnswerStatus>this._status
57
+ }
58
+
59
+ get question(): string {
60
+ return <string>this._question
61
+ }
62
+
63
+ get sources(): SourceDto[] {
64
+ return <SourceDto[]>this._sources
65
+ }
66
+
67
+ get tokens(): string {
68
+ return <string>this._answer
69
+ }
70
+
71
+ get timestamp(): number {
72
+ return <number>this._timestamp
73
+ }
74
+
75
+ public fetchAfter() {
76
+ if (this._status === undefined || this._status === AnswerStatus.RUNNING) {
77
+ setTimeout(async () => await this.fetch(), 300)
78
+ }
79
+ }
80
+
81
+ private getStep(type: StepType): AnswerStepDto | undefined {
82
+ return this._steps?.find(step => step.type === type)
83
+ }
84
+
85
+ async fetch(): Promise<void> {
86
+ // fetch answer from position 0
87
+ const position = 0
88
+ // fetch answer
89
+ const response = await this.context
90
+ .resolve(RpcService)
91
+ ?.requestBuilder("api/v1/Chats/answer/fetch")
92
+ .searchParam("chatId", this.chat.id)
93
+ .searchParam("questionId", this.id)
94
+ .searchParam("position", position.toString())
95
+ .sendGet()
96
+
97
+ // check response status
98
+ if (ResponseUtils.isFail(response)) {
99
+ await ResponseUtils.throwError(`Failed to fetch answer ${this.id}`, response)
100
+ }
101
+
102
+ // parse answer from the server's response
103
+ const answer = (await response!.json()) as FetchAnswerResponse
104
+
105
+ // update answer
106
+ this._status = <AnswerStatus>answer.status
107
+ this._steps = <AnswerStepDto[]>answer.steps
108
+
109
+ if (this.getStep(StepType.GENERATE_ANSWER) !== undefined) {
110
+ const step = this.getStep(StepType.GENERATE_ANSWER)
111
+ const step_tokens = step?.tokens.join("")
112
+ if (this._answer !== step_tokens) {
113
+ this._answer = step_tokens
114
+
115
+ this.dispatch({
116
+ type: AnswerEvent.UPDATED,
117
+ data: this
118
+ })
119
+ }
120
+ }
121
+
122
+ if (this.getStep(StepType.SOURCES) !== undefined && this._sources === undefined) {
123
+ const sources_step = this.getStep(StepType.SOURCES)
124
+ this._sources = sources_step?.sources
125
+
126
+ this.dispatch({
127
+ type: AnswerEvent.UPDATED,
128
+ data: this
129
+ })
130
+ }
131
+
132
+ if (this.getStep(StepType.DONE) !== undefined) {
133
+ const step = this.getStep(StepType.DONE)
134
+ this._timestamp = Date.parse(step!.end_at)
135
+ }
136
+
137
+ this.fetchAfter()
138
+ }
139
+
140
+ async cancel(): Promise<void> {
141
+ // send request to the server
142
+ const response = await this.context
143
+ .resolve(RpcService)
144
+ ?.requestBuilder("api/v1/Chats/answer/cancel")
145
+ .sendPutJson({
146
+ chat_id: this.chat.id,
147
+ uid: this.id
148
+ })
149
+
150
+ // check response status
151
+ if (ResponseUtils.isFail(response)) {
152
+ await ResponseUtils.throwError("Failed to cancel a question", response)
153
+ }
154
+
155
+ this.dispatch({
156
+ type: AnswerEvent.CANCALLED,
157
+ data: this
158
+ })
159
+ }
160
+ }
@@ -0,0 +1,53 @@
1
+ import {
2
+ AnswerStatus,
3
+ SourceDto
4
+ } from "../../dto/chatResponse"
5
+ import { EventDispatcher } from "../../events"
6
+
7
+ export type AnswerId = string
8
+ export type StepId = string
9
+
10
+ export enum AnswerEvent {
11
+ ADDED = "added",
12
+ CANCALLED = "cancelled",
13
+ FAILED = "failed",
14
+ UPDATED = "updated"
15
+ }
16
+
17
+ export abstract class Answer extends EventDispatcher<AnswerEvent, Answer> {
18
+
19
+ /**
20
+ * Answer id.
21
+ */
22
+ abstract get id(): AnswerId
23
+
24
+ /**
25
+ * Answer data object
26
+ */
27
+ abstract get question(): string
28
+
29
+ /**
30
+ * Answer tokens
31
+ */
32
+ abstract get tokens(): string
33
+
34
+ /**
35
+ * Answer status.
36
+ */
37
+ abstract get status(): AnswerStatus
38
+
39
+ /**
40
+ * Answer sources.
41
+ */
42
+ abstract get sources(): SourceDto[]
43
+
44
+ /**
45
+ * Answer time.
46
+ */
47
+ abstract get timestamp(): number
48
+
49
+ /**
50
+ * Cancel answer
51
+ */
52
+ abstract cancel(): Promise<void>
53
+ }
@@ -0,0 +1,107 @@
1
+ import { Chat, ChatAnswerType } from "./chat"
2
+ import { Disposable } from "../../disposable"
3
+ import { Answer, AnswerId } from "./answer"
4
+ import { ChatDto } from "../../dto/chatResponse"
5
+ import { Context } from "../../context"
6
+ import { AnswerImpl } from "./answer.impl"
7
+ import { RpcService } from "../../services/rpcService"
8
+ import { ResponseUtils } from "../../services/responseUtils"
9
+ import { Organization } from "../organizations/organization"
10
+
11
+ export class ChatImpl extends Chat implements Disposable {
12
+ private _isDisposed: boolean = false
13
+ private readonly _answers: AnswerImpl[] = []
14
+
15
+ private _content?: ChatDto
16
+
17
+ constructor(
18
+ private readonly context: Context,
19
+ public readonly organization: Organization
20
+ ) {
21
+ super()
22
+ }
23
+
24
+ async initFrom(chat: ChatDto): Promise<ChatImpl> {
25
+ this._content = chat
26
+
27
+ // init answers
28
+ for (const ans of chat.answers) {
29
+ // create answer implementation
30
+ const answer = new AnswerImpl(this, this.context).initFromHistory(ans)
31
+
32
+ // add answer to the collection
33
+ this._answers.push(answer)
34
+ }
35
+
36
+ return this
37
+ }
38
+
39
+ get id(): string {
40
+ return <string>this._content?.id
41
+ }
42
+
43
+ get name(): string {
44
+ return <string>this._content?.name
45
+ }
46
+
47
+ get fileId(): string {
48
+ return <string>this._content?.fileId
49
+ }
50
+
51
+ get model(): string {
52
+ return <string>this._content?.model
53
+ }
54
+
55
+ get collection(): readonly Answer[] {
56
+ return <Answer[]>this._answers
57
+ }
58
+
59
+ get isDisposed(): boolean {
60
+ return this._isDisposed
61
+ }
62
+
63
+ public getAnswer(id: AnswerId): Answer {
64
+ const answer = this._answers.find(answer => answer.id === id)
65
+ if (answer) {
66
+ return answer
67
+ }
68
+ throw new Error(`Answer with id ${id} is not found`)
69
+ }
70
+
71
+ async ask(message: string, answerType: ChatAnswerType): Promise<Answer | undefined> {
72
+
73
+ // send request to the server
74
+ const response = await this.context
75
+ .resolve(RpcService)
76
+ ?.requestBuilder("api/v1/Chats/question")
77
+ .sendPutJson({
78
+ chatId: this.id,
79
+ questionMessage: message,
80
+ isLongAnswer: (answerType === ChatAnswerType.LONG)
81
+ })
82
+
83
+ // check response status
84
+ if (ResponseUtils.isFail(response)) {
85
+ if (await ResponseUtils.isLimitReached()){
86
+ return undefined
87
+ }
88
+ await ResponseUtils.throwError(`Failed to ask a question, organization: ${this.organization.id}`, response)
89
+ }
90
+
91
+ // parse answer id from the server's response
92
+ const id = (await response!.json() as { id: string }).id
93
+
94
+ // create answer implementation
95
+ const answer = await new AnswerImpl(this, this.context).initNew(id, message)
96
+
97
+ // add answer to the collection
98
+ this._answers.push(answer)
99
+
100
+ return answer
101
+ }
102
+
103
+ dispose(): void {
104
+ this._isDisposed = true
105
+ }
106
+
107
+ }
@@ -0,0 +1,55 @@
1
+ import { Answer } from "./answer"
2
+ import { Organization } from "../organizations/organization"
3
+
4
+ export type ChatId = string
5
+
6
+ export enum ChatAnswerType {
7
+ SHORT = "short",
8
+ LONG = "long"
9
+ }
10
+
11
+ export abstract class Chat {
12
+
13
+ /**
14
+ * Organization.
15
+ */
16
+ abstract get organization(): Organization
17
+
18
+ /**
19
+ * Chat id.
20
+ */
21
+ abstract get id(): ChatId
22
+
23
+ /**
24
+ * Chat name.
25
+ */
26
+ abstract get name(): string
27
+
28
+ /**
29
+ * Connected file ID.
30
+ */
31
+ abstract get fileId(): string
32
+
33
+ /**
34
+ * Model.
35
+ */
36
+ abstract get model(): string
37
+
38
+ /**
39
+ * Answers list.
40
+ */
41
+ abstract get collection(): ReadonlyArray<Answer>
42
+
43
+ /**
44
+ * Get answer by id
45
+ * @param id answer id
46
+ */
47
+ abstract getAnswer(id: string): Answer
48
+
49
+ /**
50
+ * Ask new question in chat.
51
+ */
52
+ abstract ask(message: string, answerType: ChatAnswerType): Promise<Answer | undefined>
53
+
54
+ }
55
+
@@ -0,0 +1,204 @@
1
+ import { Context } from "../../context"
2
+ import { ChatDto, ChatListResponse } from "../../dto/chatResponse"
3
+ import { ResponseUtils } from "../../services/responseUtils"
4
+ import { RpcService } from "../../services/rpcService"
5
+ import { OrganizationImpl } from "../organizations/organization.impl"
6
+ import { OrganizationId } from "../organizations/organizations"
7
+ import { Chat } from "./chat"
8
+ import { ChatImpl } from "./chat.impl"
9
+ import { Chats, ChatsEvent } from "./chats"
10
+
11
+ export class ChatsImpl extends Chats {
12
+ private readonly _chats: Chat[] = []
13
+
14
+ constructor(
15
+ public readonly organization: OrganizationImpl,
16
+ private readonly context: Context
17
+ ) {
18
+ super()
19
+ }
20
+
21
+ async initFrom(organizationId: OrganizationId): Promise<void> {
22
+ // init chats from the server's response
23
+ const limit = 100
24
+ const page = 0
25
+ const response = await this.context
26
+ .resolve(RpcService)
27
+ ?.requestBuilder("api/v1/Chats/list")
28
+ .searchParam("organizationId", organizationId)
29
+ .searchParam("limit", limit.toString())
30
+ .searchParam("page", page.toString())
31
+ .sendGet()
32
+
33
+ // check response status
34
+ if (ResponseUtils.isFail(response)) {
35
+ await ResponseUtils.throwError(
36
+ `Chats list org id:${organizationId}, page:${page}, limit:${limit}, failed`,
37
+ response
38
+ )
39
+ }
40
+
41
+ // parse chats from the server's response
42
+ const chats = (await response!.json()) as ChatListResponse
43
+
44
+ // init chats
45
+ for (const cht of chats.chats) {
46
+ // create chat implementation
47
+ const chat = await new ChatImpl(this.context, this.organization).initFrom(cht)
48
+
49
+ // add chat to the collection
50
+ this._chats.push(chat)
51
+
52
+ // dispatch event
53
+ this.dispatch({
54
+ type: ChatsEvent.ADDED,
55
+ data: chat
56
+ })
57
+ }
58
+
59
+ }
60
+
61
+ get collection(): readonly Chat[] {
62
+ return this._chats
63
+ }
64
+
65
+ get(id: string): Chat {
66
+ return <Chat>this.tryGet(id)
67
+ }
68
+
69
+ tryGet(id: string): Chat | undefined {
70
+ return this._chats.find(chat => chat.id === id)
71
+ }
72
+
73
+ async create(model: string): Promise<Chat | undefined> {
74
+ if (model === undefined || model === null) {
75
+ throw new Error("Create chat, model is undefined or null")
76
+ }
77
+
78
+ if (model.length === 0) {
79
+ throw new Error("Create chat, model is empty")
80
+ }
81
+
82
+ // send create request to the server
83
+ const response = await this.context
84
+ .resolve(RpcService)
85
+ ?.requestBuilder("api/v1/Chats/workspaces")
86
+ .sendPostJson({ organizationId: this.organization.id, model: model })
87
+
88
+ // check response status
89
+ if (ResponseUtils.isFail(response)) {
90
+ if (await ResponseUtils.isLimitReached()){
91
+ return undefined
92
+ }
93
+
94
+ await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
95
+ }
96
+
97
+ // parse workspace from the server's response
98
+ const content = (await response!.json() as {
99
+ chat: ChatDto
100
+ }).chat as ChatDto
101
+
102
+ // create workspace implementation
103
+ const chat = new ChatImpl(this.context, this.organization)
104
+ await chat.initFrom(content)
105
+
106
+ // add chat to the collection
107
+ this._chats.push(chat)
108
+
109
+ // dispatch event
110
+ this.dispatch({
111
+ type: ChatsEvent.ADDED,
112
+ data: chat
113
+ })
114
+
115
+ return chat
116
+ }
117
+
118
+ async createWithFile(fileId: string): Promise<Chat | undefined> {
119
+ if (fileId === undefined || fileId === null) {
120
+ throw new Error("Create chat with file, id is undefined or null")
121
+ }
122
+ if (fileId.length === 0 || fileId.trim().length === 0) {
123
+ throw new Error("Create chat with file, id is empty")
124
+ }
125
+
126
+ // send create request to the server
127
+ const response = await this.context
128
+ .resolve(RpcService)
129
+ ?.requestBuilder("api/v1/Chats/file")
130
+ .sendPostJson({
131
+ organizationId: this.organization.id,
132
+ fileId: fileId,
133
+ model: "search"
134
+ })
135
+
136
+ // check response status
137
+ if (ResponseUtils.isFail(response)) {
138
+ if (await ResponseUtils.isLimitReached()){
139
+ return undefined
140
+ }
141
+
142
+ await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
143
+ }
144
+
145
+ // parse workspace from the server's response
146
+ const content = (await response!.json() as {
147
+ chat: ChatDto
148
+ }).chat as ChatDto
149
+
150
+ // create workspace implementation
151
+ const chat = new ChatImpl(this.context, this.organization)
152
+ await chat.initFrom(content)
153
+
154
+ // add chat to the collection
155
+ this._chats.push(chat)
156
+
157
+ // dispatch event
158
+ this.dispatch({
159
+ type: ChatsEvent.ADDED,
160
+ data: chat
161
+ })
162
+
163
+ return chat
164
+ }
165
+
166
+
167
+ async delete(id: string): Promise<void> {
168
+ // get chat by id
169
+ const chat = <ChatImpl>this.tryGet(id)
170
+
171
+ // check if chat is found
172
+ if (!chat) {
173
+ throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
174
+ }
175
+
176
+ // send delete request to the server
177
+ const response = await this.context
178
+ .resolve(RpcService)
179
+ ?.requestBuilder("api/v1/Chats")
180
+ .searchParam("id", id)
181
+ .sendDelete()
182
+
183
+ // check response status
184
+ if (ResponseUtils.isFail(response)) {
185
+ await ResponseUtils.throwError(
186
+ `Failed to delete chat: ${id}, organization: ${this.organization.id}`,
187
+ response
188
+ )
189
+ }
190
+
191
+ // remove chat from the collection
192
+ const index = this._chats.indexOf(<ChatImpl>chat)
193
+ if (index < 0) {
194
+ throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
195
+ }
196
+ this._chats.splice(index, 1)
197
+
198
+ // dispatch event
199
+ this.dispatch({
200
+ type: ChatsEvent.REMOVED,
201
+ data: chat
202
+ })
203
+ }
204
+ }
@@ -0,0 +1,53 @@
1
+ import { EventDispatcher } from "../../events"
2
+ import { Chat, ChatId } from "./chat"
3
+ import { Organization } from "../organizations/organization"
4
+
5
+ export enum ChatsEvent {
6
+ ADDED = "added",
7
+ REMOVED = "removed"
8
+ }
9
+
10
+ /**
11
+ * Chats storage.
12
+ */
13
+ export abstract class Chats extends EventDispatcher<ChatsEvent, Chat> {
14
+
15
+ /**
16
+ * Organization.
17
+ */
18
+ abstract get organization(): Organization
19
+
20
+ /**
21
+ * Chats list.
22
+ */
23
+ abstract get collection(): ReadonlyArray<Chat>
24
+
25
+ /**
26
+ * Create new chat.
27
+ */
28
+ abstract create(model: string): Promise<Chat | undefined>
29
+
30
+ /**
31
+ * Create chat with specific file
32
+ * @param fileId
33
+ */
34
+ abstract createWithFile(fileId: string): Promise<Chat | undefined>
35
+
36
+ /**
37
+ * Get chat by id.
38
+ * @param id
39
+ */
40
+ abstract get(id: ChatId): Chat
41
+
42
+ /**
43
+ * Try to get chat by id.
44
+ * @param id
45
+ */
46
+ abstract tryGet(id: ChatId): Chat | undefined
47
+
48
+ /**
49
+ * Delete chat.
50
+ * @param id
51
+ */
52
+ abstract delete(id: ChatId): Promise<void>
53
+ }