@apia/ai 3.0.10 → 3.0.12
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 +18 -2
- package/dist/index.js +81 -21
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ declare class ChatController extends EventEmitter<{
|
|
|
38
38
|
useList: () => ChatMessage[];
|
|
39
39
|
};
|
|
40
40
|
messages: {
|
|
41
|
-
add: (message: ChatMessage) => void;
|
|
41
|
+
add: (message: ChatMessage, idx?: number) => void;
|
|
42
42
|
clear: () => void;
|
|
43
43
|
};
|
|
44
44
|
}
|
|
@@ -58,5 +58,21 @@ declare class MultipleChoiceMessage<OptionProps> extends ChatMessage {
|
|
|
58
58
|
get message(): react.JSX.Element;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
declare class ResponseStream extends EventEmitter<{
|
|
62
|
+
part: string;
|
|
63
|
+
}> {
|
|
64
|
+
private buffer;
|
|
65
|
+
private isRunning;
|
|
66
|
+
private locked;
|
|
67
|
+
private partSize;
|
|
68
|
+
private stopped;
|
|
69
|
+
private waiting;
|
|
70
|
+
close(): void;
|
|
71
|
+
emit<K extends 'part'>(_: K, data: {
|
|
72
|
+
part: string;
|
|
73
|
+
}[K]): void;
|
|
74
|
+
run(): void;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export { ChatController, ChatMessage, MultipleChoiceMessage, ResponseStream, type TMessageType, type TMultipleChoiceMessageOption };
|
|
62
78
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -186,10 +186,10 @@ function useHandleFileUpload({
|
|
|
186
186
|
return { progress, handleFileUpload };
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
var __defProp$
|
|
190
|
-
var __defNormalProp$
|
|
191
|
-
var __publicField$
|
|
192
|
-
__defNormalProp$
|
|
189
|
+
var __defProp$2 = Object.defineProperty;
|
|
190
|
+
var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
191
|
+
var __publicField$2 = (obj, key, value) => {
|
|
192
|
+
__defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
193
193
|
return value;
|
|
194
194
|
};
|
|
195
195
|
var __accessCheck$1 = (obj, member, msg) => {
|
|
@@ -215,7 +215,7 @@ let maxId = 0;
|
|
|
215
215
|
class ChatMessage {
|
|
216
216
|
constructor(message, messageType) {
|
|
217
217
|
this.messageType = messageType;
|
|
218
|
-
__publicField$
|
|
218
|
+
__publicField$2(this, "id");
|
|
219
219
|
__privateAdd$1(this, _message, void 0);
|
|
220
220
|
this.id = maxId++;
|
|
221
221
|
__privateSet$1(this, _message, message);
|
|
@@ -382,7 +382,7 @@ const makeTextarea = (gptController) => {
|
|
|
382
382
|
/* @__PURE__ */ jsx(
|
|
383
383
|
SimpleButton,
|
|
384
384
|
{
|
|
385
|
-
title: getLabel("btnAiPrevious").
|
|
385
|
+
title: getLabel("btnAiPrevious").title,
|
|
386
386
|
variant: "outline",
|
|
387
387
|
type: "button",
|
|
388
388
|
onClick: () => {
|
|
@@ -399,7 +399,7 @@ const makeTextarea = (gptController) => {
|
|
|
399
399
|
/* @__PURE__ */ jsx(
|
|
400
400
|
SimpleButton,
|
|
401
401
|
{
|
|
402
|
-
title: getLabel("btnAiNext").
|
|
402
|
+
title: getLabel("btnAiNext").title,
|
|
403
403
|
variant: "outline",
|
|
404
404
|
type: "button",
|
|
405
405
|
onClick: () => {
|
|
@@ -416,7 +416,7 @@ const makeTextarea = (gptController) => {
|
|
|
416
416
|
/* @__PURE__ */ jsx(
|
|
417
417
|
SimpleButton,
|
|
418
418
|
{
|
|
419
|
-
title: getLabel("btnAiDelete").
|
|
419
|
+
title: getLabel("btnAiDelete").title,
|
|
420
420
|
variant: "outline",
|
|
421
421
|
type: "button",
|
|
422
422
|
onClick: () => document.getElementById(
|
|
@@ -429,7 +429,7 @@ const makeTextarea = (gptController) => {
|
|
|
429
429
|
/* @__PURE__ */ jsx(
|
|
430
430
|
SimpleButton,
|
|
431
431
|
{
|
|
432
|
-
title: getLabel("btnAiDeleteMessages").
|
|
432
|
+
title: getLabel("btnAiDeleteMessages").title,
|
|
433
433
|
variant: "outline",
|
|
434
434
|
type: "button",
|
|
435
435
|
onClick: () => gptController.messages.clear(),
|
|
@@ -441,7 +441,7 @@ const makeTextarea = (gptController) => {
|
|
|
441
441
|
/* @__PURE__ */ jsx(
|
|
442
442
|
SimpleButton,
|
|
443
443
|
{
|
|
444
|
-
title: getLabel("btnAiSend").
|
|
444
|
+
title: getLabel("btnAiSend").title,
|
|
445
445
|
isLoading: actualIsLoading,
|
|
446
446
|
type: "submit",
|
|
447
447
|
size: "sm",
|
|
@@ -457,10 +457,10 @@ const makeTextarea = (gptController) => {
|
|
|
457
457
|
return NewTextarea;
|
|
458
458
|
};
|
|
459
459
|
|
|
460
|
-
var __defProp = Object.defineProperty;
|
|
461
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
462
|
-
var __publicField = (obj, key, value) => {
|
|
463
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
460
|
+
var __defProp$1 = Object.defineProperty;
|
|
461
|
+
var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
462
|
+
var __publicField$1 = (obj, key, value) => {
|
|
463
|
+
__defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
464
464
|
return value;
|
|
465
465
|
};
|
|
466
466
|
var __accessCheck = (obj, member, msg) => {
|
|
@@ -495,7 +495,7 @@ class ChatController extends EventEmitter {
|
|
|
495
495
|
super();
|
|
496
496
|
this.id = id;
|
|
497
497
|
__privateAdd(this, _messages, []);
|
|
498
|
-
__publicField(this, "components", {
|
|
498
|
+
__publicField$1(this, "components", {
|
|
499
499
|
MessageHistory: () => {
|
|
500
500
|
const messages = this.history.useList();
|
|
501
501
|
return /* @__PURE__ */ jsx(
|
|
@@ -519,7 +519,7 @@ class ChatController extends EventEmitter {
|
|
|
519
519
|
});
|
|
520
520
|
__privateAdd(this, _promptsHistory, []);
|
|
521
521
|
__privateAdd(this, _currentHistoryIndex, -1);
|
|
522
|
-
__publicField(this, "history", {
|
|
522
|
+
__publicField$1(this, "history", {
|
|
523
523
|
add: (prompt) => {
|
|
524
524
|
__privateSet(this, _currentHistoryIndex, -1);
|
|
525
525
|
if (prompt === __privateGet(this, _promptsHistory)[__privateGet(this, _promptsHistory).length]) {
|
|
@@ -553,9 +553,12 @@ class ChatController extends EventEmitter {
|
|
|
553
553
|
return messages;
|
|
554
554
|
}
|
|
555
555
|
});
|
|
556
|
-
__publicField(this, "messages", {
|
|
557
|
-
add: (message) => {
|
|
558
|
-
|
|
556
|
+
__publicField$1(this, "messages", {
|
|
557
|
+
add: (message, idx) => {
|
|
558
|
+
if (idx !== void 0 && idx !== null)
|
|
559
|
+
__privateGet(this, _messages).splice(idx, 0, message);
|
|
560
|
+
else
|
|
561
|
+
__privateGet(this, _messages).push(message);
|
|
559
562
|
this.emit("listChange", [...__privateGet(this, _messages)]);
|
|
560
563
|
},
|
|
561
564
|
clear: () => {
|
|
@@ -564,7 +567,7 @@ class ChatController extends EventEmitter {
|
|
|
564
567
|
}
|
|
565
568
|
});
|
|
566
569
|
if (welcomeMessage)
|
|
567
|
-
__privateGet(this, _messages).
|
|
570
|
+
__privateGet(this, _messages).splice(0, 0, new ChatMessage(welcomeMessage, "system"));
|
|
568
571
|
}
|
|
569
572
|
}
|
|
570
573
|
_messages = new WeakMap();
|
|
@@ -602,5 +605,62 @@ class MultipleChoiceMessage extends ChatMessage {
|
|
|
602
605
|
}
|
|
603
606
|
}
|
|
604
607
|
|
|
605
|
-
|
|
608
|
+
var __defProp = Object.defineProperty;
|
|
609
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
610
|
+
var __publicField = (obj, key, value) => {
|
|
611
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
612
|
+
return value;
|
|
613
|
+
};
|
|
614
|
+
class ResponseStream extends EventEmitter {
|
|
615
|
+
constructor() {
|
|
616
|
+
super(...arguments);
|
|
617
|
+
__publicField(this, "buffer", "");
|
|
618
|
+
__publicField(this, "isRunning", false);
|
|
619
|
+
__publicField(this, "locked", false);
|
|
620
|
+
__publicField(this, "partSize", 2);
|
|
621
|
+
__publicField(this, "stopped", false);
|
|
622
|
+
__publicField(this, "waiting", []);
|
|
623
|
+
}
|
|
624
|
+
close() {
|
|
625
|
+
this.stopped = true;
|
|
626
|
+
}
|
|
627
|
+
emit(_, data) {
|
|
628
|
+
if (this.locked) {
|
|
629
|
+
this.waiting.push(data);
|
|
630
|
+
} else {
|
|
631
|
+
this.buffer += data;
|
|
632
|
+
}
|
|
633
|
+
this.run();
|
|
634
|
+
}
|
|
635
|
+
run() {
|
|
636
|
+
if (!this.isRunning) {
|
|
637
|
+
this.isRunning = true;
|
|
638
|
+
const interval = setInterval(() => {
|
|
639
|
+
if (this.stopped) {
|
|
640
|
+
super.emit("part", this.buffer + this.waiting.join(""));
|
|
641
|
+
clearInterval(interval);
|
|
642
|
+
} else {
|
|
643
|
+
this.locked = true;
|
|
644
|
+
const part = this.buffer.slice(0, this.partSize);
|
|
645
|
+
this.buffer = this.buffer.slice(this.partSize);
|
|
646
|
+
while (this.waiting.length > 0) {
|
|
647
|
+
const part2 = this.waiting.shift();
|
|
648
|
+
if (part2) {
|
|
649
|
+
this.buffer += part2;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
this.locked = false;
|
|
653
|
+
if (part) {
|
|
654
|
+
super.emit("part", part);
|
|
655
|
+
} else {
|
|
656
|
+
this.isRunning = false;
|
|
657
|
+
clearInterval(interval);
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
}, 5);
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
export { ChatController, ChatMessage, MultipleChoiceMessage, ResponseStream };
|
|
606
666
|
//# 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/Textarea.tsx","../src/components/chat/ChatController.tsx","../src/components/chat/messages/MultipleChoiceMessage.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 (\r\n mutation &&\r\n mutation.target instanceof HTMLElement &&\r\n mutation.target === el\r\n ) {\r\n if (\r\n isFullScrolled.current &&\r\n mutation.target.scrollTop !==\r\n mutation.target.scrollHeight - mutation.target.offsetHeight\r\n ) {\r\n // eslint-disable-next-line no-param-reassign\r\n mutation.target.scrollTo({\r\n top: mutation.target.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();\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 } 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\n\r\nlet maxId = 0;\r\n\r\nexport class ChatMessage {\r\n id: number;\r\n #message: ReactNode;\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(message: ReactNode, public messageType: TMessageType) {\r\n this.id = maxId++;\r\n this.#message = message;\r\n\r\n if (messageType === 'response') this.messageType = 'system';\r\n if (typeof message === 'string') this.#message = this.parseMessage(message);\r\n }\r\n\r\n get message() {\r\n return this.#message;\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 { IconButton, SimpleButton } from '@apia/components';\r\nimport { Box, Textarea } from '@apia/theme';\r\nimport useHandleFileUpload, {\r\n WrongFormatError,\r\n} from './files/useHandleFileUpload';\r\nimport { getLabel } from '@apia/util';\r\nimport { ChatMessage } from './messages/ChatMessage';\r\n\r\nexport const makeTextarea = (gptController: ChatController) => {\r\n const NewTextarea = ({\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: (text: string) => Promise<void>;\r\n preventAppendUserMessages?: boolean;\r\n }) => {\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const submit = useCallback(\r\n (text: string) => {\r\n if (preventAppendUserMessages !== true)\r\n gptController.messages.add(new ChatMessage(text, 'user'));\r\n\r\n gptController.history.add(text);\r\n\r\n onSubmit(text).finally(() => {\r\n setIsLoading(false);\r\n });\r\n },\r\n [onSubmit, preventAppendUserMessages],\r\n );\r\n\r\n const handleSubmit = useCallback(\r\n (ev: FormEvent<HTMLFormElement>) => {\r\n ev.preventDefault();\r\n //setIsLoading(true);\r\n const textarea = document.getElementById(\r\n `GPTMessage${gptController.id}`,\r\n ) as HTMLTextAreaElement;\r\n\r\n if (textarea.value) {\r\n setIsLoading(true);\r\n submit(textarea.value);\r\n }\r\n\r\n textarea.focus();\r\n textarea.value = '';\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${gptController.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__${gptController.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 return (\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${gptController.id}`}\r\n readOnly={actualIsLoading}\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 id={`gptUploadFile__${gptController.id}`}\r\n onChange={(ev) => {\r\n handleFileUpload(ev).catch((e) => {\r\n if (e instanceof WrongFormatError) {\r\n setIsLoading(false);\r\n gptController.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 }}\r\n />\r\n </Box>\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__${gptController.id}`,\r\n ) as HTMLElement\r\n ).click();\r\n }}\r\n size=\"Lg\"\r\n />\r\n <SimpleButton\r\n title={getLabel('btnAiPrevious').tooltip}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() => {\r\n const historyValue = gptController.history.previous();\r\n if (historyValue)\r\n (\r\n document.getElementById(\r\n `GPTMessage${gptController.id}`,\r\n ) as HTMLTextAreaElement\r\n ).value = historyValue;\r\n }}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiPrevious').text}\r\n </SimpleButton>\r\n <SimpleButton\r\n title={getLabel('btnAiNext').tooltip}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() => {\r\n const historyValue = gptController.history.next();\r\n (\r\n document.getElementById(\r\n `GPTMessage${gptController.id}`,\r\n ) as HTMLTextAreaElement\r\n ).value = historyValue ?? '';\r\n }}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiNext').text}\r\n </SimpleButton>\r\n {!hideDeleteButton && (\r\n <>\r\n <SimpleButton\r\n title={getLabel('btnAiDelete').tooltip}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() =>\r\n ((\r\n document.getElementById(\r\n `GPTMessage${gptController.id}`,\r\n ) as HTMLInputElement\r\n ).value = '')\r\n }\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiDelete').text}\r\n </SimpleButton>\r\n <SimpleButton\r\n title={getLabel('btnAiDeleteMessages').tooltip}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() => gptController.messages.clear()}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiDeleteMessages').text}\r\n </SimpleButton>\r\n </>\r\n )}\r\n <SimpleButton\r\n title={getLabel('btnAiSend').tooltip}\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 );\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 { EventEmitter } from '@apia/util';\r\nimport { useEffect, useState } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { AutoscrollContainer } from './AutoscrollContainer';\r\nimport { makeTextarea } from './Textarea';\r\nimport { ChatMessage } from './messages/ChatMessage';\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\r\nexport class ChatController extends EventEmitter<{\r\n listChange: ChatMessage[];\r\n messageSubmited?: string;\r\n}> {\r\n #messages: ChatMessage[] = [];\r\n\r\n constructor(\r\n public id: string,\r\n welcomeMessage?: string,\r\n ) {\r\n super();\r\n if (welcomeMessage)\r\n this.#messages.push(new ChatMessage(welcomeMessage, 'system'));\r\n }\r\n\r\n components = {\r\n MessageHistory: () => {\r\n const messages = this.history.useList();\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.chat')}\r\n className=\"history\"\r\n >\r\n <AutoscrollContainer>\r\n {messages.map((current) => (\r\n <Box\r\n as=\"pre\"\r\n className={`history__message ${current.messageType}`}\r\n key={current.id}\r\n {...(typeof current.message === 'string'\r\n ? { dangerouslySetInnerHTML: { __html: current.message } }\r\n : { children: current.message })}\r\n />\r\n ))}\r\n </AutoscrollContainer>\r\n </Box>\r\n );\r\n },\r\n Textarea: makeTextarea(this),\r\n };\r\n\r\n #promptsHistory: string[] = [];\r\n #currentHistoryIndex = -1;\r\n\r\n history = {\r\n add: (prompt: string) => {\r\n this.#currentHistoryIndex = -1;\r\n\r\n if (prompt === this.#promptsHistory[this.#promptsHistory.length]) {\r\n return;\r\n }\r\n\r\n this.#promptsHistory = [\r\n prompt,\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 if (this.#promptsHistory[this.#currentHistoryIndex - 1])\r\n return this.#promptsHistory[--this.#currentHistoryIndex];\r\n else {\r\n this.#currentHistoryIndex = -1;\r\n return '';\r\n }\r\n },\r\n previous: () => {\r\n if (this.#promptsHistory[this.#currentHistoryIndex + 1]) {\r\n return this.#promptsHistory[++this.#currentHistoryIndex];\r\n }\r\n },\r\n useList: () => {\r\n const [messages, setMessages] = useState<ChatMessage[]>(this.#messages);\r\n\r\n useEffect(() => {\r\n return this.on('listChange', (messages) => setMessages(messages));\r\n }, []);\r\n\r\n return messages;\r\n },\r\n };\r\n\r\n messages = {\r\n add: (message: ChatMessage) => {\r\n this.#messages.push(message);\r\n this.emit('listChange', [...this.#messages]);\r\n },\r\n clear: () => {\r\n this.#messages = [];\r\n this.emit('listChange', []);\r\n },\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 private question: string,\r\n private options: TMultipleChoiceMessageOption<OptionProps>[],\r\n private Renderer?: (props: {\r\n item: TMultipleChoiceMessageOption<OptionProps>;\r\n }) => ReactElement,\r\n ) {\r\n super('', 'multipleChoice');\r\n }\r\n\r\n get message() {\r\n const Renderer = this.Renderer;\r\n\r\n if (Renderer) {\r\n return (\r\n <Box className=\"multipleChoiceMessage customRenderer\">\r\n <Paragraph>{this.question}</Paragraph>\r\n {this.options.map((item) => (\r\n <Renderer item={item} key={item.url} />\r\n ))}\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box className=\"multipleChoiceMessage\">\r\n <Paragraph>{this.question}</Paragraph>\r\n {!Renderer && (\r\n <Box as=\"ul\">\r\n {this.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 )}\r\n </Box>\r\n );\r\n }\r\n}\r\n"],"names":["progress","__publicField","__privateAdd","__privateSet","__privateGet","messages"],"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/Textarea.tsx","../src/components/chat/ChatController.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx","../src/stream/ResponseStream.ts"],"sourcesContent":["import { getVariant } from '@apia/theme';\nimport { ReactNode, useCallback, useRef } from 'react';\nimport { Box } from '@apia/theme';\n\nexport const AutoscrollContainer = ({ children }: { children: ReactNode }) => {\n const observer = useRef<MutationObserver | null>(null);\n const unsuscribe = useRef<(() => void) | null>(null);\n const isFullScrolled = useRef(false);\n const hasInited = useRef(false);\n\n const ref = useCallback((el: HTMLElement) => {\n if (!el) return;\n\n if (!hasInited.current) {\n hasInited.current = true;\n el.scrollTo({\n top: el.getBoundingClientRect().height,\n behavior: 'auto',\n });\n isFullScrolled.current = true;\n }\n\n observer.current?.disconnect();\n unsuscribe.current?.();\n\n observer.current = new MutationObserver(([mutation]) => {\n if (\n mutation &&\n mutation.target instanceof HTMLElement &&\n mutation.target === el\n ) {\n if (\n isFullScrolled.current &&\n mutation.target.scrollTop !==\n mutation.target.scrollHeight - mutation.target.offsetHeight\n ) {\n // eslint-disable-next-line no-param-reassign\n mutation.target.scrollTo({\n top: mutation.target.scrollHeight,\n behavior: 'smooth',\n });\n }\n }\n });\n observer.current.observe(el, { childList: true, subtree: true });\n\n const handleScroll = (ev: Event) => {\n if (ev.target === el && el instanceof HTMLElement) {\n setTimeout(() => {\n isFullScrolled.current =\n Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;\n }, 100);\n }\n };\n el.addEventListener('scroll', handleScroll);\n unsuscribe.current = () => {\n el.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n return (\n <Box\n {...getVariant('layout.common.components.autoscrollContainer')}\n className=\"autoscrollContainer\"\n ref={ref}\n >\n {children}\n </Box>\n );\n};\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();\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 } 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';\nimport { TMessageType } from '../ChatController';\n\nlet maxId = 0;\n\nexport class ChatMessage {\n id: number;\n #message: ReactNode;\n\n parseMessage(message: string) {\n let result = message;\n\n result = result.replaceAll('[strong]', '<strong>');\n result = result.replaceAll('[/strong]', '</strong>');\n\n return result;\n }\n\n constructor(message: ReactNode, public messageType: TMessageType) {\n this.id = maxId++;\n this.#message = message;\n\n if (messageType === 'response') this.messageType = 'system';\n if (typeof message === 'string') this.#message = this.parseMessage(message);\n }\n\n get message() {\n return this.#message;\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { FormEvent, KeyboardEvent, useCallback, useState } from 'react';\nimport { ChatController } from './ChatController';\nimport { IconButton, SimpleButton } from '@apia/components';\nimport { Box, Textarea } from '@apia/theme';\nimport useHandleFileUpload, {\n WrongFormatError,\n} from './files/useHandleFileUpload';\nimport { getLabel } from '@apia/util';\nimport { ChatMessage } from './messages/ChatMessage';\n\nexport const makeTextarea = (gptController: ChatController) => {\n const NewTextarea = ({\n hideDeleteButton,\n isLoading: outIsLoading,\n onSubmit,\n preventAppendUserMessages,\n }: {\n hideDeleteButton?: boolean;\n isLoading?: boolean;\n onSubmit: (text: string) => Promise<void>;\n preventAppendUserMessages?: boolean;\n }) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const submit = useCallback(\n (text: string) => {\n if (preventAppendUserMessages !== true)\n gptController.messages.add(new ChatMessage(text, 'user'));\n\n gptController.history.add(text);\n\n onSubmit(text).finally(() => {\n setIsLoading(false);\n });\n },\n [onSubmit, preventAppendUserMessages],\n );\n\n const handleSubmit = useCallback(\n (ev: FormEvent<HTMLFormElement>) => {\n ev.preventDefault();\n //setIsLoading(true);\n const textarea = document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement;\n\n if (textarea.value) {\n setIsLoading(true);\n submit(textarea.value);\n }\n\n textarea.focus();\n textarea.value = '';\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${gptController.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__${gptController.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 return (\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${gptController.id}`}\n readOnly={actualIsLoading}\n />\n )}\n\n <Box className=\"gpt__buttonsContainer\">\n <Box sx={{ display: 'none' }}>\n <input\n type=\"file\"\n className=\"gptUploadFile\"\n id={`gptUploadFile__${gptController.id}`}\n onChange={(ev) => {\n handleFileUpload(ev).catch((e) => {\n if (e instanceof WrongFormatError) {\n setIsLoading(false);\n gptController.messages.add(\n new ChatMessage(\n getLabel('msgAiFileExtensionError').text,\n 'error',\n ),\n );\n } else {\n throw e;\n }\n });\n }}\n />\n </Box>\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__${gptController.id}`,\n ) as HTMLElement\n ).click();\n }}\n size=\"Lg\"\n />\n <SimpleButton\n title={getLabel('btnAiPrevious').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n const historyValue = gptController.history.previous();\n if (historyValue)\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = historyValue;\n }}\n size=\"sm\"\n >\n {getLabel('btnAiPrevious').text}\n </SimpleButton>\n <SimpleButton\n title={getLabel('btnAiNext').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n const historyValue = gptController.history.next();\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = historyValue ?? '';\n }}\n size=\"sm\"\n >\n {getLabel('btnAiNext').text}\n </SimpleButton>\n {!hideDeleteButton && (\n <>\n <SimpleButton\n title={getLabel('btnAiDelete').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() =>\n ((\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLInputElement\n ).value = '')\n }\n size=\"sm\"\n >\n {getLabel('btnAiDelete').text}\n </SimpleButton>\n <SimpleButton\n title={getLabel('btnAiDeleteMessages').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() => gptController.messages.clear()}\n size=\"sm\"\n >\n {getLabel('btnAiDeleteMessages').text}\n </SimpleButton>\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 );\n };\n\n NewTextarea.displayName = '';\n\n return NewTextarea;\n};\n","/* eslint-disable no-param-reassign */\nimport { getVariant } from '@apia/theme';\nimport { EventEmitter } from '@apia/util';\nimport { useEffect, useState } from 'react';\nimport { Box } from '@apia/theme';\nimport { AutoscrollContainer } from './AutoscrollContainer';\nimport { makeTextarea } from './Textarea';\nimport { ChatMessage } from './messages/ChatMessage';\n\nexport type TMessageType =\n | 'user'\n | 'system'\n | 'warning'\n | 'error'\n | 'information'\n | 'response'\n | 'multipleChoice';\n\nexport class ChatController extends EventEmitter<{\n listChange: ChatMessage[];\n messageSubmited?: string;\n}> {\n #messages: ChatMessage[] = [];\n\n constructor(\n public id: string,\n welcomeMessage?: string,\n ) {\n super();\n if (welcomeMessage)\n this.#messages.splice(0, 0, new ChatMessage(welcomeMessage, 'system'));\n }\n\n components = {\n MessageHistory: () => {\n const messages = this.history.useList();\n\n return (\n <Box\n {...getVariant('layout.common.components.chat')}\n className=\"history\"\n >\n <AutoscrollContainer>\n {messages.map((current) => (\n <Box\n as=\"pre\"\n className={`history__message ${current.messageType}`}\n key={current.id}\n {...(typeof current.message === 'string'\n ? { dangerouslySetInnerHTML: { __html: current.message } }\n : { children: current.message })}\n />\n ))}\n </AutoscrollContainer>\n </Box>\n );\n },\n Textarea: makeTextarea(this),\n };\n\n #promptsHistory: string[] = [];\n #currentHistoryIndex = -1;\n\n history = {\n add: (prompt: string) => {\n this.#currentHistoryIndex = -1;\n\n if (prompt === this.#promptsHistory[this.#promptsHistory.length]) {\n return;\n }\n\n this.#promptsHistory = [\n prompt,\n ...this.#promptsHistory.slice(\n Math.max(0, this.#promptsHistory.length - 10),\n ),\n ];\n },\n next: () => {\n if (this.#promptsHistory[this.#currentHistoryIndex - 1])\n return this.#promptsHistory[--this.#currentHistoryIndex];\n else {\n this.#currentHistoryIndex = -1;\n return '';\n }\n },\n previous: () => {\n if (this.#promptsHistory[this.#currentHistoryIndex + 1]) {\n return this.#promptsHistory[++this.#currentHistoryIndex];\n }\n },\n useList: () => {\n const [messages, setMessages] = useState<ChatMessage[]>(this.#messages);\n\n useEffect(() => {\n return this.on('listChange', (messages) => setMessages(messages));\n }, []);\n\n return messages;\n },\n };\n\n messages = {\n add: (message: ChatMessage, idx?: number) => {\n if (idx !== undefined && idx !== null)\n this.#messages.splice(idx, 0, message);\n else this.#messages.push(message);\n this.emit('listChange', [...this.#messages]);\n },\n clear: () => {\n this.#messages = [];\n this.emit('listChange', []);\n },\n };\n}\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 private question: string,\n private options: TMultipleChoiceMessageOption<OptionProps>[],\n private Renderer?: (props: {\n item: TMultipleChoiceMessageOption<OptionProps>;\n }) => ReactElement,\n ) {\n super('', 'multipleChoice');\n }\n\n get message() {\n const Renderer = this.Renderer;\n\n if (Renderer) {\n return (\n <Box className=\"multipleChoiceMessage customRenderer\">\n <Paragraph>{this.question}</Paragraph>\n {this.options.map((item) => (\n <Renderer item={item} key={item.url} />\n ))}\n </Box>\n );\n }\n\n return (\n <Box className=\"multipleChoiceMessage\">\n <Paragraph>{this.question}</Paragraph>\n {!Renderer && (\n <Box as=\"ul\">\n {this.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 )}\n </Box>\n );\n }\n}\n","import { EventEmitter } from '@apia/util';\n\nexport class ResponseStream extends EventEmitter<{ part: string }> {\n private buffer: string = '';\n private isRunning = false;\n private locked = false;\n private partSize = 2;\n private stopped = false;\n private waiting: string[] = [];\n\n public close() {\n this.stopped = true;\n }\n\n emit<K extends 'part'>(_: K, data: { part: string }[K]): void {\n if (this.locked) {\n this.waiting.push(data);\n } else {\n this.buffer += data;\n }\n this.run();\n }\n\n run() {\n if (!this.isRunning) {\n this.isRunning = true;\n const interval = setInterval(() => {\n if (this.stopped) {\n super.emit('part', this.buffer + this.waiting.join(''));\n clearInterval(interval);\n } else {\n this.locked = true;\n const part = this.buffer.slice(0, this.partSize);\n this.buffer = this.buffer.slice(this.partSize);\n while (this.waiting.length > 0) {\n const part = this.waiting.shift();\n if (part) {\n this.buffer += part;\n }\n }\n this.locked = false;\n if (part) {\n super.emit('part', part);\n } else {\n this.isRunning = false;\n clearInterval(interval);\n }\n }\n }, 5);\n }\n }\n}\n"],"names":["progress","__publicField","__privateAdd","__privateSet","__privateGet","messages","part"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apia/ai",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.12",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"author": "Alexis Leite <alexisleite@live.com>",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,9 +13,9 @@
|
|
|
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/components": "^3.0.
|
|
17
|
-
"@apia/theme": "^3.0.
|
|
18
|
-
"@apia/util": "^3.0.
|
|
16
|
+
"@apia/components": "^3.0.12",
|
|
17
|
+
"@apia/theme": "^3.0.12",
|
|
18
|
+
"@apia/util": "^3.0.12"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/react": "^18.2.43",
|
|
@@ -34,5 +34,5 @@
|
|
|
34
34
|
"access": "public",
|
|
35
35
|
"registry": "https://registry.npmjs.org/"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "85f3ff522f3d377b5c694d3111319e12c6e3b10e"
|
|
38
38
|
}
|