🤗 Hugging Face Hub API
使用 Hugging Face Hub API 的官方工具。
安装
pnpm add @huggingface/hub npm add @huggingface/hub yarn add @huggingface/hub
Deno
// esm.sh
import { uploadFiles, listModels } from "https://esm.sh/@huggingface/hub"
// or npm:
import { uploadFiles, listModels } from "npm:@huggingface/hub"
使用
对于某些调用,您需要创建一个帐户并生成一个访问令牌。
了解如何使用 hub 包在此交互式教程中查找免费模型。
import * as hub from "@huggingface/hub";
import type { RepoDesignation } from "@huggingface/hub";
const repo: RepoDesignation = { type: "model", name: "myname/some-model" };
const {name: username} = await hub.whoAmI({accessToken: "hf_..."});
for await (const model of hub.listModels({search: {owner: username}, accessToken: "hf_..."})) {
console.log("My model:", model);
}
const specificModel = await hub.modelInfo({name: "openai-community/gpt2"});
await hub.checkRepoAccess({repo, accessToken: "hf_..."});
await hub.createRepo({ repo, accessToken: "hf_...", license: "mit" });
await hub.uploadFiles({
repo,
accessToken: "hf_...",
files: [
// path + blob content
{
path: "file.txt",
content: new Blob(["Hello World"]),
},
// Local file URL
pathToFileURL("./pytorch-model.bin"),
// Web URL
new URL("https://huggingface.co/xlm-roberta-base/resolve/main/tokenizer.json"),
// Path + Web URL
{
path: "myfile.bin",
content: new URL("https://huggingface.co/bert-base-uncased/resolve/main/pytorch_model.bin")
}
// Can also work with native File in browsers
],
});
// or
for await (const progressEvent of await hub.uploadFilesWithProgress({
repo,
accessToken: "hf_...",
files: [
...
],
})) {
console.log(progressEvent);
}
await hub.deleteFile({repo, accessToken: "hf_...", path: "myfile.bin"});
await (await hub.downloadFile({ repo, path: "README.md" })).text();
for await (const fileInfo of hub.listFiles({repo})) {
console.log(fileInfo);
}
await hub.deleteRepo({ repo, accessToken: "hf_..." });
OAuth 登录
可以使用 OAuth 登录(“使用 HF 登录”)。
这将允许您获得一个访问令牌以使用某些 API,具体取决于 Space 或 OAuth 应用程序中设置的范围。
import { oauthLoginUrl, oauthHandleRedirectIfPresent } from "@huggingface/hub";
const oauthResult = await oauthHandleRedirectIfPresent();
if (!oauthResult) {
// If the user is not logged in, redirect to the login page
window.location.href = await oauthLoginUrl();
}
// You can use oauthResult.accessToken, oauthResult.accessTokenExpiresAt and oauthResult.userInfo
console.log(oauthResult);
查看演示:https://huggingface.co/spaces/huggingfacejs/client-side-oauth
Hugging face 缓存
@huggingface/hub
包提供了扫描缓存目录的基本功能。了解更多关于管理 huggingface_hub 缓存系统。
import { scanCacheDir } from "@huggingface/hub";
const result = await scanCacheDir();
console.log(result);
请注意,缓存目录仅由 Python 和 Rust 库创建和使用。使用 @huggingface/hub
包下载文件不会使用缓存目录。
性能注意事项
上传大型文件时,您可能希望在工作线程中运行 commit
调用,以卸载 sha256 计算。
只要有可能,远程资源和本地文件都应作为 URL
传递,以便可以分块延迟加载以减少 RAM 使用量。在浏览器的上下文中传递 File
是可以的,因为它本身的行为类似于 Blob
。
在后台,@huggingface/hub
使用延迟 blob 实现来加载文件。
依赖项
@huggingface/tasks
:仅限类型定义