diff --git a/src/components/dashboard/navbar.tsx b/src/components/dashboard/navbar.tsx index a82bcf7..a350a6f 100644 --- a/src/components/dashboard/navbar.tsx +++ b/src/components/dashboard/navbar.tsx @@ -8,17 +8,17 @@ import { Card, Separator, Container, - Heading, Link, } from "@radix-ui/themes"; import { ChainIdentity } from "../../rakis-core/synthient-chain/db/entities"; import ChainIdentities from "./chainidentities"; import ScaleWorkers from "./scaleWorkers"; import { - LLMModelName, + AvailableModel, LLMWorkerStates, } from "../../rakis-core/synthient-chain/llm/types"; import LiveHelp from "./livehelp"; +import { useMemo } from "react"; const GreenDot = () => ( void; + scaleLLMWorkers: (modelName: AvailableModel, numWorkers: number) => void; chainIdentities: ChainIdentity[]; addNewChainIdentity: ( signature: `0x${string}`, @@ -52,6 +52,15 @@ export default function NavBar({ signedWithWallet: string ) => Promise; }) { + const workerCount = useMemo(() => { + return Object.keys(llmWorkerStates) + .map((workerId) => llmWorkerStates[workerId].modelName as AvailableModel) + .reduce((acc, cur) => { + acc[cur] = (acc[cur] || 0) + 1; + return acc; + }, {} as Record); + }, [llmWorkerStates]); + return ( @@ -181,13 +190,7 @@ export default function NavBar({ llmWorkerStates[workerId].modelName) - .reduce((acc, cur) => { - acc[cur] ??= 0; - acc[cur]++; - return acc; - }, {} as { [key: string]: number })} + workerCount={workerCount} scaleLLMWorkers={scaleLLMWorkers} /> void; + workerCount: Record; + scaleLLMWorkers: (modelName: AvailableModel, workerCount: number) => void; }) { const [open, setOpen] = useState(false); const [dialogOpen, setDialogOpen] = useState(false); - const [selectedModel, setSelectedModel] = useState( + const [selectedModel, setSelectedModel] = useState( "gemma-2b-it-q4f16_1" ); const [scaleCount, setScaleCount] = useState(""); + const workerCountRef = useRef(workerCount); + + useEffect(() => { + workerCountRef.current = workerCount; + }, [workerCount]); + useEffect(() => { - setScaleCount(`${(selectedModel && workerCount[selectedModel] + 1) || 1}`); - }, [selectedModel, workerCount]); + if (selectedModel) { + setScaleCount(`${(workerCountRef.current[selectedModel] ?? 0) + 1}`); + } else { + setScaleCount("1"); + } + }, [selectedModel]); function checkScaleWorkers() { if ( diff --git a/src/rakis-core/synthient-chain/llm/types.ts b/src/rakis-core/synthient-chain/llm/types.ts index a6a8e1b..12a332c 100644 --- a/src/rakis-core/synthient-chain/llm/types.ts +++ b/src/rakis-core/synthient-chain/llm/types.ts @@ -16,6 +16,8 @@ export const availableModels = [ export type LLMModelName = (typeof availableModels)[number]; +export type AvailableModel = typeof availableModels[number]; + export type LLMWorkerStates = { [workerId: string]: { modelName: LLMModelName;