@magmamath/students-features 0.2.22 → 0.3.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/commonjs/features/chatbot/components/Alternatives/Alternatives.js +8 -10
  2. package/dist/commonjs/features/chatbot/components/Alternatives/Alternatives.js.map +1 -1
  3. package/dist/commonjs/features/chatbot/components/ChatControls/ChatControls.js +6 -15
  4. package/dist/commonjs/features/chatbot/components/ChatControls/ChatControls.js.map +1 -1
  5. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageLoader.js +3 -4
  6. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageLoader.js.map +1 -1
  7. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageTextToSpeech.js +3 -2
  8. package/dist/commonjs/features/chatbot/components/ChatMessage/MessageTextToSpeech.js.map +1 -1
  9. package/dist/commonjs/features/chatbot/components/ChatMessage/ReceivedMessage.js +4 -5
  10. package/dist/commonjs/features/chatbot/components/ChatMessage/ReceivedMessage.js.map +1 -1
  11. package/dist/commonjs/features/chatbot/components/ChatMessages/ChatbotMessages.js +14 -23
  12. package/dist/commonjs/features/chatbot/components/ChatMessages/ChatbotMessages.js.map +1 -1
  13. package/dist/commonjs/features/chatbot/components/Chatbot.js +6 -9
  14. package/dist/commonjs/features/chatbot/components/Chatbot.js.map +1 -1
  15. package/dist/commonjs/features/chatbot/index.js +2 -2
  16. package/dist/commonjs/features/chatbot/index.js.map +1 -1
  17. package/dist/commonjs/features/chatbot/model/{model.js → ChatBotModel.js} +83 -117
  18. package/dist/commonjs/features/chatbot/model/ChatBotModel.js.map +1 -0
  19. package/dist/commonjs/features/chatbot/model/t2s.js +7 -4
  20. package/dist/commonjs/features/chatbot/model/t2s.js.map +1 -1
  21. package/dist/commonjs/features/chatbot/model/translation.js +15 -30
  22. package/dist/commonjs/features/chatbot/model/translation.js.map +1 -1
  23. package/dist/commonjs/features/chatbot/types/model.types.js.map +1 -1
  24. package/dist/commonjs/features/feedback/model/model.js +1 -1
  25. package/dist/commonjs/features/feedback/model/model.js.map +1 -1
  26. package/dist/commonjs/lib/effector/createEntityFieldStore.js +8 -26
  27. package/dist/commonjs/lib/effector/createEntityFieldStore.js.map +1 -1
  28. package/dist/commonjs/shared/icons/ChatbotIcon.js +106 -613
  29. package/dist/commonjs/shared/icons/ChatbotIcon.js.map +1 -1
  30. package/dist/module/features/chatbot/components/Alternatives/Alternatives.js +6 -8
  31. package/dist/module/features/chatbot/components/Alternatives/Alternatives.js.map +1 -1
  32. package/dist/module/features/chatbot/components/ChatControls/ChatControls.js +6 -15
  33. package/dist/module/features/chatbot/components/ChatControls/ChatControls.js.map +1 -1
  34. package/dist/module/features/chatbot/components/ChatMessage/MessageLoader.js +3 -4
  35. package/dist/module/features/chatbot/components/ChatMessage/MessageLoader.js.map +1 -1
  36. package/dist/module/features/chatbot/components/ChatMessage/MessageTextToSpeech.js +3 -2
  37. package/dist/module/features/chatbot/components/ChatMessage/MessageTextToSpeech.js.map +1 -1
  38. package/dist/module/features/chatbot/components/ChatMessage/ReceivedMessage.js +4 -5
  39. package/dist/module/features/chatbot/components/ChatMessage/ReceivedMessage.js.map +1 -1
  40. package/dist/module/features/chatbot/components/ChatMessages/ChatbotMessages.js +14 -23
  41. package/dist/module/features/chatbot/components/ChatMessages/ChatbotMessages.js.map +1 -1
  42. package/dist/module/features/chatbot/components/Chatbot.js +6 -9
  43. package/dist/module/features/chatbot/components/Chatbot.js.map +1 -1
  44. package/dist/module/features/chatbot/index.js +1 -1
  45. package/dist/module/features/chatbot/index.js.map +1 -1
  46. package/dist/module/features/chatbot/model/ChatBotModel.js +208 -0
  47. package/dist/module/features/chatbot/model/ChatBotModel.js.map +1 -0
  48. package/dist/module/features/chatbot/model/t2s.js +8 -5
  49. package/dist/module/features/chatbot/model/t2s.js.map +1 -1
  50. package/dist/module/features/chatbot/model/translation.js +15 -30
  51. package/dist/module/features/chatbot/model/translation.js.map +1 -1
  52. package/dist/module/features/chatbot/types/model.types.js.map +1 -1
  53. package/dist/module/features/feedback/model/model.js +1 -1
  54. package/dist/module/features/feedback/model/model.js.map +1 -1
  55. package/dist/module/lib/effector/createEntityFieldStore.js +8 -26
  56. package/dist/module/lib/effector/createEntityFieldStore.js.map +1 -1
  57. package/dist/module/shared/icons/ChatbotIcon.js +107 -614
  58. package/dist/module/shared/icons/ChatbotIcon.js.map +1 -1
  59. package/dist/typescript/commonjs/features/chatbot/components/Alternatives/Alternatives.d.ts +1 -1
  60. package/dist/typescript/commonjs/features/chatbot/components/Alternatives/Alternatives.d.ts.map +1 -1
  61. package/dist/typescript/commonjs/features/chatbot/components/ChatControls/ChatControls.d.ts +2 -6
  62. package/dist/typescript/commonjs/features/chatbot/components/ChatControls/ChatControls.d.ts.map +1 -1
  63. package/dist/typescript/commonjs/features/chatbot/components/ChatMessages/ChatbotMessages.d.ts +1 -1
  64. package/dist/typescript/commonjs/features/chatbot/components/ChatMessages/ChatbotMessages.d.ts.map +1 -1
  65. package/dist/typescript/commonjs/features/chatbot/components/Chatbot.d.ts +2 -6
  66. package/dist/typescript/commonjs/features/chatbot/components/Chatbot.d.ts.map +1 -1
  67. package/dist/typescript/commonjs/features/chatbot/index.d.ts +1 -1
  68. package/dist/typescript/commonjs/features/chatbot/index.d.ts.map +1 -1
  69. package/dist/typescript/commonjs/features/chatbot/model/{model.d.ts → ChatBotModel.d.ts} +19 -35
  70. package/dist/typescript/commonjs/features/chatbot/model/ChatBotModel.d.ts.map +1 -0
  71. package/dist/typescript/commonjs/features/chatbot/model/t2s.d.ts +1 -1
  72. package/dist/typescript/commonjs/features/chatbot/model/t2s.d.ts.map +1 -1
  73. package/dist/typescript/commonjs/features/chatbot/model/translation.d.ts +1 -1
  74. package/dist/typescript/commonjs/features/chatbot/model/translation.d.ts.map +1 -1
  75. package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts +8 -20
  76. package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts.map +1 -1
  77. package/dist/typescript/commonjs/features/chatbot/types/translation.types.d.ts +1 -5
  78. package/dist/typescript/commonjs/features/chatbot/types/translation.types.d.ts.map +1 -1
  79. package/dist/typescript/commonjs/lib/effector/createEntityFieldStore.d.ts +4 -9
  80. package/dist/typescript/commonjs/lib/effector/createEntityFieldStore.d.ts.map +1 -1
  81. package/dist/typescript/commonjs/shared/icons/ChatbotIcon.d.ts.map +1 -1
  82. package/dist/typescript/module/features/chatbot/components/Alternatives/Alternatives.d.ts +1 -1
  83. package/dist/typescript/module/features/chatbot/components/Alternatives/Alternatives.d.ts.map +1 -1
  84. package/dist/typescript/module/features/chatbot/components/ChatControls/ChatControls.d.ts +2 -6
  85. package/dist/typescript/module/features/chatbot/components/ChatControls/ChatControls.d.ts.map +1 -1
  86. package/dist/typescript/module/features/chatbot/components/ChatMessages/ChatbotMessages.d.ts +1 -1
  87. package/dist/typescript/module/features/chatbot/components/ChatMessages/ChatbotMessages.d.ts.map +1 -1
  88. package/dist/typescript/module/features/chatbot/components/Chatbot.d.ts +2 -6
  89. package/dist/typescript/module/features/chatbot/components/Chatbot.d.ts.map +1 -1
  90. package/dist/typescript/module/features/chatbot/index.d.ts +1 -1
  91. package/dist/typescript/module/features/chatbot/index.d.ts.map +1 -1
  92. package/dist/typescript/module/features/chatbot/model/{model.d.ts → ChatBotModel.d.ts} +19 -35
  93. package/dist/typescript/module/features/chatbot/model/ChatBotModel.d.ts.map +1 -0
  94. package/dist/typescript/module/features/chatbot/model/t2s.d.ts +1 -1
  95. package/dist/typescript/module/features/chatbot/model/t2s.d.ts.map +1 -1
  96. package/dist/typescript/module/features/chatbot/model/translation.d.ts +1 -1
  97. package/dist/typescript/module/features/chatbot/model/translation.d.ts.map +1 -1
  98. package/dist/typescript/module/features/chatbot/types/model.types.d.ts +8 -20
  99. package/dist/typescript/module/features/chatbot/types/model.types.d.ts.map +1 -1
  100. package/dist/typescript/module/features/chatbot/types/translation.types.d.ts +1 -5
  101. package/dist/typescript/module/features/chatbot/types/translation.types.d.ts.map +1 -1
  102. package/dist/typescript/module/lib/effector/createEntityFieldStore.d.ts +4 -9
  103. package/dist/typescript/module/lib/effector/createEntityFieldStore.d.ts.map +1 -1
  104. package/dist/typescript/module/shared/icons/ChatbotIcon.d.ts.map +1 -1
  105. package/package.json +1 -1
  106. package/src/features/chatbot/components/Alternatives/Alternatives.tsx +7 -10
  107. package/src/features/chatbot/components/ChatControls/ChatControls.tsx +5 -10
  108. package/src/features/chatbot/components/ChatMessage/MessageLoader.tsx +2 -3
  109. package/src/features/chatbot/components/ChatMessage/MessageTextToSpeech.tsx +2 -1
  110. package/src/features/chatbot/components/ChatMessage/ReceivedMessage.tsx +3 -4
  111. package/src/features/chatbot/components/ChatMessages/ChatbotMessages.tsx +15 -24
  112. package/src/features/chatbot/components/Chatbot.tsx +6 -10
  113. package/src/features/chatbot/index.ts +1 -1
  114. package/src/features/chatbot/model/ChatBotModel.ts +222 -0
  115. package/src/features/chatbot/model/t2s.ts +8 -5
  116. package/src/features/chatbot/model/translation.ts +181 -201
  117. package/src/features/chatbot/types/model.types.ts +8 -14
  118. package/src/features/chatbot/types/translation.types.ts +10 -12
  119. package/src/features/feedback/model/model.ts +1 -1
  120. package/src/lib/effector/createEntityFieldStore.ts +9 -35
  121. package/src/shared/icons/ChatbotIcon.tsx +85 -500
  122. package/dist/commonjs/features/chatbot/model/model.js.map +0 -1
  123. package/dist/module/features/chatbot/model/model.js +0 -242
  124. package/dist/module/features/chatbot/model/model.js.map +0 -1
  125. package/dist/typescript/commonjs/features/chatbot/model/model.d.ts.map +0 -1
  126. package/dist/typescript/module/features/chatbot/model/model.d.ts.map +0 -1
  127. package/src/features/chatbot/model/model.ts +0 -268
