@magmamath/students-features 0.1.2 → 0.1.3

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.
@@ -7,10 +7,35 @@ exports.ChatbotAPI = void 0;
7
7
  var _effector = require("effector");
8
8
  var _index = require("../../../lib/effector/index.js");
9
9
  class ChatbotAPI {
10
+ KATEX_REPLACEMENTS = {
11
+ '\\$': '__KATEX_DOLLAR_SYMBOL__'
12
+ };
13
+ KATEX_REPLACEMENTS_REVERSE = {
14
+ __KATEX_DOLLAR_SYMBOL__: '$'
15
+ };
16
+ replaceKatexSyntax(texts, reverse = false) {
17
+ const replacements = reverse ? Object.entries(this.KATEX_REPLACEMENTS_REVERSE) : Object.entries(this.KATEX_REPLACEMENTS);
18
+ return texts.map(text => replacements.reduce((newText, [pattern, placeholder]) => newText.replace(new RegExp(pattern, 'g'), placeholder), text));
19
+ }
10
20
  constructor(api) {
11
21
  this.postMessageFx = (0, _index.createControllerEffect)(api.postMessage);
12
22
  this.getAlternativesFx = (0, _effector.createEffect)(api.getAlternatives);
13
- this.translateTextFx = (0, _effector.createEffect)(api.postTranslateText);
23
+ this.translateTextFx = (0, _effector.createEffect)(async payload => {
24
+ const response = await api.postTranslateText({
25
+ ...payload,
26
+ text: this.replaceKatexSyntax(payload.text)
27
+ });
28
+ return {
29
+ ...response,
30
+ data: {
31
+ ...response.data,
32
+ translations: response.data.translations.map(translation => ({
33
+ ...translation,
34
+ translatedText: this.replaceKatexSyntax([translation.translatedText], true)[0]
35
+ }))
36
+ }
37
+ };
38
+ });
14
39
  this.textToSpeechTextFx = (0, _effector.createEffect)(api.postTextToSpeech);
15
40
  }
16
41
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_effector","require","_index","ChatbotAPI","constructor","api","postMessageFx","createControllerEffect","postMessage","getAlternativesFx","createEffect","getAlternatives","translateTextFx","postTranslateText","textToSpeechTextFx","postTextToSpeech","exports"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/api.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAaO,MAAME,UAAU,CAAC;EAMpBC,WAAWA,CAACC,GAA6B,EAAE;IACvC,IAAI,CAACC,aAAa,GAAG,IAAAC,6BAAsB,EAACF,GAAG,CAACG,WAAW,CAAC;IAC5D,IAAI,CAACC,iBAAiB,GAAG,IAAAC,sBAAY,EAACL,GAAG,CAACM,eAAe,CAAC;IAC1D,IAAI,CAACC,eAAe,GAAG,IAAAF,sBAAY,EAACL,GAAG,CAACQ,iBAAiB,CAAC;IAC1D,IAAI,CAACC,kBAAkB,GAAG,IAAAJ,sBAAY,EAACL,GAAG,CAACU,gBAAgB,CAAC;EAChE;AACJ;AAACC,OAAA,CAAAb,UAAA,GAAAA,UAAA","ignoreList":[]}
1
+ {"version":3,"names":["_effector","require","_index","ChatbotAPI","KATEX_REPLACEMENTS","KATEX_REPLACEMENTS_REVERSE","__KATEX_DOLLAR_SYMBOL__","replaceKatexSyntax","texts","reverse","replacements","Object","entries","map","text","reduce","newText","pattern","placeholder","replace","RegExp","constructor","api","postMessageFx","createControllerEffect","postMessage","getAlternativesFx","createEffect","getAlternatives","translateTextFx","payload","response","postTranslateText","data","translations","translation","translatedText","textToSpeechTextFx","postTextToSpeech","exports"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/api.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAaO,MAAME,UAAU,CAAC;EAMdC,kBAAkB,GAAG;IAC3B,KAAK,EAAE;EACT,CAAC;EAEOC,0BAA0B,GAAG;IACnCC,uBAAuB,EAAE;EAC3B,CAAC;EAEOC,kBAAkBA,CAACC,KAAe,EAAEC,OAAO,GAAG,KAAK,EAAE;IAC3D,MAAMC,YAAY,GAAGD,OAAO,GACxBE,MAAM,CAACC,OAAO,CAAC,IAAI,CAACP,0BAA0B,CAAC,GAC/CM,MAAM,CAACC,OAAO,CAAC,IAAI,CAACR,kBAAkB,CAAC;IAE3C,OAAOI,KAAK,CAACK,GAAG,CAACC,IAAI,IACnBJ,YAAY,CAACK,MAAM,CACjB,CAACC,OAAO,EAAE,CAACC,OAAO,EAAEC,WAAW,CAAC,KAAKF,OAAO,CAACG,OAAO,CAAC,IAAIC,MAAM,CAACH,OAAO,EAAE,GAAG,CAAC,EAAEC,WAAW,CAAC,EAC3FJ,IACF,CACF,CAAC;EACH;EAEAO,WAAWA,CAACC,GAA6B,EAAE;IACzC,IAAI,CAACC,aAAa,GAAG,IAAAC,6BAAsB,EAACF,GAAG,CAACG,WAAW,CAAC;IAC5D,IAAI,CAACC,iBAAiB,GAAG,IAAAC,sBAAY,EAACL,GAAG,CAACM,eAAe,CAAC;IAC1D,IAAI,CAACC,eAAe,GAAG,IAAAF,sBAAY,EAAC,MAAOG,OAA+B,IAAK;MAC7E,MAAMC,QAAQ,GAAG,MAAMT,GAAG,CAACU,iBAAiB,CAAC;QAC3C,GAAGF,OAAO;QACVhB,IAAI,EAAE,IAAI,CAACP,kBAAkB,CAACuB,OAAO,CAAChB,IAAI;MAC5C,CAAC,CAAC;MAEF,OAAO;QACL,GAAGiB,QAAQ;QACXE,IAAI,EAAE;UACJ,GAAGF,QAAQ,CAACE,IAAI;UAChBC,YAAY,EAAEH,QAAQ,CAACE,IAAI,CAACC,YAAY,CAACrB,GAAG,CAACsB,WAAW,KAAK;YAC3D,GAAGA,WAAW;YACdC,cAAc,EAAE,IAAI,CAAC7B,kBAAkB,CAAC,CAAC4B,WAAW,CAACC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;UAC/E,CAAC,CAAC;QACJ;MACF,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAACC,kBAAkB,GAAG,IAAAV,sBAAY,EAACL,GAAG,CAACgB,gBAAgB,CAAC;EAC9D;AACF;AAACC,OAAA,CAAApC,UAAA,GAAAA,UAAA","ignoreList":[]}
@@ -3,10 +3,35 @@
3
3
  import { createEffect } from 'effector';
4
4
  import { createControllerEffect } from "../../../lib/effector/index.js";
5
5
  export class ChatbotAPI {
6
+ KATEX_REPLACEMENTS = {
7
+ '\\$': '__KATEX_DOLLAR_SYMBOL__'
8
+ };
9
+ KATEX_REPLACEMENTS_REVERSE = {
10
+ __KATEX_DOLLAR_SYMBOL__: '$'
11
+ };
12
+ replaceKatexSyntax(texts, reverse = false) {
13
+ const replacements = reverse ? Object.entries(this.KATEX_REPLACEMENTS_REVERSE) : Object.entries(this.KATEX_REPLACEMENTS);
14
+ return texts.map(text => replacements.reduce((newText, [pattern, placeholder]) => newText.replace(new RegExp(pattern, 'g'), placeholder), text));
15
+ }
6
16
  constructor(api) {
7
17
  this.postMessageFx = createControllerEffect(api.postMessage);
8
18
  this.getAlternativesFx = createEffect(api.getAlternatives);
9
- this.translateTextFx = createEffect(api.postTranslateText);
19
+ this.translateTextFx = createEffect(async payload => {
20
+ const response = await api.postTranslateText({
21
+ ...payload,
22
+ text: this.replaceKatexSyntax(payload.text)
23
+ });
24
+ return {
25
+ ...response,
26
+ data: {
27
+ ...response.data,
28
+ translations: response.data.translations.map(translation => ({
29
+ ...translation,
30
+ translatedText: this.replaceKatexSyntax([translation.translatedText], true)[0]
31
+ }))
32
+ }
33
+ };
34
+ });
10
35
  this.textToSpeechTextFx = createEffect(api.postTextToSpeech);
11
36
  }
12
37
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createControllerEffect","ChatbotAPI","constructor","api","postMessageFx","postMessage","getAlternativesFx","getAlternatives","translateTextFx","postTranslateText","textToSpeechTextFx","postTextToSpeech"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/api.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAgB,UAAU;AAE/C,SAASC,sBAAsB,QAAQ,gCAAuB;AAa9D,OAAO,MAAMC,UAAU,CAAC;EAMpBC,WAAWA,CAACC,GAA6B,EAAE;IACvC,IAAI,CAACC,aAAa,GAAGJ,sBAAsB,CAACG,GAAG,CAACE,WAAW,CAAC;IAC5D,IAAI,CAACC,iBAAiB,GAAGP,YAAY,CAACI,GAAG,CAACI,eAAe,CAAC;IAC1D,IAAI,CAACC,eAAe,GAAGT,YAAY,CAACI,GAAG,CAACM,iBAAiB,CAAC;IAC1D,IAAI,CAACC,kBAAkB,GAAGX,YAAY,CAACI,GAAG,CAACQ,gBAAgB,CAAC;EAChE;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["createEffect","createControllerEffect","ChatbotAPI","KATEX_REPLACEMENTS","KATEX_REPLACEMENTS_REVERSE","__KATEX_DOLLAR_SYMBOL__","replaceKatexSyntax","texts","reverse","replacements","Object","entries","map","text","reduce","newText","pattern","placeholder","replace","RegExp","constructor","api","postMessageFx","postMessage","getAlternativesFx","getAlternatives","translateTextFx","payload","response","postTranslateText","data","translations","translation","translatedText","textToSpeechTextFx","postTextToSpeech"],"sourceRoot":"../../../../../src","sources":["features/chatbot/model/api.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAgB,UAAU;AAE/C,SAASC,sBAAsB,QAAQ,gCAAuB;AAa9D,OAAO,MAAMC,UAAU,CAAC;EAMdC,kBAAkB,GAAG;IAC3B,KAAK,EAAE;EACT,CAAC;EAEOC,0BAA0B,GAAG;IACnCC,uBAAuB,EAAE;EAC3B,CAAC;EAEOC,kBAAkBA,CAACC,KAAe,EAAEC,OAAO,GAAG,KAAK,EAAE;IAC3D,MAAMC,YAAY,GAAGD,OAAO,GACxBE,MAAM,CAACC,OAAO,CAAC,IAAI,CAACP,0BAA0B,CAAC,GAC/CM,MAAM,CAACC,OAAO,CAAC,IAAI,CAACR,kBAAkB,CAAC;IAE3C,OAAOI,KAAK,CAACK,GAAG,CAACC,IAAI,IACnBJ,YAAY,CAACK,MAAM,CACjB,CAACC,OAAO,EAAE,CAACC,OAAO,EAAEC,WAAW,CAAC,KAAKF,OAAO,CAACG,OAAO,CAAC,IAAIC,MAAM,CAACH,OAAO,EAAE,GAAG,CAAC,EAAEC,WAAW,CAAC,EAC3FJ,IACF,CACF,CAAC;EACH;EAEAO,WAAWA,CAACC,GAA6B,EAAE;IACzC,IAAI,CAACC,aAAa,GAAGrB,sBAAsB,CAACoB,GAAG,CAACE,WAAW,CAAC;IAC5D,IAAI,CAACC,iBAAiB,GAAGxB,YAAY,CAACqB,GAAG,CAACI,eAAe,CAAC;IAC1D,IAAI,CAACC,eAAe,GAAG1B,YAAY,CAAC,MAAO2B,OAA+B,IAAK;MAC7E,MAAMC,QAAQ,GAAG,MAAMP,GAAG,CAACQ,iBAAiB,CAAC;QAC3C,GAAGF,OAAO;QACVd,IAAI,EAAE,IAAI,CAACP,kBAAkB,CAACqB,OAAO,CAACd,IAAI;MAC5C,CAAC,CAAC;MAEF,OAAO;QACL,GAAGe,QAAQ;QACXE,IAAI,EAAE;UACJ,GAAGF,QAAQ,CAACE,IAAI;UAChBC,YAAY,EAAEH,QAAQ,CAACE,IAAI,CAACC,YAAY,CAACnB,GAAG,CAACoB,WAAW,KAAK;YAC3D,GAAGA,WAAW;YACdC,cAAc,EAAE,IAAI,CAAC3B,kBAAkB,CAAC,CAAC0B,WAAW,CAACC,cAAc,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;UAC/E,CAAC,CAAC;QACJ;MACF,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAACC,kBAAkB,GAAGlC,YAAY,CAACqB,GAAG,CAACc,gBAAgB,CAAC;EAC9D;AACF","ignoreList":[]}
@@ -7,6 +7,9 @@ export declare class ChatbotAPI {
7
7
  getAlternativesFx: Effect<void, GetAlternativesResponse>;
8
8
  translateTextFx: Effect<GoogleTranslatePayload, GoogleTranslateResponse>;
9
9
  textToSpeechTextFx: Effect<GoogleText2SpeechPayload, GoogleText2SpeechResponse>;
10
+ private KATEX_REPLACEMENTS;
11
+ private KATEX_REPLACEMENTS_REVERSE;
12
+ private replaceKatexSyntax;
10
13
  constructor(api: ChatbotModelProps['api']);
11
14
  }
12
15
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,UAAU,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EAC5B,MAAM,oBAAoB,CAAA;AAE3B,qBAAa,UAAU;IACnB,aAAa,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAA;IACxE,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;IACxD,eAAe,EAAE,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,CAAA;IACxE,kBAAkB,EAAE,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAA;gBAEnE,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC;CAM5C"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,UAAU,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAA;AAE3B,qBAAa,UAAU;IACrB,aAAa,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAA;IACxE,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;IACxD,eAAe,EAAE,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,CAAA;IACxE,kBAAkB,EAAE,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAA;IAE/E,OAAO,CAAC,kBAAkB,CAEhB;IAEV,OAAO,CAAC,0BAA0B,CAExB;IAEV,OAAO,CAAC,kBAAkB;gBAad,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC;CAsB1C"}
@@ -7,6 +7,9 @@ export declare class ChatbotAPI {
7
7
  getAlternativesFx: Effect<void, GetAlternativesResponse>;
8
8
  translateTextFx: Effect<GoogleTranslatePayload, GoogleTranslateResponse>;
9
9
  textToSpeechTextFx: Effect<GoogleText2SpeechPayload, GoogleText2SpeechResponse>;
10
+ private KATEX_REPLACEMENTS;
11
+ private KATEX_REPLACEMENTS_REVERSE;
12
+ private replaceKatexSyntax;
10
13
  constructor(api: ChatbotModelProps['api']);
11
14
  }
12
15
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,UAAU,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EACH,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EAC5B,MAAM,oBAAoB,CAAA;AAE3B,qBAAa,UAAU;IACnB,aAAa,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAA;IACxE,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;IACxD,eAAe,EAAE,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,CAAA;IACxE,kBAAkB,EAAE,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAA;gBAEnE,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC;CAM5C"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,MAAM,UAAU,CAAA;AAG/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,oBAAoB,CAAA;AAE3B,qBAAa,UAAU;IACrB,aAAa,EAAE,gBAAgB,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAA;IACxE,iBAAiB,EAAE,MAAM,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;IACxD,eAAe,EAAE,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC,CAAA;IACxE,kBAAkB,EAAE,MAAM,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CAAA;IAE/E,OAAO,CAAC,kBAAkB,CAEhB;IAEV,OAAO,CAAC,0BAA0B,CAExB;IAEV,OAAO,CAAC,kBAAkB;gBAad,GAAG,EAAE,iBAAiB,CAAC,KAAK,CAAC;CAsB1C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magmamath/students-features",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Magmamath features library",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/commonjs/index.js",
@@ -4,25 +4,62 @@ import { createControllerEffect } from '../../../lib/effector'
4
4
  import { ControlledEffect } from '../../../lib/effector/createControllerEffect'
5
5
  import { ChatbotModelProps } from '../types/model.types'
6
6
  import {
7
- GetAlternativesResponse,
8
- PostMessagePayload,
9
- PostMessageResponse,
10
- GoogleTranslatePayload,
11
- GoogleTranslateResponse,
12
- GoogleText2SpeechPayload,
13
- GoogleText2SpeechResponse,
7
+ GetAlternativesResponse,
8
+ PostMessagePayload,
9
+ PostMessageResponse,
10
+ GoogleTranslatePayload,
11
+ GoogleTranslateResponse,
12
+ GoogleText2SpeechPayload,
13
+ GoogleText2SpeechResponse,
14
14
  } from '../types/api.types'
15
15
 
16
16
  export class ChatbotAPI {
17
- postMessageFx: ControlledEffect<PostMessagePayload, PostMessageResponse>
18
- getAlternativesFx: Effect<void, GetAlternativesResponse>
19
- translateTextFx: Effect<GoogleTranslatePayload, GoogleTranslateResponse>
20
- textToSpeechTextFx: Effect<GoogleText2SpeechPayload, GoogleText2SpeechResponse>
21
-
22
- constructor(api: ChatbotModelProps['api']) {
23
- this.postMessageFx = createControllerEffect(api.postMessage)
24
- this.getAlternativesFx = createEffect(api.getAlternatives)
25
- this.translateTextFx = createEffect(api.postTranslateText)
26
- this.textToSpeechTextFx = createEffect(api.postTextToSpeech)
27
- }
17
+ postMessageFx: ControlledEffect<PostMessagePayload, PostMessageResponse>
18
+ getAlternativesFx: Effect<void, GetAlternativesResponse>
19
+ translateTextFx: Effect<GoogleTranslatePayload, GoogleTranslateResponse>
20
+ textToSpeechTextFx: Effect<GoogleText2SpeechPayload, GoogleText2SpeechResponse>
21
+
22
+ private KATEX_REPLACEMENTS = {
23
+ '\\$': '__KATEX_DOLLAR_SYMBOL__',
24
+ } as const
25
+
26
+ private KATEX_REPLACEMENTS_REVERSE = {
27
+ __KATEX_DOLLAR_SYMBOL__: '$',
28
+ } as const
29
+
30
+ private replaceKatexSyntax(texts: string[], reverse = false) {
31
+ const replacements = reverse
32
+ ? Object.entries(this.KATEX_REPLACEMENTS_REVERSE)
33
+ : Object.entries(this.KATEX_REPLACEMENTS)
34
+
35
+ return texts.map(text =>
36
+ replacements.reduce(
37
+ (newText, [pattern, placeholder]) => newText.replace(new RegExp(pattern, 'g'), placeholder),
38
+ text,
39
+ ),
40
+ )
41
+ }
42
+
43
+ constructor(api: ChatbotModelProps['api']) {
44
+ this.postMessageFx = createControllerEffect(api.postMessage)
45
+ this.getAlternativesFx = createEffect(api.getAlternatives)
46
+ this.translateTextFx = createEffect(async (payload: GoogleTranslatePayload) => {
47
+ const response = await api.postTranslateText({
48
+ ...payload,
49
+ text: this.replaceKatexSyntax(payload.text),
50
+ })
51
+
52
+ return {
53
+ ...response,
54
+ data: {
55
+ ...response.data,
56
+ translations: response.data.translations.map(translation => ({
57
+ ...translation,
58
+ translatedText: this.replaceKatexSyntax([translation.translatedText], true)[0],
59
+ })),
60
+ },
61
+ }
62
+ })
63
+ this.textToSpeechTextFx = createEffect(api.postTextToSpeech)
64
+ }
28
65
  }