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!

3
respostas

[Reclamação] Método

Frustrante pela falta de aviso prévio. O curso exige o uso da API do Google AI Studio, mas esbarramos em limitações severas de acesso e uso que nem mesmo com assinatura conseguimos resolver. A Alura precisa informar claramente essas restrições nos pré-requisitos do curso ou fornecer alternativas práticas, pois da forma atual fica impossível acompanhar as aulas na prática.

3 respostas

Ei, Eudes! Espero que esteja bem

Agradeço pelo depoimento sincero e a sugestão de colocar um aviso, é bem pertinente e repassarei para a equipe responsável pela didática também. Para que eu possa te orientar melhor, você consegue compartilhar os problemas que está tendo com a API do Google AI Studio, por gentileza?

Esse guia vai te auxiliar a trazer todos detalhes que precisamos saber: guia de como fazer uma pergunta completa no fórum.

Dessa forma, terei acesso ao erro e ao seu código para buscarmos uma solução assertiva.

Fico no aguardo e até mais!

  • Já troquei de API
  • Já troquei o modelo do GEMINI
  • Já tentei fazer uma assinatura API
  • Já usei o iloc para diminuir as linhas da coluna 'avaliacoes', já que não está respondendo até a linha 40

Código:

lista_analise = []

for numero, lista in enumerate(avaliacoes):
lista_reviwes = client.models.generate_content(
model = 'gemini-3.5-flash-lite',
contents=f""" Só quero que traga o sentimento e nenhuma outra informação Positivo, Negativo, Neutro' {lista}"""
)
lista_analise.append(lista_reviwes.text)
print(f'{numero + 1}: {lista_reviwes.text}')

1: Negativo
2: Positivo
3: Positivo
4: Positivo
5: Positivo
6: Neutro
7: Negativo
8: Positivo
9: Negativo
10: Negativo
11: Positivo
12: Negativo
13: Neutro
14: Positivo
15: Negativo
16: Negativo
17: Positivo
18: Positivo
19: Negativo
20: Neutro
21: Neutro
22: Negativo
23: Negativo
24: Negativo
25: Neutro
26: Negativo
27: Negativo

ServerError Traceback (most recent call last)
/tmp/ipykernel_640/1256602329.py in <cell line: 0>()
2
3 for numero, lista in enumerate(avaliacoes):
----> 4 lista_reviwes = client.models.generate_content(
5 model = 'gemini-3.5-flash-lite',
6 contents=f""" Só quero que traga o sentimento e nenhuma outra informação Positivo, Negativo, Neutro' {lista}"""

13 frames
/usr/local/lib/python3.13/dist-packages/google/genai/errors.py in raise_error(cls, status_code, response_json, response)
184 raise ClientError(status_code, response_json, response)
185 elif 500 <= status_code < 600:
--> 186 raise ServerError(status_code, response_json, response)
187 else:
188 raise cls(status_code, response_json, response)

ServerError: 503 UNAVAILABLE. {'error': {'code': 503, 'message': 'This model is currently experiencing high demand. Spikes in demand are usually temporary. Please try again later.', 'status': 'UNAVAILABLE'}}

Oi, Eudes! Obrigada por retornar.

Vendo o erro que apareceu, o código 503 UNAVAILABLE sinaliza que o servidor do Google está recebendo uma alta demanda momentânea. Esse erro acontece quando disparamos múltiplas chamadas em um curto período de tempo sem nenhuma pausa, algo muito natural de ocorrer ao rodar comandos dentro de um loop. Por isso, trocar de chave ou de plano não resolve. O que vale testar é fazer o código tentar novamente quando o erro acontecer, com uma pausa entre as tentativas, e guardar o progresso para não perder o que já foi processado.

Teste o seguinte no seu código:

import time
from google.genai import errors

lista_analise = []


def classificar(texto, tentativas=5):
    for tentativa in range(tentativas):
        try:
            resposta = client.models.generate_content(
                model='gemini-3.5-flash-lite',
                contents=(
                    f"Responda apenas com uma palavra: "
                    f"Positivo, Negativo ou Neutro. "
                    f"Avaliacao: {texto}"
                )
            )

            return resposta.text.strip()

        except errors.ServerError:
            espera = 2 ** tentativa

            print(
                f'Servidor ocupado. Nova tentativa em {espera}s...'
            )

            time.sleep(espera)

    return None


for numero, avaliacao in enumerate(avaliacoes):
    if numero < len(lista_analise):
        continue

    resultado = classificar(avaliacao)
    lista_analise.append(resultado)

    print(f'{numero + 1}: {resultado}')

A função classificar utiliza um backoff exponencial para lidar com erros temporários do servidor. Quando uma tentativa falha por causa de um ServerError, ela aguarda 1, 2, 4, 8 e, por fim, 16 segundos antes de tentar novamente.

Se as cinco tentativas falharem, a função retorna None em vez de interromper a execução do programa. Dessa forma, as avaliações que não puderam ser classificadas ficam registradas na lista como None e podem ser reprocessadas posteriormente.

E se o erro 503 persistir por muito tempo, mude o parâmetro model para outro modelo Gemini disponível na sua conta e rode de novo. Como a lista lista_analise guarda o que já foi processado, você não precisa recomeçar do zero.

Espero que dê certo e volte para contar, por favor!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!