Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,21 @@
* 2.0.
*/

import { useEffect } from 'react';
import { useQuery } from '@tanstack/react-query';
import { REACT_QUERY_KEYS } from '../constants';
import { useKibana } from './use_kibana';
import { useUninstallProductDoc } from './use_uninstall_product_doc';
import { useInstallProductDoc } from './use_install_product_doc';

export function useGetProductDocStatus(inferenceId: string | undefined) {
export function useGetProductDoc(inferenceId: string | undefined) {
const { productDocBase } = useKibana().services;

const { isLoading, isError, isSuccess, isRefetching, data, refetch } = useQuery({
const { mutateAsync: installProductDoc, isLoading: isInstalling } = useInstallProductDoc();

const { mutateAsync: uninstallProductDoc, isLoading: isUninstalling } = useUninstallProductDoc();

const { isLoading, data, refetch } = useQuery({
queryKey: [REACT_QUERY_KEYS.GET_PRODUCT_DOC_STATUS, inferenceId],
queryFn: async () => {
return productDocBase!.installation.getStatus({ inferenceId });
Expand All @@ -21,12 +28,15 @@ export function useGetProductDocStatus(inferenceId: string | undefined) {
refetchOnWindowFocus: false,
});

useEffect(() => {
refetch();
}, [inferenceId, isInstalling, isUninstalling, refetch]);

return {
status: data,
status: data?.inferenceId === inferenceId ? data?.overall : undefined,
refetch,
isLoading,
isRefetching,
isSuccess,
isError,
installProductDoc,
uninstallProductDoc,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
} from '@kbn/ai-assistant/src/utils/get_model_options_for_inference_endpoints';
import { useInferenceEndpoints, UseKnowledgeBaseResult } from '@kbn/ai-assistant/src/hooks';
import { KnowledgeBaseState, useKibana } from '@kbn/observability-ai-assistant-plugin/public';
import { useInstallProductDoc } from '../../../hooks/use_install_product_doc';
import { useGetProductDoc } from '../../../hooks/use_get_product_doc';

export function ChangeKbModel({ knowledgeBase }: { knowledgeBase: UseKnowledgeBaseResult }) {
const { overlays } = useKibana().services;
Expand All @@ -39,7 +39,7 @@ export function ChangeKbModel({ knowledgeBase }: { knowledgeBase: UseKnowledgeBa

const [hasLoadedCurrentModel, setHasLoadedCurrentModel] = useState(false);
const [isUpdatingModel, setIsUpdatingModel] = useState(false);
const { mutateAsync: installProductDoc } = useInstallProductDoc();
const { installProductDoc } = useGetProductDoc(currentlyDeployedInferenceId);

const { inferenceEndpoints, isLoading: isLoadingEndpoints, error } = useInferenceEndpoints();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* 2.0.
*/

import React, { useEffect, useState, useCallback, useMemo } from 'react';
import React, { useCallback, useMemo } from 'react';
import {
EuiButton,
EuiDescribedFormGroup,
Expand All @@ -19,49 +19,29 @@ import {
} from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n-react';
import { useKnowledgeBase } from '@kbn/ai-assistant';
import { UseKnowledgeBaseResult } from '@kbn/ai-assistant/src/hooks';
import { useKibana } from '../../../hooks/use_kibana';
import { useGetProductDocStatus } from '../../../hooks/use_get_product_doc_status';
import { useInstallProductDoc } from '../../../hooks/use_install_product_doc';
import { useUninstallProductDoc } from '../../../hooks/use_uninstall_product_doc';
import { useGetProductDoc } from '../../../hooks/use_get_product_doc';

export function ProductDocEntry() {
export function ProductDocEntry({ knowledgeBase }: { knowledgeBase: UseKnowledgeBaseResult }) {
const { overlays } = useKibana().services;

const knowledgeBase = useKnowledgeBase();
const selectedInferenceId: string | undefined = knowledgeBase.status.value?.currentInferenceId;

const canInstallProductDoc = selectedInferenceId !== undefined;

const [isInstalled, setInstalled] = useState<boolean>(false);
const [isInstalling, setInstalling] = useState<boolean>(false);

const { mutateAsync: installProductDoc } = useInstallProductDoc();
const { mutateAsync: uninstallProductDoc } = useUninstallProductDoc();
const { status, isLoading: isStatusLoading } = useGetProductDocStatus(selectedInferenceId);

useEffect(() => {
if (isStatusLoading) return;
if (status) {
setInstalled(status.overall === 'installed' && status.inferenceId === selectedInferenceId);
}
}, [selectedInferenceId, status, isStatusLoading]);
const {
status,
isLoading: isStatusLoading,
installProductDoc,
uninstallProductDoc,
} = useGetProductDoc(selectedInferenceId);

const onClickInstall = useCallback(() => {
if (!selectedInferenceId) {
throw new Error('Inference ID is required to install product documentation');
}
setInstalling(true);
installProductDoc(selectedInferenceId).then(
() => {
setInstalling(false);
setInstalled(true);
},
() => {
setInstalling(false);
setInstalled(false);
}
);
installProductDoc(selectedInferenceId);
}, [installProductDoc, selectedInferenceId]);

const onClickUninstall = useCallback(() => {
Expand All @@ -84,10 +64,7 @@ export function ProductDocEntry() {
)
.then((confirmed) => {
if (confirmed && selectedInferenceId) {
uninstallProductDoc(selectedInferenceId).then(() => {
setInstalling(false);
setInstalled(false);
});
uninstallProductDoc(selectedInferenceId);
}
});
}, [overlays, uninstallProductDoc, selectedInferenceId]);
Expand All @@ -96,7 +73,7 @@ export function ProductDocEntry() {
if (isStatusLoading) {
return <EuiLoadingSpinner size="m" />;
}
if (isInstalling) {
if (status === 'installing') {
return (
<EuiFlexGroup justifyContent="flexStart" alignItems="center">
<EuiLoadingSpinner size="m" />
Expand All @@ -109,7 +86,7 @@ export function ProductDocEntry() {
</EuiFlexGroup>
);
}
if (isInstalled) {
if (status === 'installed') {
return (
<EuiFlexGroup justifyContent="flexStart" alignItems="center">
<EuiFlexItem grow={false}>
Expand Down Expand Up @@ -170,14 +147,7 @@ export function ProductDocEntry() {
</EuiFlexItem>
</EuiFlexGroup>
);
}, [
canInstallProductDoc,
isInstalled,
isInstalling,
isStatusLoading,
onClickInstall,
onClickUninstall,
]);
}, [canInstallProductDoc, isStatusLoading, onClickInstall, onClickUninstall, status]);

return (
<EuiDescribedFormGroup
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ export function SettingsTab() {
</EuiFormRow>
</EuiDescribedFormGroup>

{productDocBase ? <ProductDocEntry /> : undefined}
{productDocBase ? <ProductDocEntry knowledgeBase={knowledgeBase} /> : undefined}

{knowledgeBase.status.value?.enabled && connectors.connectors?.length ? (
<ChangeKbModel knowledgeBase={knowledgeBase} />
Expand Down