Download scripts/dev.ts from Jadewave/trans6: direct link, hf CLI and curl.
- Browser
- Download file 3.48 kB
-
https://huggingface.co/spaces/Jadewave/trans6/resolve/main/scripts/dev.ts
- Command line
-
hf download hf://spaces/Jadewave/trans6/scripts/dev.ts
-
curl -L -o dev.ts https://huggingface.co/spaces/Jadewave/trans6/resolve/main/scripts/dev.ts
3.48 kB
| // @ts-nocheck | |
| import os from 'node:os' | |
| import path from 'node:path' | |
| import { readdir, access } from 'node:fs/promises' | |
| import { exec as execCallback, spawn } from 'node:child_process' | |
| import { promisify } from 'node:util' | |
| const exec = promisify(execCallback) | |
| async function pathExists(target: string) { | |
| try { | |
| await access(target) | |
| return true | |
| } catch { | |
| return false | |
| } | |
| } | |
| async function checkNvcc() { | |
| try { | |
| await exec('nvcc --version', { env: process.env }) | |
| } catch { | |
| throw new Error('nvcc not found') | |
| } | |
| } | |
| function sortVersionsDesc(versions: string[]) { | |
| return versions.sort((a, b) => { | |
| const verA = parseInt(a.replace('v', '').replace('.', '')) | |
| const verB = parseInt(b.replace('v', '').replace('.', '')) | |
| return verB - verA | |
| }) | |
| } | |
| async function setupCuda() { | |
| const cudaPath = process.env.CUDA_PATH | |
| if (cudaPath) { | |
| const binPath = path.join(cudaPath, 'bin') | |
| process.env.PATH = `${binPath}${path.delimiter}${process.env.PATH}` | |
| return | |
| } | |
| const cudaRoot = 'C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA' | |
| const versions = await readdir(cudaRoot).catch(() => []) | |
| sortVersionsDesc(versions) | |
| for (const version of versions) { | |
| if (version.startsWith('v')) { | |
| const binPath = path.join(cudaRoot, version, 'bin') | |
| if (await pathExists(binPath)) { | |
| process.env.PATH = `${binPath}${path.delimiter}${process.env.PATH}` | |
| process.env.CUDA_PATH = path.join(cudaRoot, version) | |
| return | |
| } | |
| } | |
| } | |
| throw new Error( | |
| 'NVCC not found. Please install the CUDA Toolkit from https://developer.nvidia.com/cuda-downloads', | |
| ) | |
| } | |
| async function setupCl() { | |
| const vsRoots = [ | |
| 'C:/Program Files/Microsoft Visual Studio', | |
| 'C:/Program Files (x86)/Microsoft Visual Studio', | |
| ] | |
| const editions = ['Community', 'Professional', 'Enterprise', 'BuildTools'] | |
| for (const vsRoot of vsRoots) { | |
| const vsVersions = await readdir(vsRoot).catch(() => []) | |
| for (const vsVersion of vsVersions) { | |
| for (const edition of editions) { | |
| const vcPath = path.join(vsRoot, vsVersion, edition, 'VC/Tools/MSVC') | |
| if (await pathExists(vcPath)) { | |
| const msvcVersions = await readdir(vcPath) | |
| for (const msvcVersion of msvcVersions) { | |
| const binPath = path.join(vcPath, msvcVersion, 'bin/Hostx64/x64') | |
| if (await pathExists(binPath)) { | |
| process.env.PATH = `${binPath}${path.delimiter}${process.env.PATH}` | |
| return | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| throw new Error( | |
| 'cl.exe not found. Please install Visual Studio with C++ build tools from https://visualstudio.microsoft.com/downloads/', | |
| ) | |
| } | |
| async function dev() { | |
| if (os.type() === 'Windows_NT') { | |
| // First, try to check if nvcc is available | |
| await checkNvcc() | |
| // If not found, try to set up CUDA paths | |
| .catch(async () => { | |
| await setupCuda() | |
| // Check again after setup | |
| await checkNvcc() | |
| }) | |
| // Setup cl.exe path | |
| await setupCl() | |
| } | |
| const args = process.argv.slice(2) | |
| if (args.length === 0) { | |
| throw new Error('No command provided') | |
| } | |
| const proc = spawn(args[0], args.slice(1), { | |
| stdio: 'inherit', | |
| shell: false, | |
| env: process.env, | |
| }) | |
| proc.on('error', (err) => { | |
| throw err | |
| }) | |
| proc.on('exit', (code) => { | |
| process.exit(code) | |
| }) | |
| } | |
| dev().catch((err) => { | |
| process.stderr.write(`Error: ${err.message} \n`) | |
| process.exit(1) | |
| }) | |