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