From 6bb66b2b9353616ad1b68ed128190de1275dc5bd Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Thu, 28 Aug 2025 12:57:11 +0700 Subject: [PATCH 1/5] fix: handle checking compatible gated model --- web-app/src/containers/ModelInfoHoverCard.tsx | 13 ++++++++++--- web-app/src/services/models.ts | 5 +++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/web-app/src/containers/ModelInfoHoverCard.tsx b/web-app/src/containers/ModelInfoHoverCard.tsx index 4735e7260..0a39724ba 100644 --- a/web-app/src/containers/ModelInfoHoverCard.tsx +++ b/web-app/src/containers/ModelInfoHoverCard.tsx @@ -79,6 +79,15 @@ export const ModelInfoHoverCard = ({ ) + } else if (status === 'GREY') { + return ( +
+
+ + Unable to determine model compatibility with your current device + +
+ ) } else { return (
@@ -121,9 +130,7 @@ export const ModelInfoHoverCard = ({ <>
- {isDefaultVariant - ? 'Maybe Default Quantization' - : 'Quantization'} + {isDefaultVariant ? 'Default Quantization' : 'Quantization'} {variant?.model_id.split('-').pop()?.toUpperCase() || 'N/A'} diff --git a/web-app/src/services/models.ts b/web-app/src/services/models.ts index bcd0c788c..58940cc8a 100644 --- a/web-app/src/services/models.ts +++ b/web-app/src/services/models.ts @@ -592,7 +592,7 @@ export const checkMmprojExists = async (modelId: string): Promise => { export const isModelSupported = async ( modelPath: string, ctxSize?: number -): Promise<'RED' | 'YELLOW' | 'GREEN'> => { +): Promise<'RED' | 'YELLOW' | 'GREEN' | 'GREY'> => { try { const engine = getEngine('llamacpp') as AIEngine & { isModelSupported?: ( @@ -600,6 +600,7 @@ export const isModelSupported = async ( ctx_size?: number ) => Promise<'RED' | 'YELLOW' | 'GREEN'> } + console.log(engine, 'engine') if (engine && typeof engine.isModelSupported === 'function') { return await engine.isModelSupported(modelPath, ctxSize) } @@ -608,6 +609,6 @@ export const isModelSupported = async ( return 'YELLOW' // Conservative fallback } catch (error) { console.error(`Error checking model support for ${modelPath}:`, error) - return 'RED' // Error state, assume not supported + return 'GREY' // Error state, assume not supported } } From 85b614f44aa5bce7bbefff1596b00335d5c9e6fc Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Thu, 28 Aug 2025 12:58:12 +0700 Subject: [PATCH 2/5] chore: update test --- web-app/src/services/__tests__/models.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web-app/src/services/__tests__/models.test.ts b/web-app/src/services/__tests__/models.test.ts index 286fb01a4..b6b61e0ef 100644 --- a/web-app/src/services/__tests__/models.test.ts +++ b/web-app/src/services/__tests__/models.test.ts @@ -924,7 +924,7 @@ describe('models service', () => { expect(result).toBe('YELLOW') // Should use fallback }) - it('should return RED when there is an error', async () => { + it('should return GREY when there is an error', async () => { const mockEngineWithError = { ...mockEngine, isModelSupported: vi.fn().mockRejectedValue(new Error('Test error')), @@ -934,7 +934,7 @@ describe('models service', () => { const result = await isModelSupported('/path/to/model.gguf') - expect(result).toBe('RED') + expect(result).toBe('GREY') }) }) }) From 11a7bf73312575d5c4e2114ce48c906ee459b97e Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Thu, 28 Aug 2025 13:04:13 +0700 Subject: [PATCH 3/5] chore: remove log --- web-app/src/services/models.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/web-app/src/services/models.ts b/web-app/src/services/models.ts index 58940cc8a..f85134998 100644 --- a/web-app/src/services/models.ts +++ b/web-app/src/services/models.ts @@ -600,7 +600,6 @@ export const isModelSupported = async ( ctx_size?: number ) => Promise<'RED' | 'YELLOW' | 'GREEN'> } - console.log(engine, 'engine') if (engine && typeof engine.isModelSupported === 'function') { return await engine.isModelSupported(modelPath, ctxSize) } From 5257a24181df3fa160571a5d04c1e52b3f3ec8b5 Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Thu, 28 Aug 2025 13:10:08 +0700 Subject: [PATCH 4/5] chore: fix status --- web-app/src/containers/ModelSupportStatus.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web-app/src/containers/ModelSupportStatus.tsx b/web-app/src/containers/ModelSupportStatus.tsx index 43827f58e..770d126f8 100644 --- a/web-app/src/containers/ModelSupportStatus.tsx +++ b/web-app/src/containers/ModelSupportStatus.tsx @@ -24,7 +24,7 @@ export const ModelSupportStatus = ({ className, }: ModelSupportStatusProps) => { const [modelSupportStatus, setModelSupportStatus] = useState< - 'RED' | 'YELLOW' | 'GREEN' | 'LOADING' | null + 'RED' | 'YELLOW' | 'GREEN' | 'LOADING' | null | 'GREY' >(null) // Helper function to check model support with proper path resolution @@ -32,7 +32,7 @@ export const ModelSupportStatus = ({ async ( id: string, ctxSize: number - ): Promise<'RED' | 'YELLOW' | 'GREEN' | null> => { + ): Promise<'RED' | 'YELLOW' | 'GREEN' | 'GREY' | null> => { try { const janDataFolder = await getJanDataFolderPath() From 328d680f733ee70de769b8cdf9ec92d9e1d170c0 Mon Sep 17 00:00:00 2001 From: Faisal Amir Date: Thu, 28 Aug 2025 13:15:58 +0700 Subject: [PATCH 5/5] chore: fix status model id --- web-app/src/routes/hub/$modelId.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-app/src/routes/hub/$modelId.tsx b/web-app/src/routes/hub/$modelId.tsx index 2d0eecc70..5ecedb43d 100644 --- a/web-app/src/routes/hub/$modelId.tsx +++ b/web-app/src/routes/hub/$modelId.tsx @@ -64,7 +64,7 @@ function HubModelDetail() { // State for model support status const [modelSupportStatus, setModelSupportStatus] = useState< - Record + Record >({}) useEffect(() => {