@red-hat-developer-hub/backstage-plugin-lightspeed 2.5.0 → 2.5.1

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +5 -1
  3. package/dist/alpha.d.ts +5 -0
  4. package/dist/components/LightSpeedChat.esm.js +82 -17
  5. package/dist/components/LightSpeedChat.esm.js.map +1 -1
  6. package/dist/components/LightspeedDrawerContext.esm.js.map +1 -1
  7. package/dist/components/notebooks/AddDocumentModal.esm.js +122 -23
  8. package/dist/components/notebooks/AddDocumentModal.esm.js.map +1 -1
  9. package/dist/components/notebooks/DocumentSidebar.esm.js +19 -1
  10. package/dist/components/notebooks/DocumentSidebar.esm.js.map +1 -1
  11. package/dist/components/notebooks/FileListItem.esm.js +94 -0
  12. package/dist/components/notebooks/FileListItem.esm.js.map +1 -0
  13. package/dist/components/notebooks/NotebookView.esm.js +46 -26
  14. package/dist/components/notebooks/NotebookView.esm.js.map +1 -1
  15. package/dist/components/notebooks/OverwriteConfirmModal.esm.js +2 -1
  16. package/dist/components/notebooks/OverwriteConfirmModal.esm.js.map +1 -1
  17. package/dist/components/notebooks/SidebarCollapseIcon.esm.js +5 -2
  18. package/dist/components/notebooks/SidebarCollapseIcon.esm.js.map +1 -1
  19. package/dist/hooks/toolCallsCacheStore.esm.js +61 -0
  20. package/dist/hooks/toolCallsCacheStore.esm.js.map +1 -0
  21. package/dist/hooks/useConversationMessages.esm.js +18 -14
  22. package/dist/hooks/useConversationMessages.esm.js.map +1 -1
  23. package/dist/hooks/useDeleteConversation.esm.js +2 -0
  24. package/dist/hooks/useDeleteConversation.esm.js.map +1 -1
  25. package/dist/hooks/useLightspeedProviderState.esm.js +35 -8
  26. package/dist/hooks/useLightspeedProviderState.esm.js.map +1 -1
  27. package/dist/translations/de.esm.js +5 -0
  28. package/dist/translations/de.esm.js.map +1 -1
  29. package/dist/translations/es.esm.js +5 -0
  30. package/dist/translations/es.esm.js.map +1 -1
  31. package/dist/translations/fr.esm.js +5 -0
  32. package/dist/translations/fr.esm.js.map +1 -1
  33. package/dist/translations/it.esm.js +5 -0
  34. package/dist/translations/it.esm.js.map +1 -1
  35. package/dist/translations/ja.esm.js +5 -0
  36. package/dist/translations/ja.esm.js.map +1 -1
  37. package/dist/translations/ref.esm.js +5 -0
  38. package/dist/translations/ref.esm.js.map +1 -1
  39. package/package.json +2 -2
