@magmamath/students-features 1.6.4-rc.0-testid → 1.6.4
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/ChatControls/ChatLauncher.js +1 -4
- package/dist/commonjs/features/chatbot/components/ChatControls/ChatLauncher.js.map +1 -1
- package/dist/commonjs/features/chatbot/index.js +7 -0
- package/dist/commonjs/features/chatbot/index.js.map +1 -1
- package/dist/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.js +126 -0
- package/dist/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.js.map +1 -0
- package/dist/commonjs/features/keyboard/constants/groups/units.constants.js +3 -3
- package/dist/commonjs/features/keyboard/constants/groups/units.constants.js.map +1 -1
- package/dist/commonjs/features/keyboard/constants/keys/units.constants.js +8 -20
- package/dist/commonjs/features/keyboard/constants/keys/units.constants.js.map +1 -1
- package/dist/commonjs/features/voice/recording/components/VoiceRecordButton.js +2 -1
- package/dist/commonjs/features/voice/recording/components/VoiceRecordButton.js.map +1 -1
- package/dist/commonjs/lib/effector/createControllerEffect.js +7 -6
- package/dist/commonjs/lib/effector/createControllerEffect.js.map +1 -1
- package/dist/module/features/chatbot/components/ChatControls/ChatLauncher.js +1 -4
- package/dist/module/features/chatbot/components/ChatControls/ChatLauncher.js.map +1 -1
- package/dist/module/features/chatbot/index.js +1 -0
- package/dist/module/features/chatbot/index.js.map +1 -1
- package/dist/module/features/chatbot/model/VoiceTranscriptSnapshotModel.js +121 -0
- package/dist/module/features/chatbot/model/VoiceTranscriptSnapshotModel.js.map +1 -0
- package/dist/module/features/keyboard/constants/groups/units.constants.js +3 -3
- package/dist/module/features/keyboard/constants/groups/units.constants.js.map +1 -1
- package/dist/module/features/keyboard/constants/keys/units.constants.js +8 -20
- package/dist/module/features/keyboard/constants/keys/units.constants.js.map +1 -1
- package/dist/module/features/voice/recording/components/VoiceRecordButton.js +2 -1
- package/dist/module/features/voice/recording/components/VoiceRecordButton.js.map +1 -1
- package/dist/module/lib/effector/createControllerEffect.js +7 -6
- package/dist/module/lib/effector/createControllerEffect.js.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/components/ChatControls/ChatLauncher.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/index.d.ts +2 -1
- package/dist/typescript/commonjs/features/chatbot/index.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts +32 -0
- package/dist/typescript/commonjs/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts.map +1 -0
- package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts +1 -0
- package/dist/typescript/commonjs/features/chatbot/types/api.types.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/keyboard/constants/groups/units.constants.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/keyboard/constants/keys/units.constants.d.ts +8 -42
- package/dist/typescript/commonjs/features/keyboard/constants/keys/units.constants.d.ts.map +1 -1
- package/dist/typescript/commonjs/features/pmProgress/shared/pmProgress.constants.d.ts +1 -1
- package/dist/typescript/commonjs/features/voice/recording/components/VoiceRecordButton.d.ts.map +1 -1
- package/dist/typescript/commonjs/lib/effector/createControllerEffect.d.ts +1 -0
- package/dist/typescript/commonjs/lib/effector/createControllerEffect.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/components/ChatControls/ChatLauncher.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/index.d.ts +2 -1
- package/dist/typescript/module/features/chatbot/index.d.ts.map +1 -1
- package/dist/typescript/module/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts +32 -0
- package/dist/typescript/module/features/chatbot/model/VoiceTranscriptSnapshotModel.d.ts.map +1 -0
- package/dist/typescript/module/features/chatbot/types/api.types.d.ts +1 -0
- package/dist/typescript/module/features/chatbot/types/api.types.d.ts.map +1 -1
- package/dist/typescript/module/features/keyboard/constants/groups/units.constants.d.ts.map +1 -1
- package/dist/typescript/module/features/keyboard/constants/keys/units.constants.d.ts +8 -42
- package/dist/typescript/module/features/keyboard/constants/keys/units.constants.d.ts.map +1 -1
- package/dist/typescript/module/features/pmProgress/shared/pmProgress.constants.d.ts +1 -1
- package/dist/typescript/module/features/voice/recording/components/VoiceRecordButton.d.ts.map +1 -1
- package/dist/typescript/module/lib/effector/createControllerEffect.d.ts +1 -0
- package/dist/typescript/module/lib/effector/createControllerEffect.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/features/chatbot/components/ChatControls/ChatLauncher.tsx +1 -3
- package/src/features/chatbot/index.ts +2 -0
- package/src/features/chatbot/model/VoiceTranscriptSnapshotModel.ts +159 -0
- package/src/features/chatbot/types/api.types.ts +1 -0
- package/src/features/keyboard/constants/groups/units.constants.ts +6 -4
- package/src/features/keyboard/constants/keys/units.constants.tsx +8 -20
- package/src/features/voice/recording/components/VoiceRecordButton.tsx +2 -3
- package/src/i18n/.generated/schema.json +1 -0
- package/src/lib/effector/createControllerEffect.ts +13 -6
|
@@ -2,12 +2,13 @@ export { Chatbot } from './components/Chatbot';
|
|
|
2
2
|
export { ChatbotAvatar } from './components/Chat/ChatbotAvatar';
|
|
3
3
|
export { ChatLauncher } from './components/ChatControls/ChatLauncher';
|
|
4
4
|
export { ChatbotModel } from './model/ChatBotModel';
|
|
5
|
+
export { VoiceTranscriptSnapshotModel } from './model/VoiceTranscriptSnapshotModel';
|
|
5
6
|
export { AudioStatus, type AudioProvider, type TTSHighlightRenderer, type TTSHighlightRendererProps, } from './types/t2s.types';
|
|
6
7
|
export { MessageVariant, type ChatbotModelProps, type IChatDrawBoardAdapter, } from './types/model.types';
|
|
7
8
|
export { ChatbotAvatarVariant, ChatbotVariant } from './constants';
|
|
8
9
|
export { getChatbotAvatarVariant } from './helpers';
|
|
9
10
|
export type { RequestOptionalConfig } from '../../lib/effector/createControllerEffect';
|
|
10
|
-
export type { PostMessageResponse, ChatHintPayload, ChatHintResponse, GetAlternativesPayload, GetAlternativesResponse, SendMessagePayload, SendMessageResponse, } from './types/api.types';
|
|
11
|
+
export type { PostMessageResponse, ChatHintPayload, ChatHintResponse, ChatHistory, GetAlternativesPayload, GetAlternativesResponse, SendMessagePayload, SendMessageResponse, } from './types/api.types';
|
|
11
12
|
export { DefaultMessagesCreator } from './model/DefaultMessageCreator';
|
|
12
13
|
export type { ChatAnswer } from './types/units.types';
|
|
13
14
|
export type { ConversationMessage } from './types/units.types';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/chatbot/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACtF,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/chatbot/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAA;AACtF,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AudioTranscriptResponse } from '../../voice/types';
|
|
2
|
+
import { VoiceRecordModel } from '../../voice/recording/model/VoiceRecord.model';
|
|
3
|
+
import { RequestOptionalConfig } from '../../../lib/effector/createControllerEffect';
|
|
4
|
+
type GetTranscriptApi = {
|
|
5
|
+
getAudioFileTranscript: (audioFileId: string) => Promise<AudioTranscriptResponse>;
|
|
6
|
+
};
|
|
7
|
+
export type VoiceTranscriptErrorHandler = (errorMessage: string) => void;
|
|
8
|
+
type VoiceTranscriptSnapshotModelProps = {
|
|
9
|
+
voiceRecord: VoiceRecordModel;
|
|
10
|
+
api: GetTranscriptApi;
|
|
11
|
+
errorHandler?: VoiceTranscriptErrorHandler;
|
|
12
|
+
};
|
|
13
|
+
export declare class VoiceTranscriptSnapshotModel {
|
|
14
|
+
readonly fetchTranscript: (audioFileId: string) => Promise<string | undefined>;
|
|
15
|
+
readonly getTranscriptForCurrent: () => Promise<string | undefined>;
|
|
16
|
+
readonly wrapRequestHint: <P extends object, R>(apiFn: (params: P & {
|
|
17
|
+
voiceTranscript?: string;
|
|
18
|
+
}, requestConfig?: RequestOptionalConfig) => Promise<R>) => (params: P, requestConfig?: RequestOptionalConfig) => Promise<R>;
|
|
19
|
+
private hasPendingVoice;
|
|
20
|
+
constructor({ voiceRecord, api, errorHandler }: VoiceTranscriptSnapshotModelProps);
|
|
21
|
+
private readonly voiceRecord;
|
|
22
|
+
private readonly api;
|
|
23
|
+
private readonly errorHandler?;
|
|
24
|
+
private readonly transcriptByAudioFileId;
|
|
25
|
+
private readonly snapshotByChatKey;
|
|
26
|
+
private readonly captureSnapshotFx;
|
|
27
|
+
private readonly clearSnapshotFx;
|
|
28
|
+
private pollTranscript;
|
|
29
|
+
private resolveAudioFileId;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=VoiceTranscriptSnapshotModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VoiceTranscriptSnapshotModel.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/model/VoiceTranscriptSnapshotModel.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EAGxB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AAOpF,KAAK,gBAAgB,GAAG;IACtB,sBAAsB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAA;CAClF,CAAA;AAOD,MAAM,MAAM,2BAA2B,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;AAExE,KAAK,iCAAiC,GAAG;IACvC,WAAW,EAAE,gBAAgB,CAAA;IAC7B,GAAG,EAAE,gBAAgB,CAAA;IACrB,YAAY,CAAC,EAAE,2BAA2B,CAAA;CAC3C,CAAA;AAUD,qBAAa,4BAA4B;IACvC,SAAgB,eAAe,gBAAiB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAOnF;IAED,SAAgB,uBAAuB,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAiB9E;IAED,SAAgB,eAAe,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAC7C,CACL,MAAM,EAAE,CAAC,GAAG;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,EACxC,aAAa,CAAC,EAAE,qBAAqB,KAClC,OAAO,CAAC,CAAC,CAAC,cAEO,CAAC,kBAAkB,qBAAqB,KAAG,OAAO,CAAC,CAAC,CAAC,CAO5E;IAED,OAAO,CAAC,eAAe;gBAQX,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,iCAAiC;IAoBjF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAiD;IACzF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiD;IAEnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAQhC;IAEF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG9B;YAEY,cAAc;YAgBd,kBAAkB;CAUjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.types.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/types/api.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.types.d.ts","sourceRoot":"","sources":["../../../../../../src/features/chatbot/types/api.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,MAAM,EACN,YAAY,EACZ,eAAe,EACf,SAAS,EACV,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,EAAE,MAAM,CAAA;CAC7B,GAAG,IAAI,CAAA;AAER,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,sBAAsB,EAAE,OAAO,CAAA;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,mBAAmB,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;IACpC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE;QACJ,YAAY,EAAE;YAAE,cAAc,EAAE,MAAM,CAAC;YAAC,sBAAsB,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC3E,CAAA;CACF,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1C,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAA;QACpB,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,WAAW,EAAE;QACX,aAAa,EAAE,MAAM,CAAA;QACrB,KAAK,EAAE,MAAM,CAAA;QACb,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAA;IACpC,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,eAAe,EAAE,CAAA;IACtC,eAAe,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,oBAAoB,EAAE,MAAM,EAAE,CAAA;CAC/B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/groups/units.constants.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,kBA6B7B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,kBA8B3B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/groups/units.constants.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,eAAO,MAAM,eAAe,EAAE,kBA6B7B,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,kBA8B3B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,kBA4D7B,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,kBAkB7B,CAAA;AAED,eAAO,MAAM,mBAAmB,EAAE,kBAIjC,CAAA"}
|
|
@@ -166,9 +166,9 @@ export declare const MATH_VOLUME_UNITS: {
|
|
|
166
166
|
};
|
|
167
167
|
};
|
|
168
168
|
readonly MILLILITER: {
|
|
169
|
-
readonly label: "
|
|
169
|
+
readonly label: "mL";
|
|
170
170
|
readonly mathliveValue: "\\mathrm{mL}";
|
|
171
|
-
readonly katexValue: "
|
|
171
|
+
readonly katexValue: "mL";
|
|
172
172
|
readonly style: {
|
|
173
173
|
button: {
|
|
174
174
|
width: number;
|
|
@@ -199,44 +199,10 @@ export declare const MATH_VOLUME_UNITS: {
|
|
|
199
199
|
};
|
|
200
200
|
};
|
|
201
201
|
};
|
|
202
|
-
readonly MILLILITER_SE: {
|
|
203
|
-
readonly label: "ml";
|
|
204
|
-
readonly mathliveValue: "\\mathrm{ml}";
|
|
205
|
-
readonly katexValue: "ml";
|
|
206
|
-
readonly style: {
|
|
207
|
-
button: {
|
|
208
|
-
width: number;
|
|
209
|
-
};
|
|
210
|
-
container: {
|
|
211
|
-
flexBasis: number;
|
|
212
|
-
} | undefined;
|
|
213
|
-
text: {
|
|
214
|
-
readonly fontSize: 14;
|
|
215
|
-
readonly fontWeight: 700;
|
|
216
|
-
};
|
|
217
|
-
};
|
|
218
|
-
};
|
|
219
|
-
readonly LITER_SE: {
|
|
220
|
-
readonly label: "l";
|
|
221
|
-
readonly mathliveValue: "\\mathrm{l}";
|
|
222
|
-
readonly katexValue: "l";
|
|
223
|
-
readonly style: {
|
|
224
|
-
button: {
|
|
225
|
-
width: number;
|
|
226
|
-
};
|
|
227
|
-
container: {
|
|
228
|
-
flexBasis: number;
|
|
229
|
-
} | undefined;
|
|
230
|
-
text: {
|
|
231
|
-
readonly fontSize: 14;
|
|
232
|
-
readonly fontWeight: 700;
|
|
233
|
-
};
|
|
234
|
-
};
|
|
235
|
-
};
|
|
236
202
|
readonly DL: {
|
|
237
|
-
readonly label: "
|
|
238
|
-
readonly mathliveValue: "\\mathrm{
|
|
239
|
-
readonly katexValue: "
|
|
203
|
+
readonly label: "dL";
|
|
204
|
+
readonly mathliveValue: "\\mathrm{dL}";
|
|
205
|
+
readonly katexValue: "dL";
|
|
240
206
|
readonly style: {
|
|
241
207
|
button: {
|
|
242
208
|
width: number;
|
|
@@ -337,9 +303,9 @@ export declare const MATH_VOLUME_UNITS: {
|
|
|
337
303
|
};
|
|
338
304
|
};
|
|
339
305
|
readonly CL: {
|
|
340
|
-
readonly label: "
|
|
341
|
-
readonly mathliveValue: "\\mathrm{
|
|
342
|
-
readonly katexValue: "
|
|
306
|
+
readonly label: "cL";
|
|
307
|
+
readonly mathliveValue: "\\mathrm{cL}";
|
|
308
|
+
readonly katexValue: "cL";
|
|
343
309
|
readonly style: {
|
|
344
310
|
button: {
|
|
345
311
|
width: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/keys/units.constants.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAatD,eAAO,MAAM,mBAAmB,EAAE,kBAyDxB,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAAE,kBA0EtB,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,kBAsEpB,CAAA;AAEV,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"units.constants.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/keyboard/constants/keys/units.constants.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAatD,eAAO,MAAM,mBAAmB,EAAE,kBAyDxB,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAAE,kBA0EtB,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,kBAsEpB,CAAA;AAEV,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHpB,CAAA;AAEV,eAAO,MAAM,iBAAiB,EAAE,kBA6DtB,CAAA;AAEV,eAAO,MAAM,eAAe,EAAE,kBAsEpB,CAAA"}
|
|
@@ -32,7 +32,7 @@ export declare enum SessionStorageKeys {
|
|
|
32
32
|
* Primary → _4 → _6 variants, cycling through 7 base colors.
|
|
33
33
|
* Supports up to 21 unique colors before repeating.
|
|
34
34
|
*/
|
|
35
|
-
export declare const DOMAIN_COLORS: ("#
|
|
35
|
+
export declare const DOMAIN_COLORS: ("#5cd497" | "#ff5279" | "#976fe6" | "#cb60af" | "#768de3" | "#58BFBB" | "#7dddac" | "#29a96f" | "#ff7594" | "#d9295b" | "#ac8ceb" | "#7853c6" | "#d681c0" | "#BA459B" | "#92a4e9" | "#4e6ed1" | "#7ACDD1" | "#279799")[];
|
|
36
36
|
export declare const EMPTY_PIE_CHART_DATA: {
|
|
37
37
|
value: number;
|
|
38
38
|
fillPercent: number;
|
package/dist/typescript/module/features/voice/recording/components/VoiceRecordButton.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoiceRecordButton.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/voice/recording/components/VoiceRecordButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAI7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,gBAAgB,CAAA;IACvB,aAAa,EAAE,mBAAmB,CAAA;CACnC,CAAA;
|
|
1
|
+
{"version":3,"file":"VoiceRecordButton.d.ts","sourceRoot":"","sources":["../../../../../../../src/features/voice/recording/components/VoiceRecordButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAI7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,KAAK,sBAAsB,GAAG;IAC5B,KAAK,EAAE,gBAAgB,CAAA;IACvB,aAAa,EAAE,mBAAmB,CAAA;CACnC,CAAA;AAqDD,eAAO,MAAM,iBAAiB,6BAA8B,sBAAsB,sBAiDjF,CAAA"}
|
|
@@ -9,6 +9,7 @@ type ControlledRequestProps<P> = {
|
|
|
9
9
|
};
|
|
10
10
|
export type RequestOptionalConfig = {
|
|
11
11
|
signal?: AbortSignal;
|
|
12
|
+
extendTimeoutMs?: (ms: number) => void;
|
|
12
13
|
};
|
|
13
14
|
export declare function controlledRequest<R = void, P = void>(request: (props: P, config?: RequestOptionalConfig) => Promise<R>): ({ data, controller, abortAfter, }: ControlledRequestProps<P>) => Promise<R>;
|
|
14
15
|
export declare const createControllerEffect: <T, P = void>(fn: (props: P, config?: RequestOptionalConfig) => Promise<T>) => ControlledEffect<P, T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createControllerEffect.d.ts","sourceRoot":"","sources":["../../../../../src/lib/effector/createControllerEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAMpD,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAClD,UAAU,EAAE,eAAe,CAAA;CAC5B,CAAA;AAED,KAAK,sBAAsB,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAA;IACP,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;
|
|
1
|
+
{"version":3,"file":"createControllerEffect.d.ts","sourceRoot":"","sources":["../../../../../src/lib/effector/createControllerEffect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAMpD,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAClD,UAAU,EAAE,eAAe,CAAA;CAC5B,CAAA;AAED,KAAK,sBAAsB,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAA;IACP,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC,CAAA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAClD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,uCAM9D,sBAAsB,CAAC,CAAC,CAAC,gBA4B7B;AAED,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,CAAC,aACrC,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,2BAa7D,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@magmamath/students-features",
|
|
3
|
-
"version": "1.6.4
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "Magmamath features library",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "src/index.ts",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"@magmamath/frontend-config": "1.4.0",
|
|
76
76
|
"@magmamath/react-native-draw-board": "1.8.2",
|
|
77
77
|
"@magmamath/react-native-ui": "0.5.9",
|
|
78
|
-
"@magmamath/students-qa": "0.
|
|
78
|
+
"@magmamath/students-qa": "0.1.9",
|
|
79
79
|
"@matteappen/skills-utils": "^3.7.1",
|
|
80
80
|
"@react-native-masked-view/masked-view": "^0.3.2",
|
|
81
81
|
"@react-native/eslint-config": "^0.73.1",
|
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
COLORS,
|
|
9
9
|
SparkIcon,
|
|
10
10
|
} from '@magmamath/react-native-ui'
|
|
11
|
-
import { TEST_IDS } from '@magmamath/students-qa'
|
|
12
11
|
import { LavaIcon } from '../../../../shared/icons'
|
|
13
12
|
import { ChatbotVariant } from '../../constants'
|
|
14
13
|
|
|
@@ -33,13 +32,12 @@ export const ChatLauncher = ({
|
|
|
33
32
|
onPress={onPress}
|
|
34
33
|
icon={<SparkIcon color={COLORS.PRIMARY_ORANGE} size={iconSize} />}
|
|
35
34
|
accessibilityRole="button"
|
|
36
|
-
testID={TEST_IDS.CHAT_LAUNCHER_BUTTON}
|
|
37
35
|
/>
|
|
38
36
|
)
|
|
39
37
|
}
|
|
40
38
|
|
|
41
39
|
return (
|
|
42
|
-
<Pressable onPress={onPress} accessibilityRole="button"
|
|
40
|
+
<Pressable onPress={onPress} accessibilityRole="button">
|
|
43
41
|
<LavaIcon size={iconSize} />
|
|
44
42
|
</Pressable>
|
|
45
43
|
)
|
|
@@ -2,6 +2,7 @@ export { Chatbot } from './components/Chatbot'
|
|
|
2
2
|
export { ChatbotAvatar } from './components/Chat/ChatbotAvatar'
|
|
3
3
|
export { ChatLauncher } from './components/ChatControls/ChatLauncher'
|
|
4
4
|
export { ChatbotModel } from './model/ChatBotModel'
|
|
5
|
+
export { VoiceTranscriptSnapshotModel } from './model/VoiceTranscriptSnapshotModel'
|
|
5
6
|
export {
|
|
6
7
|
AudioStatus,
|
|
7
8
|
type AudioProvider,
|
|
@@ -20,6 +21,7 @@ export type {
|
|
|
20
21
|
PostMessageResponse,
|
|
21
22
|
ChatHintPayload,
|
|
22
23
|
ChatHintResponse,
|
|
24
|
+
ChatHistory,
|
|
23
25
|
GetAlternativesPayload,
|
|
24
26
|
GetAlternativesResponse,
|
|
25
27
|
SendMessagePayload,
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { createEffect, sample } from 'effector'
|
|
2
|
+
import {
|
|
3
|
+
AudioTranscriptResponse,
|
|
4
|
+
TranscriptionStatus,
|
|
5
|
+
VoiceRecordCollectionItem,
|
|
6
|
+
} from '../../voice/types'
|
|
7
|
+
import { VoiceRecordModel } from '../../voice/recording/model/VoiceRecord.model'
|
|
8
|
+
import { RequestOptionalConfig } from '../../../lib/effector/createControllerEffect'
|
|
9
|
+
import { getText } from '../../../i18n/i18n'
|
|
10
|
+
|
|
11
|
+
const TRANSCRIPT_RETRY_INTERVAL_MS = 2000
|
|
12
|
+
const TRANSCRIPT_MAX_RETRIES = 20
|
|
13
|
+
const CHAT_WITH_VOICE_TIMEOUT_MS = 60_000
|
|
14
|
+
|
|
15
|
+
type GetTranscriptApi = {
|
|
16
|
+
getAudioFileTranscript: (audioFileId: string) => Promise<AudioTranscriptResponse>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type CaptureParams = {
|
|
20
|
+
voiceKey: string
|
|
21
|
+
record: VoiceRecordCollectionItem
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type VoiceTranscriptErrorHandler = (errorMessage: string) => void
|
|
25
|
+
|
|
26
|
+
type VoiceTranscriptSnapshotModelProps = {
|
|
27
|
+
voiceRecord: VoiceRecordModel
|
|
28
|
+
api: GetTranscriptApi
|
|
29
|
+
errorHandler?: VoiceTranscriptErrorHandler
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Voice key: `${assignmentId}-${problemId}-${attemptsCount}`
|
|
33
|
+
// Chat key: `${assignmentId}-${problemId}` — survives attempt increments and voice deletion.
|
|
34
|
+
const toChatKey = (voiceKey: string): string | null => {
|
|
35
|
+
const lastDashIndex = voiceKey.lastIndexOf('-')
|
|
36
|
+
if (lastDashIndex <= 0) return null
|
|
37
|
+
return voiceKey.slice(0, lastDashIndex)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export class VoiceTranscriptSnapshotModel {
|
|
41
|
+
public readonly fetchTranscript = (audioFileId: string): Promise<string | undefined> => {
|
|
42
|
+
const cached = this.transcriptByAudioFileId.get(audioFileId)
|
|
43
|
+
if (cached) return cached
|
|
44
|
+
|
|
45
|
+
const promise = this.pollTranscript(audioFileId).catch(() => undefined)
|
|
46
|
+
this.transcriptByAudioFileId.set(audioFileId, promise)
|
|
47
|
+
return promise
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public readonly getTranscriptForCurrent = async (): Promise<string | undefined> => {
|
|
51
|
+
const voiceKey = this.voiceRecord.$currentKey.getState()
|
|
52
|
+
if (!voiceKey) return undefined
|
|
53
|
+
|
|
54
|
+
const chatKey = toChatKey(voiceKey)
|
|
55
|
+
if (chatKey) {
|
|
56
|
+
const snapshot = this.snapshotByChatKey.get(chatKey)
|
|
57
|
+
if (snapshot) return snapshot
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const record = this.voiceRecord.collection.get(voiceKey)
|
|
61
|
+
if (!record) return undefined
|
|
62
|
+
|
|
63
|
+
const audioFileId = await this.resolveAudioFileId(record)
|
|
64
|
+
if (!audioFileId) return undefined
|
|
65
|
+
|
|
66
|
+
return this.fetchTranscript(audioFileId)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public readonly wrapRequestHint = <P extends object, R>(
|
|
70
|
+
apiFn: (
|
|
71
|
+
params: P & { voiceTranscript?: string },
|
|
72
|
+
requestConfig?: RequestOptionalConfig,
|
|
73
|
+
) => Promise<R>,
|
|
74
|
+
) => {
|
|
75
|
+
return async (params: P, requestConfig?: RequestOptionalConfig): Promise<R> => {
|
|
76
|
+
if (this.hasPendingVoice()) {
|
|
77
|
+
requestConfig?.extendTimeoutMs?.(CHAT_WITH_VOICE_TIMEOUT_MS)
|
|
78
|
+
}
|
|
79
|
+
const voiceTranscript = await this.getTranscriptForCurrent()
|
|
80
|
+
return apiFn(voiceTranscript ? { ...params, voiceTranscript } : params, requestConfig)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private hasPendingVoice(): boolean {
|
|
85
|
+
const voiceKey = this.voiceRecord.$currentKey.getState()
|
|
86
|
+
if (!voiceKey) return false
|
|
87
|
+
const chatKey = toChatKey(voiceKey)
|
|
88
|
+
if (chatKey && this.snapshotByChatKey.has(chatKey)) return true
|
|
89
|
+
return !!this.voiceRecord.collection.get(voiceKey)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
constructor({ voiceRecord, api, errorHandler }: VoiceTranscriptSnapshotModelProps) {
|
|
93
|
+
this.voiceRecord = voiceRecord
|
|
94
|
+
this.api = api
|
|
95
|
+
this.errorHandler = errorHandler
|
|
96
|
+
|
|
97
|
+
sample({
|
|
98
|
+
clock: voiceRecord.setCurrentRecord,
|
|
99
|
+
source: voiceRecord.$currentKey,
|
|
100
|
+
filter: (_, record): record is VoiceRecordCollectionItem => !!record,
|
|
101
|
+
fn: (voiceKey, record) => ({ voiceKey, record }),
|
|
102
|
+
target: this.captureSnapshotFx,
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
sample({
|
|
106
|
+
clock: voiceRecord.deleteCurrentRecording,
|
|
107
|
+
source: voiceRecord.$currentKey,
|
|
108
|
+
target: this.clearSnapshotFx,
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private readonly voiceRecord: VoiceRecordModel
|
|
113
|
+
private readonly api: GetTranscriptApi
|
|
114
|
+
private readonly errorHandler?: VoiceTranscriptErrorHandler
|
|
115
|
+
private readonly transcriptByAudioFileId = new Map<string, Promise<string | undefined>>()
|
|
116
|
+
private readonly snapshotByChatKey = new Map<string, Promise<string | undefined>>()
|
|
117
|
+
|
|
118
|
+
private readonly captureSnapshotFx = createEffect(({ voiceKey, record }: CaptureParams) => {
|
|
119
|
+
const chatKey = toChatKey(voiceKey)
|
|
120
|
+
if (!chatKey) return
|
|
121
|
+
|
|
122
|
+
const transcriptPromise = this.resolveAudioFileId(record).then((audioFileId) =>
|
|
123
|
+
audioFileId ? this.fetchTranscript(audioFileId) : undefined,
|
|
124
|
+
)
|
|
125
|
+
this.snapshotByChatKey.set(chatKey, transcriptPromise)
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
private readonly clearSnapshotFx = createEffect((voiceKey: string) => {
|
|
129
|
+
const chatKey = toChatKey(voiceKey)
|
|
130
|
+
if (chatKey) this.snapshotByChatKey.delete(chatKey)
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
private async pollTranscript(audioFileId: string): Promise<string | undefined> {
|
|
134
|
+
for (let attempt = 0; attempt < TRANSCRIPT_MAX_RETRIES; attempt++) {
|
|
135
|
+
await new Promise((resolve) => setTimeout(resolve, TRANSCRIPT_RETRY_INTERVAL_MS))
|
|
136
|
+
|
|
137
|
+
try {
|
|
138
|
+
const response = await this.api.getAudioFileTranscript(audioFileId)
|
|
139
|
+
if (response.status === TranscriptionStatus.COMPLETED) return response.text
|
|
140
|
+
if (response.status === TranscriptionStatus.FAILED) break
|
|
141
|
+
} catch {
|
|
142
|
+
// network/request failure — retry on next iteration
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
this.errorHandler?.(getText('voice.transcriptionError'))
|
|
146
|
+
return undefined
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
private async resolveAudioFileId(record: VoiceRecordCollectionItem): Promise<string | undefined> {
|
|
150
|
+
if (record.id) return record.id
|
|
151
|
+
if (!record.audioUploadPromise) return undefined
|
|
152
|
+
try {
|
|
153
|
+
const result = await record.audioUploadPromise
|
|
154
|
+
return result?.id
|
|
155
|
+
} catch {
|
|
156
|
+
return undefined
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -84,7 +84,7 @@ export const KEYBOARD_VOLUME: KeyboardRowsGroups = {
|
|
|
84
84
|
MATH_VOLUME_UNITS.MILLILITER,
|
|
85
85
|
MATH_VOLUME_UNITS.CL,
|
|
86
86
|
MATH_VOLUME_UNITS.DL,
|
|
87
|
-
MATH_VOLUME_UNITS.
|
|
87
|
+
MATH_VOLUME_UNITS.LITER,
|
|
88
88
|
],
|
|
89
89
|
],
|
|
90
90
|
},
|
|
@@ -94,8 +94,9 @@ export const KEYBOARD_VOLUME: KeyboardRowsGroups = {
|
|
|
94
94
|
MATH_VOLUME_UNITS.CUBIC_MILLIMETER,
|
|
95
95
|
MATH_VOLUME_UNITS.CUBIC_CENTIMETER,
|
|
96
96
|
MATH_VOLUME_UNITS.CUBIC_METER,
|
|
97
|
-
MATH_VOLUME_UNITS.
|
|
98
|
-
MATH_VOLUME_UNITS.
|
|
97
|
+
MATH_VOLUME_UNITS.MILLILITER,
|
|
98
|
+
MATH_VOLUME_UNITS.CL,
|
|
99
|
+
MATH_VOLUME_UNITS.LITER,
|
|
99
100
|
MATH_VOLUME_UNITS.GAL,
|
|
100
101
|
],
|
|
101
102
|
[
|
|
@@ -114,8 +115,9 @@ export const KEYBOARD_VOLUME: KeyboardRowsGroups = {
|
|
|
114
115
|
MATH_VOLUME_UNITS.CUBIC_MILLIMETER,
|
|
115
116
|
MATH_VOLUME_UNITS.CUBIC_CENTIMETER,
|
|
116
117
|
MATH_VOLUME_UNITS.CUBIC_METER,
|
|
117
|
-
MATH_VOLUME_UNITS.CUBIC_KILOMETER,
|
|
118
118
|
MATH_VOLUME_UNITS.MILLILITER,
|
|
119
|
+
MATH_VOLUME_UNITS.CL,
|
|
120
|
+
MATH_VOLUME_UNITS.LITER,
|
|
119
121
|
MATH_VOLUME_UNITS.GAL,
|
|
120
122
|
],
|
|
121
123
|
[
|
|
@@ -285,9 +285,9 @@ export const MATH_VOLUME_UNITS = {
|
|
|
285
285
|
style: KEYBOARD_STYLE_PRESETS.MEDIUM,
|
|
286
286
|
},
|
|
287
287
|
MILLILITER: {
|
|
288
|
-
label: '
|
|
288
|
+
label: 'mL',
|
|
289
289
|
mathliveValue: '\\mathrm{mL}',
|
|
290
|
-
katexValue: '
|
|
290
|
+
katexValue: 'mL',
|
|
291
291
|
style: KEYBOARD_STYLE_PRESETS.SMALL,
|
|
292
292
|
},
|
|
293
293
|
LITER: {
|
|
@@ -296,22 +296,10 @@ export const MATH_VOLUME_UNITS = {
|
|
|
296
296
|
katexValue: 'L',
|
|
297
297
|
style: KEYBOARD_STYLE_PRESETS.SMALL,
|
|
298
298
|
},
|
|
299
|
-
MILLILITER_SE: {
|
|
300
|
-
label: 'ml',
|
|
301
|
-
mathliveValue: '\\mathrm{ml}',
|
|
302
|
-
katexValue: 'ml',
|
|
303
|
-
style: KEYBOARD_STYLE_PRESETS.SMALL,
|
|
304
|
-
},
|
|
305
|
-
LITER_SE: {
|
|
306
|
-
label: 'l',
|
|
307
|
-
mathliveValue: '\\mathrm{l}',
|
|
308
|
-
katexValue: 'l',
|
|
309
|
-
style: KEYBOARD_STYLE_PRESETS.SMALL,
|
|
310
|
-
},
|
|
311
299
|
DL: {
|
|
312
|
-
label: '
|
|
313
|
-
mathliveValue: '\\mathrm{
|
|
314
|
-
katexValue: '
|
|
300
|
+
label: 'dL',
|
|
301
|
+
mathliveValue: '\\mathrm{dL}',
|
|
302
|
+
katexValue: 'dL',
|
|
315
303
|
style: KEYBOARD_STYLE_PRESETS.SMALL,
|
|
316
304
|
},
|
|
317
305
|
CUP: {
|
|
@@ -346,9 +334,9 @@ export const MATH_VOLUME_UNITS = {
|
|
|
346
334
|
style: KEYBOARD_STYLE_PRESETS.XL,
|
|
347
335
|
},
|
|
348
336
|
CL: {
|
|
349
|
-
label: '
|
|
350
|
-
mathliveValue: '\\mathrm{
|
|
351
|
-
katexValue: '
|
|
337
|
+
label: 'cL',
|
|
338
|
+
mathliveValue: '\\mathrm{cL}',
|
|
339
|
+
katexValue: 'cL',
|
|
352
340
|
style: KEYBOARD_STYLE_PRESETS.SMALL,
|
|
353
341
|
},
|
|
354
342
|
} as const
|
|
@@ -59,6 +59,7 @@ const AdvancedButton = ({ isRecording, disabled, onPressIn }: AdvancedButtonProp
|
|
|
59
59
|
}}
|
|
60
60
|
isActive={isRecording}
|
|
61
61
|
variant={ButtonVariant.TERTIARY}
|
|
62
|
+
disabled={disabled}
|
|
62
63
|
onPressIn={onPressIn}
|
|
63
64
|
icon={
|
|
64
65
|
isRecording ? (
|
|
@@ -66,9 +67,7 @@ const AdvancedButton = ({ isRecording, disabled, onPressIn }: AdvancedButtonProp
|
|
|
66
67
|
) : (
|
|
67
68
|
<MicrophoneIcon
|
|
68
69
|
style={styles.advancedMicrophoneIcon}
|
|
69
|
-
color={
|
|
70
|
-
disabled ? COLORS.NEUTRAL_5 : isRecording ? COLORS.NEUTRAL_1 : COLORS.NEUTRAL_9
|
|
71
|
-
}
|
|
70
|
+
color={isRecording ? COLORS.NEUTRAL_1 : COLORS.NEUTRAL_9}
|
|
72
71
|
/>
|
|
73
72
|
)
|
|
74
73
|
}
|
|
@@ -144,6 +144,7 @@
|
|
|
144
144
|
"redo": "Redo",
|
|
145
145
|
"redoRecording": "Redo recording?",
|
|
146
146
|
"thisWillRemoveRecording": "This will remove your previous recording.",
|
|
147
|
+
"transcriptionError": "Transcription request error",
|
|
147
148
|
"transcriptions": "Transcriptions",
|
|
148
149
|
"transcriptNotAvailable": "Transcript not available",
|
|
149
150
|
"uploadFailed": "Upload failed. Please try again.",
|
|
@@ -14,7 +14,10 @@ type ControlledRequestProps<P> = {
|
|
|
14
14
|
abortAfter?: number
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export type RequestOptionalConfig = {
|
|
17
|
+
export type RequestOptionalConfig = {
|
|
18
|
+
signal?: AbortSignal
|
|
19
|
+
extendTimeoutMs?: (ms: number) => void
|
|
20
|
+
}
|
|
18
21
|
|
|
19
22
|
export function controlledRequest<R = void, P = void>(
|
|
20
23
|
request: (props: P, config?: RequestOptionalConfig) => Promise<R>,
|
|
@@ -26,14 +29,18 @@ export function controlledRequest<R = void, P = void>(
|
|
|
26
29
|
}: ControlledRequestProps<P>) => {
|
|
27
30
|
let timeout: ReturnType<typeof setTimeout> | null = null
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
timeout
|
|
31
|
-
|
|
32
|
-
}, abortAfter)
|
|
32
|
+
const scheduleAbort = (ms: number) => {
|
|
33
|
+
if (timeout !== null) clearTimeout(timeout)
|
|
34
|
+
timeout = ms > 0 ? setTimeout(() => controller.abort('timeout'), ms) : null
|
|
33
35
|
}
|
|
34
36
|
|
|
37
|
+
if (abortAfter) scheduleAbort(abortAfter)
|
|
38
|
+
|
|
35
39
|
try {
|
|
36
|
-
const response = await request(data, {
|
|
40
|
+
const response = await request(data, {
|
|
41
|
+
signal: controller?.signal,
|
|
42
|
+
extendTimeoutMs: scheduleAbort,
|
|
43
|
+
})
|
|
37
44
|
if (timeout !== null) clearTimeout(timeout)
|
|
38
45
|
return response
|
|
39
46
|
} catch (error: unknown) {
|