quickblox-react-ui-kit 0.2.3 → 0.2.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/CommonTypes/FunctionResult.d.ts +5 -1
- package/dist/Data/DefaultConfigurations.d.ts +2 -2
- package/dist/Domain/use_cases/ai/AIAnswerAssistUseCase.d.ts +13 -0
- package/dist/Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase.d.ts +13 -0
- package/dist/Domain/use_cases/ai/AITranslateUseCase.d.ts +14 -0
- package/dist/Domain/use_cases/ai/AITranslateWithProxyUseCase.d.ts +14 -0
- package/dist/Presentation/Views/Base/BaseViewModel.d.ts +2 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIMessageWidget.d.ts +4 -1
- package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIWidgetActions/AIWidgetActions.d.ts +3 -2
- package/dist/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/Tone.d.ts +5 -13
- package/dist/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.d.ts +7 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.d.ts +7 -0
- package/dist/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.d.ts +3 -1
- package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.d.ts +7 -0
- package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.d.ts +7 -0
- package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.d.ts +8 -0
- package/dist/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.d.ts +7 -0
- package/dist/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.d.ts +4 -0
- package/dist/QBconfig.d.ts +14 -3
- package/dist/index-ui.js +316 -33
- package/dist/utils/utils.d.ts +9 -0
- package/global.d.ts +12 -4
- package/package.json +5 -1
- package/src/CommonTypes/FunctionResult.ts +6 -1
- package/src/Data/DefaultConfigurations.ts +155 -19
- package/src/Domain/use_cases/ai/AIAnswerAssistUseCase.ts +69 -0
- package/src/Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase.ts +71 -0
- package/src/Domain/use_cases/ai/AIRephraseUseCase.ts +38 -36
- package/src/Domain/use_cases/ai/AIRephraseWithProxyUseCase.ts +25 -21
- package/src/Domain/use_cases/ai/AITranslateUseCase.ts +76 -0
- package/src/Domain/use_cases/ai/AITranslateWithProxyUseCase.ts +79 -0
- package/src/Presentation/Views/Base/BaseViewModel.ts +2 -0
- package/src/Presentation/Views/Dialogs/Dialogs.tsx +1 -1
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIMessageWidget.ts +7 -2
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/AIWidgetActions/AIWidgetActions.tsx +10 -4
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/Tone.ts +29 -15
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIAssistAnswerWidget.tsx +10 -6
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIAssistAnswerWidgetWithProxy.tsx +10 -6
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIRephraseMessageWidget.tsx +17 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAIRephraseMessageWidgetWithProxy.tsx +16 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAITranslateWidget.tsx +13 -12
- package/src/Presentation/components/UI/Dialogs/MessagesView/AIWidgets/UseDefaultAITranslateWidgetWithProxy.tsx +13 -12
- package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.scss +76 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/DefaultAttachmentComponent/DefaultAttachmentComponent.tsx +34 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.scss +26 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/ErrorToast/ErrorToast.tsx +25 -0
- package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.scss +4 -6
- package/src/Presentation/components/UI/Dialogs/MessagesView/InComingMessage/InComingMessage.tsx +93 -405
- package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.scss +2 -3
- package/src/Presentation/components/UI/Dialogs/MessagesView/MessagesView.tsx +561 -400
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.scss +62 -0
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewAudioFile/PreviewAudioFile.tsx +25 -0
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.scss +61 -0
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDefaultFile/PreviewDefaultFile.tsx +32 -0
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.scss +2 -2
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewDialog.tsx +50 -2
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.scss +40 -0
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewImageFile/PreviewImageFile.tsx +26 -0
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.scss +62 -0
- package/src/Presentation/components/UI/Dialogs/PreviewDialog/PreviewVideoFile/PreviewVideoFile.tsx +25 -0
- package/src/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.svg +5 -0
- package/src/Presentation/components/UI/svgs/Icons/AIWidgets/BotIcon/BotIcon.tsx +50 -0
- package/src/Presentation/components/layouts/Desktop/QuickBloxUIKitDesktopLayout.tsx +3 -15
- package/src/Presentation/components/providers/QuickBloxUIKitProvider/useQbInitializedDataContext.ts +15 -14
- package/src/QBconfig.ts +156 -10
- package/src/package_artan_react_ui.json +13 -9
- package/src/package_original.json +5 -1
- package/src/utils/utils.ts +63 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { AITranslateSettings, QBAITranslate } from 'qb-ai-translate';
|
|
2
|
+
import { IChatMessage } from '../../../Data/source/AISource';
|
|
3
|
+
import { IUseCase } from '../base/IUseCase';
|
|
4
|
+
|
|
5
|
+
export class AITranslateUseCase implements IUseCase<void, string> {
|
|
6
|
+
private textToSend: string;
|
|
7
|
+
|
|
8
|
+
private language: string;
|
|
9
|
+
|
|
10
|
+
private dialogMessages: IChatMessage[];
|
|
11
|
+
|
|
12
|
+
private servername: string;
|
|
13
|
+
|
|
14
|
+
private api: string;
|
|
15
|
+
|
|
16
|
+
private port: string;
|
|
17
|
+
|
|
18
|
+
private sessionToken: string;
|
|
19
|
+
|
|
20
|
+
private openAIModel: string;
|
|
21
|
+
|
|
22
|
+
constructor(
|
|
23
|
+
textToSend: string,
|
|
24
|
+
language: string,
|
|
25
|
+
dialogMessages: IChatMessage[],
|
|
26
|
+
servername: string,
|
|
27
|
+
api: string,
|
|
28
|
+
port: string,
|
|
29
|
+
sessionToken: string,
|
|
30
|
+
openAIModel = 'gpt-3.5-turbo',
|
|
31
|
+
) {
|
|
32
|
+
console.log('CONSTRUCTOR AIRephraseUseCase');
|
|
33
|
+
this.api = api;
|
|
34
|
+
this.openAIModel = openAIModel;
|
|
35
|
+
this.port = port;
|
|
36
|
+
this.sessionToken = sessionToken;
|
|
37
|
+
this.textToSend = textToSend;
|
|
38
|
+
this.language = language;
|
|
39
|
+
this.servername = servername;
|
|
40
|
+
this.dialogMessages = dialogMessages;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async execute(): Promise<string> {
|
|
44
|
+
console.log('execute AIRephraseUseCase');
|
|
45
|
+
const settings: AITranslateSettings =
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
47
|
+
QBAITranslate.createDefaultAITranslateSettings();
|
|
48
|
+
|
|
49
|
+
settings.apiKey = this.sessionToken;
|
|
50
|
+
// settings.organization = 'Quickblox';
|
|
51
|
+
settings.model = this.openAIModel;
|
|
52
|
+
settings.language = this.language;
|
|
53
|
+
|
|
54
|
+
return QBAITranslate.translate(
|
|
55
|
+
this.textToSend,
|
|
56
|
+
this.dialogMessages,
|
|
57
|
+
settings,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
// const prompt = AIUtils.createTranslatePrompt(
|
|
61
|
+
// this.textToSend,
|
|
62
|
+
// this.language,
|
|
63
|
+
// );
|
|
64
|
+
//
|
|
65
|
+
// return AISource.getData(
|
|
66
|
+
// prompt,
|
|
67
|
+
// // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
68
|
+
// this.dialogMessages,
|
|
69
|
+
// this.servername,
|
|
70
|
+
// this.api,
|
|
71
|
+
// this.port,
|
|
72
|
+
// this.sessionToken,
|
|
73
|
+
// this.openAIModel,
|
|
74
|
+
// );
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// eslint-disable-next-line import/extensions
|
|
2
|
+
import { AITranslateSettings, QBAITranslate } from 'qb-ai-translate';
|
|
3
|
+
import { IChatMessage } from '../../../Data/source/AISource';
|
|
4
|
+
import { IUseCase } from '../base/IUseCase';
|
|
5
|
+
|
|
6
|
+
export class AITranslateWithProxyUseCase implements IUseCase<void, string> {
|
|
7
|
+
private textToSend: string;
|
|
8
|
+
|
|
9
|
+
private language: string;
|
|
10
|
+
|
|
11
|
+
private dialogMessages: IChatMessage[];
|
|
12
|
+
|
|
13
|
+
private servername: string;
|
|
14
|
+
|
|
15
|
+
private api: string;
|
|
16
|
+
|
|
17
|
+
private port: string;
|
|
18
|
+
|
|
19
|
+
private sessionToken: string;
|
|
20
|
+
|
|
21
|
+
private openAIModel: string;
|
|
22
|
+
|
|
23
|
+
constructor(
|
|
24
|
+
textToSend: string,
|
|
25
|
+
language: string,
|
|
26
|
+
dialogMessages: IChatMessage[],
|
|
27
|
+
servername: string,
|
|
28
|
+
api: string,
|
|
29
|
+
port: string,
|
|
30
|
+
sessionToken: string,
|
|
31
|
+
openAIModel = 'gpt-3.5-turbo',
|
|
32
|
+
) {
|
|
33
|
+
console.log('CONSTRUCTOR AIRephraseUseCase');
|
|
34
|
+
this.api = api;
|
|
35
|
+
this.openAIModel = openAIModel;
|
|
36
|
+
this.port = port;
|
|
37
|
+
this.sessionToken = sessionToken;
|
|
38
|
+
this.textToSend = textToSend;
|
|
39
|
+
this.language = language;
|
|
40
|
+
this.servername = servername;
|
|
41
|
+
this.dialogMessages = dialogMessages;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async execute(): Promise<string> {
|
|
45
|
+
console.log('execute AIRephraseUseCase');
|
|
46
|
+
|
|
47
|
+
const settings: AITranslateSettings =
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
49
|
+
QBAITranslate.createDefaultAITranslateSettings();
|
|
50
|
+
|
|
51
|
+
settings.token = this.sessionToken;
|
|
52
|
+
// settings.organization = 'Quickblox';
|
|
53
|
+
settings.model = this.openAIModel;
|
|
54
|
+
settings.language = this.language;
|
|
55
|
+
settings.serverPath = `${this.servername}:${this.port}/${this.api}`;
|
|
56
|
+
|
|
57
|
+
return QBAITranslate.translate(
|
|
58
|
+
this.textToSend,
|
|
59
|
+
this.dialogMessages,
|
|
60
|
+
settings,
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
// const prompt = AIUtils.createTranslatePrompt(
|
|
64
|
+
// this.textToSend,
|
|
65
|
+
// this.language,
|
|
66
|
+
// );
|
|
67
|
+
//
|
|
68
|
+
// return AISource.getDataWithProxyServer(
|
|
69
|
+
// prompt,
|
|
70
|
+
// // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
71
|
+
// this.dialogMessages,
|
|
72
|
+
// this.servername,
|
|
73
|
+
// this.api,
|
|
74
|
+
// this.port,
|
|
75
|
+
// this.sessionToken,
|
|
76
|
+
// this.openAIModel,
|
|
77
|
+
// );
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -3,6 +3,7 @@ import { GroupDialogEntity } from '../../../Domain/entity/GroupDialogEntity';
|
|
|
3
3
|
import { DialogEntity } from '../../../Domain/entity/DialogEntity';
|
|
4
4
|
import { FileEntity } from '../../../Domain/entity/FileEntity';
|
|
5
5
|
import { IChatMessage } from '../../../Data/source/AISource';
|
|
6
|
+
import { Tone } from '../../components/UI/Dialogs/MessagesView/AIWidgets/Tone';
|
|
6
7
|
|
|
7
8
|
export default class BaseViewModel<TResult> {
|
|
8
9
|
get entity(): TResult {
|
|
@@ -86,3 +87,4 @@ export type FunctionTypeStringWithContextToString = (
|
|
|
86
87
|
context: IChatMessage[],
|
|
87
88
|
additionalSettings?: { [key: string]: any },
|
|
88
89
|
) => Promise<string>;
|
|
90
|
+
export type FunctionTypeVoidToTones = () => Tone[];
|
|
@@ -213,7 +213,7 @@ const DialogsComponent: React.FC<DialogsProps> = ({
|
|
|
213
213
|
) {
|
|
214
214
|
const imagePhoto = (currentDialog.entity as GroupDialogEntity).photo;
|
|
215
215
|
|
|
216
|
-
console.log('Dialogs: avatar: ', imagePhoto || 'NO FOTO');
|
|
216
|
+
// console.log('Dialogs: avatar: ', imagePhoto || 'NO FOTO');
|
|
217
217
|
AvatarComponent = imagePhoto ? (
|
|
218
218
|
<img
|
|
219
219
|
style={{ width: '55px', height: '55px', borderRadius: '50%' }}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FunctionTypeFileWithContextToToVoid,
|
|
3
3
|
FunctionTypeJSXElement,
|
|
4
|
-
FunctionTypeStringWithContextToString,
|
|
4
|
+
FunctionTypeStringWithContextToString, FunctionTypeVoidToTones,
|
|
5
5
|
} from '../../../../../Views/Base/BaseViewModel';
|
|
6
|
+
import {Tone} from "./Tone";
|
|
6
7
|
|
|
7
8
|
export interface MessageWidgetProps {
|
|
8
9
|
// https://api.openai.com/v1/chat/completions'
|
|
@@ -29,7 +30,11 @@ export interface AIFileWidget extends AIWidget {
|
|
|
29
30
|
export interface AIMessageWidget extends AITextWidget {
|
|
30
31
|
textToWidget: FunctionTypeStringWithContextToString;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
+
//
|
|
34
|
+
export interface AIRephraseWidget extends AIMessageWidget {
|
|
35
|
+
tonesToWidget: FunctionTypeVoidToTones;
|
|
36
|
+
}
|
|
37
|
+
//
|
|
33
38
|
export interface AIAttachmentWidget extends AIFileWidget {
|
|
34
39
|
fileToWidget: FunctionTypeFileWithContextToToVoid;
|
|
35
40
|
}
|
|
@@ -2,7 +2,7 @@ import React, { useState, CSSProperties, useRef, useEffect } from 'react';
|
|
|
2
2
|
import './AIWidgetActions.scss';
|
|
3
3
|
import EditDots from '../../../../svgs/Icons/Actions/EditDots';
|
|
4
4
|
|
|
5
|
-
type MenuItem = {
|
|
5
|
+
export type MenuItem = {
|
|
6
6
|
title: string;
|
|
7
7
|
icon?: JSX.Element; // Добавлено поле для иконки пункта меню
|
|
8
8
|
action: () => void;
|
|
@@ -12,6 +12,7 @@ type ContextMenuProps = {
|
|
|
12
12
|
widgetToRender?: JSX.Element;
|
|
13
13
|
items?: MenuItem[];
|
|
14
14
|
title?: string | null;
|
|
15
|
+
disabled?: boolean;
|
|
15
16
|
};
|
|
16
17
|
|
|
17
18
|
const ContextMenuStyles: { [key: string]: CSSProperties } = {
|
|
@@ -20,7 +21,7 @@ const ContextMenuStyles: { [key: string]: CSSProperties } = {
|
|
|
20
21
|
position: 'relative',
|
|
21
22
|
maxWidth: '42px',
|
|
22
23
|
maxHeight: '42px',
|
|
23
|
-
cursor: 'pointer',
|
|
24
|
+
// cursor: 'pointer',
|
|
24
25
|
},
|
|
25
26
|
contextMenuContent: {
|
|
26
27
|
position: 'absolute',
|
|
@@ -50,12 +51,13 @@ function AIWidgetActions({
|
|
|
50
51
|
items,
|
|
51
52
|
widgetToRender,
|
|
52
53
|
title = null,
|
|
54
|
+
disabled = true,
|
|
53
55
|
}: ContextMenuProps) {
|
|
54
56
|
const [menuVisible, setMenuVisible] = useState(false);
|
|
55
57
|
const contextMenuRef = useRef<HTMLDivElement | null>(null);
|
|
56
58
|
|
|
57
59
|
const handleClick = () => {
|
|
58
|
-
setMenuVisible(!menuVisible);
|
|
60
|
+
if (disabled) setMenuVisible(!menuVisible);
|
|
59
61
|
};
|
|
60
62
|
|
|
61
63
|
const handleMenuItemClick = (action: () => void) => {
|
|
@@ -85,7 +87,11 @@ function AIWidgetActions({
|
|
|
85
87
|
<div onClick={handleClick}>{widgetToRender || <EditDots />}</div>
|
|
86
88
|
{menuVisible && (
|
|
87
89
|
// <div ref={contextMenuRef} style={ContextMenuStyles.contextMenuContent}>
|
|
88
|
-
<div
|
|
90
|
+
<div
|
|
91
|
+
ref={contextMenuRef}
|
|
92
|
+
className="dropdown-context-menu-tone"
|
|
93
|
+
style={{ cursor: 'pointer' }}
|
|
94
|
+
>
|
|
89
95
|
{title && <div style={ContextMenuStyles.menuTitle}>{title}</div>}
|
|
90
96
|
{items?.map((item, index) => (
|
|
91
97
|
<div
|
|
@@ -1,21 +1,35 @@
|
|
|
1
|
-
export enum Tone {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
// export enum Tone {
|
|
2
|
+
// Professional = 'Professional Tone',
|
|
3
|
+
// Friendly = 'Friendly Tone',
|
|
4
|
+
// Encouraging = 'Encouraging Tone',
|
|
5
|
+
// Empathetic = 'Empathetic Tone',
|
|
6
|
+
// Neutral = 'Neutral Tone',
|
|
7
|
+
// Assertive = 'Assertive Tone',
|
|
8
|
+
// Instructive = 'Instructive Tone',
|
|
9
|
+
// Persuasive = 'Persuasive Tone',
|
|
10
|
+
// Sarcastic = 'Sarcastic/Ironic Tone',
|
|
11
|
+
// Poetic = 'Poetic Tone',
|
|
12
|
+
// Unchanged = 'Unchanged',
|
|
13
|
+
// }
|
|
14
|
+
|
|
15
|
+
export interface Tone {
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
iconEmoji: string;
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
export const toneToString = (tone: Tone): string => {
|
|
16
|
-
return tone;
|
|
22
|
+
return tone.name;
|
|
17
23
|
};
|
|
18
24
|
|
|
19
|
-
export const stringToTone = (
|
|
20
|
-
|
|
25
|
+
export const stringToTone = (
|
|
26
|
+
toneStr: string,
|
|
27
|
+
description?: string,
|
|
28
|
+
emoji?: string,
|
|
29
|
+
): Tone | undefined => {
|
|
30
|
+
return {
|
|
31
|
+
name: toneStr,
|
|
32
|
+
description: description || '',
|
|
33
|
+
iconEmoji: emoji || '',
|
|
34
|
+
};
|
|
21
35
|
};
|
|
@@ -2,7 +2,8 @@ import { useState } from 'react';
|
|
|
2
2
|
import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
|
|
3
3
|
import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
|
|
4
4
|
import ErrorMessageIcon from './ErrorMessageIcon';
|
|
5
|
-
import {
|
|
5
|
+
import { IChatMessage } from '../../../../../../Data/source/AISource';
|
|
6
|
+
import { AIAnswerAssistUseCase } from '../../../../../../Domain/use_cases/ai/AIAnswerAssistUseCase';
|
|
6
7
|
|
|
7
8
|
// interface MessageWidgetProps {
|
|
8
9
|
// // https://api.openai.com/v1/chat/completions'
|
|
@@ -50,18 +51,21 @@ export default function UseDefaultAIAssistAnswerWidget({
|
|
|
50
51
|
context: IChatMessage[],
|
|
51
52
|
): Promise<string> => {
|
|
52
53
|
if (textToSend && textToSend.length > 0) {
|
|
53
|
-
const
|
|
54
|
+
const openAIModel = 'gpt-3.5-turbo';
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
prompt,
|
|
56
|
+
const useCaseAIAnswerAssist = new AIAnswerAssistUseCase(
|
|
57
|
+
textToSend,
|
|
58
58
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
59
59
|
context,
|
|
60
60
|
servername,
|
|
61
61
|
api,
|
|
62
62
|
port,
|
|
63
63
|
apiKeyOrSessionToken,
|
|
64
|
-
|
|
64
|
+
openAIModel,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// eslint-disable-next-line no-return-await
|
|
68
|
+
return await useCaseAIAnswerAssist.execute().then((data) => {
|
|
65
69
|
setTextFromWidgetToContent(data);
|
|
66
70
|
|
|
67
71
|
return data;
|
|
@@ -2,7 +2,8 @@ import { useState } from 'react';
|
|
|
2
2
|
import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
|
|
3
3
|
import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
|
|
4
4
|
import ErrorMessageIcon from './ErrorMessageIcon';
|
|
5
|
-
import {
|
|
5
|
+
import { IChatMessage } from '../../../../../../Data/source/AISource';
|
|
6
|
+
import { AIAnswerAssistWithProxyUseCase } from '../../../../../../Domain/use_cases/ai/AIAnswerAssistWithProxyUseCase';
|
|
6
7
|
|
|
7
8
|
// interface MessageWidgetProps {
|
|
8
9
|
// // https://api.openai.com/v1/chat/completions'
|
|
@@ -50,18 +51,21 @@ export default function UseDefaultAIAssistAnswerWidgetWithProxy({
|
|
|
50
51
|
context: IChatMessage[],
|
|
51
52
|
): Promise<string> => {
|
|
52
53
|
if (textToSend && textToSend.length > 0) {
|
|
53
|
-
const
|
|
54
|
+
const openAIModel = 'gpt-3.5-turbo';
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
prompt,
|
|
56
|
+
const useCaseAIAnswerAssist = new AIAnswerAssistWithProxyUseCase(
|
|
57
|
+
textToSend,
|
|
58
58
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
59
59
|
context,
|
|
60
60
|
servername,
|
|
61
61
|
api,
|
|
62
62
|
port,
|
|
63
63
|
apiKeyOrSessionToken,
|
|
64
|
-
|
|
64
|
+
openAIModel,
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// eslint-disable-next-line no-return-await
|
|
68
|
+
return await useCaseAIAnswerAssist.execute().then((data) => {
|
|
65
69
|
setTextFromWidgetToContent(data);
|
|
66
70
|
|
|
67
71
|
return data;
|
|
@@ -79,9 +79,26 @@ export default function UseDefaultAIRephraseMessageWidget({
|
|
|
79
79
|
return '';
|
|
80
80
|
};
|
|
81
81
|
|
|
82
|
+
// const tonesToWidget = (): Tone[] => {
|
|
83
|
+
// return [
|
|
84
|
+
// Tone.Professional,
|
|
85
|
+
// Tone.Friendly,
|
|
86
|
+
// Tone.Encouraging,
|
|
87
|
+
// Tone.Empathetic,
|
|
88
|
+
// Tone.Assertive,
|
|
89
|
+
// Tone.Neutral,
|
|
90
|
+
// Tone.Instructive,
|
|
91
|
+
// Tone.Persuasive,
|
|
92
|
+
// Tone.Sarcastic,
|
|
93
|
+
// Tone.Poetic,
|
|
94
|
+
// Tone.Unchanged,
|
|
95
|
+
// ];
|
|
96
|
+
// };
|
|
97
|
+
|
|
82
98
|
return {
|
|
83
99
|
textToContent: textFromWidgetToContent,
|
|
84
100
|
renderWidget,
|
|
85
101
|
textToWidget,
|
|
102
|
+
// tonesToWidget,
|
|
86
103
|
};
|
|
87
104
|
}
|
|
@@ -77,10 +77,26 @@ export default function UseDefaultAIRephraseMessageWidgetWithProxy({
|
|
|
77
77
|
//
|
|
78
78
|
return '';
|
|
79
79
|
};
|
|
80
|
+
// const tonesToWidget = (): Tone[] => {
|
|
81
|
+
// return [
|
|
82
|
+
// Tone.Professional,
|
|
83
|
+
// Tone.Friendly,
|
|
84
|
+
// Tone.Encouraging,
|
|
85
|
+
// Tone.Empathetic,
|
|
86
|
+
// Tone.Assertive,
|
|
87
|
+
// Tone.Neutral,
|
|
88
|
+
// Tone.Instructive,
|
|
89
|
+
// Tone.Persuasive,
|
|
90
|
+
// Tone.Sarcastic,
|
|
91
|
+
// Tone.Poetic,
|
|
92
|
+
// Tone.Unchanged,
|
|
93
|
+
// ];
|
|
94
|
+
// };
|
|
80
95
|
|
|
81
96
|
return {
|
|
82
97
|
textToContent: textFromWidgetToContent,
|
|
83
98
|
renderWidget,
|
|
84
99
|
textToWidget,
|
|
100
|
+
// tonesToWidget,
|
|
85
101
|
};
|
|
86
102
|
}
|
|
@@ -2,7 +2,8 @@ import { useState } from 'react';
|
|
|
2
2
|
import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
|
|
3
3
|
import ErrorMessageIcon from './ErrorMessageIcon';
|
|
4
4
|
import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
|
|
5
|
-
import {
|
|
5
|
+
import { IChatMessage } from '../../../../../../Data/source/AISource';
|
|
6
|
+
import { AITranslateUseCase } from '../../../../../../Domain/use_cases/ai/AITranslateUseCase';
|
|
6
7
|
|
|
7
8
|
// interface MessageWidgetProps {
|
|
8
9
|
// // https://api.openai.com/v1/chat/completions'
|
|
@@ -52,25 +53,25 @@ export default function UseDefaultAITranslateWidget({
|
|
|
52
53
|
): Promise<string> => {
|
|
53
54
|
if (textToSend && textToSend.length > 0) {
|
|
54
55
|
// eslint-disable-next-line no-return-await
|
|
55
|
-
let prompt = `Please, translate the next text in english and give me just only translated text. Text to translate is: "${textToSend}"`;
|
|
56
56
|
const { language } = additionalSettings || {};
|
|
57
|
+
//
|
|
58
|
+
const openAIModel = 'gpt-3.5-turbo';
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
} and give me just only translated text. Text to translate is: "${textToSend}"`;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// eslint-disable-next-line no-return-await
|
|
65
|
-
return await AISource.getData(
|
|
66
|
-
prompt,
|
|
60
|
+
// AIRephraseWithProxyUseCase
|
|
61
|
+
const useCaseAITranslate = new AITranslateUseCase(
|
|
62
|
+
textToSend,
|
|
67
63
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
64
|
+
language,
|
|
68
65
|
context,
|
|
69
66
|
servername,
|
|
70
67
|
api,
|
|
71
68
|
port,
|
|
72
69
|
apiKeyOrSessionToken,
|
|
73
|
-
|
|
70
|
+
openAIModel,
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// eslint-disable-next-line no-return-await
|
|
74
|
+
return await useCaseAITranslate.execute().then((data) => {
|
|
74
75
|
setTextFromWidgetToContent(data);
|
|
75
76
|
|
|
76
77
|
return data;
|
|
@@ -2,7 +2,8 @@ import { useState } from 'react';
|
|
|
2
2
|
import AIWidgetIcon from '../../../svgs/Icons/AIWidgets/AIWidget';
|
|
3
3
|
import ErrorMessageIcon from './ErrorMessageIcon';
|
|
4
4
|
import { AIMessageWidget, MessageWidgetProps } from './AIMessageWidget';
|
|
5
|
-
import {
|
|
5
|
+
import { IChatMessage } from '../../../../../../Data/source/AISource';
|
|
6
|
+
import { AITranslateWithProxyUseCase } from '../../../../../../Domain/use_cases/ai/AITranslateWithProxyUseCase';
|
|
6
7
|
|
|
7
8
|
// interface MessageWidgetProps {
|
|
8
9
|
// // https://api.openai.com/v1/chat/completions'
|
|
@@ -52,25 +53,25 @@ export default function UseDefaultAITranslateWidgetWithProxy({
|
|
|
52
53
|
): Promise<string> => {
|
|
53
54
|
if (textToSend && textToSend.length > 0) {
|
|
54
55
|
// eslint-disable-next-line no-return-await
|
|
55
|
-
let prompt = `Please, translate the next text in english and give me just only translated text. Text to translate is: "${textToSend}"`;
|
|
56
56
|
const { language } = additionalSettings || {};
|
|
57
|
+
//
|
|
58
|
+
const openAIModel = 'gpt-3.5-turbo';
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
} and give me just only translated text. Text to translate is: "${textToSend}"`;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// eslint-disable-next-line no-return-await
|
|
65
|
-
return await AISource.getDataWithProxyServer(
|
|
66
|
-
prompt,
|
|
60
|
+
// AIRephraseWithProxyUseCase
|
|
61
|
+
const useCaseAITranslate = new AITranslateWithProxyUseCase(
|
|
62
|
+
textToSend,
|
|
67
63
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
64
|
+
language,
|
|
68
65
|
context,
|
|
69
66
|
servername,
|
|
70
67
|
api,
|
|
71
68
|
port,
|
|
72
69
|
apiKeyOrSessionToken,
|
|
73
|
-
|
|
70
|
+
openAIModel,
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
// eslint-disable-next-line no-return-await
|
|
74
|
+
return await useCaseAITranslate.execute().then((data) => {
|
|
74
75
|
setTextFromWidgetToContent(data);
|
|
75
76
|
|
|
76
77
|
return data;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
.default-attachment-component-container,
|
|
2
|
+
.default-attachment-component-container * {
|
|
3
|
+
box-sizing: border-box;
|
|
4
|
+
}
|
|
5
|
+
.default-attachment-component-container {
|
|
6
|
+
// background: var(--incoming-background, #e4e6e8);
|
|
7
|
+
border-radius: 22px 22px 22px 0px;
|
|
8
|
+
padding: 8px 16px 8px 1px;
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: row;
|
|
11
|
+
gap: 8px;
|
|
12
|
+
align-items: center;
|
|
13
|
+
justify-content: flex-start;
|
|
14
|
+
flex-shrink: 0;
|
|
15
|
+
position: relative;
|
|
16
|
+
|
|
17
|
+
&--file-wrapper {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: row;
|
|
20
|
+
gap: 8px;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: flex-start;
|
|
23
|
+
align-self: stretch;
|
|
24
|
+
flex-shrink: 0;
|
|
25
|
+
position: relative;
|
|
26
|
+
|
|
27
|
+
&--placeholder {
|
|
28
|
+
flex-shrink: 0;
|
|
29
|
+
width: 32px;
|
|
30
|
+
height: 32px;
|
|
31
|
+
position: static;
|
|
32
|
+
|
|
33
|
+
&__bg {
|
|
34
|
+
background: var(--field-border, #90979f);
|
|
35
|
+
border-radius: 8px;
|
|
36
|
+
width: 32px;
|
|
37
|
+
height: 32px;
|
|
38
|
+
position: absolute;
|
|
39
|
+
left: 0px;
|
|
40
|
+
top: 0px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
&__icon {
|
|
44
|
+
border-radius: 4px;
|
|
45
|
+
padding: 4px;
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: row;
|
|
48
|
+
gap: 0px;
|
|
49
|
+
align-items: center;
|
|
50
|
+
justify-content: center;
|
|
51
|
+
width: 24px;
|
|
52
|
+
height: 24px;
|
|
53
|
+
position: absolute;
|
|
54
|
+
left: 4px;
|
|
55
|
+
top: 4px;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
&--file-d {
|
|
60
|
+
color: var(--secondary-elements, #202f3e);
|
|
61
|
+
text-align: left;
|
|
62
|
+
font: 400 14px/20px "Roboto", sans-serif;
|
|
63
|
+
position: relative;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
.media-text-document {
|
|
71
|
+
align-self: stretch;
|
|
72
|
+
flex: 1;
|
|
73
|
+
position: relative;
|
|
74
|
+
overflow: visible;
|
|
75
|
+
}
|
|
76
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './DefaultAttachmentComponent.scss';
|
|
3
|
+
import TextDocument from '../../../svgs/Icons/Media/TextDocument';
|
|
4
|
+
|
|
5
|
+
type DefaultAttachmentComponentProps = {
|
|
6
|
+
fileName: string;
|
|
7
|
+
};
|
|
8
|
+
// eslint-disable-next-line react/function-component-definition
|
|
9
|
+
const DefaultAttachmentComponent: React.FC<DefaultAttachmentComponentProps> = ({
|
|
10
|
+
fileName,
|
|
11
|
+
}: DefaultAttachmentComponentProps) => {
|
|
12
|
+
return (
|
|
13
|
+
<div className="default-attachment-component-container">
|
|
14
|
+
<div className="default-attachment-component-container--file-wrapper">
|
|
15
|
+
<div className="default-attachment-component-container--file-wrapper--placeholder">
|
|
16
|
+
<div className="default-attachment-component-container--file-wrapper--placeholder__bg" />
|
|
17
|
+
<div className="default-attachment-component-container--file-wrapper--placeholder__icon">
|
|
18
|
+
<TextDocument
|
|
19
|
+
width="16"
|
|
20
|
+
height="16"
|
|
21
|
+
applyZoom
|
|
22
|
+
color="var(--incoming-background)"
|
|
23
|
+
/>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div className="default-attachment-component-container--file-wrapper__file-d">
|
|
27
|
+
{fileName}
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default DefaultAttachmentComponent;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
.error-toast,
|
|
2
|
+
.error-toast * {
|
|
3
|
+
box-sizing: border-box;
|
|
4
|
+
}
|
|
5
|
+
.error-toast {
|
|
6
|
+
background: var(--color-background-overlay);
|
|
7
|
+
border-radius: 4px;
|
|
8
|
+
opacity: 0.6000000238418579;
|
|
9
|
+
padding: 4px 12px 4px 12px;
|
|
10
|
+
// margin-top: 36px;
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: 10px;
|
|
14
|
+
align-items: flex-start;
|
|
15
|
+
justify-content: flex-start;
|
|
16
|
+
position: relative;
|
|
17
|
+
}
|
|
18
|
+
.translation-failed-try-again {
|
|
19
|
+
color: var(--color-background);
|
|
20
|
+
text-align: left;
|
|
21
|
+
font: 500 12px/16px "Roboto", sans-serif;
|
|
22
|
+
position: relative;
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
justify-content: flex-start;
|
|
26
|
+
}
|