1
resposta

Forma mais adequada de organizar o código

Da forma como estava no exemplo da aula não funcionou fiz assim pra funcionar.

import os
import google.generativeai as genai
from dotenv import load_dotenv

load_dotenv()

CHAVE_API_GOOGLE = os.getenv("GEMINI_API_KEY")
genai.configure(api_key=CHAVE_API_GOOGLE)
# MODELO_ESCOLHIDO = "gemini-1.5-flash" # Esta variável não é usada na lógica abaixo

MODELO_FLASH = "gemini-1.5-flash"
MODELO_PRO = "gemini-1.5-pro"

CUSTO_ENTRADA_FLASH = 0.075
CUSTO_SAIDA_FLASH = 0.30

CUSTO_ENTRADA_PRO = 1.25
CUSTO_SAIDA_PRO = 5.00

LIMITE_TOKENS = 3000 # Definindo o limite de tokens mais cedo

def carrega(nome_do_arquivo):
    try:
        # Usando forward slash para compatibilidade com múltiplos sistemas
        with open(nome_do_arquivo, "r") as arquivo:
            dados = arquivo.read()
            return dados
    except IOError as e:
        print(f"Erro ao carregar arquivo '{nome_do_arquivo}': {e}")
        return None # Retorna None em caso de erro

prompt_sistema = """
Identifique o perfil de compra para cada cliente a seguir.

O formato de saída deve ser:

cliente - descreva o perfil do cliente em 3 palavras
"""

# Carrega os dados do usuário usando o caminho corrigido
prompt_usuario = carrega("dados/lista_de_compras_100_clientes.csv")

# --- Lógica de Seleção do Modelo ---

# Verifica se os dados foram carregados com sucesso antes de continuar
if prompt_usuario is None:
    print("Não foi possível carregar os dados do usuário. Encerrando a seleção do modelo e geração.")
else:
    # Inicializa a variável 'modelo' com o modelo padrão ANTES de usá-la
    modelo = MODELO_FLASH

    # Cria uma instância do modelo inicial para contar tokens
    # Usamos o modelo inicial (Flash) para a contagem, pois é o que assumimos primeiro
    modelo_para_contagem = genai.GenerativeModel(model_name=f"models/{modelo}")

    # Conta os tokens no prompt do usuário
    # O método count_tokens geralmente aceita a string diretamente
    try:
        qtd_tokens = modelo_para_contagem.count_tokens(prompt_usuario)

        # Verifica se a quantidade de tokens excede o limite
        if qtd_tokens.total_tokens >= LIMITE_TOKENS:
            modelo = MODELO_PRO # Se exceder, muda para o modelo Pro

        print(f"O modelo selecionado foi: {modelo}")

        # Cria a instância do modelo FINAL que será usada para a geração,
        # usando o nome do modelo decidido na lógica acima.
        llm = genai.GenerativeModel(
            model_name=modelo, # Usa o nome do modelo (Flash ou Pro)
            system_instruction=prompt_sistema # Usa o prompt de sistema
        )

        # Gera a resposta usando o prompt do usuário
        resposta = llm.generate_content(prompt_usuario)
        print(f"Resposta: {resposta.text}")

    except Exception as e:
        # Captura erros que podem ocorrer durante a contagem ou geração da resposta
        print(f"Ocorreu um erro durante a interação com o modelo: {e}")
1 resposta

Olá, Filipe, como vai?

Obrigado por compartilhar sua solução aqui no fórum. É ótimo quando conseguimos identificar um caminho que funcione e ainda contribuímos com os colegas trazendo alternativas. Isso fortalece bastante o aprendizado coletivo.

Fique à vontade para continuar compartilhando suas experiências por aqui, seja com dúvidas ou sugestões.

Estamos à disposição no fórum.

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