Skip to content

OpenAI memory example hangs #1695

@fedinskiy

Description

@fedinskiy

Steps to reproduce:

  1. Clone the repo
  2. Start the openai IT module in dev mode, using OpenAI API:
mvn clean quarkus:dev -Dopenai.key=<EDITED> -Dquarkus.langchain4j.openai.chat-model.model-name=gpt-4o-mini -pl integration-tests/openai/
  1. Open http://localhost:8080/chat/memory

Expectation: results from the query
Reality: the page hangs, logs contain the following:

2025-08-13 16:54:13,149 WARNING [io.qua.ope.run.exp.otl.sen.VertxGrpcSender] (vert.x-eventloop-thread-4) Failed to export TraceRequestMarshalers. The request could not be executed. Full error message: Connection refused: localhost/127.0.0.1:4317
2025-08-13 16:54:15,158 INFO  [io.qua.lan.ope.com.OpenAiRestApi$OpenAiClientLogger] (vert.x-eventloop-thread-3) Request:
- method: POST
- url: https://api.openai.com/v1/chat/completions
- headers: [Accept: text/event-stream], [Authorization: Be...MA], [Content-Type: application/json], [User-Agent: langchain4j-openai], [content-length: 384]
- body: {
  "model" : "gpt-4o-mini",
  "messages" : [ {
    "role" : "user",
    "content" : "How do I optimize database queries for a large-scale e-commerce platform? Answer short in three to five lines maximum."
  } ],
  "temperature" : 1.0,
  "top_p" : 1.0,
  "stream" : true,
  "stream_options" : {
    "include_usage" : true
  },
  "presence_penalty" : 0.0,
  "frequency_penalty" : 0.0
}

2025-08-13 16:54:15,787 ERROR [io.qua.mut.run.MutinyInfrastructure] (vert.x-eventloop-thread-3) Mutiny had to drop the following exception: java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:220)
	at java.base/java.util.concurrent.ConcurrentLinkedQueue.offer(ConcurrentLinkedQueue.java:355)
	at java.base/java.util.concurrent.ConcurrentLinkedQueue.add(ConcurrentLinkedQueue.java:283)
	at dev.langchain4j.model.openai.OpenAiStreamingResponseBuilder.append(OpenAiStreamingResponseBuilder.java:75)
	at dev.langchain4j.model.openai.OpenAiStreamingChatModel.lambda$doChat$0(OpenAiStreamingChatModel.java:148)
	at dev.langchain4j.model.openai.internal.SyncOrAsyncOrStreaming.lambda$onRawPartialResponse$0(SyncOrAsyncOrStreaming.java:12)
	at io.smallrye.mutiny.subscription.Subscribers$CallbackBasedSubscriber.onItem(Subscribers.java:79)
	at io.smallrye.mutiny.operators.multi.builders.BufferItemMultiEmitter.drain(BufferItemMultiEmitter.java:123)
	at io.smallrye.mutiny.operators.multi.builders.BufferItemMultiEmitter.emit(BufferItemMultiEmitter.java:37)
	at io.smallrye.mutiny.operators.multi.builders.SerializedMultiEmitter.onItem(SerializedMultiEmitter.java:50)
	at io.smallrye.mutiny.operators.multi.builders.SerializedMultiEmitter.emit(SerializedMultiEmitter.java:140)
	at org.jboss.resteasy.reactive.client.impl.MultiInvoker$MultiRequest.emit(MultiInvoker.java:74)
	at org.jboss.resteasy.reactive.client.impl.MultiInvoker.lambda$registerForSse$2(MultiInvoker.java:244)
	at org.jboss.resteasy.reactive.client.impl.SseEventSourceImpl.fireEvent(SseEventSourceImpl.java:231)
	at org.jboss.resteasy.reactive.client.impl.SseParser.dispatchEvent(SseParser.java:181)
	at org.jboss.resteasy.reactive.client.impl.SseParser.parseEvent(SseParser.java:155)
	at org.jboss.resteasy.reactive.client.impl.SseParser.handle(SseParser.java:115)
	at org.jboss.resteasy.reactive.client.impl.SseParser.handle(SseParser.java:11)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
	at io.vertx.core.http.impl.HttpEventHandler.handleChunk(HttpEventHandler.java:51)
	at io.vertx.core.http.impl.HttpClientResponseImpl.handleChunk(HttpClientResponseImpl.java:239)
	at io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.lambda$new$0(Http1xClientConnection.java:429)
	at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:279)
	at io.vertx.core.streams.impl.InboundBuffer.drain(InboundBuffer.java:266)
	at io.vertx.core.streams.impl.InboundBuffer.lambda$asyncDrain$1(InboundBuffer.java:317)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:252)
	at io.vertx.core.impl.ContextInternal.lambda$runOnContext$0(ContextInternal.java:50)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:566)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1447)


2025-08-13 16:54:18,882 WARNING [io.qua.ope.run.exp.otl.sen.VertxGrpcSender] (vert.x-eventloop-thread-6) Failed to export TraceRequestMarshalers. The request could not be executed. Full error message: Connection refused: localhost/127.0.0.1:4317
2025-08-13 16:55:13,643 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /chat/memory failed, error id: 0806d55b-215e-4064-91e0-13d38d269506-1

Exception in ChatLanguageModelResource.java:138
	  136  
	  137          streamingChatLanguageModel.chat(chatMemory.messages(), handler);
	→ 138          AiMessage firstAiMessage = futureRef.get().get(60, TimeUnit.SECONDS);
	  139          chatMemory.add(firstAiMessage);
	  140  : java.util.concurrent.TimeoutException
	at java.base/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:2006)
	at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2141)
	at org.acme.example.openai.chat.ChatLanguageModelResource.memory(ChatLanguageModelResource.java:138)
	at org.acme.example.openai.chat.ChatLanguageModelResource$quarkusrestinvoker$memory_e79e4773689d9f0b2a1dd7916cd7fb59e4627c95.invoke(Unknown Source)
	at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
	at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:141)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:638)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2675)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2654)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1627)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1594)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1447)


2025-08-13 16:55:13,704 INFO  [io.qua.ope.run.QuarkusContextStorage] (vert.x-eventloop-thread-3) Context in storage not the expected context, Scope.close was not called correctly. Details: OTel context before: {spanId=74f617cd51e9dd2f, traceId=d275a505ac51cf86e7261c96b2065eab, sampled=true, parentId=545bf19edba3402a}. OTel context toAttach: {spanId=545bf19edba3402a, traceId=d275a505ac51cf86e7261c96b2065eab, sampled=true}
2025-08-13 16:55:14,825 WARNING [io.qua.ope.run.exp.otl.sen.VertxGrpcSender] (vert.x-eventloop-thread-6) Failed to export TraceRequestMarshalers. The request could not be executed. Full error message: Connection refused: localhost/127.0.0.1:4317

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions