Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Sugestão] Como evitar Erro 429 (Rate Limit) na API do Google AI Studio

Fala pessoal! Para quem está tomando erro de limite de cota ao rodar automações em laço (como processar listas) no plano gratuito, encontrei duas soluções bem diretas:

  • Opção 1: Mudar para a família Gemma
    Os modelos de pesos abertos do Google aguentam loops sem travar. Utilizei o gemma-4-26b-a4b-it. Como ele é mais leve, o limite gratuito é muito mais flexível e rodou direto, sem precisar de colocar pausas no código.
  • Opção 2: Usar os atalhos latest com pausa
    Se o projeto exigir a linha Gemini, aponte o modelo para gemini-flash-lite-latest (garante a versão mais atual) e adicione um time.sleep(5) no final do seu loop.

O limite gratuito dessa linha costuma ser de 15 requisições por minuto. Com 5 segundos de pausa, o seu código faz no máximo 12 requisições, deixando uma margem segura para a API não bloquear a execução. Fica a dica!

1 resposta
solução!

Olá, Vinicius. Como vai?

Sensacional a sua contribuição para o fórum! O Erro 429 (Too Many Requests / Rate Limit) é uma das pedras no sapato mais comuns de quem está começando a criar automações e scripts de processamento em lote (batch processing) integrados a APIs de LLMs. Compartilhar essas alternativas prontas ajuda demais a comunidade!

Suas duas estratégias atacam o problema de formas bem inteligentes. Vamos fazer uma breve análise técnica de cada uma para complementar o seu post:


Análise da Opção 1: Migração para a Família Gemma

Você teve uma excelente sacada. A linha Gemma é composta pelos modelos abertos (open-weights) do Google. Por serem modelos menores e otimizados para rodar de forma eficiente (o gemma-4-26b indica um modelo robusto de 26 bilhões de parâmetros), o custo computacional de infraestrutura para o Google é menor.

Consequentemente, a cota de requisições por minuto (RPM) disponibilizada no plano gratuito do AI Studio para a família Gemma costuma ser consideravelmente mais generosa do que as linhas comerciais principais, permitindo que laços simples de repetição rodem direto sem estourar o teto.


Análise da Opção 2: Estratégia de Janela de Tempo com time.sleep()

Sua matemática na segunda opção foi perfeita! O limite padrão da API gratuita do Gemini Flash (e sua variante Lite) gira em torno de 15 RPM.

Ao introduzir o time.sleep(5) dentro da estrutura de repetição em Python, você realiza uma técnica clássica de engenharia de software chamada Throttling (estrangulamento ou controle de fluxo).

Como o seu código espera 5 segundos entre as iterações:

  • 60 segundos por minuto / 5 segundos de espera = 12 requisições por minuto no máximo.

Como 12 é menor que 15, o seu script opera confortavelmente dentro da margem de segurança, eliminando os erros de cota sem que você precise gerenciar lógicas complexas de repetição. O uso do sufixo -latest no nome do modelo também é uma excelente prática para garantir que o código sempre consuma a versão estável mais recente disponibilizada na API sem precisar alterar a string manualmente no futuro.


Dica Extra: E se a lista for muito grande? (Backoff Exponencial)

Para os alunos que possuem listas gigantescas de e-mails para processar, o time.sleep(5) fixo funciona perfeitamente, mas pode deixar o processo total um pouco lento. Além disso, se o servidor do Google sofrer uma lentidão momentânea, o erro 429 ainda pode acontecer.

Uma boa prática para cenários de produção é o Backoff Exponencial. Em vez de travar o código com um tempo fixo, nós tentamos rodar o código rápido. Se o erro 429 acontecer, nós capturamos o erro com um try/except e mandamos o código esperar um tempo que vai dobrando (ex: espera 2 segundos, tenta de novo; se falhar, espera 4; depois 8...).

Em Python, existe uma biblioteca excelente chamada tenacity que faz exatamente isso com pouquíssimas linhas de código, mas estruturar o loop com o time.sleep() como você sugeriu já resolve 90% dos desafios propostos nos cursos!

Parabéns pelo post instrutivo e detalhado!

Espero que possa ter lhe ajudado!