Huggingface.js documentation
🤗 واجهة برمجة تطبيقات Hugging Face Hub
🤗 واجهة برمجة تطبيقات Hugging Face Hub
أدوات رسمية لاستخدام واجهة برمجة تطبيقات Hugging Face Hub.
التثبيت
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"),
// 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_..." });الدلاء
حاويات التخزين هي تخزين قابل للتعديل وغير مُنظَّم بالإصدارات على Hub. استخدم بادئة buckets/ (أو { type: "bucket", name }) مع نفس الدوال:
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_...",
});استخدام سطر الأوامر
يمكنك استخدام @huggingface/hub في وضع سطر الأوامر لرفع الملفات والمجلدات إلى مستودعك أو تنزيلها منه.
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 --helpيمكنك أيضًا التثبيت على مستوى النظام باستخدام npm install -g @huggingface/hub. بعد ذلك يمكنك تنفيذ ما يلي:
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
تسجيل الدخول عبر OAuth
من الممكن تسجيل الدخول باستخدام OAuth (“تسجيل الدخول عبر HF”).
سيُمكّنك هذا من الحصول على رمز وصول (access token) لاستخدام بعض واجهات برمجة التطبيقات (API)، وذلك اعتماداً على نطاقات الصلاحيات (scopes) المحددة داخل المساحة (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.
scanCacheDir
يمكنك الحصول على قائمة المستودعات المخزنة مؤقتًا باستخدام الدالة scanCacheDir.
import { scanCacheDir } from "@huggingface/hub";
const result = await scanCacheDir();
console.log(result);ملاحظة: هذا لا يعمل في المتصفح
downloadFileToCacheDir
يمكنك تخزين ملف من مستودع مؤقتًا باستخدام الدالة downloadFileToCacheDir.
import { downloadFileToCacheDir } from "@huggingface/hub";
const file = await downloadFileToCacheDir({
repo: 'foo/bar',
path: 'README.md'
});
console.log(file);ملاحظة: هذا لا يعمل في المتصفح
snapshotDownload
يمكنك تنزيل مستودع كامل عند إصدار معيّن في مجلد التخزين المؤقت باستخدام الدالة snapshotDownload.
import { snapshotDownload } from "@huggingface/hub";
const directory = await snapshotDownload({
repo: 'foo/bar',
});
console.log(directory);يستخدم الكود داخلياً دالة downloadFileToCacheDir.
ملاحظة: هذا لا يعمل في المتصفح
اعتبارات الأداء
عند رفع ملفات كبيرة، قد ترغب في تنفيذ استدعاءات commit داخل عامل (worker) لتفريغ عمليات حساب sha256.
يجب تمرير الموارد عن بُعد والملفات المحلية على شكل URL كلما أمكن ذلك، حتى يمكن تحميلها بشكل كسول على شكل مقاطع لتقليل استهلاك ذاكرة الوصول العشوائي. أما تمرير File داخل سياق المتصفح فهو مقبول، لأنه يتصرف بشكل أصلي على أنه Blob.
في الخلفية، يستخدم @huggingface/hub تنفيذًا كسولًا للـ blob لتحميل الملف.
لتحرير ملف موجود، يُفضَّل استخدام عملية edit مع تمرير blob المُعاد بواسطة downloadFile كـoriginalContent: إذ يتم تنزيل المناطق المحرَّرة فقط، وإعادة تقسيمها إلى أجزاء وحساب قيم التجزئة الخاصة بها. أما في حالة الإضافة المتكررة إلى نفس الملف، فمرِّر rangeEditCache: new Map() مشتركًا إلى استدعاءات commit لتخطي أيضًا عمليات ذهاب وإياب بيانات الوصف التخزينية.
التبعيات
@huggingface/tasks: أنواع فقط