Spaces:
Running
Running
| import { CodeHighlightAdapterProvider } from "@mantine/code-highlight"; | |
| import { usePubSub } from "create-pubsub/react"; | |
| import { useMemo } from "react"; | |
| import { | |
| modelLoadingProgressPubSub, | |
| modelSizeInMegabytesPubSub, | |
| queryPubSub, | |
| responsePubSub, | |
| settingsPubSub, | |
| textGenerationStatePubSub, | |
| } from "../../modules/pubSub"; | |
| import { shikiAdapter } from "../../modules/shiki"; | |
| import "@mantine/code-highlight/styles.css"; | |
| import AiModelDownloadAllowanceContent from "./AiModelDownloadAllowanceContent"; | |
| import AiResponseContent from "./AiResponseContent"; | |
| import ChatInterface from "./ChatInterface"; | |
| import LoadingModelContent from "./LoadingModelContent"; | |
| import PreparingContent from "./PreparingContent"; | |
| export default function AiResponseSection() { | |
| const [query] = usePubSub(queryPubSub); | |
| const [response] = usePubSub(responsePubSub); | |
| const [textGenerationState, setTextGenerationState] = usePubSub( | |
| textGenerationStatePubSub, | |
| ); | |
| const [modelLoadingProgress] = usePubSub(modelLoadingProgressPubSub); | |
| const [settings] = usePubSub(settingsPubSub); | |
| const [modelSizeInMegabytes] = usePubSub(modelSizeInMegabytesPubSub); | |
| return useMemo(() => { | |
| if (!settings.enableAiResponse || textGenerationState === "idle") { | |
| return null; | |
| } | |
| const generatingStates = [ | |
| "generating", | |
| "interrupted", | |
| "completed", | |
| "failed", | |
| ]; | |
| if (generatingStates.includes(textGenerationState)) { | |
| return ( | |
| <CodeHighlightAdapterProvider adapter={shikiAdapter}> | |
| <AiResponseContent | |
| textGenerationState={textGenerationState} | |
| response={response} | |
| setTextGenerationState={setTextGenerationState} | |
| /> | |
| {textGenerationState === "completed" && ( | |
| <ChatInterface initialQuery={query} initialResponse={response} /> | |
| )} | |
| </CodeHighlightAdapterProvider> | |
| ); | |
| } | |
| if (textGenerationState === "loadingModel") { | |
| return ( | |
| <LoadingModelContent | |
| modelLoadingProgress={modelLoadingProgress} | |
| modelSizeInMegabytes={modelSizeInMegabytes} | |
| /> | |
| ); | |
| } | |
| if (textGenerationState === "preparingToGenerate") { | |
| return <PreparingContent textGenerationState={textGenerationState} />; | |
| } | |
| if (textGenerationState === "awaitingSearchResults") { | |
| return <PreparingContent textGenerationState={textGenerationState} />; | |
| } | |
| if (textGenerationState === "awaitingModelDownloadAllowance") { | |
| return <AiModelDownloadAllowanceContent />; | |
| } | |
| return null; | |
| }, [ | |
| settings.enableAiResponse, | |
| textGenerationState, | |
| response, | |
| query, | |
| modelLoadingProgress, | |
| modelSizeInMegabytes, | |
| setTextGenerationState, | |
| ]); | |
| } | |