1
resposta

Código não funciona mais e curso não foi atualizado

com.theokanning.openai.OpenAiHttpException: The v1 Assistants API has been deprecated. Please try again by setting the header 'OpenAI-Beta: assistants=v2'. See the migration guide for more information: https://platform.openai.com/docs/assistants/migration. at com.theokanning.openai.service.OpenAiService.execute(OpenAiService.java:522) at com.theokanning.openai.service.OpenAiService.createThread(OpenAiService.java:411) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)

Caused by: retrofit2.adapter.rxjava2.HttpException: HTTP 400 at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:57) at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:38) at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:48)

import java.io.IOException; import java.time.Duration;

import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;

import com.theokanning.openai.client.OpenAiApi; import com.theokanning.openai.service.OpenAiService;

import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.jackson.JacksonConverterFactory;

@Configuration
public class TheoKanningOpenAiConfig {

    private static final String BASE_URL = "https://api.openai.com/v1/";

    @Bean
    public OpenAiService theoKanningOpenAiService(OpenAIClientConfig openAIClientConfig) {
        OkHttpClient customHttpClient = createCustomHttpClient(openAIClientConfig.getOpenaiSecretKey());
        OpenAiApi openAiApi = createRetrofit(customHttpClient).create(OpenAiApi.class);

        return new OpenAiService(openAiApi);
    }

    private OkHttpClient createCustomHttpClient(String openAiApiKey) {
        return new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request originalRequest = chain.request();
                Request newRequest = originalRequest.newBuilder().addHeader("Authorization", "Bearer " + openAiApiKey)
                        .addHeader("OpenAI-Beta", "assistants=v2").build();
                return chain.proceed(newRequest);
            }
        }).callTimeout(Duration.ofSeconds(60)).build();
    }

    private Retrofit createRetrofit(OkHttpClient client) {
        return new Retrofit.Builder().baseUrl(BASE_URL).client(client)
                .addConverterFactory(JacksonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();
    }
}

Aparentemente a funcionalidade de utilizar modo assistente e thread não funciona mais com a biblioteca do TheoKanning (Que aliás deveria receber royalties pelo curso que nem sequer se prestou a utilizar o SDK oficial ou a API, tornando os exemplos inválidos pouco tempo após o lançamento do curso) Tentei implementar um Client customizado e passar o cabeçalho para continuar usando o exemplo, mas mesmo assim não funciona Fica registrada a frustração, isso fora a parte de tratamento de erro que parece que foi feita só para constar Um curso que se propõe a ensinar integração do código com IA deveria no meu entendimento no mínimo passar mais embasamento teórico, utilizar SDK oficial ou a API e ser mais completo no que tange a integração (Infelizmente o curso é curto e mesmo assim foca mais no exemplo fictício em si e suas regras de negócio do que no conteúdo principal) Desculpe pela dura crítica mas a assinatura da plataforma é cara e fica parecendo que estão gerando o curso com ChatGPT (Ironicamente até mesmo os que falam sobre ChatGPT)

1 resposta

Oi Renan!

Quando o curso foi gravado não existiam libs oficiais para Java, apenas para Python e JavaScript, sendo que na própria documentação da OpenAI era recomendada lib do TheoKanning como alternativa para o Java.

Infelizmente, hoje essa lib está deprecated e alguns recursos não mais funcionam. O curso já está na lista de regravação, mas ainda sem data definida, pois existe uma lista de prioridades com outras demandas.

Agradecemos o feedback ;)

Bons estudos!