@apia/ai 4.0.46 → 4.0.50
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 +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
package/dist/index.d.ts
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/semanticSearch/SearchController/objects/SemanticSearchReference/Component.tsx","../src/semanticSearch/SearchController/objects/SemanticSearchReference/index.tsx","../src/semanticSearch/SearchController/index.tsx","../src/chat/AutoscrollContainer.tsx","../src/chat/ChatController/components/ChatMessage.tsx","../src/chat/ChatController/components/FileAttachment.tsx","../src/chat/ChatController/components/Attachments.tsx","../src/chat/ChatController/components/MessageBlock.tsx","../src/chat/ChatController/components/MessageBlocks.tsx","../src/chat/ChatController/components/Message.tsx","../src/chat/ChatController/components/History.tsx","../src/chat/ChatController/util.ts","../src/chat/ChatController/components/TextArea.tsx","../src/chat/ChatController/CameraController.tsx","../src/chat/ChatController/ChatController.tsx","../src/chat/FloatingChatController.tsx","../src/chat/ChatController/StreamMessage.ts","../src/chat/ChatController/components/Ellipsis.tsx","../src/chat/ChatController/components/Header.tsx","../src/chat/ChatController/components/rate.tsx","../src/chat/ChatController/components/MessageBody.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx","../src/routines/RoutinesGeneration.ts","../src/routines/DashboardRoutinesGeneration.ts","../src/stream/ResponseStream.ts","../src/components/documents/ImageBinaryField/getImage.ts","../src/components/documents/UploadModal/ImageIcon.tsx","../src/components/documents/ImageBinaryField/getImageSrcString.ts","../src/components/documents/UploadModal/getImagesWithDescription.tsx","../src/semanticSearch/ViewController/types.ts","../src/stream/StreamServicePoller.ts"],"sourcesContent":["import { Box } from '@apia/theme';\r\nimport { SemanticSearchReference } from '.';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const Component = observer(\r\n (props: { instance: SemanticSearchReference }) => {\r\n return (\r\n <Box>\r\n <a href={props.instance.state.link}>{props.instance.state.title}</a>\r\n <Box>{props.instance.state.body}</Box>\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { Component } from './Component';\r\n\r\n/*\r\n * This class is used to store the state of a search result record.\r\n */\r\ntype TSearchResultState = {\r\n title: string;\r\n body: string;\r\n link: string;\r\n};\r\n\r\nexport class SemanticSearchReference {\r\n state: TSearchResultState = { title: '', body: '', link: '' };\r\n\r\n public constructor(props: TSearchResultState) {\r\n this.state = props;\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n Component = () => (\r\n <>\r\n (<Component instance={this} />)\r\n </>\r\n );\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { SemanticSearchReference } from './objects/SemanticSearchReference';\r\nimport { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { FiltersStore } from '@apia/components';\r\n\r\n/**\r\n * @class SearchController:\r\n * - mobx Controller for the semantic search logic\r\n * - search for a term and get the results. This controller must be used\r\n * to maintain the state of the search string and of the results given a search string\r\n */\r\nclass SearchController {\r\n static instance = new SearchController();\r\n\r\n state: {\r\n queryString: string;\r\n results: SemanticSearchReference[];\r\n isLoading: boolean;\r\n disabled: boolean;\r\n } = { queryString: '', results: [], isLoading: false, disabled: false };\r\n\r\n protected constructor() {\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n public async search(selectedId: string) {\r\n const filters = await FiltersStore.getFiltersById(\r\n Number.parseInt(selectedId),\r\n );\r\n FiltersStore.setFilters(filters, 'U');\r\n SearchController.instance.state.isLoading = true;\r\n const response = await ApiaApi.post<{ results: SemanticSearchReference[] }>(\r\n makeApiaUrl({\r\n action: 'search',\r\n semSearchId: selectedId,\r\n }),\r\n {\r\n postData: {\r\n q: SearchController.instance.state.queryString,\r\n filters: JSON.stringify(FiltersStore.getFiltersAsFilterValue('U')),\r\n },\r\n postDataTreatement: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n },\r\n );\r\n if (response?.data?.results) {\r\n this.setReferences(response.data.results);\r\n }\r\n this.state.isLoading = false;\r\n }\r\n\r\n protected setReferences(results: SemanticSearchReference[]) {\r\n if (typeof results === 'string' && results) {\r\n results = JSON.parse(results as any as string);\r\n }\r\n SearchController.instance.state.results = results.map((x) =>\r\n x instanceof SemanticSearchReference ? x : new SemanticSearchReference(x),\r\n );\r\n SearchController.instance.state.disabled = false;\r\n }\r\n}\r\n\r\nexport default SearchController;\r\n","import { findScrollContainer } from '@apia/util';\r\nimport React, { useRef, useEffect, PropsWithChildren } from 'react';\r\n\r\ninterface AutoscrollContainerProps {\r\n /** How close (in px) to the bottom you have to be *when scrolling down*\r\n * for auto-scroll to kick back in. */\r\n threshold?: number;\r\n className?: string;\r\n}\r\n\r\nexport const AutoscrollContainer: React.FC<\r\n PropsWithChildren<AutoscrollContainerProps>\r\n> = ({ children, threshold = 150, className }) => {\r\n const wrapperRef = useRef<HTMLDivElement>(null);\r\n // whether new mutations should stick us to the bottom\r\n const autoScrollEnabled = useRef(true);\r\n\r\n useEffect(() => {\r\n const wrapper = wrapperRef.current;\r\n if (!wrapper) return;\r\n\r\n // 1) find the real scrolling element\r\n const scrollEl = findScrollContainer(wrapper)!;\r\n\r\n // helper to test if we're \"close enough\" to the bottom\r\n const isNearBottom = () =>\r\n scrollEl.scrollHeight - (scrollEl.scrollTop + scrollEl.clientHeight) <=\r\n threshold;\r\n\r\n // 2) wheel = user-initiated scroll via mouse/touchpad\r\n const onWheel = (e: WheelEvent) => {\r\n if (e.deltaY < 0) {\r\n // wheeling *up* => disable auto-scroll immediately\r\n autoScrollEnabled.current = false;\r\n } else if (e.deltaY > 0 && isNearBottom()) {\r\n // wheeling *down* & we're near bottom => re-enable\r\n autoScrollEnabled.current = true;\r\n }\r\n };\r\n\r\n // 3) fallback scroll listener (e.g. arrow keys, programmatic)\r\n const onScroll = () => {\r\n if (isNearBottom()) {\r\n autoScrollEnabled.current = true;\r\n }\r\n };\r\n\r\n function enable() {\r\n autoScrollEnabled.current = true;\r\n }\r\n\r\n scrollEl.addEventListener('wheel', onWheel, { passive: true });\r\n scrollEl.addEventListener('scroll', onScroll, { passive: true });\r\n document.addEventListener('enableAutoScroll', enable);\r\n\r\n // 4) initial jump to bottom\r\n scrollEl.scrollTo({ top: scrollEl.scrollHeight, behavior: 'smooth' });\r\n\r\n // 5) observe any DOM changes under our wrapper\r\n const mo = new MutationObserver(() => {\r\n if (autoScrollEnabled.current) {\r\n scrollEl.scrollTo({ top: scrollEl.scrollHeight, behavior: 'smooth' });\r\n }\r\n });\r\n mo.observe(wrapper, { childList: true, subtree: true });\r\n\r\n return () => {\r\n scrollEl.removeEventListener('wheel', onWheel);\r\n scrollEl.removeEventListener('enableAutoScroll', enable);\r\n scrollEl.removeEventListener('scroll', onScroll);\r\n mo.disconnect();\r\n };\r\n }, [threshold]);\r\n\r\n return (\r\n <div ref={wrapperRef} className={`${className || ''} autoscrollContainer`}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import { ReactNode } from 'react';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { IAttachment, TMessageType } from '../types';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ChatMessage {\r\n id: number;\r\n state: {\r\n message: ReactNode;\r\n messageType: TMessageType;\r\n attachments: IAttachment[];\r\n reference: ReactNode;\r\n };\r\n\r\n get message() {\r\n return this.state.message;\r\n }\r\n get messageType() {\r\n return this.state.messageType;\r\n }\r\n get attachments() {\r\n return this.state.attachments;\r\n }\r\n get reference() {\r\n return this.state.reference;\r\n }\r\n set message(value) {\r\n this.state.message = value;\r\n }\r\n set messageType(value) {\r\n this.state.messageType = value;\r\n }\r\n set attachments(value) {\r\n this.state.attachments = value;\r\n }\r\n set reference(value) {\r\n this.state.reference = value;\r\n }\r\n\r\n constructor(\r\n message: ReactNode = '',\r\n messageType: TMessageType = 'user',\r\n attachments: IAttachment[] = [],\r\n reference: ReactNode = null,\r\n ) {\r\n this.state = { message, messageType, attachments, reference };\r\n\r\n this.id = maxId++;\r\n if (messageType === 'response') this.messageType = 'system';\r\n if (typeof message === 'string') this.message = message;\r\n\r\n makeObservable(this, {\r\n state: observable,\r\n });\r\n }\r\n\r\n clone = () =>\r\n new ChatMessage(\r\n this.message,\r\n this.messageType,\r\n this.attachments.map((x) => {\r\n return { ...x };\r\n }),\r\n this.reference,\r\n );\r\n\r\n removeAttachment(attachment: IAttachment) {\r\n this.attachments = this.attachments.filter(\r\n (current) => current !== attachment,\r\n );\r\n }\r\n addAttachmentDescription(attachment: IAttachment, description: string) {\r\n const a = this.attachments.find((current) => current === attachment);\r\n if (a) {\r\n a.description = description;\r\n }\r\n }\r\n setMessageType(type: TMessageType) {\r\n this.messageType = type;\r\n }\r\n}\r\n","import { Box, Label } from '@apia/theme';\r\nimport { IAttachment } from '../types';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { getLabel } from '@apia/util';\r\nimport { Collector } from '@apia/validations';\r\nimport { ApiaUtil, FileCard } from '@apia/components';\r\n\r\nexport const FileAttachment = observer(\r\n ({\r\n attachment,\r\n onAddDescription,\r\n onRemove,\r\n }: {\r\n attachment: IAttachment;\r\n onAddDescription?: (a: IAttachment, d: string) => unknown;\r\n onRemove?: () => unknown;\r\n }) => {\r\n const { ref } = ApiaUtil.instance.tooltips.useHover({\r\n preferredOrientationX: 'left',\r\n preferredOrientationY: 'top',\r\n minSize: {\r\n width: 200,\r\n height: 400,\r\n },\r\n attachToMousePosition: true,\r\n closeOnMouseLeaveAttachedElement: true,\r\n children: (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n }}\r\n >\r\n <h1>{attachment.name}</h1>\r\n <img src={attachment.base64}></img>\r\n {attachment.description && <Label>{attachment.description}</Label>}\r\n </Box>\r\n ),\r\n });\r\n\r\n return (\r\n <FileCard\r\n ref={ref}\r\n // className=\"file_box__icon\"\r\n name={attachment.name}\r\n handleClose={onRemove}\r\n additionalButtons={\r\n onAddDescription\r\n ? [\r\n {\r\n icon: 'Pencil',\r\n onClick: () => {\r\n const collector = new Collector();\r\n collector.add(\r\n new collector.fields.textarea(\r\n 'desc',\r\n getLabel('lblDes').text,\r\n { initialValue: attachment.description },\r\n ),\r\n );\r\n collector.show({\r\n onConfirm: (ev): boolean => {\r\n if (ev) {\r\n onAddDescription(attachment, ev.desc! as string);\r\n }\r\n return true;\r\n },\r\n title: getLabel('btnAddComment').text,\r\n });\r\n },\r\n variant: 'icon-only',\r\n },\r\n ]\r\n : []\r\n }\r\n />\r\n );\r\n },\r\n);\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { IAttachment } from '../types';\r\nimport { FileAttachment } from './FileAttachment';\r\n\r\nexport const Attachments = observer(\r\n ({\r\n attachments,\r\n onRemove,\r\n onAddDescription,\r\n className,\r\n }: {\r\n attachments: IAttachment[];\r\n onRemove?: (a: IAttachment) => unknown;\r\n onAddDescription?: (a: IAttachment, d: string) => unknown;\r\n className?: string;\r\n }) => {\r\n if (!attachments.length) return null;\r\n\r\n return (\r\n <Box\r\n className={`attachments ${className}`}\r\n {...getVariant('layout.common.chat.attachments')}\r\n >\r\n {attachments.map((x) => (\r\n <FileAttachment\r\n attachment={x}\r\n onRemove={onRemove ? () => onRemove(x) : undefined}\r\n onAddDescription={onAddDescription}\r\n key={x.id}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Suspense, memo } from 'react';\r\nimport { TComponentRender } from '../types';\r\nimport { importComponent } from '@apia/components';\r\n\r\nexport const MessageBlock = memo(\r\n ({ componentData }: { componentData: TComponentRender }) => {\r\n if (typeof componentData.args === 'string') {\r\n componentData.args = JSON.parse(componentData.args);\r\n }\r\n\r\n const Component = importComponent(componentData.path);\r\n return (\r\n <Suspense fallback={null}>\r\n <Component {...componentData.args} />\r\n </Suspense>\r\n );\r\n },\r\n);\r\n","import { decodeBase64ToUtf8 } from '@apia/util';\r\nimport { TComponentRender } from '../types';\r\nimport { MessageBlock } from './MessageBlock';\r\nimport { MDRenderer } from '@apia/components';\r\nimport { Box } from '@apia/theme';\r\nimport { TDescriberBlock } from '../StreamMessage';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport type TBlockType = 'text' | 'describer';\r\n\r\nexport type TBaseStreamBlock<T extends TBlockType = TBlockType> = {\r\n blockType: T;\r\n};\r\n\r\nexport type TTextStreamBlock = TBaseStreamBlock<'text'> & { str: string };\r\nexport type TDescriberStreamBlock = TBaseStreamBlock<'describer'> & {\r\n describer: TDescriberBlock;\r\n};\r\n\r\nexport type TStreamBlock = TTextStreamBlock | TDescriberStreamBlock;\r\n\r\nexport const MessageBlocks = observer(\r\n ({ streamParts }: { streamParts: TStreamBlock[] }) => {\r\n // str viene del server en el formato indicado\r\n const parts = streamParts.map((p, i) => {\r\n if (p.blockType === 'describer') {\r\n return (\r\n <Box\r\n variant=\"layout.common.ai.semanticSearch.execution.streamBlocks\"\r\n className=\"sem_search__stream_blocks\"\r\n as=\"ul\"\r\n >\r\n {\r\n <Box\r\n variant=\"layout.common.ai.semanticSearch.execution.streamBlocks\"\r\n as=\"li\"\r\n className={`sem_search__stream_block ${p.describer.type}`}\r\n key={i}\r\n >\r\n {p.describer.content}\r\n </Box>\r\n }\r\n </Box>\r\n );\r\n } else if (p.blockType === 'text') {\r\n return p.str.split(/(!!\\[[^]+])/g).map((c) => {\r\n // Se permiten las keys con i porque esta lista no va a cambiar\r\n if (c.match(/^!!\\[[^]+]$/)) {\r\n const definition = JSON.parse(\r\n decodeBase64ToUtf8(\r\n (c.match(/^!!\\[([^]+)]$/) ?? [undefined, undefined])[1] ?? '',\r\n ),\r\n ) as TComponentRender;\r\n\r\n return (\r\n <MessageBlock key={i} componentData={definition}></MessageBlock>\r\n );\r\n } else {\r\n return <MDRenderer str={c} key={i}></MDRenderer>;\r\n }\r\n });\r\n }\r\n });\r\n return parts;\r\n },\r\n);\r\n","import { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { ReactNode } from 'react';\r\nimport { Attachments } from './Attachments';\r\nimport { IAttachment, TMessageType } from '../types';\r\nimport { MessageBlocks } from './MessageBlocks';\r\n\r\nexport const Message = observer(\r\n ({\r\n className,\r\n type,\r\n id,\r\n message,\r\n attachments,\r\n reference,\r\n }: {\r\n className?: string;\r\n type: TMessageType;\r\n id: string;\r\n message: ReactNode;\r\n attachments: IAttachment[];\r\n reference: ReactNode;\r\n }) => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history_message ${className || ''} ${type}`}\r\n key={id}\r\n >\r\n <Box\r\n className=\"history_message__content\"\r\n {...(typeof message === 'string'\r\n ? {\r\n children: (\r\n <MessageBlocks\r\n streamParts={[{ blockType: 'text', str: message }]}\r\n ></MessageBlocks>\r\n ),\r\n }\r\n : { children: message as string })}\r\n />\r\n {attachments.length > 0 && (\r\n <Attachments attachments={attachments}></Attachments>\r\n )}\r\n {reference && (\r\n <Box className=\"history_message__references\">{reference}</Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { ChatMessage } from './ChatMessage';\r\nimport { Message } from './Message';\r\nimport { AutoscrollContainer } from '../../AutoscrollContainer';\r\n\r\nexport const History = observer(\r\n ({\r\n messages,\r\n className,\r\n }: {\r\n messages: ChatMessage[];\r\n className?: string;\r\n }) => {\r\n let currentType: string = '';\r\n\r\n return (\r\n <AutoscrollContainer className={className}>\r\n <Box\r\n {...getVariant('layout.common.chat.history')}\r\n className=\"chat_history\"\r\n >\r\n {messages.map((current, i) => {\r\n let first = false;\r\n let last = false;\r\n\r\n if (currentType !== current.messageType) {\r\n currentType = current.messageType;\r\n first = true;\r\n }\r\n\r\n if (\r\n i === messages.length - 1 ||\r\n messages[i + 1].messageType !== current.messageType\r\n ) {\r\n last = true;\r\n }\r\n\r\n return (\r\n <Message\r\n className={first ? 'first' : last ? 'last' : undefined}\r\n type={current.messageType}\r\n id={String(current.id)}\r\n attachments={current.attachments}\r\n reference={current.reference}\r\n message={current.message}\r\n />\r\n );\r\n })}\r\n </Box>\r\n </AutoscrollContainer>\r\n );\r\n },\r\n);\r\n","export function getBase64FromFile(f: File) {\r\n return ((f: File) =>\r\n new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(f);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = () => reject();\r\n }))(f);\r\n}\r\n\r\nexport function getBase64FromBlob(b: Blob) {\r\n return ((blob: Blob): Promise<string> =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => {\r\n const base64String = reader.result as string;\r\n resolve(base64String);\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(blob);\r\n }))(b);\r\n}\r\n\r\nexport function getFileExtension(name: string) {\r\n return name.split('.').at(-1);\r\n}\r\n\r\nexport function isImage(base64: string) {\r\n const imageRegex = /^data:image\\/(png|jpeg|jpg|gif|webp|bmp|tiff);base64,/;\r\n return imageRegex.test(base64);\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { Box, Form, getVariant, spacing } from '@apia/theme';\r\nimport { ChangeEvent, useRef, useState } from 'react';\r\nimport { getLabel } from '@apia/util';\r\nimport { IAttachment } from '../types';\r\nimport { getBase64FromFile } from '../util';\r\nimport {\r\n ApiaUtil,\r\n AutogrowTextarea,\r\n IconButton,\r\n TMenuItem,\r\n} from '@apia/components';\r\n\r\nexport const TextArea = observer(\r\n ({\r\n additionalOptions = [],\r\n isLoading,\r\n isRecording,\r\n disablePrevButton,\r\n disableNextButton,\r\n onSubmit,\r\n onChange,\r\n onClearHistory,\r\n onAttach,\r\n onRecord,\r\n onRecordCancel,\r\n onVideoRecord,\r\n onPrev,\r\n onNext,\r\n value,\r\n attachments,\r\n className,\r\n }: {\r\n additionalOptions?: TMenuItem[];\r\n className?: string;\r\n isLoading: boolean;\r\n isRecording: boolean;\r\n disablePrevButton: boolean;\r\n disableNextButton: boolean;\r\n onClearHistory: () => unknown;\r\n onSubmit: () => unknown;\r\n onChange: (v: string) => unknown;\r\n onAttach: (ev: IAttachment) => unknown;\r\n onRecord: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n onRecordCancel: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n onVideoRecord: () => unknown;\r\n onPrev: () => unknown;\r\n onNext: () => unknown;\r\n value: string;\r\n attachments: IAttachment[];\r\n }) => {\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const searchControlsRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n const [dragging, setDragging] = useState(false);\r\n const handleAttachments = async (ev: ChangeEvent<HTMLInputElement>) => {\r\n if (ev.target.files) {\r\n for await (const f of ev.target.files) {\r\n const base64 = await getBase64FromFile(f);\r\n onAttach({\r\n base64: base64,\r\n name: f.name,\r\n id: f.name,\r\n });\r\n }\r\n ev.target.value = '';\r\n }\r\n };\r\n const menuItemsList: TMenuItem[] = [\r\n ...((additionalOptions.length > 0\r\n ? [...additionalOptions, 'separator']\r\n : []) as TMenuItem[]),\r\n {\r\n children: getLabel('btnUpload').text,\r\n title: getLabel('btnUpload').text,\r\n icon: 'File',\r\n onClick: () => fileInputRef.current?.click(),\r\n key: '2',\r\n },\r\n {\r\n title: getLabel('lblOpenCamera').text,\r\n children: getLabel('lblOpenCamera').text,\r\n icon: 'Camera',\r\n onClick: onVideoRecord,\r\n key: '3',\r\n },\r\n 'separator',\r\n {\r\n icon: 'ArrowLeft',\r\n children: getLabel('btnAiPrevious').text,\r\n title: getLabel('btnAiPrevious').text,\r\n onClick: onPrev,\r\n disabled: disablePrevButton,\r\n key: '0',\r\n },\r\n {\r\n icon: 'ArrowRight',\r\n children: getLabel('btnAiNext').text,\r\n title: getLabel('btnAiNext').text,\r\n onClick: onNext,\r\n disabled: disableNextButton,\r\n key: '1',\r\n },\r\n 'separator',\r\n {\r\n icon: 'Trash',\r\n onClick: onClearHistory,\r\n key: '5',\r\n children: getLabel('btnAiDeleteMessages').text,\r\n title: getLabel('btnAiDeleteMessages').text,\r\n },\r\n ];\r\n 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 `invisible__attach__file`,\r\n ) as HTMLInputElement;\r\n (fileInputRef.current ?? 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 return (\r\n <Form\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n onDragEnter={handleDragEnter}\r\n onDragLeave={handleDragLeave}\r\n onSubmit={(ev) => {\r\n ev.preventDefault();\r\n onSubmit();\r\n }}\r\n className={`search_controls ${className}`}\r\n {...getVariant('layout.common.chat.form')}\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 <>\r\n <AutogrowTextarea\r\n ref={searchControlsRef}\r\n aria-label={\r\n /** TODO: Crear etiqueta para búsqueda */ 'Frase de búsqueda'\r\n }\r\n value={value}\r\n className=\"searchTextArea\"\r\n onChange={(ev) => onChange(ev.target.value)}\r\n onKeyDown={(ev) => {\r\n if (\r\n (ev.code === 'Enter' || ev.code === 'NumpadEnter') &&\r\n !ev.shiftKey\r\n ) {\r\n ev.preventDefault();\r\n (ev.target as HTMLElement)\r\n .closest('form')!\r\n .querySelector<HTMLElement>('[type=\"submit\"]')!\r\n .click();\r\n }\r\n }}\r\n sx={{\r\n resize: 'none',\r\n px: spacing(4),\r\n background: 'transparent',\r\n border: 'none',\r\n alignContent: 'center',\r\n }}\r\n />\r\n <Box className=\"chatButtons\">\r\n <IconButton\r\n className=\"ChatBarButton\"\r\n icon={isRecording ? 'Trash' : 'Ellipsis'}\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n onClick={\r\n isRecording\r\n ? onRecordCancel\r\n : (ev) => {\r\n ApiaUtil.instance.menu.open({\r\n menuProps: {\r\n anchorPoint: { x: ev.clientX, y: ev.clientY },\r\n },\r\n items: menuItemsList,\r\n });\r\n }\r\n }\r\n ></IconButton>\r\n {(value === '' && attachments.length === 0) || isRecording ? (\r\n <IconButton\r\n className={`ChatBarButton ${isRecording ? 'isRecording' : ''}`}\r\n icon={isRecording ? 'Stop' : 'Microphone'}\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n title={getLabel('lblAiRecordAudio').text}\r\n onClick={onRecord}\r\n isLoading={isLoading}\r\n disabled={isLoading && !isRecording}\r\n sx={{\r\n color: isRecording ? 'red' : undefined,\r\n }}\r\n id=\"transcribeAudio\"\r\n />\r\n ) : (\r\n <IconButton\r\n className=\"ChatBarButton\"\r\n isLoading={isLoading}\r\n icon=\"ArrowRight\"\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n title={getLabel('btnBus').title}\r\n type=\"submit\"\r\n />\r\n )}\r\n </Box>\r\n </>\r\n )}\r\n <input\r\n ref={fileInputRef}\r\n id=\"invisible__attach__file\"\r\n type=\"file\"\r\n multiple\r\n onChange={handleAttachments}\r\n sx={{ display: 'none' }}\r\n ></input>\r\n </Form>\r\n );\r\n },\r\n);\r\n","import { ApiaUtil } from '@apia/components';\r\nimport { makeObservable, observable, action } from 'mobx';\r\n\r\nexport class CameraController {\r\n state: {\r\n videoStream: MediaStream | null;\r\n isOpen: boolean;\r\n } = {\r\n videoStream: null,\r\n isOpen: false,\r\n };\r\n private currentCapture: File | null = null;\r\n\r\n private videoElement: HTMLVideoElement;\r\n\r\n constructor() {\r\n makeObservable(this, {\r\n state: observable,\r\n openCamera: action,\r\n closeCamera: action,\r\n });\r\n\r\n this.videoElement = document.createElement('video');\r\n this.videoElement.autoplay = true;\r\n this.videoElement.playsInline = true;\r\n }\r\n\r\n async openCamera() {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\r\n this.state.videoStream = stream;\r\n this.videoElement.srcObject = stream;\r\n this.state.isOpen = true;\r\n ApiaUtil.instance.modals.open({\r\n children: <this.Component></this.Component>,\r\n onConfirm: () => {\r\n this.closeCamera();\r\n },\r\n onClose: () => {\r\n this.closeCamera();\r\n },\r\n });\r\n } catch (error) {\r\n console.error('Error while accessing the camera:', error);\r\n this.state.isOpen = false;\r\n this.closeCamera();\r\n }\r\n }\r\n\r\n async closeCamera() {\r\n if (!this.videoElement.srcObject) return;\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = this.videoElement.videoWidth;\r\n canvas.height = this.videoElement.videoHeight;\r\n const ctx = canvas.getContext('2d');\r\n if (ctx)\r\n ctx.drawImage(this.videoElement, 0, 0, canvas.width, canvas.height);\r\n\r\n this.currentCapture = await new Promise<File | null>((resolve) => {\r\n canvas.toBlob((blob: Blob | null) => {\r\n if (blob) {\r\n const file = new File([blob], 'captured_image.jpg', {\r\n type: 'image/jpeg',\r\n });\r\n resolve(file);\r\n } else {\r\n this.closeCamera();\r\n }\r\n }, 'image/jpeg');\r\n }).finally(() => {\r\n this.state.videoStream?.getTracks().forEach((track) => track.stop());\r\n this.state.videoStream = null;\r\n this.videoElement.srcObject = null;\r\n this.state.isOpen = false;\r\n });\r\n }\r\n\r\n pop() {\r\n const returnFile = this.currentCapture;\r\n this.currentCapture = null;\r\n return returnFile;\r\n }\r\n\r\n Component = () => {\r\n return (\r\n <video\r\n ref={(el) => {\r\n if (el) {\r\n el.srcObject = this.videoElement.srcObject;\r\n el.autoplay = true;\r\n el.playsInline = true;\r\n }\r\n }}\r\n style={{ width: '100%', height: 'auto' }}\r\n />\r\n );\r\n };\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { ChatMessage } from './components/ChatMessage';\r\nimport { Attachments } from './components/Attachments';\r\nimport { History } from './components/History';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { TextArea as TTT } from './components/TextArea';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { CameraController } from './CameraController';\r\nimport { getBase64FromBlob, getBase64FromFile } from './util';\r\nimport {\r\n ClearHistoryCallback,\r\n IAttachment,\r\n MessageCallbackProps,\r\n MessageSubmitCallback,\r\n TChatControllerState,\r\n} from './types';\r\nimport { TMenuItem } from '@apia/components';\r\n\r\nexport class ChatController<\r\n T extends Record<string, unknown> = Record<string, unknown>,\r\n> {\r\n currentIndex = 0;\r\n state: TChatControllerState & T = {\r\n isLoading: false,\r\n canRecord: true,\r\n canAttach: true,\r\n maxAttachmentsSize: 100,\r\n messages: [],\r\n currentMessage: new ChatMessage('', 'user'),\r\n } as unknown as TChatControllerState & T;\r\n private internalAudioRecorder = new AudioRecorder();\r\n private internalCameraRecorder = new CameraController();\r\n\r\n private maxId = 0;\r\n\r\n audioRecorder = {\r\n cancelOnStop: false,\r\n start: () => {\r\n this.state.isLoading = true;\r\n this.internalAudioRecorder\r\n .start()\r\n .then(async (blob: Blob) => {\r\n if (this.audioRecorder.cancelOnStop) {\r\n this.audioRecorder.cancelOnStop = false;\r\n return;\r\n }\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: `userRecord_${this.audioRecorder.record++}.wav`,\r\n base64: await getBase64FromBlob(blob),\r\n });\r\n const currentMessage = new ChatMessage(\r\n this.state.currentMessage.message,\r\n 'user',\r\n );\r\n this.state.currentMessage.message = '';\r\n const submitMessage = this.state.currentMessage;\r\n this.state.currentMessage = currentMessage;\r\n await this.handleSubmit({\r\n message: submitMessage,\r\n eraseCurrentMessage: false,\r\n });\r\n })\r\n .finally(() => {\r\n this.state.isLoading = false;\r\n });\r\n },\r\n stop: async () => {\r\n this.internalAudioRecorder.stop();\r\n },\r\n record: 0,\r\n state: this.internalAudioRecorder.state,\r\n };\r\n\r\n constructor(\r\n props: Partial<TChatControllerState & T>,\r\n private onMessageSubmit: MessageSubmitCallback,\r\n private onClearHistory: ClearHistoryCallback,\r\n private additionalOptions?: TMenuItem[],\r\n private classNames?: {\r\n history?: string;\r\n textarea?: string;\r\n attachments?: string;\r\n },\r\n ) {\r\n this.state = Object.assign({}, this.state, props);\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n removeMessage(idx: number) {\r\n this.state.messages = this.state.messages.filter((_, i) => i !== idx);\r\n }\r\n\r\n addMessage(message: ChatMessage) {\r\n this.state.messages.push(message);\r\n this.currentIndex = this.state.messages.length;\r\n }\r\n\r\n clearHistory() {\r\n this.state.messages = [];\r\n this.onClearHistory && this.onClearHistory();\r\n }\r\n\r\n clearMessage() {\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n\r\n public removeAttachment(attachment: IAttachment) {\r\n this.state.currentMessage.removeAttachment(attachment);\r\n }\r\n\r\n private handleSubmit = async (props?: {\r\n /**\r\n * If provided, this message will be sumitted instead of the current message.\r\n */\r\n message?: ChatMessage;\r\n /**\r\n * Defaults to true\r\n */\r\n eraseCurrentMessage?: boolean;\r\n }) => {\r\n if (!this.audioRecorder.state.recording) {\r\n const currentMessage = props?.message || this.state.currentMessage;\r\n if (currentMessage.message || currentMessage.attachments.length > 0) {\r\n this.state.isLoading = true;\r\n if (props?.eraseCurrentMessage !== false) {\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n await this.onMessageSubmit({\r\n message: currentMessage,\r\n ...this.getAdditionalProps(),\r\n });\r\n this.state.isLoading = false;\r\n }\r\n }\r\n };\r\n\r\n private isForHistory(message?: ChatMessage) {\r\n return message && message.messageType === 'user';\r\n }\r\n\r\n private canGoNext() {\r\n let condition = false;\r\n const slice = this.state.messages.slice(\r\n this.currentIndex,\r\n this.state.messages.length,\r\n );\r\n const n = slice.length;\r\n if (this.currentIndex + 1 > n) {\r\n return condition;\r\n }\r\n for (let i = 0; i < n && !condition; i++) {\r\n const current = slice[i];\r\n condition = current.messageType === 'user';\r\n }\r\n return condition;\r\n }\r\n private canGoPrev() {\r\n let condition = false;\r\n if (this.currentIndex - 1 === -1) {\r\n return condition;\r\n }\r\n for (\r\n let i = this.state.messages.slice(0, this.currentIndex).length - 1;\r\n i >= 0 && !condition;\r\n i--\r\n ) {\r\n const current = this.state.messages[i];\r\n condition = current.messageType === 'user';\r\n }\r\n return condition;\r\n }\r\n public nextMessage() {\r\n let newCurrentMessage = undefined;\r\n let i = this.currentIndex;\r\n const n = this.state.messages.length;\r\n if (n === 0 || n - 1 === i) {\r\n return;\r\n }\r\n while (!newCurrentMessage && i < n - 1) {\r\n newCurrentMessage = this.state.messages[i + 1];\r\n i++;\r\n if (this.isForHistory(newCurrentMessage)) {\r\n this.state.currentMessage = newCurrentMessage!.clone();\r\n break;\r\n } else {\r\n newCurrentMessage = undefined;\r\n }\r\n if (i === this.currentIndex) {\r\n break;\r\n }\r\n }\r\n this.currentIndex = i;\r\n }\r\n\r\n public prevMessage() {\r\n let newCurrentMessage = undefined;\r\n let i = this.currentIndex;\r\n const n = this.state.messages.length;\r\n if (n === 0 || i === 0) {\r\n return;\r\n }\r\n while (!newCurrentMessage && i > 0) {\r\n newCurrentMessage = this.state.messages[i - 1];\r\n i--;\r\n if (this.isForHistory(newCurrentMessage)) {\r\n this.state.currentMessage = newCurrentMessage!.clone();\r\n break;\r\n } else {\r\n newCurrentMessage = undefined;\r\n }\r\n if (i === this.currentIndex) {\r\n break;\r\n }\r\n }\r\n this.currentIndex = i;\r\n }\r\n\r\n protected getAdditionalProps(): Partial<MessageCallbackProps> {\r\n return {};\r\n }\r\n\r\n History = observer(() => (\r\n <History\r\n messages={this.state.messages}\r\n className={this.classNames?.history}\r\n ></History>\r\n ));\r\n\r\n Attachments = observer(() => (\r\n <Attachments\r\n attachments={this.state.currentMessage.attachments}\r\n onRemove={(a) => {\r\n this.removeAttachment(a);\r\n }}\r\n className={this.classNames?.attachments}\r\n onAddDescription={(a, ev) =>\r\n this.state.currentMessage.addAttachmentDescription(a, ev)\r\n }\r\n ></Attachments>\r\n ));\r\n\r\n TextArea = observer(() => (\r\n <TTT\r\n additionalOptions={this.additionalOptions}\r\n className={this.classNames?.textarea}\r\n value={this.state.currentMessage.message as string}\r\n isLoading={this.state.isLoading}\r\n isRecording={this.internalAudioRecorder.state.recording}\r\n disablePrevButton={!this.canGoPrev()}\r\n disableNextButton={!this.canGoNext()}\r\n onChange={(ev) => {\r\n this.state.currentMessage.message = ev;\r\n }}\r\n onSubmit={() => this.handleSubmit()}\r\n onClearHistory={() => {\r\n this.clearHistory();\r\n }}\r\n onAttach={async (ev) => {\r\n this.state.currentMessage.attachments.push({\r\n ...ev,\r\n id: String(this.maxId++),\r\n });\r\n }}\r\n onRecord={() => {\r\n !this.internalAudioRecorder.state.recording\r\n ? this.audioRecorder.start()\r\n : this.audioRecorder.stop();\r\n }}\r\n onRecordCancel={async () => {\r\n if (this.internalAudioRecorder.state.recording) {\r\n this.audioRecorder.cancelOnStop = true;\r\n await this.audioRecorder.stop();\r\n }\r\n }}\r\n onVideoRecord={async () => {\r\n !this.internalCameraRecorder.state.isOpen &&\r\n (await this.internalCameraRecorder.openCamera());\r\n await new Promise<void>((resolve, _) => {\r\n const checkCapture = async () => {\r\n if (!this.internalCameraRecorder.state.isOpen) {\r\n const capture = this.internalCameraRecorder.pop();\r\n if (capture) {\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: capture.name,\r\n base64: await getBase64FromFile(capture),\r\n });\r\n return resolve();\r\n }\r\n } else {\r\n requestAnimationFrame(checkCapture);\r\n }\r\n };\r\n\r\n checkCapture();\r\n });\r\n }}\r\n onPrev={() => {\r\n this.prevMessage();\r\n }}\r\n onNext={() => {\r\n this.nextMessage();\r\n }}\r\n attachments={this.state.currentMessage.attachments}\r\n />\r\n ));\r\n\r\n Renderer = () => (\r\n <Box\r\n {...getVariant('layout.common.chat.controller')}\r\n className=\"chat_controller\"\r\n >\r\n <this.History />\r\n <this.Attachments />\r\n <this.TextArea />\r\n </Box>\r\n );\r\n}\r\n","import { ChatController } from './ChatController/ChatController';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { action, makeObservable } from 'mobx';\r\nimport {\r\n ClearHistoryCallback,\r\n MessageSubmitCallback,\r\n TChatControllerState,\r\n} from './ChatController/types';\r\nimport { ApiaUtil, IconButton, TMenuItem } from '@apia/components';\r\n\r\nexport class FloatingChatController extends ChatController<{\r\n isWindowOpen: boolean;\r\n}> {\r\n private modalTitle;\r\n constructor(props: {\r\n props: Partial<\r\n TChatControllerState & {\r\n isWindowOpen: boolean;\r\n }\r\n >;\r\n onMessageSubmit: MessageSubmitCallback;\r\n onClearHistory: ClearHistoryCallback;\r\n modalTitle?: string;\r\n additionalOptions?: TMenuItem[];\r\n classNames?: {\r\n history?: string;\r\n textarea?: string;\r\n attachments?: string;\r\n };\r\n }) {\r\n super(\r\n { isWindowOpen: false, ...props },\r\n props.onMessageSubmit,\r\n props.onClearHistory,\r\n props.additionalOptions,\r\n props.classNames,\r\n );\r\n this.modalTitle = props.modalTitle;\r\n makeObservable({ open: action });\r\n\r\n if (props.props.isWindowOpen) {\r\n this.state.isWindowOpen = false;\r\n this.open();\r\n }\r\n }\r\n public getModalTitle() {\r\n return this.modalTitle;\r\n }\r\n public setModalTitle(title: string) {\r\n this.modalTitle = title;\r\n }\r\n open() {\r\n if (!this.state.isWindowOpen) {\r\n this.state.isWindowOpen = true;\r\n\r\n ApiaUtil.instance.modals.open({\r\n variant: 'layout.common.chat.assistant.floatingAssistant',\r\n defaultPosition: {\r\n bottom: '10px',\r\n right: '10px',\r\n },\r\n id: 'floatingAssistant',\r\n draggable: true,\r\n dragBounded: true,\r\n children: <this.Renderer />,\r\n onClose: () => {\r\n this.state.isWindowOpen = false;\r\n },\r\n title: this.modalTitle,\r\n });\r\n }\r\n }\r\n\r\n Window = observer(() => {\r\n return this.state.isWindowOpen ? null : (\r\n <IconButton\r\n className=\"chat_controller__open\"\r\n icon=\"Magic\"\r\n size=\"Md\"\r\n variant=\"icon-outline\"\r\n onClick={() => {\r\n this.open();\r\n }}\r\n />\r\n );\r\n });\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { TReference } from './types';\r\nimport { TStreamBlock, TTextStreamBlock } from './components';\r\n\r\nexport type TDescriberBlock = { type: string; content: string };\r\n\r\nexport class StreamMessage {\r\n blocks: TStreamBlock[] = [];\r\n references: TReference[] = [];\r\n tables: Record<string, string> = {};\r\n charts: Record<string, string> = {};\r\n finished: boolean = true;\r\n constructor(\r\n public messageFooter?: string,\r\n hasStream?: boolean,\r\n ) {\r\n makeObservable(this, {\r\n references: observable,\r\n blocks: observable,\r\n tables: observable,\r\n charts: observable,\r\n finished: observable,\r\n });\r\n hasStream && (this.finished = false);\r\n }\r\n\r\n addPart<T extends TStreamBlock>(part: T, afterAddPart?: (added: T) => void) {\r\n if (\r\n this.blocks.length > 0 &&\r\n this.blocks[this.blocks.length - 1].blockType === 'text' &&\r\n part.blockType === 'text'\r\n ) {\r\n const aux: TTextStreamBlock = this.blocks[\r\n this.blocks.length - 1\r\n ] as TTextStreamBlock;\r\n if (aux !== part) {\r\n //aux.str +=\r\n // aux.str.length === 0 ? part.str.replace(/^\\s+/, '') : part.str;\r\n aux.str += part.str;\r\n }\r\n } else {\r\n this.blocks.push(part);\r\n }\r\n afterAddPart && afterAddPart(part);\r\n }\r\n\r\n getLastBlock() {\r\n return this.blocks[this.blocks.length - 1];\r\n }\r\n\r\n streamFinished() {\r\n this.finished = true;\r\n }\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\n\r\nexport const Ellipsis = () => {\r\n const [e, setE] = useState(0);\r\n\r\n let dots = '.';\r\n for (let i = 0; i < e; i++) {\r\n dots += '.';\r\n }\r\n\r\n const interval = useRef(0);\r\n useEffect(() => {\r\n interval.current = setInterval(() => {\r\n setE((e) => (e === 2 ? 0 : e + 1));\r\n }, 500) as any;\r\n\r\n return () => {\r\n clearInterval(interval.current);\r\n };\r\n });\r\n\r\n return <div className=\"ellipsis\">{dots}</div>;\r\n};\r\n","import { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { ReactNode } from 'react';\r\n\r\nexport const Header = observer(\r\n ({ childComponent }: { childComponent: ReactNode }) => {\r\n return <Box className=\"search_header_container\">{childComponent}</Box>;\r\n },\r\n);\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { ApiaUtil } from '@apia/components';\r\nimport { Collector } from '@apia/validations';\r\n\r\nexport async function rate(\r\n el: HTMLElement,\r\n how: 'up' | 'down',\r\n query: string,\r\n): Promise<boolean> {\r\n return new Promise<boolean>((resolve) => {\r\n const collector = new Collector();\r\n collector.add(\r\n new collector.fields.textarea('comment', 'Comment', {\r\n validationRules: { required: true },\r\n properties: { autoFocus: true },\r\n }),\r\n );\r\n const tooltip = ApiaUtil.instance.tooltips.open({\r\n attachToElement: { current: el },\r\n children: (\r\n <collector.Render\r\n sx={{\r\n width: '300px',\r\n minWidth: 'unset',\r\n '.collector__buttons button': {\r\n fontSize: 14,\r\n py: 2,\r\n px: 3,\r\n },\r\n }}\r\n resolve={(w) => {\r\n (async () => {\r\n const result = await ApiaApi.post(\r\n makeApiaUrl({ action: 'giveFeedback' }),\r\n {\r\n postData: {\r\n query,\r\n feedback: w.comment,\r\n positive: how === 'up',\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n tooltip.close();\r\n resolve(!result?.hasError && !result?.hasMessages);\r\n })();\r\n return true;\r\n }}\r\n />\r\n ),\r\n minSize: {\r\n width: 300,\r\n height: 220,\r\n },\r\n preferredOrientationX: 'right',\r\n preferredOrientationY: 'top',\r\n closeOnMouseLeaveAttachedElement: false,\r\n closeOnMouseLeaveTooltip: false,\r\n closeOnClickOut: true,\r\n closeOnClick: false,\r\n closeOnEscape: true,\r\n closeOnScrollOut: true,\r\n closeOthers: true,\r\n attachToElementAnchorPoint: 'topRight',\r\n });\r\n });\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { useState } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { Ellipsis } from './Ellipsis';\r\nimport { StreamMessage } from '../StreamMessage';\r\nimport { MessageBlocks } from './MessageBlocks';\r\nimport { IconButton, MDRenderer } from '@apia/components';\r\n\r\nexport const MessageBody = observer(\r\n ({\r\n onRate,\r\n store,\r\n }: {\r\n onRate?: (target: HTMLElement, how: 'up' | 'down') => Promise<boolean>;\r\n store: StreamMessage;\r\n }) => {\r\n const [thumb, setThumb] = useState<'up' | 'down' | undefined>(undefined);\r\n const hasText =\r\n (store.blocks.find((x) => x.blockType === 'text')?.str ?? '').length > 0;\r\n return (\r\n <Box className=\"sem_search__system_message\">\r\n <>\r\n <Box className=\"message__body markdown\">\r\n {<MessageBlocks streamParts={store.blocks}></MessageBlocks>}\r\n </Box>\r\n {onRate && hasText ? (\r\n <Box className=\"sem_search__thumbs\">\r\n <IconButton\r\n variant=\"icon-only\"\r\n icon=\"ThumbsUp\"\r\n className={\r\n thumb === 'up'\r\n ? 'selected'\r\n : thumb === 'down'\r\n ? 'unselected'\r\n : 'no_feedback'\r\n }\r\n onClick={(ev) =>\r\n onRate(ev.target as HTMLElement, 'up').then((res) => {\r\n if (res) {\r\n setThumb('up');\r\n }\r\n })\r\n }\r\n />\r\n <IconButton\r\n variant=\"icon-only\"\r\n icon=\"ThumbsDown\"\r\n className={\r\n thumb === 'down'\r\n ? 'selected'\r\n : thumb === 'up'\r\n ? 'unselected'\r\n : 'no_feedback'\r\n }\r\n onClick={(ev) =>\r\n onRate(ev.target as HTMLElement, 'down').then((res) => {\r\n if (res) {\r\n setThumb('down');\r\n }\r\n })\r\n }\r\n />\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n </>\r\n {!hasText && <Ellipsis />}\r\n {store.messageFooter && store.finished && (\r\n <Box className=\"message__body markdown\">\r\n <MDRenderer str={store.messageFooter}></MDRenderer>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { ApiaUtil, SimpleButton } from '@apia/components';\r\nimport { Box, Paragraph } from '@apia/theme';\r\nimport { ReactElement } from 'react';\r\nimport { ChatMessage } from '../../../chat';\r\n\r\nexport type TMultipleChoiceMessageOption<OptionProps> = {\r\n label: string;\r\n taskTitle: 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 axios from 'axios';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';\r\nimport { ResponseStream } from '../stream/ResponseStream';\r\nimport { action, makeObservable, observable } from 'mobx';\r\n\r\ntype RoutinesGenerationState = {\r\n isLoading: boolean;\r\n progress: number;\r\n};\r\n\r\ntype TPollProgress = {\r\n message: string;\r\n progress: number;\r\n debug: string;\r\n streamPart?: string;\r\n};\r\n\r\nexport type TPollRoutineResult = {\r\n status: string;\r\n payload: unknown | TPollProgress;\r\n};\r\n\r\nexport type TGenerateFromImage = {\r\n base64: string;\r\n description: string;\r\n};\r\n\r\nexport type TRoutineCompletion = Partial<{\r\n images: TGenerateFromImage[];\r\n parameters: Record<string, string>;\r\n stream: ResponseStream;\r\n}> & {\r\n routineName: string;\r\n};\r\n\r\nfunction isPollProgress(\r\n payload: unknown | TPollProgress,\r\n): payload is TPollProgress {\r\n return (payload as TPollProgress)?.progress !== undefined;\r\n}\r\n\r\nexport class RoutinesGeneration {\r\n public audioRecorder = new AudioRecorder();\r\n private routineId: string = '';\r\n public state: RoutinesGenerationState = {\r\n isLoading: false,\r\n progress: 0,\r\n };\r\n\r\n public constructor() {\r\n makeObservable(this, {\r\n completion: action,\r\n state: observable,\r\n stop: action,\r\n transcribeAudio: action,\r\n });\r\n }\r\n\r\n private checkCanGenerate() {\r\n if (this.state.isLoading) {\r\n throw new Error('Cannot queue two simultaneous generations');\r\n }\r\n\r\n this.state.isLoading = true;\r\n }\r\n\r\n public async pollRoutine<T>(routineId: string, stream?: ResponseStream) {\r\n this.routineId = routineId;\r\n this.state.isLoading = true;\r\n return this.internalPollRoutine<T>(stream);\r\n }\r\n\r\n private async internalPollRoutine<T>(stream?: ResponseStream) {\r\n while (this.state.isLoading) {\r\n const pollResult = await this.callRoutinePoll(this.routineId);\r\n if (isPollProgress(pollResult.payload)) {\r\n try {\r\n const res = JSON.parse(pollResult.payload.debug) as string[];\r\n if (res.length > 0) {\r\n res.forEach((c) => {\r\n console.log(JSON.parse(c));\r\n });\r\n }\r\n\r\n if (pollResult.payload.streamPart && stream) {\r\n stream.emit('part', pollResult.payload.streamPart);\r\n }\r\n this.state.progress = pollResult.payload.progress;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n } else if (pollResult.status === 'FINISHED') {\r\n this.resetLoading();\r\n return pollResult.payload as T;\r\n } else if (pollResult.status === 'ERROR') {\r\n this.resetLoading();\r\n throw new Error(pollResult.payload as string);\r\n } else {\r\n this.resetLoading();\r\n throw new Error('Wrong poll response');\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callAudioTranscription(\r\n audio: Blob,\r\n ): ReturnType<RoutinesGeneration['callRoutineStart']> {\r\n const url = makeApiaUrl({\r\n action: 'routineStart',\r\n routine: 'transcription/Transcribe',\r\n });\r\n\r\n const response = await axios.post(url, audio.arrayBuffer(), {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream',\r\n },\r\n });\r\n\r\n const result = await parseSuccessfulResponse<{\r\n orchestrator: { routineId: string };\r\n }>(response, '');\r\n\r\n if (result?.orchestrator) {\r\n return result;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callRoutinePoll(\r\n routineId: string,\r\n ): Promise<TPollRoutineResult> {\r\n const result = await ApiaApi.post<{ orchestrator: string }>(\r\n makeApiaUrl({\r\n action: 'routinePoll',\r\n routineId,\r\n }),\r\n );\r\n\r\n if (result?.data?.orchestrator) {\r\n return JSON.parse(result.data.orchestrator) as TPollRoutineResult;\r\n } else {\r\n throw new Error('Poll failed');\r\n }\r\n }\r\n\r\n protected async callRoutineStart(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const result = await ApiaApi.post<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStart',\r\n routine: routineName,\r\n }),\r\n {\r\n postData: {\r\n images: JSON.stringify(images),\r\n ...parameters,\r\n },\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n return result?.data || null;\r\n }\r\n\r\n private async executeRoutine<T>(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n stream?: ResponseStream,\r\n ): Promise<T | null> {\r\n this.checkCanGenerate();\r\n\r\n try {\r\n const result = await this.callRoutineStart(\r\n routineName,\r\n parameters,\r\n images,\r\n );\r\n\r\n if (result?.orchestrator?.routineId !== undefined) {\r\n this.routineId = result?.orchestrator.routineId;\r\n\r\n return this.internalPollRoutine<T>(stream);\r\n } else {\r\n throw new Error('Cannot get routine id');\r\n }\r\n } catch (e) {\r\n this.resetLoading();\r\n throw e;\r\n }\r\n }\r\n\r\n private resetLoading() {\r\n this.state.isLoading = false;\r\n this.state.progress = 0;\r\n }\r\n\r\n public async completion<T>(params: TRoutineCompletion) {\r\n return this.executeRoutine<T>(\r\n params.routineName,\r\n params.parameters ?? {},\r\n params.images ?? [],\r\n params.stream,\r\n );\r\n }\r\n\r\n public stop() {\r\n this.resetLoading();\r\n ApiaApi.get<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStop',\r\n routineId: this.routineId,\r\n }),\r\n );\r\n }\r\n\r\n public async transcribeAudio(audio: Blob) {\r\n const result = await this.callAudioTranscription(audio);\r\n\r\n if (result) {\r\n this.state.isLoading = true;\r\n if (result?.orchestrator?.routineId) {\r\n this.routineId = result?.orchestrator?.routineId;\r\n return await this.internalPollRoutine<{\r\n transcription: string;\r\n }>();\r\n }\r\n }\r\n\r\n throw new Error('Something went wrong while transcribing the audio');\r\n }\r\n}\r\n","import { TActionDispatcher, TActionResult } from '@apia/dashboard-controller';\r\nimport {\r\n RoutinesGeneration,\r\n TPollRoutineResult,\r\n TGenerateFromImage,\r\n} from './RoutinesGeneration';\r\n\r\nexport class DashboardsRoutinesGeneration extends RoutinesGeneration {\r\n constructor(protected dispatcher: TActionDispatcher) {\r\n super();\r\n }\r\n\r\n private blobToBase64(audio: Blob) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n if (reader.result && typeof reader.result === 'string') {\r\n const base64 = reader.result.split(',')[1];\r\n resolve(base64);\r\n } else {\r\n reject(new Error('Could not convert Blob to base64'));\r\n }\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(audio);\r\n });\r\n }\r\n\r\n protected async callAudioTranscription(\r\n audio: Blob,\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const audioBase64 = await this.blobToBase64(audio);\r\n const result = (await this.dispatcher({\r\n action: 'transcription',\r\n audioBase64,\r\n })) as TActionResult<{\r\n orchestrator: {\r\n routineId: string;\r\n };\r\n }>;\r\n\r\n return result?.data || null;\r\n }\r\n\r\n protected async callRoutinePoll(\r\n routineId: string,\r\n ): Promise<TPollRoutineResult> {\r\n const result = (await this.dispatcher({\r\n action: 'routinePoll',\r\n routineId,\r\n })) as TActionResult<{ orchestrator: string }>;\r\n\r\n if (result?.data?.orchestrator) {\r\n const parsed = JSON.parse(result.data.orchestrator) as TPollRoutineResult;\r\n\r\n return parsed;\r\n }\r\n\r\n throw new Error('Poll failed');\r\n }\r\n\r\n protected async callRoutineStart(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const result = (await this.dispatcher({\r\n action: 'routineStart',\r\n routine: routineName,\r\n ...parameters,\r\n images,\r\n })) as TActionResult<{\r\n orchestrator: {\r\n routineId: string;\r\n };\r\n }>;\r\n\r\n return result?.data || null;\r\n }\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\n\r\nexport type StreamBlock = { type: string; description: string };\r\n\r\nexport type ResponseStreamEvents = {\r\n block: StreamBlock;\r\n part: string;\r\n};\r\n\r\nexport type ResponseStreamBlock = { type: string; content: string; id: string };\r\n\r\nexport class ResponseStream<\r\n T extends ResponseStreamEvents = ResponseStreamEvents,\r\n> extends EventEmitter<T> {\r\n private buffer: string = '';\r\n private isRunning = false;\r\n private locked = false;\r\n public maxCompletionTime = 150; // ms\r\n private minPartSize = 2;\r\n private partSize = 2;\r\n private timing = 5; // ms\r\n private waiting: string[] = [];\r\n\r\n private calculatePartSize() {\r\n const totalSize =\r\n this.buffer.length +\r\n this.waiting.reduce<number>((a, b) => a + b.length, 0);\r\n\r\n this.partSize = Math.max(\r\n this.minPartSize,\r\n totalSize * (this.timing / this.maxCompletionTime),\r\n );\r\n }\r\n\r\n emit<K extends keyof T>(ev: K, data: T[K]): void {\r\n if (ev === 'part') {\r\n let chunk = data as string;\r\n\r\n const blockMatches = chunk.matchAll(\r\n /<BLOCK-START type=\"([^\"]+)\">(.+?)<\\/BLOCK-END type=\"\\1\">/g,\r\n );\r\n\r\n for (const match of blockMatches) {\r\n this.emit('block', { description: match[2], type: match[1] });\r\n chunk = chunk.replaceAll(match[0], '');\r\n }\r\n\r\n if (this.locked) {\r\n this.waiting.push(chunk);\r\n } else {\r\n this.buffer += chunk;\r\n }\r\n this.calculatePartSize();\r\n this.run();\r\n } else {\r\n super.emit(ev, data);\r\n }\r\n }\r\n\r\n run() {\r\n if (!this.isRunning) {\r\n this.isRunning = true;\r\n const interval = setInterval(() => {\r\n this.locked = true;\r\n\r\n const choosedSize = Math.min(this.buffer.length, this.partSize);\r\n\r\n const part = this.buffer.slice(0, choosedSize);\r\n this.buffer = this.buffer.slice(choosedSize);\r\n\r\n while (this.waiting.length > 0) {\r\n const part = this.waiting.shift();\r\n if (part) {\r\n this.buffer += part;\r\n }\r\n }\r\n this.locked = false;\r\n if (part) {\r\n super.emit('part', part);\r\n } else {\r\n this.isRunning = false;\r\n clearInterval(interval);\r\n }\r\n }, this.timing);\r\n }\r\n }\r\n}\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { uniqueId } from 'lodash-es';\r\n\r\nexport type RetrievedImage = {\r\n base64: string;\r\n path: string;\r\n};\r\n\r\nexport type GetImageSize = '256x256' | '512x512' | '1024x1024';\r\n\r\nexport async function getImageFromGpt({\r\n prompt,\r\n ...props\r\n}: {\r\n prompt: string;\r\n size?: GetImageSize;\r\n model: string;\r\n}): Promise<RetrievedImage | null> {\r\n const res = await ApiaApi.post<{ image: string }>(\r\n makeApiaUrl({\r\n action: 'generateImage',\r\n ...props,\r\n }),\r\n {\r\n postData: {\r\n prompt,\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n if (res?.data)\r\n return {\r\n base64: res.data.image as any as string,\r\n path: `${uniqueId()}.png`,\r\n };\r\n\r\n return null;\r\n}\r\n\r\nexport async function getImageFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n }>,\r\n): Promise<RetrievedImage | null> {\r\n return (\r\n (await getImagesFromDisk({ ...inputProps, multiple: 'false' }))![0] ?? null\r\n );\r\n}\r\n\r\nexport function getImagesFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n multiple: string;\r\n }>,\r\n): Promise<RetrievedImage[]> {\r\n return new Promise<RetrievedImage[]>((resolve) => {\r\n const input = document.createElement('input');\r\n input.accept = 'image/*';\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n Object.assign(input, inputProps);\r\n\r\n document.body.append(input);\r\n\r\n input.addEventListener('change', (event) => {\r\n const target = event?.target as HTMLInputElement;\r\n if (!target?.files) return;\r\n\r\n const retrievedImages: (RetrievedImage | null)[] = [];\r\n const sources = [...(target.files ?? [])];\r\n\r\n const checkResolve = () => {\r\n if (sources.length === retrievedImages.length) {\r\n resolve(retrievedImages.filter((c): c is RetrievedImage => !!c));\r\n }\r\n };\r\n\r\n sources.forEach((file) => {\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = function (e) {\r\n const binary = (e.target?.result as string)?.split(',')[1];\r\n input.remove();\r\n retrievedImages.push({\r\n base64: binary,\r\n path: file.name,\r\n });\r\n\r\n checkResolve();\r\n };\r\n reader.readAsDataURL(file);\r\n } else {\r\n retrievedImages.push(null);\r\n }\r\n\r\n checkResolve();\r\n });\r\n });\r\n input.click();\r\n });\r\n}\r\n","import { IconButton } from '@apia/components';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const ImageIcon = ({\r\n deletable,\r\n onClick,\r\n onRemove,\r\n src,\r\n}: {\r\n deletable: boolean;\r\n onClick: () => unknown;\r\n onRemove: () => unknown;\r\n src: string;\r\n}) => {\r\n return (\r\n <Box className=\"image_preview\">\r\n {deletable && (\r\n <IconButton icon=\"Close\" size=\"Xs\" iconSize=\"Xs\" onClick={onRemove} />\r\n )}\r\n <img src={src} onClick={onClick} />\r\n </Box>\r\n );\r\n};\r\n","export function getSrcFromBase64(base64: string) {\r\n return `data:image/jpg;base64,${base64}`;\r\n}\r\n","import {\r\n ApiaUtil,\r\n IconButton,\r\n SortableList,\r\n SortableListItem,\r\n} from '@apia/components';\r\nimport { Box, getVariant, Textarea } from '@apia/theme';\r\nimport { makeAutoObservable, toJS } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { ImageIcon } from './ImageIcon';\r\nimport { getSrcFromBase64 } from '../ImageBinaryField/getImageSrcString';\r\nimport { getImagesFromDisk } from '../ImageBinaryField/getImage';\r\n\r\nexport type TGenerateFromImage = {\r\n base64: string;\r\n description: string;\r\n};\r\n\r\ntype TStoredImage = TGenerateFromImage & { id: string };\r\n\r\nclass ImagesStore {\r\n images: Map<string, TStoredImage> = new Map();\r\n selectedId = '';\r\n\r\n constructor(\r\n images: TGenerateFromImage[],\r\n public multiple: boolean,\r\n ) {\r\n this.images = new Map(\r\n images.map((c) => {\r\n const id = uniqueId();\r\n return [id, { ...c, id }];\r\n }),\r\n );\r\n this.selectedId = this.images.values().next().value?.id || '';\r\n makeAutoObservable(this);\r\n }\r\n}\r\n\r\nconst GetImagesDescription = observer(({ store }: { store: ImagesStore }) => {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <Box\r\n className=\"images_description_generator\"\r\n {...getVariant('layout.design.projectAnalysis.imagesLoader')}\r\n >\r\n <Box className=\"images_sort_wrapper\">\r\n <SortableList\r\n onSortChange={(ev) => {\r\n store.images = new Map(\r\n ev.map((c) => [\r\n c.props.id,\r\n c.props.additionalProps as TStoredImage,\r\n ]),\r\n );\r\n }}\r\n >\r\n {[...store.images].map(([k, c]) => (\r\n <SortableListItem additionalProps={c} id={c.id} key={c.id}>\r\n <ImageIcon\r\n deletable={store.multiple}\r\n onClick={() => {\r\n store.selectedId = c.id;\r\n }}\r\n onRemove={() => {\r\n store.images.delete(k);\r\n }}\r\n src={getSrcFromBase64(c.base64 ?? '')}\r\n />\r\n </SortableListItem>\r\n ))}\r\n </SortableList>\r\n </Box>\r\n <Box className=\"image_editor\">\r\n <Box className=\"image_preview\">\r\n {store.images.get(store.selectedId) && (\r\n <img\r\n src={getSrcFromBase64(\r\n store.images.get(store.selectedId)!.base64 ?? '',\r\n )}\r\n />\r\n )}\r\n </Box>\r\n <Box className=\"image_description\">\r\n <Textarea\r\n autoFocus\r\n disabled={!store.images.get(store.selectedId)}\r\n onChange={(ev) => {\r\n const image = store.images.get(store.selectedId);\r\n if (image) image.description = ev.target.value;\r\n }}\r\n value={store.images.get(store.selectedId)?.description}\r\n />\r\n {store.multiple && (\r\n <IconButton\r\n icon=\"Attach\"\r\n onClick={() => {\r\n getImagesFromDisk({ multiple: 'true' }).then((res) => {\r\n res.forEach((c) => {\r\n const id = uniqueId();\r\n store.images.set(id, {\r\n base64: c.base64,\r\n description: '',\r\n id,\r\n });\r\n });\r\n });\r\n }}\r\n size=\"Md\"\r\n iconSize=\"Sm\"\r\n variant=\"icon-only\"\r\n />\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n\r\nexport function getImagesWithDescription({\r\n multiple,\r\n}: {\r\n multiple?: boolean;\r\n}): Promise<TGenerateFromImage[]> {\r\n return new Promise((resolve) => {\r\n getImagesFromDisk({ multiple: multiple ? 'true' : undefined }).then(\r\n (images) => {\r\n const store = new ImagesStore(\r\n images.map((c) => ({\r\n base64: c.base64,\r\n description: '',\r\n })),\r\n multiple || false,\r\n );\r\n\r\n ApiaUtil.instance.modals.open({\r\n children: <GetImagesDescription store={store} />,\r\n initialFocusGetter(modalInnerRef) {\r\n return modalInnerRef.querySelector<HTMLElement>('textarea');\r\n },\r\n onConfirm: () => {\r\n resolve([...toJS(store.images).values()]);\r\n },\r\n onCancel() {\r\n resolve([]);\r\n },\r\n size: 'xxxl-fixed',\r\n noHeader: true,\r\n });\r\n },\r\n );\r\n });\r\n}\r\n","import { FilterDTO } from '@apia/components';\r\nimport {} from '@apia/components/src/components';\r\nimport { createContext, FC } from 'react';\r\nimport { TReference } from '../../chat';\r\n\r\nexport type TSearchListItem = {\r\n content: string;\r\n isExternal: boolean;\r\n link: string;\r\n title: string;\r\n references: TReference[];\r\n};\r\n\r\nexport interface ProcessingUnit {\r\n visualizationType: TSearchMode;\r\n content: string;\r\n references: TReference[];\r\n isExternal: boolean;\r\n}\r\n\r\nexport interface ListingProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'list';\r\n title: string;\r\n link: string;\r\n}\r\n\r\nexport interface ChatProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'chat';\r\n}\r\n\r\nexport const ViewRendererContext = createContext<ISemanticSearchViewController>(\r\n {} as any,\r\n);\r\n\r\nexport type TSearchMode = 'list' | 'chat' | 'none';\r\n\r\nexport interface ISemanticSearchViewController {\r\n state: {\r\n filters: Record<string, FilterDTO>;\r\n filtersOpen: boolean;\r\n isLoading: boolean;\r\n mode: TSearchMode;\r\n searchString: string;\r\n };\r\n\r\n ResultsRenderer: FC;\r\n clearHistory(): Promise<void>;\r\n search(str?: string): void;\r\n toggleFiltersOpen(): void;\r\n}\r\n\r\nexport type TResponseData = {\r\n result: string;\r\n success: string;\r\n streaming: boolean;\r\n failed?: boolean;\r\n messageFooter?: string;\r\n hideFeedback?: string;\r\n};\r\n\r\nexport interface ISearchResultsController<P extends ProcessingUnit> {\r\n state: {\r\n results: P[];\r\n };\r\n\r\n beforeSearch(props?: object): void;\r\n afterSearch(props?: object): void;\r\n\r\n clear(): void;\r\n\r\n processResults(\r\n qryString: string,\r\n results: ProcessingUnit[],\r\n responseData?: TResponseData,\r\n ): void;\r\n\r\n Component: FC;\r\n}\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { ResponseStream, ResponseStreamEvents } from './ResponseStream';\r\nimport { decodeBase64ToUtf8 } from '@apia/util';\r\n\r\nexport type PollRepsonse = {\r\n closed: string;\r\n part: string;\r\n failed: string;\r\n};\r\n\r\nexport type PollerEvents = ResponseStreamEvents & { close: null; error: null };\r\n\r\nexport class StreamServicePoller {\r\n closed = true;\r\n stream = new ResponseStream<PollerEvents>();\r\n\r\n on<K extends keyof PollerEvents>(\r\n ev: K,\r\n cb: (ev: PollerEvents[K]) => unknown,\r\n ) {\r\n return this.stream.on(ev, cb);\r\n }\r\n\r\n async start(token: string) {\r\n this.closed = false;\r\n try {\r\n while (!this.closed) {\r\n const res = await ApiaApi.post<PollRepsonse>(\r\n makeApiaUrl({\r\n ajaxUrl: 'apia.execution.StreamAction.run',\r\n action: 'poll',\r\n streamToken: token,\r\n }),\r\n );\r\n if (!res) {\r\n this.closed = true;\r\n this.stream.emit('error', null);\r\n }\r\n\r\n if (res?.data?.part) {\r\n this.stream.emit('part', decodeBase64ToUtf8(res.data.part));\r\n }\r\n\r\n if (res?.data?.closed === 'true') {\r\n this.closed = true;\r\n this.stream.emit('close', null);\r\n }\r\n\r\n if (res?.data?.failed === 'true') {\r\n this.stream.emit('error', null);\r\n }\r\n }\r\n } finally {\r\n this.closed = true;\r\n }\r\n }\r\n}\r\n\r\n/*\r\nussage:\r\n\r\nconst poller = new StreamServicePoller();\r\n\r\npoller.on('block', (block) => {\r\n console.log({ block });\r\n });\r\n poller.on('part', (part) => {\r\n console.log({ part });\r\n });\r\n poller.on('close', () => {\r\n console.log('Terminé de stemear!');\r\n });\r\n \r\n poller.start('mytokenquerecibidelserver');\r\n*/\r\n"],"names":["__publicField","f","TTT","e","part"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/semanticSearch/SearchController/objects/SemanticSearchReference/Component.tsx","../src/semanticSearch/SearchController/objects/SemanticSearchReference/index.tsx","../src/semanticSearch/SearchController/index.tsx","../src/chat/AutoscrollContainer.tsx","../src/chat/ChatController/components/ChatMessage.tsx","../src/chat/ChatController/components/FileAttachment.tsx","../src/chat/ChatController/components/Attachments.tsx","../src/chat/ChatController/components/MessageBlock.tsx","../src/chat/ChatController/components/MessageBlocks.tsx","../src/chat/ChatController/components/Message.tsx","../src/chat/ChatController/components/History.tsx","../src/chat/ChatController/util.ts","../src/chat/ChatController/components/TextArea.tsx","../src/chat/ChatController/CameraController.tsx","../src/chat/ChatController/ChatController.tsx","../src/chat/FloatingChatController.tsx","../src/chat/ChatController/StreamMessage.ts","../src/chat/ChatController/components/Ellipsis.tsx","../src/chat/ChatController/components/Header.tsx","../src/chat/ChatController/components/rate.tsx","../src/chat/ChatController/components/MessageBody.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx","../src/routines/RoutinesGeneration.ts","../src/routines/DashboardRoutinesGeneration.ts","../src/stream/ResponseStream.ts","../src/components/documents/ImageBinaryField/getImage.ts","../src/components/documents/UploadModal/ImageIcon.tsx","../src/components/documents/ImageBinaryField/getImageSrcString.ts","../src/components/documents/UploadModal/getImagesWithDescription.tsx","../src/semanticSearch/ViewController/types.ts","../src/stream/StreamServicePoller.ts"],"sourcesContent":["import { Box } from '@apia/theme';\r\nimport { SemanticSearchReference } from '.';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const Component = observer(\r\n (props: { instance: SemanticSearchReference }) => {\r\n return (\r\n <Box>\r\n <a href={props.instance.state.link}>{props.instance.state.title}</a>\r\n <Box>{props.instance.state.body}</Box>\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { Component } from './Component';\r\n\r\n/*\r\n * This class is used to store the state of a search result record.\r\n */\r\ntype TSearchResultState = {\r\n title: string;\r\n body: string;\r\n link: string;\r\n};\r\n\r\nexport class SemanticSearchReference {\r\n state: TSearchResultState = { title: '', body: '', link: '' };\r\n\r\n public constructor(props: TSearchResultState) {\r\n this.state = props;\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n Component = () => (\r\n <>\r\n (<Component instance={this} />)\r\n </>\r\n );\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { SemanticSearchReference } from './objects/SemanticSearchReference';\r\nimport { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { FiltersStore } from '@apia/components';\r\n\r\n/**\r\n * @class SearchController:\r\n * - mobx Controller for the semantic search logic\r\n * - search for a term and get the results. This controller must be used\r\n * to maintain the state of the search string and of the results given a search string\r\n */\r\nclass SearchController {\r\n static instance = new SearchController();\r\n\r\n state: {\r\n queryString: string;\r\n results: SemanticSearchReference[];\r\n isLoading: boolean;\r\n disabled: boolean;\r\n } = { queryString: '', results: [], isLoading: false, disabled: false };\r\n\r\n protected constructor() {\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n public async search(selectedId: string) {\r\n const filters = await FiltersStore.getFiltersById(\r\n Number.parseInt(selectedId),\r\n );\r\n FiltersStore.setFilters(filters, 'U');\r\n SearchController.instance.state.isLoading = true;\r\n const response = await ApiaApi.post<{ results: SemanticSearchReference[] }>(\r\n makeApiaUrl({\r\n action: 'search',\r\n semSearchId: selectedId,\r\n }),\r\n {\r\n postData: {\r\n q: SearchController.instance.state.queryString,\r\n filters: JSON.stringify(FiltersStore.getFiltersAsFilterValue('U')),\r\n },\r\n postDataTreatement: 'stringify',\r\n stringifyOptions: { arrayFormat: 'repeat' },\r\n },\r\n );\r\n if (response?.data?.results) {\r\n this.setReferences(response.data.results);\r\n }\r\n this.state.isLoading = false;\r\n }\r\n\r\n protected setReferences(results: SemanticSearchReference[]) {\r\n if (typeof results === 'string' && results) {\r\n results = JSON.parse(results as any as string);\r\n }\r\n SearchController.instance.state.results = results.map((x) =>\r\n x instanceof SemanticSearchReference ? x : new SemanticSearchReference(x),\r\n );\r\n SearchController.instance.state.disabled = false;\r\n }\r\n}\r\n\r\nexport default SearchController;\r\n","import { findScrollContainer } from '@apia/util';\r\nimport React, { useRef, useEffect, PropsWithChildren } from 'react';\r\n\r\ninterface AutoscrollContainerProps {\r\n /** How close (in px) to the bottom you have to be *when scrolling down*\r\n * for auto-scroll to kick back in. */\r\n threshold?: number;\r\n className?: string;\r\n}\r\n\r\nexport const AutoscrollContainer: React.FC<\r\n PropsWithChildren<AutoscrollContainerProps>\r\n> = ({ children, threshold = 150, className }) => {\r\n const wrapperRef = useRef<HTMLDivElement>(null);\r\n // whether new mutations should stick us to the bottom\r\n const autoScrollEnabled = useRef(true);\r\n\r\n useEffect(() => {\r\n const wrapper = wrapperRef.current;\r\n if (!wrapper) return;\r\n\r\n // 1) find the real scrolling element\r\n const scrollEl = findScrollContainer(wrapper)!;\r\n\r\n // helper to test if we're \"close enough\" to the bottom\r\n const isNearBottom = () =>\r\n scrollEl.scrollHeight - (scrollEl.scrollTop + scrollEl.clientHeight) <=\r\n threshold;\r\n\r\n // 2) wheel = user-initiated scroll via mouse/touchpad\r\n const onWheel = (e: WheelEvent) => {\r\n if (e.deltaY < 0) {\r\n // wheeling *up* => disable auto-scroll immediately\r\n autoScrollEnabled.current = false;\r\n } else if (e.deltaY > 0 && isNearBottom()) {\r\n // wheeling *down* & we're near bottom => re-enable\r\n autoScrollEnabled.current = true;\r\n }\r\n };\r\n\r\n // 3) fallback scroll listener (e.g. arrow keys, programmatic)\r\n const onScroll = () => {\r\n if (isNearBottom()) {\r\n autoScrollEnabled.current = true;\r\n }\r\n };\r\n\r\n function enable() {\r\n autoScrollEnabled.current = true;\r\n }\r\n\r\n scrollEl.addEventListener('wheel', onWheel, { passive: true });\r\n scrollEl.addEventListener('scroll', onScroll, { passive: true });\r\n document.addEventListener('enableAutoScroll', enable);\r\n\r\n // 4) initial jump to bottom\r\n scrollEl.scrollTo({ top: scrollEl.scrollHeight, behavior: 'smooth' });\r\n\r\n // 5) observe any DOM changes under our wrapper\r\n const mo = new MutationObserver(() => {\r\n if (autoScrollEnabled.current) {\r\n scrollEl.scrollTo({ top: scrollEl.scrollHeight, behavior: 'smooth' });\r\n }\r\n });\r\n mo.observe(wrapper, { childList: true, subtree: true });\r\n\r\n return () => {\r\n scrollEl.removeEventListener('wheel', onWheel);\r\n scrollEl.removeEventListener('enableAutoScroll', enable);\r\n scrollEl.removeEventListener('scroll', onScroll);\r\n mo.disconnect();\r\n };\r\n }, [threshold]);\r\n\r\n return (\r\n <div ref={wrapperRef} className={`${className || ''} autoscrollContainer`}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n","import { ReactNode } from 'react';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { IAttachment, TMessageType } from '../types';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ChatMessage {\r\n id: number;\r\n state: {\r\n message: ReactNode;\r\n messageType: TMessageType;\r\n attachments: IAttachment[];\r\n reference: ReactNode;\r\n };\r\n\r\n get message() {\r\n return this.state.message;\r\n }\r\n get messageType() {\r\n return this.state.messageType;\r\n }\r\n get attachments() {\r\n return this.state.attachments;\r\n }\r\n get reference() {\r\n return this.state.reference;\r\n }\r\n set message(value) {\r\n this.state.message = value;\r\n }\r\n set messageType(value) {\r\n this.state.messageType = value;\r\n }\r\n set attachments(value) {\r\n this.state.attachments = value;\r\n }\r\n set reference(value) {\r\n this.state.reference = value;\r\n }\r\n\r\n constructor(\r\n message: ReactNode = '',\r\n messageType: TMessageType = 'user',\r\n attachments: IAttachment[] = [],\r\n reference: ReactNode = null,\r\n ) {\r\n this.state = { message, messageType, attachments, reference };\r\n\r\n this.id = maxId++;\r\n if (messageType === 'response') this.messageType = 'system';\r\n if (typeof message === 'string') this.message = message;\r\n\r\n makeObservable(this, {\r\n state: observable,\r\n });\r\n }\r\n\r\n clone = () =>\r\n new ChatMessage(\r\n this.message,\r\n this.messageType,\r\n this.attachments.map((x) => {\r\n return { ...x };\r\n }),\r\n this.reference,\r\n );\r\n\r\n removeAttachment(attachment: IAttachment) {\r\n this.attachments = this.attachments.filter(\r\n (current) => current !== attachment,\r\n );\r\n }\r\n addAttachmentDescription(attachment: IAttachment, description: string) {\r\n const a = this.attachments.find((current) => current === attachment);\r\n if (a) {\r\n a.description = description;\r\n }\r\n }\r\n setMessageType(type: TMessageType) {\r\n this.messageType = type;\r\n }\r\n}\r\n","import { Box, Label } from '@apia/theme';\r\nimport { IAttachment } from '../types';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { getLabel } from '@apia/util';\r\nimport { Collector } from '@apia/validations';\r\nimport { ApiaUtil, FileCard } from '@apia/components';\r\n\r\nexport const FileAttachment = observer(\r\n ({\r\n attachment,\r\n onAddDescription,\r\n onRemove,\r\n }: {\r\n attachment: IAttachment;\r\n onAddDescription?: (a: IAttachment, d: string) => unknown;\r\n onRemove?: () => unknown;\r\n }) => {\r\n const { ref } = ApiaUtil.instance.tooltips.useHover({\r\n preferredOrientationX: 'left',\r\n preferredOrientationY: 'top',\r\n minSize: {\r\n width: 200,\r\n height: 400,\r\n },\r\n attachToMousePosition: true,\r\n closeOnMouseLeaveAttachedElement: true,\r\n children: (\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexDirection: 'column',\r\n }}\r\n >\r\n <h1>{attachment.name}</h1>\r\n <img src={attachment.base64}></img>\r\n {attachment.description && <Label>{attachment.description}</Label>}\r\n </Box>\r\n ),\r\n });\r\n\r\n return (\r\n <FileCard\r\n ref={ref}\r\n // className=\"file_box__icon\"\r\n name={attachment.name}\r\n handleClose={onRemove}\r\n additionalButtons={\r\n onAddDescription\r\n ? [\r\n {\r\n icon: 'Pencil',\r\n onClick: () => {\r\n const collector = new Collector();\r\n collector.add(\r\n new collector.fields.textarea(\r\n 'desc',\r\n getLabel('lblDes').text,\r\n { initialValue: attachment.description },\r\n ),\r\n );\r\n collector.show({\r\n onConfirm: (ev): boolean => {\r\n if (ev) {\r\n onAddDescription(attachment, ev.desc! as string);\r\n }\r\n return true;\r\n },\r\n title: getLabel('btnAddComment').text,\r\n });\r\n },\r\n variant: 'icon-only',\r\n },\r\n ]\r\n : []\r\n }\r\n />\r\n );\r\n },\r\n);\r\n","import { Box, getVariant } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { IAttachment } from '../types';\r\nimport { FileAttachment } from './FileAttachment';\r\n\r\nexport const Attachments = observer(\r\n ({\r\n attachments,\r\n onRemove,\r\n onAddDescription,\r\n className,\r\n }: {\r\n attachments: IAttachment[];\r\n onRemove?: (a: IAttachment) => unknown;\r\n onAddDescription?: (a: IAttachment, d: string) => unknown;\r\n className?: string;\r\n }) => {\r\n if (!attachments.length) return null;\r\n\r\n return (\r\n <Box\r\n className={`attachments ${className}`}\r\n {...getVariant('layout.common.chat.attachments')}\r\n >\r\n {attachments.map((x) => (\r\n <FileAttachment\r\n attachment={x}\r\n onRemove={onRemove ? () => onRemove(x) : undefined}\r\n onAddDescription={onAddDescription}\r\n key={x.id}\r\n />\r\n ))}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { Suspense, memo } from 'react';\r\nimport { TComponentRender } from '../types';\r\nimport { importComponent } from '@apia/components';\r\n\r\nexport const MessageBlock = memo(\r\n ({ componentData }: { componentData: TComponentRender }) => {\r\n if (typeof componentData.args === 'string') {\r\n componentData.args = JSON.parse(componentData.args);\r\n }\r\n\r\n const Component = importComponent(componentData.path);\r\n return (\r\n <Suspense fallback={null}>\r\n <Component {...componentData.args} />\r\n </Suspense>\r\n );\r\n },\r\n);\r\n","import { decodeBase64ToUtf8 } from '@apia/util';\r\nimport { TComponentRender } from '../types';\r\nimport { MessageBlock } from './MessageBlock';\r\nimport { MDRenderer } from '@apia/components';\r\nimport { Box } from '@apia/theme';\r\nimport { TDescriberBlock } from '../StreamMessage';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport type TBlockType = 'text' | 'describer';\r\n\r\nexport type TBaseStreamBlock<T extends TBlockType = TBlockType> = {\r\n blockType: T;\r\n};\r\n\r\nexport type TTextStreamBlock = TBaseStreamBlock<'text'> & { str: string };\r\nexport type TDescriberStreamBlock = TBaseStreamBlock<'describer'> & {\r\n describer: TDescriberBlock;\r\n};\r\n\r\nexport type TStreamBlock = TTextStreamBlock | TDescriberStreamBlock;\r\n\r\nexport const MessageBlocks = observer(\r\n ({ streamParts }: { streamParts: TStreamBlock[] }) => {\r\n // str viene del server en el formato indicado\r\n const parts = streamParts.map((p, i) => {\r\n if (p.blockType === 'describer') {\r\n return (\r\n <Box\r\n variant=\"layout.common.ai.semanticSearch.execution.streamBlocks\"\r\n className=\"sem_search__stream_blocks\"\r\n as=\"ul\"\r\n >\r\n {\r\n <Box\r\n variant=\"layout.common.ai.semanticSearch.execution.streamBlocks\"\r\n as=\"li\"\r\n className={`sem_search__stream_block ${p.describer.type}`}\r\n key={i}\r\n >\r\n {p.describer.content}\r\n </Box>\r\n }\r\n </Box>\r\n );\r\n } else if (p.blockType === 'text') {\r\n return p.str.split(/(!!\\[[^]+])/g).map((c) => {\r\n // Se permiten las keys con i porque esta lista no va a cambiar\r\n if (c.match(/^!!\\[[^]+]$/)) {\r\n const definition = JSON.parse(\r\n decodeBase64ToUtf8(\r\n (c.match(/^!!\\[([^]+)]$/) ?? [undefined, undefined])[1] ?? '',\r\n ),\r\n ) as TComponentRender;\r\n\r\n return (\r\n <MessageBlock key={i} componentData={definition}></MessageBlock>\r\n );\r\n } else {\r\n return <MDRenderer str={c} key={i}></MDRenderer>;\r\n }\r\n });\r\n }\r\n });\r\n return parts;\r\n },\r\n);\r\n","import { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { ReactNode } from 'react';\r\nimport { Attachments } from './Attachments';\r\nimport { IAttachment, TMessageType } from '../types';\r\nimport { MessageBlocks } from './MessageBlocks';\r\n\r\nexport const Message = observer(\r\n ({\r\n className,\r\n type,\r\n id,\r\n message,\r\n attachments,\r\n reference,\r\n }: {\r\n className?: string;\r\n type: TMessageType;\r\n id: string;\r\n message: ReactNode;\r\n attachments: IAttachment[];\r\n reference: ReactNode;\r\n }) => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history_message ${className || ''} ${type}`}\r\n key={id}\r\n >\r\n <Box\r\n className=\"history_message__content\"\r\n {...(typeof message === 'string'\r\n ? {\r\n children: (\r\n <MessageBlocks\r\n streamParts={[{ blockType: 'text', str: message }]}\r\n ></MessageBlocks>\r\n ),\r\n }\r\n : { children: message as string })}\r\n />\r\n {attachments.length > 0 && (\r\n <Attachments attachments={attachments}></Attachments>\r\n )}\r\n {reference && (\r\n <Box className=\"history_message__references\">{reference}</Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { observer } from 'mobx-react-lite';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { ChatMessage } from './ChatMessage';\r\nimport { Message } from './Message';\r\nimport { AutoscrollContainer } from '../../AutoscrollContainer';\r\n\r\nexport const History = observer(\r\n ({\r\n messages,\r\n className,\r\n }: {\r\n messages: ChatMessage[];\r\n className?: string;\r\n }) => {\r\n let currentType: string = '';\r\n\r\n return (\r\n <AutoscrollContainer className={className}>\r\n <Box\r\n {...getVariant('layout.common.chat.history')}\r\n className=\"chat_history\"\r\n >\r\n {messages.map((current, i) => {\r\n let first = false;\r\n let last = false;\r\n\r\n if (currentType !== current.messageType) {\r\n currentType = current.messageType;\r\n first = true;\r\n }\r\n\r\n if (\r\n i === messages.length - 1 ||\r\n messages[i + 1].messageType !== current.messageType\r\n ) {\r\n last = true;\r\n }\r\n\r\n return (\r\n <Message\r\n className={first ? 'first' : last ? 'last' : undefined}\r\n type={current.messageType}\r\n id={String(current.id)}\r\n attachments={current.attachments}\r\n reference={current.reference}\r\n message={current.message}\r\n />\r\n );\r\n })}\r\n </Box>\r\n </AutoscrollContainer>\r\n );\r\n },\r\n);\r\n","export function getBase64FromFile(f: File) {\r\n return ((f: File) =>\r\n new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(f);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = () => reject();\r\n }))(f);\r\n}\r\n\r\nexport function getBase64FromBlob(b: Blob) {\r\n return ((blob: Blob): Promise<string> =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => {\r\n const base64String = reader.result as string;\r\n resolve(base64String);\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(blob);\r\n }))(b);\r\n}\r\n\r\nexport function getFileExtension(name: string) {\r\n return name.split('.').at(-1);\r\n}\r\n\r\nexport function isImage(base64: string) {\r\n const imageRegex = /^data:image\\/(png|jpeg|jpg|gif|webp|bmp|tiff);base64,/;\r\n return imageRegex.test(base64);\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { Box, Form, getVariant, spacing } from '@apia/theme';\r\nimport { ChangeEvent, useRef, useState } from 'react';\r\nimport { getLabel } from '@apia/util';\r\nimport { IAttachment } from '../types';\r\nimport { getBase64FromFile } from '../util';\r\nimport {\r\n ApiaUtil,\r\n AutogrowTextarea,\r\n IconButton,\r\n TMenuItem,\r\n} from '@apia/components';\r\n\r\nexport const TextArea = observer(\r\n ({\r\n additionalOptions = [],\r\n isLoading,\r\n isRecording,\r\n disablePrevButton,\r\n disableNextButton,\r\n onSubmit,\r\n onChange,\r\n onClearHistory,\r\n onAttach,\r\n onRecord,\r\n onRecordCancel,\r\n onVideoRecord,\r\n onPrev,\r\n onNext,\r\n value,\r\n attachments,\r\n className,\r\n }: {\r\n additionalOptions?: TMenuItem[];\r\n className?: string;\r\n isLoading: boolean;\r\n isRecording: boolean;\r\n disablePrevButton: boolean;\r\n disableNextButton: boolean;\r\n onClearHistory: () => unknown;\r\n onSubmit: () => unknown;\r\n onChange: (v: string) => unknown;\r\n onAttach: (ev: IAttachment) => unknown;\r\n onRecord: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n onRecordCancel: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n onVideoRecord: () => unknown;\r\n onPrev: () => unknown;\r\n onNext: () => unknown;\r\n value: string;\r\n attachments: IAttachment[];\r\n }) => {\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n const searchControlsRef = useRef<HTMLTextAreaElement>(null);\r\n\r\n const [dragging, setDragging] = useState(false);\r\n const handleAttachments = async (ev: ChangeEvent<HTMLInputElement>) => {\r\n if (ev.target.files) {\r\n for await (const f of ev.target.files) {\r\n const base64 = await getBase64FromFile(f);\r\n onAttach({\r\n base64: base64,\r\n name: f.name,\r\n id: f.name,\r\n });\r\n }\r\n ev.target.value = '';\r\n }\r\n };\r\n const menuItemsList: TMenuItem[] = [\r\n ...((additionalOptions.length > 0\r\n ? [...additionalOptions, 'separator']\r\n : []) as TMenuItem[]),\r\n {\r\n children: getLabel('btnUpload').text,\r\n title: getLabel('btnUpload').text,\r\n icon: 'File',\r\n onClick: () => fileInputRef.current?.click(),\r\n key: '2',\r\n },\r\n {\r\n title: getLabel('lblOpenCamera').text,\r\n children: getLabel('lblOpenCamera').text,\r\n icon: 'Camera',\r\n onClick: onVideoRecord,\r\n key: '3',\r\n },\r\n 'separator',\r\n {\r\n icon: 'ArrowLeft',\r\n children: getLabel('btnAiPrevious').text,\r\n title: getLabel('btnAiPrevious').text,\r\n onClick: onPrev,\r\n disabled: disablePrevButton,\r\n key: '0',\r\n },\r\n {\r\n icon: 'ArrowRight',\r\n children: getLabel('btnAiNext').text,\r\n title: getLabel('btnAiNext').text,\r\n onClick: onNext,\r\n disabled: disableNextButton,\r\n key: '1',\r\n },\r\n 'separator',\r\n {\r\n icon: 'Trash',\r\n onClick: onClearHistory,\r\n key: '5',\r\n children: getLabel('btnAiDeleteMessages').text,\r\n title: getLabel('btnAiDeleteMessages').text,\r\n },\r\n ];\r\n 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 `invisible__attach__file`,\r\n ) as HTMLInputElement;\r\n (fileInputRef.current ?? 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 return (\r\n <Form\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n onDragEnter={handleDragEnter}\r\n onDragLeave={handleDragLeave}\r\n onSubmit={(ev) => {\r\n ev.preventDefault();\r\n onSubmit();\r\n }}\r\n className={`search_controls ${className}`}\r\n {...getVariant('layout.common.chat.form')}\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 <>\r\n <AutogrowTextarea\r\n ref={searchControlsRef}\r\n aria-label={\r\n /** TODO: Crear etiqueta para búsqueda */ 'Frase de búsqueda'\r\n }\r\n value={value}\r\n className=\"searchTextArea\"\r\n onChange={(ev) => onChange(ev.target.value)}\r\n onKeyDown={(ev) => {\r\n if (\r\n (ev.code === 'Enter' || ev.code === 'NumpadEnter') &&\r\n !ev.shiftKey\r\n ) {\r\n ev.preventDefault();\r\n (ev.target as HTMLElement)\r\n .closest('form')!\r\n .querySelector<HTMLElement>('[type=\"submit\"]')!\r\n .click();\r\n }\r\n }}\r\n sx={{\r\n resize: 'none',\r\n px: spacing(4),\r\n background: 'transparent',\r\n border: 'none',\r\n alignContent: 'center',\r\n }}\r\n />\r\n <Box className=\"chatButtons\">\r\n <IconButton\r\n className=\"ChatBarButton\"\r\n icon={isRecording ? 'Trash' : 'Ellipsis'}\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n onClick={\r\n isRecording\r\n ? onRecordCancel\r\n : (ev) => {\r\n ApiaUtil.instance.menu.open({\r\n menuProps: {\r\n anchorPoint: { x: ev.clientX, y: ev.clientY },\r\n },\r\n items: menuItemsList,\r\n });\r\n }\r\n }\r\n ></IconButton>\r\n {(value === '' && attachments.length === 0) || isRecording ? (\r\n <IconButton\r\n className={`ChatBarButton ${isRecording ? 'isRecording' : ''}`}\r\n icon={isRecording ? 'Stop' : 'Microphone'}\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n title={getLabel('lblAiRecordAudio').text}\r\n onClick={onRecord}\r\n isLoading={isLoading}\r\n disabled={isLoading && !isRecording}\r\n sx={{\r\n color: isRecording ? 'red' : undefined,\r\n }}\r\n id=\"transcribeAudio\"\r\n />\r\n ) : (\r\n <IconButton\r\n className=\"ChatBarButton\"\r\n isLoading={isLoading}\r\n icon=\"ArrowRight\"\r\n variant=\"icon-only\"\r\n iconSize=\"Sm\"\r\n title={getLabel('btnBus').title}\r\n type=\"submit\"\r\n />\r\n )}\r\n </Box>\r\n </>\r\n )}\r\n <input\r\n ref={fileInputRef}\r\n id=\"invisible__attach__file\"\r\n type=\"file\"\r\n multiple\r\n onChange={handleAttachments}\r\n sx={{ display: 'none' }}\r\n ></input>\r\n </Form>\r\n );\r\n },\r\n);\r\n","import { ApiaUtil } from '@apia/components';\r\nimport { makeObservable, observable, action } from 'mobx';\r\n\r\nexport class CameraController {\r\n state: {\r\n videoStream: MediaStream | null;\r\n isOpen: boolean;\r\n } = {\r\n videoStream: null,\r\n isOpen: false,\r\n };\r\n private currentCapture: File | null = null;\r\n\r\n private videoElement: HTMLVideoElement;\r\n\r\n constructor() {\r\n makeObservable(this, {\r\n state: observable,\r\n openCamera: action,\r\n closeCamera: action,\r\n });\r\n\r\n this.videoElement = document.createElement('video');\r\n this.videoElement.autoplay = true;\r\n this.videoElement.playsInline = true;\r\n }\r\n\r\n async openCamera() {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\r\n this.state.videoStream = stream;\r\n this.videoElement.srcObject = stream;\r\n this.state.isOpen = true;\r\n ApiaUtil.instance.modals.open({\r\n children: <this.Component></this.Component>,\r\n onConfirm: () => {\r\n this.closeCamera();\r\n },\r\n onClose: () => {\r\n this.closeCamera();\r\n },\r\n });\r\n } catch (error) {\r\n console.error('Error while accessing the camera:', error);\r\n this.state.isOpen = false;\r\n this.closeCamera();\r\n }\r\n }\r\n\r\n async closeCamera() {\r\n if (!this.videoElement.srcObject) return;\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = this.videoElement.videoWidth;\r\n canvas.height = this.videoElement.videoHeight;\r\n const ctx = canvas.getContext('2d');\r\n if (ctx)\r\n ctx.drawImage(this.videoElement, 0, 0, canvas.width, canvas.height);\r\n\r\n this.currentCapture = await new Promise<File | null>((resolve) => {\r\n canvas.toBlob((blob: Blob | null) => {\r\n if (blob) {\r\n const file = new File([blob], 'captured_image.jpg', {\r\n type: 'image/jpeg',\r\n });\r\n resolve(file);\r\n } else {\r\n this.closeCamera();\r\n }\r\n }, 'image/jpeg');\r\n }).finally(() => {\r\n this.state.videoStream?.getTracks().forEach((track) => track.stop());\r\n this.state.videoStream = null;\r\n this.videoElement.srcObject = null;\r\n this.state.isOpen = false;\r\n });\r\n }\r\n\r\n pop() {\r\n const returnFile = this.currentCapture;\r\n this.currentCapture = null;\r\n return returnFile;\r\n }\r\n\r\n Component = () => {\r\n return (\r\n <video\r\n ref={(el) => {\r\n if (el) {\r\n el.srcObject = this.videoElement.srcObject;\r\n el.autoplay = true;\r\n el.playsInline = true;\r\n }\r\n }}\r\n style={{ width: '100%', height: 'auto' }}\r\n />\r\n );\r\n };\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { ChatMessage } from './components/ChatMessage';\r\nimport { Attachments } from './components/Attachments';\r\nimport { History } from './components/History';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { TextArea as TTT } from './components/TextArea';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { CameraController } from './CameraController';\r\nimport { getBase64FromBlob, getBase64FromFile } from './util';\r\nimport {\r\n ClearHistoryCallback,\r\n IAttachment,\r\n MessageCallbackProps,\r\n MessageSubmitCallback,\r\n TChatControllerState,\r\n} from './types';\r\nimport { TMenuItem } from '@apia/components';\r\n\r\nexport class ChatController<\r\n T extends Record<string, unknown> = Record<string, unknown>,\r\n> {\r\n currentIndex = 0;\r\n state: TChatControllerState & T = {\r\n isLoading: false,\r\n canRecord: true,\r\n canAttach: true,\r\n maxAttachmentsSize: 100,\r\n messages: [],\r\n currentMessage: new ChatMessage('', 'user'),\r\n } as unknown as TChatControllerState & T;\r\n private internalAudioRecorder = new AudioRecorder();\r\n private internalCameraRecorder = new CameraController();\r\n\r\n private maxId = 0;\r\n\r\n audioRecorder = {\r\n cancelOnStop: false,\r\n start: () => {\r\n this.state.isLoading = true;\r\n this.internalAudioRecorder\r\n .start()\r\n .then(async (blob: Blob) => {\r\n if (this.audioRecorder.cancelOnStop) {\r\n this.audioRecorder.cancelOnStop = false;\r\n return;\r\n }\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: `userRecord_${this.audioRecorder.record++}.wav`,\r\n base64: await getBase64FromBlob(blob),\r\n });\r\n const currentMessage = new ChatMessage(\r\n this.state.currentMessage.message,\r\n 'user',\r\n );\r\n this.state.currentMessage.message = '';\r\n const submitMessage = this.state.currentMessage;\r\n this.state.currentMessage = currentMessage;\r\n await this.handleSubmit({\r\n message: submitMessage,\r\n eraseCurrentMessage: false,\r\n });\r\n })\r\n .finally(() => {\r\n this.state.isLoading = false;\r\n });\r\n },\r\n stop: async () => {\r\n this.internalAudioRecorder.stop();\r\n },\r\n record: 0,\r\n state: this.internalAudioRecorder.state,\r\n };\r\n\r\n constructor(\r\n props: Partial<TChatControllerState & T>,\r\n private onMessageSubmit: MessageSubmitCallback,\r\n private onClearHistory: ClearHistoryCallback,\r\n private additionalOptions?: TMenuItem[],\r\n private classNames?: {\r\n history?: string;\r\n textarea?: string;\r\n attachments?: string;\r\n },\r\n ) {\r\n this.state = Object.assign({}, this.state, props);\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n removeMessage(idx: number) {\r\n this.state.messages = this.state.messages.filter((_, i) => i !== idx);\r\n }\r\n\r\n addMessage(message: ChatMessage) {\r\n this.state.messages.push(message);\r\n this.currentIndex = this.state.messages.length;\r\n }\r\n\r\n clearHistory() {\r\n this.state.messages = [];\r\n this.onClearHistory && this.onClearHistory();\r\n }\r\n\r\n clearMessage() {\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n\r\n public removeAttachment(attachment: IAttachment) {\r\n this.state.currentMessage.removeAttachment(attachment);\r\n }\r\n\r\n private handleSubmit = async (props?: {\r\n /**\r\n * If provided, this message will be sumitted instead of the current message.\r\n */\r\n message?: ChatMessage;\r\n /**\r\n * Defaults to true\r\n */\r\n eraseCurrentMessage?: boolean;\r\n }) => {\r\n if (!this.audioRecorder.state.recording) {\r\n const currentMessage = props?.message || this.state.currentMessage;\r\n if (currentMessage.message || currentMessage.attachments.length > 0) {\r\n this.state.isLoading = true;\r\n if (props?.eraseCurrentMessage !== false) {\r\n this.state.currentMessage = new ChatMessage('', 'user');\r\n }\r\n await this.onMessageSubmit({\r\n message: currentMessage,\r\n ...this.getAdditionalProps(),\r\n });\r\n this.state.isLoading = false;\r\n }\r\n }\r\n };\r\n\r\n private isForHistory(message?: ChatMessage) {\r\n return message && message.messageType === 'user';\r\n }\r\n\r\n private canGoNext() {\r\n let condition = false;\r\n const slice = this.state.messages.slice(\r\n this.currentIndex,\r\n this.state.messages.length,\r\n );\r\n const n = slice.length;\r\n if (this.currentIndex + 1 > n) {\r\n return condition;\r\n }\r\n for (let i = 0; i < n && !condition; i++) {\r\n const current = slice[i];\r\n condition = current.messageType === 'user';\r\n }\r\n return condition;\r\n }\r\n private canGoPrev() {\r\n let condition = false;\r\n if (this.currentIndex - 1 === -1) {\r\n return condition;\r\n }\r\n for (\r\n let i = this.state.messages.slice(0, this.currentIndex).length - 1;\r\n i >= 0 && !condition;\r\n i--\r\n ) {\r\n const current = this.state.messages[i];\r\n condition = current.messageType === 'user';\r\n }\r\n return condition;\r\n }\r\n public nextMessage() {\r\n let newCurrentMessage = undefined;\r\n let i = this.currentIndex;\r\n const n = this.state.messages.length;\r\n if (n === 0 || n - 1 === i) {\r\n return;\r\n }\r\n while (!newCurrentMessage && i < n - 1) {\r\n newCurrentMessage = this.state.messages[i + 1];\r\n i++;\r\n if (this.isForHistory(newCurrentMessage)) {\r\n this.state.currentMessage = newCurrentMessage!.clone();\r\n break;\r\n } else {\r\n newCurrentMessage = undefined;\r\n }\r\n if (i === this.currentIndex) {\r\n break;\r\n }\r\n }\r\n this.currentIndex = i;\r\n }\r\n\r\n public prevMessage() {\r\n let newCurrentMessage = undefined;\r\n let i = this.currentIndex;\r\n const n = this.state.messages.length;\r\n if (n === 0 || i === 0) {\r\n return;\r\n }\r\n while (!newCurrentMessage && i > 0) {\r\n newCurrentMessage = this.state.messages[i - 1];\r\n i--;\r\n if (this.isForHistory(newCurrentMessage)) {\r\n this.state.currentMessage = newCurrentMessage!.clone();\r\n break;\r\n } else {\r\n newCurrentMessage = undefined;\r\n }\r\n if (i === this.currentIndex) {\r\n break;\r\n }\r\n }\r\n this.currentIndex = i;\r\n }\r\n\r\n protected getAdditionalProps(): Partial<MessageCallbackProps> {\r\n return {};\r\n }\r\n\r\n History = observer(() => (\r\n <History\r\n messages={this.state.messages}\r\n className={this.classNames?.history}\r\n ></History>\r\n ));\r\n\r\n Attachments = observer(() => (\r\n <Attachments\r\n attachments={this.state.currentMessage.attachments}\r\n onRemove={(a) => {\r\n this.removeAttachment(a);\r\n }}\r\n className={this.classNames?.attachments}\r\n onAddDescription={(a, ev) =>\r\n this.state.currentMessage.addAttachmentDescription(a, ev)\r\n }\r\n ></Attachments>\r\n ));\r\n\r\n TextArea = observer(() => (\r\n <TTT\r\n additionalOptions={this.additionalOptions}\r\n className={this.classNames?.textarea}\r\n value={this.state.currentMessage.message as string}\r\n isLoading={this.state.isLoading}\r\n isRecording={this.internalAudioRecorder.state.recording}\r\n disablePrevButton={!this.canGoPrev()}\r\n disableNextButton={!this.canGoNext()}\r\n onChange={(ev) => {\r\n this.state.currentMessage.message = ev;\r\n }}\r\n onSubmit={() => this.handleSubmit()}\r\n onClearHistory={() => {\r\n this.clearHistory();\r\n }}\r\n onAttach={async (ev) => {\r\n this.state.currentMessage.attachments.push({\r\n ...ev,\r\n id: String(this.maxId++),\r\n });\r\n }}\r\n onRecord={() => {\r\n !this.internalAudioRecorder.state.recording\r\n ? this.audioRecorder.start()\r\n : this.audioRecorder.stop();\r\n }}\r\n onRecordCancel={async () => {\r\n if (this.internalAudioRecorder.state.recording) {\r\n this.audioRecorder.cancelOnStop = true;\r\n await this.audioRecorder.stop();\r\n }\r\n }}\r\n onVideoRecord={async () => {\r\n !this.internalCameraRecorder.state.isOpen &&\r\n (await this.internalCameraRecorder.openCamera());\r\n await new Promise<void>((resolve, _) => {\r\n const checkCapture = async () => {\r\n if (!this.internalCameraRecorder.state.isOpen) {\r\n const capture = this.internalCameraRecorder.pop();\r\n if (capture) {\r\n this.state.currentMessage.attachments.push({\r\n id: String(this.maxId++),\r\n name: capture.name,\r\n base64: await getBase64FromFile(capture),\r\n });\r\n return resolve();\r\n }\r\n } else {\r\n requestAnimationFrame(checkCapture);\r\n }\r\n };\r\n\r\n checkCapture();\r\n });\r\n }}\r\n onPrev={() => {\r\n this.prevMessage();\r\n }}\r\n onNext={() => {\r\n this.nextMessage();\r\n }}\r\n attachments={this.state.currentMessage.attachments}\r\n />\r\n ));\r\n\r\n Renderer = () => (\r\n <Box\r\n {...getVariant('layout.common.chat.controller')}\r\n className=\"chat_controller\"\r\n >\r\n <this.History />\r\n <this.Attachments />\r\n <this.TextArea />\r\n </Box>\r\n );\r\n}\r\n","import { ChatController } from './ChatController/ChatController';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { action, makeObservable } from 'mobx';\r\nimport {\r\n ClearHistoryCallback,\r\n MessageSubmitCallback,\r\n TChatControllerState,\r\n} from './ChatController/types';\r\nimport { ApiaUtil, IconButton, TMenuItem } from '@apia/components';\r\n\r\nexport class FloatingChatController extends ChatController<{\r\n isWindowOpen: boolean;\r\n}> {\r\n private modalTitle;\r\n constructor(props: {\r\n props: Partial<\r\n TChatControllerState & {\r\n isWindowOpen: boolean;\r\n }\r\n >;\r\n onMessageSubmit: MessageSubmitCallback;\r\n onClearHistory: ClearHistoryCallback;\r\n modalTitle?: string;\r\n additionalOptions?: TMenuItem[];\r\n classNames?: {\r\n history?: string;\r\n textarea?: string;\r\n attachments?: string;\r\n };\r\n }) {\r\n super(\r\n { isWindowOpen: false, ...props },\r\n props.onMessageSubmit,\r\n props.onClearHistory,\r\n props.additionalOptions,\r\n props.classNames,\r\n );\r\n this.modalTitle = props.modalTitle;\r\n makeObservable({ open: action });\r\n\r\n if (props.props.isWindowOpen) {\r\n this.state.isWindowOpen = false;\r\n this.open();\r\n }\r\n }\r\n public getModalTitle() {\r\n return this.modalTitle;\r\n }\r\n public setModalTitle(title: string) {\r\n this.modalTitle = title;\r\n }\r\n open() {\r\n if (!this.state.isWindowOpen) {\r\n this.state.isWindowOpen = true;\r\n\r\n ApiaUtil.instance.modals.open({\r\n variant: 'layout.common.chat.assistant.floatingAssistant',\r\n defaultPosition: {\r\n bottom: '10px',\r\n right: '10px',\r\n },\r\n id: 'floatingAssistant',\r\n draggable: true,\r\n dragBounded: true,\r\n children: <this.Renderer />,\r\n onClose: () => {\r\n this.state.isWindowOpen = false;\r\n },\r\n title: this.modalTitle,\r\n });\r\n }\r\n }\r\n\r\n Window = observer(() => {\r\n return this.state.isWindowOpen ? null : (\r\n <IconButton\r\n className=\"chat_controller__open\"\r\n icon=\"Magic\"\r\n size=\"Md\"\r\n variant=\"icon-outline\"\r\n onClick={() => {\r\n this.open();\r\n }}\r\n />\r\n );\r\n });\r\n}\r\n","import { makeObservable, observable } from 'mobx';\r\nimport { TReference } from './types';\r\nimport { TStreamBlock, TTextStreamBlock } from './components';\r\n\r\nexport type TDescriberBlock = { type: string; content: string };\r\n\r\nexport class StreamMessage {\r\n blocks: TStreamBlock[] = [];\r\n references: TReference[] = [];\r\n tables: Record<string, string> = {};\r\n charts: Record<string, string> = {};\r\n finished: boolean = true;\r\n constructor(\r\n public messageFooter?: string,\r\n hasStream?: boolean,\r\n ) {\r\n makeObservable(this, {\r\n references: observable,\r\n blocks: observable,\r\n tables: observable,\r\n charts: observable,\r\n finished: observable,\r\n });\r\n hasStream && (this.finished = false);\r\n }\r\n\r\n addPart<T extends TStreamBlock>(part: T, afterAddPart?: (added: T) => void) {\r\n if (\r\n this.blocks.length > 0 &&\r\n this.blocks[this.blocks.length - 1].blockType === 'text' &&\r\n part.blockType === 'text'\r\n ) {\r\n const aux: TTextStreamBlock = this.blocks[\r\n this.blocks.length - 1\r\n ] as TTextStreamBlock;\r\n if (aux !== part) {\r\n //aux.str +=\r\n // aux.str.length === 0 ? part.str.replace(/^\\s+/, '') : part.str;\r\n aux.str += part.str;\r\n }\r\n } else {\r\n this.blocks.push(part);\r\n }\r\n afterAddPart && afterAddPart(part);\r\n }\r\n\r\n getLastBlock() {\r\n return this.blocks[this.blocks.length - 1];\r\n }\r\n\r\n streamFinished() {\r\n this.finished = true;\r\n }\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\n\r\nexport const Ellipsis = () => {\r\n const [e, setE] = useState(0);\r\n\r\n let dots = '.';\r\n for (let i = 0; i < e; i++) {\r\n dots += '.';\r\n }\r\n\r\n const interval = useRef(0);\r\n useEffect(() => {\r\n interval.current = setInterval(() => {\r\n setE((e) => (e === 2 ? 0 : e + 1));\r\n }, 500) as any;\r\n\r\n return () => {\r\n clearInterval(interval.current);\r\n };\r\n });\r\n\r\n return <div className=\"ellipsis\">{dots}</div>;\r\n};\r\n","import { Box } from '@apia/theme';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { ReactNode } from 'react';\r\n\r\nexport const Header = observer(\r\n ({ childComponent }: { childComponent: ReactNode }) => {\r\n return <Box className=\"search_header_container\">{childComponent}</Box>;\r\n },\r\n);\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { ApiaUtil } from '@apia/components';\r\nimport { Collector } from '@apia/validations';\r\n\r\nexport async function rate(\r\n el: HTMLElement,\r\n how: 'up' | 'down',\r\n query: string,\r\n): Promise<boolean> {\r\n return new Promise<boolean>((resolve) => {\r\n const collector = new Collector();\r\n collector.add(\r\n new collector.fields.textarea('comment', 'Comment', {\r\n validationRules: { required: true },\r\n properties: { autoFocus: true },\r\n }),\r\n );\r\n const tooltip = ApiaUtil.instance.tooltips.open({\r\n attachToElement: { current: el },\r\n children: (\r\n <collector.Render\r\n sx={{\r\n width: '300px',\r\n minWidth: 'unset',\r\n '.collector__buttons button': {\r\n fontSize: 14,\r\n py: 2,\r\n px: 3,\r\n },\r\n }}\r\n resolve={(w) => {\r\n (async () => {\r\n const result = await ApiaApi.post(\r\n makeApiaUrl({ action: 'giveFeedback' }),\r\n {\r\n postData: {\r\n query,\r\n feedback: w.comment,\r\n positive: how === 'up',\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n tooltip.close();\r\n resolve(!result?.hasError && !result?.hasMessages);\r\n })();\r\n return true;\r\n }}\r\n />\r\n ),\r\n minSize: {\r\n width: 300,\r\n height: 220,\r\n },\r\n preferredOrientationX: 'right',\r\n preferredOrientationY: 'top',\r\n closeOnMouseLeaveAttachedElement: false,\r\n closeOnMouseLeaveTooltip: false,\r\n closeOnClickOut: true,\r\n closeOnClick: false,\r\n closeOnEscape: true,\r\n closeOnScrollOut: true,\r\n closeOthers: true,\r\n attachToElementAnchorPoint: 'topRight',\r\n });\r\n });\r\n}\r\n","import { observer } from 'mobx-react-lite';\r\nimport { useState } from 'react';\r\nimport { Box } from '@apia/theme';\r\nimport { Ellipsis } from './Ellipsis';\r\nimport { StreamMessage } from '../StreamMessage';\r\nimport { MessageBlocks } from './MessageBlocks';\r\nimport { IconButton, MDRenderer } from '@apia/components';\r\n\r\nexport const MessageBody = observer(\r\n ({\r\n onRate,\r\n store,\r\n }: {\r\n onRate?: (target: HTMLElement, how: 'up' | 'down') => Promise<boolean>;\r\n store: StreamMessage;\r\n }) => {\r\n const [thumb, setThumb] = useState<'up' | 'down' | undefined>(undefined);\r\n const hasText =\r\n (store.blocks.find((x) => x.blockType === 'text')?.str ?? '').length > 0;\r\n return (\r\n <Box className=\"sem_search__system_message\">\r\n <>\r\n <Box className=\"message__body markdown\">\r\n {<MessageBlocks streamParts={store.blocks}></MessageBlocks>}\r\n </Box>\r\n {onRate && hasText ? (\r\n <Box className=\"sem_search__thumbs\">\r\n <IconButton\r\n variant=\"icon-only\"\r\n icon=\"ThumbsUp\"\r\n className={\r\n thumb === 'up'\r\n ? 'selected'\r\n : thumb === 'down'\r\n ? 'unselected'\r\n : 'no_feedback'\r\n }\r\n onClick={(ev) =>\r\n onRate(ev.target as HTMLElement, 'up').then((res) => {\r\n if (res) {\r\n setThumb('up');\r\n }\r\n })\r\n }\r\n />\r\n <IconButton\r\n variant=\"icon-only\"\r\n icon=\"ThumbsDown\"\r\n className={\r\n thumb === 'down'\r\n ? 'selected'\r\n : thumb === 'up'\r\n ? 'unselected'\r\n : 'no_feedback'\r\n }\r\n onClick={(ev) =>\r\n onRate(ev.target as HTMLElement, 'down').then((res) => {\r\n if (res) {\r\n setThumb('down');\r\n }\r\n })\r\n }\r\n />\r\n </Box>\r\n ) : (\r\n <></>\r\n )}\r\n </>\r\n {!hasText && <Ellipsis />}\r\n {store.messageFooter && store.finished && (\r\n <Box className=\"message__body markdown\">\r\n <MDRenderer str={store.messageFooter}></MDRenderer>\r\n </Box>\r\n )}\r\n </Box>\r\n );\r\n },\r\n);\r\n","import { ApiaUtil, SimpleButton } from '@apia/components';\r\nimport { Box, Paragraph } from '@apia/theme';\r\nimport { ReactElement } from 'react';\r\nimport { ChatMessage } from '../../../chat';\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 axios from 'axios';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';\r\nimport { ResponseStream } from '../stream/ResponseStream';\r\nimport { action, makeObservable, observable } from 'mobx';\r\n\r\ntype RoutinesGenerationState = {\r\n isLoading: boolean;\r\n progress: number;\r\n};\r\n\r\ntype TPollProgress = {\r\n message: string;\r\n progress: number;\r\n debug: string;\r\n streamPart?: string;\r\n};\r\n\r\nexport type TPollRoutineResult = {\r\n status: string;\r\n payload: unknown | TPollProgress;\r\n};\r\n\r\nexport type TGenerateFromImage = {\r\n base64: string;\r\n description: string;\r\n};\r\n\r\nexport type TRoutineCompletion = Partial<{\r\n images: TGenerateFromImage[];\r\n parameters: Record<string, string>;\r\n stream: ResponseStream;\r\n}> & {\r\n routineName: string;\r\n};\r\n\r\nfunction isPollProgress(\r\n payload: unknown | TPollProgress,\r\n): payload is TPollProgress {\r\n return (payload as TPollProgress)?.progress !== undefined;\r\n}\r\n\r\nexport class RoutinesGeneration {\r\n public audioRecorder = new AudioRecorder();\r\n private routineId: string = '';\r\n public state: RoutinesGenerationState = {\r\n isLoading: false,\r\n progress: 0,\r\n };\r\n\r\n public constructor() {\r\n makeObservable(this, {\r\n completion: action,\r\n state: observable,\r\n stop: action,\r\n transcribeAudio: action,\r\n });\r\n }\r\n\r\n private checkCanGenerate() {\r\n if (this.state.isLoading) {\r\n throw new Error('Cannot queue two simultaneous generations');\r\n }\r\n\r\n this.state.isLoading = true;\r\n }\r\n\r\n public async pollRoutine<T>(routineId: string, stream?: ResponseStream) {\r\n this.routineId = routineId;\r\n this.state.isLoading = true;\r\n return this.internalPollRoutine<T>(stream);\r\n }\r\n\r\n private async internalPollRoutine<T>(stream?: ResponseStream) {\r\n while (this.state.isLoading) {\r\n const pollResult = await this.callRoutinePoll(this.routineId);\r\n if (isPollProgress(pollResult.payload)) {\r\n try {\r\n const res = JSON.parse(pollResult.payload.debug) as string[];\r\n if (res.length > 0) {\r\n res.forEach((c) => {\r\n console.log(JSON.parse(c));\r\n });\r\n }\r\n\r\n if (pollResult.payload.streamPart && stream) {\r\n stream.emit('part', pollResult.payload.streamPart);\r\n }\r\n this.state.progress = pollResult.payload.progress;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n } else if (pollResult.status === 'FINISHED') {\r\n this.resetLoading();\r\n return pollResult.payload as T;\r\n } else if (pollResult.status === 'ERROR') {\r\n this.resetLoading();\r\n throw new Error(pollResult.payload as string);\r\n } else {\r\n this.resetLoading();\r\n throw new Error('Wrong poll response');\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callAudioTranscription(\r\n audio: Blob,\r\n ): ReturnType<RoutinesGeneration['callRoutineStart']> {\r\n const url = makeApiaUrl({\r\n action: 'routineStart',\r\n routine: 'transcription/Transcribe',\r\n });\r\n\r\n const response = await axios.post(url, audio.arrayBuffer(), {\r\n headers: {\r\n 'Content-Type': 'application/octet-stream',\r\n },\r\n });\r\n\r\n const result = await parseSuccessfulResponse<{\r\n orchestrator: { routineId: string };\r\n }>(response, '');\r\n\r\n if (result?.orchestrator) {\r\n return result;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected async callRoutinePoll(\r\n routineId: string,\r\n ): Promise<TPollRoutineResult> {\r\n const result = await ApiaApi.post<{ orchestrator: string }>(\r\n makeApiaUrl({\r\n action: 'routinePoll',\r\n routineId,\r\n }),\r\n );\r\n\r\n if (result?.data?.orchestrator) {\r\n return JSON.parse(result.data.orchestrator) as TPollRoutineResult;\r\n } else {\r\n throw new Error('Poll failed');\r\n }\r\n }\r\n\r\n protected async callRoutineStart(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const result = await ApiaApi.post<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStart',\r\n routine: routineName,\r\n }),\r\n {\r\n postData: {\r\n images: JSON.stringify(images),\r\n ...parameters,\r\n },\r\n stringifyOptions: {\r\n arrayFormat: 'repeat',\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n return result?.data || null;\r\n }\r\n\r\n private async executeRoutine<T>(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n stream?: ResponseStream,\r\n ): Promise<T | null> {\r\n this.checkCanGenerate();\r\n\r\n try {\r\n const result = await this.callRoutineStart(\r\n routineName,\r\n parameters,\r\n images,\r\n );\r\n\r\n if (result?.orchestrator?.routineId !== undefined) {\r\n this.routineId = result?.orchestrator.routineId;\r\n\r\n return this.internalPollRoutine<T>(stream);\r\n } else {\r\n throw new Error('Cannot get routine id');\r\n }\r\n } catch (e) {\r\n this.resetLoading();\r\n throw e;\r\n }\r\n }\r\n\r\n private resetLoading() {\r\n this.state.isLoading = false;\r\n this.state.progress = 0;\r\n }\r\n\r\n public async completion<T>(params: TRoutineCompletion) {\r\n return this.executeRoutine<T>(\r\n params.routineName,\r\n params.parameters ?? {},\r\n params.images ?? [],\r\n params.stream,\r\n );\r\n }\r\n\r\n public stop() {\r\n this.resetLoading();\r\n ApiaApi.get<{\r\n orchestrator: { routineId: string };\r\n }>(\r\n makeApiaUrl({\r\n action: 'routineStop',\r\n routineId: this.routineId,\r\n }),\r\n );\r\n }\r\n\r\n public async transcribeAudio(audio: Blob) {\r\n const result = await this.callAudioTranscription(audio);\r\n\r\n if (result) {\r\n this.state.isLoading = true;\r\n if (result?.orchestrator?.routineId) {\r\n this.routineId = result?.orchestrator?.routineId;\r\n return await this.internalPollRoutine<{\r\n transcription: string;\r\n }>();\r\n }\r\n }\r\n\r\n throw new Error('Something went wrong while transcribing the audio');\r\n }\r\n}\r\n","import { TActionDispatcher, TActionResult } from '@apia/dashboard-controller';\r\nimport {\r\n RoutinesGeneration,\r\n TPollRoutineResult,\r\n TGenerateFromImage,\r\n} from './RoutinesGeneration';\r\n\r\nexport class DashboardsRoutinesGeneration extends RoutinesGeneration {\r\n constructor(protected dispatcher: TActionDispatcher) {\r\n super();\r\n }\r\n\r\n private blobToBase64(audio: Blob) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n if (reader.result && typeof reader.result === 'string') {\r\n const base64 = reader.result.split(',')[1];\r\n resolve(base64);\r\n } else {\r\n reject(new Error('Could not convert Blob to base64'));\r\n }\r\n };\r\n reader.onerror = reject;\r\n reader.readAsDataURL(audio);\r\n });\r\n }\r\n\r\n protected async callAudioTranscription(\r\n audio: Blob,\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const audioBase64 = await this.blobToBase64(audio);\r\n const result = (await this.dispatcher({\r\n action: 'transcription',\r\n audioBase64,\r\n })) as TActionResult<{\r\n orchestrator: {\r\n routineId: string;\r\n };\r\n }>;\r\n\r\n return result?.data || null;\r\n }\r\n\r\n protected async callRoutinePoll(\r\n routineId: string,\r\n ): Promise<TPollRoutineResult> {\r\n const result = (await this.dispatcher({\r\n action: 'routinePoll',\r\n routineId,\r\n })) as TActionResult<{ orchestrator: string }>;\r\n\r\n if (result?.data?.orchestrator) {\r\n const parsed = JSON.parse(result.data.orchestrator) as TPollRoutineResult;\r\n\r\n return parsed;\r\n }\r\n\r\n throw new Error('Poll failed');\r\n }\r\n\r\n protected async callRoutineStart(\r\n routineName: string,\r\n parameters: Record<string, string>,\r\n images: TGenerateFromImage[],\r\n ): Promise<{ orchestrator: { routineId: string } } | null> {\r\n const result = (await this.dispatcher({\r\n action: 'routineStart',\r\n routine: routineName,\r\n ...parameters,\r\n images,\r\n })) as TActionResult<{\r\n orchestrator: {\r\n routineId: string;\r\n };\r\n }>;\r\n\r\n return result?.data || null;\r\n }\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\n\r\nexport type StreamBlock = { type: string; description: string };\r\n\r\nexport type ResponseStreamEvents = {\r\n block: StreamBlock;\r\n part: string;\r\n};\r\n\r\nexport type ResponseStreamBlock = { type: string; content: string; id: string };\r\n\r\nexport class ResponseStream<\r\n T extends ResponseStreamEvents = ResponseStreamEvents,\r\n> extends EventEmitter<T> {\r\n private buffer: string = '';\r\n private isRunning = false;\r\n private locked = false;\r\n public maxCompletionTime = 150; // ms\r\n private minPartSize = 2;\r\n private partSize = 2;\r\n private timing = 5; // ms\r\n private waiting: string[] = [];\r\n\r\n private calculatePartSize() {\r\n const totalSize =\r\n this.buffer.length +\r\n this.waiting.reduce<number>((a, b) => a + b.length, 0);\r\n\r\n this.partSize = Math.max(\r\n this.minPartSize,\r\n totalSize * (this.timing / this.maxCompletionTime),\r\n );\r\n }\r\n\r\n emit<K extends keyof T>(ev: K, data: T[K]): void {\r\n if (ev === 'part') {\r\n let chunk = data as string;\r\n\r\n const blockMatches = chunk.matchAll(\r\n /<BLOCK-START type=\"([^\"]+)\">(.+?)<\\/BLOCK-END type=\"\\1\">/g,\r\n );\r\n\r\n for (const match of blockMatches) {\r\n this.emit('block', { description: match[2], type: match[1] });\r\n chunk = chunk.replaceAll(match[0], '');\r\n }\r\n\r\n if (this.locked) {\r\n this.waiting.push(chunk);\r\n } else {\r\n this.buffer += chunk;\r\n }\r\n this.calculatePartSize();\r\n this.run();\r\n } else {\r\n super.emit(ev, data);\r\n }\r\n }\r\n\r\n run() {\r\n if (!this.isRunning) {\r\n this.isRunning = true;\r\n const interval = setInterval(() => {\r\n this.locked = true;\r\n\r\n const choosedSize = Math.min(this.buffer.length, this.partSize);\r\n\r\n const part = this.buffer.slice(0, choosedSize);\r\n this.buffer = this.buffer.slice(choosedSize);\r\n\r\n while (this.waiting.length > 0) {\r\n const part = this.waiting.shift();\r\n if (part) {\r\n this.buffer += part;\r\n }\r\n }\r\n this.locked = false;\r\n if (part) {\r\n super.emit('part', part);\r\n } else {\r\n this.isRunning = false;\r\n clearInterval(interval);\r\n }\r\n }, this.timing);\r\n }\r\n }\r\n}\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { uniqueId } from 'lodash-es';\r\n\r\nexport type RetrievedImage = {\r\n base64: string;\r\n path: string;\r\n};\r\n\r\nexport type GetImageSize = '256x256' | '512x512' | '1024x1024';\r\n\r\nexport async function getImageFromGpt({\r\n prompt,\r\n ...props\r\n}: {\r\n prompt: string;\r\n size?: GetImageSize;\r\n model: string;\r\n}): Promise<RetrievedImage | null> {\r\n const res = await ApiaApi.post<{ image: string }>(\r\n makeApiaUrl({\r\n action: 'generateImage',\r\n ...props,\r\n }),\r\n {\r\n postData: {\r\n prompt,\r\n },\r\n postDataTreatement: 'stringify',\r\n },\r\n );\r\n\r\n if (res?.data)\r\n return {\r\n base64: res.data.image as any as string,\r\n path: `${uniqueId()}.png`,\r\n };\r\n\r\n return null;\r\n}\r\n\r\nexport async function getImageFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n }>,\r\n): Promise<RetrievedImage | null> {\r\n return (\r\n (await getImagesFromDisk({ ...inputProps, multiple: 'false' }))![0] ?? null\r\n );\r\n}\r\n\r\nexport function getImagesFromDisk(\r\n inputProps?: Partial<{\r\n accept: string;\r\n multiple: string;\r\n }>,\r\n): Promise<RetrievedImage[]> {\r\n return new Promise<RetrievedImage[]>((resolve) => {\r\n const input = document.createElement('input');\r\n input.accept = 'image/*';\r\n input.type = 'file';\r\n input.style.display = 'none';\r\n Object.assign(input, inputProps);\r\n\r\n document.body.append(input);\r\n\r\n input.addEventListener('change', (event) => {\r\n const target = event?.target as HTMLInputElement;\r\n if (!target?.files) return;\r\n\r\n const retrievedImages: (RetrievedImage | null)[] = [];\r\n const sources = [...(target.files ?? [])];\r\n\r\n const checkResolve = () => {\r\n if (sources.length === retrievedImages.length) {\r\n resolve(retrievedImages.filter((c): c is RetrievedImage => !!c));\r\n }\r\n };\r\n\r\n sources.forEach((file) => {\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = function (e) {\r\n const binary = (e.target?.result as string)?.split(',')[1];\r\n input.remove();\r\n retrievedImages.push({\r\n base64: binary,\r\n path: file.name,\r\n });\r\n\r\n checkResolve();\r\n };\r\n reader.readAsDataURL(file);\r\n } else {\r\n retrievedImages.push(null);\r\n }\r\n\r\n checkResolve();\r\n });\r\n });\r\n input.click();\r\n });\r\n}\r\n","import { IconButton } from '@apia/components';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const ImageIcon = ({\r\n deletable,\r\n onClick,\r\n onRemove,\r\n src,\r\n}: {\r\n deletable: boolean;\r\n onClick: () => unknown;\r\n onRemove: () => unknown;\r\n src: string;\r\n}) => {\r\n return (\r\n <Box className=\"image_preview\">\r\n {deletable && (\r\n <IconButton icon=\"Close\" size=\"Xs\" iconSize=\"Xs\" onClick={onRemove} />\r\n )}\r\n <img src={src} onClick={onClick} />\r\n </Box>\r\n );\r\n};\r\n","export function getSrcFromBase64(base64: string) {\r\n return `data:image/jpg;base64,${base64}`;\r\n}\r\n","import {\r\n ApiaUtil,\r\n IconButton,\r\n SortableList,\r\n SortableListItem,\r\n} from '@apia/components';\r\nimport { Box, getVariant, Textarea } from '@apia/theme';\r\nimport { makeAutoObservable, toJS } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { ImageIcon } from './ImageIcon';\r\nimport { getSrcFromBase64 } from '../ImageBinaryField/getImageSrcString';\r\nimport { getImagesFromDisk } from '../ImageBinaryField/getImage';\r\n\r\nexport type TGenerateFromImage = {\r\n base64: string;\r\n description: string;\r\n};\r\n\r\ntype TStoredImage = TGenerateFromImage & { id: string };\r\n\r\nclass ImagesStore {\r\n images: Map<string, TStoredImage> = new Map();\r\n selectedId = '';\r\n\r\n constructor(\r\n images: TGenerateFromImage[],\r\n public multiple: boolean,\r\n ) {\r\n this.images = new Map(\r\n images.map((c) => {\r\n const id = uniqueId();\r\n return [id, { ...c, id }];\r\n }),\r\n );\r\n this.selectedId = this.images.values().next().value?.id || '';\r\n makeAutoObservable(this);\r\n }\r\n}\r\n\r\nconst GetImagesDescription = observer(({ store }: { store: ImagesStore }) => {\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n\r\n return (\r\n <Box\r\n className=\"images_description_generator\"\r\n {...getVariant('layout.design.projectAnalysis.imagesLoader')}\r\n >\r\n <Box className=\"images_sort_wrapper\">\r\n <SortableList\r\n onSortChange={(ev) => {\r\n store.images = new Map(\r\n ev.map((c) => [\r\n c.props.id,\r\n c.props.additionalProps as TStoredImage,\r\n ]),\r\n );\r\n }}\r\n >\r\n {[...store.images].map(([k, c]) => (\r\n <SortableListItem additionalProps={c} id={c.id} key={c.id}>\r\n <ImageIcon\r\n deletable={store.multiple}\r\n onClick={() => {\r\n store.selectedId = c.id;\r\n }}\r\n onRemove={() => {\r\n store.images.delete(k);\r\n }}\r\n src={getSrcFromBase64(c.base64 ?? '')}\r\n />\r\n </SortableListItem>\r\n ))}\r\n </SortableList>\r\n </Box>\r\n <Box className=\"image_editor\">\r\n <Box className=\"image_preview\">\r\n {store.images.get(store.selectedId) && (\r\n <img\r\n src={getSrcFromBase64(\r\n store.images.get(store.selectedId)!.base64 ?? '',\r\n )}\r\n />\r\n )}\r\n </Box>\r\n <Box className=\"image_description\">\r\n <Textarea\r\n autoFocus\r\n disabled={!store.images.get(store.selectedId)}\r\n onChange={(ev) => {\r\n const image = store.images.get(store.selectedId);\r\n if (image) image.description = ev.target.value;\r\n }}\r\n value={store.images.get(store.selectedId)?.description}\r\n />\r\n {store.multiple && (\r\n <IconButton\r\n icon=\"Attach\"\r\n onClick={() => {\r\n getImagesFromDisk({ multiple: 'true' }).then((res) => {\r\n res.forEach((c) => {\r\n const id = uniqueId();\r\n store.images.set(id, {\r\n base64: c.base64,\r\n description: '',\r\n id,\r\n });\r\n });\r\n });\r\n }}\r\n size=\"Md\"\r\n iconSize=\"Sm\"\r\n variant=\"icon-only\"\r\n />\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n );\r\n});\r\n\r\nexport function getImagesWithDescription({\r\n multiple,\r\n}: {\r\n multiple?: boolean;\r\n}): Promise<TGenerateFromImage[]> {\r\n return new Promise((resolve) => {\r\n getImagesFromDisk({ multiple: multiple ? 'true' : undefined }).then(\r\n (images) => {\r\n const store = new ImagesStore(\r\n images.map((c) => ({\r\n base64: c.base64,\r\n description: '',\r\n })),\r\n multiple || false,\r\n );\r\n\r\n ApiaUtil.instance.modals.open({\r\n children: <GetImagesDescription store={store} />,\r\n initialFocusGetter(modalInnerRef) {\r\n return modalInnerRef.querySelector<HTMLElement>('textarea');\r\n },\r\n onConfirm: () => {\r\n resolve([...toJS(store.images).values()]);\r\n },\r\n onCancel() {\r\n resolve([]);\r\n },\r\n size: 'xxxl-fixed',\r\n noHeader: true,\r\n });\r\n },\r\n );\r\n });\r\n}\r\n","import { FilterDTO } from '@apia/components';\r\nimport {} from '@apia/components/src/components';\r\nimport { createContext, FC } from 'react';\r\nimport { TReference } from '../../chat';\r\n\r\nexport type TSearchListItem = {\r\n content: string;\r\n isExternal: boolean;\r\n link: string;\r\n title: string;\r\n references: TReference[];\r\n};\r\n\r\nexport interface ProcessingUnit {\r\n visualizationType: TSearchMode;\r\n content: string;\r\n references: TReference[];\r\n isExternal: boolean;\r\n}\r\n\r\nexport interface ListingProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'list';\r\n title: string;\r\n link: string;\r\n}\r\n\r\nexport interface ChatProcessingUnit extends ProcessingUnit {\r\n visualizationType: 'chat';\r\n}\r\n\r\nexport const ViewRendererContext = createContext<ISemanticSearchViewController>(\r\n {} as any,\r\n);\r\n\r\nexport type TSearchMode = 'list' | 'chat' | 'none';\r\n\r\nexport interface ISemanticSearchViewController {\r\n state: {\r\n filters: Record<string, FilterDTO>;\r\n filtersOpen: boolean;\r\n isLoading: boolean;\r\n mode: TSearchMode;\r\n searchString: string;\r\n };\r\n\r\n ResultsRenderer: FC;\r\n clearHistory(): Promise<void>;\r\n search(str?: string): void;\r\n toggleFiltersOpen(): void;\r\n}\r\n\r\nexport type TResponseData = {\r\n result: string;\r\n success: string;\r\n streaming: boolean;\r\n failed?: boolean;\r\n messageFooter?: string;\r\n hideFeedback?: string;\r\n};\r\n\r\nexport interface ISearchResultsController<P extends ProcessingUnit> {\r\n state: {\r\n results: P[];\r\n };\r\n\r\n beforeSearch(props?: object): void;\r\n afterSearch(props?: object): void;\r\n\r\n clear(): void;\r\n\r\n processResults(\r\n qryString: string,\r\n results: ProcessingUnit[],\r\n responseData?: TResponseData,\r\n ): void;\r\n\r\n Component: FC;\r\n}\r\n","import { ApiaApi, makeApiaUrl } from '@apia/api';\r\nimport { ResponseStream, ResponseStreamEvents } from './ResponseStream';\r\nimport { decodeBase64ToUtf8 } from '@apia/util';\r\n\r\nexport type PollRepsonse = {\r\n closed: string;\r\n part: string;\r\n failed: string;\r\n};\r\n\r\nexport type PollerEvents = ResponseStreamEvents & { close: null; error: null };\r\n\r\nexport class StreamServicePoller {\r\n closed = true;\r\n stream = new ResponseStream<PollerEvents>();\r\n\r\n on<K extends keyof PollerEvents>(\r\n ev: K,\r\n cb: (ev: PollerEvents[K]) => unknown,\r\n ) {\r\n return this.stream.on(ev, cb);\r\n }\r\n\r\n async start(token: string) {\r\n this.closed = false;\r\n try {\r\n while (!this.closed) {\r\n const res = await ApiaApi.post<PollRepsonse>(\r\n makeApiaUrl({\r\n ajaxUrl: 'apia.execution.StreamAction.run',\r\n action: 'poll',\r\n streamToken: token,\r\n }),\r\n );\r\n if (!res) {\r\n this.closed = true;\r\n this.stream.emit('error', null);\r\n }\r\n\r\n if (res?.data?.part) {\r\n this.stream.emit('part', decodeBase64ToUtf8(res.data.part));\r\n }\r\n\r\n if (res?.data?.closed === 'true') {\r\n this.closed = true;\r\n this.stream.emit('close', null);\r\n }\r\n\r\n if (res?.data?.failed === 'true') {\r\n this.stream.emit('error', null);\r\n }\r\n }\r\n } finally {\r\n this.closed = true;\r\n }\r\n }\r\n}\r\n\r\n/*\r\nussage:\r\n\r\nconst poller = new StreamServicePoller();\r\n\r\npoller.on('block', (block) => {\r\n console.log({ block });\r\n });\r\n poller.on('part', (part) => {\r\n console.log({ part });\r\n });\r\n poller.on('close', () => {\r\n console.log('Terminé de stemear!');\r\n });\r\n \r\n poller.start('mytokenquerecibidelserver');\r\n*/\r\n"],"names":["__publicField","f","TTT","e","part"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apia/ai",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.50",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"author": "Alexis Leite <alexisleite@live.com>",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"libWatchForDashboards": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true,DEV_SERVER_MODULE:dashboards"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@apia/api": "^4.0.
|
|
19
|
-
"@apia/components": "^4.0.
|
|
20
|
-
"@apia/dashboard-controller": "^4.0.
|
|
21
|
-
"@apia/theme": "^4.0.
|
|
22
|
-
"@apia/util": "^4.0.
|
|
23
|
-
"mobx": "^6.
|
|
24
|
-
"mobx-react-lite": "^4.
|
|
18
|
+
"@apia/api": "^4.0.50",
|
|
19
|
+
"@apia/components": "^4.0.50",
|
|
20
|
+
"@apia/dashboard-controller": "^4.0.50",
|
|
21
|
+
"@apia/theme": "^4.0.50",
|
|
22
|
+
"@apia/util": "^4.0.50",
|
|
23
|
+
"mobx": "^6.12.3",
|
|
24
|
+
"mobx-react-lite": "^3.4.3"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/react": "^18.2.43",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"access": "public",
|
|
41
41
|
"registry": "https://registry.npmjs.org/"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "9d08b163f939d98211398165f1a926e82664f420"
|
|
44
44
|
}
|