2
respostas

[Bug] Erro ao executar o código

o erro abaixo ocorre ao executar o: var run = service.createRun(threadId, runRequest);

2025-02-13T11:40:29.622-03:00 ERROR 3728 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.theokanning.openai.assistants.AssistantToolsEnum from String "file_search": not one of the values accepted for Enum class: [code_interpreter, retrieval, function] at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 19, column: 15] (through reference chain: com.theokanning.openai.runs.Run["tools"]->java.util.ArrayList[0]->com.theokanning.openai.assistants.Tool["type"])] with root cause

com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type com.theokanning.openai.assistants.AssistantToolsEnum from String "file_search": not one of the values accepted for Enum class: [code_interpreter, retrieval, function] at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 19, column: 15] (through reference chain: com.theokanning.openai.runs.Run["tools"]->java.util.ArrayList[0]->com.theokanning.openai.assistants.Tool["type"])

como posso resolver?

2 respostas

Ola, Marcos, tudo bem ?

Esse erro ocorre porque o valor "file_search" está sendo passado para um campo que espera um valor de um enum com valores específicos em Java, e o valor fornecido não corresponde a nenhum desses valores.

O enum que está sendo usado no seu código é AssistantToolsEnum, e ele aceita apenas os seguintes valores:

  • code_interpreter
  • retrieval
  • function

No seu código, você está tentando passar "file_search", que não é um valor aceito pelo enum. Para corrigir o erro, você tem algumas opções:

1. Verifique a lógica do código

Verifique se "file_search" é um valor correto para a sua aplicação. Se você precisar desse valor, será necessário alterar o enum para incluir "file_search" como uma opção válida. Isso pode ser feito modificando a classe AssistantToolsEnum para incluir o valor "file_search":

public enum AssistantToolsEnum {
    code_interpreter,
    retrieval,
    function,
    file_search;  // Adicionando o valor "file_search"
}

2. Ajuste o valor enviado para um valor válido do enum

Se o valor "file_search" não for realmente necessário, basta substituir esse valor por um dos valores aceitos pelo enum, como "retrieval" ou "function".

3. Corrija no momento da chamada

No momento em que você está chamando service.createRun(threadId, runRequest), verifique o valor que está sendo passado para o campo tools e altere para um dos valores aceitos pelo enum.

Por exemplo:

runRequest.setTools(Arrays.asList(new Tool(AssistantToolsEnum.retrieval))); // Substituindo "file_search" por "retrieval"

Bom dia Paulo, tudo bem e com você?

Obrigado pela resposta,

tentei a sugestão 1, mas como o "AssistantToolsEnum" é da dependência "theokanning", não consegui alterar para incluir o file_search.

A opção 2 o file_search é necessário.

Alterei a chamada, mas ocorreu erro pois a api do google não possui mais o valor retrieval.

Eu tentei alterar a dependência "theokanning" para a "openai", funcionou para o curso de integração com a OpenAi, mas não consegui para o curso do chatbot ao usar o assistant.

Resolvi não usar as dependências e estou criando o acesso direto à api do google e usando os recursos necessários para completar o curso, para o curso de integração com a Openai já está funcionando, agora estou preparando para o curso do chatbot, que usa o assistant.

Sei que as mudanças são rápidas em nossa área e é muito difícil as dependências estarem sempre atualizadas, por isto acredito que é melhor desenvolver algumas coisas na "mão".

Se você possuir alguma dica, ela será muito bem vinda.

Mais uma vez obrigado pela resposta.