Cancelling the completable future of an OpenAI call doesn't cancel the underlying OkHttp request
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 55/100
Línea de trabajo
Comienza en el puente executeAsync mostrado y sigue cómo newCall(...).enqueue conecta la CompletableFuture con el Call subyacente. Comprueba cómo se gestiona actualmente la cancelación e identifica las pruebas HTTP asíncronas relevantes; se considera terminado cuando cancelar el future devuelto también cancela la solicitud sin afectar a la finalización normal de la respuesta o del error.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I have a few scenarios where we may opportunistically issue a request to an LLM but then cancel it, sometimes quickly so potentially before it's even been processed by the backend and charged for. It would seem natural that using the cancel method of an async call would do that, but it doesn't appear that this propagates to the underlying OkHttp layer.
This method appears to be the bridge between the SDK interfaces and the underlying HTTP engine:
override fun executeAsync(
request: HttpRequest,
requestOptions: RequestOptions,
): CompletableFuture<HttpResponse> {
val future = CompletableFuture<HttpResponse>()
request.body?.run { future.whenComplete { _, _ -> close() } }
newCall(request, requestOptions)
.enqueue(
object : Callback {
override fun onResponse(call: Call, response: Response) {
future.complete(response.toResponse())
}
override fun onFailure(call: Call, e: IOException) {
future.completeExceptionally(OpenAIIoException("Request failed", e))
}
}
)
return future
}
The problem appears to be that the completable future here doesn't link to the HttpRequest. The Call interface from OkHttp has a cancel method, but this is not called as a result of the future being cancelled.
Instead what appears to happen is that the request is orphaned if the outer future is cancelled, leading to a resource leak.
- Lenguaje dominante
- Kotlin
- Estrellas
- 1.5k
- Forks
- 264
- Merge medio
- 12 h 15 min
- PR fusionados (30 d)
- 116
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de openai/openai-java
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
openai/openai-java#886 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
openai/openai-java#802 · 2 comentarios · 3 reacciones ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
openai/openai-java#755 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug sdk
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
openai/openai-java#652 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 74/100
openai/openai-java#973 ·
Los mantenedores suelen responder en 1 día
Todos los issues de openai/openai-java
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
-
[TR] Turkish Translation Improvements for Skip Types / Türkçe Atla Türleri Çeviri DüzeltmesiAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
recloudstream/cloudstream#3226 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
aws/aws-crt-kotlin#309 ·
Los mantenedores suelen responder en 3 días
-
OAI-PMH
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100