mirror of
https://github.com/Azure/cosmos-explorer.git
synced 2025-03-13 05:15:30 +00:00
* gating copilot with AFEC * Add enable sample DB in settings * Add enable sample DB in settings * Add enable sample DB in settings * PR comments
257 lines
11 KiB
TypeScript
257 lines
11 KiB
TypeScript
import { MinimalQueryIterator } from "Common/IteratorUtilities";
|
|
import { QueryResults } from "Contracts/ViewModels";
|
|
import { CopilotMessage, CopilotSchemaAllocationInfo } from "Explorer/QueryCopilot/Shared/QueryCopilotInterfaces";
|
|
import { guid } from "Explorer/Tables/Utilities";
|
|
import { useTabs } from "hooks/useTabs";
|
|
import create, { UseStore } from "zustand";
|
|
import * as DataModels from "../Contracts/DataModels";
|
|
import { ContainerInfo } from "../Contracts/DataModels";
|
|
|
|
export interface QueryCopilotState {
|
|
copilotEnabled: boolean;
|
|
copilotUserDBEnabled: boolean;
|
|
copilotSampleDBEnabled: boolean;
|
|
generatedQuery: string;
|
|
likeQuery: boolean;
|
|
userPrompt: string;
|
|
showFeedbackModal: boolean;
|
|
hideFeedbackModalForLikedQueries: boolean;
|
|
correlationId: string;
|
|
query: string;
|
|
selectedQuery: string;
|
|
isGeneratingQuery: boolean;
|
|
isGeneratingExplanation: boolean;
|
|
isExecuting: boolean;
|
|
dislikeQuery: boolean | undefined;
|
|
showCallout: boolean;
|
|
showSamplePrompts: boolean;
|
|
queryIterator: MinimalQueryIterator | undefined;
|
|
queryResults: QueryResults | undefined;
|
|
errorMessage: string;
|
|
isSamplePromptsOpen: boolean;
|
|
showDeletePopup: boolean;
|
|
showFeedbackBar: boolean;
|
|
showCopyPopup: boolean;
|
|
showErrorMessageBar: boolean;
|
|
showInvalidQueryMessageBar: boolean;
|
|
generatedQueryComments: string;
|
|
wasCopilotUsed: boolean;
|
|
showWelcomeSidebar: boolean;
|
|
showCopilotSidebar: boolean;
|
|
chatMessages: CopilotMessage[];
|
|
shouldIncludeInMessages: boolean;
|
|
showExplanationBubble: boolean;
|
|
notebookServerInfo: DataModels.NotebookWorkspaceConnectionInfo;
|
|
containerStatus: ContainerInfo;
|
|
schemaAllocationInfo: CopilotSchemaAllocationInfo;
|
|
isAllocatingContainer: boolean;
|
|
copilotEnabledforExecution: boolean;
|
|
|
|
getState?: () => QueryCopilotState;
|
|
|
|
setCopilotEnabled: (copilotEnabled: boolean) => void;
|
|
setCopilotUserDBEnabled: (copilotUserDBEnabled: boolean) => void;
|
|
setCopilotSampleDBEnabled: (copilotSampleDBEnabled: boolean) => void;
|
|
openFeedbackModal: (generatedQuery: string, likeQuery: boolean, userPrompt: string) => void;
|
|
closeFeedbackModal: () => void;
|
|
setHideFeedbackModalForLikedQueries: (hideFeedbackModalForLikedQueries: boolean) => void;
|
|
refreshCorrelationId: () => void;
|
|
setUserPrompt: (userPrompt: string) => void;
|
|
setQuery: (query: string) => void;
|
|
setGeneratedQuery: (generatedQuery: string) => void;
|
|
setSelectedQuery: (selectedQuery: string) => void;
|
|
setIsGeneratingQuery: (isGeneratingQuery: boolean) => void;
|
|
setIsGeneratingExplanation: (isGeneratingExplanation: boolean) => void;
|
|
setIsExecuting: (isExecuting: boolean) => void;
|
|
setLikeQuery: (likeQuery: boolean) => void;
|
|
setDislikeQuery: (dislikeQuery: boolean | undefined) => void;
|
|
setShowCallout: (showCallout: boolean) => void;
|
|
setShowSamplePrompts: (showSamplePrompts: boolean) => void;
|
|
setQueryIterator: (queryIterator: MinimalQueryIterator | undefined) => void;
|
|
setQueryResults: (queryResults: QueryResults | undefined) => void;
|
|
setErrorMessage: (errorMessage: string) => void;
|
|
setIsSamplePromptsOpen: (isSamplePromptsOpen: boolean) => void;
|
|
setShowDeletePopup: (showDeletePopup: boolean) => void;
|
|
setShowFeedbackBar: (showFeedbackBar: boolean) => void;
|
|
setshowCopyPopup: (showCopyPopup: boolean) => void;
|
|
setShowErrorMessageBar: (showErrorMessageBar: boolean) => void;
|
|
setShowInvalidQueryMessageBar: (showInvalidQueryMessageBar: boolean) => void;
|
|
setGeneratedQueryComments: (generatedQueryComments: string) => void;
|
|
setWasCopilotUsed: (wasCopilotUsed: boolean) => void;
|
|
setShowWelcomeSidebar: (showWelcomeSidebar: boolean) => void;
|
|
setShowCopilotSidebar: (showCopilotSidebar: boolean) => void;
|
|
setChatMessages: (chatMessages: CopilotMessage[]) => void;
|
|
setShouldIncludeInMessages: (shouldIncludeInMessages: boolean) => void;
|
|
setShowExplanationBubble: (showExplanationBubble: boolean) => void;
|
|
setNotebookServerInfo: (notebookServerInfo: DataModels.NotebookWorkspaceConnectionInfo) => void;
|
|
setContainerStatus: (containerStatus: ContainerInfo) => void;
|
|
setIsAllocatingContainer: (isAllocatingContainer: boolean) => void;
|
|
setSchemaAllocationInfo: (schemaAllocationInfo: CopilotSchemaAllocationInfo) => void;
|
|
setCopilotEnabledforExecution: (copilotEnabledforExecution: boolean) => void;
|
|
|
|
resetContainerConnection: () => void;
|
|
resetQueryCopilotStates: () => void;
|
|
}
|
|
|
|
type QueryCopilotStore = UseStore<QueryCopilotState>;
|
|
|
|
export const useQueryCopilot: QueryCopilotStore = create((set) => ({
|
|
copilotEnabled: false,
|
|
copilotUserDBEnabled: false,
|
|
copilotSampleDBEnabled: false,
|
|
generatedQuery: "",
|
|
likeQuery: false,
|
|
userPrompt: "",
|
|
showFeedbackModal: false,
|
|
hideFeedbackModalForLikedQueries: false,
|
|
correlationId: "",
|
|
query: "SELECT * FROM c",
|
|
selectedQuery: "",
|
|
isGeneratingQuery: null,
|
|
isGeneratingExplanation: false,
|
|
isExecuting: false,
|
|
dislikeQuery: undefined,
|
|
showCallout: false,
|
|
showSamplePrompts: false,
|
|
queryIterator: undefined,
|
|
queryResults: undefined,
|
|
errorMessage: "",
|
|
isSamplePromptsOpen: false,
|
|
showDeletePopup: false,
|
|
showFeedbackBar: false,
|
|
showCopyPopup: false,
|
|
showErrorMessageBar: false,
|
|
showInvalidQueryMessageBar: false,
|
|
generatedQueryComments: "",
|
|
wasCopilotUsed: false,
|
|
showWelcomeSidebar: true,
|
|
showCopilotSidebar: false,
|
|
chatMessages: [],
|
|
shouldIncludeInMessages: true,
|
|
showExplanationBubble: false,
|
|
notebookServerInfo: {
|
|
notebookServerEndpoint: undefined,
|
|
authToken: undefined,
|
|
forwardingId: undefined,
|
|
},
|
|
containerStatus: {
|
|
status: undefined,
|
|
durationLeftInMinutes: undefined,
|
|
phoenixServerInfo: undefined,
|
|
},
|
|
schemaAllocationInfo: {
|
|
databaseId: undefined,
|
|
containerId: undefined,
|
|
},
|
|
isAllocatingContainer: false,
|
|
copilotEnabledforExecution: false,
|
|
|
|
setCopilotEnabled: (copilotEnabled: boolean) => set({ copilotEnabled }),
|
|
setCopilotUserDBEnabled: (copilotUserDBEnabled: boolean) => set({ copilotUserDBEnabled }),
|
|
setCopilotSampleDBEnabled: (copilotSampleDBEnabled: boolean) => set({ copilotSampleDBEnabled }),
|
|
openFeedbackModal: (generatedQuery: string, likeQuery: boolean, userPrompt: string) =>
|
|
set({ generatedQuery, likeQuery, userPrompt, showFeedbackModal: true }),
|
|
closeFeedbackModal: () => set({ showFeedbackModal: false }),
|
|
setHideFeedbackModalForLikedQueries: (hideFeedbackModalForLikedQueries: boolean) =>
|
|
set({ hideFeedbackModalForLikedQueries }),
|
|
refreshCorrelationId: () => set({ correlationId: guid() }),
|
|
setUserPrompt: (userPrompt: string) => set({ userPrompt }),
|
|
setQuery: (query: string) => set({ query }),
|
|
setGeneratedQuery: (generatedQuery: string) => set({ generatedQuery }),
|
|
setSelectedQuery: (selectedQuery: string) => set({ selectedQuery }),
|
|
setIsGeneratingQuery: (isGeneratingQuery: boolean) => set({ isGeneratingQuery }),
|
|
setIsGeneratingExplanation: (isGeneratingExplanation: boolean) => set({ isGeneratingExplanation }),
|
|
setIsExecuting: (isExecuting: boolean) => set({ isExecuting }),
|
|
setLikeQuery: (likeQuery: boolean) => set({ likeQuery }),
|
|
setDislikeQuery: (dislikeQuery: boolean | undefined) => set({ dislikeQuery }),
|
|
setShowCallout: (showCallout: boolean) => set({ showCallout }),
|
|
setShowSamplePrompts: (showSamplePrompts: boolean) => set({ showSamplePrompts }),
|
|
setQueryIterator: (queryIterator: MinimalQueryIterator | undefined) => set({ queryIterator }),
|
|
setQueryResults: (queryResults: QueryResults | undefined) => set({ queryResults }),
|
|
setErrorMessage: (errorMessage: string) => set({ errorMessage }),
|
|
setIsSamplePromptsOpen: (isSamplePromptsOpen: boolean) => set({ isSamplePromptsOpen }),
|
|
setShowDeletePopup: (showDeletePopup: boolean) => set({ showDeletePopup }),
|
|
setShowFeedbackBar: (showFeedbackBar: boolean) => set({ showFeedbackBar }),
|
|
setshowCopyPopup: (showCopyPopup: boolean) => set({ showCopyPopup }),
|
|
setShowErrorMessageBar: (showErrorMessageBar: boolean) => set({ showErrorMessageBar }),
|
|
setShowInvalidQueryMessageBar: (showInvalidQueryMessageBar: boolean) => set({ showInvalidQueryMessageBar }),
|
|
setGeneratedQueryComments: (generatedQueryComments: string) => set({ generatedQueryComments }),
|
|
setWasCopilotUsed: (wasCopilotUsed: boolean) => set({ wasCopilotUsed }),
|
|
setShowWelcomeSidebar: (showWelcomeSidebar: boolean) => set({ showWelcomeSidebar }),
|
|
setShowCopilotSidebar: (showCopilotSidebar: boolean) => set({ showCopilotSidebar }),
|
|
setChatMessages: (chatMessages: CopilotMessage[]) => set({ chatMessages }),
|
|
setShouldIncludeInMessages: (shouldIncludeInMessages: boolean) => set({ shouldIncludeInMessages }),
|
|
setShowExplanationBubble: (showExplanationBubble: boolean) => set({ showExplanationBubble }),
|
|
setNotebookServerInfo: (notebookServerInfo: DataModels.NotebookWorkspaceConnectionInfo) =>
|
|
set({ notebookServerInfo }),
|
|
setContainerStatus: (containerStatus: ContainerInfo) => set({ containerStatus }),
|
|
setIsAllocatingContainer: (isAllocatingContainer: boolean) => set({ isAllocatingContainer }),
|
|
setSchemaAllocationInfo: (schemaAllocationInfo: CopilotSchemaAllocationInfo) => set({ schemaAllocationInfo }),
|
|
setCopilotEnabledforExecution: (copilotEnabledforExecution: boolean) => set({ copilotEnabledforExecution }),
|
|
|
|
resetContainerConnection: (): void => {
|
|
useTabs.getState().closeAllNotebookTabs(true);
|
|
useQueryCopilot.getState().setNotebookServerInfo(undefined);
|
|
useQueryCopilot.getState().setIsAllocatingContainer(false);
|
|
useQueryCopilot.getState().setContainerStatus({
|
|
status: undefined,
|
|
durationLeftInMinutes: undefined,
|
|
phoenixServerInfo: undefined,
|
|
});
|
|
useQueryCopilot.getState().setSchemaAllocationInfo({
|
|
databaseId: undefined,
|
|
containerId: undefined,
|
|
});
|
|
},
|
|
|
|
resetQueryCopilotStates: () => {
|
|
set((state) => ({
|
|
...state,
|
|
generatedQuery: "",
|
|
likeQuery: false,
|
|
userPrompt: "",
|
|
showFeedbackModal: false,
|
|
hideFeedbackModalForLikedQueries: false,
|
|
correlationId: "",
|
|
query: "SELECT * FROM c",
|
|
selectedQuery: "",
|
|
isGeneratingQuery: false,
|
|
isGeneratingExplanation: false,
|
|
isExecuting: false,
|
|
dislikeQuery: undefined,
|
|
showCallout: false,
|
|
showSamplePrompts: false,
|
|
queryIterator: undefined,
|
|
queryResults: undefined,
|
|
errorMessage: "",
|
|
isSamplePromptsOpen: false,
|
|
showDeletePopup: false,
|
|
showFeedbackBar: false,
|
|
showCopyPopup: false,
|
|
showErrorMessageBar: false,
|
|
showInvalidQueryMessageBar: false,
|
|
generatedQueryComments: "",
|
|
wasCopilotUsed: false,
|
|
showCopilotSidebar: false,
|
|
chatMessages: [],
|
|
shouldIncludeInMessages: true,
|
|
showExplanationBubble: false,
|
|
notebookServerInfo: {
|
|
notebookServerEndpoint: undefined,
|
|
authToken: undefined,
|
|
forwardingId: undefined,
|
|
},
|
|
containerStatus: {
|
|
status: undefined,
|
|
durationLeftInMinutes: undefined,
|
|
phoenixServerInfo: undefined,
|
|
},
|
|
schemaAllocationInfo: {
|
|
databaseId: undefined,
|
|
containerId: undefined,
|
|
},
|
|
isAllocatingContainer: false,
|
|
}));
|
|
},
|
|
}));
|