UNPKG

inference-server

Version:

Libraries and server to build AI applications. Adapters to various native bindings allowing local inference. Integrate it with your application, or use as a microservice.

51 lines 2.49 kB
import path from 'node:path'; /** * Resolve a model file/url to an absolute path to either a file or directory. * @param url - Optional URL to the model file. Location will be derived from it. * @param filePath - Optional relative (to modelsCachePath) or absolute file path that short-circuits resolution. * @param modelsCachePath - The path to the models cache directory. * @returns The abs file path on the local filesystem. * @throws If the model location could not be resolved. */ export function resolveModelFileLocation({ url, filePath, modelsCachePath }) { if (filePath) { // immediately return if an absolute path is provided if (path.isAbsolute(filePath)) { return filePath; } else { return path.join(modelsCachePath, filePath); } } if (url) { const parsedUrl = new URL(url); let destinationPath = filePath; // support branches for huggingface URLs if (parsedUrl.hostname === 'huggingface.co' && !destinationPath) { const pathnameSegments = parsedUrl.pathname.split('/'); if (pathnameSegments[1] === 'datasets') { const repoOrg = pathnameSegments[2]; const repoName = pathnameSegments[3]; // make sure theres no minus in the branch name const branch = (pathnameSegments[5] || 'main').replace(/-/g, ''); const trailingPath = pathnameSegments.slice(6).join('/'); destinationPath = path.join(modelsCachePath, parsedUrl.hostname, 'datasets', repoOrg, `${repoName}-${branch}`, trailingPath); } else { const repoOrg = pathnameSegments[1]; const repoName = pathnameSegments[2]; const branch = (pathnameSegments[4] || 'main').replace(/-/g, ''); const trailingPath = pathnameSegments.slice(5).join('/'); destinationPath = path.join(modelsCachePath, parsedUrl.hostname, repoOrg, `${repoName}-${branch}`, trailingPath); } } // otherwise, use the hostname and last path segment if (!destinationPath) { const fileName = parsedUrl.pathname.split('/').pop(); destinationPath = path.join(modelsCachePath, parsedUrl.hostname, fileName || ''); } return destinationPath; } throw new Error('Failed to resolve model location'); } //# sourceMappingURL=resolveModelFileLocation.js.map