Hub Python Library documentation
Migrasi ke huggingface_hub v1.0
Migrasi ke huggingface_hub v1.0
Rilis v1.0 merupakan tonggak penting bagi pustaka huggingface_hub. Rilis ini menandai komitmen kami terhadap stabilitas API dan kematangan pustaka. Kami telah melakukan beberapa peningkatan dan perubahan yang bersifat merusak (breaking changes) untuk membuat pustaka ini lebih tangguh dan lebih mudah digunakan.
Panduan ini ditujukan untuk membantu Anda memigrasikan kode yang sudah ada ke versi baru. Jika Anda memiliki pertanyaan atau umpan balik, silakan beri tahu kami dengan membuka masalah di GitHub.
Python 3.9+
huggingface_hub sekarang membutuhkan Python 3.9 atau lebih tinggi. Python 3.8 tidak lagi didukung.
Migrasi HTTPX
Perpustakaan huggingface_hub sekarang menggunakan httpx alih-alih requests untuk permintaan HTTP. Perubahan ini dilakukan untuk meningkatkan kinerja dan mendukung permintaan sinkron dan asinkron dengan cara yang sama. Oleh karena itu, kami menghapus dependensi requests dan aiohttp.
Perubahan yang merusak
Ini adalah perubahan besar yang memengaruhi seluruh pustaka. Meskipun kami telah berusaha membuat perubahan ini se-transparan mungkin, Anda mungkin perlu memperbarui kode Anda dalam beberapa kasus. Berikut adalah daftar perubahan yang merusak (breaking changes) yang diperkenalkan dalam proses tersebut:
- Konfigurasi proxy: proxy “per method” tidak lagi didukung. Proxy harus dikonfigurasi secara global menggunakan variabel lingkungan
HTTP_PROXYdanHTTPS_PROXY. - Backend HTTP kustom: Fungsi
configure_http_backendtelah dihapus. Anda sekarang harus menggunakan set_client_factory() dan set_async_client_factory() untuk mengonfigurasi klien HTTP. - Penanganan error: error HTTP tidak lagi diwarisi dari
requests.HTTPError, melainkan darihttpx.HTTPError. Kami merekomendasikan untuk menangkap HfHubHTTPError (diimpor denganfrom huggingface_hub.utils import HfHubHTTPError), yang merupakan subkelas darirequests.HTTPErrordi v0.x dan darihttpx.HTTPErrordi v1.x. Menangkap dari errorhuggingface_hubmemastikan kode Anda kompatibel dengan versi lama dan baru dari pustaka ini. - SSLError:
httpxtidak memiliki konsepSSLError. Sekarang ini adalahhttpx.ConnectErrorgenerik. LocalEntryNotFoundError: Kesalahan ini tidak lagi mewarisi dariHTTPError. Kami kini mendefinisikanEntryNotFoundError(baru) yang diwarisi oleh keduaLocalEntryNotFoundError(jika file tidak ditemukan di cache lokal) danRemoteEntryNotFoundError(jika file tidak ditemukan di repo di Hub). Hanya kesalahan remote yang mewarisi dariHTTPError.InferenceClient:InferenceClientkini dapat digunakan sebagai context manager. Hal ini sangat berguna saat streaming token dari model bahasa untuk memastikan koneksi ditutup dengan benar.AsyncInferenceClient: Parametertrust_envtelah dihapus dari konstruktorAsyncInferenceClient. Variabel lingkungan dipercaya secara default olehhttpx. Jika Anda secara eksplisit tidak ingin mempercayai lingkungan, Anda harus mengonfigurasinya dengan set_async_client_factory().
Untuk detail lebih lanjut, Anda dapat memeriksa PR #3328 yang memperkenalkan httpx.
Mengapa httpx?
Migrasi dari requests ke httpx membawa beberapa peningkatan utama yang meningkatkan kinerja, keandalan, dan kemudahan pemeliharaan pustaka:
Keamanan Thread dan Pemanfaatan Ulang Koneksi: httpx dirancang aman untuk thread, sehingga memungkinkan kita untuk memanfaatkan ulang klien yang sama secara aman di antara beberapa thread. Pemanfaatan ulang koneksi ini mengurangi overhead dari pembentukan koneksi baru untuk setiap permintaan HTTP, sehingga meningkatkan kinerja terutama saat melakukan permintaan yang sering ke Hub.
Dukungan HTTP/2: httpx menyediakan dukungan HTTP/2 secara native, yang menawarkan efisiensi lebih baik saat melakukan beberapa permintaan ke server yang sama (tepat sesuai kasus penggunaan kami). Hal ini berujung pada latensi yang lebih rendah dan konsumsi sumber daya yang berkurang dibandingkan HTTP/1.1.
API Sinkron/Asinkron Terpadu: Berbeda dengan konfigurasi sebelumnya yang menggunakan dependensi requests (sinkron) dan aiohttp (asinkron) secara terpisah, httpx menyediakan klien sinkron dan asinkron dengan perilaku yang identik. Hal ini memastikan bahwa InferenceClient dan AsyncInferenceClient memiliki fungsionalitas yang konsisten serta menghilangkan perbedaan perilaku halus yang sebelumnya ada di antara kedua implementasi tersebut.
Penanganan Error SSL yang Lebih Baik: httpx menangani error SSL dengan lebih baik, sehingga memudahkan dan membuat proses debugging masalah koneksi lebih andal.
Arsitektur yang Siap untuk Masa Depan: httpx dipelihara secara aktif dan dirancang untuk aplikasi Python modern. Sebaliknya, requests berada dalam mode pemeliharaan dan tidak akan menerima pembaruan mayor seperti peningkatan thread-safety atau dukungan HTTP/2.
Penanganan Variabel Lingkungan yang Lebih Baik: httpx menyediakan penanganan variabel lingkungan yang lebih konsisten di kedua konteks sync dan async, menghilangkan inkonsistensi sebelumnya di mana requests secara default membaca variabel lingkungan lokal sementara aiohttp tidak.
Transisi ke httpx menempatkan huggingface_hub dengan backend HTTP yang modern, efisien, dan mudah dipelihara. Meskipun sebagian besar pengguna seharusnya mengalami operasi yang mulus, peningkatan di bawahnya menyediakan kinerja dan keandalan yang lebih baik untuk semua interaksi Hub.
hf_transfer
Karena semua repositori di Hub kini sudah mendukung Xet dan hf_xet adalah cara default untuk mengunduh/mengunggah file, kami telah menghapus dukungan untuk paket opsional hf_transfer. Variabel lingkungan HF_HUB_ENABLE_HF_TRANSFER diabaikan. Gunakan HF_XET_HIGH_PERFORMANCE sebagai gantinya.
Kelas Repository
Kelas Repository telah dihapus di v1.0. Kelas ini adalah pembungkus tipis di sekitar CLI git untuk mengelola repositori. Anda masih dapat menggunakan git secara langsung di terminal, tetapi pendekatan yang direkomendasikan adalah menggunakan API berbasis HTTP di pustaka huggingface_hub untuk pengalaman yang lebih mulus, terutama saat berurusan dengan file besar.
Berikut adalah pemetaan dari kelas Repository lama ke kelas HfApi baru:
Metode Repository | metode HfApi |
|---|---|
repo.clone_from | snapshot_download |
repo.git_add + git_commit + git_push | upload_file(), upload_folder(), create_commit() |
repo.git_tag | create_tag |
repo.git_branch | create_branch |
Kelas HfFolder
HfFolder digunakan untuk mengelola token akses pengguna. Gunakan login() untuk menyimpan token baru, logout() untuk menghapusnya, dan whoami() untuk memeriksa pengguna yang terkait dengan token saat ini. Terakhir, gunakan get_token() untuk mengambil token pengguna dalam sebuah skrip.
Kelas InferenceApi
InferenceApi adalah kelas untuk berinteraksi dengan Inference API. Sekarang disarankan untuk menggunakan kelas InferenceClient sebagai gantinya.
Fitur lain yang tidak didukung lagi
Beberapa metode dan parameter telah dihapus di v1.0. Yang tercantum di bawah ini sudah tidak didukung lagi dengan pesan peringatan di v0.x.
constants.hf_cache_hometelah dihapus. Silakan gunakanHF_HOMEsebagai gantinya.- Parameter
use_auth_tokentelah dihapus dari semua metode. Silakan gunakantokensebagai gantinya. - Metode
get_token_permissiontelah dihapus. - Metode
update_repo_visibilitytelah dihapus. Silakan gunakanupdate_repo_settingssebagai gantinya. - Parameter
is_write_actiontelah dihapus daribuild_hf_headerssertawrite_permissiondarilogin. Konsep “write permission” telah dihapus dan tidak lagi relevan mengingat token fine-grained kini menjadi pendekatan yang direkomendasikan. - Parameter
new_sessiondilogintelah diganti namanya menjadiskip_if_logged_inuntuk kejelasan yang lebih baik. - Parameter
resume_download,force_filename, danlocal_dir_use_symlinkstelah dihapus darihf_hub_downloaddansnapshot_download. - Parameter
library,language,tags, dantasktelah dihapus darilist_models.
Perintah cache CLI
Manajemen cache dari CLI telah dirancang ulang untuk mengikuti alur kerja yang terinspirasi dari Docker. huggingface-cli yang tidak lagi didukung telah dihapus, dan hf (diperkenalkan di v0.34) menggantikannya dengan CLI resource-action yang lebih jelas.
Perintah hf cache scan dan hf cache delete lama juga dihapus di v1.0 dan digantikan dengan trio baru di bawah ini:
hf cache lsmenampilkan entri cache dalam tabel ringkas, JSON, atau CSV. Gunakan--revisionsuntuk memeriksa revisi individual, tambahkan ekspresi--filtersepertisize>1GBatauaccessed>30d, dan kombinasikan dengan--quietjika Anda hanya membutuhkan identifikator.hf cache rmmenghapus entri cache yang dipilih. Sampaikan satu atau beberapa ID repo (misalnyamodel/bert-base-uncased) atau hash revisi, dan secara opsional tambahkan--dry-rununtuk pratinjau atau--yesuntuk melewati prompt konfirmasi. Ini menggantikan kedua alur kerja TUI interaktif dan--disable-tuidari perintah sebelumnya.hf cache prunemenjalankan tugas pembersihan umum, yaitu menghapus revisi yang tidak dirujuk dalam satu kali eksekusi. Tambahkan--dry-runatau--yesdengan cara yang sama seperti padahf cache rm.
Terakhir, ekstra [cli] telah dihapus - CLI sekarang disertakan bersama paket inti huggingface_hub.
Dukungan TensorFlow dan Keras 2.x
Semua kode dan dependensi terkait TensorFlow telah dihapus di v1.0. Ini mencakup perubahan pemecah berikut:
huggingface_hub[tensorflow]tidak lagi menjadi dependensi tambahan yang didukung- Fungsi utilitas
split_tf_state_dict_into_shardsdanget_tf_storage_sizetelah dihapus. - Versi
tensorflow,fastai, danfastcoretidak lagi disertakan dalam header bawaan.
Integrasi Keras 2.x juga telah dihapus. Ini mencakup kelas KerasModelHubMixin serta utilitas save_pretrained_keras, from_pretrained_keras, dan push_to_hub_keras. Keras 2.x adalah pustaka legacy yang tidak lagi dipelihara. Pendekatan yang direkomendasikan adalah menggunakan Keras 3.x yang terintegrasi erat dengan Hub (yaitu, pustaka ini berisi metode bawaan untuk memuat/mengirim ke Hub). Jika Anda masih ingin bekerja dengan Keras 2.x, Anda harus menurunkan versi huggingface_hub ke versi v0.x.
Nilai yang dikembalikan oleh upload_file dan upload_folder
Fungsi upload_file() dan upload_folder() kini mengembalikan URL dari commit yang dibuat di Hub. Sebelumnya, fungsi-fungsi tersebut mengembalikan URL dari file atau folder. Hal ini dilakukan untuk menyelaraskan dengan nilai pengembalian dari create_commit(), delete_file(), dan delete_folder().
Update on GitHub