diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index f258207593..ded370b4c2 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -50,7 +50,6 @@ removeAllDetails } from '$lib/utils'; - import { generateChatCompletion } from '$lib/apis/ollama'; import { createNewChat, getAllTags, @@ -63,8 +62,6 @@ } from '$lib/apis/chats'; import { generateOpenAIChatCompletion } from '$lib/apis/openai'; import { processWeb, processWebSearch, processYoutubeVideo } from '$lib/apis/retrieval'; - import { createOpenAITextStream } from '$lib/apis/streaming'; - import { queryMemory } from '$lib/apis/memories'; import { getAndUpdateUserLocation, getUserSettings } from '$lib/apis/users'; import { chatCompleted, @@ -75,6 +72,10 @@ getTaskIdsByChatId } from '$lib/apis'; import { getTools } from '$lib/apis/tools'; + import { uploadFile } from '$lib/apis/files'; + import { createOpenAITextStream } from '$lib/apis/streaming'; + + import { fade } from 'svelte/transition'; import Banner from '../common/Banner.svelte'; import MessageInput from '$lib/components/chat/MessageInput.svelte'; @@ -85,10 +86,8 @@ import Placeholder from './Placeholder.svelte'; import NotificationToast from '../NotificationToast.svelte'; import Spinner from '../common/Spinner.svelte'; - import { fade } from 'svelte/transition'; import Tooltip from '../common/Tooltip.svelte'; import Sidebar from '../icons/Sidebar.svelte'; - import { uploadFile } from '$lib/apis/files'; export let chatIdProp = ''; @@ -1635,6 +1634,46 @@ chats.set(await getChatList(localStorage.token, $currentChatPage)); }; + const getFeatures = () => { + let features = {}; + + if ($config?.features) + features = { + image_generation: + $config?.features?.enable_image_generation && + ($user?.role === 'admin' || $user?.permissions?.features?.image_generation) + ? imageGenerationEnabled + : false, + code_interpreter: + $config?.features?.enable_code_interpreter && + ($user?.role === 'admin' || $user?.permissions?.features?.code_interpreter) + ? codeInterpreterEnabled + : false, + web_search: + $config?.features?.enable_web_search && + ($user?.role === 'admin' || $user?.permissions?.features?.web_search) + ? webSearchEnabled + : false + }; + + const currentModels = atSelectedModel?.id ? [atSelectedModel.id] : selectedModels; + if ( + currentModels.filter( + (model) => $models.find((m) => m.id === model)?.info?.meta?.capabilities?.web_search ?? true + ).length === currentModels.length + ) { + if (($settings?.webSearch ?? false) === 'always') { + features = { ...features, web_search: true }; + } + } + + if ($settings?.memory ?? false) { + features = { ...features, memory: true }; + } + + return features; + }; + const sendMessageSocket = async (model, _messages, _history, responseMessageId, _chatId) => { const responseMessage = _history.messages[responseMessageId]; const userMessage = _history.messages[responseMessage.parentId]; @@ -1747,25 +1786,7 @@ filter_ids: selectedFilterIds.length > 0 ? selectedFilterIds : undefined, tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined, tool_servers: $toolServers, - - features: { - image_generation: - $config?.features?.enable_image_generation && - ($user?.role === 'admin' || $user?.permissions?.features?.image_generation) - ? imageGenerationEnabled - : false, - code_interpreter: - $config?.features?.enable_code_interpreter && - ($user?.role === 'admin' || $user?.permissions?.features?.code_interpreter) - ? codeInterpreterEnabled - : false, - web_search: - $config?.features?.enable_web_search && - ($user?.role === 'admin' || $user?.permissions?.features?.web_search) - ? webSearchEnabled || ($settings?.webSearch ?? false) === 'always' - : false, - memory: $settings?.memory ?? false - }, + features: getFeatures(), variables: { ...getPromptVariables($user?.name, $settings?.userLocation ? userLocation : undefined) }, diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index 441d3ca681..4945d4bed0 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -162,7 +162,7 @@ type Settings = { richTextInput?: boolean; params?: any; userLocation?: any; - webSearch?: boolean; + webSearch?: any; memory?: boolean; autoTags?: boolean; autoFollowUps?: boolean;