UNPKG

@huggingface/hub

Version:

Utilities to interact with the Hugging Face hub

66 lines (61 loc) 1.8 kB
import { HUB_URL } from "../consts"; import { createApiError } from "../error"; import type { CredentialsParams, RepoDesignation } from "../types/public"; import { checkCredentials } from "../utils/checkCredentials"; import { toRepoId } from "../utils/toRepoId"; /** * @returns null when the file doesn't exist */ export async function downloadFile( params: { repo: RepoDesignation; path: string; /** * If true, will download the raw git file. * * For example, when calling on a file stored with Git LFS, the pointer file will be downloaded instead. */ raw?: boolean; /** * An optional Git revision id which can be a branch name, a tag, or a commit hash. * * @default "main" */ revision?: string; /** * Fetch only a specific part of the file */ range?: [number, number]; hubUrl?: string; /** * Custom fetch function to use instead of the default one, for example to use a proxy or edit headers. */ fetch?: typeof fetch; } & Partial<CredentialsParams> ): Promise<Response | null> { const accessToken = checkCredentials(params); const repoId = toRepoId(params.repo); const url = `${params.hubUrl ?? HUB_URL}/${repoId.type === "model" ? "" : `${repoId.type}s/`}${repoId.name}/${ params.raw ? "raw" : "resolve" }/${encodeURIComponent(params.revision ?? "main")}/${params.path}`; const resp = await (params.fetch ?? fetch)(url, { headers: { ...(accessToken ? { Authorization: `Bearer ${accessToken}`, } : {}), ...(params.range ? { Range: `bytes=${params.range[0]}-${params.range[1]}`, } : {}), }, }); if (resp.status === 404 && resp.headers.get("X-Error-Code") === "EntryNotFound") { return null; } else if (!resp.ok) { throw await createApiError(resp); } return resp; }