diff --git a/web-app/src/containers/ChatInput.tsx b/web-app/src/containers/ChatInput.tsx
index 806e613a5..44c0b15b3 100644
--- a/web-app/src/containers/ChatInput.tsx
+++ b/web-app/src/containers/ChatInput.tsx
@@ -64,6 +64,8 @@ const ChatInput = ({
const { selectedModel } = useModelProvider()
const { sendMessage } = useChat()
const [message, setMessage] = useState('')
+ const [dropdownToolsAvailable, setDropdownToolsAvailable] = useState(false)
+ const [tooltipToolsAvailable, setTooltipToolsAvailable] = useState(false)
const [uploadedFiles, setUploadedFiles] = useState<
Array<{
name: string
@@ -407,7 +409,6 @@ const ChatInput = ({
useLastUsedModel={initialMessage}
/>
)}
-
{/* File attachment - always available */}
-
{/* Microphone - always available - Temp Hide */}
{/*
*/}
-
{selectedModel?.capabilities?.includes('vision') && (
-
+
@@ -441,7 +440,6 @@ const ChatInput = ({
)}
-
{selectedModel?.capabilities?.includes('embeddings') && (
@@ -463,32 +461,49 @@ const ChatInput = ({
{selectedModel?.capabilities?.includes('tools') &&
hasActiveMCPServers && (
-
-
-
+
+
+ {
+ setDropdownToolsAvailable(false)
+ e.stopPropagation()
+ }}
+ >
- {(isOpen, toolsCount) => (
-
-
- {toolsCount > 0 && (
-
-
- {toolsCount > 99 ? '99+' : toolsCount}
-
-
- )}
-
- )}
+ {(isOpen, toolsCount) => {
+ setDropdownToolsAvailable(isOpen)
+ if (tooltipToolsAvailable && isOpen) {
+ setTooltipToolsAvailable(false)
+ }
+ return (
+
+
+ {toolsCount > 0 && (
+
+
+ {toolsCount > 99 ? '99+' : toolsCount}
+
+
+ )}
+
+ )
+ }}
@@ -498,7 +513,6 @@ const ChatInput = ({
)}
-
{selectedModel?.capabilities?.includes('web_search') && (
@@ -516,7 +530,6 @@ const ChatInput = ({
)}
-
{selectedModel?.capabilities?.includes('reasoning') && (
diff --git a/web-app/src/containers/DropdownToolsAvailable.tsx b/web-app/src/containers/DropdownToolsAvailable.tsx
index 28ff5c285..eb8bc2e93 100644
--- a/web-app/src/containers/DropdownToolsAvailable.tsx
+++ b/web-app/src/containers/DropdownToolsAvailable.tsx
@@ -99,36 +99,34 @@ export default function DropdownToolsAvailable({
{renderTrigger()}
-
+
Available Tools
-
+
{tools.map((tool) => {
const isChecked = isToolChecked(tool.name)
return (
-
-
-
-
-
+
+
+
+
+
{tool.name}
-
- {tool.description && (
-
- {tool.description}
-
- )}
+
+ {tool.description && (
+
+ {tool.description}
+
+ )}
+
+
diff --git a/web-app/src/containers/ProvidersMenu.tsx b/web-app/src/containers/ProvidersMenu.tsx
index 5afd5ec8e..f2dfa1bdc 100644
--- a/web-app/src/containers/ProvidersMenu.tsx
+++ b/web-app/src/containers/ProvidersMenu.tsx
@@ -96,7 +96,9 @@ const ProvidersMenu = ({
}
>
- {getProviderTitle(provider.provider)}
+
+ {getProviderTitle(provider.provider)}
+
)
diff --git a/web-app/src/containers/RenderMarkdown.tsx b/web-app/src/containers/RenderMarkdown.tsx
index 77ffe149b..926a513e8 100644
--- a/web-app/src/containers/RenderMarkdown.tsx
+++ b/web-app/src/containers/RenderMarkdown.tsx
@@ -80,7 +80,10 @@ function RenderMarkdownComponent({
{getReadableLanguageName(language)}