@@ -1,242 +0,0 @@
1
- "use strict";
2
-
3
- import { attach, createEvent, restore, sample } from 'effector';
4
- import { createControllerEffect, createEntityFieldStore } from "../../../lib/effector/index.js";
5
- import { generateRandomId } from "../../../lib/helpers/helpers.js";
6
- import { ChatbotAPI } from "./api.js";
7
- import { ChatbotTranslation } from "./translation.js";
8
- import { ChatTextToSpeechModel } from "./t2s.js";
9
- export class ChatbotModel {
10
- resetAlternatives = createEvent();
11
- setAlternatives = createEvent();
12
- setIsOpen = createEvent();
13
- toggleOpen = createEvent();
14
- $isOpen = restore(this.setIsOpen, false).on(this.toggleOpen, isOpen => !isOpen);
15
-
16
- // separate messages and alternatives class?
17
- removeLastMessage = createEvent();
18
- setLastMessageIds = createEvent();
19
- $lastMessageIds = restore(this.setLastMessageIds, null);
20
- setScrollActive = createEvent();
21
- $isScrollActive = restore(this.setScrollActive, false);
22
- constructor({
23
- credits,
24
- api,
25
- messages
26
- }) {
27
- this.api = new ChatbotAPI(api);
28
- this.defaultMessages = messages;
29
- this.credits = credits;
30
- this.$alternatives = restore(this.api.getAlternativesFx.doneData, null).on(this.setAlternatives, (_, payload) => payload).reset(this.resetAlternatives);
31
-
32
- // TODO: do not pass this, just what you need
33
- this.translation = new ChatbotTranslation(this);
34
- this.t2s = new ChatTextToSpeechModel({
35
- $isOpen: this.$isOpen,
36
- api: this.api
37
- });
38
- this.sendHelpRequestFx = this.createSendHelpRequestFx();
39
- this.initChatReplyWatcher();
40
- }
41
- messages = createEntityFieldStore({
42
- mapper: ({
43
- entityId,
44
- fieldId,
45
- messages
46
- }) => ({
47
- entityId,
48
- fieldId,
49
- data: {
50
- messages
51
- }
52
- })
53
- });
54
- threadIds = createEntityFieldStore({
55
- mapper: ({
56
- entityId,
57
- fieldId,
58
- threadId
59
- }) => ({
60
- entityId,
61
- fieldId,
62
- data: {
63
- threadId
64
- }
65
- })
66
- });
67
- availableChats = createEntityFieldStore({
68
- mapper: ({
69
- entityId,
70
- fieldId,
71
- isAvailable = true
72
- }) => ({
73
- entityId,
74
- fieldId,
75
- data: {
76
- isAvailable
77
- }
78
- })
79
- });
80
- createSendHelpRequestFx() {
81
- return attach({
82
- source: [this.credits.$assignmentId, this.credits.$exerciseId, this.messages.$state, this.translation.$isTranslated],
83
- mapParams: (params, [assignmentId, exerciseId, messages, isTranslated]) => ({
84
- ...params,
85
- assignmentId,
86
- exerciseId,
87
- messages,
88
- isTranslated
89
- }),
90
- effect: createControllerEffect(async ({
91
- payload,
92
- message = '',
93
- translationTargetLanguage,
94
- translatedMessage,
95
- assignmentId,
96
- exerciseId,
97
- messages,
98
- isTranslated
99
- }) => {
100
- this.setLastMessageIds({
101
- entityId: assignmentId,
102
- fieldId: exerciseId
103
- });
104
- const currentMessages = messages[assignmentId]?.[exerciseId]?.messages || [];
105
- this.messages.setField({
106
- entityId: assignmentId,
107
- fieldId: exerciseId,
108
- messages: [...currentMessages, {
109
- id: generateRandomId(),
110
- message: message ?? '',
111
- translatedMessage,
112
- isOwnMessage: true,
113
- threadId: payload.threadId ?? '',
114
- options: []
115
- }]
116
- });
117
- const response = await this.api.postMessageFx(payload);
118
- if (isTranslated) {
119
- return await this.translation.translateMessageFx({
120
- targetLanguage: translationTargetLanguage,
121
- message: {
122
- ...response,
123
- id: generateRandomId(),
124
- isOwnMessage: false
125
- }
126
- });
127
- }
128
- return response;
129
- })
130
- });
131
- }
132
- initChatReplyWatcher() {
133
- sample({
134
- clock: this.sendHelpRequestFx.doneData,
135
- source: [this.credits.$assignmentId, this.credits.$exerciseId, this.messages.$state],
136
- fn: ([assignmentId, exerciseId, messages], response) => ({
137
- assignmentId,
138
- exerciseId,
139
- messages: messages[assignmentId]?.[exerciseId]?.messages || [],
140
- response
141
- })
142
- }).watch(({
143
- assignmentId,
144
- exerciseId,
145
- messages,
146
- response
147
- }) => {
148
- this.messages.setField({
149
- entityId: assignmentId,
150
- fieldId: exerciseId,
151
- messages: [...messages, {
152
- id: generateRandomId(),
153
- message: response.message,
154
- isOwnMessage: false,
155
- threadId: response.threadId,
156
- options: response.options,
157
- translatedMessage: 'translatedMessage' in response ? response.translatedMessage : undefined
158
- }]
159
- });
160
- this.threadIds.setField({
161
- entityId: assignmentId,
162
- fieldId: exerciseId,
163
- threadId: response.threadId
164
- });
165
- });
166
- sample({
167
- clock: this.sendHelpRequestFx.fail,
168
- source: [this.credits.$assignmentId, this.credits.$exerciseId, this.messages.$state],
169
- fn: ([assignmentId, exerciseId, messages]) => ({
170
- assignmentId,
171
- exerciseId,
172
- messages: messages[assignmentId]?.[exerciseId]?.messages || []
173
- }),
174
- filter: (_, {
175
- error
176
- }) => error.message !== 'Request aborted manually'
177
- }).watch(({
178
- assignmentId,
179
- exerciseId,
180
- messages
181
- }) => {
182
- this.messages.setField({
183
- entityId: assignmentId,
184
- fieldId: exerciseId,
185
- messages: [...messages, this.defaultMessages.error]
186
- });
187
- });
188
- sample({
189
- clock: this.removeLastMessage,
190
- source: [this.$lastMessageIds, this.messages.$state],
191
- fn: ([lastMessageIds, messages]) => ({
192
- lastMessageIds,
193
- messages
194
- })
195
- }).watch(({
196
- lastMessageIds,
197
- messages
198
- }) => {
199
- if (!lastMessageIds) return;
200
- const updatedMessages = [...messages[lastMessageIds.entityId][lastMessageIds.fieldId].messages];
201
- if (updatedMessages) updatedMessages.pop();
202
- this.messages.setField({
203
- entityId: lastMessageIds.entityId,
204
- fieldId: lastMessageIds.fieldId,
205
- messages: updatedMessages
206
- });
207
- });
208
- }
209
- startConversation() {
210
- const assignmentId = this.credits.$assignmentId.getState();
211
- const exerciseId = this.credits.$exerciseId.getState();
212
- const messages = this.messages.$state.getState()[assignmentId]?.[exerciseId]?.messages ?? [];
213
- if (messages.length) return;
214
- this.messages.setField({
215
- entityId: assignmentId,
216
- fieldId: exerciseId,
217
- messages: [this.defaultMessages.start]
218
- });
219
- this.availableChats.setField({
220
- entityId: assignmentId,
221
- fieldId: exerciseId,
222
- isAvailable: true
223
- });
224
- }
225
- setHintMessage({
226
- entityId,
227
- fieldId,
228
- ...message
229
- }) {
230
- const messages = this.messages.$state.getState()?.[entityId]?.[fieldId]?.messages;
231
- if (messages?.length > 1) return;
232
- this.messages.setField({
233
- entityId,
234
- fieldId,
235
- messages: [{
236
- ...message,
237
- options: this.$alternatives.getState()?.options.hints ?? message.options
238
- }]
239
- });
240
- }
241
- }
242
- //# sourceMappingURL=model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["attach","createEvent","restore","sample","createControllerEffect","createEntityFieldStore","generateRandomId","ChatbotAPI","ChatbotTranslation","ChatTextToSpeechModel","ChatbotModel","resetAlternatives","setAlternatives","setIsOpen","toggleOpen","$isOpen","on","isOpen","removeLastMessage","setLastMessageIds","$lastMessageIds","setScrollActive","$isScrollActive","constructor","credits","api","messages","defaultMessages","$alternatives","getAlternativesFx","doneData","_","payload","reset","translation","t2s","sendHelpRequestFx","createSendHelpRequestFx","initChatReplyWatcher","mapper","entityId","fieldId","data","threadIds","threadId","availableChats","isAvailable","source","$assignmentId","$exerciseId","$state","$isTranslated","mapParams","params","assignmentId","exerciseId","isTranslated","effect","message","translationTargetLanguage","translatedMessage","currentMessages","setField","id","isOwnMessage","options","response","postMessageFx","translateMessageFx","targetLanguage","clock","fn","watch","undefined","fail","filter","error","lastMessageIds","updatedMessages","pop","startConversation","getState","length","start","setHintMessage","hints"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/model.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAGxF,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,cAAc,EAEd,mBAAmB,EACnB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGjF,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAA;AAE7C,qBAAa,YAAY;IACvB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAA;IAEnC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAE9C,QAAQ,CAAC,iBAAiB,yCAAgB;IAC1C,QAAQ,CAAC,eAAe,mEAAgD;IACxE,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAA;IAE7D,QAAQ,CAAC,SAAS,4CAAyB;IAC3C,QAAQ,CAAC,UAAU,yCAAgB;IACnC,QAAQ,CAAC,OAAO,4CAAwE;IAGxF,QAAQ,CAAC,iBAAiB,yCAAgB;IAC1C,QAAQ,CAAC,iBAAiB,qDAAkC;IAC5D,QAAQ,CAAC,eAAe,qDAAwC;IAEhE,QAAQ,CAAC,eAAe,4CAAyB;IACjD,QAAQ,CAAC,eAAe,4CAAuC;IAE/D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,mBAAmB,GAAG,mBAAmB,CAAC,CAAA;IAE7F,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAA;gBAE3C,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,iBAAiB;IAkBzD,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;MAMf;IAEF,QAAQ,CAAC,SAAS;;;;;;;;;;;;;MAMhB;IAEF,QAAQ,CAAC,cAAc;;;;;;;;;;;;;MAMrB;IAEF,OAAO,CAAC,uBAAuB;IAmE/B,OAAO,CAAC,oBAAoB;IA2ErB,iBAAiB;IAoBjB,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,mBAAmB;CAe7E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAGxF,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,cAAc,EAEd,mBAAmB,EACnB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGjF,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAA;AAE7C,qBAAa,YAAY;IACvB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAA;IACxC,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAA;IAEnC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAE9C,QAAQ,CAAC,iBAAiB,yCAAgB;IAC1C,QAAQ,CAAC,eAAe,mEAAgD;IACxE,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAA;IAE7D,QAAQ,CAAC,SAAS,4CAAyB;IAC3C,QAAQ,CAAC,UAAU,yCAAgB;IACnC,QAAQ,CAAC,OAAO,4CAAwE;IAGxF,QAAQ,CAAC,iBAAiB,yCAAgB;IAC1C,QAAQ,CAAC,iBAAiB,qDAAkC;IAC5D,QAAQ,CAAC,eAAe,qDAAwC;IAEhE,QAAQ,CAAC,eAAe,4CAAyB;IACjD,QAAQ,CAAC,eAAe,4CAAuC;IAE/D,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,mBAAmB,GAAG,mBAAmB,CAAC,CAAA;IAE7F,QAAQ,CAAC,eAAe,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAA;gBAE3C,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,iBAAiB;IAkBzD,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;MAMf;IAEF,QAAQ,CAAC,SAAS;;;;;;;;;;;;;MAMhB;IAEF,QAAQ,CAAC,cAAc;;;;;;;;;;;;;MAMrB;IAEF,OAAO,CAAC,uBAAuB;IAmE/B,OAAO,CAAC,oBAAoB;IA2ErB,iBAAiB;IAoBjB,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,EAAE,mBAAmB;CAe7E"}
@@ -1,268 +0,0 @@
1
- import { attach, createEvent, restore, sample, type Store, type Effect } from 'effector'
2
- import { createControllerEffect, createEntityFieldStore } from '../../../lib/effector'
3
-
4
- import {
5
- AvailableChatsModel,
6
- ChatbotModelProps,
7
- ChatMessagesModel,
8
- ConversationMessage,
9
- EntityIds,
10
- SendHelpParams,
11
- SendHelpProps,
12
- SetHintMessageProps,
13
- ThreadIdsModel,
14
- } from '../types/model.types'
15
- import { GetAlternativesResponse, PostMessageResponse } from '../types/api.types'
16
-
17
- import { generateRandomId } from '../../../lib/helpers/helpers'
18
- import { ChatbotAPI } from './api'
19
- import { ChatbotTranslation } from './translation'
20
- import { ChatTextToSpeechModel } from './t2s'
21
-
22
- export class ChatbotModel {
23
- readonly api: ChatbotAPI
24
- readonly translation: ChatbotTranslation
25
- readonly t2s: ChatTextToSpeechModel
26
-
27
- readonly credits: ChatbotModelProps['credits']
28
-
29
- readonly resetAlternatives = createEvent()
30
- readonly setAlternatives = createEvent<GetAlternativesResponse | null>()
31
- readonly $alternatives: Store<GetAlternativesResponse | null>
32
-
33
- readonly setIsOpen = createEvent<boolean>()
34
- readonly toggleOpen = createEvent()
35
- readonly $isOpen = restore(this.setIsOpen, false).on(this.toggleOpen, isOpen => !isOpen)
36
-
37
- // separate messages and alternatives class?
38
- readonly removeLastMessage = createEvent()
39
- readonly setLastMessageIds = createEvent<EntityIds | null>()
40
- readonly $lastMessageIds = restore(this.setLastMessageIds, null)
41
-
42
- readonly setScrollActive = createEvent<boolean>()
43
- readonly $isScrollActive = restore(this.setScrollActive, false)
44
-
45
- readonly sendHelpRequestFx: Effect<SendHelpParams, PostMessageResponse | ConversationMessage>
46
-
47
- readonly defaultMessages: ChatbotModelProps['messages']
48
-
49
- constructor({ credits, api, messages }: ChatbotModelProps) {
50
- this.api = new ChatbotAPI(api)
51
-
52
- this.defaultMessages = messages
53
- this.credits = credits
54
-
55
- this.$alternatives = restore(this.api.getAlternativesFx.doneData, null)
56
- .on(this.setAlternatives, (_, payload) => payload)
57
- .reset(this.resetAlternatives)
58
-
59
- // TODO: do not pass this, just what you need
60
- this.translation = new ChatbotTranslation(this)
61
- this.t2s = new ChatTextToSpeechModel({ $isOpen: this.$isOpen, api: this.api })
62
-
63
- this.sendHelpRequestFx = this.createSendHelpRequestFx()
64
- this.initChatReplyWatcher()
65
- }
66
-
67
- readonly messages = createEntityFieldStore({
68
- mapper: ({ entityId, fieldId, messages }: ChatMessagesModel) => ({
69
- entityId,
70
- fieldId,
71
- data: { messages },
72
- }),
73
- })
74
-
75
- readonly threadIds = createEntityFieldStore({
76
- mapper: ({ entityId, fieldId, threadId }: ThreadIdsModel) => ({
77
- entityId,
78
- fieldId,
79
- data: { threadId },
80
- }),
81
- })
82
-
83
- readonly availableChats = createEntityFieldStore({
84
- mapper: ({ entityId, fieldId, isAvailable = true }: AvailableChatsModel) => ({
85
- entityId,
86
- fieldId,
87
- data: { isAvailable },
88
- }),
89
- })
90
-
91
- private createSendHelpRequestFx() {
92
- return attach({
93
- source: [
94
- this.credits.$assignmentId,
95
- this.credits.$exerciseId,
96
- this.messages.$state,
97
- this.translation.$isTranslated,
98
- ],
99
- mapParams: (params: SendHelpParams, [assignmentId, exerciseId, messages, isTranslated]) => ({
100
- ...params,
101
- assignmentId,
102
- exerciseId,
103
- messages,
104
- isTranslated,
105
- }),
106
- effect: createControllerEffect(
107
- async ({
108
- payload,
109
- message = '',
110
- translationTargetLanguage,
111
- translatedMessage,
112
- assignmentId,
113
- exerciseId,
114
- messages,
115
- isTranslated,
116
- }: SendHelpProps) => {
117
- this.setLastMessageIds({
118
- entityId: assignmentId,
119
- fieldId: exerciseId,
120
- })
121
-
122
- const currentMessages = messages[assignmentId]?.[exerciseId]?.messages || []
123
-
124
- this.messages.setField({
125
- entityId: assignmentId,
126
- fieldId: exerciseId,
127
- messages: [
128
- ...currentMessages,
129
- {
130
- id: generateRandomId(),
131
- message: message ?? '',
132
- translatedMessage,
133
- isOwnMessage: true,
134
- threadId: payload.threadId ?? '',
135
- options: [],
136
- },
137
- ],
138
- })
139
-
140
- const response = await this.api.postMessageFx(payload)
141
- if (isTranslated) {
142
- return await this.translation.translateMessageFx({
143
- targetLanguage: translationTargetLanguage as string,
144
- message: {
145
- ...response,
146
- id: generateRandomId(),
147
- isOwnMessage: false,
148
- },
149
- })
150
- }
151
-
152
- return response
153
- },
154
- ),
155
- })
156
- }
157
-
158
- private initChatReplyWatcher() {
159
- sample({
160
- clock: this.sendHelpRequestFx.doneData,
161
- source: [this.credits.$assignmentId, this.credits.$exerciseId, this.messages.$state] as const,
162
- fn: ([assignmentId, exerciseId, messages], response) => ({
163
- assignmentId,
164
- exerciseId,
165
- messages: messages[assignmentId]?.[exerciseId]?.messages || [],
166
- response,
167
- }),
168
- }).watch(({ assignmentId, exerciseId, messages, response }) => {
169
- this.messages.setField({
170
- entityId: assignmentId,
171
- fieldId: exerciseId,
172
- messages: [
173
- ...messages,
174
- {
175
- id: generateRandomId(),
176
- message: response.message,
177
- isOwnMessage: false,
178
- threadId: response.threadId,
179
- options: response.options,
180
- translatedMessage:
181
- 'translatedMessage' in response ? response.translatedMessage : undefined,
182
- },
183
- ],
184
- })
185
-
186
- this.threadIds.setField({
187
- entityId: assignmentId,
188
- fieldId: exerciseId,
189
- threadId: response.threadId,
190
- })
191
- })
192
-
193
- sample({
194
- clock: this.sendHelpRequestFx.fail,
195
- source: [this.credits.$assignmentId, this.credits.$exerciseId, this.messages.$state] as const,
196
- fn: ([assignmentId, exerciseId, messages]) => ({
197
- assignmentId,
198
- exerciseId,
199
- messages: messages[assignmentId]?.[exerciseId]?.messages || [],
200
- }),
201
- filter: (_, { error }) => error.message !== 'Request aborted manually',
202
- }).watch(({ assignmentId, exerciseId, messages }) => {
203
- this.messages.setField({
204
- entityId: assignmentId,
205
- fieldId: exerciseId,
206
- messages: [...messages, this.defaultMessages.error],
207
- })
208
- })
209
-
210
- sample({
211
- clock: this.removeLastMessage,
212
- source: [this.$lastMessageIds, this.messages.$state] as const,
213
- fn: ([lastMessageIds, messages]) => ({
214
- lastMessageIds,
215
- messages,
216
- }),
217
- }).watch(({ lastMessageIds, messages }) => {
218
- if (!lastMessageIds) return
219
-
220
- const updatedMessages = [
221
- ...messages[lastMessageIds.entityId][lastMessageIds.fieldId].messages,
222
- ]
223
- if (updatedMessages) updatedMessages.pop()
224
-
225
- this.messages.setField({
226
- entityId: lastMessageIds.entityId,
227
- fieldId: lastMessageIds.fieldId,
228
- messages: updatedMessages,
229
- })
230
- })
231
- }
232
-
233
- public startConversation() {
234
- const assignmentId = this.credits.$assignmentId.getState()
235
- const exerciseId = this.credits.$exerciseId.getState()
236
- const messages = this.messages.$state.getState()[assignmentId]?.[exerciseId]?.messages ?? []
237
-
238
- if (messages.length) return
239
-
240
- this.messages.setField({
241
- entityId: assignmentId,
242
- fieldId: exerciseId,
243
- messages: [this.defaultMessages.start],
244
- })
245
-
246
- this.availableChats.setField({
247
- entityId: assignmentId,
248
- fieldId: exerciseId,
249
- isAvailable: true,
250
- })
251
- }
252
-
253
- public setHintMessage({ entityId, fieldId, ...message }: SetHintMessageProps) {
254
- const messages = this.messages.$state.getState()?.[entityId]?.[fieldId]?.messages
255
- if (messages?.length > 1) return
256
-
257
- this.messages.setField({
258
- entityId,
259
- fieldId,
260
- messages: [
261
- {
262
- ...message,
263
- options: this.$alternatives.getState()?.options.hints ?? message.options,
264
- },
265
- ],
266
- })
267
- }
268
- }