Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions web-app/src/containers/ChatInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ const ChatInput = ({ model, className, initialMessage }: ChatInputProps) => {
const { prompt, setPrompt } = usePrompt()
const { currentThreadId } = useThreads()
const { t } = useTranslation()
const { spellCheckChatInput, experimentalFeatures } = useGeneralSetting()
const { spellCheckChatInput } = useGeneralSetting()

const maxRows = 10

Expand Down Expand Up @@ -586,8 +586,7 @@ const ChatInput = ({ model, className, initialMessage }: ChatInputProps) => {
</TooltipProvider>
)}

{experimentalFeatures &&
selectedModel?.capabilities?.includes('tools') &&
{selectedModel?.capabilities?.includes('tools') &&
hasActiveMCPServers && (
<TooltipProvider>
<Tooltip
Expand Down
15 changes: 4 additions & 11 deletions web-app/src/containers/SettingsMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
import { useMatches, useNavigate } from '@tanstack/react-router'
import { cn } from '@/lib/utils'

import { useGeneralSetting } from '@/hooks/useGeneralSetting'
import { useModelProvider } from '@/hooks/useModelProvider'
import { getProviderTitle } from '@/lib/utils'
import ProvidersAvatar from '@/containers/ProvidersAvatar'
Expand All @@ -23,7 +22,6 @@ const SettingsMenu = () => {
const matches = useMatches()
const navigate = useNavigate()

const { experimentalFeatures } = useGeneralSetting()
const { providers } = useModelProvider()

// Filter providers that have active API keys (or are llama.cpp which doesn't need one)
Expand Down Expand Up @@ -79,15 +77,10 @@ const SettingsMenu = () => {
title: 'common:hardware',
route: route.settings.hardware,
},
// Only show MCP Servers when experimental features are enabled
...(experimentalFeatures
? [
{
title: 'common:mcp-servers',
route: route.settings.mcp_servers,
},
]
: []),
{
title: 'common:mcp-servers',
route: route.settings.mcp_servers,
},
{
title: 'common:local_api_server',
route: route.settings.local_api_server,
Expand Down
16 changes: 6 additions & 10 deletions web-app/src/hooks/useChat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,13 @@ import { OUT_OF_CONTEXT_SIZE } from '@/utils/error'
import { updateSettings } from '@/services/providers'
import { useContextSizeApproval } from './useModelContextApproval'
import { useModelLoad } from './useModelLoad'
import { useGeneralSetting } from './useGeneralSetting'
import {
ReasoningProcessor,
extractReasoningFromMessage,
} from '@/utils/reasoning'

export const useChat = () => {
const { prompt, setPrompt } = usePrompt()
const { experimentalFeatures } = useGeneralSetting()
const {
tools,
updateTokenSpeed,
Expand Down Expand Up @@ -247,13 +245,12 @@ export const useChat = () => {
let isCompleted = false

// Filter tools based on model capabilities and available tools for this thread
let availableTools =
experimentalFeatures && selectedModel?.capabilities?.includes('tools')
? tools.filter((tool) => {
const disabledTools = getDisabledToolsForThread(activeThread.id)
return !disabledTools.includes(tool.name)
})
: []
let availableTools = selectedModel?.capabilities?.includes('tools')
? tools.filter((tool) => {
const disabledTools = getDisabledToolsForThread(activeThread.id)
return !disabledTools.includes(tool.name)
})
: []

let assistantLoopSteps = 0

Expand Down Expand Up @@ -543,7 +540,6 @@ export const useChat = () => {
setPrompt,
selectedModel,
currentAssistant,
experimentalFeatures,
tools,
updateLoadingModel,
getDisabledToolsForThread,
Expand Down
4 changes: 0 additions & 4 deletions web-app/src/hooks/useGeneralSetting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@ import { ExtensionManager } from '@/lib/extension'
type LeftPanelStoreState = {
currentLanguage: Language
spellCheckChatInput: boolean
experimentalFeatures: boolean
huggingfaceToken?: string
setHuggingfaceToken: (token: string) => void
setExperimentalFeatures: (value: boolean) => void
setSpellCheckChatInput: (value: boolean) => void
setCurrentLanguage: (value: Language) => void
}
Expand All @@ -19,9 +17,7 @@ export const useGeneralSetting = create<LeftPanelStoreState>()(
(set) => ({
currentLanguage: 'en',
spellCheckChatInput: true,
experimentalFeatures: false,
huggingfaceToken: undefined,
setExperimentalFeatures: (value) => set({ experimentalFeatures: value }),
setSpellCheckChatInput: (value) => set({ spellCheckChatInput: value }),
setCurrentLanguage: (value) => set({ currentLanguage: value }),
setHuggingfaceToken: (token) => {
Expand Down
50 changes: 0 additions & 50 deletions web-app/src/routes/settings/general.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ import { stopAllModels } from '@/services/models'
import { SystemEvent } from '@/types/events'
import { Input } from '@/components/ui/input'
import { useHardware } from '@/hooks/useHardware'
import { getConnectedServers } from '@/services/mcp'
import { invoke } from '@tauri-apps/api/core'
import { useMCPServers } from '@/hooks/useMCPServers'

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const Route = createFileRoute(route.settings.general as any)({
Expand All @@ -60,8 +57,6 @@ function General() {
const {
spellCheckChatInput,
setSpellCheckChatInput,
experimentalFeatures,
setExperimentalFeatures,
huggingfaceToken,
setHuggingfaceToken,
} = useGeneralSetting()
Expand Down Expand Up @@ -209,38 +204,6 @@ function General() {
}
}, [t, checkForUpdate])

const handleStopAllMCPServers = async () => {
try {
const connectedServers = await getConnectedServers()

// Stop each connected server
const stopPromises = connectedServers.map((serverName) =>
invoke('deactivate_mcp_server', { name: serverName }).catch((error) => {
console.error(`Error stopping MCP server ${serverName}:`, error)
return Promise.resolve() // Continue with other servers even if one fails
})
)

await Promise.all(stopPromises)

// Update server configs to set active: false for stopped servers
const { mcpServers, editServer } = useMCPServers.getState()
connectedServers.forEach((serverName) => {
const serverConfig = mcpServers[serverName]
if (serverConfig) {
editServer(serverName, { ...serverConfig, active: false })
}
})

if (connectedServers.length > 0) {
toast.success(`Stopped ${connectedServers.length} MCP server(s)`)
}
} catch (error) {
console.error('Error stopping MCP servers:', error)
toast.error('Failed to stop MCP servers')
}
}

return (
<div className="flex flex-col h-full">
<HeaderPage>
Expand Down Expand Up @@ -430,19 +393,6 @@ function General() {
</Card>
{/* Advanced */}
<Card title="Advanced">
<CardItem
title="Experimental Features"
description="Enable experimental features. They may be unstable or change at any time."
actions={
<Switch
checked={experimentalFeatures}
onCheckedChange={async (e) => {
await handleStopAllMCPServers()
setExperimentalFeatures(e)
}}
/>
}
/>
<CardItem
title={t('settings:others.resetFactory', {
ns: 'settings',
Expand Down
Loading