From 8c70cce5bbf901cd9c0c075ad1aa5b42947595c7 Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 12:05:41 -0700 Subject: [PATCH 1/9] Fix bug with incorrect model icon being shown --- web/src/app/chat/input/ChatInputBar.tsx | 21 --- web/src/app/chat/input/LLMPopover.tsx | 221 +++++++++--------------- 2 files changed, 85 insertions(+), 157 deletions(-) diff --git a/web/src/app/chat/input/ChatInputBar.tsx b/web/src/app/chat/input/ChatInputBar.tsx index 2c3d1598fa6..3ab25521461 100644 --- a/web/src/app/chat/input/ChatInputBar.tsx +++ b/web/src/app/chat/input/ChatInputBar.tsx @@ -854,27 +854,6 @@ export function ChatInputBar({ llmManager={llmManager} requiresImageGeneration={false} currentAssistant={selectedAssistant} - trigger={ - - } /> {retrievalEnabled && ( diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index 96cbb78ffab..31f9b3905c2 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -4,12 +4,8 @@ import { PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; -import { getDisplayNameForModel } from "@/lib/hooks"; -import { - modelSupportsImageInput, - parseLlmDescriptor, - structureValue, -} from "@/lib/llm/utils"; +import { getDisplayNameForModel, LlmDescriptor } from "@/lib/hooks"; +import { modelSupportsImageInput } from "@/lib/llm/utils"; import { LLMProviderDescriptor } from "@/app/admin/configuration/llm/interfaces"; import { getProviderIcon } from "@/app/admin/configuration/llm/utils"; import { Persona } from "@/app/admin/assistants/interfaces"; @@ -50,70 +46,6 @@ export default function LLMPopover({ const [isOpen, setIsOpen] = useState(false); const { user } = useUser(); - // Memoize the options to prevent unnecessary recalculations - const { llmOptions, defaultProvider, defaultModelDisplayName } = - useMemo(() => { - const llmOptionsByProvider: { - [provider: string]: { - name: string; - value: string; - icon: React.FC<{ size?: number; className?: string }>; - }[]; - } = {}; - - const uniqueModelNames = new Set(); - - llmProviders.forEach((llmProvider) => { - if (!llmOptionsByProvider[llmProvider.provider]) { - llmOptionsByProvider[llmProvider.provider] = []; - } - - llmProvider.model_configurations.forEach((modelConfiguration) => { - if ( - !uniqueModelNames.has(modelConfiguration.name) && - modelConfiguration.is_visible - ) { - uniqueModelNames.add(modelConfiguration.name); - const options = llmOptionsByProvider[llmProvider.provider]; - if (options) { - options.push({ - name: modelConfiguration.name, - value: structureValue( - llmProvider.name, - llmProvider.provider, - modelConfiguration.name - ), - icon: getProviderIcon( - llmProvider.provider, - modelConfiguration.name - ), - }); - } - } - }); - }); - - const llmOptions = Object.entries(llmOptionsByProvider).flatMap( - ([provider, options]) => [...options] - ); - - const defaultProvider = llmProviders.find( - (llmProvider) => llmProvider.is_default_provider - ); - - const defaultModelName = defaultProvider?.default_model_name; - const defaultModelDisplayName = defaultModelName - ? getDisplayNameForModel(defaultModelName) - : null; - - return { - llmOptionsByProvider, - llmOptions, - defaultProvider, - defaultModelDisplayName, - }; - }, [llmProviders]); - const [localTemperature, setLocalTemperature] = useState( llmManager.temperature ?? 0.5 ); @@ -153,24 +85,29 @@ export default function LLMPopover({ minimize toggle flexPriority="stiff" - name={getDisplayNameForModel( - llmManager?.currentLlm.modelName || - defaultModelDisplayName || - "Models" - )} + name={getDisplayNameForModel(llmManager.currentLlm.modelName)} Icon={getProviderIcon( - llmManager?.currentLlm.provider || - defaultProvider?.provider || - "anthropic", - llmManager?.currentLlm.modelName || - defaultProvider?.default_model_name || - "claude-3-5-sonnet-20240620" + llmManager.currentLlm.provider, + llmManager.currentLlm.name )} tooltipContent="Switch models" /> ), - [defaultModelDisplayName, defaultProvider, llmManager?.currentLlm] + [llmManager.currentLlm] + ); + + const llmOptionsToChooseFrom = useMemo( + () => + llmProviders.flatMap((llmProvider) => + llmProvider.model_configurations.map((modelConfiguration) => ({ + name: llmProvider.name, + provider: llmProvider.provider, + modelName: modelConfiguration.name, + icon: getProviderIcon(llmProvider.provider, modelConfiguration.name), + })) + ), + [llmProviders] ); return ( @@ -181,61 +118,73 @@ export default function LLMPopover({ className="w-64 p-1 bg-background border border-background-200 rounded-md shadow-lg flex flex-col" >
- {llmOptions.map(({ name, icon, value }, index) => { - if ( - !requiresImageGeneration || - modelSupportsImageInput(llmProviders, name) - ) { - return ( - - ); + {llmOptionsToChooseFrom.map( + ({ modelName, provider, name, icon }, index) => { + if ( + !requiresImageGeneration || + modelSupportsImageInput(llmProviders, modelName, provider) + ) { + return ( + + ); + } + return null; } - return null; - })} + )}
{user?.preferences?.temperature_override_enabled && (
From 5e63a2fddafe879bf93837706a7c8f3528875cf3 Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 12:59:01 -0700 Subject: [PATCH 2/9] Update web/src/app/chat/input/LLMPopover.tsx Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- web/src/app/chat/input/LLMPopover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index 31f9b3905c2..cd12366373c 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -160,7 +160,7 @@ export default function LLMPopover({ } })()} {llmManager.imageFilesPresent && - !modelSupportsImageInput(llmProviders, name) && ( + !modelSupportsImageInput(llmProviders, modelName, provider) && ( From 4ebdd7ec385d4cba355660a2a36796be17f64349 Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 12:59:55 -0700 Subject: [PATCH 3/9] Update web/src/app/chat/input/LLMPopover.tsx Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- web/src/app/chat/input/LLMPopover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index cd12366373c..6e5a236924f 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -129,7 +129,7 @@ export default function LLMPopover({ key={index} className={`w-full flex items-center gap-x-2 px-3 py-2 text-sm text-left hover:bg-background-100 dark:hover:bg-neutral-800 transition-colors duration-150 ${ (currentModelName || llmManager.currentLlm.modelName) === - name + modelName ? "bg-background-100 dark:bg-neutral-900 text-text" : "text-text-darker" }`} From 0a61ffad9dc7df5dc6052a12f71eac2907a64fab Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 13:00:10 -0700 Subject: [PATCH 4/9] Update web/src/app/chat/input/LLMPopover.tsx Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- web/src/app/chat/input/LLMPopover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index 6e5a236924f..e6bde033635 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -150,7 +150,7 @@ export default function LLMPopover({ {(() => { if ( - currentAssistant?.llm_model_version_override === name + currentAssistant?.llm_model_version_override === modelName ) { return ( From 7ea96d1ed94089ae4076ee1db93ee461ba1ec092 Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 13:00:20 -0700 Subject: [PATCH 5/9] Update web/src/app/chat/input/LLMPopover.tsx Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- web/src/app/chat/input/LLMPopover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index e6bde033635..81be055d1a0 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -139,7 +139,7 @@ export default function LLMPopover({ provider, name, } as LlmDescriptor); - onSelect?.(name); + onSelect?.(modelName); setIsOpen(false); }} > From 16f290972ea01374792f99c168cafcfa856fb359 Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 13:06:04 -0700 Subject: [PATCH 6/9] Add visibility to filtering --- web/src/app/chat/input/LLMPopover.tsx | 30 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index 81be055d1a0..8635cc550ea 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -100,12 +100,21 @@ export default function LLMPopover({ const llmOptionsToChooseFrom = useMemo( () => llmProviders.flatMap((llmProvider) => - llmProvider.model_configurations.map((modelConfiguration) => ({ - name: llmProvider.name, - provider: llmProvider.provider, - modelName: modelConfiguration.name, - icon: getProviderIcon(llmProvider.provider, modelConfiguration.name), - })) + llmProvider.model_configurations + .filter( + (modelConfiguration) => + modelConfiguration.is_visible || + modelConfiguration.name === currentModelName + ) + .map((modelConfiguration) => ({ + name: llmProvider.name, + provider: llmProvider.provider, + modelName: modelConfiguration.name, + icon: getProviderIcon( + llmProvider.provider, + modelConfiguration.name + ), + })) ), [llmProviders] ); @@ -150,7 +159,8 @@ export default function LLMPopover({ {(() => { if ( - currentAssistant?.llm_model_version_override === modelName + currentAssistant?.llm_model_version_override === + modelName ) { return ( @@ -160,7 +170,11 @@ export default function LLMPopover({ } })()} {llmManager.imageFilesPresent && - !modelSupportsImageInput(llmProviders, modelName, provider) && ( + !modelSupportsImageInput( + llmProviders, + modelName, + provider + ) && ( From b0aaada3d378c1bf55f7e0b9720f084864c5b5db Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 15:03:02 -0700 Subject: [PATCH 7/9] Update the model names which are shown in the popup --- web/src/app/chat/input/LLMPopover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index 8635cc550ea..7a0dd735800 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -156,7 +156,7 @@ export default function LLMPopover({ size: 16, className: "flex-none my-auto text-black", })} - + {(() => { if ( currentAssistant?.llm_model_version_override === From e072477014e7de5e11b09a95d60f393f58382c1d Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 16:14:03 -0700 Subject: [PATCH 8/9] Fix incorrect llm updating bug --- web/src/app/chat/input/LLMPopover.tsx | 2 +- web/src/lib/hooks.ts | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/web/src/app/chat/input/LLMPopover.tsx b/web/src/app/chat/input/LLMPopover.tsx index 7a0dd735800..f5e6df3947a 100644 --- a/web/src/app/chat/input/LLMPopover.tsx +++ b/web/src/app/chat/input/LLMPopover.tsx @@ -88,7 +88,7 @@ export default function LLMPopover({ name={getDisplayNameForModel(llmManager.currentLlm.modelName)} Icon={getProviderIcon( llmManager.currentLlm.provider, - llmManager.currentLlm.name + llmManager.currentLlm.modelName )} tooltipContent="Switch models" /> diff --git a/web/src/lib/hooks.ts b/web/src/lib/hooks.ts index ecfd8fea4a8..8fd1fc2faa8 100644 --- a/web/src/lib/hooks.ts +++ b/web/src/lib/hooks.ts @@ -517,14 +517,7 @@ export function useLlmManager( // Manually set the LLM const updateCurrentLlm = (newLlm: LlmDescriptor) => { - const provider = - newLlm.provider || findProviderForModel(llmProviders, newLlm.modelName); - const structuredValue = structureValue( - newLlm.name, - provider, - newLlm.modelName - ); - setCurrentLlm(getValidLlmDescriptor(structuredValue)); + setCurrentLlm(newLlm); setUserHasManuallyOverriddenLLM(true); }; From 17e71cfbcf06b5c417b41811b68dd792df0029d9 Mon Sep 17 00:00:00 2001 From: Raunak Bhagat Date: Thu, 3 Jul 2025 17:31:22 -0700 Subject: [PATCH 9/9] Fix bug in which the provider name would be used instead --- web/src/lib/hooks.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/web/src/lib/hooks.ts b/web/src/lib/hooks.ts index 8fd1fc2faa8..acc4833ddbf 100644 --- a/web/src/lib/hooks.ts +++ b/web/src/lib/hooks.ts @@ -13,11 +13,7 @@ import { errorHandlingFetcher } from "./fetcher"; import { useContext, useEffect, useMemo, useState } from "react"; import { DateRangePickerValue } from "@/components/dateRangeSelectors/AdminDateRangeSelector"; import { SourceMetadata } from "./search/interfaces"; -import { - parseLlmDescriptor, - findProviderForModel, - structureValue, -} from "./llm/utils"; +import { parseLlmDescriptor } from "./llm/utils"; import { ChatSession } from "@/app/chat/interfaces"; import { AllUsersResponse } from "./types"; import { Credential } from "./connectors/credentials"; @@ -503,7 +499,7 @@ export function useLlmManager( ); if (provider) { - return { ...model, provider: provider.name }; + return { ...model, provider: provider.provider }; } } return { name: "", provider: "", modelName: "" };