Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

[Dúvida] raise openai.APIError() não é possível pois traz erro "APIError.__init__() missing 2 required positional arguments: 'message' and 'request'"

Durante a aula 4 temos uma explicação de criação das exceptions para caso a execução da analise encontre algum erro. Na etapa de criação da exception de APIError é sugerido testar o except com o seguinte código:

tentativas = 0
    while tentativas < 3:
        tentativas += 1
        print(f"Tentativa {tentativas}")
        try:
            raise openai.APIError()
            # resposta = openai.chat.completions.create(
            #     model = "gpt-3.5-turbo",
            #     messages = [
            #         {
            #             "role": "system",
            #             "content": prompt_sistema
            #         },
            #         {
            #             "role": "user",
            #             "content": prompt_usuario
            #         }
            #     ]
            # )

            salva(f"./dados/analise-{nome_do_produto}", resposta.choices[0].message.content)
            print("Análise concluída com sucesso!")
        except openai.AuthenticationError as e:
            print(f"Erro de autenticacao: {e}")
        except openai.APIConnectionError as e:
            print(f"Erro de conexao: {e}")
        except openai.APIError as e:
            print(f"Erro de API: {e}")

Mas eu estou encontrando outro erro por conta de passar o raise openai.APIError().! "TypeError: APIError.init() missing 2 required positional arguments: 'message' and 'request'"

6 respostas

Substituindo com o código abaixo, ainda persiste o erro? import openai

tentativas = 0

while tentativas < 3: tentativas += 1 print(f"Tentativa {tentativas}")

try:
    # Simule um erro de API substituindo a linha abaixo pela chamada real à API
    # resposta = openai.chat.completions.create(
    #     model="gpt-3.5-turbo",
    #     messages=[
    #         {"role": "system", "content": prompt_sistema},
    #         {"role": "user", "content": prompt_usuario}
    #     ]
    # )

    # Simule a resposta da API (descomente a linha abaixo quando necessário)
    # resposta = {"choices": [{"message": {"content": "Exemplo de resposta da API"}}]}
    
    # Substitua a linha abaixo pela lógica real de salvamento
    # salva(f"./dados/analise-{nome_do_produto}", resposta["choices"][0]["message"]["content"])
    
    print("Análise concluída com sucesso!")

except openai.AuthenticationError as e:
    print(f"Erro de autenticação: {e}")
except openai.APIConnectionError as e:
    print(f"Erro de conexão: {e}")
except openai.APIError as e:
    print(f"Erro de API: {e}")

Se eu manter o raise openai.APIError() o erro permanece o mesmo.

Comentando essa linha e usando o código que você enviou resposta = {"choices": [{"message": {"content": "Exemplo de resposta da API"}}]} Aparece outro erro:** AttributeError: 'dict' object has no attribute 'choices'**

Tenta isso:

import openai

def salva(caminho, conteudo): # Implemente a lógica de salvamento aqui pass

tentativas = 0

while tentativas < 3: tentativas += 1 print(f"Tentativa {tentativas}")

try:
    # Simule um erro de API substituindo a linha abaixo pela chamada real à API
    # resposta = openai.ChatCompletion.create(
    #     model="gpt-3.5-turbo",
    #     messages=[
    #         {"role": "system", "content": prompt_sistema},
    #         {"role": "user", "content": prompt_usuario}
    #     ]
    # )

    # Simule a resposta da API (descomente a linha abaixo quando necessário)
    # resposta = {"choices": [{"message": {"content": "Exemplo de resposta da API"}}]}
    
    # Substitua a linha abaixo pela lógica real de salvamento
    # salva(f"./dados/analise-{nome_do_produto}", resposta["choices"][0]["message"]["content"])
    
    print("Análise concluída com sucesso!")

except openai.AuthenticationError as e:
    print(f"Erro de autenticação: {e}")
except openai.APIConnectionError as e:
    print(f"Erro de conexão: {e}")
except openai.APIError as e:
    print(f"Erro de API: {e.message} ({e.request})")

Olá Talisson, tudo bem? Conseguiu resolver o seu problema?

Ainda persiste... Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Olá Talisson, tudo bem?

A versão mais nova da API faz com que seja necessário informar três parâmetros na invocação do trecho openai.APIError((). Para chamar este método você precisa passar três parâmetros: (i) a mesnagem que será exibida quando o erro for lançado (ii) qual a requisição que foi feita e que gerou o erro e (iii) a resposta que a API gerou e que levou ao erro (no body).

A API entrega mais detalhes desses parâmetros =)

Para resolver o seu problema:

raise openai.APIError(
            message="Erro de API: Erro genérico",
            request="Aqui vai uma requisição fictícia",
            body= "Aqui vai uma resposta para o erro"
    )

Precisamos entregar estes três parâmetros para API. Request e body são strings fictícias, mas isso deve ajudar a rodar o código =)