diff --git a/src/composables/useTemplateFiltering.ts b/src/composables/useTemplateFiltering.ts index 52ab6d779..1218a55de 100644 --- a/src/composables/useTemplateFiltering.ts +++ b/src/composables/useTemplateFiltering.ts @@ -158,9 +158,14 @@ export function useTemplateFiltering( // For now, keep original order return templates case 'model-size-low-to-high': - // TODO: Implement model size sorting when model size data is available - // For now, keep original order - return templates + return templates.sort((a: any, b: any) => { + const sizeA = + typeof a.size === 'number' ? a.size : Number.POSITIVE_INFINITY + const sizeB = + typeof b.size === 'number' ? b.size : Number.POSITIVE_INFINITY + if (sizeA === sizeB) return 0 + return sizeA - sizeB + }) case 'default': default: // Keep original order (default order) diff --git a/src/constants/templateWorkflows.ts b/src/constants/templateWorkflows.ts new file mode 100644 index 000000000..0886c037a --- /dev/null +++ b/src/constants/templateWorkflows.ts @@ -0,0 +1,4 @@ +// Constants related to Workflow Templates functionality +// Size threshold (in GB) for categorizing templates as "Small Models". +// Templates with size <= this limit will appear under the Performance > Small Models category. +export const SMALL_MODEL_SIZE_LIMIT = 3 diff --git a/src/stores/workflowTemplatesStore.ts b/src/stores/workflowTemplatesStore.ts index 9c85e8481..059354979 100644 --- a/src/stores/workflowTemplatesStore.ts +++ b/src/stores/workflowTemplatesStore.ts @@ -2,6 +2,7 @@ import Fuse from 'fuse.js' import { defineStore } from 'pinia' import { computed, ref, shallowRef } from 'vue' +import { SMALL_MODEL_SIZE_LIMIT } from '@/constants/templateWorkflows' import { i18n, st } from '@/i18n' import { api } from '@/scripts/api' import type { NavGroupData, NavItemData } from '@/types/navTypes' @@ -181,14 +182,21 @@ export const useWorkflowTemplatesStore = defineStore( coreTemplates.value.forEach((category) => { category.templates.forEach((template) => { const isAPI = category.title?.includes('API') || false + // Determine performance ("Small Models") based primarily on explicit size prop (<=3GB) + // Fallback to heuristic based on model name keywords for backward compatibility. + const explicitSize = template.size + const heuristicPerformance = template.models?.some( + (model) => + model.toLowerCase().includes('turbo') || + model.toLowerCase().includes('fast') || + model.toLowerCase().includes('schnell') || + model.toLowerCase().includes('fp8') + ) const isPerformance = - template.models?.some( - (model) => - model.toLowerCase().includes('turbo') || - model.toLowerCase().includes('fast') || - model.toLowerCase().includes('schnell') || - model.toLowerCase().includes('fp8') - ) || false + (typeof explicitSize === 'number' && + explicitSize <= SMALL_MODEL_SIZE_LIMIT) || + (!!explicitSize === false && heuristicPerformance) || + false const isMacCompatible = template.models?.some( @@ -313,7 +321,12 @@ export const useWorkflowTemplatesStore = defineStore( ) case 'performance-small': - return enhancedTemplates.value.filter((t) => t.isPerformance) + return enhancedTemplates.value.filter( + (t) => + (typeof t.size === 'number' && + t.size <= SMALL_MODEL_SIZE_LIMIT) || + (typeof t.size !== 'number' && t.isPerformance) + ) case 'performance-mac': return enhancedTemplates.value.filter((t) => t.isMacCompatible) @@ -352,7 +365,9 @@ export const useWorkflowTemplatesStore = defineStore( (t) => t.sourceModule !== 'default' ).length const performanceCounts = enhancedTemplates.value.filter( - (t) => t.isPerformance + (t) => + (typeof t.size === 'number' && t.size <= SMALL_MODEL_SIZE_LIMIT) || + (typeof t.size !== 'number' && t.isPerformance) ).length const macCompatibleCounts = enhancedTemplates.value.filter( (t) => t.isMacCompatible diff --git a/src/types/workflowTemplateTypes.ts b/src/types/workflowTemplateTypes.ts index 0a8d5efa9..939b31105 100644 --- a/src/types/workflowTemplateTypes.ts +++ b/src/types/workflowTemplateTypes.ts @@ -17,6 +17,7 @@ export interface TemplateInfo { date?: string useCase?: string license?: string + size?: number } export interface WorkflowTemplates {