quarkus-langchain4j icon indicating copy to clipboard operation
quarkus-langchain4j copied to clipboard

AWS Bedrock, Conversation blocks and tool use blocks cannot be provided in the same turn.

Open bitsofinfo opened this issue 1 week ago • 0 comments

When using aws bedrock (llama), I just call my AiService's chat() method with some user text like "hello" and I get the error (see below).

Note this same code works just fine locally hitting lmstudio hosted a qwen 2.5 instruct model.

quarkus: 3.29.4

    implementation 'io.quarkiverse.langchain4j:quarkus-langchain4j-mcp:1.4.0'
    implementation 'io.quarkiverse.langchain4j:quarkus-langchain4j-openai:1.4.0'
    implementation 'io.quarkiverse.langchain4j:quarkus-langchain4j-tavily:1.4.0'
    implementation 'io.quarkiverse.langchain4j:quarkus-langchain4j-pgvector:1.4.0'
    implementation 'dev.langchain4j:langchain4j:1.8.0'
    implementation 'dev.langchain4j:langchain4j-bedrock:1.9.0'

My Tool

@SystemMessage(DefaultModelConfig.MY_SYSTEM_PROMPT)
public interface TestToolService extends ChatMemoryAccess {

    @ToolBox(WebSearchTool.class)
    @McpToolBox("myTool") 
    String chat(@UserMessage String message, @MemoryId String memoryId);

}

my service

AiServices.builder(TestToolService.class)
                .chatModel(getChatModel())
                .chatMemoryProvider(myChatMemoryProvider)
                .build();
ChatModel getChatModel() {
  return BedrockChatModel.builder()
                                      .modelId("us.meta.llama3-2-11b-instruct-v1:0")
                                      .returnThinking(false)
                                      .sendThinking(false)
                                      .timeout(Duration.ofSeconds(60))
                                      .maxRetries(2)
                                      .logRequests(true)
                                      .logResponses(true)
                                      .defaultRequestParameters(BedrockChatRequestParameters.builder()
                                          .enableReasoning(1024) // token budget
                                          .build())
                                  .build();
}
2025-11-28 07:31:34,220 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /v1/chat/completions failed, error id: 6361affc-5d3f-4b56-bc47-433583283923-1: dev.langchain4j.exception.InvalidRequestException: messages.7.content: Conversation blocks and tool use blocks cannot be provided in the same turn. (Service: BedrockRuntime, Status Code: 400, Request ID: 45c9c3bb-aa19-49ed-8ef6-b3f01f9b3a53) (SDK Attempt Count: 1)
	at dev.langchain4j.internal.ExceptionMapper$DefaultExceptionMapper.mapHttpStatusCode(ExceptionMapper.java:71)
	at dev.langchain4j.model.bedrock.BedrockExceptionMapper.mapException(BedrockExceptionMapper.java:18)
	at dev.langchain4j.internal.ExceptionMapper.withExceptionMapper(ExceptionMapper.java:31)
	at dev.langchain4j.internal.RetryUtils.lambda$withRetryMappingExceptions$1(RetryUtils.java:322)
	at dev.langchain4j.internal.RetryUtils$RetryPolicy.withRetry(RetryUtils.java:204)
	at dev.langchain4j.internal.RetryUtils.withRetry(RetryUtils.java:259)
	at dev.langchain4j.internal.RetryUtils.withRetryMappingExceptions(RetryUtils.java:322)
	at dev.langchain4j.model.bedrock.BedrockChatModel.doChat(BedrockChatModel.java:52)
	at dev.langchain4j.model.chat.ChatModel.chat(ChatModel.java:46)
	at dev.langchain4j.guardrail.SynchronousChatExecutor.execute(SynchronousChatExecutor.java:32)
	at dev.langchain4j.guardrail.AbstractChatExecutor.execute(AbstractChatExecutor.java:45)
	at io.quarkiverse.langchain4j.runtime.aiservice.AiServiceMethodImplementationSupport.doImplement(AiServiceMethodImplementationSupport.java:436)
	at io.quarkiverse.langchain4j.runtime.aiservice.AiServiceMethodImplementationSupport.implement(AiServiceMethodImplementationSupport.java:163)
	at com.barf.ai.inference.tool.TestToolService$$QuarkusImpl.chat(Unknown Source)
	at com.barf.ai.inference.engine.testme.TestInferenceEngine.chat(TestInferenceEngine.java:42)
	at com.barf.ai.inference.api.endpoint.InferenceEndpoint.completions(InferenceEndpoint.java:109)
	at com.barf.ai.inference.api.endpoint.InferenceEndpoint$quarkusrestinvoker$completions_0fbcc26ce5aeb6cfaf7d9828ade71a9850219ac7.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:183)
	at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:645)
	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)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: software.amazon.awssdk.services.bedrockruntime.model.ValidationException: messages.7.content: Conversation blocks and tool use blocks cannot be provided in the same turn. (Service: BedrockRuntime, Status Code: 400, Request ID: 45c9c3bb-aa19-49ed-8ef6-b3f01f9b3a53) (SDK Attempt Count: 1)
	at software.amazon.awssdk.services.bedrockruntime.model.ValidationException$BuilderImpl.build(ValidationException.java:152)
	at software.amazon.awssdk.services.bedrockruntime.model.ValidationException$BuilderImpl.build(ValidationException.java:100)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.utils.RetryableStageHelper.retryPolicyDisallowedRetryException(RetryableStageHelper.java:168)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:73)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:36)
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
	at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:53)
	at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:35)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:82)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:62)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:43)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:50)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:32)
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)
	at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:210)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:173)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:80)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:182)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:74)
	at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
	at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:53)
	at software.amazon.awssdk.services.bedrockruntime.DefaultBedrockRuntimeClient.converse(DefaultBedrockRuntimeClient.java:408)
	at dev.langchain4j.model.bedrock.BedrockChatModel.lambda$doChat$0(BedrockChatModel.java:53)
	at dev.langchain4j.internal.ExceptionMapper.withExceptionMapper(ExceptionMapper.java:29)
	... 26 more

bitsofinfo avatar Nov 28 '25 14:11 bitsofinfo