import {z} from 'zod' export type GetApiBillingBillingHistoryMinerColdkeyArgs = {miner_coldkey: string}; export type GetApiBillingBillingHistoryMinerColdkeyOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const reportedGpuDetail = z.object({name: z.string(), cuda: z.string(), power_limit: z.number().int().nullable().optional(), power_default_limit: z.number().int().nullable().optional(), power_max_limit: z.number().int().nullable().optional(), power_min_limit: z.number().int().nullable().optional(), graphics_speed: z.number().int(), memory_speed: z.number().int().nullable().optional(), pcie: z.number().int().nullable().optional(), pcie_speed: z.number().int().nullable().optional(), capacity: z.number().int(), gpu_utilization: z.number().nullable().optional(), memory_utilization: z.number().nullable().optional(), memory_used_mb: z.number().nullable().optional(), temperature: z.number().nullable().optional(), uuid: z.string(), power_host_limit: z.number().int().nullable().optional()}); export const gpuSpec = z.object({count: z.number().int(), driver: z.string().nullable().optional(), cuda_driver: z.number().int().nullable().optional(), details: z.array(reportedGpuDetail)}); export const cpuSpec = z.object({count: z.number().int(), model: z.string(), utilization: z.number().nullable().optional()}); export const memorySpec = z.object({total: z.number(), used: z.number(), free: z.number(), available: z.number().nullable().optional(), utilization: z.number().nullable().optional()}); export const hardDiskSpec = z.object({total: z.number().int(), used: z.number().int(), free: z.number().int(), utilization: z.number().nullable().optional(), images: z.number().int().nullable().optional(), containers: z.number().int().nullable().optional(), volumes: z.number().int().nullable().optional(), disk_type: z.enum(["nvme", "ssd", "hdd", "unknown"]).nullable().optional(), engy_cache_used_gb: z.number().int().nullable().optional(), engy_cache_released_gb: z.number().int().nullable().optional(), by_volume: z.record(z.string(), z.number().int()).nullable().optional(), by_container: z.record(z.string(), z.number().int()).nullable().optional()}); export const networkSpec = z.object({upload_speed: z.number().nullable().optional(), download_speed: z.number().nullable().optional(), verifyx_download_speed: z.number().nullable().optional(), verifyx_upload_speed: z.number().nullable().optional(), ema_download_speed: z.number().nullable().optional(), ema_upload_speed: z.number().nullable().optional(), ema_verifyx_download_speed: z.number().nullable().optional(), ema_verifyx_upload_speed: z.number().nullable().optional()}); export const checksums = z.object({nvidia_smi: z.string().nullable().optional(), libnvidia_ml: z.string().nullable().optional(), docker: z.string().nullable().optional()}); export const dockerSpec = z.object({version: z.string().nullable().optional(), container_id: z.string().nullable().optional(), containers: z.array(z.record(z.string(), z.unknown())).nullable().optional(), host_cpu_percent: z.number().nullable().optional()}); export const splitDiskSpec = z.object({free_split_count: z.number().int(), listable_split_count: z.number().int(), listable_gpu_count: z.number().int().nullable().optional()}); export const gpuMetrics = z.object({device: z.string().nullable().optional(), cc: z.string().nullable().optional(), sm_count: z.number().int().nullable().optional(), clock_mhz: z.number().int().nullable().optional(), vram_gb: z.number().nullable().optional(), n: z.number().int().nullable().optional(), fp32_tflops: z.number().nullable().optional(), fp32_median_tflops: z.number().nullable().optional(), fp32_cov_pct: z.number().nullable().optional()}); export const infinibandPortSpec = z.object({device: z.string().nullable().optional(), port: z.string().nullable().optional(), node_guid: z.string().nullable().optional(), sys_image_guid: z.string().nullable().optional(), link_layer: z.string().nullable().optional(), state: z.string().nullable().optional(), phys_state: z.string().nullable().optional(), rate: z.string().nullable().optional(), lid: z.string().nullable().optional(), sm_lid: z.string().nullable().optional(), pkey: z.string().nullable().optional(), gids: z.array(z.string()).nullable().optional(), driver: z.string().nullable().optional()}); export const roceLinkMeasurementSpec = z.object({peer_executor_uuid: z.string(), peer_address: z.string(), gigabits_per_second: z.number().nullable().optional(), measured_at: z.string()}); export const providerSideLoadSpec = z.object({cpu_cores: z.number().nullable().optional(), disk_kb: z.number().int().nullable().optional()}); export const diskPressureSpec = z.object({syncfs_seconds: z.number().nullable().optional(), syncfs_timed_out: z.boolean().nullable().optional(), device: z.string().nullable().optional(), mb_per_s: z.number().nullable().optional(), util_percent: z.number().nullable().optional(), await_ms: z.number().nullable().optional(), dirty_mb: z.number().int().nullable().optional(), writeback_mb: z.number().int().nullable().optional(), psi_io_full_avg10: z.number().nullable().optional(), pressure: z.boolean().nullable().optional(), reason: z.string().nullable().optional(), error: z.string().nullable().optional()}); export const diskHealthSpec = z.object({docker_root_dir: z.string().nullable().optional(), read_only_mounts: z.array(z.string()).nullable().optional(), write_probe: z.string().nullable().optional(), write_probe_error: z.string().nullable().optional()}); export const interconnectSpec = z.object({gpu_count: z.number().int().nullable().optional(), gpu_pairs: z.number().int().nullable().optional(), nvlink: z.boolean().nullable().optional(), nvlink_links: z.number().int().nullable().optional(), nvlink_pairs: z.number().int().nullable().optional(), nvlink_active_links: z.number().int().nullable().optional(), pcie_class: z.string().nullable().optional(), p2p: z.boolean().nullable().optional(), p2p_pairs: z.number().int().nullable().optional(), p2p_ok_pairs: z.number().int().nullable().optional(), matrix: z.array(z.array(z.string())).nullable().optional()}); export const gpuActivitySpec = z.object({index: z.number().int(), uuid: z.string().nullable().optional(), util_pct: z.number().nullable().optional(), vram_used_mb: z.number().nullable().optional(), vram_total_mb: z.number().nullable().optional(), no_pod: z.boolean()}); export const machineSpecs = z.object({gpu: gpuSpec, cpu: cpuSpec, ram: memorySpec, hard_disk: hardDiskSpec.nullable().optional(), os: z.string().nullable().optional(), kernel: z.string().nullable().optional(), kernel_scrape_error: z.string().nullable().optional(), network: networkSpec.nullable().optional(), md5_checksums: checksums.nullable().optional(), docker: dockerSpec.nullable().optional(), gpu_processes: z.array(z.record(z.string(), z.unknown())).nullable().optional(), available_port_maps: z.array(z.array(z.unknown())).nullable().optional(), available_port_count: z.number().int().nullable().optional(), split_disk: splitDiskSpec.nullable().optional(), sysbox_runtime: z.boolean().nullable().optional(), sysbox_version: z.string().nullable().optional(), storage_limit_supported: z.boolean().nullable().optional(), idle_disk_write_mb_per_s: z.number().nullable().optional(), idle_disk_write_measured_at: z.number().nullable().optional(), ncu_profiling_access: z.string().nullable().optional(), ncu_profiling_scrape_error: z.string().nullable().optional(), container_cap_eff: z.string().nullable().optional(), nvidiactl_owner_uid: z.number().int().nullable().optional(), power_cap_probe_error: z.string().nullable().optional(), boot_id: z.string().nullable().optional(), egress_ip: z.string().nullable().optional(), port_range: z.string().nullable().optional(), port_mappings: z.string().nullable().optional(), verified_ports: z.array(z.number().int()).nullable().optional(), tdx_attestation_passed: z.boolean().nullable().optional(), tdx_host_supported: z.boolean().nullable().optional(), is_spot: z.boolean().nullable().optional(), gpu_metrics: gpuMetrics.nullable().optional(), infiniband_ports: z.array(infinibandPortSpec).nullable().optional(), infiniband_scrape_error: z.string().nullable().optional(), roce_link_measurements: z.array(roceLinkMeasurementSpec).nullable().optional(), provider_side_load: providerSideLoadSpec.nullable().optional(), disk_pressure: diskPressureSpec.nullable().optional(), kernel_gpu_uuids: z.array(z.string()).nullable().optional(), kernel_gpu_uuids_last_seen: z.array(z.string()).nullable().optional(), disk_health: diskHealthSpec.nullable().optional(), disk_health_scrape_error: z.string().nullable().optional(), interconnect: interconnectSpec.nullable().optional(), interconnect_scrape_error: z.string().nullable().optional(), gpu_activity: z.array(gpuActivitySpec).nullable().optional(), job_batch_id: z.string().nullable().optional(), gpu_power_cap_capable: z.boolean().nullable()}); export const billingHistoryForMinerResponse = z.object({billing_day: z.string(), amount: z.number(), miner_amount: z.number(), validator_hotkey: z.string(), is_declined_for_miner_payment: z.boolean().optional(), declined_reason: z.string().nullable().optional(), executor_id_in_subnet: z.string().nullable().optional(), executor_price_per_gpu: z.number().nullable().optional(), executor_gpu_count: z.number().int().nullable().optional(), executor_specs: machineSpecs.nullable().optional()}); export const getApiBillingBillingHistoryMinerColdkeyResponse = z.array(billingHistoryForMinerResponse); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Get the billing history for a provider * * GET /billing/billing-history/{miner_coldkey} */ export const getApiBillingBillingHistoryMinerColdkey = async (args: GetApiBillingBillingHistoryMinerColdkeyArgs, options: GetApiBillingBillingHistoryMinerColdkeyOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/billing/billing-history/${encodeURIComponent(String(args.miner_coldkey))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiBillingBillingHistoryMinerColdkeyResponse, await res.json()) };