@magmamath/students-features 0.3.0-rc.13 → 0.3.0-rc.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/features/chatbot/components/Alternatives/Alternatives.js +1 -1
- package/dist/commonjs/features/chatbot/components/Alternatives/Alternatives.js.map +1 -1
- package/dist/commonjs/features/chatbot/components/ChatControls/ChatControls.js +1 -1
- package/dist/commonjs/features/chatbot/components/ChatControls/ChatControls.js.map +1 -1
- package/dist/commonjs/features/chatbot/components/Chatbot.js +1 -1
- package/dist/commonjs/features/chatbot/components/Chatbot.js.map +1 -1
- package/dist/commonjs/features/chatbot/model/ChatBotModel.js +34 -60
- package/dist/commonjs/features/chatbot/model/ChatBotModel.js.map +1 -1
- package/dist/commonjs/features/chatbot/model/api.js.map +1 -1
- package/dist/commonjs/features/chatbot/model/messagesHelper.js +46 -0
- package/dist/commonjs/features/chatbot/model/messagesHelper.js.map +1 -0
- package/dist/commonjs/features/chatbot/model/translation.helpers.js +62 -0
- package/dist/commonjs/features/chatbot/model/translation.helpers.js.map +1 -0
- package/dist/commonjs/features/chatbot/model/translation.js +94 -130
- package/dist/commonjs/features/chatbot/model/translation.js.map +1 -1
- package/dist/commonjs/features/chatbot/types/model.types.js.map +1 -1
- package/dist/commonjs/index.js +9 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/lib/helpers/types.js +2 -0
- package/dist/commonjs/lib/helpers/types.js.map +1 -0
- package/dist/module/features/chatbot/components/Alternatives/Alternatives.js +1 -1
- package/dist/module/features/chatbot/components/Alternatives/Alternatives.js.map +1 -1
- package/dist/module/features/chatbot/components/ChatControls/ChatControls.js +1 -1
- package/dist/module/features/chatbot/components/ChatControls/ChatControls.js.map +1 -1
- package/dist/module/features/chatbot/components/Chatbot.js +1 -1
- package/dist/module/features/chatbot/components/Chatbot.js.map +1 -1
- package/dist/module/features/chatbot/index.js.map +1 -1
- package/dist/module/features/chatbot/model/ChatBotModel.js +34 -60
- package/dist/module/features/chatbot/model/ChatBotModel.js.map +1 -1
- package/dist/module/features/chatbot/model/api.js.map +1 -1
- package/dist/module/features/chatbot/model/messagesHelper.js +41 -0
- package/dist/module/features/chatbot/model/messagesHelper.js.map +1 -0
- package/dist/module/features/chatbot/model/translation.helpers.js +57 -0
- package/dist/module/features/chatbot/model/translation.helpers.js.map +1 -0
- package/dist/module/features/chatbot/model/translation.js +95 -131
- package/dist/module/features/chatbot/model/translation.js.map +1 -1
- package/dist/module/features/chatbot/types/model.types.js.map +1 -1
- package/dist/module/index.js +1 -0
- package/dist/module/index.js.map +1 -1
- package/dist/module/lib/helpers/types.js +2 -0
- package/dist/module/lib/helpers/types.js.map +1 -0
- package/dist/typescript/commonjs/features/chatbot/index.d.ts +1 -1
- package/dist/typescript/commonjs/features/chatbot/index.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/model/ChatBotModel.d.ts +6 -6
- package/dist/typescript/commonjs/features/chatbot/model/ChatBotModel.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/model/api.d.ts +5 -7
- package/dist/typescript/commonjs/features/chatbot/model/api.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/model/messagesHelper.d.ts +21 -0
- package/dist/typescript/commonjs/features/chatbot/model/messagesHelper.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/chatbot/model/translation.d.ts +9 -9
- package/dist/typescript/commonjs/features/chatbot/model/translation.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/model/translation.helpers.d.ts +20 -0
- package/dist/typescript/commonjs/features/chatbot/model/translation.helpers.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts +4 -0
- package/dist/typescript/commonjs/features/chatbot/types/model.types.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/types/translation.types.d.ts +19 -4
- package/dist/typescript/commonjs/features/chatbot/types/translation.types.d.ts.map +1 -1
- package/dist/typescript/commonjs/index.d.ts +1 -0
- package/dist/typescript/commonjs/index.d.ts.map +1 -1
- package/dist/typescript/commonjs/lib/helpers/types.d.ts +2 -0
- package/dist/typescript/commonjs/lib/helpers/types.d.ts.map +1 -0
- package/dist/typescript/module/features/chatbot/index.d.ts +1 -1
- package/dist/typescript/module/features/chatbot/index.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/model/ChatBotModel.d.ts +6 -6
- package/dist/typescript/module/features/chatbot/model/ChatBotModel.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/model/api.d.ts +5 -7
- package/dist/typescript/module/features/chatbot/model/api.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/model/messagesHelper.d.ts +21 -0
- package/dist/typescript/module/features/chatbot/model/messagesHelper.d.ts.map +1 -0
- package/dist/typescript/module/features/chatbot/model/translation.d.ts +9 -9
- package/dist/typescript/module/features/chatbot/model/translation.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/model/translation.helpers.d.ts +20 -0
- package/dist/typescript/module/features/chatbot/model/translation.helpers.d.ts.map +1 -0
- package/dist/typescript/module/features/chatbot/types/model.types.d.ts +4 -0
- package/dist/typescript/module/features/chatbot/types/model.types.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/types/translation.types.d.ts +19 -4
- package/dist/typescript/module/features/chatbot/types/translation.types.d.ts.map +1 -1
- package/dist/typescript/module/index.d.ts +1 -0
- package/dist/typescript/module/index.d.ts.map +1 -1
- package/dist/typescript/module/lib/helpers/types.d.ts +2 -0
- package/dist/typescript/module/lib/helpers/types.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/features/chatbot/components/Alternatives/Alternatives.tsx +1 -1
- package/src/features/chatbot/components/ChatControls/ChatControls.tsx +1 -1
- package/src/features/chatbot/components/Chatbot.tsx +1 -1
- package/src/features/chatbot/index.ts +6 -1
- package/src/features/chatbot/model/ChatBotModel.ts +36 -67
- package/src/features/chatbot/model/api.ts +24 -33
- package/src/features/chatbot/model/messagesHelper.ts +48 -0
- package/src/features/chatbot/model/translation.helpers.ts +50 -0
- package/src/features/chatbot/model/translation.ts +91 -147
- package/src/features/chatbot/types/model.types.ts +5 -0
- package/src/features/chatbot/types/translation.types.ts +20 -4
- package/src/index.ts +1 -0
- package/src/lib/helpers/types.ts +1 -0
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import { attach, createEvent, restore, sample, createStore, createEffect, combine } from 'effector';
|
|
4
4
|
import { createControllerEffect, createEntityFieldStore } from "../../../lib/effector/index.js";
|
|
5
|
-
import { generateRandomId } from "../../../lib/helpers/helpers.js";
|
|
6
5
|
import { ChatbotAPI } from "./api.js";
|
|
7
6
|
import { ChatbotTranslation } from "./translation.js";
|
|
8
7
|
import { ChatTextToSpeechModel } from "./t2s.js";
|
|
8
|
+
import { messagesHelper } from "./messagesHelper.js";
|
|
9
9
|
export class ChatbotModel {
|
|
10
10
|
$currentKey = createStore('');
|
|
11
11
|
resetAlternatives = createEvent();
|
|
@@ -48,12 +48,10 @@ export class ChatbotModel {
|
|
|
48
48
|
}) {
|
|
49
49
|
this.api = new ChatbotAPI(api);
|
|
50
50
|
this.defaultMessages = messages;
|
|
51
|
-
if ($key) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
}
|
|
51
|
+
if ($key) sample({
|
|
52
|
+
source: $key,
|
|
53
|
+
target: this.$currentKey
|
|
54
|
+
});
|
|
57
55
|
this.$alternatives = restore(this.api.getAlternativesFx.doneData, null).on(this.setAlternatives, (_, payload) => payload).reset(this.resetAlternatives);
|
|
58
56
|
this.translation = new ChatbotTranslation({
|
|
59
57
|
defaultMessages: messages,
|
|
@@ -73,7 +71,7 @@ export class ChatbotModel {
|
|
|
73
71
|
this.initChatReplyWatcher();
|
|
74
72
|
}
|
|
75
73
|
createSendHelpRequestFx() {
|
|
76
|
-
|
|
74
|
+
const effect = attach({
|
|
77
75
|
source: [this.$currentKey, this.translation.$isTranslated],
|
|
78
76
|
mapParams: (params, [key, isTranslated]) => ({
|
|
79
77
|
...params,
|
|
@@ -82,7 +80,7 @@ export class ChatbotModel {
|
|
|
82
80
|
}),
|
|
83
81
|
effect: createControllerEffect(async ({
|
|
84
82
|
payload,
|
|
85
|
-
message
|
|
83
|
+
message,
|
|
86
84
|
translationTargetLanguage,
|
|
87
85
|
translatedMessage,
|
|
88
86
|
key,
|
|
@@ -91,33 +89,24 @@ export class ChatbotModel {
|
|
|
91
89
|
this.setLastMessageKey(key);
|
|
92
90
|
this.messages.setField({
|
|
93
91
|
key,
|
|
94
|
-
fn: (currentMessages = []) => [...(currentMessages || []), {
|
|
95
|
-
|
|
96
|
-
message: message ?? '',
|
|
92
|
+
fn: (currentMessages = []) => [...(currentMessages || []), messagesHelper.createOwn({
|
|
93
|
+
message,
|
|
97
94
|
translatedMessage,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
options: []
|
|
101
|
-
}]
|
|
95
|
+
threadId: payload.threadId
|
|
96
|
+
})]
|
|
102
97
|
});
|
|
103
98
|
const response = await this.api.postMessageFx(payload);
|
|
104
99
|
if (isTranslated) {
|
|
105
|
-
return
|
|
100
|
+
return this.translation.translateMessageFx({
|
|
106
101
|
targetLanguage: translationTargetLanguage,
|
|
107
|
-
message:
|
|
108
|
-
...response,
|
|
109
|
-
id: generateRandomId(),
|
|
110
|
-
isOwnMessage: false
|
|
111
|
-
}
|
|
102
|
+
message: messagesHelper.createAnswer(response)
|
|
112
103
|
});
|
|
113
104
|
}
|
|
114
105
|
return response;
|
|
115
106
|
})
|
|
116
107
|
});
|
|
117
|
-
}
|
|
118
|
-
initChatReplyWatcher() {
|
|
119
108
|
sample({
|
|
120
|
-
clock:
|
|
109
|
+
clock: effect.doneData,
|
|
121
110
|
source: [this.$currentKey],
|
|
122
111
|
fn: ([key], response) => ({
|
|
123
112
|
key,
|
|
@@ -127,27 +116,16 @@ export class ChatbotModel {
|
|
|
127
116
|
key,
|
|
128
117
|
response
|
|
129
118
|
}) => {
|
|
130
|
-
const newMessages = [{
|
|
131
|
-
id: generateRandomId(),
|
|
132
|
-
message: response.message,
|
|
133
|
-
isOwnMessage: false,
|
|
134
|
-
threadId: response.threadId,
|
|
135
|
-
options: response.options,
|
|
136
|
-
translatedMessage: 'translatedMessage' in response ? response.translatedMessage : undefined
|
|
137
|
-
}];
|
|
138
|
-
if (response.endMessage) {
|
|
139
|
-
newMessages.push({
|
|
140
|
-
id: generateRandomId(),
|
|
141
|
-
message: 'Answer again to get another hint!',
|
|
142
|
-
isOwnMessage: false,
|
|
143
|
-
options: [],
|
|
144
|
-
threadId: '',
|
|
145
|
-
endMessage: true
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
119
|
this.messages.setField({
|
|
149
120
|
key,
|
|
150
|
-
fn: messages =>
|
|
121
|
+
fn: messages => {
|
|
122
|
+
const copy = [...(messages || [])];
|
|
123
|
+
copy.push(messagesHelper.createAnswer(response));
|
|
124
|
+
if (response.endMessage) {
|
|
125
|
+
copy.push(messagesHelper.createLast(this.defaultMessages.endMessage));
|
|
126
|
+
}
|
|
127
|
+
return copy;
|
|
128
|
+
}
|
|
151
129
|
});
|
|
152
130
|
this.threadIds.setField({
|
|
153
131
|
key,
|
|
@@ -155,7 +133,7 @@ export class ChatbotModel {
|
|
|
155
133
|
});
|
|
156
134
|
});
|
|
157
135
|
sample({
|
|
158
|
-
clock:
|
|
136
|
+
clock: effect.fail,
|
|
159
137
|
source: this.$currentChatData,
|
|
160
138
|
fn: ({
|
|
161
139
|
key,
|
|
@@ -169,17 +147,18 @@ export class ChatbotModel {
|
|
|
169
147
|
}) => error.message !== 'Request aborted manually',
|
|
170
148
|
target: this.messages.setField
|
|
171
149
|
});
|
|
150
|
+
return effect;
|
|
151
|
+
}
|
|
152
|
+
initChatReplyWatcher() {
|
|
172
153
|
sample({
|
|
173
154
|
clock: this.removeLastMessage,
|
|
174
155
|
source: [this.$lastMessageKey, this.messages.$state],
|
|
175
156
|
fn: ([lastMessageKey, messages]) => {
|
|
176
|
-
|
|
157
|
+
if (!lastMessageKey) return {
|
|
177
158
|
key: '',
|
|
178
159
|
data: []
|
|
179
160
|
};
|
|
180
|
-
|
|
181
|
-
const updatedMessages = messages[lastMessageKey];
|
|
182
|
-
if (!updatedMessages?.length) return mockData;
|
|
161
|
+
const updatedMessages = [...messages[lastMessageKey]];
|
|
183
162
|
updatedMessages.pop();
|
|
184
163
|
return {
|
|
185
164
|
key: lastMessageKey,
|
|
@@ -233,20 +212,15 @@ export class ChatbotModel {
|
|
|
233
212
|
key,
|
|
234
213
|
fn: messages => {
|
|
235
214
|
if (!messages?.length || messages.length === 1) return;
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
lastMessage = messages[messages.length - 2];
|
|
240
|
-
messagesToRemove = 2;
|
|
215
|
+
const copy = [...messages];
|
|
216
|
+
while (copy.at(-1)?.endMessage) {
|
|
217
|
+
copy.pop();
|
|
241
218
|
}
|
|
219
|
+
const lastMessage = copy.at(-1);
|
|
242
220
|
if (!lastMessage) return;
|
|
243
|
-
|
|
244
|
-
copy.splice(messages.length - messagesToRemove, messagesToRemove, {
|
|
221
|
+
copy.splice(copy.length - 1, 1, {
|
|
245
222
|
...lastMessage,
|
|
246
|
-
options: [
|
|
247
|
-
text: 'Give me another hint',
|
|
248
|
-
promptKey: ''
|
|
249
|
-
}]
|
|
223
|
+
options: [this.defaultMessages.anotherHintOption]
|
|
250
224
|
});
|
|
251
225
|
return copy;
|
|
252
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["attach","createEvent","restore","sample","createStore","createEffect","combine","createControllerEffect","createEntityFieldStore","
|
|
1
|
+
{"version":3,"names":["attach","createEvent","restore","sample","createStore","createEffect","combine","createControllerEffect","createEntityFieldStore","ChatbotAPI","ChatbotTranslation","ChatTextToSpeechModel","messagesHelper","ChatbotModel","$currentKey","resetAlternatives","setAlternatives","setIsOpen","toggleOpen","$isOpen","on","isOpen","removeLastMessage","setLastMessageKey","$lastMessageKey","setScrollActive","$isScrollActive","messages","threadIds","availableChats","$currentChatData","$state","key","threadId","isAvailable","constructor","api","$key","defaultMessages","source","target","$alternatives","getAlternativesFx","doneData","_","payload","reset","translation","messagesModel","alternativesModel","$store","set","t2s","sendHelpRequestFx","createSendHelpRequestFx","initChatReplyWatcher","effect","$isTranslated","mapParams","params","isTranslated","message","translationTargetLanguage","translatedMessage","setField","fn","currentMessages","createOwn","response","postMessageFx","translateMessageFx","targetLanguage","createAnswer","clock","watch","copy","push","endMessage","createLast","data","fail","error","filter","lastMessageKey","updatedMessages","pop","startConversation","length","reinitConversation","start","setHintMessage","options","getState","hints","at","lastMessage","splice","anotherHintOption","bindKey","setT2SAudioProvider","audioProvider","setAudioProvider"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/ChatBotModel.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createEffect","createControllerEffect","replaceKatexSyntax","ChatbotAPI","constructor","api","postMessageFx","postMessage","getAlternativesFx","getAlternatives","translateTextFx","payload","response","postTranslateText","text","data","translations","map","translation","translatedText","textToSpeechTextFx","postTextToSpeech"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/api.ts"],"mappings":";;AAAA,SAASA,YAAY,
|
|
1
|
+
{"version":3,"names":["createEffect","createControllerEffect","replaceKatexSyntax","ChatbotAPI","constructor","api","postMessageFx","postMessage","getAlternativesFx","getAlternatives","translateTextFx","payload","response","postTranslateText","text","data","translations","map","translation","translatedText","textToSpeechTextFx","postTextToSpeech"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/api.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,UAAU;AACvC,SAASC,sBAAsB,QAAQ,gCAAuB;AAG9D,SAASC,kBAAkB,QAAQ,eAAY;AAE/C,OAAO,MAAMC,UAAU,CAAC;EAMtBC,WAAWA,CAACC,GAA6B,EAAE;IACzC,IAAI,CAACC,aAAa,GAAGL,sBAAsB,CAACI,GAAG,CAACE,WAAW,CAAC;IAC5D,IAAI,CAACC,iBAAiB,GAAGR,YAAY,CAACK,GAAG,CAACI,eAAe,CAAC;IAC1D,IAAI,CAACC,eAAe,GAAGV,YAAY,CACjC,MAAOW,OAA+B,IAAuC;MAC3E,MAAMC,QAAQ,GAAG,MAAMP,GAAG,CAACQ,iBAAiB,CAAC;QAC3C,GAAGF,OAAO;QACVG,IAAI,EAAEZ,kBAAkB,CAACS,OAAO,CAACG,IAAI;MACvC,CAAC,CAAC;MAEF,OAAO;QACL,GAAGF,QAAQ;QACXG,IAAI,EAAE;UACJ,GAAGH,QAAQ,CAACG,IAAI;UAChBC,YAAY,EAAEJ,QAAQ,CAACG,IAAI,CAACC,YAAY,CAACC,GAAG,CAAEC,WAAW,KAAM;YAC7D,GAAGA,WAAW;YACdC,cAAc,EAAEjB,kBAAkB,CAAC,CAACgB,WAAW,CAACC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;UAC1E,CAAC,CAAC;QACJ;MACF,CAAC;IACH,CACF,CAAC;IACD,IAAI,CAACC,kBAAkB,GAAGpB,YAAY,CAACK,GAAG,CAACgB,gBAAgB,CAAC;EAC9D;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { generateRandomId } from "../../../lib/helpers/helpers.js";
|
|
4
|
+
export class messagesHelper {
|
|
5
|
+
static createAnswer(data) {
|
|
6
|
+
return {
|
|
7
|
+
id: generateRandomId(),
|
|
8
|
+
isOwnMessage: false,
|
|
9
|
+
message: data.message,
|
|
10
|
+
threadId: data.threadId,
|
|
11
|
+
options: data.options,
|
|
12
|
+
translatedMessage: data.translatedMessage
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
static createLast(data) {
|
|
16
|
+
return {
|
|
17
|
+
id: generateRandomId(),
|
|
18
|
+
message: data.message,
|
|
19
|
+
translatedMessage: data.translatedMessage,
|
|
20
|
+
isOwnMessage: false,
|
|
21
|
+
options: [],
|
|
22
|
+
threadId: '',
|
|
23
|
+
endMessage: true
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
static createOwn({
|
|
27
|
+
message = '',
|
|
28
|
+
translatedMessage,
|
|
29
|
+
threadId
|
|
30
|
+
}) {
|
|
31
|
+
return {
|
|
32
|
+
id: generateRandomId(),
|
|
33
|
+
message,
|
|
34
|
+
translatedMessage,
|
|
35
|
+
threadId: threadId || '',
|
|
36
|
+
isOwnMessage: true,
|
|
37
|
+
options: []
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=messagesHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["generateRandomId","messagesHelper","createAnswer","data","id","isOwnMessage","message","threadId","options","translatedMessage","createLast","endMessage","createOwn"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/messagesHelper.ts"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,iCAA8B;AAS/D,OAAO,MAAMC,cAAc,CAAC;EAC1B,OAAcC,YAAYA,CAACC,IAA2B,EAAuB;IAC3E,OAAO;MACLC,EAAE,EAAEJ,gBAAgB,CAAC,CAAC;MACtBK,YAAY,EAAE,KAAK;MACnBC,OAAO,EAAEH,IAAI,CAACG,OAAO;MACrBC,QAAQ,EAAEJ,IAAI,CAACI,QAAQ;MACvBC,OAAO,EAAEL,IAAI,CAACK,OAAO;MACrBC,iBAAiB,EAAEN,IAAI,CAACM;IAC1B,CAAC;EACH;EAEA,OAAcC,UAAUA,CAACP,IAA2B,EAAE;IACpD,OAAO;MACLC,EAAE,EAAEJ,gBAAgB,CAAC,CAAC;MACtBM,OAAO,EAAEH,IAAI,CAACG,OAAO;MACrBG,iBAAiB,EAAEN,IAAI,CAACM,iBAAiB;MACzCJ,YAAY,EAAE,KAAK;MACnBG,OAAO,EAAE,EAAE;MACXD,QAAQ,EAAE,EAAE;MACZI,UAAU,EAAE;IACd,CAAC;EACH;EAEA,OAAcC,SAASA,CAAC;IACtBN,OAAO,GAAG,EAAE;IACZG,iBAAiB;IACjBF;EACe,CAAC,EAAuB;IACvC,OAAO;MACLH,EAAE,EAAEJ,gBAAgB,CAAC,CAAC;MACtBM,OAAO;MACPG,iBAAiB;MACjBF,QAAQ,EAAEA,QAAQ,IAAI,EAAE;MACxBF,YAAY,EAAE,IAAI;MAClBG,OAAO,EAAE;IACX,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export function getOptionsForTranslation({
|
|
4
|
+
lastMessage,
|
|
5
|
+
alternatives
|
|
6
|
+
}) {
|
|
7
|
+
if (!lastMessage) return {
|
|
8
|
+
lastMessage: null,
|
|
9
|
+
alternatives: null
|
|
10
|
+
};
|
|
11
|
+
if (!lastMessage.options.length) {
|
|
12
|
+
if (!alternatives) return {
|
|
13
|
+
lastMessage: null,
|
|
14
|
+
alternatives: null
|
|
15
|
+
};
|
|
16
|
+
const hintAlternatives = alternatives.options.hints ?? [];
|
|
17
|
+
const defaultAlternatives = alternatives.options.default ?? [];
|
|
18
|
+
return {
|
|
19
|
+
lastMessage: null,
|
|
20
|
+
alternatives: {
|
|
21
|
+
hints: hintAlternatives.map(({
|
|
22
|
+
text
|
|
23
|
+
}) => text),
|
|
24
|
+
default: defaultAlternatives.map(({
|
|
25
|
+
text
|
|
26
|
+
}) => text)
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
lastMessage: lastMessage.options.map(({
|
|
32
|
+
text
|
|
33
|
+
}) => text),
|
|
34
|
+
alternatives: null
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function addTranslationsToAlternative({
|
|
38
|
+
alternatives,
|
|
39
|
+
translatedHints,
|
|
40
|
+
translatedDefaults
|
|
41
|
+
}) {
|
|
42
|
+
return {
|
|
43
|
+
...alternatives,
|
|
44
|
+
options: {
|
|
45
|
+
...alternatives.options,
|
|
46
|
+
hints: translatedHints.map((translatedMessage, index) => ({
|
|
47
|
+
...alternatives.options.hints[index],
|
|
48
|
+
translatedMessage
|
|
49
|
+
})),
|
|
50
|
+
default: translatedDefaults.map((translatedMessage, index) => ({
|
|
51
|
+
...alternatives.options.default[index],
|
|
52
|
+
translatedMessage
|
|
53
|
+
}))
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=translation.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getOptionsForTranslation","lastMessage","alternatives","options","length","hintAlternatives","hints","defaultAlternatives","default","map","text","addTranslationsToAlternative","translatedHints","translatedDefaults","translatedMessage","index"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/translation.helpers.ts"],"mappings":";;AAMA,OAAO,SAASA,wBAAwBA,CAAC;EACvCC,WAAW;EACXC;AACe,CAAC,EAAoB;EACpC,IAAI,CAACD,WAAW,EAAE,OAAO;IAAEA,WAAW,EAAE,IAAI;IAAEC,YAAY,EAAE;EAAK,CAAC;EAClE,IAAI,CAACD,WAAW,CAACE,OAAO,CAACC,MAAM,EAAE;IAC/B,IAAI,CAACF,YAAY,EAAE,OAAO;MAAED,WAAW,EAAE,IAAI;MAAEC,YAAY,EAAE;IAAK,CAAC;IACnE,MAAMG,gBAAgB,GAAGH,YAAY,CAACC,OAAO,CAACG,KAAK,IAAI,EAAE;IACzD,MAAMC,mBAAmB,GAAGL,YAAY,CAACC,OAAO,CAACK,OAAO,IAAI,EAAE;IAC9D,OAAO;MACLP,WAAW,EAAE,IAAI;MACjBC,YAAY,EAAE;QACZI,KAAK,EAAED,gBAAgB,CAACI,GAAG,CAAC,CAAC;UAAEC;QAAK,CAAC,KAAKA,IAAI,CAAC;QAC/CF,OAAO,EAAED,mBAAmB,CAACE,GAAG,CAAC,CAAC;UAAEC;QAAK,CAAC,KAAKA,IAAI;MACrD;IACF,CAAC;EACH;EAEA,OAAO;IACLT,WAAW,EAAEA,WAAW,CAACE,OAAO,CAACM,GAAG,CAAC,CAAC;MAAEC;IAAK,CAAC,KAAKA,IAAI,CAAC;IACxDR,YAAY,EAAE;EAChB,CAAC;AACH;AAEA,OAAO,SAASS,4BAA4BA,CAAC;EAC3CT,YAAY;EACZU,eAAe;EACfC;AACiC,CAAC,EAAE;EACpC,OAAO;IACL,GAAGX,YAAY;IACfC,OAAO,EAAE;MACP,GAAGD,YAAY,CAACC,OAAO;MACvBG,KAAK,EAAEM,eAAe,CAACH,GAAG,CAAC,CAACK,iBAAiB,EAAEC,KAAK,MAAM;QACxD,GAAGb,YAAY,CAACC,OAAO,CAACG,KAAK,CAACS,KAAK,CAAC;QACpCD;MACF,CAAC,CAAC,CAAC;MACHN,OAAO,EAAEK,kBAAkB,CAACJ,GAAG,CAAC,CAACK,iBAAiB,EAAEC,KAAK,MAAM;QAC7D,GAAGb,YAAY,CAACC,OAAO,CAACK,OAAO,CAACO,KAAK,CAAC;QACtCD;MACF,CAAC,CAAC;IACJ;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { attach, createEffect, createEvent, restore, sample } from 'effector';
|
|
4
4
|
import { decodeHTMLEntities } from "../helpers.js";
|
|
5
|
+
import { addTranslationsToAlternative, getOptionsForTranslation } from "./translation.helpers.js";
|
|
5
6
|
export class ChatbotTranslation {
|
|
6
7
|
setIsTranslated = createEvent();
|
|
7
8
|
$isTranslated = restore(this.setIsTranslated, false);
|
|
@@ -17,9 +18,15 @@ export class ChatbotTranslation {
|
|
|
17
18
|
this.defaultMessages = defaultMessages;
|
|
18
19
|
this.messagesModel = messagesModel;
|
|
19
20
|
this.alternativesModel = alternativesModel;
|
|
20
|
-
this.
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
this.translateAllMessagesFx = attach({
|
|
22
|
+
source: [this.$key, this.messagesModel.$state, this.alternativesModel.$store],
|
|
23
|
+
mapParams: (params, [key, messages, alternatives]) => ({
|
|
24
|
+
params,
|
|
25
|
+
messages: messages[key] ?? [],
|
|
26
|
+
alternatives
|
|
27
|
+
}),
|
|
28
|
+
effect: this.translateBatchFx
|
|
29
|
+
});
|
|
23
30
|
this.initTranslationSamples();
|
|
24
31
|
}
|
|
25
32
|
shouldSkipTranslation(messages) {
|
|
@@ -36,7 +43,7 @@ export class ChatbotTranslation {
|
|
|
36
43
|
}
|
|
37
44
|
initTranslationSamples() {
|
|
38
45
|
sample({
|
|
39
|
-
clock: this.
|
|
46
|
+
clock: this.translateAllMessagesFx.doneData,
|
|
40
47
|
source: [this.$key],
|
|
41
48
|
fn: ([key], translatedMessages) => ({
|
|
42
49
|
key,
|
|
@@ -45,147 +52,104 @@ export class ChatbotTranslation {
|
|
|
45
52
|
target: this.messagesModel.setField
|
|
46
53
|
});
|
|
47
54
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
alternatives
|
|
54
|
-
}),
|
|
55
|
-
effect: createEffect(async ({
|
|
56
|
-
alternatives,
|
|
57
|
-
params
|
|
58
|
-
}) => {
|
|
59
|
-
const hintAlternatives = alternatives?.options.hints ?? [];
|
|
60
|
-
const defaultAlternatives = alternatives?.options.default ?? [];
|
|
61
|
-
const translatedAlternatives = {
|
|
62
|
-
...alternatives
|
|
63
|
-
};
|
|
64
|
-
if (hintAlternatives.length) {
|
|
65
|
-
const hintText = hintAlternatives.map(({
|
|
66
|
-
text
|
|
67
|
-
}) => text);
|
|
68
|
-
const response = await this.api.translateTextFx({
|
|
69
|
-
text: hintText,
|
|
70
|
-
targetLanguage: params.targetLanguage
|
|
71
|
-
});
|
|
72
|
-
if (translatedAlternatives.options) {
|
|
73
|
-
translatedAlternatives.options.hints = hintAlternatives.map((alternative, index) => ({
|
|
74
|
-
...alternative,
|
|
75
|
-
translatedMessage: decodeHTMLEntities(response.data.translations[index].translatedText)
|
|
76
|
-
}));
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (defaultAlternatives.length) {
|
|
80
|
-
const defaultText = defaultAlternatives.map(({
|
|
81
|
-
text
|
|
82
|
-
}) => text);
|
|
83
|
-
const response = await this.api.translateTextFx({
|
|
84
|
-
text: defaultText,
|
|
85
|
-
targetLanguage: params.targetLanguage
|
|
86
|
-
});
|
|
87
|
-
if (translatedAlternatives.options) {
|
|
88
|
-
translatedAlternatives.options.default = defaultAlternatives.map((alternative, index) => ({
|
|
89
|
-
...alternative,
|
|
90
|
-
translatedText: decodeHTMLEntities(response.data.translations[index].translatedText)
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return translatedAlternatives;
|
|
95
|
-
})
|
|
55
|
+
async translateRequest(props) {
|
|
56
|
+
const text = Object.values(props.text).flat();
|
|
57
|
+
const response = await this.api.translateTextFx({
|
|
58
|
+
text,
|
|
59
|
+
targetLanguage: props.targetLanguage
|
|
96
60
|
});
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
text
|
|
105
|
-
}) => text);
|
|
106
|
-
const response = await this.api.translateTextFx({
|
|
107
|
-
text: [message.message, ...optionsText],
|
|
108
|
-
targetLanguage
|
|
109
|
-
});
|
|
110
|
-
const translatedOptions = response.data.translations.slice(1);
|
|
111
|
-
const optionsCopy = [...message.options];
|
|
112
|
-
const newOptions = optionsCopy.map((option, index) => ({
|
|
113
|
-
...option,
|
|
114
|
-
translatedText: decodeHTMLEntities(translatedOptions[index].translatedText)
|
|
115
|
-
}));
|
|
116
|
-
return {
|
|
117
|
-
...message,
|
|
118
|
-
translatedMessage: decodeHTMLEntities(response.data.translations[0].translatedText),
|
|
119
|
-
options: newOptions
|
|
120
|
-
};
|
|
61
|
+
const translatedText = response.data.translations.map(({
|
|
62
|
+
translatedText
|
|
63
|
+
}) => decodeHTMLEntities(translatedText));
|
|
64
|
+
const result = {};
|
|
65
|
+
Object.keys(props.text).forEach(key => {
|
|
66
|
+
const count = props.text[key].length;
|
|
67
|
+
result[key] = translatedText.splice(0, count);
|
|
121
68
|
});
|
|
69
|
+
return result;
|
|
122
70
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
71
|
+
addTranslationToAlternatives(props) {
|
|
72
|
+
this.alternativesModel.set(addTranslationsToAlternative(props));
|
|
73
|
+
}
|
|
74
|
+
translateBatchFx = createEffect(async ({
|
|
75
|
+
messages,
|
|
76
|
+
params,
|
|
77
|
+
alternatives
|
|
78
|
+
}) => {
|
|
79
|
+
if (this.shouldSkipTranslation(messages)) {
|
|
80
|
+
return messages;
|
|
81
|
+
}
|
|
82
|
+
const defaultMessages = [this.defaultMessages.error, this.defaultMessages.endMessage];
|
|
83
|
+
const defaultOptions = [this.defaultMessages.anotherHintOption];
|
|
84
|
+
const options = getOptionsForTranslation({
|
|
85
|
+
lastMessage: messages.at(-1),
|
|
86
|
+
alternatives
|
|
87
|
+
});
|
|
88
|
+
const translatedTextsList = await this.translateRequest({
|
|
89
|
+
text: {
|
|
90
|
+
messages: messages.map(({
|
|
138
91
|
message
|
|
139
|
-
}) => message)
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// TODO: move this AFTER state update in sample and remove initTranslationSamples it is not needed
|
|
153
|
-
// TODO: maybe just one request to translate everything
|
|
154
|
-
this.setIsTranslated(true);
|
|
155
|
-
const translatedMessages = response.data.translations.map(({
|
|
156
|
-
translatedText
|
|
157
|
-
}) => translatedText);
|
|
158
|
-
return messages.map((message, index) => {
|
|
159
|
-
const isLastMessage = index === messages.length - 1;
|
|
160
|
-
return {
|
|
161
|
-
...message,
|
|
162
|
-
options: isLastMessage ? lastMessageTranslatedOptions : message.options,
|
|
163
|
-
translatedMessage: decodeHTMLEntities(translatedMessages[index])
|
|
164
|
-
};
|
|
165
|
-
});
|
|
166
|
-
})
|
|
92
|
+
}) => message),
|
|
93
|
+
defaultMessages: defaultMessages.map(({
|
|
94
|
+
message
|
|
95
|
+
}) => message),
|
|
96
|
+
defaultOptions: defaultOptions.map(({
|
|
97
|
+
text
|
|
98
|
+
}) => text),
|
|
99
|
+
lastMessage: options.lastMessage || [],
|
|
100
|
+
alternativesHints: options.alternatives?.hints || [],
|
|
101
|
+
alternativesDefaults: options.alternatives?.default || []
|
|
102
|
+
},
|
|
103
|
+
targetLanguage: params.targetLanguage
|
|
167
104
|
});
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
105
|
+
translatedTextsList.defaultMessages.forEach((message, index) => {
|
|
106
|
+
defaultMessages[index].translatedMessage = message;
|
|
107
|
+
});
|
|
108
|
+
translatedTextsList.defaultOptions.forEach((message, index) => {
|
|
109
|
+
defaultOptions[index].translatedText = message;
|
|
110
|
+
});
|
|
111
|
+
if (options.alternatives && alternatives) {
|
|
112
|
+
this.addTranslationToAlternatives({
|
|
113
|
+
alternatives,
|
|
114
|
+
translatedHints: translatedTextsList.alternativesHints,
|
|
115
|
+
translatedDefaults: translatedTextsList.alternativesDefaults
|
|
173
116
|
});
|
|
174
|
-
this.alternativesModel.set(translatedAlternatives);
|
|
175
|
-
return;
|
|
176
117
|
}
|
|
118
|
+
|
|
119
|
+
// TODO: move this AFTER state update in sample and remove initTranslationSamples it is not needed
|
|
120
|
+
this.setIsTranslated(true);
|
|
121
|
+
return messages.map((message, index) => {
|
|
122
|
+
const isLastMessage = index === messages.length - 1;
|
|
123
|
+
return {
|
|
124
|
+
...message,
|
|
125
|
+
options: isLastMessage ? translatedTextsList.lastMessage : message.options,
|
|
126
|
+
translatedMessage: translatedTextsList.messages[index]
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
translateMessageFx = createEffect(async ({
|
|
131
|
+
message,
|
|
132
|
+
targetLanguage
|
|
133
|
+
}) => {
|
|
177
134
|
const optionsText = message.options.map(({
|
|
178
135
|
text
|
|
179
136
|
}) => text);
|
|
180
137
|
const response = await this.api.translateTextFx({
|
|
181
|
-
text: optionsText,
|
|
138
|
+
text: [message.message, ...optionsText],
|
|
182
139
|
targetLanguage
|
|
183
140
|
});
|
|
184
|
-
|
|
141
|
+
const translatedOptions = response.data.translations.slice(1);
|
|
142
|
+
const optionsCopy = [...message.options];
|
|
143
|
+
const newOptions = optionsCopy.map((option, index) => ({
|
|
185
144
|
...option,
|
|
186
|
-
translatedText: decodeHTMLEntities(
|
|
145
|
+
translatedText: decodeHTMLEntities(translatedOptions[index].translatedText)
|
|
187
146
|
}));
|
|
188
|
-
|
|
147
|
+
return {
|
|
148
|
+
...message,
|
|
149
|
+
translatedMessage: decodeHTMLEntities(response.data.translations[0].translatedText),
|
|
150
|
+
options: newOptions
|
|
151
|
+
};
|
|
152
|
+
});
|
|
189
153
|
reset() {
|
|
190
154
|
this.setIsTranslated(false);
|
|
191
155
|
}
|