Huggingface.js documentation
đ€ API du Hugging Face Hub
đ€ API du Hugging Face Hub
Utilitaires officiels pour utiliser lâAPI du Hugging Face Hub.
Installer
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"Utilisation
Pour certains appels, vous devez créer un compte et générer un jeton d'accÚs.
Apprenez Ă trouver des modĂšles gratuits Ă l'aide du package hub dans ce tutoriel interactif.
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"),
// Local folder URL
pathToFileURL("./models"),
// 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);
}
// Edit a file in place, without downloading/uploading its unchanged data
const file = await hub.downloadFile({ repo, path: "myfile.bin", accessToken: "hf_..." });
await hub.uploadFile({
repo,
accessToken: "hf_...",
file: {
path: "myfile.bin",
originalContent: file,
edits: [{
// Replace bytes [0, 4)
start: 0,
end: 4,
content: new Blob(["new prefix"])
}, {
// Append at the end
start: file.size,
end: file.size,
content: new Blob(["suffix"])
}]
}
});
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_..." });Buckets
Les buckets de stockage sont des espaces de stockage mutables et non versionnĂ©s sur le Hub. Utilisez un prĂ©fixe buckets/ (ou { type: "bucket", name }) avec les mĂȘmes fonctions :
const bucket = "buckets/myname/my-bucket";
await hub.createRepo({ repo: bucket, accessToken: "hf_..." });
await hub.uploadFiles({ repo: bucket, accessToken: "hf_...", files: [pathToFileURL("./checkpoints")] });
for await (const fileInfo of hub.listFiles({ repo: bucket, recursive: true, accessToken: "hf_..." })) {
console.log(fileInfo.path, fileInfo.uploadedAt);
}
// Copy files from a model or dataset repo into a bucket server-side, without downloading them
await hub.copyFolder({
source: { repo: { type: "dataset", name: "myname/my-dataset" }, path: "data" },
destination: { repo: bucket, path: "data" },
accessToken: "hf_...",
});Utilisation de l'interface en ligne de commande
Vous pouvez utiliser @huggingface/hub en mode CLI pour téléverser et télécharger des fichiers et des dossiers vers/depuis votre dépÎt.
npx @huggingface/hub upload coyotte508/test-model .
npx @huggingface/hub upload datasets/coyotte508/test-dataset .
# Same thing
npx @huggingface/hub upload --repo-type dataset coyotte508/test-dataset .
# Upload new data with 0 history in a separate branch
npx @huggingface/hub branch create coyotte508/test-model release --empty
npx @huggingface/hub upload coyotte508/test-model . --revision release
# Download files to the current directory (or --local-dir)
npx @huggingface/hub download coyotte508/test-model config.json
npx @huggingface/hub download coyotte508/test-model config.json README.md --local-dir ./test-model
# Download an entire repo, optionally filtered with --include / --exclude
npx @huggingface/hub download coyotte508/test-model --local-dir ./test-model
npx @huggingface/hub download --repo-type dataset coyotte508/test-dataset --include "*.json"
npx @huggingface/hub --help
npx @huggingface/hub upload --help
npx @huggingface/hub download --helpVous pouvez également l'installer globalement avec npm install -g @huggingface/hub. Vous pouvez ensuite faire :
hfjs upload coyotte508/test-model . hfjs branch create --repo-type dataset coyotte508/test-dataset release --empty hfjs upload --repo-type dataset coyotte508/test-dataset . --revision release hfjs download coyotte508/test-model config.json hfjs download coyotte508/test-model --local-dir ./test-model hfjs --help hfjs upload --help hfjs help jobs hfjs download --help
Connexion OAuth
Il est possible de se connecter en utilisant OAuth (« Se connecter avec HF »).
Cela vous permettra dâobtenir un jeton dâaccĂšs pour utiliser certaines parties de lâAPI, en fonction des Ă©tendues dĂ©finies dans lâespace ou lâapplication 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);Consultez la démo : https://huggingface.co/spaces/huggingfacejs/client-side-oauth
Cache Hugging Face
Le package @huggingface/hub fournit des fonctionnalités de base pour analyser le répertoire de cache. En savoir plus sur Manage huggingface_hub cache-system.
scanCacheDir
Vous pouvez obtenir la liste des dépÎts en cache à l'aide de la fonction scanCacheDir.
import { scanCacheDir } from "@huggingface/hub";
const result = await scanCacheDir();
console.log(result);Note : cela ne fonctionne pas dans le navigateur
downloadFileToCacheDir
Vous pouvez mettre en cache un fichier d'un dépÎt à l'aide de la fonction downloadFileToCacheDir.
import { downloadFileToCacheDir } from "@huggingface/hub";
const file = await downloadFileToCacheDir({
repo: 'foo/bar',
path: 'README.md'
});
console.log(file);Note : cela ne fonctionne pas dans le navigateur
snapshotDownload
Vous pouvez télécharger un dépÎt entier à une révision donnée dans le répertoire de cache à l'aide de la fonction snapshotDownload.
import { snapshotDownload } from "@huggingface/hub";
const directory = await snapshotDownload({
repo: 'foo/bar',
});
console.log(directory);Le code utilise en interne la fonction downloadFileToCacheDir.
Note : cela ne fonctionne pas dans le navigateur
Considérations relatives aux performances
Lors de la téléversement de fichiers volumineux, vous pouvez exécuter les appels commit dans un worker afin de déléguer les calculs sha256.
Les ressources distantes et les fichiers locaux doivent ĂȘtre passĂ©s sous forme de URL chaque fois que câest possible, afin quâils puissent ĂȘtre chargĂ©s paresseusement par morceaux pour rĂ©duire lâutilisation de la RAM. Passer un File dans le contexte du navigateur est acceptable, car il se comporte nativement comme un Blob.
En interne, @huggingface/hub utilise une implémentation de blob paresseuse pour charger le fichier.
Pour modifier un fichier existant, privilĂ©giez une opĂ©ration de commit edit en utilisant le blob renvoyĂ© par downloadFile comme originalContent : seules les rĂ©gions modifiĂ©es sont tĂ©lĂ©chargĂ©es, re-chunkĂ©es et hachĂ©es. Pour des ajouts rĂ©pĂ©tĂ©s au mĂȘme fichier, passez un rangeEditCache: new Map() partagĂ© aux appels commit afin dâĂ©viter Ă©galement les allers-retours de mĂ©tadonnĂ©es de stockage.
Dépendances
@huggingface/tasks: Typages uniquement