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!

1
resposta

Erro - Limite de tokens atingido.

Podem me ajudar c omo resolver? Tenho usado gemini gratis, na data de hoje eu ainda nao tinha rodado nada no gemini, entao acredito que deva ainda ter tokens. Quando rodo o resumidor aparece essa mensagem:

def resumidor_de_emails(lista_de_emails):

for numero, email in enumerate(lista_de_emails):
resposta =client.models.generate_content(
model="gemini-2.5-flash", contents=f"""Vou te mandar o corpo de um email. Quero que você resuma em apenas 1 linha. Segue o e-mail: {email}""")

lista_de_resumos.append(f"E-mail {numero + 1}: {resposta.text}")
print("-" * 50)

return lista_de_resumos

resumidor_de_emails(emails)


Erro que aparece

ClientError Traceback (most recent call last)
/tmp/ipykernel_2899/3988747411.py in <cell line: 0>()
----> 1 resumidor_de_emails(emails)

14 frames
/usr/local/lib/python3.12/dist-packages/google/genai/errors.py in raise_error(cls, status_code, response_json, response)
157 """
158 if 400 <= status_code < 500:
--> 159 raise ClientError(status_code, response_json, response)
160 elif 500 <= status_code < 600:
161 raise ServerError(status_code, response_json, response)

ClientError: 429 RESOURCE_EXHAUSTED. {'error': {'code': 429, 'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit. \n* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_free_tier_requests, limit: 20, model: gemini-2.5-flash\nPlease retry in 6.131926733s.', 'status': 'RESOURCE_EXHAUSTED', 'details': [{'@type': 'type.googleapis.com/google.rpc.Help', 'links': [{'description': 'Learn more about Gemini API quotas', 'url': 'https://ai.google.dev/gemini-api/docs/rate-limits'}]}, {'@type': 'type.googleapis.com/google.rpc.QuotaFailure', 'violations': [{'quotaMetric': 'generativelanguage.googleapis.com/generate_content_free_tier_requests', 'quotaId': 'GenerateRequestsPerDayPerProjectPerModel-FreeTier', 'quotaDimensions': {'location': 'global', 'model': 'gemini-2.5-flash'}, 'quotaValue': '20'}]}, {'@type': 'type.googleapis.com/google.rpc.RetryInfo', 'retryDelay': '6s'}]}}

1 resposta

Olá, Marina. Como vai?

Compreendo perfeitamente a sua dúvida. Esse erro costuma causar bastante confusão no início, mas a própria mensagem detalhada do console do Python nos dá a resposta exata sobre o que gerou o problema.

O erro 429 RESOURCE_EXHAUSTED significa que o limite de requisições foi atingido. Como você bem pontuou, você ainda não tinha rodado nada no dia, então por que o limite estourou?

O segredo está nesta linha da mensagem de erro:
Quota exceeded for metric: ... limit: 20, model: gemini-2.5-flash. Please retry in 6.131926733s.

A camada gratuita (Free Tier) da API do Gemini possui dois tipos de limites simultâneos:

  1. Limite Diário (RPM): Um total de requisições permitidas por dia.
  2. Limite por Minuto (RPM): No plano gratuito atual, o limite de requisições por minuto para o modelo gemini-2.5-flash é bem restrito (frequentemente configurado em 15 ou 20 requisições por minuto dependendo da métrica exata da sua chave).

O motivo do erro no seu código

No seu código, você criou uma estrutura de repetição (for):

for numero, email in enumerate(lista_de_emails):
    resposta = client.models.generate_content(...)

Computacionalmente, o Python executa esse laço for de forma extremamente rápida (em milissegundos). Se a sua variável emails contiver, por exemplo, 30 ou 40 e-mails, o Python tentará disparar 30 ou 40 requisições para o servidor do Google quase ao mesmo tempo, em menos de 2 segundos.

O servidor do Google detecta esse fluxo em massa, percebe que passou do limite de 20 requisições por minuto da camada gratuita e bloqueia o restante da execução com o erro 429. O próprio erro avisa: Please retry in 6.131926733s (Por favor, tente novamente em 6 segundos).

Como resolver o problema

Temos duas abordagens práticas para solucionar isso no seu dia a dia como Analista de Crédito:

Solução 1: Adicionar uma pausa entre as requisições (Maneira mais simples)

Podemos importar a biblioteca nativa time do Python e usar o comando time.sleep(4) dentro do laço. Isso força o código a esperar 4 segundos antes de mandar o próximo e-mail, garantindo que você nunca estoure o limite por minuto da camada gratuita.

Veja o código ajustado:

import time

def resumidor_de_emails(lista_de_emails):
    lista_de_resumos = [] # Certifique-se de que a lista está inicializada dentro ou fora da função
    
    for numero, email in enumerate(lista_de_emails):
        resposta = client.models.generate_content(
            model="gemini-2.5-flash", 
            contents=f"Vou te mandar o corpo de um email. Quero que você resuma em apenas 1 linha. Segue o e-mail: {email}"
        )
        lista_de_resumos.append(f"E-mail {numero + 1}: {resposta.text}")
        print(f"E-mail {numero + 1} resumido com sucesso.")
        
        # Faz o Python esperar 4 segundos antes do próximo e-mail da lista
        time.sleep(4)
        
    print("-" * 50)
    return lista_de_resumos

Solução 2: Agrupamento em lote (Batching)

Em vez de enviar um e-mail de cada vez em um laço de repetição, você pode juntar vários e-mails em um único texto estruturado e fazer uma única chamada para a API, pedindo para ela retornar os resumos em formato de lista. O modelo gemini-2.5-flash tem uma janela de contexto gigante e lida muito bem com isso, economizando suas requisições.

Faça o teste adicionando o time.sleep(4) no seu laço e você verá que o erro desaparecerá por completo!

Espero que possa ter lhe ajudado!