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)