From efe812e323431d1d6126e839f2a71bc3c5ca6922 Mon Sep 17 00:00:00 2001 From: sabaimran Date: Fri, 20 Dec 2024 13:33:20 -0800 Subject: [PATCH 1/2] Add componets for tabs in agent page --- src/interface/web/components/ui/tabs.tsx | 55 ++++++++++++++++++++++++ src/interface/web/package.json | 1 + src/interface/web/yarn.lock | 2 +- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/interface/web/components/ui/tabs.tsx diff --git a/src/interface/web/components/ui/tabs.tsx b/src/interface/web/components/ui/tabs.tsx new file mode 100644 index 00000000..e8b743e1 --- /dev/null +++ b/src/interface/web/components/ui/tabs.tsx @@ -0,0 +1,55 @@ +"use client"; + +import * as React from "react"; +import * as TabsPrimitive from "@radix-ui/react-tabs"; + +import { cn } from "@/lib/utils"; + +const Tabs = TabsPrimitive.Root; + +const TabsList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsList.displayName = TabsPrimitive.List.displayName; + +const TabsTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsTrigger.displayName = TabsPrimitive.Trigger.displayName; + +const TabsContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +TabsContent.displayName = TabsPrimitive.Content.displayName; + +export { Tabs, TabsList, TabsTrigger, TabsContent }; diff --git a/src/interface/web/package.json b/src/interface/web/package.json index 6b5fb143..61b61717 100644 --- a/src/interface/web/package.json +++ b/src/interface/web/package.json @@ -36,6 +36,7 @@ "@radix-ui/react-select": "^2.1.1", "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", + "@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-toast": "^1.2.1", "@radix-ui/react-toggle": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.6", diff --git a/src/interface/web/yarn.lock b/src/interface/web/yarn.lock index bc0d0d14..200bdab8 100644 --- a/src/interface/web/yarn.lock +++ b/src/interface/web/yarn.lock @@ -914,7 +914,7 @@ "@radix-ui/react-use-previous" "1.1.0" "@radix-ui/react-use-size" "1.1.0" -"@radix-ui/react-tabs@^1.1.1": +"@radix-ui/react-tabs@^1.1.1", "@radix-ui/react-tabs@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.2.tgz#a72da059593cba30fccb30a226d63af686b32854" integrity sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ== From cc7fd1163f2306cda8afa76867c3eda646e0191b Mon Sep 17 00:00:00 2001 From: sabaimran Date: Fri, 20 Dec 2024 14:41:15 -0800 Subject: [PATCH 2/2] Use tabs to separate sections in the agent mod form - Add knowledge base as a separate section, apart from tools - This makes it easier to navigate the different components quickly --- .../app/components/agentCard/agentCard.tsx | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/interface/web/app/components/agentCard/agentCard.tsx b/src/interface/web/app/components/agentCard/agentCard.tsx index b0371b6f..08a12658 100644 --- a/src/interface/web/app/components/agentCard/agentCard.tsx +++ b/src/interface/web/app/components/agentCard/agentCard.tsx @@ -91,6 +91,8 @@ import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover import ShareLink from "@/app/components/shareLink/shareLink"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; + export interface AgentData { slug: string; name: string; @@ -427,7 +429,9 @@ export function AgentCard(props: AgentCardProps) { {props.editCard ? ( Edit {props.data.name} @@ -534,12 +538,13 @@ export function AgentModificationForm(props: AgentModificationFormProps) { { name: "persona", label: "Personality" }, ]; - const advancedFields = [ - { name: "files", label: "Knowledge Base" }, + const toolsFields = [ { name: "input_tools", label: "Input Tools" }, { name: "output_modes", label: "Output Modes" }, ]; + const knowledgeBaseFields = [{ name: "files", label: "Knowledge Base" }]; + const customizationFields = [ { name: "color", label: "Color" }, { name: "icon", label: "Icon" }, @@ -548,9 +553,10 @@ export function AgentModificationForm(props: AgentModificationFormProps) { ]; const formGroups = [ - { fields: basicFields, label: "Basic Settings" }, - { fields: customizationFields, label: "Customization & Access" }, - { fields: advancedFields, label: "Advanced Settings" }, + { fields: basicFields, label: "Basic Settings", tabName: "basic" }, + { fields: customizationFields, label: "Customization & Access", tabName: "customize" }, + { fields: knowledgeBaseFields, label: "Knowledge Base", tabName: "knowledge" }, + { fields: toolsFields, label: "Tools Settings", tabName: "tools" }, ]; const fileInputRef = useRef(null); @@ -749,7 +755,7 @@ export function AgentModificationForm(props: AgentModificationFormProps) { control={props.form.control} name="chat_model" render={({ field }) => ( - + Chat Model {!props.isSubscribed ? ( @@ -796,7 +802,7 @@ export function AgentModificationForm(props: AgentModificationFormProps) { control={props.form.control} name="privacy_level" render={({ field }) => ( - +
Privacy Level
@@ -1080,7 +1086,7 @@ export function AgentModificationForm(props: AgentModificationFormProps) { control={props.form.control} name="input_tools" render={({ field }) => ( - + Restrict Input Tools Which knowledge retrieval tools should this agent be limited to? @@ -1166,7 +1172,7 @@ export function AgentModificationForm(props: AgentModificationFormProps) { control={props.form.control} name="output_modes" render={({ field }) => ( - + Restrict Output Modes Which output modes should this agent be limited to? @@ -1252,10 +1258,32 @@ export function AgentModificationForm(props: AgentModificationFormProps) { return (
- -
{formGroups[currentStep].label}
- {currentStep < formGroups.length && - formGroups[currentStep].fields.map((field) => renderFormField(field.name))} + + + + {formGroups.map((group) => ( + + setCurrentStep( + formGroups.findIndex((g) => g.tabName === group.tabName), + ) + } + > + {group.label} + + ))} + + {formGroups.map((group) => ( + + {group.fields.map((field) => renderFormField(field.name))} + + ))} +