@apia/ai 4.0.15 → 4.0.16
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/index.d.ts +13 -6
- package/dist/index.js +82 -35
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.d.ts
CHANGED
|
@@ -57,17 +57,25 @@ type TChatControllerState = {
|
|
|
57
57
|
canAttach: boolean;
|
|
58
58
|
canAddSystemMessage: boolean;
|
|
59
59
|
canAddUserMessage: boolean;
|
|
60
|
+
canShowSystemMessage: boolean;
|
|
61
|
+
canShowUserMessage: boolean;
|
|
60
62
|
hideDeleteButton: boolean;
|
|
61
63
|
maxAttachmentsSize: number;
|
|
62
64
|
messages: ChatMessage[];
|
|
63
65
|
currentMessage: ChatMessage;
|
|
64
66
|
};
|
|
65
|
-
|
|
67
|
+
interface BaseMessageCallbackProps {
|
|
66
68
|
message: ChatMessage;
|
|
67
|
-
}
|
|
69
|
+
}
|
|
70
|
+
interface BaseMessageCallbackResponse {
|
|
71
|
+
responseMessage?: ChatMessage;
|
|
72
|
+
}
|
|
73
|
+
type MessageSubmitCallback<T extends BaseMessageCallbackProps> = (props: T) => Promise<BaseMessageCallbackResponse>;
|
|
74
|
+
type MessageResponseCallback<T extends BaseMessageCallbackResponse> = (props: T) => Promise<BaseMessageCallbackResponse>;
|
|
68
75
|
declare class ChatController2 {
|
|
69
76
|
private onMessageSubmit;
|
|
70
77
|
id: string;
|
|
78
|
+
private onMessageResponse?;
|
|
71
79
|
currentIndex: number;
|
|
72
80
|
state: TChatControllerState;
|
|
73
81
|
private internalAudioRecorder;
|
|
@@ -79,12 +87,13 @@ declare class ChatController2 {
|
|
|
79
87
|
record: number;
|
|
80
88
|
state: _apia_util.AudioRecorderState;
|
|
81
89
|
};
|
|
82
|
-
constructor(props: Partial<TChatControllerState>, onMessageSubmit:
|
|
90
|
+
constructor(props: Partial<TChatControllerState>, onMessageSubmit: MessageSubmitCallback<BaseMessageCallbackProps>, id: string, onMessageResponse?: MessageResponseCallback<BaseMessageCallbackResponse> | undefined);
|
|
83
91
|
removeMessage(idx: number): void;
|
|
84
92
|
addMessage(message: ChatMessage): void;
|
|
85
93
|
clearHistory(): void;
|
|
86
94
|
clearMessage(): void;
|
|
87
95
|
removeAttachment(attachment: IAttachment): void;
|
|
96
|
+
private isValidToShow;
|
|
88
97
|
nextMessage(): void;
|
|
89
98
|
prevMessage(): void;
|
|
90
99
|
History: (() => react.JSX.Element) & {
|
|
@@ -231,9 +240,7 @@ declare class SearchController {
|
|
|
231
240
|
}
|
|
232
241
|
|
|
233
242
|
declare class FloatingChatController extends ChatController2 {
|
|
234
|
-
constructor(props: Partial<TChatControllerState
|
|
235
|
-
isPhone: boolean;
|
|
236
|
-
}>, onMessageSubmit: MessageCallback, id: string);
|
|
243
|
+
constructor(props: Partial<TChatControllerState>, onMessageSubmit: MessageSubmitCallback<BaseMessageCallbackProps>, id: string, onMessageResponse?: MessageResponseCallback<BaseMessageCallbackResponse>);
|
|
237
244
|
open(): void;
|
|
238
245
|
Window: (() => react.JSX.Element) & {
|
|
239
246
|
displayName: string;
|
package/dist/index.js
CHANGED
|
@@ -879,7 +879,7 @@ var __accessCheck = (obj, member, msg) => {
|
|
|
879
879
|
};
|
|
880
880
|
var __privateGet = (obj, member, getter) => {
|
|
881
881
|
__accessCheck(obj, member, "read from private field");
|
|
882
|
-
return member.get(obj);
|
|
882
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
883
883
|
};
|
|
884
884
|
var __privateAdd = (obj, member, value) => {
|
|
885
885
|
if (member.has(obj))
|
|
@@ -888,7 +888,7 @@ var __privateAdd = (obj, member, value) => {
|
|
|
888
888
|
};
|
|
889
889
|
var __privateSet = (obj, member, value, setter) => {
|
|
890
890
|
__accessCheck(obj, member, "write to private field");
|
|
891
|
-
member.set(obj, value);
|
|
891
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
892
892
|
return value;
|
|
893
893
|
};
|
|
894
894
|
var _promptsHistory, _internalAudioRecorder;
|
|
@@ -1117,6 +1117,7 @@ const _SearchController = class _SearchController {
|
|
|
1117
1117
|
};
|
|
1118
1118
|
__publicField$6(_SearchController, "instance", new _SearchController());
|
|
1119
1119
|
let SearchController = _SearchController;
|
|
1120
|
+
var SearchController$1 = SearchController;
|
|
1120
1121
|
|
|
1121
1122
|
const FileAttachment = observer(
|
|
1122
1123
|
({
|
|
@@ -1529,9 +1530,10 @@ var __publicField$4 = (obj, key, value) => {
|
|
|
1529
1530
|
return value;
|
|
1530
1531
|
};
|
|
1531
1532
|
class ChatController2 {
|
|
1532
|
-
constructor(props, onMessageSubmit, id) {
|
|
1533
|
+
constructor(props, onMessageSubmit, id, onMessageResponse) {
|
|
1533
1534
|
this.onMessageSubmit = onMessageSubmit;
|
|
1534
1535
|
this.id = id;
|
|
1536
|
+
this.onMessageResponse = onMessageResponse;
|
|
1535
1537
|
__publicField$4(this, "currentIndex", 0);
|
|
1536
1538
|
__publicField$4(this, "state", {
|
|
1537
1539
|
isVisible: false,
|
|
@@ -1539,8 +1541,10 @@ class ChatController2 {
|
|
|
1539
1541
|
canRecord: true,
|
|
1540
1542
|
canAttach: true,
|
|
1541
1543
|
canAddSystemMessage: true,
|
|
1542
|
-
hideDeleteButton: false,
|
|
1543
1544
|
canAddUserMessage: true,
|
|
1545
|
+
canShowSystemMessage: true,
|
|
1546
|
+
canShowUserMessage: true,
|
|
1547
|
+
hideDeleteButton: false,
|
|
1544
1548
|
maxAttachmentsSize: 100,
|
|
1545
1549
|
messages: [],
|
|
1546
1550
|
currentMessage: new ChatMessage("", "user")
|
|
@@ -1584,11 +1588,22 @@ class ChatController2 {
|
|
|
1584
1588
|
onChange: (ev) => {
|
|
1585
1589
|
this.state.currentMessage.message = ev;
|
|
1586
1590
|
},
|
|
1587
|
-
onSubmit: () => {
|
|
1591
|
+
onSubmit: async () => {
|
|
1588
1592
|
if (this.state.currentMessage.message || this.state.currentMessage.attachments.length > 0) {
|
|
1589
|
-
this.
|
|
1593
|
+
this.state.isLoading = true;
|
|
1594
|
+
if (this.state.canAddUserMessage) {
|
|
1595
|
+
this.addMessage(this.state.currentMessage);
|
|
1596
|
+
}
|
|
1597
|
+
const response = await this.onMessageSubmit({
|
|
1590
1598
|
message: this.state.currentMessage
|
|
1591
1599
|
});
|
|
1600
|
+
if (this.onMessageResponse) {
|
|
1601
|
+
await this.onMessageResponse(response);
|
|
1602
|
+
}
|
|
1603
|
+
this.state.isLoading = false;
|
|
1604
|
+
if (this.state.canAddSystemMessage && response.responseMessage) {
|
|
1605
|
+
this.addMessage(response.responseMessage);
|
|
1606
|
+
}
|
|
1592
1607
|
this.state.currentMessage = new ChatMessage("", "user");
|
|
1593
1608
|
}
|
|
1594
1609
|
},
|
|
@@ -1671,57 +1686,89 @@ class ChatController2 {
|
|
|
1671
1686
|
removeAttachment(attachment) {
|
|
1672
1687
|
this.state.currentMessage.attachments = this.state.currentMessage.attachments.filter((x) => x !== attachment);
|
|
1673
1688
|
}
|
|
1689
|
+
isValidToShow(message) {
|
|
1690
|
+
return message && (message.messageType === "system" && this.state.canShowSystemMessage || message.messageType === "user" && this.state.canShowUserMessage);
|
|
1691
|
+
}
|
|
1674
1692
|
nextMessage() {
|
|
1693
|
+
let newCurrentMessage = void 0;
|
|
1694
|
+
let i = this.currentIndex;
|
|
1675
1695
|
const n = this.state.messages.length;
|
|
1676
1696
|
if (n === 0) {
|
|
1677
1697
|
return;
|
|
1678
1698
|
}
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1699
|
+
while (!newCurrentMessage) {
|
|
1700
|
+
if (i === -1 || i === n - 1) {
|
|
1701
|
+
newCurrentMessage = this.state.messages[0];
|
|
1702
|
+
i = 0;
|
|
1703
|
+
} else if (i < n - 1) {
|
|
1704
|
+
newCurrentMessage = this.state.messages[i + 1];
|
|
1705
|
+
i++;
|
|
1706
|
+
}
|
|
1707
|
+
if (this.isValidToShow(newCurrentMessage)) {
|
|
1708
|
+
this.state.currentMessage = newCurrentMessage.clone();
|
|
1709
|
+
break;
|
|
1710
|
+
} else {
|
|
1711
|
+
newCurrentMessage = void 0;
|
|
1712
|
+
}
|
|
1713
|
+
if (i === this.currentIndex) {
|
|
1714
|
+
break;
|
|
1715
|
+
}
|
|
1685
1716
|
}
|
|
1717
|
+
this.currentIndex = i;
|
|
1686
1718
|
}
|
|
1687
1719
|
prevMessage() {
|
|
1720
|
+
let newCurrentMessage = void 0;
|
|
1721
|
+
let i = this.currentIndex;
|
|
1688
1722
|
const n = this.state.messages.length;
|
|
1689
1723
|
if (n === 0) {
|
|
1690
1724
|
return;
|
|
1691
1725
|
}
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1726
|
+
while (!newCurrentMessage) {
|
|
1727
|
+
if (i === -1 || i === 0) {
|
|
1728
|
+
newCurrentMessage = this.state.messages[n - 1];
|
|
1729
|
+
i = n - 1;
|
|
1730
|
+
} else if (i > 0) {
|
|
1731
|
+
newCurrentMessage = this.state.messages[i - 1];
|
|
1732
|
+
i--;
|
|
1733
|
+
}
|
|
1734
|
+
if (this.isValidToShow(newCurrentMessage)) {
|
|
1735
|
+
this.state.currentMessage = newCurrentMessage.clone();
|
|
1736
|
+
break;
|
|
1737
|
+
} else {
|
|
1738
|
+
newCurrentMessage = void 0;
|
|
1739
|
+
}
|
|
1740
|
+
if (i === this.currentIndex) {
|
|
1741
|
+
break;
|
|
1742
|
+
}
|
|
1698
1743
|
}
|
|
1744
|
+
this.currentIndex = i;
|
|
1699
1745
|
}
|
|
1700
1746
|
}
|
|
1701
1747
|
|
|
1702
1748
|
var __defProp$3 = Object.defineProperty;
|
|
1703
1749
|
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1704
1750
|
var __publicField$3 = (obj, key, value) => {
|
|
1705
|
-
__defNormalProp$3(obj, key + "" , value);
|
|
1751
|
+
__defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
1706
1752
|
return value;
|
|
1707
1753
|
};
|
|
1708
1754
|
class FloatingChatController extends ChatController2 {
|
|
1709
|
-
constructor(props, onMessageSubmit, id) {
|
|
1710
|
-
super(props, onMessageSubmit, id);
|
|
1711
|
-
__publicField$3(this, "Window", observer(() =>
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1755
|
+
constructor(props, onMessageSubmit, id, onMessageResponse) {
|
|
1756
|
+
super(props, onMessageSubmit, id, onMessageResponse);
|
|
1757
|
+
__publicField$3(this, "Window", observer(() => {
|
|
1758
|
+
return /* @__PURE__ */ jsx(
|
|
1759
|
+
IconButton,
|
|
1760
|
+
{
|
|
1761
|
+
icon: "Magic",
|
|
1762
|
+
size: "Md",
|
|
1763
|
+
variant: "icon-outline",
|
|
1764
|
+
onClick: () => {
|
|
1765
|
+
this.state.isVisible = true;
|
|
1766
|
+
this.open();
|
|
1767
|
+
}
|
|
1720
1768
|
}
|
|
1721
|
-
|
|
1722
|
-
))
|
|
1723
|
-
|
|
1724
|
-
makeObservable(this, { state: observable });
|
|
1769
|
+
);
|
|
1770
|
+
}));
|
|
1771
|
+
makeObservable({ open: action });
|
|
1725
1772
|
}
|
|
1726
1773
|
open() {
|
|
1727
1774
|
ApiaUtil.instance.modals.open({
|
|
@@ -2295,5 +2342,5 @@ const WindowDragger = forwardRef((props, outerRef) => {
|
|
|
2295
2342
|
);
|
|
2296
2343
|
});
|
|
2297
2344
|
|
|
2298
|
-
export { AIFileContent, AIMessageAttachments, AutoscrollContainer, ChatController, ChatController2, ChatMessage, DashboardsRoutinesGeneration, FloatingChatController, MultipleChoiceMessage, ResponseStream, RoutinesGeneration, SearchController, SemanticSearchReference as SemanticSearchResult, ViewRendererContext, WindowDragger, getImageFromDisk, getImagesFromDisk, getImagesWithDescription };
|
|
2345
|
+
export { AIFileContent, AIMessageAttachments, AutoscrollContainer, ChatController, ChatController2, ChatMessage, DashboardsRoutinesGeneration, FloatingChatController, MultipleChoiceMessage, ResponseStream, RoutinesGeneration, SearchController$1 as SearchController, SemanticSearchReference as SemanticSearchResult, ViewRendererContext, WindowDragger, getImageFromDisk, getImagesFromDisk, getImagesWithDescription };
|
|
2299
2346
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/chat/AutoscrollContainer.tsx","../src/files/ocr/getImageOcrMaker.ts","../src/files/pdf/getPdfReader.ts","../src/components/chat/files/useHandleFileUpload.ts","../src/components/chat/messages/ChatMessage.tsx","../src/components/chat/messages/aiMessage/AIContent.tsx","../src/components/chat/messages/aiMessage/types.ts","../src/components/chat/messages/aiMessage/AIFileContent.tsx","../src/components/chat/messages/aiMessage/AIMessageAttachments.tsx","../src/components/chat/files/handleFileUploadAsMessage.ts","../src/components/chat/Textarea.tsx","../src/components/chat/ChatController.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx","../src/semanticSearch/SearchController/objects/SemanticSearchReference/Component.tsx","../src/semanticSearch/SearchController/objects/SemanticSearchReference/index.tsx","../src/semanticSearch/SearchController/index.tsx","../src/components/ChatController/components/FileAttachment.tsx","../src/components/ChatController/components/Attachments.tsx","../src/components/ChatController/components/Message.tsx","../src/components/ChatController/components/History.tsx","../src/components/ChatController/util.ts","../src/components/ChatController/components/TextArea.tsx","../src/components/ChatController/CameraController.tsx","../src/components/ChatController/ChatController.tsx","../src/components/chat/FloatingChatController.tsx","../src/routines/RoutinesGeneration.ts","../src/routines/DashboardRoutinesGeneration.ts","../src/stream/ResponseStream.ts","../src/components/documents/ImageBinaryField/getImage.ts","../src/components/documents/UploadModal/ImageIcon.tsx","../src/components/documents/ImageBinaryField/getImageSrcString.ts","../src/components/documents/UploadModal/getImagesWithDescription.tsx","../src/semanticSearch/ViewController/types.ts","../src/components/ChatController/components/WindowDragger.tsx"],"sourcesContent":["import { getVariant } from '@apia/theme';\r\nimport { ReactNode, useCallback, useRef } from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const AutoscrollContainer = ({ children }: { children: ReactNode }) => {\r\n const observer = useRef<MutationObserver | null>(null);\r\n const unsuscribe = useRef<(() => void) | null>(null);\r\n const isFullScrolled = useRef(false);\r\n const hasInited = useRef(false);\r\n\r\n const ref = useCallback((el: HTMLElement) => {\r\n if (!el) return;\r\n\r\n if (!hasInited.current) {\r\n hasInited.current = true;\r\n el.scrollTo({\r\n top: el.getBoundingClientRect().height,\r\n behavior: 'auto',\r\n });\r\n isFullScrolled.current = true;\r\n }\r\n\r\n observer.current?.disconnect();\r\n unsuscribe.current?.();\r\n\r\n observer.current = new MutationObserver(([mutation]) => {\r\n if (mutation && mutation.target instanceof HTMLElement) {\r\n if (\r\n isFullScrolled.current &&\r\n el.scrollTop !== el.scrollHeight - el.offsetHeight\r\n ) {\r\n // eslint-disable-next-line no-param-reassign\r\n el.scrollTo({\r\n top: el.scrollHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n });\r\n observer.current.observe(el, { childList: true, subtree: true });\r\n\r\n const handleScroll = (ev: Event) => {\r\n if (ev.target === el && el instanceof HTMLElement) {\r\n setTimeout(() => {\r\n isFullScrolled.current =\r\n Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;\r\n }, 100);\r\n }\r\n };\r\n el.addEventListener('scroll', handleScroll);\r\n unsuscribe.current = () => {\r\n el.removeEventListener('scroll', handleScroll);\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.autoscrollContainer')}\r\n className=\"autoscrollContainer\"\r\n ref={ref}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isImageFile(file: File) {\n const IMAGE_EXTENSIONS = [\n 'jpg',\n 'jpeg',\n 'png',\n 'gif',\n 'bmp',\n 'webp',\n 'tiff',\n 'svg',\n 'jfif',\n ];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getImageOcrMaker(lang: 'eng' | 'spa') {\n return new (class ImageOcrMaker implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => unknown,\n ): Promise<string[]> {\n const tesseract = await import('tesseract.js');\n\n const worker = await tesseract.createWorker(lang, 1, {\n logger(arg) {\n onProgress?.(arg.progress * 100);\n },\n });\n\n const result = (await worker.recognize(file)).data.text;\n return [result];\n }\n\n willProcessFile(file: File) {\n return isImageFile(file);\n }\n })();\n}\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isPdfFile(file: File) {\n const IMAGE_EXTENSIONS = ['pdf'];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getPdfReader() {\n return new (class PdfReader implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => void,\n ): Promise<string[]> {\n onProgress?.(0);\n const { getDocument, GlobalWorkerOptions } = await import('pdfjs-dist');\n\n async function getPdfTextFromArrayBuffer(\n buffer: ArrayBuffer,\n ): Promise<string[]> {\n GlobalWorkerOptions.workerSrc = '../includes/pdf.worker.min.js';\n\n const pdf = await getDocument({ data: buffer }).promise;\n\n const pages: string[] = [];\n\n for (let i = 1; i <= pdf.numPages; i++) {\n const page = await pdf.getPage(i);\n const textContent = await page.getTextContent();\n\n // Concatenar texto de cada página\n pages.push(\n textContent.items\n .map((item) => (item as { str: string }).str)\n .join(' '),\n );\n }\n\n return pages;\n }\n\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.onload = async function (event: ProgressEvent<FileReader>) {\n if (!event.target?.result) {\n alert('Error al leer el archivo.');\n return;\n }\n\n const buffer: ArrayBuffer = event.target.result as ArrayBuffer;\n const text = await getPdfTextFromArrayBuffer(buffer);\n\n onProgress?.(100);\n resolve(text);\n };\n\n reader.readAsArrayBuffer(file);\n });\n }\n\n willProcessFile(file: File) {\n return isPdfFile(file);\n }\n })();\n}\n","/* eslint-disable no-param-reassign */\nimport { ChangeEvent, useCallback, useState } from 'react';\nimport getImageOcrMaker, {\n isImageFile,\n} from '../../../files/ocr/getImageOcrMaker';\nimport getPdfReader, { isPdfFile } from '../../../files/pdf/getPdfReader';\n\nexport class WrongFormatError extends Error {\n constructor(fileName: string) {\n super(`File format not supported: ${fileName}`);\n }\n}\n\nexport default function useHandleFileUpload({\n onContent,\n}: {\n onContent: (content: string[]) => unknown;\n}) {\n const [progress, setProgress] = useState(100);\n\n const handleFileUpload = useCallback(\n async (ev: ChangeEvent<HTMLInputElement>) => {\n setProgress(0);\n const imageProcessor = getImageOcrMaker('spa');\n const pdfProcessor = getPdfReader();\n\n await (async () => {\n const obtainedText: string[] = [];\n const files = ev.target.files;\n const filesLength = ev.target.files?.length ?? 0;\n if (files) {\n for (let i = 0; i < filesLength; i++) {\n const file = files[i];\n\n if (!isImageFile(file) && !isPdfFile(file)) {\n setProgress(100);\n throw new WrongFormatError(file.name);\n }\n\n const handleProgress = (progress: number) => {\n setProgress(\n (i / filesLength) * 100 +\n (1 / filesLength) * 100 * (progress / 100),\n );\n };\n\n let result = '';\n if (imageProcessor.willProcessFile(file)) {\n try {\n result = (\n await imageProcessor.processFile(file, handleProgress)\n )[0];\n } catch (e) {\n console.error(e);\n }\n } else if (pdfProcessor.willProcessFile(file)) {\n result = (\n await pdfProcessor.processFile(file, handleProgress)\n ).join('\\n\\n');\n try {\n //\n } catch (e) {\n console.error(e);\n }\n }\n\n if (result) {\n obtainedText.push(result);\n }\n\n setProgress(((i + 1) / filesLength) * 100);\n }\n }\n onContent(obtainedText);\n })();\n\n ev.target.value = '';\n },\n [onContent],\n );\n\n return { progress, handleFileUpload };\n}\n","import { ReactNode } from 'react';\r\nimport { TMessageType } from '../ChatController';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Cloneable, Reactive } from './aiMessage/types';\r\nimport { IAttachment } from '../../ChatController/ChatController';\r\nimport { AIFileContent } from './aiMessage/AIFileContent';\r\nimport { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ChatMessage implements Reactive, Cloneable {\r\n id: number;\r\n\r\n parseMessage(message: string) {\r\n let result = message;\r\n\r\n result = result.replaceAll('[strong]', '<strong>');\r\n result = result.replaceAll('[/strong]', '</strong>');\r\n\r\n return result;\r\n }\r\n\r\n constructor(\r\n public message: ReactNode = '',\r\n public messageType: TMessageType = 'user',\r\n public attachments: IAttachment[] = [],\r\n public reference: ReactNode = null,\r\n ) {\r\n this.id = maxId++;\r\n if (messageType === 'response') this.messageType = 'system';\r\n if (typeof message === 'string') this.message = this.parseMessage(message);\r\n\r\n makeObservable(this, {\r\n attachments: observable,\r\n message: observable,\r\n messageType: observable,\r\n reference: observable,\r\n });\r\n }\r\n\r\n clone = () =>\r\n new ChatMessage(\r\n this.message,\r\n this.messageType,\r\n [...this.attachments],\r\n this.reference,\r\n );\r\n\r\n removeAttachment(idx: number) {\r\n this.attachments = this.attachments.filter((_, i) => i !== idx);\r\n }\r\n\r\n Component = observer(({ className }: { className?: string }) => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history_message ${className || ''} ${this.messageType}`}\r\n key={this.id}\r\n >\r\n <Box\r\n className=\"history_message__content\"\r\n {...(typeof this.message === 'string'\r\n ? { dangerouslySetInnerHTML: { __html: this.message } }\r\n : { children: this.message })}\r\n />\r\n {this.attachments.length > 0 && (\r\n <Box className=\"history_message__attachments\">\r\n {this.attachments.map((x) => {\r\n const a = x as any as AIFileContent;\r\n return <a.Component key={x.id} />;\r\n })}\r\n </Box>\r\n )}\r\n {this.reference && (\r\n <Box className=\"history_message__references\">{this.reference}</Box>\r\n )}\r\n </Box>\r\n );\r\n });\r\n}\r\n","import { Box } from '@apia/theme';\nimport { Reactive } from './types';\nimport { ReactNode } from 'react';\nimport { CollectorField } from '@apia/validations';\nimport { uniqueId } from '@apia/notifications';\n\nexport class AIContent extends CollectorField implements Reactive {\n type = 'aiContent';\n content: ReactNode;\n\n constructor(content?: ReactNode) {\n super(uniqueId(), '');\n this.content = content;\n }\n\n Component = () => {\n return (\n <Box variant={'layout.common.components.aiMessage.textBox'}>\n <Box variant={'layout.common.components.aiMessage.textSnippet'}>\n {this.content}\n </Box>\n </Box>\n );\n };\n}\n","import { FC } from 'react';\r\n\r\n// CONSTANTS\r\nexport const AIFileContentAllowedExtensions = {\r\n svg: 'svg',\r\n png: 'png',\r\n jpg: 'jpg',\r\n jpeg: 'jpeg',\r\n txt: 'txt',\r\n doc: 'doc',\r\n pdf: 'pdf',\r\n docx: 'docx',\r\n csv: 'csv',\r\n xlsx: 'xlsx',\r\n xls: 'xls',\r\n mp3: 'mp3',\r\n wav: 'wav',\r\n} as const;\r\n\r\n// TYPES\r\nexport type AIFileContentAllowedExtension =\r\n keyof typeof AIFileContentAllowedExtensions;\r\n\r\nexport type TAttachmentErrorCallback = 'fileExtension' | 'blobGeneration';\r\n\r\n//ENUMS\r\nexport enum FileType {\r\n DOCUMENT = 'DOCUMENT',\r\n IMAGE = 'IMAGE',\r\n AUDIO = 'AUDIO',\r\n SHEET = 'SHEET',\r\n}\r\n\r\nexport enum AIMessageRole {\r\n USER = 'USER',\r\n SYSTEM = 'SYSTEM',\r\n}\r\n\r\n// INTERFACES\r\nexport interface Reactive {\r\n Component: FC<any>;\r\n}\r\n\r\nexport interface Cloneable {\r\n clone: () => Cloneable;\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { AIContent } from './AIContent';\r\nimport {\r\n AIFileContentAllowedExtension,\r\n AIFileContentAllowedExtensions,\r\n FileType,\r\n Reactive,\r\n TAttachmentErrorCallback,\r\n} from './types';\r\nimport { FileIcon } from '@apia/icons';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { IconButton } from '@apia/components';\r\nimport { getLabel } from '@apia/util';\r\nimport { IAttachment } from '../../../ChatController/ChatController';\r\n\r\nexport type TFileContentProps = {\r\n value: string;\r\n name: string;\r\n f?: File;\r\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>;\r\n needsControlExtension?: boolean;\r\n onClose?: () => unknown;\r\n};\r\n\r\nexport class AIFileContent extends AIContent implements Reactive, IAttachment {\r\n type: FileType;\r\n value: string;\r\n name: string;\r\n extension: AIFileContentAllowedExtension;\r\n private __file: File | undefined;\r\n private __error?: Partial<Record<TAttachmentErrorCallback, () => void>>;\r\n private onClose?: () => unknown;\r\n private overrideSize: { width: number; height: number } | undefined;\r\n id: string = uniqueId();\r\n\r\n constructor(props: TFileContentProps) {\r\n if (\r\n props.needsControlExtension === null ||\r\n props.needsControlExtension === undefined\r\n ) {\r\n props.needsControlExtension = true;\r\n }\r\n const extension = AIFileContent.getExtensionFromFileName(props.name);\r\n super();\r\n this.__error = props.error;\r\n if (\r\n props.needsControlExtension &&\r\n !AIFileContent.isValidExtension(extension)\r\n )\r\n this.__throwError(\r\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\r\n this.__error?.fileExtension,\r\n );\r\n this.value = props.value;\r\n this.extension = extension;\r\n this.type = this.inferExtension(this.extension) as FileType;\r\n this.name = props.name;\r\n this.__file = props.f;\r\n this.content = this.inferContent();\r\n this.onClose = props.onClose;\r\n }\r\n\r\n setOnClose(callback: () => unknown) {\r\n this.onClose = callback;\r\n return this;\r\n }\r\n\r\n // PUBLIC METHODS\r\n\r\n public setOverrideSize(overrideSize: { width: number; height: number }) {\r\n this.overrideSize = overrideSize;\r\n return this;\r\n }\r\n\r\n public get file() {\r\n if (!this.__file) throw new Error('File is undefined');\r\n return this.__file;\r\n }\r\n\r\n public inferContent = () => {\r\n return `You must collect information contained in this ${this.type} as help to build your tool choice.`;\r\n };\r\n\r\n public inferExtension = (extension: AIFileContentAllowedExtension) => {\r\n switch (extension) {\r\n case AIFileContentAllowedExtensions.jpg:\r\n case AIFileContentAllowedExtensions.jpeg:\r\n case AIFileContentAllowedExtensions.png:\r\n case AIFileContentAllowedExtensions.svg:\r\n return FileType.IMAGE;\r\n case AIFileContentAllowedExtensions.txt:\r\n case AIFileContentAllowedExtensions.doc:\r\n case AIFileContentAllowedExtensions.pdf:\r\n case AIFileContentAllowedExtensions.docx:\r\n return FileType.DOCUMENT;\r\n case AIFileContentAllowedExtensions.csv:\r\n case AIFileContentAllowedExtensions.xlsx:\r\n case AIFileContentAllowedExtensions.xls:\r\n return FileType.SHEET;\r\n case AIFileContentAllowedExtensions.mp3:\r\n case AIFileContentAllowedExtensions.wav:\r\n return FileType.AUDIO;\r\n default:\r\n this.__throwError(\r\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\r\n this.__error?.fileExtension,\r\n );\r\n }\r\n };\r\n\r\n // STATIC METHODS\r\n\r\n static isValidExtension = (\r\n extension: string,\r\n ): extension is AIFileContentAllowedExtension => {\r\n return (\r\n Object.values(\r\n AIFileContentAllowedExtensions,\r\n ) as AIFileContentAllowedExtension[]\r\n ).includes(extension as AIFileContentAllowedExtension);\r\n };\r\n\r\n static blobToBase64 = async (blob: Blob) => {\r\n return await ((blob: Blob): Promise<string> =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => {\r\n const base64String = reader.result as string;\r\n resolve(base64String);\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(blob);\r\n }))(blob);\r\n };\r\n\r\n static fromFile = async (\r\n props: Omit<TFileContentProps, 'fileName' | 'fileUrl' | 'f'> & {\r\n f: File;\r\n },\r\n ): Promise<AIFileContent> => {\r\n const fileUrl = await ((f: File) =>\r\n new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(f);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = () => reject();\r\n }))(props.f);\r\n return new AIFileContent({\r\n value: fileUrl,\r\n name: props.f.name,\r\n f: props.f,\r\n error: props.error,\r\n needsControlExtension: props.needsControlExtension,\r\n });\r\n };\r\n\r\n static getExtensionFromFileName(fileName: string) {\r\n return fileName.split('.').pop() as AIFileContentAllowedExtension;\r\n }\r\n\r\n // PRIVATE METHODS\r\n\r\n private static __getExtensionErrorMessage(extension: string) {\r\n return `extension \"${extension}\" is not included into valid types:\\n${Object.keys(AIFileContentAllowedExtensions)}`;\r\n }\r\n\r\n private __throwError(e: Error, callback?: () => void) {\r\n callback && callback();\r\n throw e;\r\n }\r\n\r\n getId() {\r\n return this.id;\r\n }\r\n\r\n // COMPONENT METHODS\r\n\r\n Component = () => {\r\n const closeButton = this.onClose ? (\r\n <IconButton\r\n className=\"file_close_button\"\r\n size=\"Md\"\r\n icon=\"Close\"\r\n onClick={this.onClose}\r\n title={getLabel('lblDeleteItem').title}\r\n ></IconButton>\r\n ) : null;\r\n return (\r\n <Box\r\n className=\"file_box\"\r\n sx={{\r\n ...(this.overrideSize\r\n ? {\r\n ...this.overrideSize,\r\n img: {\r\n width: `${this.overrideSize.width - 20}px`,\r\n height: `${this.overrideSize.height - 61}px`,\r\n },\r\n }\r\n : {}),\r\n }}\r\n variant={'layout.common.components.aiMessage.fileBox'}\r\n >\r\n {closeButton && closeButton}\r\n {FileType.IMAGE === this.type ? (\r\n <img src={URL.createObjectURL(this.file)} alt={this.name}></img>\r\n ) : (\r\n <FileIcon iconSize=\"lg\" docName={this.name} />\r\n )}\r\n <Box\r\n as={'p'}\r\n variant={'layout.common.components.aiMessage.fileName'}\r\n title={this.name}\r\n >\r\n {this.name}\r\n </Box>\r\n </Box>\r\n );\r\n };\r\n}\r\n","import { AIMessageRole, Reactive } from './types';\r\nimport { AIContent } from './AIContent';\r\nimport { IconButton } from '@apia/components';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { getLabel } from '@apia/util';\r\nimport { Collector } from '@apia/validations';\r\nimport { AIFileContent } from './AIFileContent';\r\n\r\nexport class AIMessageAttachments implements Reactive {\r\n role: AIMessageRole;\r\n content: AIContent;\r\n id = uniqueId();\r\n customDescription = false;\r\n\r\n constructor(\r\n role: AIMessageRole,\r\n content: AIContent,\r\n private close?: () => void,\r\n ) {\r\n this.role = role;\r\n this.content = content;\r\n }\r\n\r\n addDescription = async () => {\r\n const collector = new Collector();\r\n const collected = await collector\r\n .add(this.content)\r\n .add(\r\n new collector.fields.textarea(\r\n 'addCommentTextArea',\r\n getLabel('lblAiAddImageCo').text.replace('.', ''),\r\n {\r\n initialValue:\r\n this.content instanceof AIFileContent &&\r\n this.content.content !== this.content.inferContent()\r\n ? (this.content.content as string)\r\n : '',\r\n },\r\n ),\r\n )\r\n .show<{ addCommentTextArea: string }>({\r\n title: getLabel('btnAddComment').text,\r\n })\r\n .catch((e) => {\r\n throw e;\r\n });\r\n if (collected?.addCommentTextArea) {\r\n this.content.content = collected.addCommentTextArea;\r\n this.customDescription = true;\r\n } else {\r\n if (this.content instanceof AIFileContent)\r\n this.content.content = this.content.inferContent();\r\n this.customDescription = false;\r\n }\r\n };\r\n\r\n getId() {\r\n return this.id;\r\n }\r\n\r\n Component = (props: {\r\n closeButton?: boolean;\r\n canAddDescription?: boolean;\r\n }) => (\r\n <Box {...getVariant('layout.common.components.aiMessage')}>\r\n {props.closeButton ? (\r\n <IconButton\r\n className=\"closeButton\"\r\n size=\"Md\"\r\n icon=\"Close\"\r\n onClick={this.close}\r\n title={getLabel('lblDeleteItem').title}\r\n ></IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.canAddDescription ? (\r\n <IconButton\r\n className=\"descriptionButton\"\r\n size=\"Md\"\r\n icon=\"Magic\"\r\n onClick={this.addDescription}\r\n ></IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n <this.content.Component />\r\n </Box>\r\n );\r\n}\r\n","import { getLabel } from '@apia/util';\nimport { ChatController } from '../ChatController';\nimport { ChatMessage } from '../messages/ChatMessage';\nimport { AIFileContent } from '../messages/aiMessage/AIFileContent';\nimport { AIMessageAttachments } from '../messages/aiMessage/AIMessageAttachments';\nimport {\n AIFileContentAllowedExtensions,\n AIMessageRole,\n} from '../messages/aiMessage/types';\n\nexport const handleFileUploadAsMessage = async (\n fileInputElement: HTMLInputElement,\n chatController: ChatController,\n) => {\n if (fileInputElement.files) {\n [...fileInputElement.files].forEach(async (f) => {\n const m: AIMessageAttachments = new AIMessageAttachments(\n AIMessageRole.USER,\n await AIFileContent.fromFile(f, {\n fileExtension: () =>\n chatController.messages.add(\n new ChatMessage(\n getLabel('msgAiIncorrectFileExtensionError', {\n text: {\n TOK1: `[${Object.keys(AIFileContentAllowedExtensions).join(', ')}]`,\n },\n }).text,\n 'error',\n ),\n ),\n }),\n () => chatController.attachments.drop(m),\n );\n chatController.attachments.add(m);\n });\n }\n};\n","/* eslint-disable no-param-reassign */\nimport { FormEvent, KeyboardEvent, useCallback, useState } from 'react';\nimport { ChatController } from './ChatController';\nimport {\n ApiaUtil,\n IconButton,\n SimpleButton,\n TMenuItem,\n} from '@apia/components';\nimport { Box, Textarea, getVariant, useBreakpointIndex } from '@apia/theme';\nimport useHandleFileUpload, {\n WrongFormatError,\n} from './files/useHandleFileUpload';\nimport { getLabel, noNaN } from '@apia/util';\nimport { ChatMessage } from './messages/ChatMessage';\nimport { handleFileUploadAsMessage } from './files/handleFileUploadAsMessage';\nimport { observer } from 'mobx-react-lite';\n\nexport const makeTextarea = (chatController: ChatController) => {\n const NewTextarea = observer(\n ({\n hideDeleteButton,\n isLoading: outIsLoading,\n onSubmit,\n preventAppendUserMessages,\n }: {\n hideDeleteButton?: boolean;\n isLoading?: boolean;\n onSubmit: (chatMessage: ChatMessage) => Promise<void>;\n preventAppendUserMessages?: boolean;\n }) => {\n const [isLoading, setIsLoading] = useState(false);\n const breakpoint = useBreakpointIndex();\n const submit = useCallback(() => {\n if (preventAppendUserMessages !== true)\n chatController.messages.add(chatController.state.current);\n\n chatController.history.add(chatController.state.current);\n\n onSubmit(chatController.state.current).finally(() => {\n setIsLoading(false);\n\n chatController.state.current = new ChatMessage();\n });\n }, [onSubmit, preventAppendUserMessages]);\n\n const handleSubmit = useCallback(\n (ev: FormEvent<HTMLFormElement>) => {\n ev.preventDefault();\n if (\n chatController.state.current.message ||\n chatController.attachments.size() > 0\n ) {\n setIsLoading(true);\n submit();\n }\n const textarea = document.getElementById(\n `GPTMessage${chatController.id}`,\n ) as HTMLTextAreaElement;\n textarea.focus();\n },\n [submit],\n );\n\n const onKeyDown = useCallback((ev: KeyboardEvent) => {\n if ((ev.target as HTMLTextAreaElement).readOnly) return;\n\n if (ev.code === 'Enter' && !ev.shiftKey) {\n ev.preventDefault();\n (ev.target as HTMLElement)\n .closest('form')\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\n ?.click();\n }\n }, []);\n\n const { progress, handleFileUpload } = useHandleFileUpload({\n onContent(content) {\n (\n document.getElementById(\n `GPTMessage${chatController.id}`,\n ) as HTMLTextAreaElement\n ).value = content.join('\\n\\n');\n },\n });\n\n const actualIsLoading = isLoading || progress !== 100 || outIsLoading;\n\n const [dragging, setDragging] = useState(false);\n\n const handleDragLeave = (ev: React.DragEvent<HTMLElement>) => {\n ev.preventDefault();\n setDragging(false);\n };\n\n const handleDrop = (ev: React.DragEvent<HTMLFormElement>) => {\n ev.preventDefault();\n setDragging(false);\n const fileElement = document.getElementById(\n `gptUploadFile__${chatController.id}`,\n ) as HTMLInputElement;\n fileElement.files = ev.dataTransfer.files;\n const event = new Event('change', { bubbles: true });\n fileElement.dispatchEvent(event);\n };\n\n const handleDragOver = (ev: React.DragEvent<HTMLElement>) => {\n ev.preventDefault();\n };\n\n const handleDragEnter = (ev: React.DragEvent<HTMLElement>) => {\n ev.preventDefault();\n setDragging(true);\n };\n\n const additionalButtons: TMenuItem[] = [];\n additionalButtons.push({\n key: 'prev',\n children: (\n <SimpleButton\n title={getLabel('btnAiPrevious').title}\n variant=\"outline\"\n type=\"button\"\n onClick={chatController.history.previous}\n size=\"sm\"\n >\n {getLabel('btnAiPrevious').text}\n </SimpleButton>\n ),\n });\n additionalButtons.push({\n key: 'next',\n children: (\n <SimpleButton\n title={getLabel('btnAiNext').title}\n variant=\"outline\"\n type=\"button\"\n onClick={chatController.history.next}\n size=\"sm\"\n >\n {getLabel('btnAiNext').text}\n </SimpleButton>\n ),\n });\n if (!hideDeleteButton) {\n additionalButtons.push({\n key: 'delete',\n children: (\n <SimpleButton\n title={getLabel('btnAiDelete').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n chatController.state.current.message = '';\n chatController.attachments.dropAll();\n chatController.currentHistoryIndex = -1;\n }}\n size=\"sm\"\n >\n {getLabel('btnAiDelete').text}\n </SimpleButton>\n ),\n });\n additionalButtons.push({\n key: 'deleteMessages',\n children: (\n <SimpleButton\n title={getLabel('btnAiDeleteMessages').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() => chatController.messages.clear()}\n size=\"sm\"\n >\n {getLabel('btnAiDeleteMessages').text}\n </SimpleButton>\n ),\n });\n }\n\n const isPhone = breakpoint < 4;\n let iconButton = <></>;\n if (isPhone) {\n iconButton = (\n <IconButton\n {...getVariant('layout.ai.execution.formsAssistant.settingsButton')}\n iconSize={'Md'}\n size={'Lg'}\n icon=\"Ellipsis\"\n isLoading={actualIsLoading}\n onClick={() => {\n const util = ApiaUtil.instance;\n const items: TMenuItem[] = [];\n items.push(...additionalButtons);\n if (items.length > 0)\n util.menu.open({\n menuProps: {\n anchorPoint: { x: util.mouse.x, y: util.mouse.y },\n },\n items,\n });\n }}\n ></IconButton>\n );\n }\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\n <Box\n sx={{\n flexWrap: 'wrap',\n display: 'flex',\n maxHeight: '280px',\n overflowY: 'auto',\n paddingTop: '6px',\n paddingBottom: '6px',\n }}\n >\n {chatController.attachments.getComponents()}\n </Box>\n <form\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onSubmit={handleSubmit}\n className=\"gpt__form\"\n action=\"\"\n >\n {dragging ? (\n <Box\n sx={{\n height: '150px',\n border: '3px dashed #aaa',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {getLabel('msgAiDragAndDrop').text}\n </Box>\n ) : (\n <Textarea\n onKeyDown={onKeyDown}\n id={`GPTMessage${chatController.id}`}\n readOnly={actualIsLoading}\n value={chatController.state.current.message as string}\n onChange={(ev) => {\n chatController.state.current.message = ev.target.value;\n if (\n !chatController.state.current.message &&\n chatController.attachments.size() < 1\n )\n chatController.currentHistoryIndex = -1;\n }}\n />\n )}\n\n <Box className=\"gpt__buttonsContainer\">\n <Box sx={{ display: 'none' }}>\n <input\n type=\"file\"\n className=\"gptUploadFile\"\n multiple\n id={`gptUploadFile__${chatController.id}`}\n onChange={(ev) => {\n if (1 == noNaN('a'))\n handleFileUpload(ev).catch((e) => {\n if (e instanceof WrongFormatError) {\n setIsLoading(false);\n chatController.messages.add(\n new ChatMessage(\n getLabel('msgAiFileExtensionError').text,\n 'error',\n ),\n );\n } else {\n throw e;\n }\n });\n else {\n handleFileUploadAsMessage(ev.target, chatController);\n }\n\n ev.target.value = '';\n }}\n />\n </Box>\n <IconButton\n variant=\"icon-outline\"\n onClick={() =>\n !chatController.audioRecorder.state.recording\n ? chatController.audioRecorder.start()\n : chatController.audioRecorder.stop()\n }\n disabled={\n actualIsLoading &&\n !chatController.audioRecorder.state.recording\n }\n sx={{\n color: chatController.audioRecorder.state.recording\n ? 'red'\n : undefined,\n }}\n icon={\n chatController.audioRecorder.state.recording\n ? 'Stop'\n : 'Microphone'\n }\n id=\"transcribeAudio\"\n size=\"Lg\"\n title={getLabel('lblAiRecordAudio').text}\n />\n <IconButton\n title={getLabel('btnUploadFile').text}\n icon=\"File\"\n variant=\"icon-outline\"\n disabled={actualIsLoading}\n onClick={() => {\n (\n document.getElementById(\n `gptUploadFile__${chatController.id}`,\n ) as HTMLElement\n ).click();\n }}\n size=\"Lg\"\n />\n {isPhone ? (\n iconButton\n ) : (\n <>\n {...additionalButtons.map(\n (x) => (x as { children: React.ReactNode }).children,\n )}\n </>\n )}\n <SimpleButton\n title={getLabel('btnAiSend').title}\n isLoading={actualIsLoading}\n type=\"submit\"\n size=\"sm\"\n >\n {getLabel('btnAiSend').text}\n </SimpleButton>\n </Box>\n </form>\n </Box>\n );\n },\n );\n\n NewTextarea.displayName = '';\n\n return NewTextarea;\n};\n","/* eslint-disable no-param-reassign */\r\nimport { getVariant } from '@apia/theme';\r\nimport { Box } from '@apia/theme';\r\nimport { AutoscrollContainer } from './AutoscrollContainer';\r\nimport { makeTextarea } from './Textarea';\r\nimport { ChatMessage } from './messages/ChatMessage';\r\nimport { AIMessageAttachments } from './messages/aiMessage/AIMessageAttachments';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { AIMessageRole } from './messages/aiMessage/types';\r\nimport { AIFileContent } from './messages/aiMessage/AIFileContent';\r\nimport { IAttachment } from '../ChatController/ChatController';\r\n\r\nexport type TMessageType =\r\n | 'user'\r\n | 'system'\r\n | 'warning'\r\n | 'error'\r\n | 'information'\r\n | 'response'\r\n | 'multipleChoice'\r\n | 'customMessage';\r\n\r\ntype ChatControllerState = {\r\n current: ChatMessage;\r\n messages: ChatMessage[];\r\n};\r\n\r\nexport class ChatController {\r\n state: ChatControllerState = {\r\n current: new ChatMessage(),\r\n messages: [],\r\n };\r\n\r\n constructor(\r\n public id: string,\r\n welcomeMessage?: string,\r\n ) {\r\n if (welcomeMessage) {\r\n this.state.messages.splice(\r\n 0,\r\n 0,\r\n new ChatMessage(welcomeMessage, 'system'),\r\n );\r\n }\r\n\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n components = {\r\n MessageHistory: observer(() => {\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.chat')}\r\n className=\"history\"\r\n >\r\n <AutoscrollContainer>\r\n {this.state.messages.map((current) => (\r\n <current.Component key={current.id} />\r\n ))}\r\n </AutoscrollContainer>\r\n </Box>\r\n );\r\n }),\r\n Textarea: makeTextarea(this),\r\n };\r\n\r\n #promptsHistory: ChatMessage[] = [];\r\n currentHistoryIndex = -1;\r\n\r\n #internalAudioRecorder = new AudioRecorder();\r\n\r\n audioRecorder = {\r\n start: () =>\r\n this.#internalAudioRecorder.start().then(async (blob: Blob) => {\r\n const m: AIMessageAttachments = new AIMessageAttachments(\r\n AIMessageRole.USER,\r\n new AIFileContent({\r\n value: await AIFileContent.blobToBase64(blob),\r\n name: `userRecord_${this.audioRecorder.record++}.wav`,\r\n }),\r\n () => this.attachments.drop(m),\r\n );\r\n this.attachments.add(m);\r\n }),\r\n stop: async () => {\r\n this.#internalAudioRecorder.stop();\r\n },\r\n record: 0,\r\n state: this.#internalAudioRecorder.state,\r\n };\r\n\r\n history = {\r\n add: (message: ChatMessage) => {\r\n this.currentHistoryIndex = -1;\r\n\r\n if (message === this.#promptsHistory[this.#promptsHistory.length]) {\r\n return;\r\n }\r\n\r\n this.#promptsHistory = [\r\n message,\r\n ...this.#promptsHistory.slice(\r\n Math.max(0, this.#promptsHistory.length - 10),\r\n ),\r\n ];\r\n },\r\n next: () => {\r\n let message = new ChatMessage();\r\n if (this.#promptsHistory[this.currentHistoryIndex - 1])\r\n message = this.#promptsHistory[--this.currentHistoryIndex].clone();\r\n else {\r\n this.currentHistoryIndex = -1;\r\n }\r\n this.history.updateState(message);\r\n },\r\n previous: () => {\r\n if (this.#promptsHistory[this.currentHistoryIndex + 1]) {\r\n this.history.updateState(\r\n this.#promptsHistory[++this.currentHistoryIndex].clone(),\r\n );\r\n }\r\n },\r\n updateState: (message?: ChatMessage) => {\r\n if (message) this.state.current = message;\r\n else this.state.current = new ChatMessage();\r\n },\r\n size: () => this.state.messages.length,\r\n };\r\n\r\n messages = {\r\n add: (message: ChatMessage, idx?: number) => {\r\n if (idx !== undefined && idx !== null) {\r\n this.state.messages.splice(idx, 0, message);\r\n } else {\r\n this.state.messages.push(message);\r\n }\r\n },\r\n clear: () => {\r\n this.state.messages = [];\r\n },\r\n };\r\n\r\n attachments = {\r\n add: (...aiMessage: AIMessageAttachments[]) => {\r\n this.state.current.attachments.push(\r\n ...(aiMessage as any as IAttachment[]),\r\n );\r\n },\r\n dropAll: () => void (this.state.current.attachments = []),\r\n drop: (el: AIMessageAttachments) => {\r\n const e = el as any as IAttachment;\r\n this.state.current.attachments = this.state.current.attachments.filter(\r\n (c) => c !== e,\r\n );\r\n if (!this.state.current.message && this.attachments.size() < 1)\r\n this.currentHistoryIndex = -1;\r\n },\r\n getComponents: () =>\r\n this.state.current.attachments.map((x) => {\r\n const c = x as any as AIMessageAttachments;\r\n return <c.Component closeButton canAddDescription key={x.id} />;\r\n }),\r\n get: () => this.state.current.attachments,\r\n size: () => this.state.current.attachments.length,\r\n };\r\n}\r\n","import { ApiaUtil, SimpleButton } from '@apia/components';\nimport { ChatMessage } from './ChatMessage';\nimport { Box, Paragraph } from '@apia/theme';\nimport { ReactElement } from 'react';\n\nexport type TMultipleChoiceMessageOption<OptionProps> = {\n label: string;\n url: string;\n additionalProps?: OptionProps;\n};\n\nexport class MultipleChoiceMessage<OptionProps> extends ChatMessage {\n constructor(\n question: string,\n options: TMultipleChoiceMessageOption<OptionProps>[],\n Renderer?: (props: {\n item: TMultipleChoiceMessageOption<OptionProps>;\n }) => ReactElement,\n ) {\n super(\n Renderer ? (\n <Box className=\"multipleChoiceMessage customRenderer\">\n <Paragraph>{question}</Paragraph>\n {options.map((item) => (\n <Renderer item={item} key={item.url} />\n ))}\n </Box>\n ) : (\n <Box className=\"multipleChoiceMessage\">\n <Paragraph>{question}</Paragraph>\n <Box as=\"ul\">\n {options.map((current) => (\n <li key={current.label}>\n <SimpleButton\n className=\"multipleChoice__option\"\n onClick={() => {\n ApiaUtil.instance.tabs.openTab(current.label, current.url);\n }}\n >\n {current.label}\n </SimpleButton>\n </li>\n ))}\n </Box>\n </Box>\n ),\n 'multipleChoice',\n );\n }\n}\n","import { Box } from '@apia/theme';\r\nimport { SemanticSearchReference } from '.';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const Component = observer(\r\n (props: { instance: SemanticSearchReference }) => {\r\n return (\r\n <Box>\r\n <a href={props.instance.state.link}>{props.instance.state.title}</a>\r\n <Box>{props.instance.state.body}</Box>\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { Component } from './Component';\r\n\r\n/*\r\n * This class is used to store the state of a search result record.\r\n */\r\ntype TSearchResultState = {\r\n title: string;\r\n body: string;\r\n link: string;\r\n};\r\n\r\nexport class SemanticSearchReference {\r\n state: TSearchResultState = { title: '', body: '', link: '' };\r\n\r\n public constructor(props: TSearchResultState) {\r\n this.state = props;\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n Component = () => (\r\n <>\r\n (<Component instance={this} />)\r\n </>\r\n );\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { SemanticSearchReference } from './objects/SemanticSearchReference';\r\nimport { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { FiltersStore } from '@apia/components';\r\n\r\n/**\r\n * @class SearchController:\r\n * - mobx Controller for the semantic search logic\r\n * - search for a term and get the results. This controller must be used\r\n * to maintain the state of the search string and of the results given a search string\r\n */\r\nclass SearchController {\r\n static instance = new SearchController();\r\n\r\n state: {\r\n queryString: string;\r\n results: SemanticSearchReference[];\r\n isLoading: boolean;\r\n disabled: boolean;\r\n } = { queryString: '', results: [], isLoading: false, disabled: false };\r\n\r\n protected constructor() {\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n public async search(selectedId: string) {\r\n const filters = await FiltersStore.getFiltersById(\r\n Number.parseInt(selectedId),\r\n );\r\n FiltersStore.setFilters(filters, 'U');\r\n SearchController.instance.state.isLoading = true;\r\n const response = await ApiaApi.post<{ results: SemanticSearchReference[] }>(\r\n makeApiaUrl({\r\n action: 'search',\r\n semSearchId: selectedId,\r\n }),\r\n {\r\n postData: {\r\n q: SearchController.instance.state.queryString,\r\n filters: JSON.stringify(FiltersStore.getFiltersAsFilterValue('U')),\r\n },\r\n postDataTreatement: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n },\r\n );\r\n if (response?.data?.results) {\r\n this.setReferences(response.data.results);\r\n }\r\n this.state.isLoading = false;\r\n }\r\n\r\n protected setReferences(results: SemanticSearchReference[]) {\r\n if (typeof results === 'string' && results) {\r\n results = JSON.parse(results as any as string);\r\n }\r\n SearchController.instance.state.results = results.map((x) =>\r\n x instanceof SemanticSearchReference ? x : new SemanticSearchReference(x),\r\n );\r\n SearchController.instance.state.disabled = false;\r\n }\r\n}\r\n\r\nexport default SearchController;\r\n","import { Box } from '@apia/theme';\r\nimport { IAttachment } from '../ChatController';\r\nimport { FileIcon } from '@apia/icons';\r\nimport { IconButton } from '@apia/components';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const FileAttachment = observer(\r\n ({\r\n attachment,\r\n onRemove,\r\n }: {\r\n attachment: IAttachment;\r\n onRemove?: () => unknown;\r\n }) => {\r\n return (\r\n <Box className=\"file_box\">\r\n <FileIcon className=\"file_box__icon\" docName={attachment.name} />\r\n <Box className=\"file_box__name\" title={attachment.name}>\r\n {attachment.name}\r\n </Box>\r\n {onRemove && (\r\n <IconButton\r\n icon=\"Close\"\r\n className=\"file_box__remove\"\r\n onClick={onRemove}\r\n variant=\"icon-only\"\r\n ></IconButton>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { IAttachment } from '../ChatController';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { FileAttachment } from './FileAttachment';\r\n\r\nconst Attachments = observer(\r\n ({\r\n attachments,\r\n onRemove,\r\n }: {\r\n attachments: IAttachment[];\r\n onRemove?: (a: IAttachment) => unknown;\r\n }) => {\r\n if (!attachments.length) return null;\r\n\r\n return (\r\n <Box\r\n className=\"attachments\"\r\n {...getVariant('layout.common.chat.attachments')}\r\n >\r\n {attachments.map((x) => (\r\n <FileAttachment\r\n attachment={x}\r\n onRemove={onRemove ? () => onRemove(x) : undefined}\r\n key={x.id}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n },\r\n);\r\nexport default Attachments;\r\n","import { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { IAttachment } from '../ChatController';\r\nimport { TMessageType } from '../../chat/ChatController';\r\nimport { ReactNode } from 'react';\r\nimport Attachments from './Attachments';\r\n\r\nexport const Message = observer(\r\n ({\r\n className,\r\n type,\r\n id,\r\n message,\r\n attachments,\r\n reference,\r\n }: {\r\n className?: string;\r\n type: TMessageType;\r\n id: string;\r\n message: ReactNode;\r\n attachments: IAttachment[];\r\n reference: ReactNode;\r\n }) => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history_message ${className || ''} ${type}`}\r\n key={id}\r\n >\r\n <Box\r\n className=\"history_message__content\"\r\n {...(typeof message === 'string'\r\n ? { dangerouslySetInnerHTML: { __html: message } }\r\n : { children: message })}\r\n />\r\n {attachments.length > 0 && (\r\n <Attachments attachments={attachments}></Attachments>\r\n )}\r\n {reference && (\r\n <Box className=\"history_message__references\">{reference}</Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { AutoscrollContainer } from '../../chat/AutoscrollContainer';\r\nimport { ChatMessage } from '../../chat/messages/ChatMessage';\r\nimport { Message } from './Message';\r\n\r\nconst History = observer(({ messages }: { messages: ChatMessage[] }) => {\r\n let currentType: string = '';\r\n\r\n return (\r\n <AutoscrollContainer>\r\n <Box\r\n {...getVariant('layout.common.chat.history')}\r\n className=\"chat_history\"\r\n >\r\n {messages.map((current, i) => {\r\n let first = false;\r\n let last = false;\r\n\r\n if (currentType !== current.messageType) {\r\n currentType = current.messageType;\r\n first = true;\r\n }\r\n\r\n if (\r\n i === messages.length - 1 ||\r\n messages[i + 1].messageType !== current.messageType\r\n ) {\r\n last = true;\r\n }\r\n\r\n return (\r\n <Message\r\n className={first ? 'first' : last ? 'last' : undefined}\r\n type={current.messageType}\r\n id={String(current.id)}\r\n attachments={current.attachments}\r\n reference={current.reference}\r\n message={current.message}\r\n />\r\n );\r\n })}\r\n </Box>\r\n </AutoscrollContainer>\r\n );\r\n});\r\nexport default History;\r\n","export function getBase64FromFile(f: File) {\r\n return ((f: File) =>\r\n new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(f);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = () => reject();\r\n }))(f);\r\n}\r\n\r\nexport function getBase64FromBlob(b: Blob) {\r\n return ((blob: Blob): Promise<string> =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => {\r\n const base64String = reader.result as string;\r\n resolve(base64String);\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(blob);\r\n }))(b);\r\n}\r\n\r\nexport function getFileExtension(name: string) {\r\n return name.split('.').at(-1);\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ApiaUtil, IconButton } from '@apia/components';\r\nimport { Form, Textarea as TTT, getVariant } from '@apia/theme';\r\nimport { ChangeEvent, useRef } from 'react';\r\nimport { getLabel } from '@apia/util';\r\nimport { IAttachment } from '../ChatController';\r\nimport { getBase64FromFile } from '../util';\r\nimport { TMenuItem } from '@apia/components';\r\n\r\nconst TextArea = observer(\r\n ({\r\n isLoading,\r\n isRecording,\r\n onSubmit,\r\n onChange,\r\n onClearHistory,\r\n onClearAttachments,\r\n onClearMessage,\r\n onAttach,\r\n onRecord,\r\n onVideoRecord,\r\n onPrev,\r\n onNext,\r\n hideDeleteButton,\r\n value,\r\n id,\r\n }: {\r\n isLoading: boolean;\r\n isRecording: boolean;\r\n onClearHistory: () => unknown;\r\n onClearMessage: () => unknown;\r\n onClearAttachments: () => unknown;\r\n onSubmit: () => unknown;\r\n onChange: (v: string) => unknown;\r\n onAttach: (ev: IAttachment) => unknown;\r\n onRecord: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n onVideoRecord: () => unknown;\r\n onPrev: () => unknown;\r\n onNext: () => unknown;\r\n hideDeleteButton: boolean;\r\n value: string;\r\n attachments: IAttachment[];\r\n id: string;\r\n }) => {\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const searchControlsRef = useRef<HTMLTextAreaElement>(null);\r\n const recordButton = (\r\n <IconButton\r\n variant=\"icon-only\"\r\n onClick={onRecord}\r\n disabled={isLoading && !isRecording}\r\n sx={{\r\n color: isRecording ? 'red' : undefined,\r\n }}\r\n icon={isRecording ? 'Stop' : 'Microphone'}\r\n id=\"transcribeAudio\"\r\n iconSize=\"Sm\"\r\n title={getLabel('lblAiRecordAudio').text}\r\n />\r\n );\r\n const handleAttachments = async (ev: ChangeEvent<HTMLInputElement>) => {\r\n if (ev.target.files) {\r\n for await (const f of ev.target.files) {\r\n const base64 = await getBase64FromFile(f);\r\n onAttach({\r\n value: base64,\r\n name: f.name,\r\n id: f.name,\r\n });\r\n }\r\n }\r\n };\r\n const iconsList: TMenuItem[] = [\r\n {\r\n icon: 'ArrowLeft',\r\n children: getLabel('btnAiPrevious').text,\r\n title: getLabel('btnAiPrevious').text,\r\n onClick: onPrev,\r\n key: '0',\r\n },\r\n {\r\n icon: 'ArrowRight',\r\n children: getLabel('btnAiNext').text,\r\n title: getLabel('btnAiNext').text,\r\n onClick: onNext,\r\n key: '1',\r\n },\r\n {\r\n children: getLabel('btnUpload').text,\r\n title: getLabel('btnUpload').text,\r\n icon: 'File',\r\n onClick: () => fileInputRef.current?.click(),\r\n key: '2',\r\n },\r\n {\r\n title: getLabel('lblOpenCamera').text,\r\n children: getLabel('lblOpenCamera').text,\r\n icon: 'Camera',\r\n onClick: onVideoRecord,\r\n key: '3',\r\n },\r\n {\r\n title: getLabel('lblAiRecordAudio').text,\r\n children: getLabel('lblAiRecordAudio').text,\r\n key: '4',\r\n onClick: (event) =>\r\n onRecord(event as unknown as React.MouseEvent<HTMLButtonElement>),\r\n icon: isRecording ? 'Stop' : 'Microphone',\r\n },\r\n ...((hideDeleteButton\r\n ? []\r\n : [\r\n {\r\n icon: 'Trash',\r\n onClick: onClearHistory,\r\n key: '5',\r\n children: getLabel('btnAiDeleteMessages').text,\r\n title: getLabel('btnAiDeleteMessages').text,\r\n },\r\n {\r\n icon: 'Erase',\r\n title: getLabel('btnAiDelete').text,\r\n children: getLabel('btnAiDelete').text,\r\n onClick: () => {\r\n onClearMessage();\r\n onClearAttachments();\r\n },\r\n key: '6',\r\n },\r\n ]) as TMenuItem[]),\r\n ];\r\n return (\r\n <Form\r\n id={id}\r\n onSubmit={(ev) => {\r\n ev.preventDefault();\r\n onSubmit();\r\n }}\r\n className=\"search_controls\"\r\n {...getVariant('layout.common.chat.form')}\r\n >\r\n <TTT\r\n ref={searchControlsRef}\r\n aria-label={\r\n /** TODO: Crear etiqueta para búsqueda */ 'Frase de búsqueda'\r\n }\r\n value={value}\r\n className=\"searchTextArea\"\r\n onChange={(ev) => onChange(ev.target.value)}\r\n onKeyDown={(ev) => {\r\n if (ev.code === 'Enter' && !ev.shiftKey) {\r\n ev.preventDefault();\r\n (ev.target as HTMLElement)\r\n .closest('form')!\r\n .querySelector<HTMLElement>('[type=\"submit\"]')!\r\n .click();\r\n }\r\n }}\r\n ></TTT>\r\n {isRecording && recordButton}\r\n <input\r\n ref={fileInputRef}\r\n id=\"invisible__attach__file\"\r\n type=\"file\"\r\n multiple\r\n onChange={handleAttachments}\r\n sx={{ display: 'none' }}\r\n ></input>\r\n <IconButton\r\n disabled={isLoading}\r\n icon=\"Ellipsis\"\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n onClick={(ev) => {\r\n ApiaUtil.instance.menu.open({\r\n menuProps: {\r\n anchorPoint: { x: ev.clientX, y: ev.clientY },\r\n },\r\n items: iconsList,\r\n });\r\n }}\r\n ></IconButton>\r\n <IconButton\r\n className=\"SearchButton\"\r\n isLoading={isLoading}\r\n icon=\"ArrowRight\"\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n title={getLabel('btnBus').title}\r\n type=\"submit\"\r\n />\r\n </Form>\r\n );\r\n },\r\n);\r\nexport default TextArea;\r\n","import { makeObservable, observable, action } from 'mobx';\r\nimport { Reactive } from '../chat/messages/aiMessage/types';\r\nimport { ApiaUtil } from '@apia/components';\r\n\r\nexport class CameraController implements Reactive {\r\n state: {\r\n videoStream: MediaStream | null;\r\n isOpen: boolean;\r\n } = {\r\n videoStream: null,\r\n isOpen: false,\r\n };\r\n private currentCapture: File | null = null;\r\n\r\n private videoElement: HTMLVideoElement;\r\n\r\n constructor() {\r\n makeObservable(this, {\r\n state: observable,\r\n openCamera: action,\r\n closeCamera: action,\r\n });\r\n\r\n this.videoElement = document.createElement('video');\r\n this.videoElement.autoplay = true;\r\n this.videoElement.playsInline = true;\r\n }\r\n\r\n async openCamera() {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\r\n this.state.videoStream = stream;\r\n this.videoElement.srcObject = stream;\r\n this.state.isOpen = true;\r\n ApiaUtil.instance.modals.open({\r\n children: <this.Component></this.Component>,\r\n onConfirm: () => {\r\n this.closeCamera();\r\n },\r\n onClose: () => {\r\n this.state.isOpen = false;\r\n this.closeCamera();\r\n },\r\n });\r\n } catch (error) {\r\n console.error('Error while accessing the camera:', error);\r\n this.state.isOpen = false;\r\n this.closeCamera();\r\n }\r\n }\r\n\r\n async closeCamera() {\r\n if (!this.videoElement.srcObject) return null;\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = this.videoElement.videoWidth;\r\n canvas.height = this.videoElement.videoHeight;\r\n const ctx = canvas.getContext('2d');\r\n if (ctx)\r\n ctx.drawImage(this.videoElement, 0, 0, canvas.width, canvas.height);\r\n\r\n this.currentCapture = await new Promise<File | null>((resolve) => {\r\n canvas.toBlob((blob: Blob | null) => {\r\n if (blob) {\r\n const file = new File([blob], 'captured_image.jpg', {\r\n type: 'image/jpeg',\r\n });\r\n resolve(file);\r\n } else {\r\n resolve(null);\r\n }\r\n }, 'image/jpeg');\r\n }).finally(() => {\r\n this.state.videoStream?.getTracks().forEach((track) => track.stop());\r\n this.state.videoStream = null;\r\n this.videoElement.srcObject = null;\r\n this.state.isOpen = false;\r\n });\r\n }\r\n\r\n pop() {\r\n const returnFile = this.currentCapture;\r\n this.currentCapture = null;\r\n return returnFile;\r\n }\r\n\r\n Component = () => {\r\n return (\r\n <video\r\n ref={(el) => {\r\n if (el) {\r\n el.srcObject = this.videoElement.srcObject;\r\n el.autoplay = true;\r\n el.playsInline = true;\r\n }\r\n }}\r\n style={{ width: '100%', height: 'auto' }}\r\n />\r\n );\r\n };\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { ChatMessage } from '../chat/messages/ChatMessage';\r\nimport Attachments from './components/Attachments';\r\nimport History from './components/History';\r\nimport { observer } from 'mobx-react-lite';\r\nimport TTT from './components/TextArea';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { CameraController } from './CameraController';\r\nimport { getBase64FromBlob, getBase64FromFile } from './util';\r\n\r\nexport interface IAttachment {\r\n name: string;\r\n id: string;\r\n value: string;\r\n}\r\n\r\nexport type TChatControllerState = {\r\n isVisible: boolean;\r\n isLoading: boolean;\r\n canRecord: boolean;\r\n canAttach: boolean;\r\n canAddSystemMessage: boolean;\r\n canAddUserMessage: boolean;\r\n hideDeleteButton: boolean;\r\n maxAttachmentsSize: number;\r\n messages: ChatMessage[];\r\n currentMessage: ChatMessage;\r\n};\r\n\r\nexport type MessageCallback = (props: { message: ChatMessage }) => Promise<any>;\r\n\r\nexport class ChatController2 {\r\n currentIndex = 0;\r\n state: TChatControllerState = {\r\n isVisible: false,\r\n isLoading: false,\r\n canRecord: true,\r\n canAttach: true,\r\n canAddSystemMessage: true,\r\n hideDeleteButton: false,\r\n canAddUserMessage: true,\r\n maxAttachmentsSize: 100,\r\n messages: [],\r\n currentMessage: new ChatMessage('', 'user'),\r\n };\r\n private internalAudioRecorder = new AudioRecorder();\r\n private internalCameraRecorder = new CameraController();\r\n\r\n private maxId = 0;\r\n\r\n audioRecorder = {\r\n start: () => {\r\n this.internalAudioRecorder.start().then(async (blob: Blob) => {\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: `userRecord_${this.audioRecorder.record++}.wav`,\r\n value: await getBase64FromBlob(blob),\r\n });\r\n });\r\n },\r\n stop: async () => {\r\n this.internalAudioRecorder.stop();\r\n },\r\n record: 0,\r\n state: this.internalAudioRecorder.state,\r\n };\r\n\r\n constructor(\r\n props: Partial<TChatControllerState>,\r\n private onMessageSubmit: MessageCallback,\r\n public id: string,\r\n ) {\r\n this.state = Object.assign({}, this.state, props);\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n removeMessage(idx: number) {\r\n this.state.messages = this.state.messages.filter((_, i) => i !== idx);\r\n }\r\n\r\n addMessage(message: ChatMessage) {\r\n this.state.messages.push(message);\r\n }\r\n\r\n clearHistory() {\r\n this.state.messages = [];\r\n }\r\n\r\n clearMessage() {\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n\r\n public removeAttachment(attachment: IAttachment) {\r\n this.state.currentMessage.attachments =\r\n this.state.currentMessage.attachments.filter((x) => x !== attachment);\r\n }\r\n\r\n public nextMessage() {\r\n const n = this.state.messages.length;\r\n if (n === 0) {\r\n return;\r\n }\r\n if (this.currentIndex === -1 || this.currentIndex === n - 1) {\r\n this.state.currentMessage = this.state.messages[0].clone();\r\n this.currentIndex = 0;\r\n } else if (this.currentIndex < n - 1) {\r\n this.state.currentMessage =\r\n this.state.messages[this.currentIndex + 1].clone();\r\n this.currentIndex++;\r\n }\r\n }\r\n\r\n public prevMessage() {\r\n const n = this.state.messages.length;\r\n if (n === 0) {\r\n return;\r\n }\r\n if (this.currentIndex === -1 || this.currentIndex === 0) {\r\n this.state.currentMessage = this.state.messages[n - 1].clone();\r\n this.currentIndex = n - 1;\r\n } else if (this.currentIndex > 0) {\r\n this.state.currentMessage =\r\n this.state.messages[this.currentIndex - 1].clone();\r\n this.currentIndex--;\r\n }\r\n }\r\n\r\n History = observer(() => <History messages={this.state.messages}></History>);\r\n\r\n Attachments = observer(() => (\r\n <Attachments\r\n attachments={this.state.currentMessage.attachments}\r\n onRemove={(a) => {\r\n this.removeAttachment(a);\r\n }}\r\n ></Attachments>\r\n ));\r\n\r\n TextArea = observer(() => (\r\n <TTT\r\n id={this.id}\r\n value={this.state.currentMessage.message as string}\r\n isLoading={this.state.isLoading}\r\n isRecording={this.internalAudioRecorder.state.recording}\r\n onChange={(ev) => {\r\n this.state.currentMessage.message = ev;\r\n }}\r\n onSubmit={() => {\r\n if (\r\n this.state.currentMessage.message ||\r\n this.state.currentMessage.attachments.length > 0\r\n ) {\r\n this.onMessageSubmit({\r\n message: this.state.currentMessage,\r\n });\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n }}\r\n onClearHistory={() => {\r\n this.clearHistory();\r\n }}\r\n onClearAttachments={() => {\r\n this.state.currentMessage.attachments = [];\r\n }}\r\n onClearMessage={() => {\r\n this.clearMessage();\r\n }}\r\n onAttach={async (ev) => {\r\n this.state.currentMessage.attachments.push({\r\n ...ev,\r\n id: String(this.maxId++),\r\n });\r\n }}\r\n onRecord={() => {\r\n !this.internalAudioRecorder.state.recording\r\n ? this.audioRecorder.start()\r\n : this.audioRecorder.stop();\r\n }}\r\n onVideoRecord={async () => {\r\n !this.internalCameraRecorder.state.isOpen &&\r\n (await this.internalCameraRecorder.openCamera());\r\n await new Promise<void>((resolve, _) => {\r\n const checkCapture = async () => {\r\n if (!this.internalCameraRecorder.state.isOpen) {\r\n const capture = this.internalCameraRecorder.pop();\r\n if (capture) {\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: capture.name,\r\n value: await getBase64FromFile(capture),\r\n });\r\n return resolve();\r\n }\r\n } else {\r\n requestAnimationFrame(checkCapture);\r\n }\r\n };\r\n\r\n checkCapture();\r\n });\r\n }}\r\n onPrev={() => {\r\n this.prevMessage();\r\n }}\r\n onNext={() => {\r\n this.nextMessage();\r\n }}\r\n hideDeleteButton={this.state.hideDeleteButton}\r\n attachments={[]}\r\n />\r\n ));\r\n\r\n Renderer = () => (\r\n <Box\r\n {...getVariant('layout.common.chat.controller')}\r\n className=\"chat_controller\"\r\n >\r\n <this.History />\r\n <this.Attachments />\r\n <this.TextArea />\r\n </Box>\r\n );\r\n}\r\n/*\r\nconst TTT = observer(\r\n ({\r\n isLoading,\r\n onSubmit,\r\n onChange,\r\n onClear,\r\n value,\r\n }: {\r\n isLoading: boolean;\r\n onClear: () => unknown;\r\n onSubmit: () => unknown;\r\n onChange: (v: string) => unknown;\r\n onAttach: (v: IAttachment) => unknown;\r\n value: string;\r\n }) => {\r\n return (\r\n <form\r\n onSubmit={(ev) => {\r\n ev.preventDefault();\r\n onSubmit();\r\n }}\r\n >\r\n <textarea\r\n value={value}\r\n onChange={(ev) => {\r\n onChange(ev.target.value);\r\n }}\r\n disabled={isLoading}\r\n name=\"r18923rasdjfh\"\r\n ></textarea>\r\n <button type=\"submit\">Enviar</button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n onClear();\r\n }}\r\n >\r\n Clear\r\n </button>\r\n </form>\r\n );\r\n },\r\n);\r\n*/\r\n","import { ApiaUtil, IconButton } from '@apia/components';\r\nimport {\r\n ChatController2,\r\n MessageCallback,\r\n TChatControllerState,\r\n} from '../ChatController/ChatController';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport class FloatingChatController extends ChatController2 {\r\n constructor(\r\n props: Partial<TChatControllerState & { isPhone: boolean }>,\r\n onMessageSubmit: MessageCallback,\r\n id: string,\r\n ) {\r\n super(props, onMessageSubmit, id);\r\n this.state = Object.assign({}, this.state, props);\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n open() {\r\n ApiaUtil.instance.modals.open({\r\n variant: 'layout.common.chat.assistant.floatingAssistant',\r\n defaultPosition: {\r\n bottom: '10px',\r\n right: '50px',\r\n },\r\n draggable: true,\r\n children: <this.Renderer />,\r\n onClose: () => {\r\n this.state.isVisible = false;\r\n },\r\n });\r\n }\r\n\r\n Window = observer(() => (\r\n <IconButton\r\n icon=\"Magic\"\r\n size=\"Md\"\r\n variant=\"icon-outline\"\r\n onClick={() => {\r\n this.state.isVisible = true;\r\n this.open();\r\n }}\r\n />\r\n ));\r\n}\r\n","import axios from 'axios';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';\r\nimport { ResponseStream } from '../stream/ResponseStream';\r\nimport { action, makeObservable, observable } from 'mobx';\r\n\r\ntype RoutinesGenerationState = {\r\n isLoading: boolean;\r\n progress: number;\r\n};\r\n\r\ntype TPollProgress = {\r\n message: string;\r\n progress: number;\r\n debug: string;\r\n streamPart?: string;\r\n};\r\n\r\nexport type TPollRoutineResult = {\r\n status: string;\r\n payload: unknown | TPollProgress;\r\n};\r\n\r\nexport type TGenerateFromImage = {\r\n base64: string;\r\n description: string;\r\n};\r\n\r\nexport type TRoutineCompletion = Partial<{\r\n images: TGenerateFromImage[];\r\n parameters: Record<string, string>;\r\n stream: ResponseStream;\r\n}> & {\r\n routineName: string;\r\n};\r\n\r\nfunction isPollProgress(\r\n payload: unknown | TPollProgress,\r\n): payload is TPollProgress {\r\n return (payload as TPollProgress)?.progress !== undefined;\r\n}\r\n\r\nexport class RoutinesGeneration {\r\n public audioRecorder = new AudioRecorder();\r\n private routineId: string = '';\r\n public state: RoutinesGenerationState = {\r\n isLoading: false,\r\n progress: 0,\r\n };\r\n\r\n public constructor() {\r\n makeObservable(this, {\r\n completion: action,\r\n state: observable,\r\n stop: action,\r\n transcribeAudio: action,\r\n });\r\n }\r\n\r\n private checkCanGenerate() {\r\n if (this.state.isLoading) {\r\n throw new Error('Cannot queue two simultaneous generations');\r\n }\r\n\r\n this.state.isLoading = true;\r\n }\r\n\r\n public async pollRoutine<T>(routineId: string, stream?: ResponseStream) {\r\n this.routineId = routineId;\r\n this.state.isLoading = true;\r\n return this.internalPollRoutine<T>(stream);\r\n }\r\n\r\n private async internalPollRoutine<T>(stream?: ResponseStream) {\r\n while (this.state.isLoading) {\r\n const pollResult = await this.callRoutinePoll(this.routineId);\r\n if (isPollProgress(pollResult.payload)) {\r\n try {\r\n const res = JSON.parse(pollResult.payload.debug) as string[];\r\n if (res.length > 0) {\r\n res.forEach((c) => {\r\n console.log(JSON.parse(c));\r\n });\r\n }\r\n\r\n if (pollResult.payload.streamPart && stream) {\r\n stream.emit('part', pollResult.payload.streamPart);\r\n }\r\n this.state.progress = pollResult.payload.progress;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n } else if (pollResult.status === 'FINISHED') {\r\n this.resetLoading();\r\n return pollResult.payload as T;\r\n } else if (pollResult.status === 'ERROR') {\r\n this.resetLoading();\r\n throw new Error(pollResult.payload as string);\r\n } else {\r\n this.resetLoading();\r\n throw new Error('Wrong poll response');\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callAudioTranscription(\r\n audio: Blob,\r\n ): ReturnType<RoutinesGeneration['callRoutineStart']> {\r\n const url = makeApiaUrl({\r\n action: 'routineStart',\r\n routine: 'transcription/Transcribe',\r\n });\r\n\r\n const response = await axios.post(url, audio.arrayBuffer(), {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream',\r\n },\r\n });\r\n\r\n const result = await parseSuccessfulResponse<{\r\n orchestrator: { routineId: string };\r\n }>(response, '');\r\n\r\n if (result?.orchestrator) {\r\n return result;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callRoutinePoll(\r\n routineId: string,\r\n ): Promise<TPollRoutineResult> {\r\n const result = await ApiaApi.post<{ orchestrator: string }>(\r\n makeApiaUrl({\r\n action: 'routinePoll',\r\n routineId,\r\n }),\r\n );\r\n\r\n if (result?.data?.orchestrator) {\r\n return JSON.parse(result.data.orchestrator) as TPollRoutineResult;\r\n } else {\r\n throw new Error('Poll failed');\r\n }\r\n }\r\n\r\n protected async callRoutineStart(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const result = await ApiaApi.post<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStart',\r\n routine: routineName,\r\n }),\r\n {\r\n postData: {\r\n images: JSON.stringify(images),\r\n ...parameters,\r\n },\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n return result?.data || null;\r\n }\r\n\r\n private async executeRoutine<T>(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n stream?: ResponseStream,\r\n ): Promise<T | null> {\r\n this.checkCanGenerate();\r\n\r\n try {\r\n const result = await this.callRoutineStart(\r\n routineName,\r\n parameters,\r\n images,\r\n );\r\n\r\n if (result?.orchestrator?.routineId !== undefined) {\r\n this.routineId = result?.orchestrator.routineId;\r\n\r\n return this.internalPollRoutine<T>(stream);\r\n } else {\r\n throw new Error('Cannot get routine id');\r\n }\r\n } catch (e) {\r\n this.resetLoading();\r\n throw e;\r\n }\r\n }\r\n\r\n private resetLoading() {\r\n this.state.isLoading = false;\r\n this.state.progress = 0;\r\n }\r\n\r\n public async completion<T>(params: TRoutineCompletion) {\r\n return this.executeRoutine<T>(\r\n params.routineName,\r\n params.parameters ?? {},\r\n params.images ?? [],\r\n params.stream,\r\n );\r\n }\r\n\r\n public stop() {\r\n this.resetLoading();\r\n ApiaApi.get<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStop',\r\n routineId: this.routineId,\r\n }),\r\n );\r\n }\r\n\r\n public async transcribeAudio(audio: Blob) {\r\n const result = await this.callAudioTranscription(audio);\r\n\r\n if (result) {\r\n this.state.isLoading = true;\r\n if (result?.orchestrator?.routineId) {\r\n this.routineId = result?.orchestrator?.routineId;\r\n return await this.internalPollRoutine<{\r\n transcription: string;\r\n }>();\r\n }\r\n }\r\n\r\n throw new Error('Something went wrong while transcribing the audio');\r\n }\r\n}\r\n","import { TActionDispatcher, TActionResult } from '@apia/dashboard-controller';\nimport {\n RoutinesGeneration,\n TPollRoutineResult,\n TGenerateFromImage,\n} from './RoutinesGeneration';\n\nexport class DashboardsRoutinesGeneration extends RoutinesGeneration {\n constructor(protected dispatcher: TActionDispatcher) {\n super();\n }\n\n private blobToBase64(audio: Blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (reader.result && typeof reader.result === 'string') {\n const base64 = reader.result.split(',')[1];\n resolve(base64);\n } else {\n reject(new Error('Could not convert Blob to base64'));\n }\n };\n reader.onerror = reject;\n reader.readAsDataURL(audio);\n });\n }\n\n protected async callAudioTranscription(\n audio: Blob,\n ): Promise<{ orchestrator: { routineId: string } } | null> {\n const audioBase64 = await this.blobToBase64(audio);\n const result = (await this.dispatcher({\n action: 'transcription',\n audioBase64,\n })) as TActionResult<{\n orchestrator: {\n routineId: string;\n };\n }>;\n\n return result?.data || null;\n }\n\n protected async callRoutinePoll(\n routineId: string,\n ): Promise<TPollRoutineResult> {\n const result = (await this.dispatcher({\n action: 'routinePoll',\n routineId,\n })) as TActionResult<{ orchestrator: string }>;\n\n if (result?.data?.orchestrator) {\n const parsed = JSON.parse(result.data.orchestrator) as TPollRoutineResult;\n\n return parsed;\n }\n\n throw new Error('Poll failed');\n }\n\n protected async callRoutineStart(\n routineName: string,\n parameters: Record<string, string>,\n images: TGenerateFromImage[],\n ): Promise<{ orchestrator: { routineId: string } } | null> {\n const result = (await this.dispatcher({\n action: 'routineStart',\n routine: routineName,\n ...parameters,\n images,\n })) as TActionResult<{\n orchestrator: {\n routineId: string;\n };\n }>;\n\n return result?.data || null;\n }\n}\n","import { EventEmitter } from '@apia/util';\r\n\r\nexport class ResponseStream extends EventEmitter<{ part: string }> {\r\n private buffer: string = '';\r\n private isRunning = false;\r\n private locked = false;\r\n private maxCompletionTime = 2; // s\r\n private minPartSize = 2;\r\n private partSize = 2;\r\n private timing = 5; // ms\r\n private waiting: string[] = [];\r\n\r\n private calculatePartSize() {\r\n const totalSize =\r\n this.buffer.length +\r\n this.waiting.reduce<number>((a, b) => a + b.length, 0);\r\n\r\n this.partSize = Math.max(\r\n this.minPartSize,\r\n (totalSize * this.timing) / (this.maxCompletionTime * 1000),\r\n );\r\n }\r\n\r\n emit<K extends 'part'>(_: K, data: { part: string }[K]): void {\r\n if (this.locked) {\r\n this.waiting.push(data);\r\n } else {\r\n this.buffer += data;\r\n }\r\n this.calculatePartSize();\r\n this.run();\r\n }\r\n\r\n run() {\r\n if (!this.isRunning) {\r\n this.isRunning = true;\r\n const interval = setInterval(() => {\r\n this.locked = true;\r\n\r\n const choosedSize = Math.min(this.buffer.length, this.partSize);\r\n\r\n const part = this.buffer.slice(0, choosedSize);\r\n this.buffer = this.buffer.slice(choosedSize);\r\n\r\n while (this.waiting.length > 0) {\r\n const part = this.waiting.shift();\r\n if (part) {\r\n this.buffer += part;\r\n }\r\n }\r\n this.locked = false;\r\n if (part) {\r\n super.emit('part', part);\r\n } else {\r\n this.isRunning = false;\r\n clearInterval(interval);\r\n }\r\n }, this.timing);\r\n }\r\n }\r\n}\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { uniqueId } from 'lodash-es';\r\n\r\nexport type RetrievedImage = {\r\n base64: string;\r\n path: string;\r\n};\r\n\r\nexport type GetImageSize = '256x256' | '512x512' | '1024x1024';\r\n\r\nexport async function getImageFromGpt({\r\n prompt,\r\n ...props\r\n}: {\r\n prompt: string;\r\n size?: GetImageSize;\r\n model: string;\r\n}): Promise<RetrievedImage | null> {\r\n const res = await ApiaApi.post<{ image: string }>(\r\n makeApiaUrl({\r\n action: 'generateImage',\r\n ...props,\r\n }),\r\n {\r\n postData: {\r\n prompt,\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n if (res?.data)\r\n return {\r\n base64: res.data.image as any as string,\r\n path: `${uniqueId()}.png`,\r\n };\r\n\r\n return null;\r\n}\r\n\r\nexport async function getImageFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n }>,\r\n): Promise<RetrievedImage | null> {\r\n return (\r\n (await getImagesFromDisk({ ...inputProps, multiple: 'false' }))![0] ?? null\r\n );\r\n}\r\n\r\nexport function getImagesFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n multiple: string;\r\n }>,\r\n): Promise<RetrievedImage[]> {\r\n return new Promise<RetrievedImage[]>((resolve) => {\r\n const input = document.createElement('input');\r\n input.accept = 'image/*';\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n Object.assign(input, inputProps);\r\n\r\n document.body.append(input);\r\n\r\n input.addEventListener('change', (event) => {\r\n const target = event?.target as HTMLInputElement;\r\n if (!target?.files) return;\r\n\r\n const retrievedImages: (RetrievedImage | null)[] = [];\r\n const sources = [...(target.files ?? [])];\r\n\r\n const checkResolve = () => {\r\n if (sources.length === retrievedImages.length) {\r\n resolve(retrievedImages.filter((c): c is RetrievedImage => !!c));\r\n }\r\n };\r\n\r\n sources.forEach((file) => {\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = function (e) {\r\n const binary = (e.target?.result as string)?.split(',')[1];\r\n input.remove();\r\n retrievedImages.push({\r\n base64: binary,\r\n path: file.name,\r\n });\r\n\r\n checkResolve();\r\n };\r\n reader.readAsDataURL(file);\r\n } else {\r\n retrievedImages.push(null);\r\n }\r\n\r\n checkResolve();\r\n });\r\n });\r\n input.click();\r\n });\r\n}\r\n","import { IconButton } from '@apia/components';\nimport { Box } from '@apia/theme';\n\nexport const ImageIcon = ({\n deletable,\n onClick,\n onRemove,\n src,\n}: {\n deletable: boolean;\n onClick: () => unknown;\n onRemove: () => unknown;\n src: string;\n}) => {\n return (\n <Box className=\"image_preview\">\n {deletable && (\n <IconButton icon=\"Close\" size=\"Xs\" iconSize=\"Xs\" onClick={onRemove} />\n )}\n <img src={src} onClick={onClick} />\n </Box>\n );\n};\n","export function getSrcFromBase64(base64: string) {\r\n return `data:image/jpg;base64,${base64}`;\r\n}\r\n","import {\n ApiaUtil,\n IconButton,\n SortableList,\n SortableListItem,\n} from '@apia/components';\nimport { Box, getVariant, Textarea } from '@apia/theme';\nimport { makeAutoObservable, toJS } from 'mobx';\nimport { observer } from 'mobx-react-lite';\nimport { uniqueId } from '@apia/notifications';\nimport { ImageIcon } from './ImageIcon';\nimport { getSrcFromBase64 } from '../ImageBinaryField/getImageSrcString';\nimport { getImagesFromDisk } from '../ImageBinaryField/getImage';\n\nexport type TGenerateFromImage = {\n base64: string;\n description: string;\n};\n\ntype TStoredImage = TGenerateFromImage & { id: string };\n\nclass ImagesStore {\n images: Map<string, TStoredImage> = new Map();\n selectedId = '';\n\n constructor(\n images: TGenerateFromImage[],\n public multiple: boolean,\n ) {\n this.images = new Map(\n images.map((c) => {\n const id = uniqueId();\n return [id, { ...c, id }];\n }),\n );\n this.selectedId = this.images.values().next().value.id;\n makeAutoObservable(this);\n }\n}\n\nconst GetImagesDescription = observer(({ store }: { store: ImagesStore }) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n\n return (\n <Box\n className=\"images_description_generator\"\n {...getVariant('layout.design.projectAnalysis.imagesLoader')}\n >\n <Box className=\"images_sort_wrapper\">\n <SortableList\n onSortChange={(ev) => {\n store.images = new Map(\n ev.map((c) => [\n c.props.id,\n c.props.additionalProps as TStoredImage,\n ]),\n );\n }}\n >\n {[...store.images].map(([k, c]) => (\n <SortableListItem additionalProps={c} id={c.id} key={c.id}>\n <ImageIcon\n deletable={store.multiple}\n onClick={() => {\n store.selectedId = c.id;\n }}\n onRemove={() => {\n store.images.delete(k);\n }}\n src={getSrcFromBase64(c.base64 ?? '')}\n />\n </SortableListItem>\n ))}\n </SortableList>\n </Box>\n <Box className=\"image_editor\">\n <Box className=\"image_preview\">\n {store.images.get(store.selectedId) && (\n <img\n src={getSrcFromBase64(\n store.images.get(store.selectedId)!.base64 ?? '',\n )}\n />\n )}\n </Box>\n <Box className=\"image_description\">\n <Textarea\n autoFocus\n disabled={!store.images.get(store.selectedId)}\n onChange={(ev) => {\n const image = store.images.get(store.selectedId);\n if (image) image.description = ev.target.value;\n }}\n value={store.images.get(store.selectedId)?.description}\n />\n {store.multiple && (\n <IconButton\n icon=\"Attach\"\n onClick={() => {\n getImagesFromDisk({ multiple: 'true' }).then((res) => {\n res.forEach((c) => {\n const id = uniqueId();\n store.images.set(id, {\n base64: c.base64,\n description: '',\n id,\n });\n });\n });\n }}\n size=\"Md\"\n iconSize=\"Sm\"\n variant=\"icon-only\"\n />\n )}\n </Box>\n </Box>\n </Box>\n );\n});\n\nexport function getImagesWithDescription({\n multiple,\n}: {\n multiple?: boolean;\n}): Promise<TGenerateFromImage[]> {\n return new Promise((resolve) => {\n getImagesFromDisk({ multiple: multiple ? 'true' : undefined }).then(\n (images) => {\n const store = new ImagesStore(\n images.map((c) => ({\n base64: c.base64,\n description: '',\n })),\n multiple || false,\n );\n\n ApiaUtil.instance.modals.open({\n children: <GetImagesDescription store={store} />,\n initialFocusGetter(modalInnerRef) {\n return modalInnerRef.querySelector<HTMLElement>('textarea');\n },\n onConfirm: () => {\n resolve([...toJS(store.images).values()]);\n },\n onCancel() {\n resolve([]);\n },\n size: 'xxxl-fixed',\n noHeader: true,\n });\n },\n );\n });\n}\n","import { FilterDTO } from '@apia/components';\r\nimport { createContext, FC } from 'react';\r\n\r\nexport type TReference = {\r\n title: string;\r\n body: string;\r\n link: string;\r\n isExternal: boolean;\r\n};\r\n\r\nexport interface ProcessingUnit {\r\n visualizationType: TSearchMode;\r\n content: string;\r\n references: TReference[];\r\n isExternal: boolean;\r\n}\r\n\r\nexport interface ListingProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'list';\r\n title: string;\r\n link: string;\r\n}\r\n\r\nexport interface ChatProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'chat';\r\n}\r\n\r\nexport const ViewRendererContext = createContext<ISemanticSearchViewController>(\r\n {} as any,\r\n);\r\n\r\nexport type TSearchMode = 'list' | 'chat' | 'none';\r\n\r\nexport interface ISemanticSearchViewController {\r\n state: {\r\n filters: Record<string, FilterDTO>;\r\n filtersOpen: boolean;\r\n isLoading: boolean;\r\n mode: TSearchMode;\r\n searchString: string;\r\n };\r\n\r\n ResultsRenderer: FC;\r\n clearHistory(): Promise<void>;\r\n search(str?: string): void;\r\n toggleFiltersOpen(): void;\r\n}\r\n\r\nexport type TResponseData = {\r\n result: string;\r\n success: string;\r\n failed?: boolean;\r\n};\r\n\r\nexport interface ISearchResultsController<P extends ProcessingUnit> {\r\n state: {\r\n results: P[];\r\n };\r\n\r\n beforeSearch(props?: object): void;\r\n afterSearch(props?: object): void;\r\n\r\n clear(): void;\r\n\r\n processResults(\r\n qryString: string,\r\n results: ProcessingUnit[],\r\n responseData?: TResponseData,\r\n ): void;\r\n\r\n Component: FC;\r\n}\r\n","import { Box, ThemeUIStyleObject } from '@apia/theme';\r\nimport { ReactNode, forwardRef, useEffect, useRef } from 'react';\r\n\r\nexport const WindowDragger = forwardRef<\r\n HTMLElement,\r\n {\r\n children: ReactNode;\r\n style?: ThemeUIStyleObject;\r\n }\r\n>((props, outerRef) => {\r\n const isDragging = useRef(false);\r\n const initialPosition = useRef({ mousex: 0, mousey: 0, boxx: 0, boxy: 0 });\r\n const ref = useRef<HTMLElement | null>(null);\r\n /*const assignRefs = useMultipleRefs(\r\n ref,\r\n outerRef as unknown as MutableRefObject<HTMLElement | null>,\r\n );*/\r\n\r\n useEffect(() => {\r\n const handleMouseMove = (ev: MouseEvent) => {\r\n if (isDragging.current && ref.current) {\r\n const newx = ev.clientX;\r\n const newy = ev.clientY;\r\n\r\n const difx = newx - initialPosition.current.mousex;\r\n const dify = newy - initialPosition.current.mousey;\r\n ref.current.style.left = `${initialPosition.current.boxx + difx}px`;\r\n ref.current.style.top = `${initialPosition.current.boxy + dify}px`;\r\n ref.current.style.bottom = 'auto';\r\n ref.current.style.right = 'auto';\r\n ref.current.style.zIndex = '1200';\r\n }\r\n };\r\n\r\n const handleMouseUp = () => {\r\n isDragging.current = false;\r\n };\r\n\r\n const handleWindowResize = () => {\r\n if (ref.current) {\r\n const bounding = ref.current.getBoundingClientRect();\r\n\r\n if (window.innerWidth < bounding.left + bounding.width) {\r\n const newx = window.innerWidth - bounding.width;\r\n ref.current.style.left = `${newx}px`;\r\n }\r\n if (window.innerHeight < bounding.top + bounding.height) {\r\n const newy = window.innerHeight - bounding.height;\r\n ref.current.style.top = `${newy}px`;\r\n }\r\n }\r\n };\r\n document.addEventListener('mousemove', handleMouseMove);\r\n document.addEventListener('mouseup', handleMouseUp);\r\n window.addEventListener('resize', handleWindowResize);\r\n\r\n return () => {\r\n document.removeEventListener('mousemove', handleMouseMove);\r\n document.removeEventListener('mouseup', handleMouseUp);\r\n window.removeEventListener('resize', handleWindowResize);\r\n };\r\n }, []);\r\n return (\r\n <Box\r\n ref={ref /*assignRefs*/}\r\n className=\"windowDragger\"\r\n onMouseDown={(ev) => {\r\n if (\r\n ev.target instanceof Element &&\r\n (ev.target.nodeName === 'TEXTAREA' ||\r\n ev.target.classList.contains('history__message'))\r\n )\r\n return;\r\n const target = (ev.target as HTMLElement).closest?.(\r\n '.windowDragger',\r\n ) as HTMLElement;\r\n if (target) {\r\n const bounding = target.getBoundingClientRect();\r\n isDragging.current = true;\r\n initialPosition.current = {\r\n mousex: ev.clientX,\r\n mousey: ev.clientY,\r\n boxx: bounding.left,\r\n boxy: bounding.top,\r\n };\r\n }\r\n }}\r\n sx={{\r\n position: 'fixed',\r\n bottom: '260px',\r\n right: '10px',\r\n ...props.style,\r\n }}\r\n >\r\n {props.children}\r\n </Box>\r\n );\r\n});\r\n"],"names":["progress","__publicField","FileType","AIMessageRole","blob","f","TTT","part"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/chat/AutoscrollContainer.tsx","../src/files/ocr/getImageOcrMaker.ts","../src/files/pdf/getPdfReader.ts","../src/components/chat/files/useHandleFileUpload.ts","../src/components/chat/messages/ChatMessage.tsx","../src/components/chat/messages/aiMessage/AIContent.tsx","../src/components/chat/messages/aiMessage/types.ts","../src/components/chat/messages/aiMessage/AIFileContent.tsx","../src/components/chat/messages/aiMessage/AIMessageAttachments.tsx","../src/components/chat/files/handleFileUploadAsMessage.ts","../src/components/chat/Textarea.tsx","../src/components/chat/ChatController.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx","../src/semanticSearch/SearchController/objects/SemanticSearchReference/Component.tsx","../src/semanticSearch/SearchController/objects/SemanticSearchReference/index.tsx","../src/semanticSearch/SearchController/index.tsx","../src/components/ChatController/components/FileAttachment.tsx","../src/components/ChatController/components/Attachments.tsx","../src/components/ChatController/components/Message.tsx","../src/components/ChatController/components/History.tsx","../src/components/ChatController/util.ts","../src/components/ChatController/components/TextArea.tsx","../src/components/ChatController/CameraController.tsx","../src/components/ChatController/ChatController.tsx","../src/components/chat/FloatingChatController.tsx","../src/routines/RoutinesGeneration.ts","../src/routines/DashboardRoutinesGeneration.ts","../src/stream/ResponseStream.ts","../src/components/documents/ImageBinaryField/getImage.ts","../src/components/documents/UploadModal/ImageIcon.tsx","../src/components/documents/ImageBinaryField/getImageSrcString.ts","../src/components/documents/UploadModal/getImagesWithDescription.tsx","../src/semanticSearch/ViewController/types.ts","../src/components/ChatController/components/WindowDragger.tsx"],"sourcesContent":["import { getVariant } from '@apia/theme';\r\nimport { ReactNode, useCallback, useRef } from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const AutoscrollContainer = ({ children }: { children: ReactNode }) => {\r\n const observer = useRef<MutationObserver | null>(null);\r\n const unsuscribe = useRef<(() => void) | null>(null);\r\n const isFullScrolled = useRef(false);\r\n const hasInited = useRef(false);\r\n\r\n const ref = useCallback((el: HTMLElement) => {\r\n if (!el) return;\r\n\r\n if (!hasInited.current) {\r\n hasInited.current = true;\r\n el.scrollTo({\r\n top: el.getBoundingClientRect().height,\r\n behavior: 'auto',\r\n });\r\n isFullScrolled.current = true;\r\n }\r\n\r\n observer.current?.disconnect();\r\n unsuscribe.current?.();\r\n\r\n observer.current = new MutationObserver(([mutation]) => {\r\n if (mutation && mutation.target instanceof HTMLElement) {\r\n if (\r\n isFullScrolled.current &&\r\n el.scrollTop !== el.scrollHeight - el.offsetHeight\r\n ) {\r\n // eslint-disable-next-line no-param-reassign\r\n el.scrollTo({\r\n top: el.scrollHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n });\r\n observer.current.observe(el, { childList: true, subtree: true });\r\n\r\n const handleScroll = (ev: Event) => {\r\n if (ev.target === el && el instanceof HTMLElement) {\r\n setTimeout(() => {\r\n isFullScrolled.current =\r\n Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;\r\n }, 100);\r\n }\r\n };\r\n el.addEventListener('scroll', handleScroll);\r\n unsuscribe.current = () => {\r\n el.removeEventListener('scroll', handleScroll);\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.autoscrollContainer')}\r\n className=\"autoscrollContainer\"\r\n ref={ref}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { FileProcessor } from '../FileProcessor';\r\n\r\nexport function isImageFile(file: File) {\r\n const IMAGE_EXTENSIONS = [\r\n 'jpg',\r\n 'jpeg',\r\n 'png',\r\n 'gif',\r\n 'bmp',\r\n 'webp',\r\n 'tiff',\r\n 'svg',\r\n 'jfif',\r\n ];\r\n\r\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\r\n}\r\n\r\nexport default function getImageOcrMaker(lang: 'eng' | 'spa') {\r\n return new (class ImageOcrMaker implements FileProcessor {\r\n async processFile(\r\n file: File,\r\n onProgress?: (progress: number) => unknown,\r\n ): Promise<string[]> {\r\n const tesseract = await import('tesseract.js');\r\n\r\n const worker = await tesseract.createWorker(lang, 1, {\r\n logger(arg) {\r\n onProgress?.(arg.progress * 100);\r\n },\r\n });\r\n\r\n const result = (await worker.recognize(file)).data.text;\r\n return [result];\r\n }\r\n\r\n willProcessFile(file: File) {\r\n return isImageFile(file);\r\n }\r\n })();\r\n}\r\n","import { FileProcessor } from '../FileProcessor';\r\n\r\nexport function isPdfFile(file: File) {\r\n const IMAGE_EXTENSIONS = ['pdf'];\r\n\r\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\r\n}\r\n\r\nexport default function getPdfReader() {\r\n return new (class PdfReader implements FileProcessor {\r\n async processFile(\r\n file: File,\r\n onProgress?: (progress: number) => void,\r\n ): Promise<string[]> {\r\n onProgress?.(0);\r\n const { getDocument, GlobalWorkerOptions } = await import('pdfjs-dist');\r\n\r\n async function getPdfTextFromArrayBuffer(\r\n buffer: ArrayBuffer,\r\n ): Promise<string[]> {\r\n GlobalWorkerOptions.workerSrc = '../includes/pdf.worker.min.js';\r\n\r\n const pdf = await getDocument({ data: buffer }).promise;\r\n\r\n const pages: string[] = [];\r\n\r\n for (let i = 1; i <= pdf.numPages; i++) {\r\n const page = await pdf.getPage(i);\r\n const textContent = await page.getTextContent();\r\n\r\n // Concatenar texto de cada página\r\n pages.push(\r\n textContent.items\r\n .map((item) => (item as { str: string }).str)\r\n .join(' '),\r\n );\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = async function (event: ProgressEvent<FileReader>) {\r\n if (!event.target?.result) {\r\n alert('Error al leer el archivo.');\r\n return;\r\n }\r\n\r\n const buffer: ArrayBuffer = event.target.result as ArrayBuffer;\r\n const text = await getPdfTextFromArrayBuffer(buffer);\r\n\r\n onProgress?.(100);\r\n resolve(text);\r\n };\r\n\r\n reader.readAsArrayBuffer(file);\r\n });\r\n }\r\n\r\n willProcessFile(file: File) {\r\n return isPdfFile(file);\r\n }\r\n })();\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { ChangeEvent, useCallback, useState } from 'react';\r\nimport getImageOcrMaker, {\r\n isImageFile,\r\n} from '../../../files/ocr/getImageOcrMaker';\r\nimport getPdfReader, { isPdfFile } from '../../../files/pdf/getPdfReader';\r\n\r\nexport class WrongFormatError extends Error {\r\n constructor(fileName: string) {\r\n super(`File format not supported: ${fileName}`);\r\n }\r\n}\r\n\r\nexport default function useHandleFileUpload({\r\n onContent,\r\n}: {\r\n onContent: (content: string[]) => unknown;\r\n}) {\r\n const [progress, setProgress] = useState(100);\r\n\r\n const handleFileUpload = useCallback(\r\n async (ev: ChangeEvent<HTMLInputElement>) => {\r\n setProgress(0);\r\n const imageProcessor = getImageOcrMaker('spa');\r\n const pdfProcessor = getPdfReader();\r\n\r\n await (async () => {\r\n const obtainedText: string[] = [];\r\n const files = ev.target.files;\r\n const filesLength = ev.target.files?.length ?? 0;\r\n if (files) {\r\n for (let i = 0; i < filesLength; i++) {\r\n const file = files[i];\r\n\r\n if (!isImageFile(file) && !isPdfFile(file)) {\r\n setProgress(100);\r\n throw new WrongFormatError(file.name);\r\n }\r\n\r\n const handleProgress = (progress: number) => {\r\n setProgress(\r\n (i / filesLength) * 100 +\r\n (1 / filesLength) * 100 * (progress / 100),\r\n );\r\n };\r\n\r\n let result = '';\r\n if (imageProcessor.willProcessFile(file)) {\r\n try {\r\n result = (\r\n await imageProcessor.processFile(file, handleProgress)\r\n )[0];\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n } else if (pdfProcessor.willProcessFile(file)) {\r\n result = (\r\n await pdfProcessor.processFile(file, handleProgress)\r\n ).join('\\n\\n');\r\n try {\r\n //\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n if (result) {\r\n obtainedText.push(result);\r\n }\r\n\r\n setProgress(((i + 1) / filesLength) * 100);\r\n }\r\n }\r\n onContent(obtainedText);\r\n })();\r\n\r\n ev.target.value = '';\r\n },\r\n [onContent],\r\n );\r\n\r\n return { progress, handleFileUpload };\r\n}\r\n","import { ReactNode } from 'react';\r\nimport { TMessageType } from '../ChatController';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { Cloneable, Reactive } from './aiMessage/types';\r\nimport { IAttachment } from '../../ChatController/ChatController';\r\nimport { AIFileContent } from './aiMessage/AIFileContent';\r\nimport { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ChatMessage implements Reactive, Cloneable {\r\n id: number;\r\n\r\n parseMessage(message: string) {\r\n let result = message;\r\n\r\n result = result.replaceAll('[strong]', '<strong>');\r\n result = result.replaceAll('[/strong]', '</strong>');\r\n\r\n return result;\r\n }\r\n\r\n constructor(\r\n public message: ReactNode = '',\r\n public messageType: TMessageType = 'user',\r\n public attachments: IAttachment[] = [],\r\n public reference: ReactNode = null,\r\n ) {\r\n this.id = maxId++;\r\n if (messageType === 'response') this.messageType = 'system';\r\n if (typeof message === 'string') this.message = this.parseMessage(message);\r\n\r\n makeObservable(this, {\r\n attachments: observable,\r\n message: observable,\r\n messageType: observable,\r\n reference: observable,\r\n });\r\n }\r\n\r\n clone = () =>\r\n new ChatMessage(\r\n this.message,\r\n this.messageType,\r\n [...this.attachments],\r\n this.reference,\r\n );\r\n\r\n removeAttachment(idx: number) {\r\n this.attachments = this.attachments.filter((_, i) => i !== idx);\r\n }\r\n\r\n Component = observer(({ className }: { className?: string }) => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history_message ${className || ''} ${this.messageType}`}\r\n key={this.id}\r\n >\r\n <Box\r\n className=\"history_message__content\"\r\n {...(typeof this.message === 'string'\r\n ? { dangerouslySetInnerHTML: { __html: this.message } }\r\n : { children: this.message })}\r\n />\r\n {this.attachments.length > 0 && (\r\n <Box className=\"history_message__attachments\">\r\n {this.attachments.map((x) => {\r\n const a = x as any as AIFileContent;\r\n return <a.Component key={x.id} />;\r\n })}\r\n </Box>\r\n )}\r\n {this.reference && (\r\n <Box className=\"history_message__references\">{this.reference}</Box>\r\n )}\r\n </Box>\r\n );\r\n });\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { Reactive } from './types';\r\nimport { ReactNode } from 'react';\r\nimport { CollectorField } from '@apia/validations';\r\nimport { uniqueId } from '@apia/notifications';\r\n\r\nexport class AIContent extends CollectorField implements Reactive {\r\n type = 'aiContent';\r\n content: ReactNode;\r\n\r\n constructor(content?: ReactNode) {\r\n super(uniqueId(), '');\r\n this.content = content;\r\n }\r\n\r\n Component = () => {\r\n return (\r\n <Box variant={'layout.common.components.aiMessage.textBox'}>\r\n <Box variant={'layout.common.components.aiMessage.textSnippet'}>\r\n {this.content}\r\n </Box>\r\n </Box>\r\n );\r\n };\r\n}\r\n","import { FC } from 'react';\r\n\r\n// CONSTANTS\r\nexport const AIFileContentAllowedExtensions = {\r\n svg: 'svg',\r\n png: 'png',\r\n jpg: 'jpg',\r\n jpeg: 'jpeg',\r\n txt: 'txt',\r\n doc: 'doc',\r\n pdf: 'pdf',\r\n docx: 'docx',\r\n csv: 'csv',\r\n xlsx: 'xlsx',\r\n xls: 'xls',\r\n mp3: 'mp3',\r\n wav: 'wav',\r\n} as const;\r\n\r\n// TYPES\r\nexport type AIFileContentAllowedExtension =\r\n keyof typeof AIFileContentAllowedExtensions;\r\n\r\nexport type TAttachmentErrorCallback = 'fileExtension' | 'blobGeneration';\r\n\r\n//ENUMS\r\nexport enum FileType {\r\n DOCUMENT = 'DOCUMENT',\r\n IMAGE = 'IMAGE',\r\n AUDIO = 'AUDIO',\r\n SHEET = 'SHEET',\r\n}\r\n\r\nexport enum AIMessageRole {\r\n USER = 'USER',\r\n SYSTEM = 'SYSTEM',\r\n}\r\n\r\n// INTERFACES\r\nexport interface Reactive {\r\n Component: FC<any>;\r\n}\r\n\r\nexport interface Cloneable {\r\n clone: () => Cloneable;\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { AIContent } from './AIContent';\r\nimport {\r\n AIFileContentAllowedExtension,\r\n AIFileContentAllowedExtensions,\r\n FileType,\r\n Reactive,\r\n TAttachmentErrorCallback,\r\n} from './types';\r\nimport { FileIcon } from '@apia/icons';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { IconButton } from '@apia/components';\r\nimport { getLabel } from '@apia/util';\r\nimport { IAttachment } from '../../../ChatController/ChatController';\r\n\r\nexport type TFileContentProps = {\r\n value: string;\r\n name: string;\r\n f?: File;\r\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>;\r\n needsControlExtension?: boolean;\r\n onClose?: () => unknown;\r\n};\r\n\r\nexport class AIFileContent extends AIContent implements Reactive, IAttachment {\r\n type: FileType;\r\n value: string;\r\n name: string;\r\n extension: AIFileContentAllowedExtension;\r\n private __file: File | undefined;\r\n private __error?: Partial<Record<TAttachmentErrorCallback, () => void>>;\r\n private onClose?: () => unknown;\r\n private overrideSize: { width: number; height: number } | undefined;\r\n id: string = uniqueId();\r\n\r\n constructor(props: TFileContentProps) {\r\n if (\r\n props.needsControlExtension === null ||\r\n props.needsControlExtension === undefined\r\n ) {\r\n props.needsControlExtension = true;\r\n }\r\n const extension = AIFileContent.getExtensionFromFileName(props.name);\r\n super();\r\n this.__error = props.error;\r\n if (\r\n props.needsControlExtension &&\r\n !AIFileContent.isValidExtension(extension)\r\n )\r\n this.__throwError(\r\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\r\n this.__error?.fileExtension,\r\n );\r\n this.value = props.value;\r\n this.extension = extension;\r\n this.type = this.inferExtension(this.extension) as FileType;\r\n this.name = props.name;\r\n this.__file = props.f;\r\n this.content = this.inferContent();\r\n this.onClose = props.onClose;\r\n }\r\n\r\n setOnClose(callback: () => unknown) {\r\n this.onClose = callback;\r\n return this;\r\n }\r\n\r\n // PUBLIC METHODS\r\n\r\n public setOverrideSize(overrideSize: { width: number; height: number }) {\r\n this.overrideSize = overrideSize;\r\n return this;\r\n }\r\n\r\n public get file() {\r\n if (!this.__file) throw new Error('File is undefined');\r\n return this.__file;\r\n }\r\n\r\n public inferContent = () => {\r\n return `You must collect information contained in this ${this.type} as help to build your tool choice.`;\r\n };\r\n\r\n public inferExtension = (extension: AIFileContentAllowedExtension) => {\r\n switch (extension) {\r\n case AIFileContentAllowedExtensions.jpg:\r\n case AIFileContentAllowedExtensions.jpeg:\r\n case AIFileContentAllowedExtensions.png:\r\n case AIFileContentAllowedExtensions.svg:\r\n return FileType.IMAGE;\r\n case AIFileContentAllowedExtensions.txt:\r\n case AIFileContentAllowedExtensions.doc:\r\n case AIFileContentAllowedExtensions.pdf:\r\n case AIFileContentAllowedExtensions.docx:\r\n return FileType.DOCUMENT;\r\n case AIFileContentAllowedExtensions.csv:\r\n case AIFileContentAllowedExtensions.xlsx:\r\n case AIFileContentAllowedExtensions.xls:\r\n return FileType.SHEET;\r\n case AIFileContentAllowedExtensions.mp3:\r\n case AIFileContentAllowedExtensions.wav:\r\n return FileType.AUDIO;\r\n default:\r\n this.__throwError(\r\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\r\n this.__error?.fileExtension,\r\n );\r\n }\r\n };\r\n\r\n // STATIC METHODS\r\n\r\n static isValidExtension = (\r\n extension: string,\r\n ): extension is AIFileContentAllowedExtension => {\r\n return (\r\n Object.values(\r\n AIFileContentAllowedExtensions,\r\n ) as AIFileContentAllowedExtension[]\r\n ).includes(extension as AIFileContentAllowedExtension);\r\n };\r\n\r\n static blobToBase64 = async (blob: Blob) => {\r\n return await ((blob: Blob): Promise<string> =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => {\r\n const base64String = reader.result as string;\r\n resolve(base64String);\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(blob);\r\n }))(blob);\r\n };\r\n\r\n static fromFile = async (\r\n props: Omit<TFileContentProps, 'fileName' | 'fileUrl' | 'f'> & {\r\n f: File;\r\n },\r\n ): Promise<AIFileContent> => {\r\n const fileUrl = await ((f: File) =>\r\n new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(f);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = () => reject();\r\n }))(props.f);\r\n return new AIFileContent({\r\n value: fileUrl,\r\n name: props.f.name,\r\n f: props.f,\r\n error: props.error,\r\n needsControlExtension: props.needsControlExtension,\r\n });\r\n };\r\n\r\n static getExtensionFromFileName(fileName: string) {\r\n return fileName.split('.').pop() as AIFileContentAllowedExtension;\r\n }\r\n\r\n // PRIVATE METHODS\r\n\r\n private static __getExtensionErrorMessage(extension: string) {\r\n return `extension \"${extension}\" is not included into valid types:\\n${Object.keys(AIFileContentAllowedExtensions)}`;\r\n }\r\n\r\n private __throwError(e: Error, callback?: () => void) {\r\n callback && callback();\r\n throw e;\r\n }\r\n\r\n getId() {\r\n return this.id;\r\n }\r\n\r\n // COMPONENT METHODS\r\n\r\n Component = () => {\r\n const closeButton = this.onClose ? (\r\n <IconButton\r\n className=\"file_close_button\"\r\n size=\"Md\"\r\n icon=\"Close\"\r\n onClick={this.onClose}\r\n title={getLabel('lblDeleteItem').title}\r\n ></IconButton>\r\n ) : null;\r\n return (\r\n <Box\r\n className=\"file_box\"\r\n sx={{\r\n ...(this.overrideSize\r\n ? {\r\n ...this.overrideSize,\r\n img: {\r\n width: `${this.overrideSize.width - 20}px`,\r\n height: `${this.overrideSize.height - 61}px`,\r\n },\r\n }\r\n : {}),\r\n }}\r\n variant={'layout.common.components.aiMessage.fileBox'}\r\n >\r\n {closeButton && closeButton}\r\n {FileType.IMAGE === this.type ? (\r\n <img src={URL.createObjectURL(this.file)} alt={this.name}></img>\r\n ) : (\r\n <FileIcon iconSize=\"lg\" docName={this.name} />\r\n )}\r\n <Box\r\n as={'p'}\r\n variant={'layout.common.components.aiMessage.fileName'}\r\n title={this.name}\r\n >\r\n {this.name}\r\n </Box>\r\n </Box>\r\n );\r\n };\r\n}\r\n","import { AIMessageRole, Reactive } from './types';\r\nimport { AIContent } from './AIContent';\r\nimport { IconButton } from '@apia/components';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { getLabel } from '@apia/util';\r\nimport { Collector } from '@apia/validations';\r\nimport { AIFileContent } from './AIFileContent';\r\n\r\nexport class AIMessageAttachments implements Reactive {\r\n role: AIMessageRole;\r\n content: AIContent;\r\n id = uniqueId();\r\n customDescription = false;\r\n\r\n constructor(\r\n role: AIMessageRole,\r\n content: AIContent,\r\n private close?: () => void,\r\n ) {\r\n this.role = role;\r\n this.content = content;\r\n }\r\n\r\n addDescription = async () => {\r\n const collector = new Collector();\r\n const collected = await collector\r\n .add(this.content)\r\n .add(\r\n new collector.fields.textarea(\r\n 'addCommentTextArea',\r\n getLabel('lblAiAddImageCo').text.replace('.', ''),\r\n {\r\n initialValue:\r\n this.content instanceof AIFileContent &&\r\n this.content.content !== this.content.inferContent()\r\n ? (this.content.content as string)\r\n : '',\r\n },\r\n ),\r\n )\r\n .show<{ addCommentTextArea: string }>({\r\n title: getLabel('btnAddComment').text,\r\n })\r\n .catch((e) => {\r\n throw e;\r\n });\r\n if (collected?.addCommentTextArea) {\r\n this.content.content = collected.addCommentTextArea;\r\n this.customDescription = true;\r\n } else {\r\n if (this.content instanceof AIFileContent)\r\n this.content.content = this.content.inferContent();\r\n this.customDescription = false;\r\n }\r\n };\r\n\r\n getId() {\r\n return this.id;\r\n }\r\n\r\n Component = (props: {\r\n closeButton?: boolean;\r\n canAddDescription?: boolean;\r\n }) => (\r\n <Box {...getVariant('layout.common.components.aiMessage')}>\r\n {props.closeButton ? (\r\n <IconButton\r\n className=\"closeButton\"\r\n size=\"Md\"\r\n icon=\"Close\"\r\n onClick={this.close}\r\n title={getLabel('lblDeleteItem').title}\r\n ></IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n {props?.canAddDescription ? (\r\n <IconButton\r\n className=\"descriptionButton\"\r\n size=\"Md\"\r\n icon=\"Magic\"\r\n onClick={this.addDescription}\r\n ></IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n <this.content.Component />\r\n </Box>\r\n );\r\n}\r\n","import { getLabel } from '@apia/util';\r\nimport { ChatController } from '../ChatController';\r\nimport { ChatMessage } from '../messages/ChatMessage';\r\nimport { AIFileContent } from '../messages/aiMessage/AIFileContent';\r\nimport { AIMessageAttachments } from '../messages/aiMessage/AIMessageAttachments';\r\nimport {\r\n AIFileContentAllowedExtensions,\r\n AIMessageRole,\r\n} from '../messages/aiMessage/types';\r\n\r\nexport const handleFileUploadAsMessage = async (\r\n fileInputElement: HTMLInputElement,\r\n chatController: ChatController,\r\n) => {\r\n if (fileInputElement.files) {\r\n [...fileInputElement.files].forEach(async (f) => {\r\n const m: AIMessageAttachments = new AIMessageAttachments(\r\n AIMessageRole.USER,\r\n await AIFileContent.fromFile(f, {\r\n fileExtension: () =>\r\n chatController.messages.add(\r\n new ChatMessage(\r\n getLabel('msgAiIncorrectFileExtensionError', {\r\n text: {\r\n TOK1: `[${Object.keys(AIFileContentAllowedExtensions).join(', ')}]`,\r\n },\r\n }).text,\r\n 'error',\r\n ),\r\n ),\r\n }),\r\n () => chatController.attachments.drop(m),\r\n );\r\n chatController.attachments.add(m);\r\n });\r\n }\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport { FormEvent, KeyboardEvent, useCallback, useState } from 'react';\r\nimport { ChatController } from './ChatController';\r\nimport {\r\n ApiaUtil,\r\n IconButton,\r\n SimpleButton,\r\n TMenuItem,\r\n} from '@apia/components';\r\nimport { Box, Textarea, getVariant, useBreakpointIndex } from '@apia/theme';\r\nimport useHandleFileUpload, {\r\n WrongFormatError,\r\n} from './files/useHandleFileUpload';\r\nimport { getLabel, noNaN } from '@apia/util';\r\nimport { ChatMessage } from './messages/ChatMessage';\r\nimport { handleFileUploadAsMessage } from './files/handleFileUploadAsMessage';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const makeTextarea = (chatController: ChatController) => {\r\n const NewTextarea = observer(\r\n ({\r\n hideDeleteButton,\r\n isLoading: outIsLoading,\r\n onSubmit,\r\n preventAppendUserMessages,\r\n }: {\r\n hideDeleteButton?: boolean;\r\n isLoading?: boolean;\r\n onSubmit: (chatMessage: ChatMessage) => Promise<void>;\r\n preventAppendUserMessages?: boolean;\r\n }) => {\r\n const [isLoading, setIsLoading] = useState(false);\r\n const breakpoint = useBreakpointIndex();\r\n const submit = useCallback(() => {\r\n if (preventAppendUserMessages !== true)\r\n chatController.messages.add(chatController.state.current);\r\n\r\n chatController.history.add(chatController.state.current);\r\n\r\n onSubmit(chatController.state.current).finally(() => {\r\n setIsLoading(false);\r\n\r\n chatController.state.current = new ChatMessage();\r\n });\r\n }, [onSubmit, preventAppendUserMessages]);\r\n\r\n const handleSubmit = useCallback(\r\n (ev: FormEvent<HTMLFormElement>) => {\r\n ev.preventDefault();\r\n if (\r\n chatController.state.current.message ||\r\n chatController.attachments.size() > 0\r\n ) {\r\n setIsLoading(true);\r\n submit();\r\n }\r\n const textarea = document.getElementById(\r\n `GPTMessage${chatController.id}`,\r\n ) as HTMLTextAreaElement;\r\n textarea.focus();\r\n },\r\n [submit],\r\n );\r\n\r\n const onKeyDown = useCallback((ev: KeyboardEvent) => {\r\n if ((ev.target as HTMLTextAreaElement).readOnly) return;\r\n\r\n if (ev.code === 'Enter' && !ev.shiftKey) {\r\n ev.preventDefault();\r\n (ev.target as HTMLElement)\r\n .closest('form')\r\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\r\n ?.click();\r\n }\r\n }, []);\r\n\r\n const { progress, handleFileUpload } = useHandleFileUpload({\r\n onContent(content) {\r\n (\r\n document.getElementById(\r\n `GPTMessage${chatController.id}`,\r\n ) as HTMLTextAreaElement\r\n ).value = content.join('\\n\\n');\r\n },\r\n });\r\n\r\n const actualIsLoading = isLoading || progress !== 100 || outIsLoading;\r\n\r\n const [dragging, setDragging] = useState(false);\r\n\r\n const handleDragLeave = (ev: React.DragEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n setDragging(false);\r\n };\r\n\r\n const handleDrop = (ev: React.DragEvent<HTMLFormElement>) => {\r\n ev.preventDefault();\r\n setDragging(false);\r\n const fileElement = document.getElementById(\r\n `gptUploadFile__${chatController.id}`,\r\n ) as HTMLInputElement;\r\n fileElement.files = ev.dataTransfer.files;\r\n const event = new Event('change', { bubbles: true });\r\n fileElement.dispatchEvent(event);\r\n };\r\n\r\n const handleDragOver = (ev: React.DragEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n };\r\n\r\n const handleDragEnter = (ev: React.DragEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n setDragging(true);\r\n };\r\n\r\n const additionalButtons: TMenuItem[] = [];\r\n additionalButtons.push({\r\n key: 'prev',\r\n children: (\r\n <SimpleButton\r\n title={getLabel('btnAiPrevious').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={chatController.history.previous}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiPrevious').text}\r\n </SimpleButton>\r\n ),\r\n });\r\n additionalButtons.push({\r\n key: 'next',\r\n children: (\r\n <SimpleButton\r\n title={getLabel('btnAiNext').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={chatController.history.next}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiNext').text}\r\n </SimpleButton>\r\n ),\r\n });\r\n if (!hideDeleteButton) {\r\n additionalButtons.push({\r\n key: 'delete',\r\n children: (\r\n <SimpleButton\r\n title={getLabel('btnAiDelete').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() => {\r\n chatController.state.current.message = '';\r\n chatController.attachments.dropAll();\r\n chatController.currentHistoryIndex = -1;\r\n }}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiDelete').text}\r\n </SimpleButton>\r\n ),\r\n });\r\n additionalButtons.push({\r\n key: 'deleteMessages',\r\n children: (\r\n <SimpleButton\r\n title={getLabel('btnAiDeleteMessages').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() => chatController.messages.clear()}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiDeleteMessages').text}\r\n </SimpleButton>\r\n ),\r\n });\r\n }\r\n\r\n const isPhone = breakpoint < 4;\r\n let iconButton = <></>;\r\n if (isPhone) {\r\n iconButton = (\r\n <IconButton\r\n {...getVariant('layout.ai.execution.formsAssistant.settingsButton')}\r\n iconSize={'Md'}\r\n size={'Lg'}\r\n icon=\"Ellipsis\"\r\n isLoading={actualIsLoading}\r\n onClick={() => {\r\n const util = ApiaUtil.instance;\r\n const items: TMenuItem[] = [];\r\n items.push(...additionalButtons);\r\n if (items.length > 0)\r\n util.menu.open({\r\n menuProps: {\r\n anchorPoint: { x: util.mouse.x, y: util.mouse.y },\r\n },\r\n items,\r\n });\r\n }}\r\n ></IconButton>\r\n );\r\n }\r\n return (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\r\n <Box\r\n sx={{\r\n flexWrap: 'wrap',\r\n display: 'flex',\r\n maxHeight: '280px',\r\n overflowY: 'auto',\r\n paddingTop: '6px',\r\n paddingBottom: '6px',\r\n }}\r\n >\r\n {chatController.attachments.getComponents()}\r\n </Box>\r\n <form\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n onDragEnter={handleDragEnter}\r\n onDragLeave={handleDragLeave}\r\n onSubmit={handleSubmit}\r\n className=\"gpt__form\"\r\n action=\"\"\r\n >\r\n {dragging ? (\r\n <Box\r\n sx={{\r\n height: '150px',\r\n border: '3px dashed #aaa',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {getLabel('msgAiDragAndDrop').text}\r\n </Box>\r\n ) : (\r\n <Textarea\r\n onKeyDown={onKeyDown}\r\n id={`GPTMessage${chatController.id}`}\r\n readOnly={actualIsLoading}\r\n value={chatController.state.current.message as string}\r\n onChange={(ev) => {\r\n chatController.state.current.message = ev.target.value;\r\n if (\r\n !chatController.state.current.message &&\r\n chatController.attachments.size() < 1\r\n )\r\n chatController.currentHistoryIndex = -1;\r\n }}\r\n />\r\n )}\r\n\r\n <Box className=\"gpt__buttonsContainer\">\r\n <Box sx={{ display: 'none' }}>\r\n <input\r\n type=\"file\"\r\n className=\"gptUploadFile\"\r\n multiple\r\n id={`gptUploadFile__${chatController.id}`}\r\n onChange={(ev) => {\r\n if (1 == noNaN('a'))\r\n handleFileUpload(ev).catch((e) => {\r\n if (e instanceof WrongFormatError) {\r\n setIsLoading(false);\r\n chatController.messages.add(\r\n new ChatMessage(\r\n getLabel('msgAiFileExtensionError').text,\r\n 'error',\r\n ),\r\n );\r\n } else {\r\n throw e;\r\n }\r\n });\r\n else {\r\n handleFileUploadAsMessage(ev.target, chatController);\r\n }\r\n\r\n ev.target.value = '';\r\n }}\r\n />\r\n </Box>\r\n <IconButton\r\n variant=\"icon-outline\"\r\n onClick={() =>\r\n !chatController.audioRecorder.state.recording\r\n ? chatController.audioRecorder.start()\r\n : chatController.audioRecorder.stop()\r\n }\r\n disabled={\r\n actualIsLoading &&\r\n !chatController.audioRecorder.state.recording\r\n }\r\n sx={{\r\n color: chatController.audioRecorder.state.recording\r\n ? 'red'\r\n : undefined,\r\n }}\r\n icon={\r\n chatController.audioRecorder.state.recording\r\n ? 'Stop'\r\n : 'Microphone'\r\n }\r\n id=\"transcribeAudio\"\r\n size=\"Lg\"\r\n title={getLabel('lblAiRecordAudio').text}\r\n />\r\n <IconButton\r\n title={getLabel('btnUploadFile').text}\r\n icon=\"File\"\r\n variant=\"icon-outline\"\r\n disabled={actualIsLoading}\r\n onClick={() => {\r\n (\r\n document.getElementById(\r\n `gptUploadFile__${chatController.id}`,\r\n ) as HTMLElement\r\n ).click();\r\n }}\r\n size=\"Lg\"\r\n />\r\n {isPhone ? (\r\n iconButton\r\n ) : (\r\n <>\r\n {...additionalButtons.map(\r\n (x) => (x as { children: React.ReactNode }).children,\r\n )}\r\n </>\r\n )}\r\n <SimpleButton\r\n title={getLabel('btnAiSend').title}\r\n isLoading={actualIsLoading}\r\n type=\"submit\"\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiSend').text}\r\n </SimpleButton>\r\n </Box>\r\n </form>\r\n </Box>\r\n );\r\n },\r\n );\r\n\r\n NewTextarea.displayName = '';\r\n\r\n return NewTextarea;\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport { getVariant } from '@apia/theme';\r\nimport { Box } from '@apia/theme';\r\nimport { AutoscrollContainer } from './AutoscrollContainer';\r\nimport { makeTextarea } from './Textarea';\r\nimport { ChatMessage } from './messages/ChatMessage';\r\nimport { AIMessageAttachments } from './messages/aiMessage/AIMessageAttachments';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { AIMessageRole } from './messages/aiMessage/types';\r\nimport { AIFileContent } from './messages/aiMessage/AIFileContent';\r\nimport { IAttachment } from '../ChatController/ChatController';\r\n\r\nexport type TMessageType =\r\n | 'user'\r\n | 'system'\r\n | 'warning'\r\n | 'error'\r\n | 'information'\r\n | 'response'\r\n | 'multipleChoice'\r\n | 'customMessage';\r\n\r\ntype ChatControllerState = {\r\n current: ChatMessage;\r\n messages: ChatMessage[];\r\n};\r\n\r\nexport class ChatController {\r\n state: ChatControllerState = {\r\n current: new ChatMessage(),\r\n messages: [],\r\n };\r\n\r\n constructor(\r\n public id: string,\r\n welcomeMessage?: string,\r\n ) {\r\n if (welcomeMessage) {\r\n this.state.messages.splice(\r\n 0,\r\n 0,\r\n new ChatMessage(welcomeMessage, 'system'),\r\n );\r\n }\r\n\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n components = {\r\n MessageHistory: observer(() => {\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.chat')}\r\n className=\"history\"\r\n >\r\n <AutoscrollContainer>\r\n {this.state.messages.map((current) => (\r\n <current.Component key={current.id} />\r\n ))}\r\n </AutoscrollContainer>\r\n </Box>\r\n );\r\n }),\r\n Textarea: makeTextarea(this),\r\n };\r\n\r\n #promptsHistory: ChatMessage[] = [];\r\n currentHistoryIndex = -1;\r\n\r\n #internalAudioRecorder = new AudioRecorder();\r\n\r\n audioRecorder = {\r\n start: () =>\r\n this.#internalAudioRecorder.start().then(async (blob: Blob) => {\r\n const m: AIMessageAttachments = new AIMessageAttachments(\r\n AIMessageRole.USER,\r\n new AIFileContent({\r\n value: await AIFileContent.blobToBase64(blob),\r\n name: `userRecord_${this.audioRecorder.record++}.wav`,\r\n }),\r\n () => this.attachments.drop(m),\r\n );\r\n this.attachments.add(m);\r\n }),\r\n stop: async () => {\r\n this.#internalAudioRecorder.stop();\r\n },\r\n record: 0,\r\n state: this.#internalAudioRecorder.state,\r\n };\r\n\r\n history = {\r\n add: (message: ChatMessage) => {\r\n this.currentHistoryIndex = -1;\r\n\r\n if (message === this.#promptsHistory[this.#promptsHistory.length]) {\r\n return;\r\n }\r\n\r\n this.#promptsHistory = [\r\n message,\r\n ...this.#promptsHistory.slice(\r\n Math.max(0, this.#promptsHistory.length - 10),\r\n ),\r\n ];\r\n },\r\n next: () => {\r\n let message = new ChatMessage();\r\n if (this.#promptsHistory[this.currentHistoryIndex - 1])\r\n message = this.#promptsHistory[--this.currentHistoryIndex].clone();\r\n else {\r\n this.currentHistoryIndex = -1;\r\n }\r\n this.history.updateState(message);\r\n },\r\n previous: () => {\r\n if (this.#promptsHistory[this.currentHistoryIndex + 1]) {\r\n this.history.updateState(\r\n this.#promptsHistory[++this.currentHistoryIndex].clone(),\r\n );\r\n }\r\n },\r\n updateState: (message?: ChatMessage) => {\r\n if (message) this.state.current = message;\r\n else this.state.current = new ChatMessage();\r\n },\r\n size: () => this.state.messages.length,\r\n };\r\n\r\n messages = {\r\n add: (message: ChatMessage, idx?: number) => {\r\n if (idx !== undefined && idx !== null) {\r\n this.state.messages.splice(idx, 0, message);\r\n } else {\r\n this.state.messages.push(message);\r\n }\r\n },\r\n clear: () => {\r\n this.state.messages = [];\r\n },\r\n };\r\n\r\n attachments = {\r\n add: (...aiMessage: AIMessageAttachments[]) => {\r\n this.state.current.attachments.push(\r\n ...(aiMessage as any as IAttachment[]),\r\n );\r\n },\r\n dropAll: () => void (this.state.current.attachments = []),\r\n drop: (el: AIMessageAttachments) => {\r\n const e = el as any as IAttachment;\r\n this.state.current.attachments = this.state.current.attachments.filter(\r\n (c) => c !== e,\r\n );\r\n if (!this.state.current.message && this.attachments.size() < 1)\r\n this.currentHistoryIndex = -1;\r\n },\r\n getComponents: () =>\r\n this.state.current.attachments.map((x) => {\r\n const c = x as any as AIMessageAttachments;\r\n return <c.Component closeButton canAddDescription key={x.id} />;\r\n }),\r\n get: () => this.state.current.attachments,\r\n size: () => this.state.current.attachments.length,\r\n };\r\n}\r\n","import { ApiaUtil, SimpleButton } from '@apia/components';\r\nimport { ChatMessage } from './ChatMessage';\r\nimport { Box, Paragraph } from '@apia/theme';\r\nimport { ReactElement } from 'react';\r\n\r\nexport type TMultipleChoiceMessageOption<OptionProps> = {\r\n label: string;\r\n url: string;\r\n additionalProps?: OptionProps;\r\n};\r\n\r\nexport class MultipleChoiceMessage<OptionProps> extends ChatMessage {\r\n constructor(\r\n question: string,\r\n options: TMultipleChoiceMessageOption<OptionProps>[],\r\n Renderer?: (props: {\r\n item: TMultipleChoiceMessageOption<OptionProps>;\r\n }) => ReactElement,\r\n ) {\r\n super(\r\n Renderer ? (\r\n <Box className=\"multipleChoiceMessage customRenderer\">\r\n <Paragraph>{question}</Paragraph>\r\n {options.map((item) => (\r\n <Renderer item={item} key={item.url} />\r\n ))}\r\n </Box>\r\n ) : (\r\n <Box className=\"multipleChoiceMessage\">\r\n <Paragraph>{question}</Paragraph>\r\n <Box as=\"ul\">\r\n {options.map((current) => (\r\n <li key={current.label}>\r\n <SimpleButton\r\n className=\"multipleChoice__option\"\r\n onClick={() => {\r\n ApiaUtil.instance.tabs.openTab(current.label, current.url);\r\n }}\r\n >\r\n {current.label}\r\n </SimpleButton>\r\n </li>\r\n ))}\r\n </Box>\r\n </Box>\r\n ),\r\n 'multipleChoice',\r\n );\r\n }\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { SemanticSearchReference } from '.';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const Component = observer(\r\n (props: { instance: SemanticSearchReference }) => {\r\n return (\r\n <Box>\r\n <a href={props.instance.state.link}>{props.instance.state.title}</a>\r\n <Box>{props.instance.state.body}</Box>\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { Component } from './Component';\r\n\r\n/*\r\n * This class is used to store the state of a search result record.\r\n */\r\ntype TSearchResultState = {\r\n title: string;\r\n body: string;\r\n link: string;\r\n};\r\n\r\nexport class SemanticSearchReference {\r\n state: TSearchResultState = { title: '', body: '', link: '' };\r\n\r\n public constructor(props: TSearchResultState) {\r\n this.state = props;\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n Component = () => (\r\n <>\r\n (<Component instance={this} />)\r\n </>\r\n );\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { SemanticSearchReference } from './objects/SemanticSearchReference';\r\nimport { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { FiltersStore } from '@apia/components';\r\n\r\n/**\r\n * @class SearchController:\r\n * - mobx Controller for the semantic search logic\r\n * - search for a term and get the results. This controller must be used\r\n * to maintain the state of the search string and of the results given a search string\r\n */\r\nclass SearchController {\r\n static instance = new SearchController();\r\n\r\n state: {\r\n queryString: string;\r\n results: SemanticSearchReference[];\r\n isLoading: boolean;\r\n disabled: boolean;\r\n } = { queryString: '', results: [], isLoading: false, disabled: false };\r\n\r\n protected constructor() {\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n public async search(selectedId: string) {\r\n const filters = await FiltersStore.getFiltersById(\r\n Number.parseInt(selectedId),\r\n );\r\n FiltersStore.setFilters(filters, 'U');\r\n SearchController.instance.state.isLoading = true;\r\n const response = await ApiaApi.post<{ results: SemanticSearchReference[] }>(\r\n makeApiaUrl({\r\n action: 'search',\r\n semSearchId: selectedId,\r\n }),\r\n {\r\n postData: {\r\n q: SearchController.instance.state.queryString,\r\n filters: JSON.stringify(FiltersStore.getFiltersAsFilterValue('U')),\r\n },\r\n postDataTreatement: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n },\r\n );\r\n if (response?.data?.results) {\r\n this.setReferences(response.data.results);\r\n }\r\n this.state.isLoading = false;\r\n }\r\n\r\n protected setReferences(results: SemanticSearchReference[]) {\r\n if (typeof results === 'string' && results) {\r\n results = JSON.parse(results as any as string);\r\n }\r\n SearchController.instance.state.results = results.map((x) =>\r\n x instanceof SemanticSearchReference ? x : new SemanticSearchReference(x),\r\n );\r\n SearchController.instance.state.disabled = false;\r\n }\r\n}\r\n\r\nexport default SearchController;\r\n","import { Box } from '@apia/theme';\r\nimport { IAttachment } from '../ChatController';\r\nimport { FileIcon } from '@apia/icons';\r\nimport { IconButton } from '@apia/components';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const FileAttachment = observer(\r\n ({\r\n attachment,\r\n onRemove,\r\n }: {\r\n attachment: IAttachment;\r\n onRemove?: () => unknown;\r\n }) => {\r\n return (\r\n <Box className=\"file_box\">\r\n <FileIcon className=\"file_box__icon\" docName={attachment.name} />\r\n <Box className=\"file_box__name\" title={attachment.name}>\r\n {attachment.name}\r\n </Box>\r\n {onRemove && (\r\n <IconButton\r\n icon=\"Close\"\r\n className=\"file_box__remove\"\r\n onClick={onRemove}\r\n variant=\"icon-only\"\r\n ></IconButton>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { IAttachment } from '../ChatController';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { FileAttachment } from './FileAttachment';\r\n\r\nconst Attachments = observer(\r\n ({\r\n attachments,\r\n onRemove,\r\n }: {\r\n attachments: IAttachment[];\r\n onRemove?: (a: IAttachment) => unknown;\r\n }) => {\r\n if (!attachments.length) return null;\r\n\r\n return (\r\n <Box\r\n className=\"attachments\"\r\n {...getVariant('layout.common.chat.attachments')}\r\n >\r\n {attachments.map((x) => (\r\n <FileAttachment\r\n attachment={x}\r\n onRemove={onRemove ? () => onRemove(x) : undefined}\r\n key={x.id}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n },\r\n);\r\nexport default Attachments;\r\n","import { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { IAttachment } from '../ChatController';\r\nimport { TMessageType } from '../../chat/ChatController';\r\nimport { ReactNode } from 'react';\r\nimport Attachments from './Attachments';\r\n\r\nexport const Message = observer(\r\n ({\r\n className,\r\n type,\r\n id,\r\n message,\r\n attachments,\r\n reference,\r\n }: {\r\n className?: string;\r\n type: TMessageType;\r\n id: string;\r\n message: ReactNode;\r\n attachments: IAttachment[];\r\n reference: ReactNode;\r\n }) => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history_message ${className || ''} ${type}`}\r\n key={id}\r\n >\r\n <Box\r\n className=\"history_message__content\"\r\n {...(typeof message === 'string'\r\n ? { dangerouslySetInnerHTML: { __html: message } }\r\n : { children: message })}\r\n />\r\n {attachments.length > 0 && (\r\n <Attachments attachments={attachments}></Attachments>\r\n )}\r\n {reference && (\r\n <Box className=\"history_message__references\">{reference}</Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { AutoscrollContainer } from '../../chat/AutoscrollContainer';\r\nimport { ChatMessage } from '../../chat/messages/ChatMessage';\r\nimport { Message } from './Message';\r\n\r\nconst History = observer(({ messages }: { messages: ChatMessage[] }) => {\r\n let currentType: string = '';\r\n\r\n return (\r\n <AutoscrollContainer>\r\n <Box\r\n {...getVariant('layout.common.chat.history')}\r\n className=\"chat_history\"\r\n >\r\n {messages.map((current, i) => {\r\n let first = false;\r\n let last = false;\r\n\r\n if (currentType !== current.messageType) {\r\n currentType = current.messageType;\r\n first = true;\r\n }\r\n\r\n if (\r\n i === messages.length - 1 ||\r\n messages[i + 1].messageType !== current.messageType\r\n ) {\r\n last = true;\r\n }\r\n\r\n return (\r\n <Message\r\n className={first ? 'first' : last ? 'last' : undefined}\r\n type={current.messageType}\r\n id={String(current.id)}\r\n attachments={current.attachments}\r\n reference={current.reference}\r\n message={current.message}\r\n />\r\n );\r\n })}\r\n </Box>\r\n </AutoscrollContainer>\r\n );\r\n});\r\nexport default History;\r\n","export function getBase64FromFile(f: File) {\r\n return ((f: File) =>\r\n new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(f);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = () => reject();\r\n }))(f);\r\n}\r\n\r\nexport function getBase64FromBlob(b: Blob) {\r\n return ((blob: Blob): Promise<string> =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => {\r\n const base64String = reader.result as string;\r\n resolve(base64String);\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(blob);\r\n }))(b);\r\n}\r\n\r\nexport function getFileExtension(name: string) {\r\n return name.split('.').at(-1);\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { ApiaUtil, IconButton } from '@apia/components';\r\nimport { Form, Textarea as TTT, getVariant } from '@apia/theme';\r\nimport { ChangeEvent, useRef } from 'react';\r\nimport { getLabel } from '@apia/util';\r\nimport { IAttachment } from '../ChatController';\r\nimport { getBase64FromFile } from '../util';\r\nimport { TMenuItem } from '@apia/components';\r\n\r\nconst TextArea = observer(\r\n ({\r\n isLoading,\r\n isRecording,\r\n onSubmit,\r\n onChange,\r\n onClearHistory,\r\n onClearAttachments,\r\n onClearMessage,\r\n onAttach,\r\n onRecord,\r\n onVideoRecord,\r\n onPrev,\r\n onNext,\r\n hideDeleteButton,\r\n value,\r\n id,\r\n }: {\r\n isLoading: boolean;\r\n isRecording: boolean;\r\n onClearHistory: () => unknown;\r\n onClearMessage: () => unknown;\r\n onClearAttachments: () => unknown;\r\n onSubmit: () => unknown;\r\n onChange: (v: string) => unknown;\r\n onAttach: (ev: IAttachment) => unknown;\r\n onRecord: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n onVideoRecord: () => unknown;\r\n onPrev: () => unknown;\r\n onNext: () => unknown;\r\n hideDeleteButton: boolean;\r\n value: string;\r\n attachments: IAttachment[];\r\n id: string;\r\n }) => {\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const searchControlsRef = useRef<HTMLTextAreaElement>(null);\r\n const recordButton = (\r\n <IconButton\r\n variant=\"icon-only\"\r\n onClick={onRecord}\r\n disabled={isLoading && !isRecording}\r\n sx={{\r\n color: isRecording ? 'red' : undefined,\r\n }}\r\n icon={isRecording ? 'Stop' : 'Microphone'}\r\n id=\"transcribeAudio\"\r\n iconSize=\"Sm\"\r\n title={getLabel('lblAiRecordAudio').text}\r\n />\r\n );\r\n const handleAttachments = async (ev: ChangeEvent<HTMLInputElement>) => {\r\n if (ev.target.files) {\r\n for await (const f of ev.target.files) {\r\n const base64 = await getBase64FromFile(f);\r\n onAttach({\r\n value: base64,\r\n name: f.name,\r\n id: f.name,\r\n });\r\n }\r\n }\r\n };\r\n const iconsList: TMenuItem[] = [\r\n {\r\n icon: 'ArrowLeft',\r\n children: getLabel('btnAiPrevious').text,\r\n title: getLabel('btnAiPrevious').text,\r\n onClick: onPrev,\r\n key: '0',\r\n },\r\n {\r\n icon: 'ArrowRight',\r\n children: getLabel('btnAiNext').text,\r\n title: getLabel('btnAiNext').text,\r\n onClick: onNext,\r\n key: '1',\r\n },\r\n {\r\n children: getLabel('btnUpload').text,\r\n title: getLabel('btnUpload').text,\r\n icon: 'File',\r\n onClick: () => fileInputRef.current?.click(),\r\n key: '2',\r\n },\r\n {\r\n title: getLabel('lblOpenCamera').text,\r\n children: getLabel('lblOpenCamera').text,\r\n icon: 'Camera',\r\n onClick: onVideoRecord,\r\n key: '3',\r\n },\r\n {\r\n title: getLabel('lblAiRecordAudio').text,\r\n children: getLabel('lblAiRecordAudio').text,\r\n key: '4',\r\n onClick: (event) =>\r\n onRecord(event as unknown as React.MouseEvent<HTMLButtonElement>),\r\n icon: isRecording ? 'Stop' : 'Microphone',\r\n },\r\n ...((hideDeleteButton\r\n ? []\r\n : [\r\n {\r\n icon: 'Trash',\r\n onClick: onClearHistory,\r\n key: '5',\r\n children: getLabel('btnAiDeleteMessages').text,\r\n title: getLabel('btnAiDeleteMessages').text,\r\n },\r\n {\r\n icon: 'Erase',\r\n title: getLabel('btnAiDelete').text,\r\n children: getLabel('btnAiDelete').text,\r\n onClick: () => {\r\n onClearMessage();\r\n onClearAttachments();\r\n },\r\n key: '6',\r\n },\r\n ]) as TMenuItem[]),\r\n ];\r\n return (\r\n <Form\r\n id={id}\r\n onSubmit={(ev) => {\r\n ev.preventDefault();\r\n onSubmit();\r\n }}\r\n className=\"search_controls\"\r\n {...getVariant('layout.common.chat.form')}\r\n >\r\n <TTT\r\n ref={searchControlsRef}\r\n aria-label={\r\n /** TODO: Crear etiqueta para búsqueda */ 'Frase de búsqueda'\r\n }\r\n value={value}\r\n className=\"searchTextArea\"\r\n onChange={(ev) => onChange(ev.target.value)}\r\n onKeyDown={(ev) => {\r\n if (ev.code === 'Enter' && !ev.shiftKey) {\r\n ev.preventDefault();\r\n (ev.target as HTMLElement)\r\n .closest('form')!\r\n .querySelector<HTMLElement>('[type=\"submit\"]')!\r\n .click();\r\n }\r\n }}\r\n ></TTT>\r\n {isRecording && recordButton}\r\n <input\r\n ref={fileInputRef}\r\n id=\"invisible__attach__file\"\r\n type=\"file\"\r\n multiple\r\n onChange={handleAttachments}\r\n sx={{ display: 'none' }}\r\n ></input>\r\n <IconButton\r\n disabled={isLoading}\r\n icon=\"Ellipsis\"\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n onClick={(ev) => {\r\n ApiaUtil.instance.menu.open({\r\n menuProps: {\r\n anchorPoint: { x: ev.clientX, y: ev.clientY },\r\n },\r\n items: iconsList,\r\n });\r\n }}\r\n ></IconButton>\r\n <IconButton\r\n className=\"SearchButton\"\r\n isLoading={isLoading}\r\n icon=\"ArrowRight\"\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n title={getLabel('btnBus').title}\r\n type=\"submit\"\r\n />\r\n </Form>\r\n );\r\n },\r\n);\r\nexport default TextArea;\r\n","import { makeObservable, observable, action } from 'mobx';\r\nimport { Reactive } from '../chat/messages/aiMessage/types';\r\nimport { ApiaUtil } from '@apia/components';\r\n\r\nexport class CameraController implements Reactive {\r\n state: {\r\n videoStream: MediaStream | null;\r\n isOpen: boolean;\r\n } = {\r\n videoStream: null,\r\n isOpen: false,\r\n };\r\n private currentCapture: File | null = null;\r\n\r\n private videoElement: HTMLVideoElement;\r\n\r\n constructor() {\r\n makeObservable(this, {\r\n state: observable,\r\n openCamera: action,\r\n closeCamera: action,\r\n });\r\n\r\n this.videoElement = document.createElement('video');\r\n this.videoElement.autoplay = true;\r\n this.videoElement.playsInline = true;\r\n }\r\n\r\n async openCamera() {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\r\n this.state.videoStream = stream;\r\n this.videoElement.srcObject = stream;\r\n this.state.isOpen = true;\r\n ApiaUtil.instance.modals.open({\r\n children: <this.Component></this.Component>,\r\n onConfirm: () => {\r\n this.closeCamera();\r\n },\r\n onClose: () => {\r\n this.state.isOpen = false;\r\n this.closeCamera();\r\n },\r\n });\r\n } catch (error) {\r\n console.error('Error while accessing the camera:', error);\r\n this.state.isOpen = false;\r\n this.closeCamera();\r\n }\r\n }\r\n\r\n async closeCamera() {\r\n if (!this.videoElement.srcObject) return null;\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = this.videoElement.videoWidth;\r\n canvas.height = this.videoElement.videoHeight;\r\n const ctx = canvas.getContext('2d');\r\n if (ctx)\r\n ctx.drawImage(this.videoElement, 0, 0, canvas.width, canvas.height);\r\n\r\n this.currentCapture = await new Promise<File | null>((resolve) => {\r\n canvas.toBlob((blob: Blob | null) => {\r\n if (blob) {\r\n const file = new File([blob], 'captured_image.jpg', {\r\n type: 'image/jpeg',\r\n });\r\n resolve(file);\r\n } else {\r\n resolve(null);\r\n }\r\n }, 'image/jpeg');\r\n }).finally(() => {\r\n this.state.videoStream?.getTracks().forEach((track) => track.stop());\r\n this.state.videoStream = null;\r\n this.videoElement.srcObject = null;\r\n this.state.isOpen = false;\r\n });\r\n }\r\n\r\n pop() {\r\n const returnFile = this.currentCapture;\r\n this.currentCapture = null;\r\n return returnFile;\r\n }\r\n\r\n Component = () => {\r\n return (\r\n <video\r\n ref={(el) => {\r\n if (el) {\r\n el.srcObject = this.videoElement.srcObject;\r\n el.autoplay = true;\r\n el.playsInline = true;\r\n }\r\n }}\r\n style={{ width: '100%', height: 'auto' }}\r\n />\r\n );\r\n };\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { ChatMessage } from '../chat/messages/ChatMessage';\r\nimport Attachments from './components/Attachments';\r\nimport History from './components/History';\r\nimport { observer } from 'mobx-react-lite';\r\nimport TTT from './components/TextArea';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { CameraController } from './CameraController';\r\nimport { getBase64FromBlob, getBase64FromFile } from './util';\r\n\r\nexport interface IAttachment {\r\n name: string;\r\n id: string;\r\n value: string;\r\n}\r\n\r\nexport type TChatControllerState = {\r\n isVisible: boolean;\r\n isLoading: boolean;\r\n canRecord: boolean;\r\n canAttach: boolean;\r\n canAddSystemMessage: boolean;\r\n canAddUserMessage: boolean;\r\n canShowSystemMessage: boolean;\r\n canShowUserMessage: boolean;\r\n hideDeleteButton: boolean;\r\n maxAttachmentsSize: number;\r\n messages: ChatMessage[];\r\n currentMessage: ChatMessage;\r\n};\r\n\r\nexport interface BaseMessageCallbackProps {\r\n message: ChatMessage;\r\n}\r\nexport interface BaseMessageCallbackResponse {\r\n responseMessage?: ChatMessage;\r\n}\r\n\r\nexport type MessageSubmitCallback<T extends BaseMessageCallbackProps> = (\r\n props: T,\r\n) => Promise<BaseMessageCallbackResponse>;\r\n\r\nexport type MessageResponseCallback<T extends BaseMessageCallbackResponse> = (\r\n props: T,\r\n) => Promise<BaseMessageCallbackResponse>;\r\n\r\nexport class ChatController2 {\r\n currentIndex = 0;\r\n state: TChatControllerState = {\r\n isVisible: false,\r\n isLoading: false,\r\n canRecord: true,\r\n canAttach: true,\r\n canAddSystemMessage: true,\r\n canAddUserMessage: true,\r\n canShowSystemMessage: true,\r\n canShowUserMessage: true,\r\n hideDeleteButton: false,\r\n maxAttachmentsSize: 100,\r\n messages: [],\r\n currentMessage: new ChatMessage('', 'user'),\r\n };\r\n private internalAudioRecorder = new AudioRecorder();\r\n private internalCameraRecorder = new CameraController();\r\n\r\n private maxId = 0;\r\n\r\n audioRecorder = {\r\n start: () => {\r\n this.internalAudioRecorder.start().then(async (blob: Blob) => {\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: `userRecord_${this.audioRecorder.record++}.wav`,\r\n value: await getBase64FromBlob(blob),\r\n });\r\n });\r\n },\r\n stop: async () => {\r\n this.internalAudioRecorder.stop();\r\n },\r\n record: 0,\r\n state: this.internalAudioRecorder.state,\r\n };\r\n\r\n constructor(\r\n props: Partial<TChatControllerState>,\r\n private onMessageSubmit: MessageSubmitCallback<BaseMessageCallbackProps>,\r\n public id: string,\r\n private onMessageResponse?: MessageResponseCallback<BaseMessageCallbackResponse>,\r\n ) {\r\n this.state = Object.assign({}, this.state, props);\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n removeMessage(idx: number) {\r\n this.state.messages = this.state.messages.filter((_, i) => i !== idx);\r\n }\r\n\r\n addMessage(message: ChatMessage) {\r\n this.state.messages.push(message);\r\n }\r\n\r\n clearHistory() {\r\n this.state.messages = [];\r\n }\r\n\r\n clearMessage() {\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n\r\n public removeAttachment(attachment: IAttachment) {\r\n this.state.currentMessage.attachments =\r\n this.state.currentMessage.attachments.filter((x) => x !== attachment);\r\n }\r\n\r\n private isValidToShow(message?: ChatMessage) {\r\n return (\r\n message &&\r\n ((message.messageType === 'system' && this.state.canShowSystemMessage) ||\r\n (message.messageType === 'user' && this.state.canShowUserMessage))\r\n );\r\n }\r\n\r\n public nextMessage() {\r\n let newCurrentMessage = undefined;\r\n let i = this.currentIndex;\r\n const n = this.state.messages.length;\r\n if (n === 0) {\r\n return;\r\n }\r\n while (!newCurrentMessage) {\r\n if (i === -1 || i === n - 1) {\r\n newCurrentMessage = this.state.messages[0];\r\n i = 0;\r\n } else if (i < n - 1) {\r\n newCurrentMessage = this.state.messages[i + 1];\r\n i++;\r\n }\r\n if (this.isValidToShow(newCurrentMessage)) {\r\n this.state.currentMessage = newCurrentMessage!.clone();\r\n break;\r\n } else {\r\n newCurrentMessage = undefined;\r\n }\r\n if (i === this.currentIndex) {\r\n break;\r\n }\r\n }\r\n this.currentIndex = i;\r\n }\r\n\r\n public prevMessage() {\r\n let newCurrentMessage = undefined;\r\n let i = this.currentIndex;\r\n const n = this.state.messages.length;\r\n if (n === 0) {\r\n return;\r\n }\r\n while (!newCurrentMessage) {\r\n if (i === -1 || i === 0) {\r\n newCurrentMessage = this.state.messages[n - 1];\r\n i = n - 1;\r\n } else if (i > 0) {\r\n newCurrentMessage = this.state.messages[i - 1];\r\n i--;\r\n }\r\n if (this.isValidToShow(newCurrentMessage)) {\r\n this.state.currentMessage = newCurrentMessage!.clone();\r\n break;\r\n } else {\r\n newCurrentMessage = undefined;\r\n }\r\n if (i === this.currentIndex) {\r\n break;\r\n }\r\n }\r\n this.currentIndex = i;\r\n }\r\n\r\n History = observer(() => <History messages={this.state.messages}></History>);\r\n\r\n Attachments = observer(() => (\r\n <Attachments\r\n attachments={this.state.currentMessage.attachments}\r\n onRemove={(a) => {\r\n this.removeAttachment(a);\r\n }}\r\n ></Attachments>\r\n ));\r\n\r\n TextArea = observer(() => (\r\n <TTT\r\n id={this.id}\r\n value={this.state.currentMessage.message as string}\r\n isLoading={this.state.isLoading}\r\n isRecording={this.internalAudioRecorder.state.recording}\r\n onChange={(ev) => {\r\n this.state.currentMessage.message = ev;\r\n }}\r\n onSubmit={async () => {\r\n if (\r\n this.state.currentMessage.message ||\r\n this.state.currentMessage.attachments.length > 0\r\n ) {\r\n this.state.isLoading = true;\r\n if (this.state.canAddUserMessage) {\r\n this.addMessage(this.state.currentMessage);\r\n }\r\n const response = await this.onMessageSubmit({\r\n message: this.state.currentMessage,\r\n });\r\n if (this.onMessageResponse) {\r\n await this.onMessageResponse(response);\r\n }\r\n this.state.isLoading = false;\r\n if (this.state.canAddSystemMessage && response.responseMessage) {\r\n this.addMessage(response.responseMessage);\r\n }\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n }}\r\n onClearHistory={() => {\r\n this.clearHistory();\r\n }}\r\n onClearAttachments={() => {\r\n this.state.currentMessage.attachments = [];\r\n }}\r\n onClearMessage={() => {\r\n this.clearMessage();\r\n }}\r\n onAttach={async (ev) => {\r\n this.state.currentMessage.attachments.push({\r\n ...ev,\r\n id: String(this.maxId++),\r\n });\r\n }}\r\n onRecord={() => {\r\n !this.internalAudioRecorder.state.recording\r\n ? this.audioRecorder.start()\r\n : this.audioRecorder.stop();\r\n }}\r\n onVideoRecord={async () => {\r\n !this.internalCameraRecorder.state.isOpen &&\r\n (await this.internalCameraRecorder.openCamera());\r\n await new Promise<void>((resolve, _) => {\r\n const checkCapture = async () => {\r\n if (!this.internalCameraRecorder.state.isOpen) {\r\n const capture = this.internalCameraRecorder.pop();\r\n if (capture) {\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: capture.name,\r\n value: await getBase64FromFile(capture),\r\n });\r\n return resolve();\r\n }\r\n } else {\r\n requestAnimationFrame(checkCapture);\r\n }\r\n };\r\n\r\n checkCapture();\r\n });\r\n }}\r\n onPrev={() => {\r\n this.prevMessage();\r\n }}\r\n onNext={() => {\r\n this.nextMessage();\r\n }}\r\n hideDeleteButton={this.state.hideDeleteButton}\r\n attachments={[]}\r\n />\r\n ));\r\n\r\n Renderer = () => (\r\n <Box\r\n {...getVariant('layout.common.chat.controller')}\r\n className=\"chat_controller\"\r\n >\r\n <this.History />\r\n <this.Attachments />\r\n <this.TextArea />\r\n </Box>\r\n );\r\n}\r\n/*\r\nconst TTT = observer(\r\n ({\r\n isLoading,\r\n onSubmit,\r\n onChange,\r\n onClear,\r\n value,\r\n }: {\r\n isLoading: boolean;\r\n onClear: () => unknown;\r\n onSubmit: () => unknown;\r\n onChange: (v: string) => unknown;\r\n onAttach: (v: IAttachment) => unknown;\r\n value: string;\r\n }) => {\r\n return (\r\n <form\r\n onSubmit={(ev) => {\r\n ev.preventDefault();\r\n onSubmit();\r\n }}\r\n >\r\n <textarea\r\n value={value}\r\n onChange={(ev) => {\r\n onChange(ev.target.value);\r\n }}\r\n disabled={isLoading}\r\n name=\"r18923rasdjfh\"\r\n ></textarea>\r\n <button type=\"submit\">Enviar</button>\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n onClear();\r\n }}\r\n >\r\n Clear\r\n </button>\r\n </form>\r\n );\r\n },\r\n);\r\n*/\r\n","import { ApiaUtil, IconButton } from '@apia/components';\r\nimport {\r\n BaseMessageCallbackProps,\r\n BaseMessageCallbackResponse,\r\n ChatController2,\r\n MessageResponseCallback,\r\n MessageSubmitCallback,\r\n TChatControllerState,\r\n} from '../ChatController/ChatController';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { action, makeObservable } from 'mobx';\r\n\r\nexport class FloatingChatController extends ChatController2 {\r\n constructor(\r\n props: Partial<TChatControllerState>,\r\n onMessageSubmit: MessageSubmitCallback<BaseMessageCallbackProps>,\r\n id: string,\r\n onMessageResponse?: MessageResponseCallback<BaseMessageCallbackResponse>,\r\n ) {\r\n super(props, onMessageSubmit, id, onMessageResponse);\r\n makeObservable({ open: action });\r\n }\r\n\r\n open() {\r\n ApiaUtil.instance.modals.open({\r\n variant: 'layout.common.chat.assistant.floatingAssistant',\r\n defaultPosition: {\r\n bottom: '10px',\r\n right: '50px',\r\n },\r\n draggable: true,\r\n children: <this.Renderer />,\r\n onClose: () => {\r\n this.state.isVisible = false;\r\n },\r\n });\r\n }\r\n\r\n Window = observer(() => {\r\n return (\r\n <IconButton\r\n icon=\"Magic\"\r\n size=\"Md\"\r\n variant=\"icon-outline\"\r\n onClick={() => {\r\n this.state.isVisible = true;\r\n this.open();\r\n }}\r\n />\r\n );\r\n });\r\n}\r\n","import axios from 'axios';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';\r\nimport { ResponseStream } from '../stream/ResponseStream';\r\nimport { action, makeObservable, observable } from 'mobx';\r\n\r\ntype RoutinesGenerationState = {\r\n isLoading: boolean;\r\n progress: number;\r\n};\r\n\r\ntype TPollProgress = {\r\n message: string;\r\n progress: number;\r\n debug: string;\r\n streamPart?: string;\r\n};\r\n\r\nexport type TPollRoutineResult = {\r\n status: string;\r\n payload: unknown | TPollProgress;\r\n};\r\n\r\nexport type TGenerateFromImage = {\r\n base64: string;\r\n description: string;\r\n};\r\n\r\nexport type TRoutineCompletion = Partial<{\r\n images: TGenerateFromImage[];\r\n parameters: Record<string, string>;\r\n stream: ResponseStream;\r\n}> & {\r\n routineName: string;\r\n};\r\n\r\nfunction isPollProgress(\r\n payload: unknown | TPollProgress,\r\n): payload is TPollProgress {\r\n return (payload as TPollProgress)?.progress !== undefined;\r\n}\r\n\r\nexport class RoutinesGeneration {\r\n public audioRecorder = new AudioRecorder();\r\n private routineId: string = '';\r\n public state: RoutinesGenerationState = {\r\n isLoading: false,\r\n progress: 0,\r\n };\r\n\r\n public constructor() {\r\n makeObservable(this, {\r\n completion: action,\r\n state: observable,\r\n stop: action,\r\n transcribeAudio: action,\r\n });\r\n }\r\n\r\n private checkCanGenerate() {\r\n if (this.state.isLoading) {\r\n throw new Error('Cannot queue two simultaneous generations');\r\n }\r\n\r\n this.state.isLoading = true;\r\n }\r\n\r\n public async pollRoutine<T>(routineId: string, stream?: ResponseStream) {\r\n this.routineId = routineId;\r\n this.state.isLoading = true;\r\n return this.internalPollRoutine<T>(stream);\r\n }\r\n\r\n private async internalPollRoutine<T>(stream?: ResponseStream) {\r\n while (this.state.isLoading) {\r\n const pollResult = await this.callRoutinePoll(this.routineId);\r\n if (isPollProgress(pollResult.payload)) {\r\n try {\r\n const res = JSON.parse(pollResult.payload.debug) as string[];\r\n if (res.length > 0) {\r\n res.forEach((c) => {\r\n console.log(JSON.parse(c));\r\n });\r\n }\r\n\r\n if (pollResult.payload.streamPart && stream) {\r\n stream.emit('part', pollResult.payload.streamPart);\r\n }\r\n this.state.progress = pollResult.payload.progress;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n } else if (pollResult.status === 'FINISHED') {\r\n this.resetLoading();\r\n return pollResult.payload as T;\r\n } else if (pollResult.status === 'ERROR') {\r\n this.resetLoading();\r\n throw new Error(pollResult.payload as string);\r\n } else {\r\n this.resetLoading();\r\n throw new Error('Wrong poll response');\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callAudioTranscription(\r\n audio: Blob,\r\n ): ReturnType<RoutinesGeneration['callRoutineStart']> {\r\n const url = makeApiaUrl({\r\n action: 'routineStart',\r\n routine: 'transcription/Transcribe',\r\n });\r\n\r\n const response = await axios.post(url, audio.arrayBuffer(), {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream',\r\n },\r\n });\r\n\r\n const result = await parseSuccessfulResponse<{\r\n orchestrator: { routineId: string };\r\n }>(response, '');\r\n\r\n if (result?.orchestrator) {\r\n return result;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callRoutinePoll(\r\n routineId: string,\r\n ): Promise<TPollRoutineResult> {\r\n const result = await ApiaApi.post<{ orchestrator: string }>(\r\n makeApiaUrl({\r\n action: 'routinePoll',\r\n routineId,\r\n }),\r\n );\r\n\r\n if (result?.data?.orchestrator) {\r\n return JSON.parse(result.data.orchestrator) as TPollRoutineResult;\r\n } else {\r\n throw new Error('Poll failed');\r\n }\r\n }\r\n\r\n protected async callRoutineStart(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const result = await ApiaApi.post<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStart',\r\n routine: routineName,\r\n }),\r\n {\r\n postData: {\r\n images: JSON.stringify(images),\r\n ...parameters,\r\n },\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n return result?.data || null;\r\n }\r\n\r\n private async executeRoutine<T>(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n stream?: ResponseStream,\r\n ): Promise<T | null> {\r\n this.checkCanGenerate();\r\n\r\n try {\r\n const result = await this.callRoutineStart(\r\n routineName,\r\n parameters,\r\n images,\r\n );\r\n\r\n if (result?.orchestrator?.routineId !== undefined) {\r\n this.routineId = result?.orchestrator.routineId;\r\n\r\n return this.internalPollRoutine<T>(stream);\r\n } else {\r\n throw new Error('Cannot get routine id');\r\n }\r\n } catch (e) {\r\n this.resetLoading();\r\n throw e;\r\n }\r\n }\r\n\r\n private resetLoading() {\r\n this.state.isLoading = false;\r\n this.state.progress = 0;\r\n }\r\n\r\n public async completion<T>(params: TRoutineCompletion) {\r\n return this.executeRoutine<T>(\r\n params.routineName,\r\n params.parameters ?? {},\r\n params.images ?? [],\r\n params.stream,\r\n );\r\n }\r\n\r\n public stop() {\r\n this.resetLoading();\r\n ApiaApi.get<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStop',\r\n routineId: this.routineId,\r\n }),\r\n );\r\n }\r\n\r\n public async transcribeAudio(audio: Blob) {\r\n const result = await this.callAudioTranscription(audio);\r\n\r\n if (result) {\r\n this.state.isLoading = true;\r\n if (result?.orchestrator?.routineId) {\r\n this.routineId = result?.orchestrator?.routineId;\r\n return await this.internalPollRoutine<{\r\n transcription: string;\r\n }>();\r\n }\r\n }\r\n\r\n throw new Error('Something went wrong while transcribing the audio');\r\n }\r\n}\r\n","import { TActionDispatcher, TActionResult } from '@apia/dashboard-controller';\r\nimport {\r\n RoutinesGeneration,\r\n TPollRoutineResult,\r\n TGenerateFromImage,\r\n} from './RoutinesGeneration';\r\n\r\nexport class DashboardsRoutinesGeneration extends RoutinesGeneration {\r\n constructor(protected dispatcher: TActionDispatcher) {\r\n super();\r\n }\r\n\r\n private blobToBase64(audio: Blob) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n if (reader.result && typeof reader.result === 'string') {\r\n const base64 = reader.result.split(',')[1];\r\n resolve(base64);\r\n } else {\r\n reject(new Error('Could not convert Blob to base64'));\r\n }\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(audio);\r\n });\r\n }\r\n\r\n protected async callAudioTranscription(\r\n audio: Blob,\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const audioBase64 = await this.blobToBase64(audio);\r\n const result = (await this.dispatcher({\r\n action: 'transcription',\r\n audioBase64,\r\n })) as TActionResult<{\r\n orchestrator: {\r\n routineId: string;\r\n };\r\n }>;\r\n\r\n return result?.data || null;\r\n }\r\n\r\n protected async callRoutinePoll(\r\n routineId: string,\r\n ): Promise<TPollRoutineResult> {\r\n const result = (await this.dispatcher({\r\n action: 'routinePoll',\r\n routineId,\r\n })) as TActionResult<{ orchestrator: string }>;\r\n\r\n if (result?.data?.orchestrator) {\r\n const parsed = JSON.parse(result.data.orchestrator) as TPollRoutineResult;\r\n\r\n return parsed;\r\n }\r\n\r\n throw new Error('Poll failed');\r\n }\r\n\r\n protected async callRoutineStart(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const result = (await this.dispatcher({\r\n action: 'routineStart',\r\n routine: routineName,\r\n ...parameters,\r\n images,\r\n })) as TActionResult<{\r\n orchestrator: {\r\n routineId: string;\r\n };\r\n }>;\r\n\r\n return result?.data || null;\r\n }\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\n\r\nexport class ResponseStream extends EventEmitter<{ part: string }> {\r\n private buffer: string = '';\r\n private isRunning = false;\r\n private locked = false;\r\n private maxCompletionTime = 2; // s\r\n private minPartSize = 2;\r\n private partSize = 2;\r\n private timing = 5; // ms\r\n private waiting: string[] = [];\r\n\r\n private calculatePartSize() {\r\n const totalSize =\r\n this.buffer.length +\r\n this.waiting.reduce<number>((a, b) => a + b.length, 0);\r\n\r\n this.partSize = Math.max(\r\n this.minPartSize,\r\n (totalSize * this.timing) / (this.maxCompletionTime * 1000),\r\n );\r\n }\r\n\r\n emit<K extends 'part'>(_: K, data: { part: string }[K]): void {\r\n if (this.locked) {\r\n this.waiting.push(data);\r\n } else {\r\n this.buffer += data;\r\n }\r\n this.calculatePartSize();\r\n this.run();\r\n }\r\n\r\n run() {\r\n if (!this.isRunning) {\r\n this.isRunning = true;\r\n const interval = setInterval(() => {\r\n this.locked = true;\r\n\r\n const choosedSize = Math.min(this.buffer.length, this.partSize);\r\n\r\n const part = this.buffer.slice(0, choosedSize);\r\n this.buffer = this.buffer.slice(choosedSize);\r\n\r\n while (this.waiting.length > 0) {\r\n const part = this.waiting.shift();\r\n if (part) {\r\n this.buffer += part;\r\n }\r\n }\r\n this.locked = false;\r\n if (part) {\r\n super.emit('part', part);\r\n } else {\r\n this.isRunning = false;\r\n clearInterval(interval);\r\n }\r\n }, this.timing);\r\n }\r\n }\r\n}\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { uniqueId } from 'lodash-es';\r\n\r\nexport type RetrievedImage = {\r\n base64: string;\r\n path: string;\r\n};\r\n\r\nexport type GetImageSize = '256x256' | '512x512' | '1024x1024';\r\n\r\nexport async function getImageFromGpt({\r\n prompt,\r\n ...props\r\n}: {\r\n prompt: string;\r\n size?: GetImageSize;\r\n model: string;\r\n}): Promise<RetrievedImage | null> {\r\n const res = await ApiaApi.post<{ image: string }>(\r\n makeApiaUrl({\r\n action: 'generateImage',\r\n ...props,\r\n }),\r\n {\r\n postData: {\r\n prompt,\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n if (res?.data)\r\n return {\r\n base64: res.data.image as any as string,\r\n path: `${uniqueId()}.png`,\r\n };\r\n\r\n return null;\r\n}\r\n\r\nexport async function getImageFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n }>,\r\n): Promise<RetrievedImage | null> {\r\n return (\r\n (await getImagesFromDisk({ ...inputProps, multiple: 'false' }))![0] ?? null\r\n );\r\n}\r\n\r\nexport function getImagesFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n multiple: string;\r\n }>,\r\n): Promise<RetrievedImage[]> {\r\n return new Promise<RetrievedImage[]>((resolve) => {\r\n const input = document.createElement('input');\r\n input.accept = 'image/*';\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n Object.assign(input, inputProps);\r\n\r\n document.body.append(input);\r\n\r\n input.addEventListener('change', (event) => {\r\n const target = event?.target as HTMLInputElement;\r\n if (!target?.files) return;\r\n\r\n const retrievedImages: (RetrievedImage | null)[] = [];\r\n const sources = [...(target.files ?? [])];\r\n\r\n const checkResolve = () => {\r\n if (sources.length === retrievedImages.length) {\r\n resolve(retrievedImages.filter((c): c is RetrievedImage => !!c));\r\n }\r\n };\r\n\r\n sources.forEach((file) => {\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = function (e) {\r\n const binary = (e.target?.result as string)?.split(',')[1];\r\n input.remove();\r\n retrievedImages.push({\r\n base64: binary,\r\n path: file.name,\r\n });\r\n\r\n checkResolve();\r\n };\r\n reader.readAsDataURL(file);\r\n } else {\r\n retrievedImages.push(null);\r\n }\r\n\r\n checkResolve();\r\n });\r\n });\r\n input.click();\r\n });\r\n}\r\n","import { IconButton } from '@apia/components';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const ImageIcon = ({\r\n deletable,\r\n onClick,\r\n onRemove,\r\n src,\r\n}: {\r\n deletable: boolean;\r\n onClick: () => unknown;\r\n onRemove: () => unknown;\r\n src: string;\r\n}) => {\r\n return (\r\n <Box className=\"image_preview\">\r\n {deletable && (\r\n <IconButton icon=\"Close\" size=\"Xs\" iconSize=\"Xs\" onClick={onRemove} />\r\n )}\r\n <img src={src} onClick={onClick} />\r\n </Box>\r\n );\r\n};\r\n","export function getSrcFromBase64(base64: string) {\r\n return `data:image/jpg;base64,${base64}`;\r\n}\r\n","import {\r\n ApiaUtil,\r\n IconButton,\r\n SortableList,\r\n SortableListItem,\r\n} from '@apia/components';\r\nimport { Box, getVariant, Textarea } from '@apia/theme';\r\nimport { makeAutoObservable, toJS } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { ImageIcon } from './ImageIcon';\r\nimport { getSrcFromBase64 } from '../ImageBinaryField/getImageSrcString';\r\nimport { getImagesFromDisk } from '../ImageBinaryField/getImage';\r\n\r\nexport type TGenerateFromImage = {\r\n base64: string;\r\n description: string;\r\n};\r\n\r\ntype TStoredImage = TGenerateFromImage & { id: string };\r\n\r\nclass ImagesStore {\r\n images: Map<string, TStoredImage> = new Map();\r\n selectedId = '';\r\n\r\n constructor(\r\n images: TGenerateFromImage[],\r\n public multiple: boolean,\r\n ) {\r\n this.images = new Map(\r\n images.map((c) => {\r\n const id = uniqueId();\r\n return [id, { ...c, id }];\r\n }),\r\n );\r\n this.selectedId = this.images.values().next().value.id;\r\n makeAutoObservable(this);\r\n }\r\n}\r\n\r\nconst GetImagesDescription = observer(({ store }: { store: ImagesStore }) => {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <Box\r\n className=\"images_description_generator\"\r\n {...getVariant('layout.design.projectAnalysis.imagesLoader')}\r\n >\r\n <Box className=\"images_sort_wrapper\">\r\n <SortableList\r\n onSortChange={(ev) => {\r\n store.images = new Map(\r\n ev.map((c) => [\r\n c.props.id,\r\n c.props.additionalProps as TStoredImage,\r\n ]),\r\n );\r\n }}\r\n >\r\n {[...store.images].map(([k, c]) => (\r\n <SortableListItem additionalProps={c} id={c.id} key={c.id}>\r\n <ImageIcon\r\n deletable={store.multiple}\r\n onClick={() => {\r\n store.selectedId = c.id;\r\n }}\r\n onRemove={() => {\r\n store.images.delete(k);\r\n }}\r\n src={getSrcFromBase64(c.base64 ?? '')}\r\n />\r\n </SortableListItem>\r\n ))}\r\n </SortableList>\r\n </Box>\r\n <Box className=\"image_editor\">\r\n <Box className=\"image_preview\">\r\n {store.images.get(store.selectedId) && (\r\n <img\r\n src={getSrcFromBase64(\r\n store.images.get(store.selectedId)!.base64 ?? '',\r\n )}\r\n />\r\n )}\r\n </Box>\r\n <Box className=\"image_description\">\r\n <Textarea\r\n autoFocus\r\n disabled={!store.images.get(store.selectedId)}\r\n onChange={(ev) => {\r\n const image = store.images.get(store.selectedId);\r\n if (image) image.description = ev.target.value;\r\n }}\r\n value={store.images.get(store.selectedId)?.description}\r\n />\r\n {store.multiple && (\r\n <IconButton\r\n icon=\"Attach\"\r\n onClick={() => {\r\n getImagesFromDisk({ multiple: 'true' }).then((res) => {\r\n res.forEach((c) => {\r\n const id = uniqueId();\r\n store.images.set(id, {\r\n base64: c.base64,\r\n description: '',\r\n id,\r\n });\r\n });\r\n });\r\n }}\r\n size=\"Md\"\r\n iconSize=\"Sm\"\r\n variant=\"icon-only\"\r\n />\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n\r\nexport function getImagesWithDescription({\r\n multiple,\r\n}: {\r\n multiple?: boolean;\r\n}): Promise<TGenerateFromImage[]> {\r\n return new Promise((resolve) => {\r\n getImagesFromDisk({ multiple: multiple ? 'true' : undefined }).then(\r\n (images) => {\r\n const store = new ImagesStore(\r\n images.map((c) => ({\r\n base64: c.base64,\r\n description: '',\r\n })),\r\n multiple || false,\r\n );\r\n\r\n ApiaUtil.instance.modals.open({\r\n children: <GetImagesDescription store={store} />,\r\n initialFocusGetter(modalInnerRef) {\r\n return modalInnerRef.querySelector<HTMLElement>('textarea');\r\n },\r\n onConfirm: () => {\r\n resolve([...toJS(store.images).values()]);\r\n },\r\n onCancel() {\r\n resolve([]);\r\n },\r\n size: 'xxxl-fixed',\r\n noHeader: true,\r\n });\r\n },\r\n );\r\n });\r\n}\r\n","import { FilterDTO } from '@apia/components';\r\nimport { createContext, FC } from 'react';\r\n\r\nexport type TReference = {\r\n title: string;\r\n body: string;\r\n link: string;\r\n isExternal: boolean;\r\n};\r\n\r\nexport interface ProcessingUnit {\r\n visualizationType: TSearchMode;\r\n content: string;\r\n references: TReference[];\r\n isExternal: boolean;\r\n}\r\n\r\nexport interface ListingProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'list';\r\n title: string;\r\n link: string;\r\n}\r\n\r\nexport interface ChatProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'chat';\r\n}\r\n\r\nexport const ViewRendererContext = createContext<ISemanticSearchViewController>(\r\n {} as any,\r\n);\r\n\r\nexport type TSearchMode = 'list' | 'chat' | 'none';\r\n\r\nexport interface ISemanticSearchViewController {\r\n state: {\r\n filters: Record<string, FilterDTO>;\r\n filtersOpen: boolean;\r\n isLoading: boolean;\r\n mode: TSearchMode;\r\n searchString: string;\r\n };\r\n\r\n ResultsRenderer: FC;\r\n clearHistory(): Promise<void>;\r\n search(str?: string): void;\r\n toggleFiltersOpen(): void;\r\n}\r\n\r\nexport type TResponseData = {\r\n result: string;\r\n success: string;\r\n failed?: boolean;\r\n};\r\n\r\nexport interface ISearchResultsController<P extends ProcessingUnit> {\r\n state: {\r\n results: P[];\r\n };\r\n\r\n beforeSearch(props?: object): void;\r\n afterSearch(props?: object): void;\r\n\r\n clear(): void;\r\n\r\n processResults(\r\n qryString: string,\r\n results: ProcessingUnit[],\r\n responseData?: TResponseData,\r\n ): void;\r\n\r\n Component: FC;\r\n}\r\n","import { Box, ThemeUIStyleObject } from '@apia/theme';\r\nimport { ReactNode, forwardRef, useEffect, useRef } from 'react';\r\n\r\nexport const WindowDragger = forwardRef<\r\n HTMLElement,\r\n {\r\n children: ReactNode;\r\n style?: ThemeUIStyleObject;\r\n }\r\n>((props, outerRef) => {\r\n const isDragging = useRef(false);\r\n const initialPosition = useRef({ mousex: 0, mousey: 0, boxx: 0, boxy: 0 });\r\n const ref = useRef<HTMLElement | null>(null);\r\n /*const assignRefs = useMultipleRefs(\r\n ref,\r\n outerRef as unknown as MutableRefObject<HTMLElement | null>,\r\n );*/\r\n\r\n useEffect(() => {\r\n const handleMouseMove = (ev: MouseEvent) => {\r\n if (isDragging.current && ref.current) {\r\n const newx = ev.clientX;\r\n const newy = ev.clientY;\r\n\r\n const difx = newx - initialPosition.current.mousex;\r\n const dify = newy - initialPosition.current.mousey;\r\n ref.current.style.left = `${initialPosition.current.boxx + difx}px`;\r\n ref.current.style.top = `${initialPosition.current.boxy + dify}px`;\r\n ref.current.style.bottom = 'auto';\r\n ref.current.style.right = 'auto';\r\n ref.current.style.zIndex = '1200';\r\n }\r\n };\r\n\r\n const handleMouseUp = () => {\r\n isDragging.current = false;\r\n };\r\n\r\n const handleWindowResize = () => {\r\n if (ref.current) {\r\n const bounding = ref.current.getBoundingClientRect();\r\n\r\n if (window.innerWidth < bounding.left + bounding.width) {\r\n const newx = window.innerWidth - bounding.width;\r\n ref.current.style.left = `${newx}px`;\r\n }\r\n if (window.innerHeight < bounding.top + bounding.height) {\r\n const newy = window.innerHeight - bounding.height;\r\n ref.current.style.top = `${newy}px`;\r\n }\r\n }\r\n };\r\n document.addEventListener('mousemove', handleMouseMove);\r\n document.addEventListener('mouseup', handleMouseUp);\r\n window.addEventListener('resize', handleWindowResize);\r\n\r\n return () => {\r\n document.removeEventListener('mousemove', handleMouseMove);\r\n document.removeEventListener('mouseup', handleMouseUp);\r\n window.removeEventListener('resize', handleWindowResize);\r\n };\r\n }, []);\r\n return (\r\n <Box\r\n ref={ref /*assignRefs*/}\r\n className=\"windowDragger\"\r\n onMouseDown={(ev) => {\r\n if (\r\n ev.target instanceof Element &&\r\n (ev.target.nodeName === 'TEXTAREA' ||\r\n ev.target.classList.contains('history__message'))\r\n )\r\n return;\r\n const target = (ev.target as HTMLElement).closest?.(\r\n '.windowDragger',\r\n ) as HTMLElement;\r\n if (target) {\r\n const bounding = target.getBoundingClientRect();\r\n isDragging.current = true;\r\n initialPosition.current = {\r\n mousex: ev.clientX,\r\n mousey: ev.clientY,\r\n boxx: bounding.left,\r\n boxy: bounding.top,\r\n };\r\n }\r\n }}\r\n sx={{\r\n position: 'fixed',\r\n bottom: '260px',\r\n right: '10px',\r\n ...props.style,\r\n }}\r\n >\r\n {props.children}\r\n </Box>\r\n );\r\n});\r\n"],"names":["progress","__publicField","FileType","AIMessageRole","blob","f","TTT","part"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apia/ai",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.16",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"author": "Alexis Leite <alexisleite@live.com>",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
"libWatch": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@apia/api": "^4.0.
|
|
17
|
-
"@apia/components": "^4.0.
|
|
18
|
-
"@apia/dashboard-controller": "^4.0.
|
|
19
|
-
"@apia/theme": "^4.0.
|
|
20
|
-
"@apia/util": "^4.0.
|
|
16
|
+
"@apia/api": "^4.0.16",
|
|
17
|
+
"@apia/components": "^4.0.16",
|
|
18
|
+
"@apia/dashboard-controller": "^4.0.16",
|
|
19
|
+
"@apia/theme": "^4.0.16",
|
|
20
|
+
"@apia/util": "^4.0.16",
|
|
21
21
|
"mobx": "^6.13.1",
|
|
22
22
|
"mobx-react-lite": "^4.0.7"
|
|
23
23
|
},
|
|
@@ -38,5 +38,5 @@
|
|
|
38
38
|
"access": "public",
|
|
39
39
|
"registry": "https://registry.npmjs.org/"
|
|
40
40
|
},
|
|
41
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "7c6a8c2281bfd78469eece56b7efaca115734db4"
|
|
42
42
|
}
|