Hub Python Library documentation

Migrando para o huggingface_hub v1.0

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v2.4.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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_PROXY e HTTPS_PROXY.
  • Backend HTTP personalizado: a função configure_http_backend foi 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 de httpx.HTTPError. Recomendamos capturar HfHubHTTPError (importado com from huggingface_hub.utils import HfHubHTTPError), que é uma subclasse de requests.HTTPError na v0.x e de httpx.HTTPError na v1.x. Capturar a partir do erro do huggingface_hub garante que seu código seja compatível com ambas as versões, antiga e nova, da biblioteca.
  • SSLError: o httpx não possui o conceito de SSLError. Agora é um httpx.ConnectError genérico.
  • LocalEntryNotFoundError: Este erro não herda mais de HTTPError. Agora definimos um EntryNotFoundError (novo) que é herdado tanto por LocalEntryNotFoundError (se o arquivo não for encontrado no cache local) quanto por RemoteEntryNotFoundError (se o arquivo não for encontrado no repositório no Hub). Apenas o erro remoto herda de HTTPError.
  • InferenceClient: o InferenceClient agora 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âmetro trust_env foi removido do construtor do AsyncInferenceClient. As variáveis de ambiente são confiadas por padrão pelo httpx. 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 Repositorymétodo HfApi
repo.clone_fromsnapshot_download
repo.git_add + git_commit + git_pushupload_file(), upload_folder(), create_commit()
repo.git_tagcreate_tag
repo.git_branchcreate_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_home foi removido. Use HF_HOME em vez disso.
  • Os parâmetros use_auth_token foram removidos de todos os métodos. Use token em vez disso.
  • O método get_token_permission foi removido.
  • O método update_repo_visibility foi removido. Use update_repo_settings em vez disso.
  • O parâmetro is_write_action foi removido de build_hf_headers, assim como write_permission de login. 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_session em login foi renomeado para skip_if_logged_in para maior clareza.
  • Os parâmetros resume_download, force_filename e local_dir_use_symlinks foram removidos de hf_hub_download e snapshot_download.
  • Os parâmetros library, language, tags e task foram removidos de list_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 ls lista as entradas do cache em uma tabela concisa, com saída em JSON ou CSV. Use --revisions para inspecionar revisões individuais, adicione expressões de --filter como size>1GB ou accessed>30d e combine-as com --quiet quando você precisar apenas dos identificadores.
  • hf cache rm remove 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-run para visualizar ou --yes para pular o prompt de confirmação. Isso substitui tanto o fluxo interativo do TUI quanto o fluxo --disable-tui do comando anterior.
  • hf cache prune executa a tarefa comum de limpeza de excluir revisões não referenciadas de uma só vez. Adicione --dry-run ou --yes da mesma forma que com hf 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_shards e get_tf_storage_size foram removidas.
  • As versões tensorflow, fastai e fastcore nã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