googleapis / googleapis/google-cloud-java
Call DataChatServiceClient with Conversation leads to --> Suppressed: java.lang.RuntimeException: Asynchronous task failed at com.google.api.gax.rpc.ServerStreamIterator.hasNext(ServerStreamIterator.java:105)
- 主要语言
- Java
- 星标
- 2.1k
- 派生
- 1.2k
- 平均合并
- 1 天 23 小时
- 30 天内合并 PR
- 157
描述
## Issue Details
I am using
```
26.84.0
---
com.google.cloud
libraries-bom
${google.cloud.libraries-bom.version}
pom
import
-----
com.google.cloud
google-cloud-geminidataanalytics
```
When calling the DataChatServiceClient with a conversation i got:
```
com.google.api.gax.rpc.InternalException: io.grpc.StatusRuntimeException: INTERNAL: Internal error encountered.
at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:120)
at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:86)
at com.google.api.gax.rpc.ApiExceptionFactory.createException(ApiExceptionFactory.java:41)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:86)
at com.google.api.gax.grpc.GrpcApiExceptionFactory.create(GrpcApiExceptionFactory.java:66)
at com.google.api.gax.grpc.ExceptionResponseObserver.onErrorImpl(ExceptionResponseObserver.java:82)
at com.google.api.gax.rpc.StateCheckingResponseObserver.onError(StateCheckingResponseObserver.java:84)
at com.google.api.gax.grpc.GrpcDirectStreamController$ResponseObserverAdapter.onClose(GrpcDirectStreamController.java:148)
at io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
at io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
at io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
at com.google.api.gax.grpc.ChannelPool$ReleasingClientCall$1.onClose(ChannelPool.java:651)
at io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)
at io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)
at io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)
at com.google.api.gax.grpc.GrpcLoggingInterceptor$1$1.onClose(GrpcLoggingInterceptor.java:98)
at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:566)
at io.grpc.internal.ClientCallImpl.access$100(ClientCallImpl.java:72)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:734)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:715)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)
Suppressed: java.lang.RuntimeException: Asynchronous task failed
at com.google.api.gax.rpc.ServerStreamIterator.hasNext(ServerStreamIterator.java:105)
at io.gec.bigquery.control.DataAgentChatService.forEachChatMessage(DataAgentChatService.java:120)
at io.gec.bigquery.control.DataAgentChatService.chat(DataAgentChatService.java:102)
at io.gec.bigquery.control.DataAgentChatService_ClientProxy.chat(Unknown Source)
at io.gec.bigquery.boundary.ChatResource.chat(ChatResource.java:30)
at io.gec.bigquery.boundary.ChatResource_ClientProxy.chat(Unknown Source)
at io.gec.bigquery.boundary.ChatResource$quarkusrestinvoker$chat_6f06d6f38f3e27ba1e41c7eaa780f3bbd3a1ade8.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:190)
at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:695)
at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
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)
... 1 more
Caused by: io.grpc.StatusRuntimeException: INTERNAL: Internal error encountered.
at io.grpc.Status.asRuntimeException(Status.java:532)
... 18 more
```
Here my Implementation:
```java
private ChatRequest buildChatRequest(String question, String conversationId) {
String parent = locationName();
Message userMessage = Message.newBuilder()
.setUserMessage(UserMessage.newBuilder().setText(question).build())
.build();
ChatRequest.Builder requestBuilder = ChatRequest.newBuilder()
.setParent(parent)
.addMessages(userMessage);
if (conversationId != null && !conversationId.isBlank()) {
String conversationName = conversationName(conversationId);
ConversationReference conversationReference = ConversationReference.newBuilder()
.setConversation(conversationName)
.setDataAgentContext(DataAgentContext.newBuilder()
.setDataAgent(configuredDataAgentName())
.build())
.build();
requestBuilder.setConversationReference(conversationReference);
} else {
requestBuilder.setDataAgentContext(DataAgentContext.newBuilder()
.setDataAgent(configuredDataAgentName())
.build());
}
return requestBuilder.build();
}
```
When calling without conversationId everything is working as expected.
## Environment
* Linux
* JDK 25.0.2
* 26.84.0
贡献指南
调研方向
首先,使用 conversationId 重现失败,并将其与不带 conversationId 的正常请求进行比较。阅读 DataChatService.chat 和 forEachChatMessage,然后检查 buildChatRequest 以及 ConversationReference/DataAgentContext 的构造。完成的标准是基于 conversation 的聊天无需 INTERNAL 错误即可成功,同时无 conversation 路径继续正常工作。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- google-cloud, java
- 领域
- api, backend
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100