Fix UI issues and add embedding feature
This commit is contained in:
parent
84f4205b56
commit
4c17d2f52c
@ -123,7 +123,7 @@ export const EmptySidePanel = () => {
|
|||||||
className="before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-md border border-blue-gray-200 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-blue-gray-500 before:opacity-0 before:transition-opacity"
|
className="before:content[''] peer relative h-5 w-5 cursor-pointer appearance-none rounded-md border border-blue-gray-200 transition-all before:absolute before:top-2/4 before:left-2/4 before:block before:h-12 before:w-12 before:-translate-y-2/4 before:-translate-x-2/4 before:rounded-full before:bg-blue-gray-500 before:opacity-0 before:transition-opacity"
|
||||||
id="check"
|
id="check"
|
||||||
/>
|
/>
|
||||||
<span className="absolute text-white transition-opacity opacity-0 pointer-events-none top-2/4 left-2/4 -translate-y-2/4 -translate-x-2/4 peer-checked:opacity-100 dark:text-gray-400">
|
<span className="absolute text-white transition-opacity opacity-0 pointer-events-none top-2/4 left-2/4 -translate-y-2/4 -translate-x-2/4 peer-checked:opacity-100 ">
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
className="h-3.5 w-3.5"
|
className="h-3.5 w-3.5"
|
||||||
|
@ -47,7 +47,6 @@ export const SidepanelForm = () => {
|
|||||||
className="shrink-0 flex-grow flex items-center ">
|
className="shrink-0 flex-grow flex items-center ">
|
||||||
<div className="flex items-center p-2 rounded-2xl border bg-gray-100 w-full dark:bg-black dark:border-gray-800">
|
<div className="flex items-center p-2 rounded-2xl border bg-gray-100 w-full dark:bg-black dark:border-gray-800">
|
||||||
<textarea
|
<textarea
|
||||||
disabled={isSending}
|
|
||||||
onKeyDown={(e) => {
|
onKeyDown={(e) => {
|
||||||
if (e.key === "Enter" && !e.shiftKey && !isSending) {
|
if (e.key === "Enter" && !e.shiftKey && !isSending) {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
import logoImage from "data-base64:~assets/icon.png"
|
import logoImage from "data-base64:~assets/icon.png"
|
||||||
import CogIcon from "@heroicons/react/24/outline/CogIcon"
|
import CogIcon from "@heroicons/react/24/outline/CogIcon"
|
||||||
|
import Squares2X2Icon from "@heroicons/react/24/outline/Squares2X2Icon"
|
||||||
import { ArrowPathIcon } from "@heroicons/react/24/outline"
|
import { ArrowPathIcon } from "@heroicons/react/24/outline"
|
||||||
import { useMessage } from "~hooks/useMessage"
|
import { useMessage } from "~hooks/useMessage"
|
||||||
import { Link } from "react-router-dom"
|
import { Link } from "react-router-dom"
|
||||||
|
import { Tooltip } from "antd"
|
||||||
export const SidepanelHeader = () => {
|
export const SidepanelHeader = () => {
|
||||||
const { clearChat } = useMessage()
|
const { clearChat, isEmbedding } = useMessage()
|
||||||
return (
|
return (
|
||||||
<div className="flex px-3 justify-between bg-white dark:bg-black border-b border-gray-200 dark:border-gray-800 py-4 items-center">
|
<div className="flex px-3 justify-between bg-white dark:bg-black border-b border-gray-200 dark:border-gray-800 py-4 items-center">
|
||||||
<div className="focus:outline-none focus-visible:ring-2 focus-visible:ring-pink-700 flex items-center dark:text-white">
|
<div className="focus:outline-none focus-visible:ring-2 focus-visible:ring-pink-700 flex items-center dark:text-white">
|
||||||
@ -13,6 +15,14 @@ export const SidepanelHeader = () => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="flex items-center space-x-3">
|
<div className="flex items-center space-x-3">
|
||||||
|
{isEmbedding ? (
|
||||||
|
<Tooltip
|
||||||
|
title="It may take a few minutes to embed the page. Please wait..."
|
||||||
|
>
|
||||||
|
<Squares2X2Icon className="h-5 w-5 text-gray-500 dark:text-gray-400 animate-bounce animate-infinite" />
|
||||||
|
|
||||||
|
</Tooltip>
|
||||||
|
) : null}
|
||||||
<button
|
<button
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
clearChat()
|
clearChat()
|
||||||
|
@ -74,7 +74,9 @@ export const useMessage = () => {
|
|||||||
selectedModel,
|
selectedModel,
|
||||||
setSelectedModel,
|
setSelectedModel,
|
||||||
chatMode,
|
chatMode,
|
||||||
setChatMode
|
setChatMode,
|
||||||
|
setIsEmbedding,
|
||||||
|
isEmbedding
|
||||||
} = useStoreMessage()
|
} = useStoreMessage()
|
||||||
|
|
||||||
const abortControllerRef = React.useRef<AbortController | null>(null)
|
const abortControllerRef = React.useRef<AbortController | null>(null)
|
||||||
@ -89,6 +91,9 @@ export const useMessage = () => {
|
|||||||
setHistory([])
|
setHistory([])
|
||||||
setHistoryId(null)
|
setHistoryId(null)
|
||||||
setIsFirstMessage(true)
|
setIsFirstMessage(true)
|
||||||
|
setIsLoading(false)
|
||||||
|
setIsProcessing(false)
|
||||||
|
setStreaming(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
const memoryEmbedding = async (
|
const memoryEmbedding = async (
|
||||||
@ -110,12 +115,14 @@ export const useMessage = () => {
|
|||||||
|
|
||||||
const store = new MemoryVectorStore(ollamaEmbedding)
|
const store = new MemoryVectorStore(ollamaEmbedding)
|
||||||
|
|
||||||
await store.addDocuments(chunks)
|
setIsEmbedding(true)
|
||||||
|
|
||||||
|
await store.addDocuments(chunks)
|
||||||
setKeepTrackOfEmbedding({
|
setKeepTrackOfEmbedding({
|
||||||
...keepTrackOfEmbedding,
|
...keepTrackOfEmbedding,
|
||||||
[url]: store
|
[url]: store
|
||||||
})
|
})
|
||||||
|
setIsEmbedding(false)
|
||||||
|
|
||||||
return store
|
return store
|
||||||
}
|
}
|
||||||
@ -368,6 +375,7 @@ export const useMessage = () => {
|
|||||||
selectedModel,
|
selectedModel,
|
||||||
setSelectedModel,
|
setSelectedModel,
|
||||||
chatMode,
|
chatMode,
|
||||||
setChatMode
|
setChatMode,
|
||||||
|
isEmbedding
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,8 @@ type State = {
|
|||||||
setSelectedModel: (selectedModel: string) => void
|
setSelectedModel: (selectedModel: string) => void
|
||||||
chatMode: "normal" | "rag"
|
chatMode: "normal" | "rag"
|
||||||
setChatMode: (chatMode: "normal" | "rag") => void
|
setChatMode: (chatMode: "normal" | "rag") => void
|
||||||
|
isEmbedding: boolean
|
||||||
|
setIsEmbedding: (isEmbedding: boolean) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useStoreMessage = create<State>((set) => ({
|
export const useStoreMessage = create<State>((set) => ({
|
||||||
@ -53,4 +55,6 @@ export const useStoreMessage = create<State>((set) => ({
|
|||||||
setSelectedModel: (selectedModel) => set({ selectedModel }),
|
setSelectedModel: (selectedModel) => set({ selectedModel }),
|
||||||
chatMode: "normal",
|
chatMode: "normal",
|
||||||
setChatMode: (chatMode) => set({ chatMode }),
|
setChatMode: (chatMode) => set({ chatMode }),
|
||||||
|
isEmbedding: false,
|
||||||
|
setIsEmbedding: (isEmbedding) => set({ isEmbedding }),
|
||||||
}))
|
}))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user