Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Erro 429 OpenAI

Estou criando um 'Resumidor de Textos', mas quando tento executar o programa, ele informa que 'Excedi a cota', porém, ao verificar no site, percebo que ela nem foi usada. libs utilizadas: pip install python-docx, pip install openai==0.28 e pip install python-dotenv (Obs: sim a key está conectada corretamente)

Código:

import os
from docx import Document
import openai
from dotenv import load_dotenv

load_dotenv()

# Configurações da OpenAI
try:
    openai.api_key = os.getenv("OPENAI_API_KEY")
except Exception as e:
    print("Erro ao inicializar OpenAI:", e)

# Pasta de origem e destino
pasta_texto = "0_Texto"
pasta_resumo = "1_Resumo"

def ler_arquivo(arquivo_escolhido):
    caminho_arquivo = os.path.join(pasta_texto, arquivo_escolhido)
    if os.path.exists(caminho_arquivo):
        with open(caminho_arquivo, "r", encoding="utf-8") as file:
            return file.read()
    else:
        print("Arquivo não encontrado:", arquivo_escolhido)
        return None

# Função para gerar um resumo usando a OpenAI
def gerar_resumo(texto, max_tokens=150):
    try:
        # Chame a API da OpenAI para gerar o resumo
        resumo = openai.Completion.create(
            engine="gpt-3.5-turbo-instruct",
            prompt=f"Escreva um resumo com o seguinte texto: {texto}",
            temperature=0.7,
            max_tokens=max_tokens,  # Define o tamanho do resumo desejado
            n=1,  # Número de respostas a serem geradas
        )
        # Retorne o resumo gerado
        return resumo['choices'][0]['text'].strip()
    except Exception as e:
        print("Erro ao gerar resumo:", e)
        return None

# Lista os arquivos na pasta Texto
arquivos_texto = os.listdir(pasta_texto)
arquivos_texto.sort()  # Ordena os arquivos alfabeticamente

# Exibe a lista de arquivos e permite que o usuário escolha
print("Arquivos disponíveis para resumo:")
for i, arquivo in enumerate(arquivos_texto, start=1):
    print(f"{i}. {arquivo}")

# Solicita a escolha do usuário
while True:
    try:
        escolha = int(input("Digite o número do arquivo que deseja resumir (ou 0 para sair): "))
        if escolha == 0:
            print("Programa encerrado.")
            break
        elif 1 <= escolha <= len(arquivos_texto):
            arquivo_escolhido = arquivos_texto[escolha - 1]
            print(f"Você escolheu o arquivo: {arquivo_escolhido}")
            confirmacao = input("Tem certeza que deseja gerar um resumo para este arquivo? (s/n): ")
            if confirmacao.lower() == "s":
                # Lê o conteúdo do arquivo
                conteudo = ler_arquivo(arquivo_escolhido)
                if conteudo is not None:
                    # Gera o resumo
                    resumo = gerar_resumo(conteudo)
                    if resumo is not None:
                        # Cria o diretório de destino se não existir
                        if not os.path.exists(pasta_resumo):
                            os.makedirs(pasta_resumo)

                        # Cria o arquivo de resumo na pasta Resumo
                        nome_resumo = f"Resumo_{os.path.splitext(arquivo_escolhido)[0]}.docx"
                        caminho_resumo = os.path.join(pasta_resumo, nome_resumo)
                        doc = Document()
                        doc.add_paragraph(resumo)
                        doc.save(caminho_resumo)

                        print(f"Resumo gerado com sucesso: {nome_resumo}")
            else:
                print("Operação cancelada. Escolha outro arquivo.")
        else:
            print("Número inválido. Tente novamente.")
    except ValueError:
        print("Entrada inválida. Digite um número válido.")
1 resposta
solução!

Oii, Nathan. Tudo bem por aí?

O erro 429 é um erro HTTP que indica que você atingiu o limite de requisições permitidas em um certo período de tempo. Isso é comum em APIs como a OpenAI, que limitam a quantidade de requisições para evitar abusos.

Mesmo que você não tenha usado toda a sua cota, se muitas requisições forem feitas em um curto período de tempo, você pode encontrar esse erro. Isso pode acontecer se você estiver rodando seu programa várias vezes em rápida sucessão, por exemplo.

Uma solução para isso seria adicionar um delay (uma pausa) entre as chamadas para a API da OpenAI. Você pode fazer isso com o exponential backoff no Python, pois ele aumenta de forma exponencial a taxa de demora para o tempo de requisição. Você pode usar o exemplo que a própria OpenAI cita no artigo deles (o link estará no final da resposta):

from openai.error import RateLimitError
import backoff

@backoff.on_exception(backoff.expo, RateLimitError)
def completions_with_backoff(**kwargs):
response = openai.Completion.create(**kwargs)
return response

Ele importa a biblioteca RateLimitError e também o backoff.

Esse erro é comum entre as contas gratuitas da OpenAI (mesmo com as cotas), então há um artigo oficial no site deles, que é este:

Lembrando que está em inglês, caso você queira dar uma olhadinha. ^_^

Se outra dúvida surgir, estamos aqui.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software