Hub Python Library documentation
Migrando para o huggingface_hub v1.0
Migrando para o huggingface_hub v1.0
O lançamento da v1.0 é um marco importante para a biblioteca huggingface_hub. Ele marca nosso compromisso com a estabilidade da API e a maturidade da biblioteca. Fizemos várias melhorias e alterações que quebram a compatibilidade para tornar a biblioteca mais robusta e fácil de usar.
Este guia tem como objetivo ajudá-lo a migrar seu código existente para a nova versão. Se você tiver alguma dúvida ou feedback, por favor, nos informe abrindo uma issue no GitHub.
Python 3.9+
huggingface_hub agora requer Python 3.9 ou superior. O Python 3.8 não é mais suportado.
Migração para HTTPX
A biblioteca huggingface_hub agora usa httpx em vez de requests para requisições HTTP. Essa mudança foi feita para melhorar o desempenho e para suportar requisições síncronas e assíncronas da mesma forma. Portanto, removemos as dependências de requests e aiohttp.
Alterações que quebram a compatibilidade
Esta é uma mudança significativa que afeta toda a biblioteca. Embora tenhamos tentado tornar essa mudança o mais transparente possível, em alguns casos você pode precisar atualizar seu código. Aqui está uma lista das mudanças que quebram a compatibilidade introduzidas no processo:
- Configuração de proxy: os proxies “por método” não são mais suportados. Os proxies devem ser configurados globalmente usando as variáveis de ambiente
HTTP_PROXYeHTTPS_PROXY. - Backend HTTP personalizado: a função
configure_http_backendfoi removida. Agora você deve usar set_client_factory() e set_async_client_factory() para configurar os clientes HTTP. - Tratamento de erros: os erros HTTP não são mais herdados de
requests.HTTPError, mas dehttpx.HTTPError. Recomendamos capturar HfHubHTTPError (importado comfrom huggingface_hub.utils import HfHubHTTPError), que é uma subclasse derequests.HTTPErrorna v0.x e dehttpx.HTTPErrorna v1.x. Capturar a partir do erro dohuggingface_hubgarante que seu código seja compatível com ambas as versões, antiga e nova, da biblioteca. - SSLError: o
httpxnão possui o conceito deSSLError. Agora é umhttpx.ConnectErrorgenérico. LocalEntryNotFoundError: Este erro não herda mais deHTTPError. Agora definimos umEntryNotFoundError(novo) que é herdado tanto porLocalEntryNotFoundError(se o arquivo não for encontrado no cache local) quanto porRemoteEntryNotFoundError(se o arquivo não for encontrado no repositório no Hub). Apenas o erro remoto herda deHTTPError.InferenceClient: oInferenceClientagora pode ser usado como um gerenciador de contexto. Isso é especialmente útil ao transmitir tokens de um modelo de linguagem, garantindo que a conexão seja fechada corretamente.AsyncInferenceClient: O parâmetrotrust_envfoi removido do construtor doAsyncInferenceClient. As variáveis de ambiente são confiadas por padrão pelohttpx. Se você explicitamente não deseja confiar no ambiente, deve configurá-lo com set_async_client_factory().
Para mais detalhes, você pode verificar o PR #3328 que introduziu o httpx.
Por que httpx?
A migração de requests para httpx traz várias melhorias importantes que aprimoram o desempenho, a confiabilidade e a manutenibilidade da biblioteca:
Segurança de threads e reutilização de conexões: httpx é seguro para threads por design, permitindo reutilizar o mesmo cliente com segurança entre múltiplas threads. Essa reutilização de conexões reduz o sobrecusto de estabelecer novas conexões para cada requisição HTTP, melhorando o desempenho, especialmente ao fazer requisições frequentes ao Hub.
Suporte a HTTP/2: httpx oferece suporte nativo a HTTP/2, o que proporciona maior eficiência ao realizar múltiplas requisições ao mesmo servidor (exatamente nosso caso de uso). Isso se traduz em menor latência e menor consumo de recursos em comparação com o HTTP/1.1.
API unificada de sincronização/assincronização: Diferentemente da nossa configuração anterior, que usava dependências separadas de requests (síncrona) e aiohttp (assíncrona), o httpx fornece clientes síncronos e assíncronos com comportamento idêntico. Isso garante que InferenceClient e AsyncInferenceClient tenham funcionalidade consistente e elimina as sutis diferenças de comportamento que existiam anteriormente entre as duas implementações.
Tratamento aprimorado de erros de SSL: httpx trata erros de SSL de forma mais adequada, facilitando e tornando mais confiável a depuração de problemas de conexão.
Arquitetura à prova do futuro: httpx é ativamente mantido e projetado para aplicações Python modernas. Em contraste, requests está em modo de manutenção e não receberá atualizações importantes, como melhorias de segurança de threads ou suporte a HTTP/2.
Tratamento aprimorado de variáveis de ambiente: httpx oferece um tratamento mais consistente de variáveis de ambiente em ambos os contextos, síncrono e assíncrono, eliminando as inconsistências anteriores em que requests lia variáveis de ambiente locais por padrão, enquanto aiohttp não o fazia.
A transição para httpx posiciona o huggingface_hub com um backend HTTP moderno, eficiente e fácil de manter. Embora a maioria dos usuários deva ter uma operação sem interrupções, as melhorias subjacentes proporcionam melhor desempenho e confiabilidade para todas as interações com o Hub.
hf_transfer
Agora que todos os repositórios no Hub têm suporte a Xet e que hf_xet é o método padrão para baixar/enviar arquivos, removemos o suporte ao pacote opcional hf_transfer. A variável de ambiente HF_HUB_ENABLE_HF_TRANSFER é, portanto, ignorada. Use HF_XET_HIGH_PERFORMANCE em vez disso.
Classe de repositório
A classe Repository foi removida na v1.0. Ela era um wrapper fino em torno do CLI git para gerenciar repositórios. Você ainda pode usar o git diretamente no terminal, mas a abordagem recomendada é usar a API baseada em HTTP na biblioteca huggingface_hub para uma experiência mais suave, especialmente ao lidar com arquivos grandes.
Aqui está um mapeamento da classe legada Repository para a nova classe HfApi:
Método Repository | método 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 |
Classe HfFolder
HfFolder era usado para gerenciar o token de acesso do usuário. Use login() para salvar um novo token, logout() para excluí-lo e whoami() para verificar o usuário associado ao token atual. Por fim, use get_token() para recuperar o token do usuário em um script.
Classe InferenceApi
InferenceApi era uma classe para interagir com a Inference API. Agora, recomenda-se usar a classe InferenceClient em seu lugar.
Outros recursos obsoletos
Alguns métodos e parâmetros foram removidos na v1.0. Os listados abaixo já haviam sido descontinuados com uma mensagem de aviso na v0.x.
constants.hf_cache_homefoi removido. UseHF_HOMEem vez disso.- Os parâmetros
use_auth_tokenforam removidos de todos os métodos. Usetokenem vez disso. - O método
get_token_permissionfoi removido. - O método
update_repo_visibilityfoi removido. Useupdate_repo_settingsem vez disso. - O parâmetro
is_write_actionfoi removido debuild_hf_headers, assim comowrite_permissiondelogin. O conceito de “permissão de escrita” foi removido e não é mais relevante, agora que os tokens de granularidade fina são a abordagem recomendada. - O parâmetro
new_sessionemloginfoi renomeado paraskip_if_logged_inpara maior clareza. - Os parâmetros
resume_download,force_filenameelocal_dir_use_symlinksforam removidos dehf_hub_downloadesnapshot_download. - Os parâmetros
library,language,tagsetaskforam removidos delist_models.
Comandos de cache da CLI
A gestão de cache pela CLI foi redesenhada para seguir um fluxo inspirado no Docker. O huggingface-cli obsoleto foi removido e o hf (introduzido na v0.34) o substitui com uma CLI de recurso-ação mais clara.
Os comandos legados hf cache scan e hf cache delete também foram removidos na v1.0 e substituídos pelo novo trio abaixo:
hf cache lslista as entradas do cache em uma tabela concisa, com saída em JSON ou CSV. Use--revisionspara inspecionar revisões individuais, adicione expressões de--filtercomosize>1GBouaccessed>30de combine-as com--quietquando você precisar apenas dos identificadores.hf cache rmremove as entradas de cache selecionadas. Passe um ou mais IDs de repositório (por exemplo,model/bert-base-uncased) ou hashes de revisão e, opcionalmente, adicione--dry-runpara visualizar ou--yespara pular o prompt de confirmação. Isso substitui tanto o fluxo interativo do TUI quanto o fluxo--disable-tuido comando anterior.hf cache pruneexecuta a tarefa comum de limpeza de excluir revisões não referenciadas de uma só vez. Adicione--dry-runou--yesda mesma forma que comhf cache rm.
Por fim, o extra [cli] foi removido - o CLI agora é distribuído com o pacote principal huggingface_hub.
Suporte a TensorFlow e Keras 2.x
Todo o código e as dependências relacionados ao TensorFlow foram removidos na v1.0. Isso inclui as seguintes alterações incompatíveis:
huggingface_hub[tensorflow]não é mais uma dependência extra suportada- As funções utilitárias
split_tf_state_dict_into_shardseget_tf_storage_sizeforam removidas. - As versões
tensorflow,fastaiefastcorenão estão mais incluídas nos cabeçalhos embutidos.
A integração com o Keras 2.x também foi removida. Isso inclui a classe KerasModelHubMixin e as utilitários save_pretrained_keras, from_pretrained_keras e push_to_hub_keras. O Keras 2.x é uma biblioteca legada e sem manutenção. A abordagem recomendada é usar o Keras 3.x, que possui integração estreita com o Hub (ou seja, contém métodos embutidos para carregar/enviar para o Hub). Se você ainda deseja trabalhar com o Keras 2.x, deve fazer o downgrade do huggingface_hub para uma versão v0.x.
valores retornados por upload_file e upload_folder
As funções upload_file() e upload_folder() agora retornam a URL do commit criado no Hub. Anteriormente, elas retornavam a URL do arquivo ou da pasta. Isso foi feito para alinhar com o valor de retorno de create_commit(), delete_file() e delete_folder().
Update on GitHub