import type { HardwareSpec } from "./hardware.js";

export interface NvidiaHardwareSpec extends HardwareSpec {
	/**
	 * CUDA Compute Capability (NVIDIA GPUs only)
	 *
	 * potential source https://developer.nvidia.com/cuda/gpus
	 */
	computeCapability: number;
}

export enum NvidiaComputeCapabilities {
	BLACKWELL_ULTRA = 12.1,
	BLACKWELL_RTX = 12.0,
	BLACKWELL = 10.0,
	HOPPER = 9.0,
	ADA_LOVELACE = 8.9,
	ORIN = 8.7,
	AMPERE_RTX = 8.6,
	AMPERE = 8.0,
	TURING = 7.5,
	XAVIER = 7.2,
	VOLTA = 7.0,
	PASCAL_TEGRA = 6.2,
	PASCAL = 6.1,
	PASCAL_DATACENTER = 6.0,
	MAXWELL = 5.3,
}

export const NVIDIA_SKUS: Record<string, NvidiaHardwareSpec> = {
	B300: {
		tflops: 1232,
		memory: [288],
		computeCapability: 10.0,
		msrp: 45_000,
		power: 1400,
		releaseYear: 2026,
	},
	B200: {
		tflops: 496.6,
		memory: [192],
		computeCapability: 10.0,
		msrp: 40_000,
		power: 1000,
		releaseYear: 2024,
	},
	H200: {
		tflops: 241.3,
		memory: [141],
		computeCapability: 9.0,
		msrp: 32_000,
		power: 700,
		releaseYear: 2024,
	},
	H100: {
		tflops: 267.6,
		memory: [80],
		computeCapability: 9.0,
		msrp: 30_000,
		power: 700,
		releaseYear: 2022,
	},
	H800: {
		tflops: 237.2,
		memory: [80],
		computeCapability: 9.0,
		msrp: 30_000,
		power: 700,
		releaseYear: 2023,
	},
	H20: {
		tflops: 148,
		memory: [96],
		computeCapability: 9.0,
		msrp: 13_500,
		power: 400,
		releaseYear: 2024,
	},
	L40s: {
		tflops: 91.61,
		memory: [48],
		computeCapability: 8.9,
		msrp: 8_500,
		power: 350,
		releaseYear: 2023,
	},
	L40: {
		tflops: 90.52,
		memory: [48],
		computeCapability: 8.9,
		msrp: 7_500,
		power: 300,
		releaseYear: 2022,
	},
	L20: {
		tflops: 59.35,
		memory: [48],
		computeCapability: 8.9,
		msrp: 5_000,
		power: 275,
		releaseYear: 2023,
	},
	L4: {
		tflops: 30.29,
		memory: [24],
		computeCapability: 8.9,
		msrp: 2_500,
		power: 72,
		releaseYear: 2023,
	},
	GB10: {
		tflops: 29.71,
		memory: [128],
		computeCapability: 12.1,
		msrp: 3_999,
		power: 140,
		releaseYear: 2025,
	},
	"RTX PRO 6000 WS": {
		tflops: 126,
		memory: [96],
		computeCapability: 12.0,
		msrp: 8_600,
		power: 600,
		releaseYear: 2025,
	},
	"RTX PRO 6000 Max-Q": {
		tflops: 116,
		memory: [96],
		computeCapability: 12.0,
		msrp: 8_600,
		power: 300,
		releaseYear: 2025,
	},
	"RTX PRO 5000": {
		tflops: 66.94,
		memory: [48, 72],
		computeCapability: 12.0,
		msrp: 4_500,
		power: 300,
		releaseYear: 2025,
	},
	"RTX PRO 4500 WS": {
		tflops: 50.53,
		memory: [32],
		computeCapability: 12.0,
		msrp: 2_800,
		power: 200,
		releaseYear: 2025,
	},
	"RTX PRO 4000": {
		tflops: 36.83,
		memory: [24],
		computeCapability: 12.0,
		msrp: 1_500,
		power: 140,
		releaseYear: 2025,
	},
	"RTX PRO 4000 SFF": {
		tflops: 24.05,
		memory: [24],
		computeCapability: 12.0,
		msrp: 1_500,
		power: 70,
		releaseYear: 2025,
	},
	"RTX PRO 2000": {
		tflops: 17.03,
		memory: [16],
		computeCapability: 12.0,
		msrp: 700,
		power: 70,
		releaseYear: 2025,
	},
	"RTX 6000 Ada": {
		tflops: 91.1,
		memory: [48],
		computeCapability: 8.9,
		msrp: 6_800,
		power: 300,
		releaseYear: 2022,
	},
	"RTX 5880 Ada": {
		tflops: 69.3,
		memory: [48],
		computeCapability: 8.9,
		msrp: 6_000,
		power: 285,
		releaseYear: 2024,
	},
	"RTX 5000 Ada": {
		tflops: 65.3,
		memory: [32],
		computeCapability: 8.9,
		msrp: 4_000,
		power: 250,
		releaseYear: 2023,
	},
	"RTX 4500 Ada": {
		tflops: 39.6,
		memory: [24],
		computeCapability: 8.9,
		msrp: 2_250,
		power: 210,
		releaseYear: 2023,
	},
	"RTX 4000 Ada": {
		tflops: 26.7,
		memory: [20],
		computeCapability: 8.9,
		msrp: 1_250,
		power: 130,
		releaseYear: 2023,
	},
	"RTX 4000 SFF Ada": {
		tflops: 19.2,
		memory: [20],
		computeCapability: 8.9,
		msrp: 1_250,
		power: 70,
		releaseYear: 2023,
	},
	"RTX 3500 Ada Mobile": {
		tflops: 15.8,
		memory: [12],
		computeCapability: 8.9,
		msrp: 1_500,
		power: 150,
		releaseYear: 2023,
	},
	"RTX 2000 Ada": {
		tflops: 12.0,
		memory: [16],
		computeCapability: 8.9,
		msrp: 650,
		power: 70,
		releaseYear: 2024,
	},
	"RTX A6000": {
		tflops: 38.7,
		memory: [48],
		computeCapability: 8.6,
		msrp: 4_650,
		power: 300,
		releaseYear: 2020,
	},
	"RTX A5000": {
		tflops: 27.77,
		memory: [8, 12, 24],
		computeCapability: 8.6,
		msrp: 2_250,
		power: 230,
		releaseYear: 2021,
	},
	"RTX A5000 Max-Q": {
		tflops: 16.59,
		memory: [16],
		computeCapability: 8.6,
		msrp: 2_000,
		power: 80,
		releaseYear: 2021,
	},
	"RTX A5000 Mobile": {
		tflops: 19.35,
		memory: [16],
		computeCapability: 8.6,
		msrp: 2_000,
		power: 165,
		releaseYear: 2021,
	},
	"RTX A4000": {
		tflops: 19.17,
		memory: [16],
		computeCapability: 8.6,
		msrp: 1_000,
		power: 140,
		releaseYear: 2021,
	},
	"RTX A4000 Max-Q": {
		tflops: 14.28,
		memory: [8],
		computeCapability: 8.6,
		msrp: 1_000,
		power: 35,
		releaseYear: 2021,
	},
	"RTX A4000 Mobile": {
		tflops: 17.2,
		memory: [8],
		computeCapability: 8.6,
		msrp: 1_000,
		power: 80,
		releaseYear: 2021,
	},
	"RTX A3000 Mobile": {
		tflops: 10.9,
		memory: [6, 12],
		computeCapability: 8.6,
		msrp: 700,
		power: 80,
		releaseYear: 2021,
	},
	"RTX A2000": {
		tflops: 7.987,
		memory: [6, 12],
		computeCapability: 8.6,
		msrp: 450,
		power: 70,
		releaseYear: 2021,
	},
	"RTX A2000 Embedded": {
		tflops: 6.026,
		memory: [4],
		computeCapability: 8.6,
		msrp: 400,
		power: 70,
		releaseYear: 2022,
	},
	"RTX A2000 Max-Q": {
		tflops: 6.1,
		memory: [4, 8],
		computeCapability: 8.6,
		msrp: 450,
		power: 35,
		releaseYear: 2021,
	},
	"RTX A2000 Mobile": {
		tflops: 8.4,
		memory: [4, 8],
		computeCapability: 8.6,
		msrp: 450,
		power: 95,
		releaseYear: 2021,
	},
	A800: {
		tflops: 77.97,
		memory: [40, 80],
		computeCapability: 8.0,
		msrp: 12_000,
		power: 400,
		releaseYear: 2022,
	},
	A100: {
		tflops: 77.97,
		memory: [80, 40],
		computeCapability: 8.0,
		msrp: 15_000,
		power: 400,
		releaseYear: 2020,
	},
	A40: {
		tflops: 37.42,
		memory: [48],
		computeCapability: 8.6,
		msrp: 5_500,
		power: 300,
		releaseYear: 2020,
	},
	A30: {
		tflops: 10.32,
		memory: [24],
		computeCapability: 8.0,
		msrp: 5_000,
		power: 165,
		releaseYear: 2021,
	},
	A10: {
		tflops: 31.24,
		memory: [24],
		computeCapability: 8.6,
		msrp: 3_200,
		power: 150,
		releaseYear: 2021,
	},
	A2: {
		tflops: 4.531,
		memory: [16],
		computeCapability: 8.6,
		msrp: 1_000,
		power: 60,
		releaseYear: 2021,
	},
	"RTX 5090": {
		tflops: 104.8,
		memory: [32],
		computeCapability: 12.0,
		msrp: 2_000,
		power: 575,
		releaseYear: 2025,
	},
	"RTX 5090 D": {
		tflops: 104.8,
		memory: [32],
		computeCapability: 12.0,
		msrp: 2_000,
		power: 575,
		releaseYear: 2025,
	},
	"RTX 5090 Mobile": {
		tflops: 31.8,
		memory: [24],
		computeCapability: 12.0,
		msrp: 1_500,
		power: 175,
		releaseYear: 2025,
	},
	"RTX 5080": {
		tflops: 56.28,
		memory: [16],
		computeCapability: 12.0,
		msrp: 1_000,
		power: 360,
		releaseYear: 2025,
	},
	"RTX 5080 Mobile": {
		tflops: 23.04,
		memory: [16],
		computeCapability: 12.0,
		msrp: 1_000,
		power: 175,
		releaseYear: 2025,
	},
	"RTX 5070": {
		tflops: 30.84,
		memory: [12],
		computeCapability: 12.0,
		msrp: 550,
		power: 250,
		releaseYear: 2025,
	},
	"RTX 5070 Mobile": {
		tflops: 13.13,
		memory: [8],
		computeCapability: 12.0,
		msrp: 500,
		power: 100,
		releaseYear: 2025,
	},
	"RTX 5070 Ti": {
		tflops: 43.94,
		memory: [16],
		computeCapability: 12.0,
		msrp: 750,
		power: 300,
		releaseYear: 2025,
	},
	"RTX 5070 Ti Mobile": {
		tflops: 17.04,
		memory: [12],
		computeCapability: 12.0,
		msrp: 700,
		power: 140,
		releaseYear: 2025,
	},
	"RTX 5060 Ti": {
		tflops: 23.7,
		memory: [16, 8],
		computeCapability: 12.0,
		msrp: 450,
		power: 180,
		releaseYear: 2025,
	},
	"RTX 5060": {
		tflops: 19.18,
		memory: [8],
		computeCapability: 12.0,
		msrp: 300,
		power: 150,
		releaseYear: 2025,
	},
	"RTX 5060 Mobile": {
		tflops: 9.684,
		memory: [8],
		computeCapability: 12.0,
		msrp: 300,
		power: 100,
		releaseYear: 2025,
	},
	"RTX 5050": {
		tflops: 13.17,
		memory: [8],
		computeCapability: 12.0,
		msrp: 249,
		power: 130,
		releaseYear: 2025,
	},
	"RTX 5050 Mobile": {
		tflops: 7.7,
		memory: [8],
		computeCapability: 12.0,
		msrp: 250,
		power: 100,
		releaseYear: 2025,
	},
	"RTX 4090": {
		tflops: 82.58,
		memory: [24],
		computeCapability: 8.9,
		msrp: 1_600,
		power: 450,
		releaseYear: 2022,
	},
	"RTX 4090D": {
		tflops: 79.49,
		memory: [24, 48],
		computeCapability: 8.9,
		msrp: 1_600,
		power: 425,
		releaseYear: 2023,
	},
	"RTX 4090 Mobile": {
		tflops: 32.98,
		memory: [16],
		computeCapability: 8.9,
		msrp: 1_500,
		power: 150,
		releaseYear: 2023,
	},
	"RTX 4080 SUPER": {
		tflops: 52.2,
		memory: [16],
		computeCapability: 8.9,
		msrp: 1_000,
		power: 320,
		releaseYear: 2024,
	},
	"RTX 4080": {
		tflops: 48.7,
		memory: [16],
		computeCapability: 8.9,
		msrp: 1_200,
		power: 320,
		releaseYear: 2022,
	},
	"RTX 4080 Mobile": {
		tflops: 24.72,
		memory: [12],
		computeCapability: 8.9,
		msrp: 1_000,
		power: 150,
		releaseYear: 2023,
	},
	"RTX 4070": {
		tflops: 29.15,
		memory: [12],
		computeCapability: 8.9,
		msrp: 600,
		power: 200,
		releaseYear: 2023,
	},
	"RTX 4070 Mobile": {
		tflops: 15.62,
		memory: [8],
		computeCapability: 8.9,
		msrp: 500,
		power: 115,
		releaseYear: 2023,
	},
	"RTX 4070 Ti": {
		tflops: 40.09,
		memory: [12],
		computeCapability: 8.9,
		msrp: 800,
		power: 285,
		releaseYear: 2023,
	},
	"RTX 4070 Super": {
		tflops: 35.48,
		memory: [12],
		computeCapability: 8.9,
		msrp: 600,
		power: 220,
		releaseYear: 2024,
	},
	"RTX 4070 Ti Super": {
		tflops: 44.1,
		memory: [16],
		computeCapability: 8.9,
		msrp: 800,
		power: 285,
		releaseYear: 2024,
	},
	"RTX 4060": {
		tflops: 15.11,
		memory: [8],
		computeCapability: 8.9,
		msrp: 300,
		power: 115,
		releaseYear: 2023,
	},
	"RTX 4060 Ti": {
		tflops: 22.06,
		memory: [8, 16],
		computeCapability: 8.9,
		msrp: 500,
		power: 165,
		releaseYear: 2023,
	},
	"RTX 4090 Laptop": {
		tflops: 32.98,
		memory: [16],
		computeCapability: 8.9,
		msrp: 1_500,
		power: 150,
		releaseYear: 2023,
	},
	"RTX 4080 Laptop": {
		tflops: 24.72,
		memory: [12],
		computeCapability: 8.9,
		msrp: 1_000,
		power: 150,
		releaseYear: 2023,
	},
	"RTX 4070 Laptop": {
		tflops: 15.62,
		memory: [8],
		computeCapability: 8.9,
		msrp: 500,
		power: 115,
		releaseYear: 2023,
	},
	"RTX 4060 Laptop": {
		tflops: 11.61,
		memory: [8],
		computeCapability: 8.9,
		msrp: 300,
		power: 115,
		releaseYear: 2023,
	},
	"RTX 4050 Laptop": {
		tflops: 8.9,
		memory: [6],
		computeCapability: 8.9,
		msrp: 250,
		power: 115,
		releaseYear: 2023,
	},
	"RTX 3090": {
		tflops: 35.58,
		memory: [24],
		computeCapability: 8.6,
		msrp: 1_500,
		power: 350,
		releaseYear: 2020,
	},
	"RTX 3090 Ti": {
		tflops: 40,
		memory: [24],
		computeCapability: 8.6,
		msrp: 2_000,
		power: 450,
		releaseYear: 2022,
	},
	"RTX 3080": {
		tflops: 30.6,
		memory: [12, 10],
		computeCapability: 8.6,
		msrp: 800,
		power: 350,
		releaseYear: 2020,
	},
	"RTX 3080 Ti": {
		tflops: 34.1,
		memory: [12],
		computeCapability: 8.6,
		msrp: 1_200,
		power: 350,
		releaseYear: 2021,
	},
	"RTX 3080 Mobile": {
		tflops: 18.98,
		memory: [16, 8],
		computeCapability: 8.6,
		msrp: 800,
		power: 150,
		releaseYear: 2021,
	},
	"RTX 3070": {
		tflops: 20.31,
		memory: [8],
		computeCapability: 8.6,
		msrp: 500,
		power: 220,
		releaseYear: 2020,
	},
	"RTX 3070 Ti": {
		tflops: 21.75,
		memory: [8],
		computeCapability: 8.6,
		msrp: 600,
		power: 290,
		releaseYear: 2021,
	},
	"RTX 3070 Ti Mobile": {
		tflops: 16.6,
		memory: [8],
		computeCapability: 8.6,
		msrp: 700,
		power: 125,
		releaseYear: 2022,
	},
	"RTX 3060 Ti": {
		tflops: 16.2,
		memory: [8],
		computeCapability: 8.6,
		msrp: 400,
		power: 200,
		releaseYear: 2020,
	},
	"RTX 3060": {
		tflops: 12.74,
		memory: [12, 8],
		computeCapability: 8.6,
		msrp: 350,
		power: 170,
		releaseYear: 2021,
	},
	"RTX 2080 Ti": {
		tflops: 26.9,
		memory: [11, 22], // 22GB: modded 2080ti
		computeCapability: 7.5,
		msrp: 1_000,
		power: 250,
		releaseYear: 2018,
	},
	"RTX 2080": {
		tflops: 20.14,
		memory: [8],
		computeCapability: 7.5,
		msrp: 700,
		power: 215,
		releaseYear: 2018,
	},
	"RTX 2070": {
		tflops: 14.93,
		memory: [8],
		computeCapability: 7.5,
		msrp: 500,
		power: 175,
		releaseYear: 2018,
	},
	"RTX 2070 SUPER Mobile": {
		tflops: 14.13,
		memory: [8],
		computeCapability: 7.5,
		msrp: 600,
		power: 115,
		releaseYear: 2020,
	},
	"RTX 2070 SUPER": {
		tflops: 18.12,
		memory: [8],
		computeCapability: 7.5,
		msrp: 500,
		power: 215,
		releaseYear: 2019,
	},
	"RTX 3060 Mobile": {
		tflops: 10.94,
		memory: [6],
		computeCapability: 8.6,
		msrp: 400,
		power: 115,
		releaseYear: 2021,
	},
	"RTX 3050 Mobile": {
		tflops: 7.639,
		memory: [4, 6],
		computeCapability: 8.6,
		msrp: 250,
		power: 95,
		releaseYear: 2022,
	},
	"RTX 2060": {
		tflops: 12.9,
		memory: [6],
		computeCapability: 7.5,
		msrp: 350,
		power: 160,
		releaseYear: 2019,
	},
	"RTX 2060 12GB": {
		tflops: 14.36,
		memory: [12],
		computeCapability: 7.5,
		msrp: 300,
		power: 184,
		releaseYear: 2021,
	},
	"RTX 2060 Mobile": {
		tflops: 9.22,
		memory: [6],
		computeCapability: 7.5,
		msrp: 350,
		power: 90,
		releaseYear: 2019,
	},
	"RTX 2050 Mobile": {
		tflops: 10.2,
		memory: [4],
		computeCapability: 8.6, // Ampere (outlier GPU in the 20xx series)
		msrp: 250,
		power: 45,
		releaseYear: 2021,
	},
	"GTX 1080 Ti": {
		tflops: 11.34, // float32 (GPU does not support native float16)
		memory: [11],
		computeCapability: 6.1,
		msrp: 700,
		power: 250,
		releaseYear: 2017,
	},
	"GTX 1080": {
		tflops: 8.87, // float32 (GPU does not support native float16)
		memory: [8],
		computeCapability: 6.1,
		msrp: 599,
		power: 180,
		releaseYear: 2016,
	},
	"GTX 1070 Ti": {
		tflops: 8.2, // float32 (GPU does not support native float16)
		memory: [8],
		computeCapability: 6.1,
		msrp: 450,
		power: 180,
		releaseYear: 2017,
	},
	"GTX 1070": {
		tflops: 6.46, // float32 (GPU does not support native float16)
		memory: [8],
		computeCapability: 6.1,
		msrp: 379,
		power: 150,
		releaseYear: 2016,
	},
	"GTX 1060": {
		tflops: 3.9, // float32 (GPU does not support native float16)
		memory: [3, 6],
		computeCapability: 6.1,
		msrp: 300,
		power: 120,
		releaseYear: 2016,
	},
	"GTX 1050 Ti": {
		tflops: 2.1, // float32 (GPU does not support native float16)
		memory: [4],
		computeCapability: 6.1,
		msrp: 150,
		power: 75,
		releaseYear: 2016,
	},
	"RTX Titan": {
		tflops: 32.62,
		memory: [24],
		computeCapability: 7.5,
		msrp: 2_500,
		power: 280,
		releaseYear: 2018,
	},
	"GTX 1660": {
		tflops: 10.05,
		memory: [6],
		computeCapability: 7.5,
		msrp: 200,
		power: 120,
		releaseYear: 2019,
	},
	"GTX 1650 Mobile": {
		tflops: 6.39,
		memory: [4],
		computeCapability: 7.5,
		msrp: 150,
		power: 50,
		releaseYear: 2019,
	},
	T4: {
		tflops: 65.13,
		memory: [16],
		computeCapability: 7.5,
		msrp: 2_000,
		power: 70,
		releaseYear: 2018,
	},
	T10: {
		tflops: 20.0,
		memory: [16],
		computeCapability: 7.5,
		msrp: 2_000,
		power: 150,
		releaseYear: 2020,
	},
	V100: {
		tflops: 28.26,
		memory: [32, 16],
		computeCapability: 7.0,
		msrp: 10_000,
		power: 300,
		releaseYear: 2017,
	},
	"Quadro P6000": {
		tflops: 12.63, // float32 (GPU does not support native float16)
		memory: [24],
		computeCapability: 6.1,
		msrp: 5_000,
		power: 250,
		releaseYear: 2016,
	},
	P40: {
		tflops: 11.76, // float32 (GPU does not support native float16)
		memory: [24],
		computeCapability: 6.1,
		msrp: 5_700,
		power: 250,
		releaseYear: 2016,
	},
	P100: {
		tflops: 19.05,
		memory: [16],
		computeCapability: 6.0,
		msrp: 7_000,
		power: 300,
		releaseYear: 2016,
	},
	"Jetson AGX Orin 64GB": {
		tflops: 10.65,
		memory: [64],
		computeCapability: 8.7,
		msrp: 2_000,
		power: 60,
		releaseYear: 2022,
	},
	"Jetson AGX Orin 32GB": {
		tflops: 6.66,
		memory: [32],
		computeCapability: 8.7,
		msrp: 999,
		power: 40,
		releaseYear: 2022,
	},
	"Jetson Orin NX 16GB": {
		tflops: 3.76,
		memory: [16],
		computeCapability: 8.7,
		msrp: 600,
		power: 25,
		releaseYear: 2023,
	},
	"Jetson Orin NX 8GB": {
		tflops: 3.13,
		memory: [8],
		computeCapability: 8.7,
		msrp: 400,
		power: 20,
		releaseYear: 2023,
	},
	"Jetson Orin Nano 8GB": {
		tflops: 2.56,
		memory: [8],
		computeCapability: 8.7,
		msrp: 500,
		power: 15,
		releaseYear: 2023,
	},
	"Jetson Orin Nano 4GB": {
		tflops: 1.28,
		memory: [4],
		computeCapability: 8.7,
		msrp: 200,
		power: 10,
		releaseYear: 2023,
	},
	"Jetson AGX Xavier": {
		tflops: 2.82,
		memory: [32, 64],
		computeCapability: 7.2,
		msrp: 1_100,
		power: 30,
		releaseYear: 2018,
	},
	"Jetson Xavier NX": {
		tflops: 1.69,
		memory: [8, 16],
		computeCapability: 7.2,
		msrp: 400,
		power: 20,
		releaseYear: 2020,
	},
	"Jetson TX2": {
		tflops: 1.33,
		memory: [4, 8],
		computeCapability: 6.2,
		msrp: 400,
		power: 15,
		releaseYear: 2017,
	},
	"Jetson Nano": {
		tflops: 0.47,
		memory: [4],
		computeCapability: 5.3,
		msrp: 100,
		power: 10,
		releaseYear: 2019,
	},
};
