diff --git a/backend/onyx/server/settings/api.py b/backend/onyx/server/settings/api.py index 6787eb168..82b580ad5 100644 --- a/backend/onyx/server/settings/api.py +++ b/backend/onyx/server/settings/api.py @@ -36,6 +36,8 @@ basic_router = APIRouter(prefix="/settings") def put_settings( settings: Settings, _: User | None = Depends(current_admin_user) ) -> None: + print("PUTTING SETTINGS") + print(settings) store_settings(settings) @@ -47,7 +49,10 @@ def fetch_settings( ) -> UserSettings: """Settings and notifications are stuffed into this single endpoint to reduce number of Postgres calls""" + print("FETCHING SETTINGS") general_settings = load_settings() + print("LOADED SETTINGS") + print(general_settings) settings_notifications = get_settings_notifications(user, db_session) try: diff --git a/backend/onyx/server/settings/models.py b/backend/onyx/server/settings/models.py index f6343752a..fa6a5bcbf 100644 --- a/backend/onyx/server/settings/models.py +++ b/backend/onyx/server/settings/models.py @@ -45,6 +45,8 @@ class Settings(BaseModel): gpu_enabled: bool | None = None product_gating: GatingType = GatingType.NONE anonymous_user_enabled: bool | None = None + pro_search_disabled: bool | None = None + auto_scroll: bool | None = None class UserSettings(Settings): diff --git a/backend/onyx/server/settings/store.py b/backend/onyx/server/settings/store.py index cb68f97cb..ee6acc94b 100644 --- a/backend/onyx/server/settings/store.py +++ b/backend/onyx/server/settings/store.py @@ -11,6 +11,14 @@ logger = setup_logger() def load_settings() -> Settings: + kv_store = get_kv_store() + try: + stored_settings = kv_store.load(KV_SETTINGS_KEY) + settings = Settings(**stored_settings) + except Exception as e: + logger.error(f"Error loading settings from KV store: {str(e)}") + settings = Settings() + tenant_id = CURRENT_TENANT_ID_CONTEXTVAR.get() if MULTI_TENANT else None redis_client = get_redis_client(tenant_id=tenant_id) @@ -26,10 +34,10 @@ def load_settings() -> Settings: redis_client.set(OnyxRedisLocks.ANONYMOUS_USER_ENABLED, "0") except Exception as e: # Log the error and reset to default - logger.error(f"Error loading settings from Redis: {str(e)}") + logger.error(f"Error loading anonymous user setting from Redis: {str(e)}") anonymous_user_enabled = False - settings = Settings(anonymous_user_enabled=anonymous_user_enabled) + settings.anonymous_user_enabled = anonymous_user_enabled return settings diff --git a/web/src/app/admin/settings/SettingsForm.tsx b/web/src/app/admin/settings/SettingsForm.tsx index d4b6079a9..d563d6c11 100644 --- a/web/src/app/admin/settings/SettingsForm.tsx +++ b/web/src/app/admin/settings/SettingsForm.tsx @@ -228,6 +228,15 @@ export function SettingsForm() { } /> + + handleToggleSettingsField("pro_search_disabled", e.target.checked) + } + /> + {NEXT_PUBLIC_CLOUD_ENABLED && settings.anonymous_user_enabled && ( )} diff --git a/web/src/app/admin/settings/interfaces.ts b/web/src/app/admin/settings/interfaces.ts index f624f12fe..0c833002c 100644 --- a/web/src/app/admin/settings/interfaces.ts +++ b/web/src/app/admin/settings/interfaces.ts @@ -10,6 +10,7 @@ export interface Settings { notifications: Notification[]; needs_reindexing: boolean; gpu_enabled: boolean; + pro_search_disabled: boolean; product_gating: GatingType; auto_scroll: boolean; } diff --git a/web/src/app/chat/ChatPage.tsx b/web/src/app/chat/ChatPage.tsx index d601538e5..80d4578ef 100644 --- a/web/src/app/chat/ChatPage.tsx +++ b/web/src/app/chat/ChatPage.tsx @@ -1327,7 +1327,8 @@ export function ChatPage({ systemPromptOverride: searchParams.get(SEARCH_PARAM_NAMES.SYSTEM_PROMPT) || undefined, useExistingUserMessage: isSeededChat, - useLanggraph: proSearchEnabled, + useLanggraph: + !settings?.settings.pro_search_disabled && proSearchEnabled, }); const delay = (ms: number) => { diff --git a/web/src/app/chat/input/ChatInputBar.tsx b/web/src/app/chat/input/ChatInputBar.tsx index a45cf48c3..a5e885a8d 100644 --- a/web/src/app/chat/input/ChatInputBar.tsx +++ b/web/src/app/chat/input/ChatInputBar.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useRef, useState } from "react"; +import React, { useContext, useEffect, useRef, useState } from "react"; import { FiPlusCircle, FiPlus, FiInfo, FiX, FiFilter } from "react-icons/fi"; import { ChatInputOption } from "./ChatInputOption"; import { Persona } from "@/app/admin/assistants/interfaces"; @@ -35,6 +35,7 @@ import { truncateString } from "@/lib/utils"; import { buildImgUrl } from "../files/images/utils"; import { useUser } from "@/components/user/UserProvider"; import { AgenticToggle } from "./AgenticToggle"; +import { SettingsContext } from "@/components/settings/SettingsProvider"; const MAX_INPUT_HEIGHT = 200; export const SourceChip2 = ({ @@ -225,6 +226,7 @@ export function ChatInputBar({ setProSearchEnabled, }: ChatInputBarProps) { const { user } = useUser(); + const settings = useContext(SettingsContext); useEffect(() => { const textarea = textAreaRef.current; if (textarea) { @@ -789,12 +791,13 @@ export function ChatInputBar({ )}
- {retrievalEnabled && ( - - )} + {retrievalEnabled && + !settings?.settings.pro_search_disabled && ( + + )}