diff --git a/admin/app/services/benchmark_service.ts b/admin/app/services/benchmark_service.ts
index 5aeb6f5..e37b38c 100644
--- a/admin/app/services/benchmark_service.ts
+++ b/admin/app/services/benchmark_service.ts
@@ -223,14 +223,29 @@ export class BenchmarkService {
}
}
- // Get GPU model (prefer discrete GPU)
+ // Get GPU model (prefer discrete GPU with dedicated VRAM)
let gpuModel: string | null = null
if (graphics.controllers && graphics.controllers.length > 0) {
- const discreteGpu = graphics.controllers.find(
- (g) => !g.vendor?.toLowerCase().includes('intel') &&
- !g.vendor?.toLowerCase().includes('amd') ||
- (g.vram && g.vram > 0)
- )
+ // First, look for discrete GPUs (NVIDIA, AMD discrete, or any with significant VRAM)
+ const discreteGpu = graphics.controllers.find((g) => {
+ const vendor = g.vendor?.toLowerCase() || ''
+ const model = g.model?.toLowerCase() || ''
+ // NVIDIA GPUs are always discrete
+ if (vendor.includes('nvidia') || model.includes('geforce') || model.includes('rtx') || model.includes('quadro')) {
+ return true
+ }
+ // AMD discrete GPUs (Radeon, not integrated APU graphics)
+ if ((vendor.includes('amd') || vendor.includes('ati')) &&
+ (model.includes('radeon') || model.includes('rx ') || model.includes('vega')) &&
+ !model.includes('graphics')) {
+ return true
+ }
+ // Any GPU with dedicated VRAM > 512MB is likely discrete
+ if (g.vram && g.vram > 512) {
+ return true
+ }
+ return false
+ })
gpuModel = discreteGpu?.model || graphics.controllers[0]?.model || null
}
diff --git a/admin/inertia/components/InfoTooltip.tsx b/admin/inertia/components/InfoTooltip.tsx
new file mode 100644
index 0000000..136c0b0
--- /dev/null
+++ b/admin/inertia/components/InfoTooltip.tsx
@@ -0,0 +1,35 @@
+import { InformationCircleIcon } from '@heroicons/react/24/outline'
+import { useState } from 'react'
+
+interface InfoTooltipProps {
+ text: string
+ className?: string
+}
+
+export default function InfoTooltip({ text, className = '' }: InfoTooltipProps) {
+ const [isVisible, setIsVisible] = useState(false)
+
+ return (
+
+
+ {isVisible && (
+