Skip to content
32 changes: 21 additions & 11 deletions src/bindings/utils/compileLLamaCpp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,44 +382,54 @@ function getPrebuiltBinariesPackageDirectoryForBuildOptions(buildOptions: BuildO
}
}

async function loadModule(modulePath: string) {
if (typeof require !== "undefined" && typeof module !== "undefined" && module.exports) {
// CommonJS
return require(modulePath);
} else {
// ESM
return import(modulePath);
}
}

if (buildOptions.platform === "mac") {
if (buildOptions.arch === "arm64" && buildOptions.gpu === "metal")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/mac-arm64-metal"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/mac-arm64-metal"));
else if (buildOptions.arch === "x64" && buildOptions.gpu === false)
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/mac-x64"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/mac-x64"));
} else if (buildOptions.platform === "linux") {
if (buildOptions.arch === "x64") {
if (buildOptions.gpu === "cuda")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/linux-x64-cuda"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/linux-x64-cuda"));
else if (buildOptions.gpu === "vulkan")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/linux-x64-vulkan"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/linux-x64-vulkan"));
else if (buildOptions.gpu === false)
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/linux-x64"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/linux-x64"));
} else if (buildOptions.arch === "arm64")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/linux-arm64"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/linux-arm64"));
else if (buildOptions.arch === "arm")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/linux-armv7l"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/linux-armv7l"));
} else if (buildOptions.platform === "win") {
if (buildOptions.arch === "x64") {
if (buildOptions.gpu === "cuda")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/win-x64-cuda"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/win-x64-cuda"));
else if (buildOptions.gpu === "vulkan")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/win-x64-vulkan"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/win-x64-vulkan"));
else if (buildOptions.gpu === false)
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/win-x64"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/win-x64"));
} else if (buildOptions.arch === "arm64")
// @ts-ignore
return getBinariesPathFromModules(() => import("@node-llama-cpp/win-arm64"));
return getBinariesPathFromModules(() => loadModule("@node-llama-cpp/win-arm64"));
}

return null;
Expand Down