import Provider from "@/components/provider"; import { Sheet, SheetContent, SheetHeader, SheetTitle } from "@/components/ui/sheet"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { ModelProvider } from "@/lib/types/config"; import { RbacOperation, RbacResource, useRbac } from "@enterprise/lib"; import { useEffect, useMemo, useState } from "react"; import { ApiStructureFormFragment, BetaHeadersFormFragment, GovernanceFormFragment, OpenAIConfigFormFragment, ProxyFormFragment, } from "../fragments"; import { DebuggingFormFragment } from "../fragments/debuggingFormFragment"; import { NetworkFormFragment } from "../fragments/networkFormFragment"; import { PerformanceFormFragment } from "../fragments/performanceFormFragment"; interface Props { show: boolean; onCancel: () => void; provider: ModelProvider; } const ANTHROPIC_FAMILY_PROVIDERS = ["anthropic", "vertex", "bedrock", "azure"]; const availableTabs = (hasCustomProviderConfig: boolean, hasGovernanceAccess: boolean, isOpenAI: boolean, isAnthropicFamily: boolean) => { const tabs = []; if (hasCustomProviderConfig) { tabs.push({ id: "api-structure", label: "API Structure", }); } tabs.push({ id: "network", label: "Network", }); tabs.push({ id: "proxy", label: "Proxy", }); tabs.push({ id: "performance", label: "Performance", }); if (hasGovernanceAccess) { tabs.push({ id: "governance", label: "Governance", }); } if (isAnthropicFamily) { tabs.push({ id: "beta-headers", label: "Beta Headers", }); } tabs.push({ id: "debugging", label: "Debugging", }); if (isOpenAI) { tabs.push({ id: "openai-config", label: "OpenAI Config", }); } return tabs; }; export default function ProviderConfigSheet({ show, onCancel, provider }: Props) { const [selectedTab, setSelectedTab] = useState(undefined); const hasGovernanceAccess = useRbac(RbacResource.Governance, RbacOperation.View); const hasCustomProviderConfig = !!provider.custom_provider_config; const isOpenAI = provider.name === "openai"; const isAnthropicFamily = ANTHROPIC_FAMILY_PROVIDERS.includes(provider.name.toLowerCase()); const tabs = useMemo(() => { return availableTabs(hasCustomProviderConfig, hasGovernanceAccess, isOpenAI, isAnthropicFamily); }, [hasCustomProviderConfig, hasGovernanceAccess, isOpenAI, isAnthropicFamily]); useEffect(() => { setSelectedTab((previousTab) => { if (previousTab && tabs.some((tab) => tab.id === previousTab)) { return previousTab; } return tabs[0]?.id; }); }, [tabs]); return ( { if (!open) onCancel(); }} >
Provider configuration
{tabs.map((tab) => ( {tab.label} ))}
); }