diff --git a/studio/frontend/src/config/training.ts b/studio/frontend/src/config/training.ts index f8fc09c353..aa5b9822a9 100644 --- a/studio/frontend/src/config/training.ts +++ b/studio/frontend/src/config/training.ts @@ -145,3 +145,10 @@ export const PRIORITY_TRAINING_MODELS: readonly string[] = [ "unsloth/Llama-3.1-8B-Instruct", "unsloth/Llama-3.2-3B-Instruct", ]; + +/** Pin priority models to the top of a list of model IDs, preserving their defined order. */ +export function applyPriorityOrdering(ids: string[]): string[] { + const prioritySet = new Set(PRIORITY_TRAINING_MODELS); + const rest = ids.filter((id) => !prioritySet.has(id)); + return [...PRIORITY_TRAINING_MODELS, ...rest]; +} diff --git a/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx b/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx index ab41214d20..90d1b44c92 100644 --- a/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx +++ b/studio/frontend/src/features/onboarding/components/steps/model-selection-step.tsx @@ -33,7 +33,7 @@ import { TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; -import { MODEL_TYPE_TO_HF_TASK, PRIORITY_TRAINING_MODELS } from "@/config/training"; +import { MODEL_TYPE_TO_HF_TASK, applyPriorityOrdering } from "@/config/training"; import { useDebouncedValue, useGpuInfo, @@ -103,9 +103,7 @@ export function ModelSelectionStep() { const resultIds = useMemo(() => { const ids = hfResults.map((r) => r.id); - const prioritySet = new Set(PRIORITY_TRAINING_MODELS); - const rest = ids.filter((id) => !prioritySet.has(id)); - return [...PRIORITY_TRAINING_MODELS, ...rest]; + return applyPriorityOrdering(ids); }, [hfResults]); // Match Studio behavior: only show exception signals (OOM/TIGHT) in training flows. diff --git a/studio/frontend/src/features/studio/sections/model-section.tsx b/studio/frontend/src/features/studio/sections/model-section.tsx index 5f115e160f..1efaccf129 100644 --- a/studio/frontend/src/features/studio/sections/model-section.tsx +++ b/studio/frontend/src/features/studio/sections/model-section.tsx @@ -28,7 +28,7 @@ import { TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; -import { MODEL_TYPE_TO_HF_TASK, PRIORITY_TRAINING_MODELS } from "@/config/training"; +import { MODEL_TYPE_TO_HF_TASK, applyPriorityOrdering } from "@/config/training"; import { useDebouncedValue, useGpuInfo, @@ -173,9 +173,7 @@ export function ModelSection() { ids.push(selectedModel); } - const prioritySet = new Set(PRIORITY_TRAINING_MODELS); - const rest = ids.filter((id) => !prioritySet.has(id)); - return [...PRIORITY_TRAINING_MODELS, ...rest]; + return applyPriorityOrdering(ids); }, [hfResults, selectedModel]); // Filter out GGUF models — they can't be used for training