@apia/ai 4.0.5 → 4.0.7

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.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/stream/ResponseStream.ts","../src/routines/RoutinesGeneration.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('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';\nimport { TMessageType } from '../ChatController';\nimport { AIMessageAttachments } from './aiMessage/AIMessageAttachments';\nimport { Box } from '@apia/theme';\nimport { makeObservable, observable } from 'mobx';\n\nlet maxId = 0;\n\nexport class ChatMessage {\n id: number;\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(\n public message: ReactNode = '',\n public messageType: TMessageType = 'user',\n public attachments: AIMessageAttachments[] = [],\n ) {\n this.id = maxId++;\n if (messageType === 'response') this.messageType = 'system';\n if (typeof message === 'string') this.message = this.parseMessage(message);\n\n makeObservable(this, {\n attachments: observable,\n message: observable,\n messageType: observable,\n });\n }\n\n copy = () =>\n new ChatMessage(this.message, this.messageType, this.attachments);\n\n Component = () => {\n return (\n <Box\n as=\"pre\"\n className={`history__message ${this.messageType}`}\n key={this.id}\n >\n <Box\n className=\"text_wrapper\"\n {...(typeof this.message === 'string'\n ? { dangerouslySetInnerHTML: { __html: this.message } }\n : { children: this.message })}\n />\n <Box className=\"additionalContent_wrapper\">\n {this.attachments.map((x) => (\n <x.Component key={x.id} />\n ))}\n </Box>\n </Box>\n );\n };\n}\n","import { Box } from '@apia/theme';\nimport { Reactive } from './types';\nimport { ReactNode } from 'react';\n\nexport class AIContent implements Reactive {\n content: ReactNode;\n\n constructor(content?: ReactNode) {\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';\n\n// CONSTANTS\nexport const AIFileContentAllowedExtensions = {\n svg: 'svg',\n png: 'png',\n jpg: 'jpg',\n jpeg: 'jpeg',\n txt: 'txt',\n doc: 'doc',\n pdf: 'pdf',\n docx: 'docx',\n csv: 'csv',\n xlsx: 'xlsx',\n xls: 'xls',\n mp3: 'mp3',\n wav: 'wav',\n} as const;\n\n// TYPES\nexport type AIFileContentAllowedExtension =\n keyof typeof AIFileContentAllowedExtensions;\n\nexport type TAttachmentErrorCallback = 'fileExtension' | 'blobGeneration';\n\n//ENUMS\nexport enum FileType {\n DOCUMENT = 'DOCUMENT',\n IMAGE = 'IMAGE',\n AUDIO = 'AUDIO',\n SHEET = 'SHEET',\n}\n\nexport enum AIMessageRole {\n USER = 'USER',\n SYSTEM = 'SYSTEM',\n}\n\n// INTERFACES\nexport interface Reactive {\n Component: FC<any>;\n}\n","import { Box } from '@apia/theme';\nimport { AIContent } from './AIContent';\nimport {\n AIFileContentAllowedExtension,\n AIFileContentAllowedExtensions,\n FileType,\n Reactive,\n TAttachmentErrorCallback,\n} from './types';\nimport { FileIcon } from '@apia/icons';\n\nexport class AIFileContent extends AIContent implements Reactive {\n type: FileType;\n fileUrl: string;\n fileName: string;\n extension: AIFileContentAllowedExtension;\n private __file: File | undefined;\n private __error?: Partial<Record<TAttachmentErrorCallback, () => void>>;\n\n constructor(\n fileUrl: string,\n fileName: string,\n f?: File,\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>,\n ) {\n const extension = AIFileContent.getExtensionFromFileName(fileName);\n super();\n this.__error = error;\n if (!AIFileContent.isValidExtension(extension))\n this.__throwError(\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\n this.__error?.fileExtension,\n );\n this.fileUrl = fileUrl;\n this.extension = extension;\n this.type = this.inferExtension(this.extension) as FileType;\n this.fileName = fileName;\n this.__file = f;\n this.content = this.inferContent();\n }\n\n // PUBLIC METHODS\n\n public get file() {\n if (!this.__file) throw new Error('File is undefined');\n return this.__file;\n }\n\n public inferContent = () => {\n return `You must collect information contained in this ${this.type} as help to build your tool choice.`;\n };\n\n public inferExtension = (extension: AIFileContentAllowedExtension) => {\n switch (extension) {\n case AIFileContentAllowedExtensions.jpg:\n case AIFileContentAllowedExtensions.jpeg:\n case AIFileContentAllowedExtensions.png:\n case AIFileContentAllowedExtensions.svg:\n return FileType.IMAGE;\n case AIFileContentAllowedExtensions.txt:\n case AIFileContentAllowedExtensions.doc:\n case AIFileContentAllowedExtensions.pdf:\n case AIFileContentAllowedExtensions.docx:\n return FileType.DOCUMENT;\n case AIFileContentAllowedExtensions.csv:\n case AIFileContentAllowedExtensions.xlsx:\n case AIFileContentAllowedExtensions.xls:\n return FileType.SHEET;\n case AIFileContentAllowedExtensions.mp3:\n case AIFileContentAllowedExtensions.wav:\n return FileType.AUDIO;\n default:\n this.__throwError(\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\n this.__error?.fileExtension,\n );\n }\n };\n\n // STATIC METHODS\n\n static isValidExtension = (\n extension: string,\n ): extension is AIFileContentAllowedExtension => {\n return (\n Object.values(\n AIFileContentAllowedExtensions,\n ) as AIFileContentAllowedExtension[]\n ).includes(extension as AIFileContentAllowedExtension);\n };\n\n static blobToBase64 = async (blob: Blob) => {\n return await ((blob: Blob): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onloadend = () => {\n const base64String = reader.result as string;\n resolve(base64String);\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n }))(blob);\n };\n\n static fromFile = async (\n f: File,\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>,\n ): Promise<AIFileContent> => {\n const fileUrl = await ((f: File) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(f);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject();\n }))(f);\n return new AIFileContent(fileUrl, f.name, f, error);\n };\n\n static getExtensionFromFileName(fileName: string) {\n return fileName.split('.', 2).pop() as AIFileContentAllowedExtension;\n }\n\n // PRIVATE METHODS\n\n private static __getExtensionErrorMessage(extension: string) {\n return `extension \"${extension}\" is not included into valid types:\\n${Object.keys(AIFileContentAllowedExtensions)}`;\n }\n\n private __throwError(e: Error, callback?: () => void) {\n callback && callback();\n throw e;\n }\n\n // COMPONENT METHODS\n\n Component = () => (\n <Box variant={'layout.common.components.aiMessage.fileBox'}>\n {FileType.IMAGE === this.type ? (\n <img src={URL.createObjectURL(this.file)} alt={this.fileName}></img>\n ) : (\n <FileIcon iconSize=\"lg\" docName={this.fileName} />\n )}\n <Box\n as={'p'}\n variant={'layout.common.components.aiMessage.fileName'}\n title={this.fileName}\n >\n {this.fileName}\n </Box>\n </Box>\n );\n}\n","import { AIMessageRole, Reactive } from './types';\nimport { AIContent } from './AIContent';\nimport { IconButton } from '@apia/components';\nimport { Box, getVariant } from '@apia/theme';\nimport { uniqueId } from '@apia/notifications';\nimport { getLabel } from '@apia/util';\nimport { Collector } from '@apia/validations';\n\nexport class AIMessageAttachments implements Reactive {\n role: AIMessageRole;\n content: AIContent;\n id = uniqueId();\n\n constructor(\n role: AIMessageRole,\n content: AIContent,\n private close?: () => void,\n ) {\n this.role = role;\n this.content = content;\n }\n\n addDescription = async () => {\n const collector = new Collector();\n const collected = await collector\n .add(\n new collector.fields.textarea(\n 'addCommentTextArea',\n 'TODO The description will help the assistant to understand the file content',\n ),\n )\n .show<{ addCommentTextArea: string }>({ title: 'TODO Add image Comment' })\n .catch((e) => {\n throw e;\n });\n collected?.addCommentTextArea &&\n (this.content.content = collected.addCommentTextArea);\n };\n\n Component = (props: {\n closeButton?: boolean;\n canAddDescription?: boolean;\n }) => (\n <Box {...getVariant('layout.common.components.aiMessage')}>\n {props.closeButton ? (\n <IconButton\n className=\"closeButton\"\n size=\"Md\"\n icon=\"Close\"\n onClick={this.close}\n title={getLabel('lblDeleteItem').title}\n ></IconButton>\n ) : (\n <></>\n )}\n {props?.canAddDescription ? (\n <IconButton\n className=\"descriptionButton\"\n size=\"Md\"\n icon=\"Magic\"\n onClick={this.addDescription}\n ></IconButton>\n ) : (\n <></>\n )}\n <this.content.Component />\n </Box>\n );\n}\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 { IconButton, SimpleButton } from '@apia/components';\nimport { Box, Textarea } 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\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 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 <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 <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 {!hideDeleteButton && (\n <>\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 <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 <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 */\nimport { getVariant } from '@apia/theme';\nimport { Box } from '@apia/theme';\nimport { AutoscrollContainer } from './AutoscrollContainer';\nimport { makeTextarea } from './Textarea';\nimport { ChatMessage } from './messages/ChatMessage';\nimport { AIMessageAttachments } from './messages/aiMessage/AIMessageAttachments';\nimport { makeObservable, observable } from 'mobx';\nimport { observer } from 'mobx-react-lite';\nimport { AudioRecorder } from '@apia/util';\nimport { AIMessageRole } from './messages/aiMessage/types';\nimport { AIFileContent } from './messages/aiMessage/AIFileContent';\n\nexport type TMessageType =\n | 'user'\n | 'system'\n | 'warning'\n | 'error'\n | 'information'\n | 'response'\n | 'multipleChoice'\n | 'customMessage';\n\ntype ChatControllerState = {\n current: ChatMessage;\n messages: ChatMessage[];\n};\n\nexport class ChatController {\n state: ChatControllerState = {\n current: new ChatMessage(),\n messages: [],\n };\n\n constructor(\n public id: string,\n welcomeMessage?: string,\n ) {\n if (welcomeMessage) {\n this.state.messages.splice(\n 0,\n 0,\n new ChatMessage(welcomeMessage, 'system'),\n );\n }\n\n makeObservable(this, { state: observable });\n }\n\n components = {\n MessageHistory: observer(() => {\n return (\n <Box\n {...getVariant('layout.common.components.chat')}\n className=\"history\"\n >\n <AutoscrollContainer>\n {this.state.messages.map((current) => (\n <current.Component key={current.id} />\n ))}\n </AutoscrollContainer>\n </Box>\n );\n }),\n Textarea: makeTextarea(this),\n };\n\n #promptsHistory: ChatMessage[] = [];\n currentHistoryIndex = -1;\n\n #internalAudioRecorder = new AudioRecorder();\n\n audioRecorder = {\n start: () =>\n this.#internalAudioRecorder.start().then(async (blob: Blob) => {\n const m: AIMessageAttachments = new AIMessageAttachments(\n AIMessageRole.USER,\n new AIFileContent(\n await AIFileContent.blobToBase64(blob),\n `userRecord_${this.audioRecorder.record++}.wav`,\n ),\n () => this.attachments.drop(m),\n );\n this.attachments.add(m);\n }),\n stop: async () => {\n this.#internalAudioRecorder.stop();\n },\n record: 0,\n state: this.#internalAudioRecorder.state,\n };\n\n history = {\n add: (message: ChatMessage) => {\n this.currentHistoryIndex = -1;\n\n if (message === this.#promptsHistory[this.#promptsHistory.length]) {\n return;\n }\n\n this.#promptsHistory = [\n message,\n ...this.#promptsHistory.slice(\n Math.max(0, this.#promptsHistory.length - 10),\n ),\n ];\n },\n next: () => {\n let message = new ChatMessage();\n if (this.#promptsHistory[this.currentHistoryIndex - 1])\n message = this.#promptsHistory[--this.currentHistoryIndex].copy();\n else {\n this.currentHistoryIndex = -1;\n }\n this.history.updateState(message);\n },\n previous: () => {\n if (this.#promptsHistory[this.currentHistoryIndex + 1]) {\n this.history.updateState(\n this.#promptsHistory[++this.currentHistoryIndex].copy(),\n );\n }\n },\n updateState: (message?: ChatMessage) => {\n if (message) this.state.current = message;\n else this.state.current = new ChatMessage();\n },\n size: () => this.state.messages.length,\n };\n\n messages = {\n add: (message: ChatMessage, idx?: number) => {\n if (idx !== undefined && idx !== null) {\n this.state.messages.splice(idx, 0, message);\n } else {\n this.state.messages.push(message);\n }\n },\n clear: () => {\n this.state.messages = [];\n },\n };\n\n attachments = {\n add: (...aiMessage: AIMessageAttachments[]) => {\n this.state.current.attachments.push(...aiMessage);\n },\n dropAll: () => void (this.state.current.attachments = []),\n drop: (el: AIMessageAttachments) => {\n this.state.current.attachments = this.state.current.attachments.filter(\n (c) => c !== el,\n );\n if (!this.state.current.message && this.attachments.size() < 1)\n this.currentHistoryIndex = -1;\n },\n getComponents: () =>\n this.state.current.attachments.map((x) => (\n <x.Component closeButton canAddDescription key={x.id} />\n )),\n get: () => this.state.current.attachments,\n size: () => this.state.current.attachments.length,\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 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 { 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 maxCompletionTime = 2; // s\n private minPartSize = 2;\n private partSize = 2;\n private timing = 5; // ms\n private waiting: string[] = [];\n\n public close() {}\n\n private calculatePartSize() {\n const totalSize =\n this.buffer.length +\n this.waiting.reduce<number>((a, b) => a + b.length, 0);\n\n this.partSize = Math.max(\n this.minPartSize,\n (totalSize * this.timing) / (this.maxCompletionTime * 1000),\n );\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.calculatePartSize();\n this.run();\n }\n\n run() {\n if (!this.isRunning) {\n this.isRunning = true;\n const interval = setInterval(() => {\n this.locked = true;\n\n const choosedSize = Math.min(this.buffer.length, this.partSize);\n\n const part = this.buffer.slice(0, choosedSize);\n this.buffer = this.buffer.slice(choosedSize);\n\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 }, this.timing);\n }\n }\n}\n","import axios from 'axios';\nimport { AudioRecorder } from '@apia/util';\nimport { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';\nimport { ResponseStream } from '@apia/ai';\nimport { action, makeObservable, observable } from 'mobx';\n\ntype RoutinesGenerationState = {\n isLoading: boolean;\n progress: number;\n};\n\ntype TPollProgress = {\n message: string;\n progress: number;\n debug: string;\n streamPart?: string;\n};\n\ntype TPollRoutineResult = {\n status: string;\n payload: unknown | TPollProgress;\n};\n\nexport type TGenerateFromImage = {\n base64: string;\n description: string;\n};\n\nexport type TRoutineCompletion = Partial<{\n images: TGenerateFromImage[];\n parameters: Record<string, string>;\n stream: ResponseStream;\n}> & {\n routineName: string;\n};\n\nfunction isPollProgress(\n payload: unknown | TPollProgress,\n): payload is TPollProgress {\n return (payload as TPollProgress)?.progress !== undefined;\n}\n\nexport class RoutinesGeneration {\n public audioRecorder = new AudioRecorder();\n private routineId: string = '';\n public state: RoutinesGenerationState = {\n isLoading: false,\n progress: 0,\n };\n\n public constructor() {\n makeObservable(this, {\n completion: action,\n state: observable,\n stop: action,\n transcribeAudio: action,\n });\n }\n\n private checkCanGenerate() {\n if (this.state.isLoading) {\n throw new Error('Cannot queue two simultaneous generations');\n }\n\n this.state.isLoading = true;\n }\n\n private async pollRoutine<T>(stream?: ResponseStream) {\n while (this.state.isLoading) {\n const pollResult = await this.poll(this.routineId);\n if (isPollProgress(pollResult.payload)) {\n try {\n const res = JSON.parse(pollResult.payload.debug) as string[];\n if (res.length > 0) {\n res.forEach((c) => {\n console.log(JSON.parse(c));\n });\n }\n\n if (pollResult.payload.streamPart && stream) {\n stream.emit('part', pollResult.payload.streamPart);\n }\n this.state.progress = pollResult.payload.progress;\n } catch (e) {\n console.error(e);\n }\n } else if (pollResult.status === 'FINISHED') {\n this.resetLoading();\n return pollResult.payload as T;\n } else {\n throw new Error('Wrong poll response');\n }\n }\n\n return null;\n }\n\n private async executeRoutine<T>(\n routineName: string,\n prompts: Record<string, string>,\n images: TGenerateFromImage[],\n stream?: ResponseStream,\n ): Promise<T | null> {\n this.checkCanGenerate();\n\n try {\n const routineStartResult = await ApiaApi.post<{\n orchestrator: { routineId: string };\n }>(\n makeApiaUrl({\n action: 'routineStart',\n routine: routineName,\n }),\n {\n postData: {\n images: JSON.stringify(images),\n ...prompts,\n },\n stringifyOptions: {\n arrayFormat: 'repeat',\n },\n postDataTreatement: 'stringify',\n },\n );\n\n if (routineStartResult?.data?.orchestrator?.routineId !== undefined) {\n this.routineId = routineStartResult?.data?.orchestrator?.routineId;\n\n return this.pollRoutine<T>(stream);\n } else {\n throw new Error('Cannot get routine id');\n }\n } catch (e) {\n this.resetLoading();\n throw e;\n }\n }\n\n private async poll(routineId: string): Promise<TPollRoutineResult> {\n const result = await ApiaApi.post<{ orchestrator: string }>(\n makeApiaUrl({\n action: 'routinePoll',\n routineId,\n }),\n );\n\n if (result?.data?.orchestrator) {\n return JSON.parse(result.data.orchestrator) as TPollRoutineResult;\n } else {\n throw new Error('Poll failed');\n }\n }\n\n private resetLoading() {\n this.state.isLoading = false;\n this.state.progress = 0;\n }\n\n public async completion<T>(params: TRoutineCompletion) {\n return this.executeRoutine<T>(\n params.routineName,\n params.parameters ?? {},\n params.images ?? [],\n params.stream,\n );\n }\n\n public stop() {\n this.resetLoading();\n ApiaApi.get<{\n orchestrator: { routineId: string };\n }>(\n makeApiaUrl({\n action: 'routineStop',\n routineId: this.routineId,\n }),\n );\n }\n\n public async transcribeAudio(audio: Blob) {\n const arrayBuffer = await audio.arrayBuffer();\n\n const url = makeApiaUrl({\n action: 'routineStart',\n routine: 'transcription/Transcribe',\n });\n\n const response = await axios.post(url, arrayBuffer, {\n headers: {\n 'Content-Type': 'application/octet-stream',\n },\n });\n\n if (response.data) {\n const result = await parseSuccessfulResponse<{\n orchestrator: { routineId: string };\n }>(response, url);\n\n this.state.isLoading = true;\n if (result?.orchestrator?.routineId) {\n this.routineId = result?.orchestrator?.routineId;\n return await this.pollRoutine<{\n transcription: string;\n }>();\n }\n }\n\n throw new Error('Something went wrong while transcribing the audio');\n }\n}\n"],"names":["progress","__publicField","FileType","AIMessageRole","blob","f","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/stream/ResponseStream.ts","../src/routines/RoutinesGeneration.ts"],"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('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 { AIMessageAttachments } from './aiMessage/AIMessageAttachments';\r\nimport { Box } from '@apia/theme';\r\nimport { makeObservable, observable } from 'mobx';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ChatMessage {\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: AIMessageAttachments[] = [],\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 });\r\n }\r\n\r\n copy = () =>\r\n new ChatMessage(this.message, this.messageType, this.attachments);\r\n\r\n Component = () => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history__message ${this.messageType}`}\r\n key={this.id}\r\n >\r\n <Box\r\n className=\"text_wrapper\"\r\n {...(typeof this.message === 'string'\r\n ? { dangerouslySetInnerHTML: { __html: this.message } }\r\n : { children: this.message })}\r\n />\r\n <Box className=\"additionalContent_wrapper\">\r\n {this.attachments.map((x) => (\r\n <x.Component key={x.id} />\r\n ))}\r\n </Box>\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\n\r\nexport class AIContent implements Reactive {\r\n content: ReactNode;\r\n\r\n constructor(content?: ReactNode) {\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","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\n\r\nexport class AIFileContent extends AIContent implements Reactive {\r\n type: FileType;\r\n fileUrl: string;\r\n fileName: string;\r\n extension: AIFileContentAllowedExtension;\r\n private __file: File | undefined;\r\n private __error?: Partial<Record<TAttachmentErrorCallback, () => void>>;\r\n\r\n constructor(\r\n fileUrl: string,\r\n fileName: string,\r\n f?: File,\r\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>,\r\n ) {\r\n const extension = AIFileContent.getExtensionFromFileName(fileName);\r\n super();\r\n this.__error = error;\r\n if (!AIFileContent.isValidExtension(extension))\r\n this.__throwError(\r\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\r\n this.__error?.fileExtension,\r\n );\r\n this.fileUrl = fileUrl;\r\n this.extension = extension;\r\n this.type = this.inferExtension(this.extension) as FileType;\r\n this.fileName = fileName;\r\n this.__file = f;\r\n this.content = this.inferContent();\r\n }\r\n\r\n // PUBLIC METHODS\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 f: File,\r\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>,\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 }))(f);\r\n return new AIFileContent(fileUrl, f.name, f, error);\r\n };\r\n\r\n static getExtensionFromFileName(fileName: string) {\r\n return fileName.split('.', 2).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 // COMPONENT METHODS\r\n\r\n Component = () => (\r\n <Box variant={'layout.common.components.aiMessage.fileBox'}>\r\n {FileType.IMAGE === this.type ? (\r\n <img src={URL.createObjectURL(this.file)} alt={this.fileName}></img>\r\n ) : (\r\n <FileIcon iconSize=\"lg\" docName={this.fileName} />\r\n )}\r\n <Box\r\n as={'p'}\r\n variant={'layout.common.components.aiMessage.fileName'}\r\n title={this.fileName}\r\n >\r\n {this.fileName}\r\n </Box>\r\n </Box>\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\n\r\nexport class AIMessageAttachments implements Reactive {\r\n role: AIMessageRole;\r\n content: AIContent;\r\n id = uniqueId();\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(\r\n new collector.fields.textarea(\r\n 'addCommentTextArea',\r\n 'TODO The description will help the assistant to understand the file content',\r\n ),\r\n )\r\n .show<{ addCommentTextArea: string }>({ title: 'TODO Add image Comment' })\r\n .catch((e) => {\r\n throw e;\r\n });\r\n collected?.addCommentTextArea &&\r\n (this.content.content = collected.addCommentTextArea);\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 { 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, 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\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 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 <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 <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 {!hideDeleteButton && (\r\n <>\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 <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 <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\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 await AIFileContent.blobToBase64(blob),\r\n `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].copy();\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].copy(),\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(...aiMessage);\r\n },\r\n dropAll: () => void (this.state.current.attachments = []),\r\n drop: (el: AIMessageAttachments) => {\r\n this.state.current.attachments = this.state.current.attachments.filter(\r\n (c) => c !== el,\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 <x.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 { 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 public close() {}\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 axios from 'axios';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';\r\nimport { ResponseStream } from '@apia/ai';\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\ntype 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 private async pollRoutine<T>(stream?: ResponseStream) {\r\n while (this.state.isLoading) {\r\n const pollResult = await this.poll(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 {\r\n throw new Error('Wrong poll response');\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private async executeRoutine<T>(\r\n routineName: string,\r\n prompts: 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 routineStartResult = 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 ...prompts,\r\n },\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n if (routineStartResult?.data?.orchestrator?.routineId !== undefined) {\r\n this.routineId = routineStartResult?.data?.orchestrator?.routineId;\r\n\r\n return this.pollRoutine<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 async poll(routineId: string): 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 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 arrayBuffer = await audio.arrayBuffer();\r\n\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, arrayBuffer, {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream',\r\n },\r\n });\r\n\r\n if (response.data) {\r\n const result = await parseSuccessfulResponse<{\r\n orchestrator: { routineId: string };\r\n }>(response, url);\r\n\r\n this.state.isLoading = true;\r\n if (result?.orchestrator?.routineId) {\r\n this.routineId = result?.orchestrator?.routineId;\r\n return await this.pollRoutine<{\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"],"names":["progress","__publicField","FileType","AIMessageRole","blob","f","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.5",
3
+ "version": "4.0.7",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -13,10 +13,10 @@
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.5",
17
- "@apia/components": "^4.0.5",
18
- "@apia/theme": "^4.0.5",
19
- "@apia/util": "^4.0.5",
16
+ "@apia/api": "^4.0.7",
17
+ "@apia/components": "^4.0.7",
18
+ "@apia/theme": "^4.0.7",
19
+ "@apia/util": "^4.0.7",
20
20
  "mobx": "^6.13.1",
21
21
  "mobx-react-lite": "^4.0.7"
22
22
  },
@@ -37,5 +37,5 @@
37
37
  "access": "public",
38
38
  "registry": "https://registry.npmjs.org/"
39
39
  },
40
- "gitHead": "b62546be97e5b7512dc0837a02fba0ca0d98109b"
40
+ "gitHead": "30961d8aff658498a41befa350cd91a4bb647177"
41
41
  }