3
respostas

[Dúvida] Recuperar run ativo

como posso recuperar um run que está ativa na thread em um assistente da api da OpenAi? estou usando a biblioteca do theokanning

já que estou com problema em adicionar novas mensagens na thread porque a biblioteca me retorna o erro dizendo "Can' add messages to thread while a run is active"

3 respostas

Oii, José! Tudo bem?

Nesse caso pode haver um recurso da biblioteca para evitar a adição de mensagens a uma thread enquanto um run está ativo para evitar possíveis conflitos ou condições de corrida.

Para que eu possa te ajudar de forma mais assertiva, peço por gentileza que me conceda mais detalhes como:

  • Qual curso e aula você estava reproduzindo e apareceu o erro;
  • Um print da tela mostrando o seu projeto e com a mensagem de erro;
  • Qual passo você executou que na mesma hora obteve este erro.

Dessa forma, conseguimos pesquisar mais a fundo o que pode ter causado o retorno dessa mensagem.

Fico no aguardo. Até mais!

Oii, Nathalia

O curso que eu estava éra o "GPT e Java: desenvolva um Chatbot com IA" e a aula era de Function Calling

O método que esta dando erro é esse, fiz algumas alterações, mas percebi que o erro é lançado quando tanta chamar alguma função que existe no assistente mas no codigo não existe ou quando por ventura o metodo em nosso codigo acaba lançando algum erro mas não responde a api que deixa a run em execução

private String callFunction(String establishmentId,Run run) {
        try {
            var function = run.getRequiredAction().getSubmitToolOutputs().getToolCalls().get(0).getFunction();
            var calculateShipping = ChatFunction.builder()
                    .name("deliveryShipping")
                    .executor(DeliveryShippingParams.class, d -> {
                        var establishment = establishmentService.getById(establishmentId);
                        if(establishment.isPresent()) {
                            if(!establishment.get().isOpen()){
                                return "não pode fazer entrega pois o estabelecimento ja fechou";
                            }
                            var result = delivery.getTaxaDelivery(establishment.get(), d.address());
                            if (result == -1) {
                                return "Serviço de entrega fornecido pelo estabelecimento não cobre a localidade de atendimento ";
                            }
                            return "Valor da taxa de entrega: R$" + new DecimalFormat("R$ #,##0.00").format(result / 1000);
                        }
                        return "O estabelecimento a qual se referencia não pode ser encontrado";
                    })
                    .build();

            var establishmentIsOpen = ChatFunction.builder()
                    .name("establishmentIsOpen")
                    .executor(EstablishmentIsOpen.class, f -> {
                        var isOpen = establishmentService.isOpen(establishmentId);
                        if(isOpen){
                            return "Ainda estamos em atendimento";
                        }
                        return "Já fechamos";
                    }).build();

            var execFunction = new FunctionExecutor(Arrays.asList(calculateShipping, establishmentIsOpen));
            var functionCall = new ChatFunctionCall(function.getName(), new ObjectMapper().readTree(function.getArguments()));
            return execFunction.execute(functionCall).toString();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

E acabava dando esse erro "Can' add messages to thread while a run is active" o status que me retornava era o 400

Oii, José! Como vai?

Agradeço por compartilhar o seu código e as informações.

Baseado no contexto, o erro que está recebendo acontece quando há uma tentativa de adicionar mensagens a thread enquanto uma execução continua em andamento. E, como podemos ver nesse link não é permitido realizar solicitações simultaneamente.

Uma forma de resolver isso seria garantir a espera da execução anterior antes de chamar a função callFunction, porém a biblioteca TheoKanning não oferece suporte a isso e possui algumas limitações.

Como sugestão, recomendo que revise o seu código para adaptá-lo de forma que as solicitações simultâneas não ocorram. Caso queira se inspirar no código disponibilizado pelo professor, clique aqui, ou até mesmo testar o projeto realizado em aula sem as alterações.

Espero ter ajudado. Qualquer dúvida, conte conosco.

Bons estudos, José!