Merge pull request #5032 from menloresearch/chore/model-loading
chore: model loading and truncate dropdown assiatant title
This commit is contained in:
commit
76827d42f5
@ -10,7 +10,6 @@ import {
|
|||||||
IconPaperclip,
|
IconPaperclip,
|
||||||
IconWorld,
|
IconWorld,
|
||||||
IconAtom,
|
IconAtom,
|
||||||
IconMicrophone,
|
|
||||||
IconEye,
|
IconEye,
|
||||||
IconTool,
|
IconTool,
|
||||||
IconCodeCircle2,
|
IconCodeCircle2,
|
||||||
@ -29,6 +28,7 @@ import { SystemEvent } from '@/types/events'
|
|||||||
import { getTools } from '@/services/mcp'
|
import { getTools } from '@/services/mcp'
|
||||||
import { useChat } from '@/hooks/useChat'
|
import { useChat } from '@/hooks/useChat'
|
||||||
import DropdownModelProvider from '@/containers/DropdownModelProvider'
|
import DropdownModelProvider from '@/containers/DropdownModelProvider'
|
||||||
|
import { ModelLoader } from '@/containers/loaders/ModelLoader'
|
||||||
|
|
||||||
type ChatInputProps = {
|
type ChatInputProps = {
|
||||||
className?: string
|
className?: string
|
||||||
@ -44,7 +44,8 @@ const ChatInput = ({
|
|||||||
const textareaRef = useRef<HTMLTextAreaElement>(null)
|
const textareaRef = useRef<HTMLTextAreaElement>(null)
|
||||||
const [isFocused, setIsFocused] = useState(false)
|
const [isFocused, setIsFocused] = useState(false)
|
||||||
const [rows, setRows] = useState(1)
|
const [rows, setRows] = useState(1)
|
||||||
const { streamingContent, updateTools, abortControllers } = useAppState()
|
const { streamingContent, updateTools, abortControllers, loadingModel } =
|
||||||
|
useAppState()
|
||||||
const { prompt, setPrompt } = usePrompt()
|
const { prompt, setPrompt } = usePrompt()
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const { spellCheckChatInput } = useGeneralSetting()
|
const { spellCheckChatInput } = useGeneralSetting()
|
||||||
@ -53,6 +54,8 @@ const ChatInput = ({
|
|||||||
const { selectedModel } = useModelProvider()
|
const { selectedModel } = useModelProvider()
|
||||||
const { sendMessage } = useChat()
|
const { sendMessage } = useChat()
|
||||||
|
|
||||||
|
console.log(model)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleFocusIn = () => {
|
const handleFocusIn = () => {
|
||||||
if (document.activeElement === textareaRef.current) {
|
if (document.activeElement === textareaRef.current) {
|
||||||
@ -173,17 +176,21 @@ const ChatInput = ({
|
|||||||
streamingContent && 'opacity-50 pointer-events-none'
|
streamingContent && 'opacity-50 pointer-events-none'
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
{model?.provider === 'llama.cpp' && loadingModel ? (
|
||||||
|
<ModelLoader />
|
||||||
|
) : (
|
||||||
<DropdownModelProvider model={model} />
|
<DropdownModelProvider model={model} />
|
||||||
|
)}
|
||||||
|
|
||||||
{/* File attachment - always available */}
|
{/* File attachment - always available */}
|
||||||
<div className="h-6 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1">
|
<div className="h-6 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1">
|
||||||
<IconPaperclip size={18} className="text-main-view-fg/50" />
|
<IconPaperclip size={18} className="text-main-view-fg/50" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Microphone - always available */}
|
{/* Microphone - always available - Temp Hide */}
|
||||||
<div className="h-6 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1">
|
{/* <div className="h-6 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1">
|
||||||
<IconMicrophone size={18} className="text-main-view-fg/50" />
|
<IconMicrophone size={18} className="text-main-view-fg/50" />
|
||||||
</div>
|
</div> */}
|
||||||
|
|
||||||
{selectedModel?.capabilities?.includes('vision') && (
|
{selectedModel?.capabilities?.includes('vision') && (
|
||||||
<div className="h-6 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1">
|
<div className="h-6 p-1 flex items-center justify-center rounded-sm hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out gap-1">
|
||||||
|
|||||||
@ -64,7 +64,7 @@ const DropdownAssistant = () => {
|
|||||||
align="start"
|
align="start"
|
||||||
>
|
>
|
||||||
{assistants.map((assistant) => (
|
{assistants.map((assistant) => (
|
||||||
<div className="relative" key={assistant.id}>
|
<div className="relative pr-6" key={assistant.id}>
|
||||||
<DropdownMenuItem className="flex justify-between items-center">
|
<DropdownMenuItem className="flex justify-between items-center">
|
||||||
<span
|
<span
|
||||||
className="truncate text-main-view-fg/70 flex-1 cursor-pointer"
|
className="truncate text-main-view-fg/70 flex-1 cursor-pointer"
|
||||||
@ -76,7 +76,7 @@ const DropdownAssistant = () => {
|
|||||||
{assistant.name}
|
{assistant.name}
|
||||||
</span>
|
</span>
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<div className="absolute top-1/2 -translate-y-1/2 right-2">
|
<div className="absolute top-1/2 -translate-y-1/2 right-1">
|
||||||
<div className="size-5 text-main-view-fg/50 cursor-pointer relative z-10 flex items-center justify-center rounded hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out">
|
<div className="size-5 text-main-view-fg/50 cursor-pointer relative z-10 flex items-center justify-center rounded hover:bg-main-view-fg/10 transition-all duration-200 ease-in-out">
|
||||||
<IconSettings
|
<IconSettings
|
||||||
size={16}
|
size={16}
|
||||||
|
|||||||
@ -48,7 +48,7 @@ const mainMenus = [
|
|||||||
route: route.home,
|
route: route.home,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Assistant',
|
title: 'Assistants',
|
||||||
icon: IconClipboardSmileFilled,
|
icon: IconClipboardSmileFilled,
|
||||||
route: route.assistant,
|
route: route.assistant,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -56,7 +56,7 @@ function Assistant() {
|
|||||||
return (
|
return (
|
||||||
<div className="flex h-full flex-col flex-justify-center">
|
<div className="flex h-full flex-col flex-justify-center">
|
||||||
<HeaderPage>
|
<HeaderPage>
|
||||||
<span>Assistant</span>
|
<span>Assistants</span>
|
||||||
</HeaderPage>
|
</HeaderPage>
|
||||||
<div className="h-full p-4 overflow-y-auto">
|
<div className="h-full p-4 overflow-y-auto">
|
||||||
<div className="grid grid-cols-3 gap-4">
|
<div className="grid grid-cols-3 gap-4">
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import ChatInput from '@/containers/ChatInput'
|
|||||||
import { useShallow } from 'zustand/react/shallow'
|
import { useShallow } from 'zustand/react/shallow'
|
||||||
import { ThreadContent } from '@/containers/ThreadContent'
|
import { ThreadContent } from '@/containers/ThreadContent'
|
||||||
import { StreamingContent } from '@/containers/StreamingContent'
|
import { StreamingContent } from '@/containers/StreamingContent'
|
||||||
import { ModelLoader } from '@/containers/loaders/ModelLoader'
|
|
||||||
import { useMessages } from '@/hooks/useMessages'
|
import { useMessages } from '@/hooks/useMessages'
|
||||||
import { fetchMessages } from '@/services/messages'
|
import { fetchMessages } from '@/services/messages'
|
||||||
import { useAppState } from '@/hooks/useAppState'
|
import { useAppState } from '@/hooks/useAppState'
|
||||||
@ -31,7 +31,7 @@ function ThreadDetail() {
|
|||||||
const { currentThreadId, getThreadById, setCurrentThreadId } = useThreads()
|
const { currentThreadId, getThreadById, setCurrentThreadId } = useThreads()
|
||||||
const { setCurrentAssistant, assistants } = useAssistant()
|
const { setCurrentAssistant, assistants } = useAssistant()
|
||||||
const { setMessages } = useMessages()
|
const { setMessages } = useMessages()
|
||||||
const { streamingContent, loadingModel } = useAppState()
|
const { streamingContent } = useAppState()
|
||||||
|
|
||||||
const { messages } = useMessages(
|
const { messages } = useMessages(
|
||||||
useShallow((state) => ({
|
useShallow((state) => ({
|
||||||
@ -172,9 +172,6 @@ function ThreadDetail() {
|
|||||||
<div className="flex items-center justify-between w-full pr-2">
|
<div className="flex items-center justify-between w-full pr-2">
|
||||||
<DropdownAssistant />
|
<DropdownAssistant />
|
||||||
</div>
|
</div>
|
||||||
{thread?.model?.provider === 'llama.cpp' && loadingModel && (
|
|
||||||
<ModelLoader />
|
|
||||||
)}
|
|
||||||
</HeaderPage>
|
</HeaderPage>
|
||||||
<div className="flex flex-col h-[calc(100%-40px)] ">
|
<div className="flex flex-col h-[calc(100%-40px)] ">
|
||||||
<div
|
<div
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user