diff --git a/apps/api/src/provider/http-schemas/provider-attributes-schema.schema.ts b/apps/api/src/provider/http-schemas/provider-attributes-schema.schema.ts index 40d7bf6ac8..89bd3d72d6 100644 --- a/apps/api/src/provider/http-schemas/provider-attributes-schema.schema.ts +++ b/apps/api/src/provider/http-schemas/provider-attributes-schema.schema.ts @@ -20,6 +20,7 @@ const attributeSchemaType = z.object({ export const ProviderAttributesSchemaResponseSchema = z.object({ host: attributeSchemaType, email: attributeSchemaType, + "discord-username": attributeSchemaType, organization: attributeSchemaType, website: attributeSchemaType, tier: attributeSchemaType, @@ -34,15 +35,18 @@ export const ProviderAttributesSchemaResponseSchema = z.object({ "hardware-cpu-arch": attributeSchemaType, "hardware-gpu": attributeSchemaType, "hardware-gpu-model": attributeSchemaType, - "hardware-disk": attributeSchemaType, + "hardware-gpu-capability": attributeSchemaType, + "hardware-persistent-storage-class": attributeSchemaType, + "hardware-persistent-storage-capability": attributeSchemaType, + "hardware-cuda": attributeSchemaType, + datacenter: attributeSchemaType, "hardware-memory": attributeSchemaType, "network-provider": attributeSchemaType, "network-speed-up": attributeSchemaType, "network-speed-down": attributeSchemaType, "feat-persistent-storage": attributeSchemaType, - "feat-persistent-storage-type": attributeSchemaType, - "workload-support-chia": attributeSchemaType, - "workload-support-chia-capabilities": attributeSchemaType, + "feat-shm": attributeSchemaType, + "hardware-shm": attributeSchemaType, "feat-endpoint-ip": attributeSchemaType, "feat-endpoint-custom-domain": attributeSchemaType }); diff --git a/apps/api/src/provider/http-schemas/provider.schema.ts b/apps/api/src/provider/http-schemas/provider.schema.ts index 0bc5d1dca8..113f9a08bc 100644 --- a/apps/api/src/provider/http-schemas/provider.schema.ts +++ b/apps/api/src/provider/http-schemas/provider.schema.ts @@ -61,6 +61,7 @@ export const ProviderListResponseSchema = z.array( }) ), host: z.string().nullable(), + discordUsername: z.string().nullable(), organization: z.string().nullable(), statusPage: z.string().nullable(), locationRegion: z.string().nullable(), @@ -73,17 +74,19 @@ export const ProviderListResponseSchema = z.array( hardwareCpuArch: z.string().nullable(), hardwareGpuVendor: z.string().nullable(), hardwareGpuModels: z.array(z.string()).nullable(), - hardwareDisk: z.array(z.string()).nullable(), + hardwareGpuCapabilities: z.array(z.string()).nullable(), + hardwarePersistentStorageClass: z.string().nullable(), featPersistentStorage: z.boolean(), - featPersistentStorageType: z.array(z.string()).nullable(), + featShm: z.boolean(), + hardwareShm: z.array(z.string()).nullable(), + hardwareCuda: z.string().nullable(), + datacenter: z.string().nullable(), hardwareMemory: z.string().nullable(), networkProvider: z.string().nullable(), networkSpeedDown: z.number(), networkSpeedUp: z.number(), tier: z.string().nullable(), featEndpointCustomDomain: z.boolean(), - workloadSupportChia: z.boolean(), - workloadSupportChiaCapabilities: z.array(z.string()).nullable(), featEndpointIp: z.boolean() }) ); @@ -151,6 +154,7 @@ export const ProviderResponseSchema = z.object({ }) ), host: z.string().nullable(), + discordUsername: z.string().nullable(), organization: z.string().nullable(), statusPage: z.string().nullable(), locationRegion: z.string().nullable(), @@ -163,17 +167,19 @@ export const ProviderResponseSchema = z.object({ hardwareCpuArch: z.string().nullable(), hardwareGpuVendor: z.string().nullable(), hardwareGpuModels: z.array(z.string()), - hardwareDisk: z.array(z.string()), + hardwareGpuCapabilities: z.array(z.string()), + hardwarePersistentStorageClass: z.string().nullable(), featPersistentStorage: z.boolean(), - featPersistentStorageType: z.array(z.string()), + featShm: z.boolean(), + hardwareShm: z.array(z.string()), + hardwareCuda: z.string().nullable(), + datacenter: z.string().nullable(), hardwareMemory: z.string().nullable(), networkProvider: z.string().nullable(), networkSpeedDown: z.number(), networkSpeedUp: z.number(), tier: z.string().nullable(), featEndpointCustomDomain: z.boolean(), - workloadSupportChia: z.boolean(), - workloadSupportChiaCapabilities: z.array(z.string()), featEndpointIp: z.boolean(), uptime: z.array( z.object({ diff --git a/apps/api/src/provider/services/provider-regions/provider-regions.service.integration.ts b/apps/api/src/provider/services/provider-regions/provider-regions.service.integration.ts index 27b80dc0a1..cb805244b5 100644 --- a/apps/api/src/provider/services/provider-regions/provider-regions.service.integration.ts +++ b/apps/api/src/provider/services/provider-regions/provider-regions.service.integration.ts @@ -1,12 +1,10 @@ +import "@test/setup-provider-attributes-schema"; + import type { Provider } from "@akashnetwork/database/dbSchemas/akash"; import { ProviderAttribute } from "@akashnetwork/database/dbSchemas/akash"; -import type { GitHubHttpService } from "@akashnetwork/http-sdk"; -import fs from "fs/promises"; -import path from "path"; import { container } from "tsyringe"; import { CHAIN_DB } from "@src/chain"; -import { ProviderAttributesSchemaService } from "../provider-attributes-schema/provider-attributes-schema.service"; import { ProviderRegionsService } from "./provider-regions.service"; import { createProvider } from "@test/seeders"; @@ -38,7 +36,7 @@ describe("ProviderRegions", () => { describe("GET /v1/provider-regions", () => { it("returns providers grouped by regions", async () => { - const service = setup(); + const service = container.resolve(ProviderRegionsService); const data = Object.groupBy(await service.getProviderRegions(), item => item.key); expect(data["na-ca-west"]?.[0]?.providers?.sort()).toEqual([providers[0].owner].sort()); @@ -46,14 +44,4 @@ describe("ProviderRegions", () => { expect(data["na-ca-prairie"]?.[0]?.providers?.sort()).toEqual([]); }); }); - - function setup() { - return new ProviderRegionsService( - new ProviderAttributesSchemaService({ - async getProviderAttributesSchema() { - return JSON.parse(await fs.readFile(path.join(__dirname, "../../../../../../config/provider-attributes.json"), "utf8")); - } - } as unknown as GitHubHttpService) - ); - } }); diff --git a/apps/api/src/provider/services/provider/provider.service.spec.ts b/apps/api/src/provider/services/provider/provider.service.spec.ts index 5c73ef6fc1..738e779028 100644 --- a/apps/api/src/provider/services/provider/provider.service.spec.ts +++ b/apps/api/src/provider/services/provider/provider.service.spec.ts @@ -1,6 +1,5 @@ import type { JwtTokenPayload } from "@akashnetwork/chain-sdk"; import type { Provider } from "@akashnetwork/database/dbSchemas/akash"; -import type { ProviderAttributesSchema } from "@akashnetwork/http-sdk"; import { faker } from "@faker-js/faker"; import { AxiosError } from "axios"; import { Ok } from "ts-results"; @@ -11,6 +10,7 @@ import { cacheEngine } from "@src/caching/helpers"; import { AUDITOR } from "@src/deployment/config/provider.config"; import { createLeaseStatus } from "../../../../test/seeders/lease-status.seeder"; import { createProviderSeed, createProviderWithAttributeSignatures } from "../../../../test/seeders/provider.seeder"; +import { createProviderAttributesSchema } from "../../../../test/seeders/provider-attributes-schema.seeder"; import { createUserWallet } from "../../../../test/seeders/user-wallet.seeder"; import type { ProviderRepository } from "../../repositories/provider/provider.repository"; import type { AuditorService } from "../auditors/auditors.service"; @@ -19,36 +19,7 @@ import type { ProviderJwtTokenService } from "../provider-jwt-token/provider-jwt import { ProviderService } from "./provider.service"; import type { ProviderProxyService } from "./provider-proxy.service"; -const schemaDetail = { key: "test", type: "string" as const, required: false, description: "test", values: null }; -const providerAttributeSchemaStub: ProviderAttributesSchema = { - host: schemaDetail, - email: schemaDetail, - organization: schemaDetail, - website: schemaDetail, - tier: schemaDetail, - "status-page": schemaDetail, - "location-region": schemaDetail, - country: schemaDetail, - city: schemaDetail, - timezone: schemaDetail, - "location-type": schemaDetail, - "hosting-provider": schemaDetail, - "hardware-cpu": schemaDetail, - "hardware-cpu-arch": schemaDetail, - "hardware-gpu": schemaDetail, - "hardware-gpu-model": schemaDetail, - "hardware-disk": schemaDetail, - "hardware-memory": schemaDetail, - "network-provider": schemaDetail, - "network-speed-up": schemaDetail, - "network-speed-down": schemaDetail, - "feat-persistent-storage": schemaDetail, - "feat-persistent-storage-type": schemaDetail, - "workload-support-chia": schemaDetail, - "workload-support-chia-capabilities": schemaDetail, - "feat-endpoint-ip": schemaDetail, - "feat-endpoint-custom-domain": schemaDetail -}; +const providerAttributeSchemaStub = createProviderAttributesSchema(); describe(ProviderService.name, () => { describe("sendManifest", () => { diff --git a/apps/api/src/provider/services/provider/provider.service.ts b/apps/api/src/provider/services/provider/provider.service.ts index fa5a57f933..724f97f08b 100644 --- a/apps/api/src/provider/services/provider/provider.service.ts +++ b/apps/api/src/provider/services/provider/provider.service.ts @@ -254,8 +254,12 @@ export class ProviderService { this.providerAttributesSchemaService.getProviderAttributesSchema() ]); + const mapped = mapProviderToList(provider, providerAttributeSchema, auditors, lastSuccessfulSnapshot ?? undefined); + return { - ...mapProviderToList(provider, providerAttributeSchema, auditors, lastSuccessfulSnapshot ?? undefined), + ...mapped, + hardwareGpuCapabilities: mapped.hardwareGpuCapabilities ?? [], + hardwareShm: mapped.hardwareShm ?? [], uptime: uptimeSnapshots.map(ps => ({ id: ps.id, isOnline: ps.isOnline, diff --git a/apps/api/src/types/provider.ts b/apps/api/src/types/provider.ts index 2cc20efc4f..698b4dcf8f 100644 --- a/apps/api/src/types/provider.ts +++ b/apps/api/src/types/provider.ts @@ -38,6 +38,7 @@ export interface ProviderList { // Attributes schema host: string | null; + discordUsername: string | null; organization: string | null; statusPage: string | null; locationRegion: string | null; @@ -50,17 +51,19 @@ export interface ProviderList { hardwareCpuArch: string | null; hardwareGpuVendor: string | null; hardwareGpuModels: string[] | null; - hardwareDisk: string[] | null; + hardwareGpuCapabilities: string[] | null; + hardwarePersistentStorageClass: string | null; featPersistentStorage: boolean; - featPersistentStorageType: string[] | null; + featShm: boolean; + hardwareShm: string[] | null; + hardwareCuda: string | null; + datacenter: string | null; hardwareMemory: string | null; networkProvider: string | null; networkSpeedDown: number; networkSpeedUp: number; tier: string | null; featEndpointCustomDomain: boolean; - workloadSupportChia: boolean; - workloadSupportChiaCapabilities: string[] | null; featEndpointIp: boolean; } @@ -75,7 +78,9 @@ export interface ProviderCapacityStats { }; } -export interface ProviderDetail extends ProviderList { +export interface ProviderDetail extends Omit { + hardwareGpuCapabilities: string[]; + hardwareShm: string[]; uptime: { id: string; isOnline: boolean; diff --git a/apps/api/src/utils/map/provider.spec.ts b/apps/api/src/utils/map/provider.spec.ts new file mode 100644 index 0000000000..4b35f3176b --- /dev/null +++ b/apps/api/src/utils/map/provider.spec.ts @@ -0,0 +1,121 @@ +import type { Provider } from "@akashnetwork/database/dbSchemas/akash"; +import { describe, expect, it } from "vitest"; + +import { createProviderSeed } from "../../../test/seeders/provider.seeder"; +import { createProviderAttributesSchema } from "../../../test/seeders/provider-attributes-schema.seeder"; +import { mapProviderToList } from "./provider"; + +const providerAttributeSchemaStub = createProviderAttributesSchema(); + +function mapWithAttributes(attributes: Array<{ key: string; value: string }>) { + const provider = { + ...createProviderSeed({ isOnline: true, cosmosSdkVersion: "v0.45.9" }), + providerAttributes: attributes, + providerAttributeSignatures: [] + } as Provider; + + return mapProviderToList(provider, providerAttributeSchemaStub, [], undefined); +} + +describe(mapProviderToList.name, () => { + describe("discordUsername", () => { + it("maps discord-username from on-chain attributes", () => { + const mapped = mapWithAttributes([{ key: "discord-username", value: "provider_contact" }]); + + expect(mapped.discordUsername).toBe("provider_contact"); + }); + + it("is null when discord-username is absent", () => { + const mapped = mapWithAttributes([{ key: "host", value: "example.com" }]); + + expect(mapped.discordUsername).toBeNull(); + }); + }); + + describe("locationRegion", () => { + it("maps location-region from on-chain attributes", () => { + const mapped = mapWithAttributes([{ key: "location-region", value: "na-us-west" }]); + + expect(mapped.locationRegion).toBe("na-us-west"); + }); + + it("is null when only legacy region is present", () => { + const mapped = mapWithAttributes([{ key: "region", value: "us-west" }]); + + expect(mapped.locationRegion).toBeNull(); + }); + }); + + describe("featShm", () => { + it("is true when feat-shm is true", () => { + const mapped = mapWithAttributes([{ key: "feat-shm", value: "true" }]); + + expect(mapped.featShm).toBe(true); + }); + + it("is true when any storage class is ram", () => { + const mapped = mapWithAttributes([ + { key: "capabilities/storage/2/class", value: "ram" }, + { key: "capabilities/storage/2/persistent", value: "false" } + ]); + + expect(mapped.featShm).toBe(true); + }); + + it("is false when no shm signals are present", () => { + const mapped = mapWithAttributes([{ key: "capabilities/storage/1/class", value: "beta3" }]); + + expect(mapped.featShm).toBe(false); + }); + }); + + describe("hardwareShm", () => { + it("maps shm capability attributes from the schema", () => { + const mapped = mapWithAttributes([ + { key: "capabilities/storage/2/class", value: "ram" }, + { key: "capabilities/storage/2/persistent", value: "false" } + ]); + + expect(mapped.hardwareShm).toEqual(["SHM storage class", "SHM non-persistent"]); + }); + }); + + describe("hardwareGpuCapabilities", () => { + it("maps gpu capability attributes from the schema", () => { + const mapped = mapWithAttributes([{ key: "capabilities/gpu/vendor/nvidia/model/rtx4090", value: "true" }]); + + expect(mapped.hardwareGpuCapabilities).toEqual(["nvidia rtx4090 24Gi pcie"]); + }); + }); + + describe("featPersistentStorage", () => { + it("is true when feat-persistent-storage is true", () => { + const mapped = mapWithAttributes([{ key: "feat-persistent-storage", value: "true" }]); + + expect(mapped.featPersistentStorage).toBe(true); + }); + + it("is true when capabilities/storage/1/persistent is true", () => { + const mapped = mapWithAttributes([{ key: "capabilities/storage/1/persistent", value: "true" }]); + + expect(mapped.featPersistentStorage).toBe(true); + }); + + it("is true when persistent storage is declared on a non-default storage index", () => { + const mapped = mapWithAttributes([ + { key: "capabilities/storage/1/class", value: "beta3" }, + { key: "capabilities/storage/1/persistent", value: "false" }, + { key: "capabilities/storage/2/class", value: "beta2" }, + { key: "capabilities/storage/2/persistent", value: "true" } + ]); + + expect(mapped.featPersistentStorage).toBe(true); + }); + + it("is false when no persistent storage signals are present", () => { + const mapped = mapWithAttributes([{ key: "capabilities/storage/1/persistent", value: "false" }]); + + expect(mapped.featPersistentStorage).toBe(false); + }); + }); +}); diff --git a/apps/api/src/utils/map/provider.ts b/apps/api/src/utils/map/provider.ts index bac5d61e7e..fc17904629 100644 --- a/apps/api/src/utils/map/provider.ts +++ b/apps/api/src/utils/map/provider.ts @@ -80,9 +80,10 @@ export const mapProviderToList = ( })), host: getStringAttribute("host", attrMap, providerAttributeSchema), + discordUsername: getStringAttribute("discord-username", attrMap, providerAttributeSchema), organization: getStringAttribute("organization", attrMap, providerAttributeSchema), statusPage: getStringAttribute("status-page", attrMap, providerAttributeSchema), - locationRegion: getStringAttribute("location-region", attrMap, providerAttributeSchema), + locationRegion: getLocationRegion(attrMap, providerAttributeSchema), country: getStringAttribute("country", attrMap, providerAttributeSchema), city: getStringAttribute("city", attrMap, providerAttributeSchema), timezone: getStringAttribute("timezone", attrMap, providerAttributeSchema), @@ -92,17 +93,19 @@ export const mapProviderToList = ( hardwareCpuArch: getStringAttribute("hardware-cpu-arch", attrMap, providerAttributeSchema), hardwareGpuVendor: getStringAttribute("hardware-gpu", attrMap, providerAttributeSchema), hardwareGpuModels: getStringArrayAttribute("hardware-gpu-model", provider, providerAttributeSchema), - hardwareDisk: getStringArrayAttribute("hardware-disk", provider, providerAttributeSchema), - featPersistentStorage: getBooleanAttribute("feat-persistent-storage", attrMap, providerAttributeSchema), - featPersistentStorageType: getStringArrayAttribute("feat-persistent-storage-type", provider, providerAttributeSchema), + hardwareGpuCapabilities: getStringArrayAttribute("hardware-gpu-capability", provider, providerAttributeSchema), + hardwarePersistentStorageClass: getStringAttribute("hardware-persistent-storage-class", attrMap, providerAttributeSchema), + featPersistentStorage: getPersistentStorageSupport(attrMap, providerAttributeSchema), + featShm: getShmSupport(attrMap, providerAttributeSchema), + hardwareShm: getStringArrayAttribute("hardware-shm", provider, providerAttributeSchema), + hardwareCuda: getStringAttribute("hardware-cuda", attrMap, providerAttributeSchema), + datacenter: getStringAttribute("datacenter", attrMap, providerAttributeSchema), hardwareMemory: getStringAttribute("hardware-memory", attrMap, providerAttributeSchema), networkProvider: getStringAttribute("network-provider", attrMap, providerAttributeSchema), networkSpeedDown: getNumberAttribute("network-speed-down", attrMap, providerAttributeSchema), networkSpeedUp: getNumberAttribute("network-speed-up", attrMap, providerAttributeSchema), tier: getStringAttribute("tier", attrMap, providerAttributeSchema), featEndpointCustomDomain: getBooleanAttribute("feat-endpoint-custom-domain", attrMap, providerAttributeSchema), - workloadSupportChia: getBooleanAttribute("workload-support-chia", attrMap, providerAttributeSchema), - workloadSupportChiaCapabilities: getStringArrayAttribute("workload-support-chia-capabilities", provider, providerAttributeSchema), featEndpointIp: getBooleanAttribute("feat-endpoint-ip", attrMap, providerAttributeSchema) }; }; @@ -125,12 +128,56 @@ function getStringAttribute(key: keyof ProviderAttributesSchema, attrMap: Map, schema: ProviderAttributesSchema): string | null { + return getStringAttribute("location-region", attrMap, schema); +} + function getBooleanAttribute(key: keyof ProviderAttributesSchema, attrMap: Map, schema: ProviderAttributesSchema): boolean { const schemaKey = schema[key].key; const value = attrMap.get(schemaKey); return value === "true"; } +function hasShmCapability(attrMap: Map): boolean { + for (const [key, value] of attrMap.entries()) { + if (/^capabilities\/storage\/\d+\/class$/.test(key) && value === "ram") { + return true; + } + } + + return false; +} + +function getShmSupport(attrMap: Map, schema: ProviderAttributesSchema): boolean { + if (getBooleanAttribute("feat-shm", attrMap, schema)) { + return true; + } + + return hasShmCapability(attrMap); +} + +function hasPersistentStorageCapability(attrMap: Map): boolean { + for (const [key, value] of attrMap.entries()) { + if (/^capabilities\/storage\/\d+\/persistent$/.test(key) && value === "true") { + return true; + } + } + + return false; +} + +function getPersistentStorageSupport(attrMap: Map, schema: ProviderAttributesSchema): boolean { + if (getBooleanAttribute("feat-persistent-storage", attrMap, schema)) { + return true; + } + + if (getBooleanAttribute("hardware-persistent-storage-capability", attrMap, schema)) { + return true; + } + + return hasPersistentStorageCapability(attrMap); +} + function getNumberAttribute(key: keyof ProviderAttributesSchema, attrMap: Map, schema: ProviderAttributesSchema): number { const schemaKey = schema[key].key; const value = attrMap.get(schemaKey); diff --git a/apps/api/swagger/openapi.json b/apps/api/swagger/openapi.json index e565a4fc5c..9cc6bc413b 100644 --- a/apps/api/swagger/openapi.json +++ b/apps/api/swagger/openapi.json @@ -76,6 +76,10 @@ "isTrialing": { "type": "boolean" }, + "topUpMinAmountUsd": { + "type": "number", + "description": "Minimum USD amount accepted by the next paid top-up for this wallet." + }, "createdAt": { "type": "string", "nullable": true @@ -103,6 +107,7 @@ "address", "denom", "isTrialing", + "topUpMinAmountUsd", "createdAt" ], "additionalProperties": false @@ -146,6 +151,10 @@ "isTrialing": { "type": "boolean" }, + "topUpMinAmountUsd": { + "type": "number", + "description": "Minimum USD amount accepted by the next paid top-up for this wallet." + }, "createdAt": { "type": "string", "nullable": true @@ -173,6 +182,7 @@ "address", "denom", "isTrialing", + "topUpMinAmountUsd", "createdAt" ], "additionalProperties": false @@ -248,6 +258,10 @@ "isTrialing": { "type": "boolean" }, + "topUpMinAmountUsd": { + "type": "number", + "description": "Minimum USD amount accepted by the next paid top-up for this wallet." + }, "createdAt": { "type": "string", "nullable": true @@ -275,6 +289,7 @@ "address", "denom", "isTrialing", + "topUpMinAmountUsd", "createdAt" ] } @@ -1905,7 +1920,7 @@ "schema": { "type": "string", "format": "date", - "default": "2026-05-20", + "default": "2026-06-09", "description": "End date (YYYY-MM-DD). Defaults to today by UTC 23:59:59", "example": "2024-01-31" }, @@ -2031,7 +2046,7 @@ "schema": { "type": "string", "format": "date", - "default": "2026-05-20", + "default": "2026-06-09", "description": "End date (YYYY-MM-DD). Defaults to today by UTC 23:59:59", "example": "2024-01-31" }, @@ -9966,6 +9981,10 @@ "type": "string", "nullable": true }, + "discordUsername": { + "type": "string", + "nullable": true + }, "organization": { "type": "string", "nullable": true @@ -10017,23 +10036,38 @@ "type": "string" } }, - "hardwareDisk": { + "hardwareGpuCapabilities": { "type": "array", "nullable": true, "items": { "type": "string" } }, + "hardwarePersistentStorageClass": { + "type": "string", + "nullable": true + }, "featPersistentStorage": { "type": "boolean" }, - "featPersistentStorageType": { + "featShm": { + "type": "boolean" + }, + "hardwareShm": { "type": "array", "nullable": true, "items": { "type": "string" } }, + "hardwareCuda": { + "type": "string", + "nullable": true + }, + "datacenter": { + "type": "string", + "nullable": true + }, "hardwareMemory": { "type": "string", "nullable": true @@ -10055,16 +10089,6 @@ "featEndpointCustomDomain": { "type": "boolean" }, - "workloadSupportChia": { - "type": "boolean" - }, - "workloadSupportChiaCapabilities": { - "type": "array", - "nullable": true, - "items": { - "type": "string" - } - }, "featEndpointIp": { "type": "boolean" } @@ -10092,6 +10116,7 @@ "gpuModels", "attributes", "host", + "discordUsername", "organization", "statusPage", "locationRegion", @@ -10104,17 +10129,19 @@ "hardwareCpuArch", "hardwareGpuVendor", "hardwareGpuModels", - "hardwareDisk", + "hardwareGpuCapabilities", + "hardwarePersistentStorageClass", "featPersistentStorage", - "featPersistentStorageType", + "featShm", + "hardwareShm", + "hardwareCuda", + "datacenter", "hardwareMemory", "networkProvider", "networkSpeedDown", "networkSpeedUp", "tier", "featEndpointCustomDomain", - "workloadSupportChia", - "workloadSupportChiaCapabilities", "featEndpointIp" ] } @@ -10405,6 +10432,10 @@ "type": "string", "nullable": true }, + "discordUsername": { + "type": "string", + "nullable": true + }, "organization": { "type": "string", "nullable": true @@ -10455,21 +10486,36 @@ "type": "string" } }, - "hardwareDisk": { + "hardwareGpuCapabilities": { "type": "array", "items": { "type": "string" } }, + "hardwarePersistentStorageClass": { + "type": "string", + "nullable": true + }, "featPersistentStorage": { "type": "boolean" }, - "featPersistentStorageType": { + "featShm": { + "type": "boolean" + }, + "hardwareShm": { "type": "array", "items": { "type": "string" } }, + "hardwareCuda": { + "type": "string", + "nullable": true + }, + "datacenter": { + "type": "string", + "nullable": true + }, "hardwareMemory": { "type": "string", "nullable": true @@ -10491,15 +10537,6 @@ "featEndpointCustomDomain": { "type": "boolean" }, - "workloadSupportChia": { - "type": "boolean" - }, - "workloadSupportChiaCapabilities": { - "type": "array", - "items": { - "type": "string" - } - }, "featEndpointIp": { "type": "boolean" }, @@ -10555,6 +10592,7 @@ "gpuModels", "attributes", "host", + "discordUsername", "organization", "statusPage", "locationRegion", @@ -10567,17 +10605,19 @@ "hardwareCpuArch", "hardwareGpuVendor", "hardwareGpuModels", - "hardwareDisk", + "hardwareGpuCapabilities", + "hardwarePersistentStorageClass", "featPersistentStorage", - "featPersistentStorageType", + "featShm", + "hardwareShm", + "hardwareCuda", + "datacenter", "hardwareMemory", "networkProvider", "networkSpeedDown", "networkSpeedUp", "tier", "featEndpointCustomDomain", - "workloadSupportChia", - "workloadSupportChiaCapabilities", "featEndpointIp", "uptime" ] @@ -10851,6 +10891,58 @@ "description" ] }, + "discord-username": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option" + ] + }, + "required": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "values": { + "type": "array", + "nullable": true, + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": { + "nullable": true + } + }, + "required": [ + "key", + "description" + ] + } + } + }, + "required": [ + "key", + "type", + "required", + "description" + ] + }, "organization": { "type": "object", "properties": { @@ -11579,7 +11671,7 @@ "description" ] }, - "hardware-disk": { + "hardware-gpu-capability": { "type": "object", "properties": { "key": { @@ -11631,7 +11723,7 @@ "description" ] }, - "hardware-memory": { + "hardware-persistent-storage-class": { "type": "object", "properties": { "key": { @@ -11683,7 +11775,7 @@ "description" ] }, - "network-provider": { + "hardware-persistent-storage-capability": { "type": "object", "properties": { "key": { @@ -11735,7 +11827,7 @@ "description" ] }, - "network-speed-up": { + "hardware-cuda": { "type": "object", "properties": { "key": { @@ -11787,7 +11879,7 @@ "description" ] }, - "network-speed-down": { + "datacenter": { "type": "object", "properties": { "key": { @@ -11839,7 +11931,7 @@ "description" ] }, - "feat-persistent-storage": { + "hardware-memory": { "type": "object", "properties": { "key": { @@ -11891,7 +11983,163 @@ "description" ] }, - "feat-persistent-storage-type": { + "network-provider": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option" + ] + }, + "required": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "values": { + "type": "array", + "nullable": true, + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": { + "nullable": true + } + }, + "required": [ + "key", + "description" + ] + } + } + }, + "required": [ + "key", + "type", + "required", + "description" + ] + }, + "network-speed-up": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option" + ] + }, + "required": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "values": { + "type": "array", + "nullable": true, + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": { + "nullable": true + } + }, + "required": [ + "key", + "description" + ] + } + } + }, + "required": [ + "key", + "type", + "required", + "description" + ] + }, + "network-speed-down": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option" + ] + }, + "required": { + "type": "boolean" + }, + "description": { + "type": "string" + }, + "values": { + "type": "array", + "nullable": true, + "items": { + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "description": { + "type": "string" + }, + "value": { + "nullable": true + } + }, + "required": [ + "key", + "description" + ] + } + } + }, + "required": [ + "key", + "type", + "required", + "description" + ] + }, + "feat-persistent-storage": { "type": "object", "properties": { "key": { @@ -11943,7 +12191,7 @@ "description" ] }, - "workload-support-chia": { + "feat-shm": { "type": "object", "properties": { "key": { @@ -11995,7 +12243,7 @@ "description" ] }, - "workload-support-chia-capabilities": { + "hardware-shm": { "type": "object", "properties": { "key": { @@ -12155,6 +12403,7 @@ "required": [ "host", "email", + "discord-username", "organization", "website", "tier", @@ -12169,15 +12418,18 @@ "hardware-cpu-arch", "hardware-gpu", "hardware-gpu-model", - "hardware-disk", + "hardware-gpu-capability", + "hardware-persistent-storage-class", + "hardware-persistent-storage-capability", + "hardware-cuda", + "datacenter", "hardware-memory", "network-provider", "network-speed-up", "network-speed-down", "feat-persistent-storage", - "feat-persistent-storage-type", - "workload-support-chia", - "workload-support-chia-capabilities", + "feat-shm", + "hardware-shm", "feat-endpoint-ip", "feat-endpoint-custom-domain" ] @@ -22331,4 +22583,4 @@ } } } -} +} \ No newline at end of file diff --git a/apps/api/test/functional/__snapshots__/docs.spec.ts.snap b/apps/api/test/functional/__snapshots__/docs.spec.ts.snap index 377098ab01..2167c4c8d5 100644 --- a/apps/api/test/functional/__snapshots__/docs.spec.ts.snap +++ b/apps/api/test/functional/__snapshots__/docs.spec.ts.snap @@ -9841,6 +9841,110 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, + "datacenter": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "required": { + "type": "boolean", + }, + "type": { + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option", + ], + "type": "string", + }, + "values": { + "items": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "value": { + "nullable": true, + }, + }, + "required": [ + "key", + "description", + ], + "type": "object", + }, + "nullable": true, + "type": "array", + }, + }, + "required": [ + "key", + "type", + "required", + "description", + ], + "type": "object", + }, + "discord-username": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "required": { + "type": "boolean", + }, + "type": { + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option", + ], + "type": "string", + }, + "values": { + "items": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "value": { + "nullable": true, + }, + }, + "required": [ + "key", + "description", + ], + "type": "object", + }, + "nullable": true, + "type": "array", + }, + }, + "required": [ + "key", + "type", + "required", + "description", + ], + "type": "object", + }, "email": { "properties": { "description": { @@ -10049,7 +10153,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "feat-persistent-storage-type": { + "feat-shm": { "properties": { "description": { "type": "string", @@ -10205,7 +10309,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "hardware-disk": { + "hardware-cuda": { "properties": { "description": { "type": "string", @@ -10309,6 +10413,58 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, + "hardware-gpu-capability": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "required": { + "type": "boolean", + }, + "type": { + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option", + ], + "type": "string", + }, + "values": { + "items": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "value": { + "nullable": true, + }, + }, + "required": [ + "key", + "description", + ], + "type": "object", + }, + "nullable": true, + "type": "array", + }, + }, + "required": [ + "key", + "type", + "required", + "description", + ], + "type": "object", + }, "hardware-gpu-model": { "properties": { "description": { @@ -10413,7 +10569,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "host": { + "hardware-persistent-storage-capability": { "properties": { "description": { "type": "string", @@ -10465,7 +10621,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "hosting-provider": { + "hardware-persistent-storage-class": { "properties": { "description": { "type": "string", @@ -10517,7 +10673,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "location-region": { + "hardware-shm": { "properties": { "description": { "type": "string", @@ -10569,7 +10725,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "location-type": { + "host": { "properties": { "description": { "type": "string", @@ -10621,7 +10777,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "network-provider": { + "hosting-provider": { "properties": { "description": { "type": "string", @@ -10673,7 +10829,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "network-speed-down": { + "location-region": { "properties": { "description": { "type": "string", @@ -10725,7 +10881,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "network-speed-up": { + "location-type": { "properties": { "description": { "type": "string", @@ -10777,7 +10933,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "organization": { + "network-provider": { "properties": { "description": { "type": "string", @@ -10829,7 +10985,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "status-page": { + "network-speed-down": { "properties": { "description": { "type": "string", @@ -10881,7 +11037,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "tier": { + "network-speed-up": { "properties": { "description": { "type": "string", @@ -10933,7 +11089,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "timezone": { + "organization": { "properties": { "description": { "type": "string", @@ -10985,7 +11141,59 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "website": { + "status-page": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "required": { + "type": "boolean", + }, + "type": { + "enum": [ + "string", + "number", + "boolean", + "option", + "multiple-option", + ], + "type": "string", + }, + "values": { + "items": { + "properties": { + "description": { + "type": "string", + }, + "key": { + "type": "string", + }, + "value": { + "nullable": true, + }, + }, + "required": [ + "key", + "description", + ], + "type": "object", + }, + "nullable": true, + "type": "array", + }, + }, + "required": [ + "key", + "type", + "required", + "description", + ], + "type": "object", + }, + "tier": { "properties": { "description": { "type": "string", @@ -11037,7 +11245,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "workload-support-chia": { + "timezone": { "properties": { "description": { "type": "string", @@ -11089,7 +11297,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` ], "type": "object", }, - "workload-support-chia-capabilities": { + "website": { "properties": { "description": { "type": "string", @@ -11145,6 +11353,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "required": [ "host", "email", + "discord-username", "organization", "website", "tier", @@ -11159,15 +11368,18 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "hardware-cpu-arch", "hardware-gpu", "hardware-gpu-model", - "hardware-disk", + "hardware-gpu-capability", + "hardware-persistent-storage-class", + "hardware-persistent-storage-capability", + "hardware-cuda", + "datacenter", "hardware-memory", "network-provider", "network-speed-up", "network-speed-down", "feat-persistent-storage", - "feat-persistent-storage-type", - "workload-support-chia", - "workload-support-chia-capabilities", + "feat-shm", + "hardware-shm", "feat-endpoint-ip", "feat-endpoint-custom-domain", ], @@ -11783,10 +11995,18 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "createdHeight": { "type": "number", }, + "datacenter": { + "nullable": true, + "type": "string", + }, "deploymentCount": { "nullable": true, "type": "number", }, + "discordUsername": { + "nullable": true, + "type": "string", + }, "email": { "nullable": true, "type": "string", @@ -11800,12 +12020,8 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "featPersistentStorage": { "type": "boolean", }, - "featPersistentStorageType": { - "items": { - "type": "string", - }, - "nullable": true, - "type": "array", + "featShm": { + "type": "boolean", }, "gpuModels": { "items": { @@ -11841,7 +12057,11 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "nullable": true, "type": "string", }, - "hardwareDisk": { + "hardwareCuda": { + "nullable": true, + "type": "string", + }, + "hardwareGpuCapabilities": { "items": { "type": "string", }, @@ -11863,6 +12083,17 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "nullable": true, "type": "string", }, + "hardwarePersistentStorageClass": { + "nullable": true, + "type": "string", + }, + "hardwareShm": { + "items": { + "type": "string", + }, + "nullable": true, + "type": "array", + }, "host": { "nullable": true, "type": "string", @@ -11976,16 +12207,6 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "nullable": true, "type": "string", }, - "workloadSupportChia": { - "type": "boolean", - }, - "workloadSupportChiaCapabilities": { - "items": { - "type": "string", - }, - "nullable": true, - "type": "array", - }, }, "required": [ "owner", @@ -12010,6 +12231,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "gpuModels", "attributes", "host", + "discordUsername", "organization", "statusPage", "locationRegion", @@ -12022,17 +12244,19 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "hardwareCpuArch", "hardwareGpuVendor", "hardwareGpuModels", - "hardwareDisk", + "hardwareGpuCapabilities", + "hardwarePersistentStorageClass", "featPersistentStorage", - "featPersistentStorageType", + "featShm", + "hardwareShm", + "hardwareCuda", + "datacenter", "hardwareMemory", "networkProvider", "networkSpeedDown", "networkSpeedUp", "tier", "featEndpointCustomDomain", - "workloadSupportChia", - "workloadSupportChiaCapabilities", "featEndpointIp", ], "type": "object", @@ -12113,9 +12337,17 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "createdHeight": { "type": "number", }, + "datacenter": { + "nullable": true, + "type": "string", + }, "deploymentCount": { "type": "number", }, + "discordUsername": { + "nullable": true, + "type": "string", + }, "email": { "nullable": true, "type": "string", @@ -12129,11 +12361,8 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "featPersistentStorage": { "type": "boolean", }, - "featPersistentStorageType": { - "items": { - "type": "string", - }, - "type": "array", + "featShm": { + "type": "boolean", }, "gpuModels": { "items": { @@ -12169,7 +12398,11 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "nullable": true, "type": "string", }, - "hardwareDisk": { + "hardwareCuda": { + "nullable": true, + "type": "string", + }, + "hardwareGpuCapabilities": { "items": { "type": "string", }, @@ -12189,6 +12422,16 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "nullable": true, "type": "string", }, + "hardwarePersistentStorageClass": { + "nullable": true, + "type": "string", + }, + "hardwareShm": { + "items": { + "type": "string", + }, + "type": "array", + }, "host": { "nullable": true, "type": "string", @@ -12435,15 +12678,6 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "nullable": true, "type": "string", }, - "workloadSupportChia": { - "type": "boolean", - }, - "workloadSupportChiaCapabilities": { - "items": { - "type": "string", - }, - "type": "array", - }, }, "required": [ "owner", @@ -12474,6 +12708,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "gpuModels", "attributes", "host", + "discordUsername", "organization", "statusPage", "locationRegion", @@ -12486,17 +12721,19 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` "hardwareCpuArch", "hardwareGpuVendor", "hardwareGpuModels", - "hardwareDisk", + "hardwareGpuCapabilities", + "hardwarePersistentStorageClass", "featPersistentStorage", - "featPersistentStorageType", + "featShm", + "hardwareShm", + "hardwareCuda", + "datacenter", "hardwareMemory", "networkProvider", "networkSpeedDown", "networkSpeedUp", "tier", "featEndpointCustomDomain", - "workloadSupportChia", - "workloadSupportChiaCapabilities", "featEndpointIp", "uptime", ], @@ -16797,7 +17034,7 @@ exports[`API Docs > GET /v1/doc > returns docs with all routes expected 1`] = ` }, "servers": [ { - "url": "http://localhost:3080", + "url": "https://console-api-sandbox.akash.network", }, ], } diff --git a/apps/api/test/functional/providers.spec.ts b/apps/api/test/functional/providers.spec.ts index b41a6a01d9..d4ef07d8a6 100644 --- a/apps/api/test/functional/providers.spec.ts +++ b/apps/api/test/functional/providers.spec.ts @@ -1,3 +1,5 @@ +import "@test/setup-provider-attributes-schema"; + import type { Provider, ProviderSnapshot } from "@akashnetwork/database/dbSchemas/akash"; import { ProviderAttributeSignature } from "@akashnetwork/database/dbSchemas/akash"; import subDays from "date-fns/subDays"; diff --git a/apps/api/test/helpers/register-local-provider-attributes-schema.ts b/apps/api/test/helpers/register-local-provider-attributes-schema.ts new file mode 100644 index 0000000000..dbd501b748 --- /dev/null +++ b/apps/api/test/helpers/register-local-provider-attributes-schema.ts @@ -0,0 +1,13 @@ +import { GitHubHttpService } from "@akashnetwork/http-sdk"; +import { container } from "tsyringe"; +import { mock } from "vitest-mock-extended"; + +import { loadLocalProviderAttributesSchema } from "../seeders/provider-attributes-schema.seeder"; + +export function registerLocalProviderAttributesSchemaGitHubHttpService() { + container.register(GitHubHttpService, { + useValue: mock({ + getProviderAttributesSchema: async () => loadLocalProviderAttributesSchema() + }) + }); +} diff --git a/apps/api/test/seeders/index.ts b/apps/api/test/seeders/index.ts index d8e477a858..10da3008b6 100644 --- a/apps/api/test/seeders/index.ts +++ b/apps/api/test/seeders/index.ts @@ -2,6 +2,7 @@ export * from "./akash-block.seeder"; export * from "./auth0-user.seeder"; export * from "./day.seeder"; export * from "./provider.seeder"; +export * from "./provider-attributes-schema.seeder"; export * from "./provider-snapshot.seeder"; export * from "./provider-snapshot-node.seeder"; export * from "./provider-snapshot-node-gpu.seeder"; diff --git a/apps/api/test/seeders/provider-attributes-schema.seeder.ts b/apps/api/test/seeders/provider-attributes-schema.seeder.ts new file mode 100644 index 0000000000..52d95d044c --- /dev/null +++ b/apps/api/test/seeders/provider-attributes-schema.seeder.ts @@ -0,0 +1,15 @@ +import type { ProviderAttributesSchema } from "@akashnetwork/http-sdk"; +import { readFileSync } from "node:fs"; +import path from "node:path"; + +let cachedSchema: ProviderAttributesSchema | undefined; + +export function loadLocalProviderAttributesSchema(): ProviderAttributesSchema { + cachedSchema ??= JSON.parse(readFileSync(path.join(__dirname, "../../../../config/provider-attributes.json"), "utf8")) as ProviderAttributesSchema; + + return cachedSchema; +} + +export function createProviderAttributesSchema(): ProviderAttributesSchema { + return loadLocalProviderAttributesSchema(); +} diff --git a/apps/api/test/seeders/provider.seeder.ts b/apps/api/test/seeders/provider.seeder.ts index cf20f2a6b7..49f73853e2 100644 --- a/apps/api/test/seeders/provider.seeder.ts +++ b/apps/api/test/seeders/provider.seeder.ts @@ -43,8 +43,8 @@ export const createProvider = async (overrides: Partial = ({ owner, _provide
+ @@ -218,12 +219,11 @@ export const ProviderDetail: React.FunctionComponent = ({ owner, _provide
} /> - } /> + } />
} /> -
diff --git a/apps/deploy-web/src/components/providers/ProviderSpecs.spec.tsx b/apps/deploy-web/src/components/providers/ProviderSpecs.spec.tsx new file mode 100644 index 0000000000..4244015a84 --- /dev/null +++ b/apps/deploy-web/src/components/providers/ProviderSpecs.spec.tsx @@ -0,0 +1,44 @@ +import { describe, expect, it } from "vitest"; + +import { ProviderSpecs } from "./ProviderSpecs"; + +import { render, screen } from "@testing-library/react"; +import { buildProvider } from "@tests/seeders/provider"; + +describe(ProviderSpecs.name, () => { + it("renders provider hardware and feature attributes", () => { + render( + + ); + + expect(screen.getByText("GPU")).toBeInTheDocument(); + expect(screen.getByText("nvidia")).toBeInTheDocument(); + expect(screen.getByText("Shared Memory (SHM)")).toBeInTheDocument(); + expect(screen.getByText("Persistent Storage Class")).toBeInTheDocument(); + expect(screen.getByText("beta3")).toBeInTheDocument(); + expect(screen.getByText("CUDA")).toBeInTheDocument(); + expect(screen.getByText("12.7")).toBeInTheDocument(); + expect(screen.getByText("rtx4090 24Gi")).toBeInTheDocument(); + }); +}); diff --git a/apps/deploy-web/src/components/providers/ProviderSpecs.tsx b/apps/deploy-web/src/components/providers/ProviderSpecs.tsx index 19b0125d4a..6df3617009 100644 --- a/apps/deploy-web/src/components/providers/ProviderSpecs.tsx +++ b/apps/deploy-web/src/components/providers/ProviderSpecs.tsx @@ -25,6 +25,7 @@ export const ProviderSpecs: React.FunctionComponent = ({ provider }) => { } /> + } />
@@ -39,8 +40,9 @@ export const ProviderSpecs: React.FunctionComponent = ({ provider }) => { ))} /> - - + + + diff --git a/apps/deploy-web/src/types/provider.ts b/apps/deploy-web/src/types/provider.ts index b509a54d73..a9cddd1a10 100644 --- a/apps/deploy-web/src/types/provider.ts +++ b/apps/deploy-web/src/types/provider.ts @@ -208,6 +208,7 @@ export interface ApiProviderList { // Attributes schema host: string; + discordUsername: string | null; organization: string; statusPage: string; locationRegion: string; @@ -220,17 +221,19 @@ export interface ApiProviderList { hardwareCpuArch: string; hardwareGpuVendor: string; hardwareGpuModels: string[]; - hardwareDisk: string[]; + hardwareGpuCapabilities: string[]; + hardwarePersistentStorageClass: string; featPersistentStorage: boolean; - featPersistentStorageType: string[]; + featShm: boolean; + hardwareShm: string[]; + hardwareCuda: string; + datacenter: string; hardwareMemory: string; networkProvider: string; networkSpeedDown: number; networkSpeedUp: number; tier: string; featEndpointCustomDomain: boolean; - workloadSupportChia: boolean; - workloadSupportChiaCapabilities: string[]; featEndpointIp: boolean; } diff --git a/apps/deploy-web/src/types/providerAttributes.ts b/apps/deploy-web/src/types/providerAttributes.ts index 1d4948f55b..681faaae8a 100644 --- a/apps/deploy-web/src/types/providerAttributes.ts +++ b/apps/deploy-web/src/types/providerAttributes.ts @@ -1,6 +1,7 @@ export type ProviderAttributesSchema = { host: ProviderAttributeSchemaDetail; email: ProviderAttributeSchemaDetail; + "discord-username": ProviderAttributeSchemaDetail; organization: ProviderAttributeSchemaDetail; website: ProviderAttributeSchemaDetail; tier: ProviderAttributeSchemaDetail; @@ -15,15 +16,18 @@ export type ProviderAttributesSchema = { "hardware-cpu-arch": ProviderAttributeSchemaDetail; "hardware-gpu": ProviderAttributeSchemaDetail; "hardware-gpu-model": ProviderAttributeSchemaDetail; - "hardware-disk": ProviderAttributeSchemaDetail; + "hardware-gpu-capability": ProviderAttributeSchemaDetail; + "hardware-persistent-storage-class": ProviderAttributeSchemaDetail; + "hardware-persistent-storage-capability": ProviderAttributeSchemaDetail; + "hardware-cuda": ProviderAttributeSchemaDetail; + datacenter: ProviderAttributeSchemaDetail; "hardware-memory": ProviderAttributeSchemaDetail; "network-provider": ProviderAttributeSchemaDetail; "network-speed-up": ProviderAttributeSchemaDetail; "network-speed-down": ProviderAttributeSchemaDetail; "feat-persistent-storage": ProviderAttributeSchemaDetail; - "feat-persistent-storage-type": ProviderAttributeSchemaDetail; - "workload-support-chia": ProviderAttributeSchemaDetail; - "workload-support-chia-capabilities": ProviderAttributeSchemaDetail; + "feat-shm": ProviderAttributeSchemaDetail; + "hardware-shm": ProviderAttributeSchemaDetail; "feat-endpoint-ip": ProviderAttributeSchemaDetail; "feat-endpoint-custom-domain": ProviderAttributeSchemaDetail; }; diff --git a/apps/deploy-web/tests/seeders/provider.ts b/apps/deploy-web/tests/seeders/provider.ts index d95fb607b9..b1ee505fdc 100644 --- a/apps/deploy-web/tests/seeders/provider.ts +++ b/apps/deploy-web/tests/seeders/provider.ts @@ -67,7 +67,7 @@ export function buildProvider(overrides?: Partial): ApiProvid lastOnlineDate: faker.date.recent().toISOString(), isAudited: faker.datatype.boolean(), attributes: [ - { key: "region", value: "us-east", auditedBy: [faker.string.alphanumeric(42)] }, + { key: "location-region", value: "na-us-southeast", auditedBy: [faker.string.alphanumeric(42)] }, { key: "host", value: faker.internet.domainWord(), auditedBy: [faker.string.alphanumeric(42)] }, { key: "tier", value: "community", auditedBy: [faker.string.alphanumeric(42)] }, { key: "organization", value: "overclock", auditedBy: [faker.string.alphanumeric(42)] }, @@ -76,9 +76,10 @@ export function buildProvider(overrides?: Partial): ApiProvid { key: "capabilities/gpu/vendor/nvidia/model/rtx4000", value: "true", auditedBy: [faker.string.alphanumeric(42)] } ], host: faker.internet.domainWord(), + discordUsername: faker.internet.userName(), organization: faker.company.name(), statusPage: null, - locationRegion: faker.location.state(), + locationRegion: "na-us-southeast", country: faker.location.countryCode(), city: faker.location.city(), timezone: faker.location.timeZone(), @@ -88,17 +89,19 @@ export function buildProvider(overrides?: Partial): ApiProvid hardwareCpuArch: "", hardwareGpuVendor: "", hardwareGpuModels: ["Nvidia Quadro RTX 4000"], - hardwareDisk: ["hdd"], - featPersistentStorage: faker.datatype.boolean(), - featPersistentStorageType: ["hdd"], + hardwareGpuCapabilities: ["nvidia rtx4000 8Gi pcie"], + hardwarePersistentStorageClass: "beta3", + featPersistentStorage: true, + featShm: true, + hardwareShm: ["SHM storage class"], + hardwareCuda: "12.7", + datacenter: "us-southeast-atl-1", hardwareMemory: "", networkProvider: "", networkSpeedDown: faker.number.int({ min: 0, max: 1000 }), networkSpeedUp: faker.number.int({ min: 0, max: 1000 }), tier: "Community hosted provider", featEndpointCustomDomain: faker.datatype.boolean(), - workloadSupportChia: faker.datatype.boolean(), - workloadSupportChiaCapabilities: [], featEndpointIp: faker.datatype.boolean(), uptime: [], ...overrides diff --git a/apps/provider-console/src/components/become-provider/ProviderAttributes.tsx b/apps/provider-console/src/components/become-provider/ProviderAttributes.tsx index b726bc450f..38cc58f7f0 100644 --- a/apps/provider-console/src/components/become-provider/ProviderAttributes.tsx +++ b/apps/provider-console/src/components/become-provider/ProviderAttributes.tsx @@ -81,24 +81,24 @@ const createGpuAttributes = (gpuConfigs: GpuConfig[] | undefined) => { return [ { - key: "unknown-attributes", + key: "hardware-gpu-capability", value: "true", customKey: `capabilities/gpu/vendor/${vendor}/model/${model}` }, { - key: "unknown-attributes", + key: "hardware-gpu-capability", value: "true", customKey: `capabilities/gpu/vendor/${vendor}/model/${model}/ram/${memory}` }, { - key: "unknown-attributes", + key: "hardware-gpu-capability", value: "true", - customKey: `capabilities/gpu/vendor/${vendor}/model/${model}/ram/${memory}/interface/${iface}` + customKey: `capabilities/gpu/vendor/${vendor}/model/${model}/interface/${iface}` }, { - key: "unknown-attributes", + key: "hardware-gpu-capability", value: "true", - customKey: `capabilities/gpu/vendor/${vendor}/model/${model}/interface/${iface}` + customKey: `capabilities/gpu/vendor/${vendor}/model/${model}/ram/${memory}/interface/${iface}` } ]; }); @@ -122,6 +122,27 @@ const providerFormSchema = z.object({ type ProviderFormValues = z.infer; +type ProviderFormAttribute = ProviderFormValues["attributes"][number]; + +function toOnChainAttributeKey(attr: ProviderFormAttribute): string { + if (attr.key === "unknown-attributes") { + return attr.customKey?.trim() || ""; + } + + if (attr.key === "hardware-gpu-capability" && attr.customKey?.trim()) { + return attr.customKey.trim(); + } + + return attr.key || ""; +} + +function toOnChainAttributes(attributes: ProviderFormValues["attributes"]): Array<{ key: string; value: string }> { + return attributes.map(attr => ({ + key: toOnChainAttributeKey(attr), + value: attr.value + })); +} + export const ProviderAttributes: React.FunctionComponent = ({ onComplete, existingAttributes, editMode }) => { const [providerProcess, setProviderProcess] = useAtom(providerProcessStore.providerProcessAtom); const organizationName = providerProcess.config?.organization; @@ -142,6 +163,7 @@ export const ProviderAttributes: React.FunctionComponent = async data => { + const attributes = toOnChainAttributes(data.attributes); + if (!editMode) { const updatedProviderProcess = { ...providerProcess, - attributes: data.attributes.map(attr => ({ - key: attr.key === "unknown-attributes" ? attr.customKey || "" : attr.key || "", - value: attr.value - })) + attributes }; setProviderProcess(updatedProviderProcess); onComplete && onComplete(); } else { - const attributes = data.attributes.map(attr => ({ - key: attr.key === "unknown-attributes" ? attr.customKey || "" : attr.key || "", - value: attr.value - })); const request = { control_machine: sanitizeMachineAccess(activeControlMachine), attributes diff --git a/apps/provider-console/src/types/provider.ts b/apps/provider-console/src/types/provider.ts index e243930c31..ee5db2236f 100644 --- a/apps/provider-console/src/types/provider.ts +++ b/apps/provider-console/src/types/provider.ts @@ -38,17 +38,19 @@ export interface ProviderDetails { hardwareCpuArch: string[]; hardwareGpuVendor: string[]; hardwareGpuModels: string[]; - hardwareDisk: string[]; + hardwareGpuCapabilities: string[]; + hardwarePersistentStorageClass: string[]; featPersistentStorage: boolean; - featPersistentStorageType: string[]; + featShm: boolean; + hardwareShm: string[]; + hardwareCuda: string | null; + datacenter: string | null; hardwareMemory: string[]; networkProvider: string | null; networkSpeedDown: number; networkSpeedUp: number; tier: string[]; featEndpointCustomDomain: boolean; - workloadSupportChia: boolean; - workloadSupportChiaCapabilities: string[]; featEndpointIp: boolean; uptime: Uptime[]; stats: { diff --git a/apps/provider-console/src/types/providerAttributes.ts b/apps/provider-console/src/types/providerAttributes.ts index 964e99aabe..e639c5ba9b 100644 --- a/apps/provider-console/src/types/providerAttributes.ts +++ b/apps/provider-console/src/types/providerAttributes.ts @@ -10,6 +10,7 @@ export const providerAttributesFormValuesSchema = z.object({ host: z.string().min(1, { message: "Host is required." }), tier: z.string().optional(), email: z.string().email({ message: "Email is invalid." }).optional(), + "discord-username": z.string().optional(), organization: z.string().optional(), website: z.string().optional(), "status-page": z.string().optional(), @@ -23,15 +24,18 @@ export const providerAttributesFormValuesSchema = z.object({ "hardware-cpu-arch": z.string().optional(), "hardware-gpu": z.string().optional(), "hardware-gpu-model": z.array(providerAttributeSchemaDetailValueSchema), - "hardware-disk": z.array(providerAttributeSchemaDetailValueSchema).min(1, { message: "Hardware disk is required." }), + "hardware-gpu-capability": z.array(providerAttributeSchemaDetailValueSchema).optional(), + "hardware-persistent-storage-class": z.string().optional(), + "hardware-persistent-storage-capability": z.boolean().optional(), + "hardware-cuda": z.string().optional(), + datacenter: z.string().optional(), "hardware-memory": z.string().min(1, { message: "Hardware memory is required." }), "network-provider": z.string().optional(), "network-speed-up": z.number().optional(), "network-speed-down": z.number().optional(), "feat-persistent-storage": z.boolean().optional(), - "feat-persistent-storage-type": z.array(providerAttributeSchemaDetailValueSchema).optional(), - "workload-support-chia": z.boolean().optional(), - "workload-support-chia-capabilities": z.array(providerAttributeSchemaDetailValueSchema).optional(), + "feat-shm": z.boolean().optional(), + "hardware-shm": z.array(providerAttributeSchemaDetailValueSchema).optional(), "feat-endpoint-ip": z.boolean().optional(), "feat-endpoint-custom-domain": z.boolean().optional(), "unknown-attributes": z @@ -48,6 +52,7 @@ export const providerAttributesFormValuesSchema = z.object({ export type ProviderAttributesSchema = { host: ProviderAttributeSchemaDetail; email: ProviderAttributeSchemaDetail; + "discord-username": ProviderAttributeSchemaDetail; organization: ProviderAttributeSchemaDetail; website: ProviderAttributeSchemaDetail; tier: ProviderAttributeSchemaDetail; @@ -62,15 +67,18 @@ export type ProviderAttributesSchema = { "hardware-cpu-arch": ProviderAttributeSchemaDetail; "hardware-gpu": ProviderAttributeSchemaDetail; "hardware-gpu-model": ProviderAttributeSchemaDetail; - "hardware-disk": ProviderAttributeSchemaDetail; + "hardware-gpu-capability": ProviderAttributeSchemaDetail; + "hardware-persistent-storage-class": ProviderAttributeSchemaDetail; + "hardware-persistent-storage-capability": ProviderAttributeSchemaDetail; + "hardware-cuda": ProviderAttributeSchemaDetail; + datacenter: ProviderAttributeSchemaDetail; "hardware-memory": ProviderAttributeSchemaDetail; "network-provider": ProviderAttributeSchemaDetail; "network-speed-up": ProviderAttributeSchemaDetail; "network-speed-down": ProviderAttributeSchemaDetail; "feat-persistent-storage": ProviderAttributeSchemaDetail; - "feat-persistent-storage-type": ProviderAttributeSchemaDetail; - "workload-support-chia": ProviderAttributeSchemaDetail; - "workload-support-chia-capabilities": ProviderAttributeSchemaDetail; + "feat-shm": ProviderAttributeSchemaDetail; + "hardware-shm": ProviderAttributeSchemaDetail; "feat-endpoint-ip": ProviderAttributeSchemaDetail; "feat-endpoint-custom-domain": ProviderAttributeSchemaDetail; }; diff --git a/config/community.code-workspace b/config/community.code-workspace new file mode 100644 index 0000000000..39cc2ecd40 --- /dev/null +++ b/config/community.code-workspace @@ -0,0 +1,17 @@ +{ + "folders": [ + { + "path": "../../community" + }, + { + "path": "../../website" + }, + { + "path": ".." + }, + { + "path": "../../provider-configs" + } + ], + "settings": {} +} \ No newline at end of file diff --git a/config/provider-attributes.json b/config/provider-attributes.json index 9e9b9be481..5de7aab295 100644 --- a/config/provider-attributes.json +++ b/config/provider-attributes.json @@ -11,6 +11,12 @@ "required": true, "description": "Email associated with the provider." }, + "discord-username": { + "key": "discord-username", + "type": "string", + "required": false, + "description": "Discord username for provider contact. Required for audited providers; you must be in the Akash Discord with the Provider role." + }, "organization": { "key": "organization", "type": "string", @@ -33,7 +39,7 @@ "key": "location-region", "type": "option", "required": true, - "description": "Geo location region of the provider. Based on the United Nations geoscheme. https://en.wikipedia.org/wiki/United_Nations_geoscheme", + "description": "Geo location region of the provider. On-chain key is location-region. Legacy region is not read. Based on the United Nations geoscheme. https://en.wikipedia.org/wiki/United_Nations_geoscheme", "values": [ { "key": "na-ca-west", @@ -430,8 +436,13 @@ "description": "GPU model.", "values": [ { - "key": "capabilities/gpu/vendor/nvidia/model/h100", - "description": "Nvidia h100", + "key": "capabilities/gpu/vendor/amd/model/mi100", + "description": "AMD mi100", + "value": true + }, + { + "key": "capabilities/gpu/vendor/amd/model/mi60", + "description": "AMD mi60", "value": true }, { @@ -445,28 +456,118 @@ "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/a16", - "description": "Nvidia a16", + "key": "capabilities/gpu/vendor/nvidia/model/a5000", + "description": "Nvidia Quadro A5000", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/t4", - "description": "Nvidia t4", + "key": "capabilities/gpu/vendor/nvidia/model/a800", + "description": "Nvidia a800", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/v100", - "description": "Nvidia v100", + "key": "capabilities/gpu/vendor/nvidia/model/gt1030", + "description": "Nvidia gt1030", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/p4", - "description": "Nvidia tesla-p4", + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050", + "description": "Nvidia gtx-1050", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/p40", - "description": "Nvidia tesla-p40", + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050ti", + "description": "Nvidia gtx-1050-ti", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060", + "description": "Nvidia gtx-1060", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070", + "description": "Nvidia gtx-1070", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070ti", + "description": "Nvidia gtx-1070-ti", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080", + "description": "Nvidia gtx-1080", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080ti", + "description": "Nvidia gtx-1080-ti", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650s", + "description": "Nvidia gtx-1650-s", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650ti", + "description": "Nvidia gtx-1650-ti", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660", + "description": "Nvidia gtx-1660", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660ti", + "description": "Nvidia gtx-1660-ti", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx960", + "description": "Nvidia gtx-960", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx970", + "description": "Nvidia gtx-970", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980", + "description": "Nvidia gtx-980", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980ti", + "description": "Nvidia gtx-980-ti", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h100", + "description": "Nvidia h100", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200", + "description": "Nvidia h200", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200nvl", + "description": "Nvidia h200nvl", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/m4000", + "description": "Nvidia m4000", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/mx150", + "description": "Nvidia mx150", "value": true }, { @@ -475,310 +576,1965 @@ "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/k80", - "description": "Nvidia tesla-k80", + "key": "capabilities/gpu/vendor/nvidia/model/p2000", + "description": "Nvidia p2000", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/rtx4000", - "description": "Nvidia Quadro RTX 4000", + "key": "capabilities/gpu/vendor/nvidia/model/p4", + "description": "Nvidia tesla-p4", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/rtx5000", - "description": "Nvidia Quadro RTX 5000", + "key": "capabilities/gpu/vendor/nvidia/model/p40", + "description": "Nvidia tesla-p40", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/rtx6000", - "description": "Nvidia Quadro RTX 6000", + "key": "capabilities/gpu/vendor/nvidia/model/p4000", + "description": "Nvidia p4000", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/rtx8000", - "description": "Nvidia Quadro RTX 8000", + "key": "capabilities/gpu/vendor/nvidia/model/p5000", + "description": "Nvidia p5000", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/a2000", - "description": "Nvidia Quadro A2000", + "key": "capabilities/gpu/vendor/nvidia/model/p6000", + "description": "Nvidia p6000", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/a4000", - "description": "Nvidia Quadro A4000", + "key": "capabilities/gpu/vendor/nvidia/model/pro6000mq", + "description": "Nvidia pro6000mq", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/a5000", - "description": "Nvidia Quadro A5000", + "key": "capabilities/gpu/vendor/nvidia/model/pro6000se", + "description": "Nvidia pro6000se", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/a6000", - "description": "Nvidia Quadro A6000", + "key": "capabilities/gpu/vendor/nvidia/model/pro6000we", + "description": "Nvidia pro6000we", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/4060", - "description": "Nvidia rtx-4060", + "key": "capabilities/gpu/vendor/nvidia/model/rtx2000eada", + "description": "Nvidia rtx-2000-eada", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/4060ti", - "description": "Nvidia rtx-4060-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060", + "description": "Nvidia rtx-2060", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/4070", - "description": "Nvidia rtx-4070", + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060s", + "description": "Nvidia rtx-2060-s", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/4070ti", - "description": "Nvidia rtx-4070-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070", + "description": "Nvidia rtx-2070", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/4080", - "description": "Nvidia rtx-4080", + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070s", + "description": "Nvidia rtx-2070-s", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/4090", - "description": "Nvidia rtx-4090", + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080", + "description": "Nvidia rtx-2080", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080s", + "description": "Nvidia rtx-2080-s", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3050", - "description": "Nvidia rtx-3050", + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080ti", + "description": "Nvidia rtx-2080-ti", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3060", + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060", "description": "Nvidia rtx-3060", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3060ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060m", + "description": "Nvidia rtx-3060-m", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060ti", "description": "Nvidia rtx-3060-ti", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3070", + "key": "capabilities/gpu/vendor/nvidia/model/rtx3070", "description": "Nvidia rtx-3070", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3070ti", - "description": "Nvidia rtx-3070-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx3080", + "description": "Nvidia rtx-3080", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3080", - "description": "Nvidia rtx-3080", + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090", + "description": "Nvidia rtx-3090", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3080ti", - "description": "Nvidia rtx-3080-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090ti", + "description": "Nvidia rtx-3090-ti", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3090", - "description": "Nvidia rtx-3090", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000", + "description": "Nvidia Quadro RTX 4000", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/3090ti", - "description": "Nvidia rtx-3090-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000ada", + "description": "Nvidia rtx-4000-ada", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/1050", - "description": "Nvidia gtx-1050", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000sada", + "description": "Nvidia rtx-4000-sada", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/1050ti", - "description": "Nvidia gtx-1050-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060", + "description": "Nvidia rtx-4060", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/1060", - "description": "Nvidia gtx-1060", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060ti", + "description": "Nvidia rtx-4060-ti", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/1070", - "description": "Nvidia gtx-1070", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070", + "description": "Nvidia rtx-4070", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/1070ti", - "description": "Nvidia gtx-1070-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070s", + "description": "Nvidia rtx-4070-s", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/1080", - "description": "Nvidia gtx-1080", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070ti", + "description": "Nvidia rtx-4070-ti", "value": true }, { - "key": "capabilities/gpu/vendor/nvidia/model/1080ti", - "description": "Nvidia gtx-1080-ti", + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080", + "description": "Nvidia rtx-4080", "value": true - } - ] - }, - "hardware-disk": { - "key": "capabilities/storage", - "type": "multiple-option", - "required": true, - "description": "Storage type.", - "values": [ + }, { - "key": "capabilities/storage/1/class", - "description": "hdd", - "value": "default" + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080s", + "description": "Nvidia rtx-4080-s", + "value": true }, { - "key": "capabilities/storage/2/class", - "description": "ssd", - "value": "beta2" + "key": "capabilities/gpu/vendor/nvidia/model/rtx4090", + "description": "Nvidia rtx-4090", + "value": true }, { - "key": "capabilities/storage/3/class", - "description": "nvme", - "value": "beta3" - } - ] - }, - "hardware-memory": { - "key": "capabilities/memory", - "type": "option", - "required": true, - "description": "Memory (RAM) type.", - "values": [ + "key": "capabilities/gpu/vendor/nvidia/model/rtx5000", + "description": "Nvidia Quadro RTX 5000", + "value": true + }, { - "key": "ddr2", - "description": "DDR2" + "key": "capabilities/gpu/vendor/nvidia/model/rtx5070", + "description": "Nvidia rtx-5070", + "value": true }, { - "key": "ddr3", - "description": "DDR3" + "key": "capabilities/gpu/vendor/nvidia/model/rtx5080", + "description": "Nvidia rtx-5080", + "value": true }, { - "key": "ddr3ecc", - "description": "DDR3ECC" + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090", + "description": "Nvidia rtx-5090", + "value": true }, { - "key": "ddr4", - "description": "DDR4" + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090m", + "description": "Nvidia rtx-5090-m", + "value": true }, { - "key": "ddr4ecc", - "description": "DDR4ECC" + "key": "capabilities/gpu/vendor/nvidia/model/rtx6000", + "description": "Nvidia Quadro RTX 6000", + "value": true }, { - "key": "ddr5", - "description": "DDR5" + "key": "capabilities/gpu/vendor/nvidia/model/rtx8000", + "description": "Nvidia Quadro RTX 8000", + "value": true }, { - "key": "ddr5ecc", - "description": "DDR5ECC" + "key": "capabilities/gpu/vendor/nvidia/model/rtxa2000", + "description": "Nvidia Quadro A2000", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa6000", + "description": "Nvidia Quadro A6000", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/t4", + "description": "Nvidia t4", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/v100", + "description": "Nvidia v100", + "value": true } ] }, - "network-provider": { - "key": "network-provider", - "type": "string", - "required": false, - "description": "Internet service provider." - }, - "network-speed-up": { - "key": "network-speed-up", - "type": "number", - "required": false, - "description": "Upload Bandwidth in mbps." - }, - "network-speed-down": { - "key": "network-speed-down", - "type": "number", - "required": false, - "description": "Download Bandwidth in mbps." - }, - "feat-persistent-storage": { - "key": "feat-persistent-storage", - "type": "boolean", - "required": true, - "description": "True if the provider offers persistent storage." - }, - "feat-persistent-storage-type": { - "key": "feat-persistent-storage", + "hardware-gpu-capability": { + "key": "capabilities/gpu/capability", "type": "multiple-option", "required": false, - "description": "Type of persistent storage offered.", + "description": "GPU capability keys including model, RAM, and interface.", "values": [ { - "key": "capabilities/storage/1/persistent", - "description": "hdd", + "key": "capabilities/gpu/vendor/amd/model/mi100", + "description": "amd mi100 32Gi pcie", "value": true }, { - "key": "capabilities/storage/2/persistent", - "description": "ssd", + "key": "capabilities/gpu/vendor/amd/model/mi100/ram/32Gi", + "description": "amd mi100 32Gi pcie", "value": true }, { - "key": "capabilities/storage/3/persistent", - "description": "nvme", + "key": "capabilities/gpu/vendor/amd/model/mi100/interface/pcie", + "description": "amd mi100 32Gi pcie", "value": true - } - ] - }, - "tier": { - "key": "tier", - "type": "option", - "required": false, - "description": "Is this an Akash hosted provider or community hosted?", - "values": [ + }, { - "key": "akash", - "description": "Akash hosted provider" + "key": "capabilities/gpu/vendor/amd/model/mi100/ram/32Gi/interface/pcie", + "description": "amd mi100 32Gi pcie", + "value": true }, { - "key": "community", - "description": "Community hosted provider" - } - ] - }, - "workload-support-chia": { - "key": "workload-support-chia", - "type": "boolean", - "required": false, - "description": "Does this provider support Chia plotting?" - }, - "workload-support-chia-capabilities": { - "key": "workload-support-chia-capabilities", - "type": "multiple-option", - "required": false, - "description": "What specific capabilities does the provider support for Chia?", - "values": [ + "key": "capabilities/gpu/vendor/amd/model/mi60", + "description": "amd mi60 32Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/amd/model/mi60/ram/32Gi", + "description": "amd mi60 32Gi pcie", + "value": true + }, { - "key": "bladebit", - "description": "bladebit", + "key": "capabilities/gpu/vendor/amd/model/mi60/interface/pcie", + "description": "amd mi60 32Gi pcie", "value": true }, { - "key": "madmax", - "description": "madmax", + "key": "capabilities/gpu/vendor/amd/model/mi60/ram/32Gi/interface/pcie", + "description": "amd mi60 32Gi pcie", "value": true }, { - "key": "bladebit-disk", - "description": "bladebit-disk", + "key": "capabilities/gpu/vendor/nvidia/model/a100", + "description": "nvidia a100 40Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/40Gi", + "description": "nvidia a100 40Gi pcie", "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/interface/pcie", + "description": "nvidia a100 40Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/40Gi/interface/pcie", + "description": "nvidia a100 40Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/interface/sxm", + "description": "nvidia a100 40Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/40Gi/interface/sxm", + "description": "nvidia a100 40Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/64Gi", + "description": "nvidia a100 64Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/64Gi/interface/sxm", + "description": "nvidia a100 64Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/80Gi", + "description": "nvidia a100 80Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/80Gi/interface/pcie", + "description": "nvidia a100 80Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a100/ram/80Gi/interface/sxm", + "description": "nvidia a100 80Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a40", + "description": "nvidia a40 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a40/ram/48Gi", + "description": "nvidia a40 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a40/interface/pcie", + "description": "nvidia a40 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a40/ram/48Gi/interface/pcie", + "description": "nvidia a40 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a5000", + "description": "nvidia a5000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a5000/ram/24Gi", + "description": "nvidia a5000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a5000/interface/pcie", + "description": "nvidia a5000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a5000/ram/24Gi/interface/pcie", + "description": "nvidia a5000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a800", + "description": "nvidia a800 80Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a800/ram/80Gi", + "description": "nvidia a800 80Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a800/interface/sxm", + "description": "nvidia a800 80Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/a800/ram/80Gi/interface/sxm", + "description": "nvidia a800 80Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gt1030", + "description": "nvidia gt1030 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gt1030/ram/2Gi", + "description": "nvidia gt1030 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gt1030/interface/pcie", + "description": "nvidia gt1030 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gt1030/ram/2Gi/interface/pcie", + "description": "nvidia gt1030 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050", + "description": "nvidia gtx1050 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050/ram/2Gi", + "description": "nvidia gtx1050 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050/interface/pcie", + "description": "nvidia gtx1050 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050/ram/2Gi/interface/pcie", + "description": "nvidia gtx1050 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050/ram/3Gi", + "description": "nvidia gtx1050 3Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050/ram/3Gi/interface/pcie", + "description": "nvidia gtx1050 3Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050ti", + "description": "nvidia gtx1050ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050ti/ram/4Gi", + "description": "nvidia gtx1050ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050ti/interface/pcie", + "description": "nvidia gtx1050ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1050ti/ram/4Gi/interface/pcie", + "description": "nvidia gtx1050ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060", + "description": "nvidia gtx1060 3Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060/ram/3Gi", + "description": "nvidia gtx1060 3Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060/interface/pcie", + "description": "nvidia gtx1060 3Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060/ram/3Gi/interface/pcie", + "description": "nvidia gtx1060 3Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060/ram/5Gi", + "description": "nvidia gtx1060 5Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060/ram/5Gi/interface/pcie", + "description": "nvidia gtx1060 5Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060/ram/6Gi", + "description": "nvidia gtx1060 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1060/ram/6Gi/interface/pcie", + "description": "nvidia gtx1060 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070", + "description": "nvidia gtx1070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070/ram/8Gi", + "description": "nvidia gtx1070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070/interface/pcie", + "description": "nvidia gtx1070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070/ram/8Gi/interface/pcie", + "description": "nvidia gtx1070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070ti", + "description": "nvidia gtx1070ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070ti/ram/8Gi", + "description": "nvidia gtx1070ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070ti/interface/pcie", + "description": "nvidia gtx1070ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1070ti/ram/8Gi/interface/pcie", + "description": "nvidia gtx1070ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080", + "description": "nvidia gtx1080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080/ram/8Gi", + "description": "nvidia gtx1080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080/interface/pcie", + "description": "nvidia gtx1080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080/ram/8Gi/interface/pcie", + "description": "nvidia gtx1080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080ti", + "description": "nvidia gtx1080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080ti/ram/11Gi", + "description": "nvidia gtx1080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080ti/interface/pcie", + "description": "nvidia gtx1080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1080ti/ram/11Gi/interface/pcie", + "description": "nvidia gtx1080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650s", + "description": "nvidia gtx1650s 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650s/ram/4Gi", + "description": "nvidia gtx1650s 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650s/interface/pcie", + "description": "nvidia gtx1650s 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650s/ram/4Gi/interface/pcie", + "description": "nvidia gtx1650s 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650ti", + "description": "nvidia gtx1650ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650ti/ram/4Gi", + "description": "nvidia gtx1650ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650ti/interface/pcie", + "description": "nvidia gtx1650ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1650ti/ram/4Gi/interface/pcie", + "description": "nvidia gtx1650ti 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660", + "description": "nvidia gtx1660 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660/ram/6Gi", + "description": "nvidia gtx1660 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660/interface/pcie", + "description": "nvidia gtx1660 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660/ram/6Gi/interface/pcie", + "description": "nvidia gtx1660 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660ti", + "description": "nvidia gtx1660ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660ti/ram/6Gi", + "description": "nvidia gtx1660ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660ti/interface/pcie", + "description": "nvidia gtx1660ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx1660ti/ram/6Gi/interface/pcie", + "description": "nvidia gtx1660ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx960", + "description": "nvidia gtx960 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx960/ram/2Gi", + "description": "nvidia gtx960 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx960/interface/pcie", + "description": "nvidia gtx960 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx960/ram/2Gi/interface/pcie", + "description": "nvidia gtx960 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx960/ram/4Gi", + "description": "nvidia gtx960 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx960/ram/4Gi/interface/pcie", + "description": "nvidia gtx960 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx970", + "description": "nvidia gtx970 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx970/ram/4Gi", + "description": "nvidia gtx970 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx970/interface/pcie", + "description": "nvidia gtx970 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx970/ram/4Gi/interface/pcie", + "description": "nvidia gtx970 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980", + "description": "nvidia gtx980 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980/ram/4Gi", + "description": "nvidia gtx980 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980/interface/pcie", + "description": "nvidia gtx980 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980/ram/4Gi/interface/pcie", + "description": "nvidia gtx980 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980ti", + "description": "nvidia gtx980ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980ti/ram/6Gi", + "description": "nvidia gtx980ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980ti/interface/pcie", + "description": "nvidia gtx980ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/gtx980ti/ram/6Gi/interface/pcie", + "description": "nvidia gtx980ti 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h100", + "description": "nvidia h100 80Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h100/ram/80Gi", + "description": "nvidia h100 80Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h100/interface/pcie", + "description": "nvidia h100 80Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h100/ram/80Gi/interface/pcie", + "description": "nvidia h100 80Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h100/interface/sxm", + "description": "nvidia h100 80Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h100/ram/80Gi/interface/sxm", + "description": "nvidia h100 80Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200", + "description": "nvidia h200 141Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200/ram/141Gi", + "description": "nvidia h200 141Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200/interface/sxm", + "description": "nvidia h200 141Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200/ram/141Gi/interface/sxm", + "description": "nvidia h200 141Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200nvl", + "description": "nvidia h200nvl 141Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200nvl/ram/141Gi", + "description": "nvidia h200nvl 141Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200nvl/interface/pcie", + "description": "nvidia h200nvl 141Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/h200nvl/ram/141Gi/interface/pcie", + "description": "nvidia h200nvl 141Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/m4000", + "description": "nvidia m4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/m4000/ram/8Gi", + "description": "nvidia m4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/m4000/interface/pcie", + "description": "nvidia m4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/m4000/ram/8Gi/interface/pcie", + "description": "nvidia m4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/mx150", + "description": "nvidia mx150 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/mx150/ram/2Gi", + "description": "nvidia mx150 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/mx150/interface/pcie", + "description": "nvidia mx150 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/mx150/ram/2Gi/interface/pcie", + "description": "nvidia mx150 2Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p100", + "description": "nvidia p100 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p100/ram/16Gi", + "description": "nvidia p100 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p100/interface/pcie", + "description": "nvidia p100 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p100/ram/16Gi/interface/pcie", + "description": "nvidia p100 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p2000", + "description": "nvidia p2000 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p2000/ram/4Gi", + "description": "nvidia p2000 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p2000/interface/pcie", + "description": "nvidia p2000 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p2000/ram/4Gi/interface/pcie", + "description": "nvidia p2000 4Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p2000/ram/5Gi", + "description": "nvidia p2000 5Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p2000/ram/5Gi/interface/pcie", + "description": "nvidia p2000 5Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4", + "description": "nvidia p4 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4/ram/8Gi", + "description": "nvidia p4 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4/interface/pcie", + "description": "nvidia p4 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4/ram/8Gi/interface/pcie", + "description": "nvidia p4 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p40", + "description": "nvidia p40 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p40/ram/24Gi", + "description": "nvidia p40 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p40/interface/pcie", + "description": "nvidia p40 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p40/ram/24Gi/interface/pcie", + "description": "nvidia p40 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4000", + "description": "nvidia p4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4000/ram/8Gi", + "description": "nvidia p4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4000/interface/pcie", + "description": "nvidia p4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p4000/ram/8Gi/interface/pcie", + "description": "nvidia p4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p5000", + "description": "nvidia p5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p5000/ram/16Gi", + "description": "nvidia p5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p5000/interface/pcie", + "description": "nvidia p5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p5000/ram/16Gi/interface/pcie", + "description": "nvidia p5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p6000", + "description": "nvidia p6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p6000/ram/24Gi", + "description": "nvidia p6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p6000/interface/pcie", + "description": "nvidia p6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/p6000/ram/24Gi/interface/pcie", + "description": "nvidia p6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000mq", + "description": "nvidia pro6000mq 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000mq/ram/96Gi", + "description": "nvidia pro6000mq 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000mq/interface/pcie", + "description": "nvidia pro6000mq 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000mq/ram/96Gi/interface/pcie", + "description": "nvidia pro6000mq 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000se", + "description": "nvidia pro6000se 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000se/ram/96Gi", + "description": "nvidia pro6000se 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000se/interface/pcie", + "description": "nvidia pro6000se 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000se/ram/96Gi/interface/pcie", + "description": "nvidia pro6000se 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000we", + "description": "nvidia pro6000we 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000we/ram/96Gi", + "description": "nvidia pro6000we 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000we/interface/pcie", + "description": "nvidia pro6000we 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/pro6000we/ram/96Gi/interface/pcie", + "description": "nvidia pro6000we 96Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2000eada", + "description": "nvidia rtx2000eada 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2000eada/ram/16Gi", + "description": "nvidia rtx2000eada 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2000eada/interface/pcie", + "description": "nvidia rtx2000eada 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2000eada/ram/16Gi/interface/pcie", + "description": "nvidia rtx2000eada 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060", + "description": "nvidia rtx2060 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060/ram/6Gi", + "description": "nvidia rtx2060 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060/interface/pcie", + "description": "nvidia rtx2060 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060/ram/6Gi/interface/pcie", + "description": "nvidia rtx2060 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060s", + "description": "nvidia rtx2060s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060s/ram/8Gi", + "description": "nvidia rtx2060s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060s/interface/pcie", + "description": "nvidia rtx2060s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2060s/ram/8Gi/interface/pcie", + "description": "nvidia rtx2060s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070", + "description": "nvidia rtx2070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070/ram/8Gi", + "description": "nvidia rtx2070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070/interface/pcie", + "description": "nvidia rtx2070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070/ram/8Gi/interface/pcie", + "description": "nvidia rtx2070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070s", + "description": "nvidia rtx2070s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070s/ram/8Gi", + "description": "nvidia rtx2070s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070s/interface/pcie", + "description": "nvidia rtx2070s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2070s/ram/8Gi/interface/pcie", + "description": "nvidia rtx2070s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080", + "description": "nvidia rtx2080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080/ram/8Gi", + "description": "nvidia rtx2080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080/interface/pcie", + "description": "nvidia rtx2080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080/ram/8Gi/interface/pcie", + "description": "nvidia rtx2080 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080s", + "description": "nvidia rtx2080s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080s/ram/8Gi", + "description": "nvidia rtx2080s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080s/interface/pcie", + "description": "nvidia rtx2080s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080s/ram/8Gi/interface/pcie", + "description": "nvidia rtx2080s 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080ti", + "description": "nvidia rtx2080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080ti/ram/11Gi", + "description": "nvidia rtx2080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080ti/interface/pcie", + "description": "nvidia rtx2080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx2080ti/ram/11Gi/interface/pcie", + "description": "nvidia rtx2080ti 11Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060", + "description": "nvidia rtx3060 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060/ram/12Gi", + "description": "nvidia rtx3060 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060/interface/pcie", + "description": "nvidia rtx3060 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060/ram/12Gi/interface/pcie", + "description": "nvidia rtx3060 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060m", + "description": "nvidia rtx3060m 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060m/ram/6Gi", + "description": "nvidia rtx3060m 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060m/interface/pcie", + "description": "nvidia rtx3060m 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060m/ram/6Gi/interface/pcie", + "description": "nvidia rtx3060m 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060ti", + "description": "nvidia rtx3060ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060ti/ram/8Gi", + "description": "nvidia rtx3060ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060ti/interface/pcie", + "description": "nvidia rtx3060ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3060ti/ram/8Gi/interface/pcie", + "description": "nvidia rtx3060ti 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3070", + "description": "nvidia rtx3070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3070/ram/8Gi", + "description": "nvidia rtx3070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3070/interface/pcie", + "description": "nvidia rtx3070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3070/ram/8Gi/interface/pcie", + "description": "nvidia rtx3070 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3080", + "description": "nvidia rtx3080 10Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3080/ram/10Gi", + "description": "nvidia rtx3080 10Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3080/interface/pcie", + "description": "nvidia rtx3080 10Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3080/ram/10Gi/interface/pcie", + "description": "nvidia rtx3080 10Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090", + "description": "nvidia rtx3090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090/ram/24Gi", + "description": "nvidia rtx3090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090/interface/pcie", + "description": "nvidia rtx3090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090/ram/24Gi/interface/pcie", + "description": "nvidia rtx3090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090ti", + "description": "nvidia rtx3090ti 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090ti/ram/24Gi", + "description": "nvidia rtx3090ti 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090ti/interface/pcie", + "description": "nvidia rtx3090ti 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx3090ti/ram/24Gi/interface/pcie", + "description": "nvidia rtx3090ti 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000", + "description": "nvidia rtx4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000/ram/8Gi", + "description": "nvidia rtx4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000/interface/pcie", + "description": "nvidia rtx4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000/ram/8Gi/interface/pcie", + "description": "nvidia rtx4000 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000ada", + "description": "nvidia rtx4000ada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000ada/ram/20Gi", + "description": "nvidia rtx4000ada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000ada/interface/pcie", + "description": "nvidia rtx4000ada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000ada/ram/20Gi/interface/pcie", + "description": "nvidia rtx4000ada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000sada", + "description": "nvidia rtx4000sada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000sada/ram/20Gi", + "description": "nvidia rtx4000sada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000sada/interface/pcie", + "description": "nvidia rtx4000sada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4000sada/ram/20Gi/interface/pcie", + "description": "nvidia rtx4000sada 20Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060", + "description": "nvidia rtx4060 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060/ram/8Gi", + "description": "nvidia rtx4060 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060/interface/pcie", + "description": "nvidia rtx4060 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060/ram/8Gi/interface/pcie", + "description": "nvidia rtx4060 8Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060ti", + "description": "nvidia rtx4060ti 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060ti/ram/16Gi", + "description": "nvidia rtx4060ti 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060ti/interface/pcie", + "description": "nvidia rtx4060ti 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4060ti/ram/16Gi/interface/pcie", + "description": "nvidia rtx4060ti 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070", + "description": "nvidia rtx4070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070/ram/12Gi", + "description": "nvidia rtx4070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070/interface/pcie", + "description": "nvidia rtx4070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070/ram/12Gi/interface/pcie", + "description": "nvidia rtx4070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070s", + "description": "nvidia rtx4070s 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070s/ram/12Gi", + "description": "nvidia rtx4070s 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070s/interface/pcie", + "description": "nvidia rtx4070s 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070s/ram/12Gi/interface/pcie", + "description": "nvidia rtx4070s 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070ti", + "description": "nvidia rtx4070ti 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070ti/ram/12Gi", + "description": "nvidia rtx4070ti 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070ti/interface/pcie", + "description": "nvidia rtx4070ti 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4070ti/ram/12Gi/interface/pcie", + "description": "nvidia rtx4070ti 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080", + "description": "nvidia rtx4080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080/ram/16Gi", + "description": "nvidia rtx4080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080/interface/pcie", + "description": "nvidia rtx4080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080/ram/16Gi/interface/pcie", + "description": "nvidia rtx4080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080s", + "description": "nvidia rtx4080s 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080s/ram/16Gi", + "description": "nvidia rtx4080s 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080s/interface/pcie", + "description": "nvidia rtx4080s 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4080s/ram/16Gi/interface/pcie", + "description": "nvidia rtx4080s 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4090", + "description": "nvidia rtx4090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4090/ram/24Gi", + "description": "nvidia rtx4090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4090/interface/pcie", + "description": "nvidia rtx4090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx4090/ram/24Gi/interface/pcie", + "description": "nvidia rtx4090 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5000", + "description": "nvidia rtx5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5000/ram/16Gi", + "description": "nvidia rtx5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5000/interface/pcie", + "description": "nvidia rtx5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5000/ram/16Gi/interface/pcie", + "description": "nvidia rtx5000 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5070", + "description": "nvidia rtx5070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5070/ram/12Gi", + "description": "nvidia rtx5070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5070/interface/pcie", + "description": "nvidia rtx5070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5070/ram/12Gi/interface/pcie", + "description": "nvidia rtx5070 12Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5080", + "description": "nvidia rtx5080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5080/ram/16Gi", + "description": "nvidia rtx5080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5080/interface/pcie", + "description": "nvidia rtx5080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5080/ram/16Gi/interface/pcie", + "description": "nvidia rtx5080 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090", + "description": "nvidia rtx5090 32Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090/ram/32Gi", + "description": "nvidia rtx5090 32Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090/interface/pcie", + "description": "nvidia rtx5090 32Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090/ram/32Gi/interface/pcie", + "description": "nvidia rtx5090 32Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090m", + "description": "nvidia rtx5090m 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090m/ram/24Gi", + "description": "nvidia rtx5090m 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090m/interface/pcie", + "description": "nvidia rtx5090m 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx5090m/ram/24Gi/interface/pcie", + "description": "nvidia rtx5090m 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx6000", + "description": "nvidia rtx6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx6000/ram/24Gi", + "description": "nvidia rtx6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx6000/interface/pcie", + "description": "nvidia rtx6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx6000/ram/24Gi/interface/pcie", + "description": "nvidia rtx6000 24Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx8000", + "description": "nvidia rtx8000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx8000/ram/48Gi", + "description": "nvidia rtx8000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx8000/interface/pcie", + "description": "nvidia rtx8000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtx8000/ram/48Gi/interface/pcie", + "description": "nvidia rtx8000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa2000", + "description": "nvidia rtxa2000 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa2000/ram/6Gi", + "description": "nvidia rtxa2000 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa2000/interface/pcie", + "description": "nvidia rtxa2000 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa2000/ram/6Gi/interface/pcie", + "description": "nvidia rtxa2000 6Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa6000", + "description": "nvidia rtxa6000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa6000/ram/48Gi", + "description": "nvidia rtxa6000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa6000/interface/pcie", + "description": "nvidia rtxa6000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/rtxa6000/ram/48Gi/interface/pcie", + "description": "nvidia rtxa6000 48Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/t4", + "description": "nvidia t4 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/t4/ram/16Gi", + "description": "nvidia t4 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/t4/interface/pcie", + "description": "nvidia t4 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/t4/ram/16Gi/interface/pcie", + "description": "nvidia t4 16Gi pcie", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/v100", + "description": "nvidia v100 16Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/v100/ram/16Gi", + "description": "nvidia v100 16Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/v100/interface/sxm", + "description": "nvidia v100 16Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/v100/ram/16Gi/interface/sxm", + "description": "nvidia v100 16Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/v100/ram/32Gi", + "description": "nvidia v100 32Gi sxm", + "value": true + }, + { + "key": "capabilities/gpu/vendor/nvidia/model/v100/ram/32Gi/interface/sxm", + "description": "nvidia v100 32Gi sxm", + "value": true + } + ] + }, + "hardware-persistent-storage-class": { + "key": "capabilities/storage/1/class", + "type": "option", + "required": false, + "description": "Primary persistent storage class (beta1 HDD, beta2 SSD, beta3 NVMe).", + "values": [ + { + "key": "beta1", + "description": "HDD (beta1)" + }, + { + "key": "beta2", + "description": "SSD (beta2)" + }, + { + "key": "beta3", + "description": "NVMe (beta3)" + } + ] + }, + "hardware-persistent-storage-capability": { + "key": "capabilities/storage/1/persistent", + "type": "boolean", + "required": false, + "description": "True if storage class 1 provides persistent storage." + }, + "hardware-cuda": { + "key": "cuda", + "type": "string", + "required": false, + "description": "CUDA version available on GPU nodes (for example 12.7)." + }, + "datacenter": { + "key": "datacenter", + "type": "string", + "required": false, + "description": "Provider datacenter or site identifier." + }, + "hardware-memory": { + "key": "capabilities/memory", + "type": "option", + "required": true, + "description": "Memory (RAM) type.", + "values": [ + { + "key": "ddr2", + "description": "DDR2" + }, + { + "key": "ddr3", + "description": "DDR3" + }, + { + "key": "ddr3ecc", + "description": "DDR3ECC" + }, + { + "key": "ddr4", + "description": "DDR4" + }, + { + "key": "ddr4ecc", + "description": "DDR4ECC" + }, + { + "key": "ddr5", + "description": "DDR5" + }, + { + "key": "ddr5ecc", + "description": "DDR5ECC" + } + ] + }, + "network-provider": { + "key": "network-provider", + "type": "string", + "required": false, + "description": "Internet service provider." + }, + "network-speed-up": { + "key": "network-speed-up", + "type": "number", + "required": false, + "description": "Upload Bandwidth in mbps." + }, + "network-speed-down": { + "key": "network-speed-down", + "type": "number", + "required": false, + "description": "Download Bandwidth in mbps." + }, + "feat-persistent-storage": { + "key": "feat-persistent-storage", + "type": "boolean", + "required": true, + "description": "True if the provider offers persistent storage." + }, + "feat-shm": { + "key": "feat-shm", + "type": "boolean", + "required": false, + "description": "True if the provider offers shared memory (SHM) via the ram storage class." + }, + "hardware-shm": { + "key": "capabilities/shm", + "type": "multiple-option", + "required": false, + "description": "Shared memory (SHM) capability keys.", + "values": [ + { + "key": "capabilities/storage/2/class", + "description": "SHM storage class", + "value": "ram" + }, + { + "key": "capabilities/storage/2/persistent", + "description": "SHM non-persistent", + "value": "false" + } + ] + }, + "tier": { + "key": "tier", + "type": "option", + "required": false, + "description": "Is this an Akash hosted provider or community hosted?", + "values": [ + { + "key": "akash", + "description": "Akash hosted provider" + }, + { + "key": "community", + "description": "Community hosted provider" } ] }, diff --git a/config/provider-attributes.md b/config/provider-attributes.md index 0f34fc38b4..6e2fa5a946 100644 --- a/config/provider-attributes.md +++ b/config/provider-attributes.md @@ -4,10 +4,11 @@ | ---------------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | | host | string | true | Name of the host. Ex.: 'd3akash.cloud'. | | | email | string | true | Email associated with the provider. | | +| discord-username | string | false | Discord username for provider contact. **Required for audited providers**; you must be in the [Akash Discord](https://discord.gg/akash) with the Provider role. | | | organization | string | true | Name of the organization that owns the provider. | | | website | string | false | Link to the organization's website. | | | status-page | string | false | Link to a status page for the provider. | | -| location-region | option | true | Geo location region of the provider. Based on the United Nations geoscheme. [UN Geoscheme](https://en.wikipedia.org/wiki/United_Nations_geoscheme) | See [Location Region Values](#location-region-values) | +| location-region | option | true | Geo location region of the provider. On-chain key is `location-region`; legacy `region` is not read. [UN Geoscheme](https://en.wikipedia.org/wiki/United_Nations_geoscheme) | See [Location Region Values](#location-region-values) | | country | string | false | Country ISO 3166 Alpha-2 code of the provider. [ISO 3166 Country Codes](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) | | | city | string | false | City 3 letter code of the provider. [Harbor Code](https://www.hh-express.com/en/support/three_code/harbor.html) | | | timezone | option | false | Timezone UTC-12 to UTC+14 of the provider. [Timezone Map](https://www.timeanddate.com/time/map/) | See [Timezone Values](#timezone-values) | @@ -16,17 +17,20 @@ | hardware-cpu | option | true | CPU manufacturer. | intel, amd, arm | | hardware-cpu-arch | option | false | CPU architecture. | x86, x86-64, arm, arm-64 | | hardware-gpu | option | false | GPU manufacturer. | nvidia, amd, intel, xilinx | -| hardware-gpu-model | multiple-option | false | GPU model. | h100, a100, a40, a16, t4, v100, tesla-p4, tesla-p100, tesla-k80, Quadro RTX 4000, Quadro RTX 5000, Quadro RTX 6000, Quadro A2000, Quadro A4000, Quadro A5000, Quadro A6000, rtx-4060, rtx-4060-ti, rtx-4070, rtx-4070-ti, rtx-4080, rtx-4090, rtx-3050, rtx-3060, rtx-3060-ti, rtx-3070, rtx-3070-ti, rtx-3080, rtx-3080-ti, rtx-3090, rtx-3090-ti, gtx-1050, gtx-1050-ti, gtx-1060, gtx-1070, gtx-1070-ti, gtx-1080 | -| hardware-disk | multiple-option | true | Storage type. | hdd, ssd, nvme | +| hardware-gpu-model | multiple-option | false | GPU model. Synced from [provider-configs/devices/pcie/gpus.json](https://github.com/akash-network/provider-configs/blob/main/devices/pcie/gpus.json). | AMD mi100, AMD mi60, Nvidia a100, ... | +| hardware-gpu-capability | multiple-option | false | GPU capability keys (model, RAM, interface). Synced from provider-configs. | Per-model RAM/interface keys | +| hardware-persistent-storage-class | option | false | Primary persistent storage class on `capabilities/storage/1/class`. | beta1 (HDD), beta2 (SSD), beta3 (NVMe) | +| hardware-persistent-storage-capability | boolean | false | Persistent storage on storage class 1 (`capabilities/storage/1/persistent`). | | +| hardware-cuda | string | false | CUDA version on GPU nodes (for example 12.7). | | +| datacenter | string | false | Provider datacenter or site identifier. | | | hardware-memory | option | true | Memory (RAM) type. | ddr2, ddr3, ddr3ecc, ddr4, ddr4ecc, ddr5, ddr5ecc | | network-provider | string | false | Internet service provider. | | | network-speed-up | number | false | Upload Bandwidth in mbps. | | | network-speed-down | number | false | Download Bandwidth in mbps. | | -| feat-persistent-storage | boolean | true | True if the provider offers persistent storage. | | -| feat-persistent-storage-type | option | false | Type of persistent storage offered. | ssd, hdd, nvme | +| feat-persistent-storage | boolean | true | True if the provider offers persistent storage (legacy flag; also use storage class 1 capability keys). | | +| feat-shm | boolean | false | True if the provider offers shared memory (SHM) via the ram storage class. | | +| hardware-shm | multiple-option | false | On-chain SHM capability keys (`capabilities/storage/2/class=ram`, `capabilities/storage/2/persistent=false`). | SHM storage class, SHM non-persistent | | tier | option | false | Is this an Akash hosted provider or community hosted? | akash, community | -| workload-support-chia | boolean | false | Does this provider support Chia plotting? | | -| workload-support-chia-capabilities | option | false | What specific capabilities does the provider support for Chia? | bladebit, madmax, bladebit-disk | | feat-endpoint-ip | boolean | false | Does this provider support leasing of IP addresses? | | | feat-endpoint-custom-domain | boolean | false | Does this provider support custom domains? | | diff --git a/packages/console-api-types/src/schema.d.ts b/packages/console-api-types/src/schema.d.ts index f1775c73ca..9c515ebb63 100644 --- a/packages/console-api-types/src/schema.d.ts +++ b/packages/console-api-types/src/schema.d.ts @@ -48,6 +48,8 @@ export interface paths { address: string | null; denom: string; isTrialing: boolean; + /** @description Minimum USD amount accepted by the next paid top-up for this wallet. */ + topUpMinAmountUsd: number; createdAt: string | null; requires3DS?: boolean; clientSecret?: string | null; @@ -71,6 +73,8 @@ export interface paths { address: string | null; denom: string; isTrialing: boolean; + /** @description Minimum USD amount accepted by the next paid top-up for this wallet. */ + topUpMinAmountUsd: number; createdAt: string | null; requires3DS?: boolean; clientSecret?: string | null; @@ -122,6 +126,8 @@ export interface paths { address: string | null; denom: string; isTrialing: boolean; + /** @description Minimum USD amount accepted by the next paid top-up for this wallet. */ + topUpMinAmountUsd: number; createdAt: string | null; requires3DS?: boolean; clientSecret?: string | null; @@ -364,55 +370,6 @@ export interface paths { patch?: never; trace?: never; }; - "/v1/stripe-webhook": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Stripe Webhook Handler */ - post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "text/plain": string; - }; - }; - responses: { - /** @description Webhook processed successfully */ - 200: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Stripe signature is required */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": { - error: string; - }; - }; - }; - }; - }; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; "/v1/stripe/prices": { parameters: { query?: never; @@ -3897,6 +3854,7 @@ export interface paths { auditedBy: string[]; }[]; host: string | null; + discordUsername: string | null; organization: string | null; statusPage: string | null; locationRegion: string | null; @@ -3909,17 +3867,19 @@ export interface paths { hardwareCpuArch: string | null; hardwareGpuVendor: string | null; hardwareGpuModels: string[] | null; - hardwareDisk: string[] | null; + hardwareGpuCapabilities: string[] | null; + hardwarePersistentStorageClass: string | null; featPersistentStorage: boolean; - featPersistentStorageType: string[] | null; + featShm: boolean; + hardwareShm: string[] | null; + hardwareCuda: string | null; + datacenter: string | null; hardwareMemory: string | null; networkProvider: string | null; networkSpeedDown: number; networkSpeedUp: number; tier: string | null; featEndpointCustomDomain: boolean; - workloadSupportChia: boolean; - workloadSupportChiaCapabilities: string[] | null; featEndpointIp: boolean; }[]; }; @@ -4025,6 +3985,7 @@ export interface paths { auditedBy: string[]; }[]; host: string | null; + discordUsername: string | null; organization: string | null; statusPage: string | null; locationRegion: string | null; @@ -4037,17 +3998,19 @@ export interface paths { hardwareCpuArch: string | null; hardwareGpuVendor: string | null; hardwareGpuModels: string[]; - hardwareDisk: string[]; + hardwareGpuCapabilities: string[]; + hardwarePersistentStorageClass: string | null; featPersistentStorage: boolean; - featPersistentStorageType: string[]; + featShm: boolean; + hardwareShm: string[]; + hardwareCuda: string | null; + datacenter: string | null; hardwareMemory: string | null; networkProvider: string | null; networkSpeedDown: number; networkSpeedUp: number; tier: string | null; featEndpointCustomDomain: boolean; - workloadSupportChia: boolean; - workloadSupportChiaCapabilities: string[]; featEndpointIp: boolean; uptime: { id: string; @@ -4235,6 +4198,20 @@ export interface paths { }[] | null; }; + "discord-username": { + key: string; + /** @enum {string} */ + type: "string" | "number" | "boolean" | "option" | "multiple-option"; + required: boolean; + description: string; + values?: + | { + key: string; + description: string; + value?: unknown; + }[] + | null; + }; organization: { key: string; /** @enum {string} */ @@ -4431,7 +4408,7 @@ export interface paths { }[] | null; }; - "hardware-disk": { + "hardware-gpu-capability": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4445,7 +4422,7 @@ export interface paths { }[] | null; }; - "hardware-memory": { + "hardware-persistent-storage-class": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4459,7 +4436,7 @@ export interface paths { }[] | null; }; - "network-provider": { + "hardware-persistent-storage-capability": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4473,7 +4450,7 @@ export interface paths { }[] | null; }; - "network-speed-up": { + "hardware-cuda": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4487,7 +4464,7 @@ export interface paths { }[] | null; }; - "network-speed-down": { + datacenter: { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4501,7 +4478,7 @@ export interface paths { }[] | null; }; - "feat-persistent-storage": { + "hardware-memory": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4515,7 +4492,7 @@ export interface paths { }[] | null; }; - "feat-persistent-storage-type": { + "network-provider": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4529,7 +4506,7 @@ export interface paths { }[] | null; }; - "workload-support-chia": { + "network-speed-up": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -4543,7 +4520,49 @@ export interface paths { }[] | null; }; - "workload-support-chia-capabilities": { + "network-speed-down": { + key: string; + /** @enum {string} */ + type: "string" | "number" | "boolean" | "option" | "multiple-option"; + required: boolean; + description: string; + values?: + | { + key: string; + description: string; + value?: unknown; + }[] + | null; + }; + "feat-persistent-storage": { + key: string; + /** @enum {string} */ + type: "string" | "number" | "boolean" | "option" | "multiple-option"; + required: boolean; + description: string; + values?: + | { + key: string; + description: string; + value?: unknown; + }[] + | null; + }; + "feat-shm": { + key: string; + /** @enum {string} */ + type: "string" | "number" | "boolean" | "option" | "multiple-option"; + required: boolean; + description: string; + values?: + | { + key: string; + description: string; + value?: unknown; + }[] + | null; + }; + "hardware-shm": { key: string; /** @enum {string} */ type: "string" | "number" | "boolean" | "option" | "multiple-option"; @@ -6837,13 +6856,9 @@ export interface paths { id: number; cpu: { units: { - /** - * @description String-encoded integer value - * @example 1000 - */ val: string; }; - attributes: { + attributes?: { /** * @description Attribute key * @example persistent @@ -6858,13 +6873,9 @@ export interface paths { }; memory: { quantity: { - /** - * @description String-encoded integer value - * @example 1000 - */ val: string; }; - attributes: { + attributes?: { /** * @description Attribute key * @example persistent @@ -6879,13 +6890,9 @@ export interface paths { }; gpu: { units: { - /** - * @description String-encoded integer value - * @example 1000 - */ val: string; }; - attributes: { + attributes?: { /** * @description Attribute key * @example persistent @@ -6905,13 +6912,9 @@ export interface paths { */ name: string; quantity: { - /** - * @description String-encoded integer value - * @example 1000 - */ val: string; }; - attributes: { + attributes?: { /** * @description Attribute key * @example persistent diff --git a/packages/http-sdk/src/git-hub/git-hub-http.service.ts b/packages/http-sdk/src/git-hub/git-hub-http.service.ts index ec58f30d65..b626e2b58b 100644 --- a/packages/http-sdk/src/git-hub/git-hub-http.service.ts +++ b/packages/http-sdk/src/git-hub/git-hub-http.service.ts @@ -15,6 +15,7 @@ type ProviderAttributeSchemaDetail = { export type ProviderAttributesSchema = { host: ProviderAttributeSchemaDetail; email: ProviderAttributeSchemaDetail; + "discord-username": ProviderAttributeSchemaDetail; organization: ProviderAttributeSchemaDetail; website: ProviderAttributeSchemaDetail; tier: ProviderAttributeSchemaDetail; @@ -29,15 +30,18 @@ export type ProviderAttributesSchema = { "hardware-cpu-arch": ProviderAttributeSchemaDetail; "hardware-gpu": ProviderAttributeSchemaDetail; "hardware-gpu-model": ProviderAttributeSchemaDetail; - "hardware-disk": ProviderAttributeSchemaDetail; + "hardware-gpu-capability": ProviderAttributeSchemaDetail; + "hardware-persistent-storage-class": ProviderAttributeSchemaDetail; + "hardware-persistent-storage-capability": ProviderAttributeSchemaDetail; + "hardware-cuda": ProviderAttributeSchemaDetail; + datacenter: ProviderAttributeSchemaDetail; "hardware-memory": ProviderAttributeSchemaDetail; "network-provider": ProviderAttributeSchemaDetail; "network-speed-up": ProviderAttributeSchemaDetail; "network-speed-down": ProviderAttributeSchemaDetail; "feat-persistent-storage": ProviderAttributeSchemaDetail; - "feat-persistent-storage-type": ProviderAttributeSchemaDetail; - "workload-support-chia": ProviderAttributeSchemaDetail; - "workload-support-chia-capabilities": ProviderAttributeSchemaDetail; + "feat-shm": ProviderAttributeSchemaDetail; + "hardware-shm": ProviderAttributeSchemaDetail; "feat-endpoint-ip": ProviderAttributeSchemaDetail; "feat-endpoint-custom-domain": ProviderAttributeSchemaDetail; };