From 3529222b95f2213e819c4ebc907f42a1e059e70b Mon Sep 17 00:00:00 2001 From: Mamadou DICKO <63923024+mamadoudicko@users.noreply.github.com> Date: Tue, 25 Jul 2023 23:12:46 +0200 Subject: [PATCH] Brain management 4 (#762) * feat: add * feat(SDK): add update brain * feat: add removeUndefined helper * feat: remove unnecessary autofocus flag * add brain settings tab * ui: add tab delimitor * feat: improve ux --- backend/core/routes/brain_routes.py | 6 +- .../BrainManagementTabs.tsx | 6 +- .../components/BrainTabTrigger.tsx | 4 +- .../components/SettingsTab/SettingsTab.tsx | 130 +++++++++++++++ .../SettingsTab/hooks/useSettingsTab.ts | 156 ++++++++++++++++++ .../components/ApiKeyConfig/ApiKeyConfig.tsx | 41 +++++ .../__tests__/ApiKeyConfig.test.tsx | 52 ++++++ .../hooks/__tests__/useApiKeyConfig.test.ts | 67 ++++++++ .../ApiKeyConfig/hooks/useApiKeyConfig.ts | 42 +++++ .../app/user/components/ApiKeyConfig/index.ts | 1 + .../app/user/components/UserStatistics.tsx | 2 + .../api/brain/__tests__/useBrainApi.test.ts | 29 +++- frontend/lib/api/brain/brain.ts | 23 +-- frontend/lib/api/brain/types.ts | 12 ++ frontend/lib/api/brain/useBrainApi.ts | 10 +- .../AddBrainModal/AddBrainModal.tsx | 2 - .../brain-config-provider.tsx | 5 +- .../BrainProvider/hooks/useBrainProvider.ts | 22 ++- frontend/lib/context/BrainProvider/types.ts | 9 +- frontend/lib/helpers/removeUndefined.ts | 12 ++ .../lib/helpers/setEmptyStringsUndefined.ts | 11 -- 21 files changed, 595 insertions(+), 47 deletions(-) create mode 100644 frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/SettingsTab/SettingsTab.tsx create mode 100644 frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/SettingsTab/hooks/useSettingsTab.ts create mode 100644 frontend/app/user/components/ApiKeyConfig/ApiKeyConfig.tsx create mode 100644 frontend/app/user/components/ApiKeyConfig/__tests__/ApiKeyConfig.test.tsx create mode 100644 frontend/app/user/components/ApiKeyConfig/hooks/__tests__/useApiKeyConfig.test.ts create mode 100644 frontend/app/user/components/ApiKeyConfig/hooks/useApiKeyConfig.ts create mode 100644 frontend/app/user/components/ApiKeyConfig/index.ts create mode 100644 frontend/lib/helpers/removeUndefined.ts delete mode 100644 frontend/lib/helpers/setEmptyStringsUndefined.ts diff --git a/backend/core/routes/brain_routes.py b/backend/core/routes/brain_routes.py index 0588a2ce2..de17b69c0 100644 --- a/backend/core/routes/brain_routes.py +++ b/backend/core/routes/brain_routes.py @@ -10,6 +10,7 @@ from models.brains import ( ) from models.settings import BrainRateLimiting from models.users import User + from routes.authorizations.brain_authorization import RoleEnum, has_brain_authorization logger = get_logger(__name__) @@ -74,10 +75,7 @@ async def get_brain_endpoint( brain = Brain(id=brain_id) brains = brain.get_brain_details() if len(brains) > 0: - return { - "id": brain_id, - "name": brains[0]["name"], - } + return brains[0] else: return HTTPException( status_code=404, diff --git a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx index 7ec26a520..1dc4675f2 100644 --- a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx +++ b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/BrainManagementTabs.tsx @@ -1,6 +1,7 @@ import { Content, List, Root } from "@radix-ui/react-tabs"; import { BrainTabTrigger, PeopleTab } from "./components"; +import { SettingsTab } from "./components/SettingsTab/SettingsTab"; import { useBrainManagementTabs } from "./hooks/useBrainManagementTabs"; export const BrainManagementTabs = (): JSX.Element => { @@ -38,11 +39,14 @@ export const BrainManagementTabs = (): JSX.Element => {
-

coming soon

+
+ +

Coming soon

+
); diff --git a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/BrainTabTrigger.tsx b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/BrainTabTrigger.tsx index 8371a271a..5c3cc2fc4 100644 --- a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/BrainTabTrigger.tsx +++ b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/BrainTabTrigger.tsx @@ -16,8 +16,8 @@ export const BrainTabTrigger = ({ }: BrainTabTriggerProps): JSX.Element => { return ( onChange(value)} diff --git a/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/SettingsTab/SettingsTab.tsx b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/SettingsTab/SettingsTab.tsx new file mode 100644 index 000000000..223368037 --- /dev/null +++ b/frontend/app/brains-management/[brainId]/components/BrainManagementTabs/components/SettingsTab/SettingsTab.tsx @@ -0,0 +1,130 @@ +/* eslint-disable max-lines */ + +import { UUID } from "crypto"; + +import Button from "@/lib/components/ui/Button"; +import { Divider } from "@/lib/components/ui/Divider"; +import Field from "@/lib/components/ui/Field"; +import { TextArea } from "@/lib/components/ui/TextField"; +import { models, paidModels } from "@/lib/context/BrainConfigProvider/types"; +import { defineMaxTokens } from "@/lib/helpers/defineMexTokens"; + +import { useSettingsTab } from "./hooks/useSettingsTab"; + +type SettingsTabProps = { + brainId: UUID; +}; + +export const SettingsTab = ({ brainId }: SettingsTabProps): JSX.Element => { + const { + handleSubmit, + register, + hasChanges, + openAiKey, + temperature, + maxTokens, + model, + setAsDefaultBrainHandler, + isSettingAsDefault, + isUpdating, + isDefaultBrain, + } = useSettingsTab({ brainId }); + + return ( +
void handleSubmit(e)} + className="my-10 mb-0 flex flex-col items-center gap-2" + > +
+
+ +
+
+ {isDefaultBrain ? ( +
+ Default brain +
+ ) : ( + + )} +
+
+