@@ -7,10 +7,9 @@ import { DrawerPanelContent, AlertGroup, Alert, AlertVariant, AlertActionCloseBu
7
7
  import { TimesIcon } from '@patternfly/react-icons';
8
8
  import { useQueryClient } from '@tanstack/react-query';
9
9
  import { notebooksApiRef } from '../../api/notebooksApi.esm.js';
10
- import { TEMP_CONVERSATION_ID, UNTITLED_NOTEBOOK_NAME } from '../../const.esm.js';
10
+ import { TEMP_CONVERSATION_ID, UNTITLED_NOTEBOOK_NAME, NOTEBOOK_MAX_FILES } from '../../const.esm.js';
11
11
  import { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage.esm.js';
12
12
  import { useDocumentStatusPolling } from '../../hooks/notebooks/useDocumentStatusPolling.esm.js';
13
- import { useUploadDocument } from '../../hooks/notebooks/useUploadDocument.esm.js';
14
13
  import { useConversationMessages } from '../../hooks/useConversationMessages.esm.js';
15
14
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
16
15
  import { useWelcomePrompts } from '../../hooks/useWelcomePrompts.esm.js';
@@ -156,13 +155,13 @@ const NotebookView = ({
156
155
  avatar,
157
156
  profileLoading,
158
157
  topicRestrictionEnabled,
158
+ selectedModel,
159
159
  onClose
160
160
  }) => {
161
161
  const classes = useStyles();
162
162
  const { t } = useTranslation();
163
163
  const queryClient = useQueryClient();
164
164
  const notebooksApi = useApi(notebooksApiRef);
165
- const uploadMutation = useUploadDocument();
166
165
  const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();
167
166
  const [conversationId, setConversationId] = useState(
168
167
  metadata?.conversation_id ?? TEMP_CONVERSATION_ID
@@ -217,7 +216,7 @@ const NotebookView = ({
217
216
  const { conversationMessages, handleInputPrompt, scrollToBottomRef } = useConversationMessages(
218
217
  conversationId,
219
218
  userName,
220
- "",
219
+ selectedModel,
221
220
  "",
222
221
  avatar,
223
222
  onComplete,
@@ -260,10 +259,14 @@ const NotebookView = ({
260
259
  );
261
260
  const [filesToOverwrite, setFilesToOverwrite] = useState([]);
262
261
  const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);
262
+ const [filesToAddToModal, setFilesToAddToModal] = useState([]);
263
263
  const handleOpenUploadModal = () => setIsUploadModalOpen(true);
264
264
  const handleCloseUploadModal = () => setIsUploadModalOpen(false);
265
265
  const handleFilesUploading = (files) => {
266
- setUploadingFileNames((prev) => [...prev, ...files.map((f) => f.name)]);
266
+ setUploadingFileNames((prev) => {
267
+ const newNames = files.map((f) => f.name).filter((name) => !prev.includes(name));
268
+ return [...prev, ...newNames];
269
+ });
267
270
  };
268
271
  const handleUploadStarted = (info) => {
269
272
  processedIds.current.delete(info.documentId);
@@ -294,17 +297,10 @@ const NotebookView = ({
294
297
  setIsOverwriteModalOpen(false);
295
298
  setFilesToOverwrite([]);
296
299
  if (files.length === 0) return;
297
- setUploadingFileNames((prev) => [...prev, ...files.map((f) => f.name)]);
298
- for (const file of files) {
299
- uploadMutation.mutateAsync({ sessionId, file }).then((data) => {
300
- handleUploadStarted({
301
- fileName: file.name,
302
- documentId: data.document_id
303
- });
304
- }).catch(() => {
305
- handleUploadFailed(file.name);
306
- });
307
- }
300
+ setFilesToAddToModal(files);
301
+ };
302
+ const handleFilesAddedToModal = () => {
303
+ setFilesToAddToModal([]);
308
304
  };
309
305
  const handleOverwriteCancel = () => {
310
306
  setIsOverwriteModalOpen(false);
@@ -323,9 +319,8 @@ const NotebookView = ({
323
319
  for (const result of completedOrFailed) {
324
320
  processedIds.current.add(result.documentId);
325
321
  idsToRemove.add(result.documentId);
326
- if (result.status !== "completed") {
327
- namesToRemove.add(result.fileName);
328
- } else {
322
+ namesToRemove.add(result.fileName);
323
+ if (result.status === "completed") {
329
324
  newCompletedNames.add(result.fileName);
330
325
  }
331
326
  if (result.status === "completed") {
@@ -362,6 +357,8 @@ const NotebookView = ({
362
357
  setToastAlerts((prev) => prev.filter((a) => a.key !== key));
363
358
  };
364
359
  const hasDocuments = documents.length > 0 || uploadingFileNames.length > 0;
360
+ const totalDocumentCount = documents.length + uploadingFileNames.length;
361
+ const isAddDisabled = totalDocumentCount >= NOTEBOOK_MAX_FILES;
365
362
  const panelContent = /* @__PURE__ */ jsx(
366
363
  DrawerPanelContent,
367
364
  {
@@ -436,6 +433,8 @@ const NotebookView = ({
436
433
  variant: AlertVariant[variant ?? "success"],
437
434
  title,
438
435
  className: classes.toastAlert,
436
+ timeout: 2e3,
437
+ onTimeout: () => handleRemoveToastAlert(key),
439
438
  actionClose: /* @__PURE__ */ jsx(
440
439
  AlertActionCloseButton,
441
440
  {
@@ -482,18 +481,19 @@ const NotebookView = ({
482
481
  /* @__PURE__ */ jsx(
483
482
  Tooltip,
484
483
  {
485
- content: t("notebook.view.documents.add"),
484
+ content: isAddDisabled ? t("notebook.view.documents.maxReached") : t("notebook.view.documents.add"),
486
485
  position: "right",
487
- children: /* @__PURE__ */ jsx(
486
+ children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(
488
487
  Button,
489
488
  {
490
489
  variant: "plain",
491
490
  className: classes.addIconButton,
492
- onClick: handleOpenUploadModal,
491
+ onClick: isAddDisabled ? undefined : handleOpenUploadModal,
493
492
  "aria-label": t("notebook.view.documents.add"),
494
- children: /* @__PURE__ */ jsx(AddCircleFilledIcon, {})
493
+ isDisabled: isAddDisabled,
494
+ children: /* @__PURE__ */ jsx(AddCircleFilledIcon, { disabled: isAddDisabled })
495
495
  }
496
- )
496
+ ) })
497
497
  }
498
498
  )
499
499
  ] }),
@@ -512,7 +512,25 @@ const NotebookView = ({
512
512
  /* @__PURE__ */ jsx("div", { className: classes.mainContent, children: renderMainContent() }),
513
513
  !hasDocuments && messages.length === 0 && /* @__PURE__ */ jsx("div", { className: classes.footerAlignedAlert, children: /* @__PURE__ */ jsx(Alert, { isInline: true, variant: "info", title: t("aria.important"), children: t("disclaimer.withoutValidation") }) }),
514
514
  /* @__PURE__ */ jsxs(ChatbotFooter, { className: classes.footer, children: [
515
- /* @__PURE__ */ jsx(
515
+ documents.length === 0 ? /* @__PURE__ */ jsx(
516
+ Tooltip,
517
+ {
518
+ content: t("notebook.view.input.disabledTooltip"),
519
+ position: "top",
520
+ children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
521
+ MessageBar,
522
+ {
523
+ hasAttachButton: false,
524
+ hasMicrophoneButton: false,
525
+ hasStopButton: false,
526
+ isSendButtonDisabled: true,
527
+ isDisabled: true,
528
+ onSendMessage: sendMessage,
529
+ placeholder: t("notebook.view.input.placeholder")
530
+ }
531
+ ) })
532
+ }
533
+ ) : /* @__PURE__ */ jsx(
516
534
  MessageBar,
517
535
  {
518
536
  hasAttachButton: false,
@@ -541,7 +559,9 @@ const NotebookView = ({
541
559
  onFilesUploading: handleFilesUploading,
542
560
  onUploadStarted: handleUploadStarted,
543
561
  onUploadFailed: handleUploadFailed,
544
- onDuplicatesFound: handleDuplicatesFound
562
+ onDuplicatesFound: handleDuplicatesFound,
563
+ filesToAdd: filesToAddToModal,
564
+ onFilesAdded: handleFilesAddedToModal
545
565
  }
546
566
  ),
547
567
  /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n ChatbotContent,\n ChatbotFooter,\n ChatbotFootnote,\n ChatbotWelcomePrompt,\n MessageBar,\n MessageProps,\n} from '@patternfly/chatbot';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport { TEMP_CONVERSATION_ID, UNTITLED_NOTEBOOK_NAME } from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useUploadDocument } from '../../hooks/notebooks/useUploadDocument';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { CreateMessageVariables } from '../../hooks/useCreateCoversationMessage';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { useWelcomePrompts } from '../../hooks/useWelcomePrompts';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n height: '100%',\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n },\n drawerContainer: {\n flex: 1,\n minHeight: 0,\n },\n expandStrip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n },\n addIconButton: {\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n },\n mainArea: {\n display: 'flex',\n flexDirection: 'row',\n height: '100%',\n minWidth: 0,\n },\n topBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\n },\n closeButton: {\n textTransform: 'none',\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n },\n drawerContentBody: {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n height: '100%',\n },\n contentColumn: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n },\n alertContainer: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n padding: `0 0 ${theme.spacing(1)}px`,\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n welcomeContainer: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n },\n notebookContentArea: {\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto 0 auto`,\n padding: 0,\n },\n notebookHeading: {\n fontSize: '2rem',\n fontWeight: 500,\n lineHeight: 1.25,\n padding: `${theme.spacing(1)}px 0`,\n },\n notebookSummary: {\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n paddingTop: theme.spacing(0.5),\n },\n promptSuggestions: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n },\n footerAlignedAlert: {\n maxWidth: 'unset',\n width: '95%',\n margin: '0 auto',\n padding: `0 0 ${theme.spacing(1)}px`,\n },\n footer: {\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n },\n chatContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n onClose: () => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n onClose,\n}: NotebookViewProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const notebooksApi = useApi(notebooksApiRef);\n const uploadMutation = useUploadDocument();\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false);\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n\n const handleDeleteDocument = useCallback(\n async (documentId: string) => {\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n },\n [notebooksApi, sessionId, queryClient],\n );\n\n const onComplete = useCallback(\n (message: string) => {\n setIsSendButtonDisabled(false);\n setAnnouncement(`Message from Bot: ${message}`);\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', conversationId],\n });\n },\n [queryClient, conversationId],\n );\n\n const onStart = useCallback((conv_id: string) => {\n setConversationId(conv_id);\n }, []);\n\n const createMessageAdapter = useCallback(\n async (vars: CreateMessageVariables) => {\n return notebookCreateMessage({\n prompt: vars.prompt,\n sessionId,\n });\n },\n [notebookCreateMessage, sessionId],\n );\n\n const { conversationMessages, handleInputPrompt, scrollToBottomRef } =\n useConversationMessages(\n conversationId,\n userName,\n '',\n '',\n avatar,\n onComplete,\n onStart,\n createMessageAdapter,\n );\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), []);\n setIsSendButtonDisabled(true);\n },\n [handleInputPrompt, t],\n );\n\n const samplePrompts = useWelcomePrompts();\n const welcomePrompts =\n samplePrompts?.map(prompt => {\n const p = prompt as { title: string; message: string };\n return {\n title: p.title,\n message: p.message,\n onClick: () => sendMessage(p.message),\n };\n }) ?? [];\n\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n\n const handleOpenUploadModal = () => setIsUploadModalOpen(true);\n const handleCloseUploadModal = () => setIsUploadModalOpen(false);\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => [...prev, ...files.map(f => f.name)]);\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (files: File[]) => {\n setFilesToOverwrite(files);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = () => {\n const files = filesToOverwrite;\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n\n if (files.length === 0) return;\n\n setUploadingFileNames(prev => [...prev, ...files.map(f => f.name)]);\n for (const file of files) {\n uploadMutation\n .mutateAsync({ sessionId, file })\n .then(data => {\n handleUploadStarted({\n fileName: file.name,\n documentId: data.document_id,\n });\n })\n .catch(() => {\n handleUploadFailed(file.name);\n });\n }\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n if (result.status !== 'completed') {\n namesToRemove.add(result.fileName);\n } else {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status === 'completed') {\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: (t as Function)('notebook.upload.success', {\n fileName: result.fileName,\n }) as string,\n variant: 'success',\n });\n } else {\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const hasDocuments = documents.length > 0 || uploadingFileNames.length > 0;\n\n const panelContent = (\n <DrawerPanelContent\n isResizable\n defaultSize=\"310px\"\n minSize=\"232px\"\n maxSize=\"50%\"\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n onToggleCollapse={() => setSidebarCollapsed(prev => !prev)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n />\n </DrawerPanelContent>\n );\n\n const renderMainContent = () => {\n if (!hasDocuments && messages.length === 0) {\n return <UploadResourceScreen onUploadClick={handleOpenUploadModal} />;\n }\n if (messages.length > 0) {\n return (\n <ChatbotContent className={classes.chatContent}>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isSendButtonDisabled}\n topicRestrictionEnabled={topicRestrictionEnabled}\n />\n </ChatbotContent>\n );\n }\n return (\n <div className={classes.welcomeContainer}>\n <div className={classes.alertContainer}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n <div className={classes.notebookContentArea}>\n <Typography className={classes.notebookHeading}>\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography className={classes.notebookSummary}>\n {topicSummary}\n </Typography>\n )}\n </div>\n {welcomePrompts.length > 0 && (\n <div className={classes.promptSuggestions}>\n <ChatbotWelcomePrompt\n title=\"\"\n description=\"\"\n prompts={welcomePrompts}\n />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className={classes.root}>\n {toastAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {toastAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveToastAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n <Drawer\n isExpanded={!sidebarCollapsed}\n isInline\n position=\"start\"\n className={classes.drawerContainer}\n >\n <DrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n >\n <DrawerContentBody className={classes.drawerContentBody}>\n <div className={classes.mainArea}>\n {sidebarCollapsed && (\n <div className={classes.expandStrip}>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => setSidebarCollapsed(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={t('notebook.view.documents.add')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n className={classes.addIconButton}\n onClick={handleOpenUploadModal}\n aria-label={t('notebook.view.documents.add')}\n >\n <AddCircleFilledIcon />\n </Button>\n </Tooltip>\n </div>\n )}\n\n <div className={classes.contentColumn}>\n <div className={classes.topBar}>\n <Button\n variant=\"link\"\n className={classes.closeButton}\n onClick={onClose}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </div>\n\n <div className={classes.mainContent}>{renderMainContent()}</div>\n\n {!hasDocuments && messages.length === 0 && (\n <div className={classes.footerAlignedAlert}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n )}\n\n <ChatbotFooter className={classes.footer}>\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={false}\n isSendButtonDisabled={isSendButtonDisabled}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n <ChatbotFootnote label={t('footer.accuracy.label')} />\n </ChatbotFooter>\n </div>\n </div>\n </DrawerContentBody>\n </DrawerContent>\n </Drawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n fileNames={filesToOverwrite.map(f => f.name)}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotebookView.esm.js","sources":["../../../src/components/notebooks/NotebookView.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { makeStyles, Typography } from '@material-ui/core';\nimport {\n ChatbotContent,\n ChatbotFooter,\n ChatbotFootnote,\n ChatbotWelcomePrompt,\n MessageBar,\n MessageProps,\n} from '@patternfly/chatbot';\nimport {\n Alert,\n AlertActionCloseButton,\n AlertGroup,\n AlertVariant,\n Button,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n Tooltip,\n type AlertProps,\n} from '@patternfly/react-core';\nimport { TimesIcon } from '@patternfly/react-icons';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { notebooksApiRef } from '../../api/notebooksApi';\nimport {\n NOTEBOOK_MAX_FILES,\n TEMP_CONVERSATION_ID,\n UNTITLED_NOTEBOOK_NAME,\n} from '../../const';\nimport { useCreateNotebookMessage } from '../../hooks/notebooks/useCreateNotebookMessage';\nimport {\n useDocumentStatusPolling,\n type PendingUpload,\n} from '../../hooks/notebooks/useDocumentStatusPolling';\nimport { useConversationMessages } from '../../hooks/useConversationMessages';\nimport { CreateMessageVariables } from '../../hooks/useCreateCoversationMessage';\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { useWelcomePrompts } from '../../hooks/useWelcomePrompts';\nimport { NotebookSessionMetadata, SessionDocument } from '../../types';\nimport { LightspeedChatBox } from '../LightspeedChatBox';\nimport { AddDocumentModal } from './AddDocumentModal';\nimport { DocumentSidebar } from './DocumentSidebar';\nimport { OverwriteConfirmModal } from './OverwriteConfirmModal';\nimport { AddCircleFilledIcon, SidebarExpandIcon } from './SidebarCollapseIcon';\nimport { UploadResourceScreen } from './UploadResourceScreen';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n height: '100%',\n backgroundColor: 'var(--pf-t--global--background--color--primary--default)',\n },\n drawerContainer: {\n flex: 1,\n minHeight: 0,\n },\n expandStrip: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n paddingTop: theme.spacing(1.5),\n gap: theme.spacing(1),\n borderRight: '1px solid var(--pf-t--global--border--color--default)',\n },\n addIconButton: {\n padding: 0,\n minWidth: 0,\n lineHeight: 1,\n },\n mainArea: {\n display: 'flex',\n flexDirection: 'row',\n height: '100%',\n minWidth: 0,\n },\n topBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: `${theme.spacing(1.5)}px ${theme.spacing(2)}px`,\n },\n closeButton: {\n textTransform: 'none',\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n },\n drawerContentBody: {\n backgroundColor:\n 'var(--pf-t--global--background--color--secondary--default)',\n height: '100%',\n },\n contentColumn: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n overflow: 'hidden',\n },\n alertContainer: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n padding: `0 0 ${theme.spacing(1)}px`,\n },\n toastAlertGroup: {\n '--pf-v6-c-alert-group--m-toast--InsetInlineEnd': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--InsetBlockStart': `${theme.spacing(2.5)}px`,\n '--pf-v6-c-alert-group--m-toast--MaxWidth': '350px',\n },\n toastAlert: {\n maxWidth: '350px',\n '& .pf-v6-c-alert__title': {\n margin: 0,\n },\n },\n welcomeContainer: {\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n },\n notebookContentArea: {\n width: '95%',\n maxWidth: 'unset',\n margin: `${theme.spacing(3)}px auto 0 auto`,\n padding: 0,\n },\n notebookHeading: {\n fontSize: '2rem',\n fontWeight: 500,\n lineHeight: 1.25,\n padding: `${theme.spacing(1)}px 0`,\n },\n notebookSummary: {\n fontSize: '1rem',\n lineHeight: 2,\n color: 'var(--pf-t--global--text--color--regular)',\n paddingTop: theme.spacing(0.5),\n },\n promptSuggestions: {\n width: '95%',\n maxWidth: 'unset',\n margin: '0 auto',\n },\n footerAlignedAlert: {\n maxWidth: 'unset',\n width: '95%',\n margin: '0 auto',\n padding: `0 0 ${theme.spacing(1)}px`,\n },\n footer: {\n '&>.pf-chatbot__footer-container': {\n width: '95% !important',\n maxWidth: 'unset !important',\n },\n },\n chatContent: {\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'auto',\n },\n}));\n\ntype NotebookViewProps = {\n sessionId: string;\n notebookName?: string;\n documents?: SessionDocument[];\n metadata?: NotebookSessionMetadata;\n topicSummary?: string;\n userName?: string;\n avatar?: string;\n profileLoading: boolean;\n topicRestrictionEnabled: boolean;\n selectedModel: string;\n onClose: () => void;\n};\n\nexport const NotebookView = ({\n sessionId,\n notebookName = UNTITLED_NOTEBOOK_NAME,\n documents = [],\n metadata,\n topicSummary,\n userName,\n avatar,\n profileLoading,\n topicRestrictionEnabled,\n selectedModel,\n onClose,\n}: NotebookViewProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const queryClient = useQueryClient();\n const notebooksApi = useApi(notebooksApiRef);\n const { mutateAsync: notebookCreateMessage } = useCreateNotebookMessage();\n\n const [conversationId, setConversationId] = useState(\n metadata?.conversation_id ?? TEMP_CONVERSATION_ID,\n );\n const [isSendButtonDisabled, setIsSendButtonDisabled] = useState(false);\n const [announcement, setAnnouncement] = useState<string | undefined>(\n undefined,\n );\n const [deletingDocumentIds, setDeletingDocumentIds] = useState<Set<string>>(\n new Set(),\n );\n\n const handleDeleteDocument = useCallback(\n async (documentId: string) => {\n setDeletingDocumentIds(prev => new Set(prev).add(documentId));\n try {\n await notebooksApi.deleteDocument(sessionId, documentId);\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n } finally {\n setDeletingDocumentIds(prev => {\n const next = new Set(prev);\n next.delete(documentId);\n return next;\n });\n }\n },\n [notebooksApi, sessionId, queryClient],\n );\n\n const onComplete = useCallback(\n (message: string) => {\n setIsSendButtonDisabled(false);\n setAnnouncement(`Message from Bot: ${message}`);\n queryClient.invalidateQueries({\n queryKey: ['conversationMessages', conversationId],\n });\n },\n [queryClient, conversationId],\n );\n\n const onStart = useCallback((conv_id: string) => {\n setConversationId(conv_id);\n }, []);\n\n const createMessageAdapter = useCallback(\n async (vars: CreateMessageVariables) => {\n return notebookCreateMessage({\n prompt: vars.prompt,\n sessionId,\n });\n },\n [notebookCreateMessage, sessionId],\n );\n\n const { conversationMessages, handleInputPrompt, scrollToBottomRef } =\n useConversationMessages(\n conversationId,\n userName,\n selectedModel,\n '',\n avatar,\n onComplete,\n onStart,\n createMessageAdapter,\n );\n\n const [messages, setMessages] =\n useState<MessageProps[]>(conversationMessages);\n\n useEffect(() => {\n setMessages(conversationMessages);\n }, [conversationMessages]);\n\n const sendMessage = useCallback(\n (message: string | number) => {\n setAnnouncement(\n t('conversation.announcement.userMessage' as any, {\n prompt: message.toString(),\n }),\n );\n handleInputPrompt(message.toString(), []);\n setIsSendButtonDisabled(true);\n },\n [handleInputPrompt, t],\n );\n\n const samplePrompts = useWelcomePrompts();\n const welcomePrompts =\n samplePrompts?.map(prompt => {\n const p = prompt as { title: string; message: string };\n return {\n title: p.title,\n message: p.message,\n onClick: () => sendMessage(p.message),\n };\n }) ?? [];\n\n const [sidebarCollapsed, setSidebarCollapsed] = useState(false);\n const [isUploadModalOpen, setIsUploadModalOpen] = useState(false);\n const [uploadingFileNames, setUploadingFileNames] = useState<string[]>([]);\n const [pendingUploads, setPendingUploads] = useState<PendingUpload[]>([]);\n const [toastAlerts, setToastAlerts] = useState<Partial<AlertProps>[]>([]);\n const processedIds = useRef<Set<string>>(new Set());\n const [completedFileNames, setCompletedFileNames] = useState<Set<string>>(\n new Set(),\n );\n const [filesToOverwrite, setFilesToOverwrite] = useState<File[]>([]);\n const [isOverwriteModalOpen, setIsOverwriteModalOpen] = useState(false);\n const [filesToAddToModal, setFilesToAddToModal] = useState<File[]>([]);\n\n const handleOpenUploadModal = () => setIsUploadModalOpen(true);\n const handleCloseUploadModal = () => setIsUploadModalOpen(false);\n\n const handleFilesUploading = (files: File[]) => {\n setUploadingFileNames(prev => {\n const newNames = files\n .map(f => f.name)\n .filter(name => !prev.includes(name));\n return [...prev, ...newNames];\n });\n };\n\n const handleUploadStarted = (info: {\n fileName: string;\n documentId: string;\n }) => {\n processedIds.current.delete(info.documentId);\n setPendingUploads(prev => [\n ...prev,\n { fileName: info.fileName, documentId: info.documentId },\n ]);\n };\n\n const handleUploadFailed = (fileName: string) => {\n setUploadingFileNames(prev => prev.filter(n => n !== fileName));\n setToastAlerts(prev => [\n {\n key: Date.now() + fileName,\n title: (t as Function)('notebook.upload.failed', {\n fileName,\n }) as string,\n variant: 'danger',\n },\n ...prev,\n ]);\n };\n\n const handleDuplicatesFound = (files: File[]) => {\n setFilesToOverwrite(files);\n setIsOverwriteModalOpen(true);\n };\n\n const handleOverwriteConfirm = () => {\n const files = filesToOverwrite;\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n\n if (files.length === 0) return;\n\n setFilesToAddToModal(files);\n };\n\n const handleFilesAddedToModal = () => {\n setFilesToAddToModal([]);\n };\n\n const handleOverwriteCancel = () => {\n setIsOverwriteModalOpen(false);\n setFilesToOverwrite([]);\n };\n\n const pollingResults = useDocumentStatusPolling(sessionId, pendingUploads);\n\n useEffect(() => {\n const completedOrFailed = pollingResults.filter(\n r =>\n (r.status === 'completed' ||\n r.status === 'failed' ||\n r.status === 'cancelled') &&\n !processedIds.current.has(r.documentId),\n );\n\n if (completedOrFailed.length === 0) return;\n\n const idsToRemove = new Set<string>();\n const namesToRemove = new Set<string>();\n const newAlerts: Partial<AlertProps>[] = [];\n\n const newCompletedNames = new Set<string>();\n\n for (const result of completedOrFailed) {\n processedIds.current.add(result.documentId);\n idsToRemove.add(result.documentId);\n namesToRemove.add(result.fileName);\n if (result.status === 'completed') {\n newCompletedNames.add(result.fileName);\n }\n\n if (result.status === 'completed') {\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: (t as Function)('notebook.upload.success', {\n fileName: result.fileName,\n }) as string,\n variant: 'success',\n });\n } else {\n newAlerts.push({\n key: Date.now() + result.documentId,\n title: (t as Function)('notebook.upload.failed', {\n fileName: result.fileName,\n }) as string,\n variant: 'danger',\n });\n }\n }\n\n setPendingUploads(prev => prev.filter(u => !idsToRemove.has(u.documentId)));\n setUploadingFileNames(prev =>\n prev.filter(name => !namesToRemove.has(name)),\n );\n if (newCompletedNames.size > 0) {\n setCompletedFileNames(prev => new Set([...prev, ...newCompletedNames]));\n queryClient.invalidateQueries({\n queryKey: ['notebooks', 'documents', sessionId],\n });\n }\n setToastAlerts(prev => [...newAlerts, ...prev]);\n }, [pollingResults, t, queryClient, sessionId]);\n\n const handleRemoveToastAlert = (key: React.Key) => {\n setToastAlerts(prev => prev.filter(a => a.key !== key));\n };\n\n const hasDocuments = documents.length > 0 || uploadingFileNames.length > 0;\n const totalDocumentCount = documents.length + uploadingFileNames.length;\n const isAddDisabled = totalDocumentCount >= NOTEBOOK_MAX_FILES;\n\n const panelContent = (\n <DrawerPanelContent\n isResizable\n defaultSize=\"310px\"\n minSize=\"232px\"\n maxSize=\"50%\"\n resizeAriaLabel={t('notebook.view.sidebar.resize')}\n >\n <DocumentSidebar\n notebookName={notebookName}\n documents={documents}\n uploadingFileNames={uploadingFileNames}\n completedFileNames={completedFileNames}\n deletingDocumentIds={deletingDocumentIds}\n collapsed={sidebarCollapsed}\n onToggleCollapse={() => setSidebarCollapsed(prev => !prev)}\n onAddDocument={handleOpenUploadModal}\n onDeleteDocument={handleDeleteDocument}\n />\n </DrawerPanelContent>\n );\n\n const renderMainContent = () => {\n if (!hasDocuments && messages.length === 0) {\n return <UploadResourceScreen onUploadClick={handleOpenUploadModal} />;\n }\n if (messages.length > 0) {\n return (\n <ChatbotContent className={classes.chatContent}>\n <LightspeedChatBox\n userName={userName}\n messages={messages}\n profileLoading={profileLoading}\n announcement={announcement}\n ref={scrollToBottomRef}\n welcomePrompts={[]}\n conversationId={conversationId}\n isStreaming={isSendButtonDisabled}\n topicRestrictionEnabled={topicRestrictionEnabled}\n />\n </ChatbotContent>\n );\n }\n return (\n <div className={classes.welcomeContainer}>\n <div className={classes.alertContainer}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n <div className={classes.notebookContentArea}>\n <Typography className={classes.notebookHeading}>\n {notebookName}\n </Typography>\n {topicSummary && (\n <Typography className={classes.notebookSummary}>\n {topicSummary}\n </Typography>\n )}\n </div>\n {welcomePrompts.length > 0 && (\n <div className={classes.promptSuggestions}>\n <ChatbotWelcomePrompt\n title=\"\"\n description=\"\"\n prompts={welcomePrompts}\n />\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className={classes.root}>\n {toastAlerts.length > 0 && (\n <AlertGroup\n hasAnimations\n isToast\n isLiveRegion\n className={classes.toastAlertGroup}\n >\n {toastAlerts.map(({ key, title, variant }) => (\n <Alert\n key={key}\n variant={AlertVariant[variant ?? 'success']}\n title={title}\n className={classes.toastAlert}\n timeout={2000}\n onTimeout={() => handleRemoveToastAlert(key as React.Key)}\n actionClose={\n <AlertActionCloseButton\n title={title as string}\n variantLabel={`${variant ?? 'success'} alert`}\n onClose={() => handleRemoveToastAlert(key as React.Key)}\n />\n }\n />\n ))}\n </AlertGroup>\n )}\n <Drawer\n isExpanded={!sidebarCollapsed}\n isInline\n position=\"start\"\n className={classes.drawerContainer}\n >\n <DrawerContent\n panelContent={!sidebarCollapsed ? panelContent : undefined}\n >\n <DrawerContentBody className={classes.drawerContentBody}>\n <div className={classes.mainArea}>\n {sidebarCollapsed && (\n <div className={classes.expandStrip}>\n <Tooltip\n content={t('notebook.view.sidebar.expand')}\n position=\"right\"\n >\n <Button\n variant=\"plain\"\n onClick={() => setSidebarCollapsed(false)}\n aria-label={t('notebook.view.sidebar.expand')}\n size=\"sm\"\n >\n <SidebarExpandIcon />\n </Button>\n </Tooltip>\n <Tooltip\n content={\n isAddDisabled\n ? t('notebook.view.documents.maxReached')\n : t('notebook.view.documents.add')\n }\n position=\"right\"\n >\n <span>\n <Button\n variant=\"plain\"\n className={classes.addIconButton}\n onClick={\n isAddDisabled ? undefined : handleOpenUploadModal\n }\n aria-label={t('notebook.view.documents.add')}\n isDisabled={isAddDisabled}\n >\n <AddCircleFilledIcon disabled={isAddDisabled} />\n </Button>\n </span>\n </Tooltip>\n </div>\n )}\n\n <div className={classes.contentColumn}>\n <div className={classes.topBar}>\n <Button\n variant=\"link\"\n className={classes.closeButton}\n onClick={onClose}\n icon={<TimesIcon />}\n iconPosition=\"end\"\n >\n {t('notebook.view.close')}\n </Button>\n </div>\n\n <div className={classes.mainContent}>{renderMainContent()}</div>\n\n {!hasDocuments && messages.length === 0 && (\n <div className={classes.footerAlignedAlert}>\n <Alert isInline variant=\"info\" title={t('aria.important')}>\n {t('disclaimer.withoutValidation')}\n </Alert>\n </div>\n )}\n\n <ChatbotFooter className={classes.footer}>\n {documents.length === 0 ? (\n <Tooltip\n content={t('notebook.view.input.disabledTooltip')}\n position=\"top\"\n >\n <div>\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton={false}\n hasStopButton={false}\n isSendButtonDisabled\n isDisabled\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n </div>\n </Tooltip>\n ) : (\n <MessageBar\n hasAttachButton={false}\n hasMicrophoneButton\n hasStopButton={false}\n isSendButtonDisabled={isSendButtonDisabled}\n onSendMessage={sendMessage}\n placeholder={t('notebook.view.input.placeholder')}\n />\n )}\n <ChatbotFootnote label={t('footer.accuracy.label')} />\n </ChatbotFooter>\n </div>\n </div>\n </DrawerContentBody>\n </DrawerContent>\n </Drawer>\n\n <AddDocumentModal\n isOpen={isUploadModalOpen}\n onClose={handleCloseUploadModal}\n sessionId={sessionId}\n existingDocumentNames={documents.map(d => d.title)}\n onFilesUploading={handleFilesUploading}\n onUploadStarted={handleUploadStarted}\n onUploadFailed={handleUploadFailed}\n onDuplicatesFound={handleDuplicatesFound}\n filesToAdd={filesToAddToModal}\n onFilesAdded={handleFilesAddedToModal}\n />\n\n <OverwriteConfirmModal\n isOpen={isOverwriteModalOpen}\n onClose={handleOverwriteCancel}\n onConfirm={handleOverwriteConfirm}\n fileNames={filesToOverwrite.map(f => f.name)}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -45,7 +45,8 @@ const useStyles = makeStyles((theme) => ({
45
45
  alignItems: "center",
46
46
  gap: theme.spacing(1),
47
47
  padding: `${theme.spacing(2)}px 0`,
48
- borderBottom: "1px solid var(--pf-t--global--border--color--default, #c7c7c7)"
48
+ borderBottom: "1px solid var(--pf-t--global--border--color--default, #c7c7c7)",
49
+ cursor: "pointer"
49
50
  },
50
51
  fileName: {
51
52
  flex: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"OverwriteConfirmModal.esm.js","sources":["../../../src/components/notebooks/OverwriteConfirmModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 24,\n maxWidth: 578,\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '24px 24px 16px',\n },\n titleText: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '1.625rem',\n letterSpacing: '-0.25px',\n },\n closeButton: {\n color: theme.palette.grey[700],\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n fileList: {\n margin: 0,\n padding: 0,\n listStyle: 'none',\n },\n fileItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: `${theme.spacing(2)}px 0`,\n borderBottom:\n '1px solid var(--pf-t--global--border--color--default, #c7c7c7)',\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n },\n dialogActions: {\n justifyContent: 'left',\n padding: theme.spacing(2.5),\n gap: theme.spacing(1),\n },\n overwriteButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n cancelButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n warningAlert: {\n borderRadius: '6px',\n },\n}));\n\ntype OverwriteConfirmModalProps = {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n fileNames: string[];\n};\n\nexport const OverwriteConfirmModal = ({\n isOpen,\n onClose,\n onConfirm,\n fileNames,\n}: OverwriteConfirmModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"overwrite-confirm-modal-title\"\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Typography component=\"h2\" className={classes.titleText}>\n {t('notebook.overwrite.modal.title')}\n </Typography>\n <IconButton\n aria-label={t('common.close')}\n onClick={onClose}\n className={classes.closeButton}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className={classes.dialogContent}>\n <Alert severity=\"warning\" className={classes.warningAlert}>\n {t('notebook.overwrite.modal.description')}\n </Alert>\n\n <ul className={classes.fileList}>\n {fileNames.map(name => (\n <li key={name} className={classes.fileItem}>\n <FileTypeIcon fileName={name} />\n <Typography className={classes.fileName}>{name}</Typography>\n </li>\n ))}\n </ul>\n </DialogContent>\n\n <DialogActions className={classes.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"error\"\n className={classes.overwriteButton}\n onClick={onConfirm}\n >\n {t('notebook.overwrite.modal.action')}\n </Button>\n <Button\n variant=\"outlined\"\n className={classes.cancelButton}\n onClick={onClose}\n >\n {t('common.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OverwriteConfirmModal.esm.js","sources":["../../../src/components/notebooks/OverwriteConfirmModal.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Alert from '@mui/material/Alert';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\n\nimport { useTranslation } from '../../hooks/useTranslation';\nimport { FileTypeIcon } from './FileTypeIcon';\n\nconst useStyles = makeStyles(theme => ({\n dialogPaper: {\n borderRadius: 24,\n maxWidth: 578,\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '24px 24px 16px',\n },\n titleText: {\n fontWeight: 500,\n fontSize: '1.25rem',\n lineHeight: '1.625rem',\n letterSpacing: '-0.25px',\n },\n closeButton: {\n color: theme.palette.grey[700],\n },\n dialogContent: {\n padding: '0 24px 24px',\n },\n fileList: {\n margin: 0,\n padding: 0,\n listStyle: 'none',\n },\n fileItem: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: `${theme.spacing(2)}px 0`,\n borderBottom:\n '1px solid var(--pf-t--global--border--color--default, #c7c7c7)',\n cursor: 'pointer',\n },\n fileName: {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n fontSize: '0.875rem',\n lineHeight: '1.25rem',\n },\n dialogActions: {\n justifyContent: 'left',\n padding: theme.spacing(2.5),\n gap: theme.spacing(1),\n },\n overwriteButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n cancelButton: {\n textTransform: 'none',\n borderRadius: 999,\n },\n warningAlert: {\n borderRadius: '6px',\n },\n}));\n\ntype OverwriteConfirmModalProps = {\n isOpen: boolean;\n onClose: () => void;\n onConfirm: () => void;\n fileNames: string[];\n};\n\nexport const OverwriteConfirmModal = ({\n isOpen,\n onClose,\n onConfirm,\n fileNames,\n}: OverwriteConfirmModalProps) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"overwrite-confirm-modal-title\"\n PaperProps={{\n className: classes.dialogPaper,\n }}\n >\n <DialogTitle className={classes.dialogTitle}>\n <Typography component=\"h2\" className={classes.titleText}>\n {t('notebook.overwrite.modal.title')}\n </Typography>\n <IconButton\n aria-label={t('common.close')}\n onClick={onClose}\n className={classes.closeButton}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n\n <DialogContent className={classes.dialogContent}>\n <Alert severity=\"warning\" className={classes.warningAlert}>\n {t('notebook.overwrite.modal.description')}\n </Alert>\n\n <ul className={classes.fileList}>\n {fileNames.map(name => (\n <li key={name} className={classes.fileItem}>\n <FileTypeIcon fileName={name} />\n <Typography className={classes.fileName}>{name}</Typography>\n </li>\n ))}\n </ul>\n </DialogContent>\n\n <DialogActions className={classes.dialogActions}>\n <Button\n variant=\"contained\"\n color=\"error\"\n className={classes.overwriteButton}\n onClick={onConfirm}\n >\n {t('notebook.overwrite.modal.action')}\n </Button>\n <Button\n variant=\"outlined\"\n className={classes.cancelButton}\n onClick={onClose}\n >\n {t('common.cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -24,7 +24,10 @@ const SidebarExpandIcon = ({ className }) => /* @__PURE__ */ jsx(
24
24
  children: /* @__PURE__ */ jsx("path", { d: "M9 21V3H11V21H9ZM13 17V7L18 12L13 17Z", fill: "currentColor" })
25
25
  }
26
26
  );
27
- const AddCircleFilledIcon = ({ className }) => /* @__PURE__ */ jsx(
27
+ const AddCircleFilledIcon = ({
28
+ className,
29
+ disabled
30
+ }) => /* @__PURE__ */ jsx(
28
31
  "svg",
29
32
  {
30
33
  className,
@@ -37,7 +40,7 @@ const AddCircleFilledIcon = ({ className }) => /* @__PURE__ */ jsx(
37
40
  "path",
38
41
  {
39
42
  d: "M7.75 0C12.0312 1.02089e-05 15.5 3.46877 15.5 7.75C15.5 12.0312 12.0312 15.5 7.75 15.5C3.46877 15.5 1.02086e-05 12.0312 0 7.75C0 3.46876 3.46876 0 7.75 0ZM6.875 3.25C6.66876 3.25 6.5 3.41876 6.5 3.625V6.5H3.625C3.41876 6.5 3.25 6.66876 3.25 6.875V8.625C3.25001 8.83123 3.41877 9 3.625 9H6.5V11.875C6.50002 12.0812 6.66877 12.25 6.875 12.25H8.625C8.83122 12.25 8.99998 12.0812 9 11.875V9H11.875C12.0812 8.99998 12.25 8.83122 12.25 8.625V6.875C12.25 6.66877 12.0812 6.50002 11.875 6.5H9V3.625C9 3.41877 8.83123 3.25001 8.625 3.25H6.875Z",
40
- fill: "#0066CC"
43
+ fill: disabled ? "#8a8d90" : "#0066CC"
41
44
  }
42
45
  )
43
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SidebarCollapseIcon.esm.js","sources":["../../../src/components/notebooks/SidebarCollapseIcon.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype IconProps = {\n className?: string;\n};\n\nexport const SidebarCollapseIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M16 21V3H14V21H16ZM12 17V7L7 12L12 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const SidebarExpandIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 21V3H11V21H9ZM13 17V7L18 12L13 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const AddCircleFilledIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.75 0C12.0312 1.02089e-05 15.5 3.46877 15.5 7.75C15.5 12.0312 12.0312 15.5 7.75 15.5C3.46877 15.5 1.02086e-05 12.0312 0 7.75C0 3.46876 3.46876 0 7.75 0ZM6.875 3.25C6.66876 3.25 6.5 3.41876 6.5 3.625V6.5H3.625C3.41876 6.5 3.25 6.66876 3.25 6.875V8.625C3.25001 8.83123 3.41877 9 3.625 9H6.5V11.875C6.50002 12.0812 6.66877 12.25 6.875 12.25H8.625C8.83122 12.25 8.99998 12.0812 9 11.875V9H11.875C12.0812 8.99998 12.25 8.83122 12.25 8.625V6.875C12.25 6.66877 12.0812 6.50002 11.875 6.5H9V3.625C9 3.41877 8.83123 3.25001 8.625 3.25H6.875Z\"\n fill=\"#0066CC\"\n />\n </svg>\n);\n"],"names":[],"mappings":";;AAoBO,MAAM,mBAAsB,GAAA,CAAC,EAAE,SAAA,EACpC,qBAAA,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,wCAAA,EAAyC,MAAK,cAAe,EAAA;AAAA;AACvE;AAGK,MAAM,iBAAoB,GAAA,CAAC,EAAE,SAAA,EAClC,qBAAA,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,uCAAA,EAAwC,MAAK,cAAe,EAAA;AAAA;AACtE;AAGK,MAAM,mBAAsB,GAAA,CAAC,EAAE,SAAA,EACpC,qBAAA,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAE,EAAA,whBAAA;AAAA,QACF,IAAK,EAAA;AAAA;AAAA;AACP;AACF;;;;"}
1
+ {"version":3,"file":"SidebarCollapseIcon.esm.js","sources":["../../../src/components/notebooks/SidebarCollapseIcon.tsx"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype IconProps = {\n className?: string;\n};\n\nexport const SidebarCollapseIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M16 21V3H14V21H16ZM12 17V7L7 12L12 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\nexport const SidebarExpandIcon = ({ className }: IconProps) => (\n <svg\n className={className}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M9 21V3H11V21H9ZM13 17V7L18 12L13 17Z\" fill=\"currentColor\" />\n </svg>\n);\n\ntype AddCircleFilledIconProps = IconProps & {\n disabled?: boolean;\n};\n\nexport const AddCircleFilledIcon = ({\n className,\n disabled,\n}: AddCircleFilledIconProps) => (\n <svg\n className={className}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.75 0C12.0312 1.02089e-05 15.5 3.46877 15.5 7.75C15.5 12.0312 12.0312 15.5 7.75 15.5C3.46877 15.5 1.02086e-05 12.0312 0 7.75C0 3.46876 3.46876 0 7.75 0ZM6.875 3.25C6.66876 3.25 6.5 3.41876 6.5 3.625V6.5H3.625C3.41876 6.5 3.25 6.66876 3.25 6.875V8.625C3.25001 8.83123 3.41877 9 3.625 9H6.5V11.875C6.50002 12.0812 6.66877 12.25 6.875 12.25H8.625C8.83122 12.25 8.99998 12.0812 9 11.875V9H11.875C12.0812 8.99998 12.25 8.83122 12.25 8.625V6.875C12.25 6.66877 12.0812 6.50002 11.875 6.5H9V3.625C9 3.41877 8.83123 3.25001 8.625 3.25H6.875Z\"\n fill={disabled ? '#8a8d90' : '#0066CC'}\n />\n </svg>\n);\n"],"names":[],"mappings":";;AAoBO,MAAM,mBAAsB,GAAA,CAAC,EAAE,SAAA,EACpC,qBAAA,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,wCAAA,EAAyC,MAAK,cAAe,EAAA;AAAA;AACvE;AAGK,MAAM,iBAAoB,GAAA,CAAC,EAAE,SAAA,EAClC,qBAAA,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,uCAAA,EAAwC,MAAK,cAAe,EAAA;AAAA;AACtE;AAOK,MAAM,sBAAsB,CAAC;AAAA,EAClC,SAAA;AAAA,EACA;AACF,CACE,qBAAA,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,KAAM,EAAA,IAAA;AAAA,IACN,MAAO,EAAA,IAAA;AAAA,IACP,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAE,EAAA,whBAAA;AAAA,QACF,IAAA,EAAM,WAAW,SAAY,GAAA;AAAA;AAAA;AAC/B;AACF;;;;"}
@@ -0,0 +1,61 @@
1
+ const MAX_TOOL_CALLS_CACHE_KEYS = 256;
2
+ const sharedToolCallsCache = {};
3
+ const keyOrder = [];
4
+ function removeKeyFromOrder(key) {
5
+ const i = keyOrder.indexOf(key);
6
+ if (i >= 0) {
7
+ keyOrder.splice(i, 1);
8
+ }
9
+ }
10
+ function touchCacheKey(key) {
11
+ removeKeyFromOrder(key);
12
+ keyOrder.push(key);
13
+ while (keyOrder.length > MAX_TOOL_CALLS_CACHE_KEYS) {
14
+ const oldest = keyOrder.shift();
15
+ if (oldest) {
16
+ delete sharedToolCallsCache[oldest];
17
+ }
18
+ }
19
+ }
20
+ function getSharedToolCallsCache(key) {
21
+ const v = sharedToolCallsCache[key];
22
+ return v?.length ? v : undefined;
23
+ }
24
+ function setSharedToolCallsCache(key, toolCalls) {
25
+ sharedToolCallsCache[key] = toolCalls;
26
+ touchCacheKey(key);
27
+ }
28
+ function clearSharedToolCallsCacheForConversation(conversationId) {
29
+ const prefix = `${conversationId}-`;
30
+ for (const key of [...Object.keys(sharedToolCallsCache)]) {
31
+ if (key.startsWith(prefix)) {
32
+ delete sharedToolCallsCache[key];
33
+ removeKeyFromOrder(key);
34
+ }
35
+ }
36
+ }
37
+ function migrateSharedToolCallsCacheSessionPrefixToConversation(sessionPrefix, newConversationId) {
38
+ const keyPrefix = `${sessionPrefix}-`;
39
+ for (const key of [...Object.keys(sharedToolCallsCache)]) {
40
+ if (key.startsWith(keyPrefix)) {
41
+ const messageIndex = key.slice(keyPrefix.length);
42
+ const newKey = `${newConversationId}-${messageIndex}`;
43
+ sharedToolCallsCache[newKey] = sharedToolCallsCache[key];
44
+ delete sharedToolCallsCache[key];
45
+ removeKeyFromOrder(key);
46
+ touchCacheKey(newKey);
47
+ }
48
+ }
49
+ }
50
+ function clearSharedToolCallsCacheSessionPrefix(sessionPrefix) {
51
+ const keyPrefix = `${sessionPrefix}-`;
52
+ for (const key of [...Object.keys(sharedToolCallsCache)]) {
53
+ if (key.startsWith(keyPrefix)) {
54
+ delete sharedToolCallsCache[key];
55
+ removeKeyFromOrder(key);
56
+ }
57
+ }
58
+ }
59
+
60
+ export { clearSharedToolCallsCacheForConversation, clearSharedToolCallsCacheSessionPrefix, getSharedToolCallsCache, migrateSharedToolCallsCacheSessionPrefixToConversation, setSharedToolCallsCache };
61
+ //# sourceMappingURL=toolCallsCacheStore.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolCallsCacheStore.esm.js","sources":["../../src/hooks/toolCallsCacheStore.ts"],"sourcesContent":["/*\n * Copyright Red Hat, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ToolCall } from '../types';\n\n/**\n * Caps how many conversation/message-index entries we retain. Oldest touched\n * entries are evicted first (approximate LRU via insertion order in keyOrder).\n */\nconst MAX_TOOL_CALLS_CACHE_KEYS = 256;\n\nconst sharedToolCallsCache: Record<string, ToolCall[]> = {};\nconst keyOrder: string[] = [];\n\nfunction removeKeyFromOrder(key: string) {\n const i = keyOrder.indexOf(key);\n if (i >= 0) {\n keyOrder.splice(i, 1);\n }\n}\n\nfunction touchCacheKey(key: string) {\n removeKeyFromOrder(key);\n keyOrder.push(key);\n while (keyOrder.length > MAX_TOOL_CALLS_CACHE_KEYS) {\n const oldest = keyOrder.shift();\n if (oldest) {\n delete sharedToolCallsCache[oldest];\n }\n }\n}\n\nexport function getSharedToolCallsCache(key: string): ToolCall[] | undefined {\n const v = sharedToolCallsCache[key];\n return v?.length ? v : undefined;\n}\n\nexport function setSharedToolCallsCache(key: string, toolCalls: ToolCall[]) {\n sharedToolCallsCache[key] = toolCalls;\n touchCacheKey(key);\n}\n\n/**\n * Drop all cached tool rows for a conversation (e.g. after server delete).\n */\nexport function clearSharedToolCallsCacheForConversation(\n conversationId: string,\n) {\n const prefix = `${conversationId}-`;\n for (const key of [...Object.keys(sharedToolCallsCache)]) {\n if (key.startsWith(prefix)) {\n delete sharedToolCallsCache[key];\n removeKeyFromOrder(key);\n }\n }\n}\n\n/**\n * Moves tool-call cache entries from a per-stream session prefix (used while\n * conversation id is still temp) to the persisted conversation id. Only keys\n * for this prefix are migrated so a late stream cannot clobber another temp\n * session.\n */\nexport function migrateSharedToolCallsCacheSessionPrefixToConversation(\n sessionPrefix: string,\n newConversationId: string,\n) {\n const keyPrefix = `${sessionPrefix}-`;\n for (const key of [...Object.keys(sharedToolCallsCache)]) {\n if (key.startsWith(keyPrefix)) {\n const messageIndex = key.slice(keyPrefix.length);\n const newKey = `${newConversationId}-${messageIndex}`;\n sharedToolCallsCache[newKey] = sharedToolCallsCache[key];\n delete sharedToolCallsCache[key];\n removeKeyFromOrder(key);\n touchCacheKey(newKey);\n }\n }\n}\n\n/** Removes cache entries written under a per-temp-stream session prefix. */\nexport function clearSharedToolCallsCacheSessionPrefix(sessionPrefix: string) {\n const keyPrefix = `${sessionPrefix}-`;\n for (const key of [...Object.keys(sharedToolCallsCache)]) {\n if (key.startsWith(keyPrefix)) {\n delete sharedToolCallsCache[key];\n removeKeyFromOrder(key);\n }\n }\n}\n\n/** Clears the store; only used from unit tests. */\nexport function resetSharedToolCallsCacheStoreForTests() {\n for (const key of Object.keys(sharedToolCallsCache)) {\n delete sharedToolCallsCache[key];\n }\n keyOrder.length = 0;\n}\n"],"names":[],"mappings":"AAsBA,MAAM,yBAA4B,GAAA,GAAA;AAElC,MAAM,uBAAmD,EAAC;AAC1D,MAAM,WAAqB,EAAC;AAE5B,SAAS,mBAAmB,GAAa,EAAA;AACvC,EAAM,MAAA,CAAA,GAAI,QAAS,CAAA,OAAA,CAAQ,GAAG,CAAA;AAC9B,EAAA,IAAI,KAAK,CAAG,EAAA;AACV,IAAS,QAAA,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA;AAExB;AAEA,SAAS,cAAc,GAAa,EAAA;AAClC,EAAA,kBAAA,CAAmB,GAAG,CAAA;AACtB,EAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,EAAO,OAAA,QAAA,CAAS,SAAS,yBAA2B,EAAA;AAClD,IAAM,MAAA,MAAA,GAAS,SAAS,KAAM,EAAA;AAC9B,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAO,qBAAqB,MAAM,CAAA;AAAA;AACpC;AAEJ;AAEO,SAAS,wBAAwB,GAAqC,EAAA;AAC3E,EAAM,MAAA,CAAA,GAAI,qBAAqB,GAAG,CAAA;AAClC,EAAO,OAAA,CAAA,EAAG,SAAS,CAAI,GAAA,SAAA;AACzB;AAEgB,SAAA,uBAAA,CAAwB,KAAa,SAAuB,EAAA;AAC1E,EAAA,oBAAA,CAAqB,GAAG,CAAI,GAAA,SAAA;AAC5B,EAAA,aAAA,CAAc,GAAG,CAAA;AACnB;AAKO,SAAS,yCACd,cACA,EAAA;AACA,EAAM,MAAA,MAAA,GAAS,GAAG,cAAc,CAAA,CAAA,CAAA;AAChC,EAAA,KAAA,MAAW,OAAO,CAAC,GAAG,OAAO,IAAK,CAAA,oBAAoB,CAAC,CAAG,EAAA;AACxD,IAAI,IAAA,GAAA,CAAI,UAAW,CAAA,MAAM,CAAG,EAAA;AAC1B,MAAA,OAAO,qBAAqB,GAAG,CAAA;AAC/B,MAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA;AACxB;AAEJ;AAQgB,SAAA,sDAAA,CACd,eACA,iBACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAY,GAAG,aAAa,CAAA,CAAA,CAAA;AAClC,EAAA,KAAA,MAAW,OAAO,CAAC,GAAG,OAAO,IAAK,CAAA,oBAAoB,CAAC,CAAG,EAAA;AACxD,IAAI,IAAA,GAAA,CAAI,UAAW,CAAA,SAAS,CAAG,EAAA;AAC7B,MAAA,MAAM,YAAe,GAAA,GAAA,CAAI,KAAM,CAAA,SAAA,CAAU,MAAM,CAAA;AAC/C,MAAA,MAAM,MAAS,GAAA,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA;AACnD,MAAqB,oBAAA,CAAA,MAAM,CAAI,GAAA,oBAAA,CAAqB,GAAG,CAAA;AACvD,MAAA,OAAO,qBAAqB,GAAG,CAAA;AAC/B,MAAA,kBAAA,CAAmB,GAAG,CAAA;AACtB,MAAA,aAAA,CAAc,MAAM,CAAA;AAAA;AACtB;AAEJ;AAGO,SAAS,uCAAuC,aAAuB,EAAA;AAC5E,EAAM,MAAA,SAAA,GAAY,GAAG,aAAa,CAAA,CAAA,CAAA;AAClC,EAAA,KAAA,MAAW,OAAO,CAAC,GAAG,OAAO,IAAK,CAAA,oBAAoB,CAAC,CAAG,EAAA;AACxD,IAAI,IAAA,GAAA,CAAI,UAAW,CAAA,SAAS,CAAG,EAAA;AAC7B,MAAA,OAAO,qBAAqB,GAAG,CAAA;AAC/B,MAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA;AACxB;AAEJ;;;;"}
@@ -6,6 +6,7 @@ import { TEMP_CONVERSATION_ID } from '../const.esm.js';
6
6
  import botAvatar from '../images/bot-avatar.svg';
7
7
  import userAvatar from '../images/user-avatar.svg';
8
8
  import { getConversationsData, createUserMessage, createBotMessage, transformDocumentsToSources, getTimestamp } from '../utils/lightspeed-chatbox-utils.esm.js';
9
+ import { getSharedToolCallsCache, setSharedToolCallsCache, migrateSharedToolCallsCacheSessionPrefixToConversation, clearSharedToolCallsCacheSessionPrefix } from './toolCallsCacheStore.esm.js';
9
10
  import { useCreateConversationMessage } from './useCreateCoversationMessage.esm.js';
10
11
 
11
12
  const toolCallIdKey = (id) => {
@@ -18,6 +19,11 @@ const isMcpStyleToolCallPayload = (data) => {
18
19
  const isLegacyToolResultToken = (token) => {
19
20
  return !!token && typeof token === "object" && !Array.isArray(token) && typeof token.tool_name === "string" && token.tool_name.length > 0;
20
21
  };
22
+ let tempToolCallsCachePrefixFallbackSeq = 0;
23
+ function createTempToolCallsCacheSessionPrefix() {
24
+ const suffix = globalThis.crypto?.randomUUID?.() ?? `${Date.now()}-${++tempToolCallsCachePrefixFallbackSeq}`;
25
+ return `lightspeed-temp:${suffix}`;
26
+ }
21
27
  const legacyToolResultToString = (response) => {
22
28
  if (!response) return "";
23
29
  if (typeof response === "string") return response;
@@ -50,7 +56,6 @@ const useConversationMessages = (conversationId, userName, selectedModel, select
50
56
  [currentConversation]: []
51
57
  });
52
58
  const pendingToolCalls = useRef({});
53
- const toolCallsCache = useRef({});
54
59
  useEffect(() => {
55
60
  if (currentConversation !== conversationId) {
56
61
  setCurrentConversation(conversationId);
@@ -95,7 +100,7 @@ const useConversationMessages = (conversationId, userName, selectedModel, select
95
100
  )
96
101
  });
97
102
  const cacheKey = `${currentConversation}-${i}`;
98
- const cachedToolCalls = toolCallsCache.current[cacheKey];
103
+ const cachedToolCalls = getSharedToolCallsCache(cacheKey);
99
104
  if (cachedToolCalls && cachedToolCalls.length > 0) {
100
105
  botMsg.toolCalls = cachedToolCalls;
101
106
  }
@@ -120,6 +125,7 @@ const useConversationMessages = (conversationId, userName, selectedModel, select
120
125
  async (prompt, attachments = []) => {
121
126
  let newConversationId = "";
122
127
  let requestId = "";
128
+ const toolCallsCacheKeyPrefix = currentConversation === TEMP_CONVERSATION_ID ? createTempToolCallsCacheSessionPrefix() : currentConversation;
123
129
  const conversationTuple = [
124
130
  createUserMessage({
125
131
  avatar,
@@ -226,8 +232,8 @@ const useConversationMessages = (conversationId, userName, selectedModel, select
226
232
  ];
227
233
  lastMessage.toolCalls = nextToolCalls;
228
234
  const messageIndex = Math.floor(lastMessageIndex / 2);
229
- const cacheKey = `${currentConversation}-${messageIndex}`;
230
- toolCallsCache.current[cacheKey] = nextToolCalls;
235
+ const cacheKey = `${toolCallsCacheKeyPrefix}-${messageIndex}`;
236
+ setSharedToolCallsCache(cacheKey, nextToolCalls);
231
237
  const updatedConversation = [
232
238
  ...conversation.slice(0, lastMessageIndex),
233
239
  lastMessage
@@ -297,8 +303,8 @@ const useConversationMessages = (conversationId, userName, selectedModel, select
297
303
  });
298
304
  lastMessage.toolCalls = updatedToolCalls;
299
305
  const messageIndex = Math.floor(lastMessageIndex / 2);
300
- const cacheKey = `${currentConversation}-${messageIndex}`;
301
- toolCallsCache.current[cacheKey] = updatedToolCalls;
306
+ const cacheKey = `${toolCallsCacheKeyPrefix}-${messageIndex}`;
307
+ setSharedToolCallsCache(cacheKey, updatedToolCalls);
302
308
  const updatedConversation = [
303
309
  ...conversation.slice(0, lastMessageIndex),
304
310
  lastMessage
@@ -458,14 +464,10 @@ const useConversationMessages = (conversationId, userName, selectedModel, select
458
464
  onComplete(finalMessages.join(""));
459
465
  }
460
466
  if (currentConversation === TEMP_CONVERSATION_ID && newConversationId) {
461
- Object.keys(toolCallsCache.current).forEach((key) => {
462
- if (key.startsWith(`${TEMP_CONVERSATION_ID}-`)) {
463
- const messageIndex = key.replace(`${TEMP_CONVERSATION_ID}-`, "");
464
- const newKey = `${newConversationId}-${messageIndex}`;
465
- toolCallsCache.current[newKey] = toolCallsCache.current[key];
466
- delete toolCallsCache.current[key];
467
- }
468
- });
467
+ migrateSharedToolCallsCacheSessionPrefixToConversation(
468
+ toolCallsCacheKeyPrefix,
469
+ newConversationId
470
+ );
469
471
  setConversations((prevConversations) => {
470
472
  return {
471
473
  ...prevConversations,
@@ -479,6 +481,8 @@ const useConversationMessages = (conversationId, userName, selectedModel, select
479
481
  return rest;
480
482
  });
481
483
  }, 0);
484
+ } else if (currentConversation === TEMP_CONVERSATION_ID) {
485
+ clearSharedToolCallsCacheSessionPrefix(toolCallsCacheKeyPrefix);
482
486
  }
483
487
  },
484
488
  [