This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-4.8.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-4.8.x by this push:
     new 38e8f171a89 CAMEL-21595: avoid an NPE if the model decides not to call 
any tool (#16719)
38e8f171a89 is described below

commit 38e8f171a89d3d100e49f3d4e07dae4cd0f914f9
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Tue Jan 7 09:32:30 2025 +0100

    CAMEL-21595: avoid an NPE if the model decides not to call any tool (#16719)
---
 .../langchain4j/tools/LangChain4jToolsProducer.java        |  3 +++
 ...ooNoToolsIT.java => LangChain4jToolNoToolsExistIT.java} | 14 ++++++++------
 ...oolsIT.java => LangChain4jToolNoToolsToBeCalledIT.java} | 14 ++++++++------
 3 files changed, 19 insertions(+), 12 deletions(-)

diff --git 
a/components/camel-ai/camel-langchain4j-tools/src/main/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolsProducer.java
 
b/components/camel-ai/camel-langchain4j-tools/src/main/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolsProducer.java
index f74279641f8..664696e42b1 100644
--- 
a/components/camel-ai/camel-langchain4j-tools/src/main/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolsProducer.java
+++ 
b/components/camel-ai/camel-langchain4j-tools/src/main/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolsProducer.java
@@ -100,6 +100,9 @@ public class LangChain4jToolsProducer extends 
DefaultProducer {
 
         // First talk to the model to get the tools to be called
         final Response<AiMessage> response = chatWithLLMForTools(chatMessages, 
toolPair, exchange);
+        if (response == null) {
+            return null;
+        }
 
         // Then, talk again to call the tools and compute the final response
         return chatWithLLMForToolCalling(chatMessages, exchange, response, 
toolPair);
diff --git 
a/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jTooNoToolsIT.java
 
b/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolNoToolsExistIT.java
similarity index 89%
copy from 
components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jTooNoToolsIT.java
copy to 
components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolNoToolsExistIT.java
index 805575baf94..fa15cb817fd 100644
--- 
a/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jTooNoToolsIT.java
+++ 
b/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolNoToolsExistIT.java
@@ -38,7 +38,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 import static java.time.Duration.ofSeconds;
 
 @DisabledIfSystemProperty(named = "ci.env.name", matches = ".*", 
disabledReason = "Requires too much network resources")
-public class LangChain4jTooNoToolsIT extends CamelTestSupport {
+public class LangChain4jToolNoToolsExistIT extends CamelTestSupport {
 
     public static final String MODEL_NAME = "llama3.1:latest";
     private ChatLanguageModel chatLanguageModel;
@@ -84,12 +84,15 @@ public class LangChain4jTooNoToolsIT extends 
CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:test")
-                        .to("langchain4j-tools:test1?tags=somethingElse")
+                        .to("langchain4j-tools:test1?tags=user")
                         .log("response is: ${body}");
 
                 from("langchain4j-tools:test1?tags=user&description=Query user 
database by number&parameter.number=integer")
                         .setBody(simple("{\"name\": \"pippo\"}"));
 
+                from("langchain4j-tools:test1?tags=user&description=Does not 
do anything, really")
+                        .setBody(simple("{\"name\": \"pippo\"}"));
+
                 from("direct:noResponse")
                         .log("there is no tool to be called for the request: 
${body}")
                         .setBody(constant("There was no tool to be called"))
@@ -104,12 +107,11 @@ public class LangChain4jTooNoToolsIT extends 
CamelTestSupport {
         List<ChatMessage> messages = new ArrayList<>();
         messages.add(new SystemMessage(
                 """
-                        You provide the requested information using the 
functions you hava available. You can invoke the functions to obtain the 
information you need to complete the answer.
-                        If no tool matches the input, then don't invoke any of 
them.
+                        Your job is to help me test my code. When asked to 
call a tool you do not call anything.
                         """));
         messages.add(new UserMessage("""
-                What time is the breakfast tomorrow?
-                """));
+                How can you help?
+                 """));
 
         Exchange message = 
fluentTemplate.to("direct:test").withBody(messages).request(Exchange.class);
 
diff --git 
a/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jTooNoToolsIT.java
 
b/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolNoToolsToBeCalledIT.java
similarity index 89%
rename from 
components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jTooNoToolsIT.java
rename to 
components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolNoToolsToBeCalledIT.java
index 805575baf94..15491465cf3 100644
--- 
a/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jTooNoToolsIT.java
+++ 
b/components/camel-ai/camel-langchain4j-tools/src/test/java/org/apache/camel/component/langchain4j/tools/LangChain4jToolNoToolsToBeCalledIT.java
@@ -38,7 +38,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 import static java.time.Duration.ofSeconds;
 
 @DisabledIfSystemProperty(named = "ci.env.name", matches = ".*", 
disabledReason = "Requires too much network resources")
-public class LangChain4jTooNoToolsIT extends CamelTestSupport {
+public class LangChain4jToolNoToolsToBeCalledIT extends CamelTestSupport {
 
     public static final String MODEL_NAME = "llama3.1:latest";
     private ChatLanguageModel chatLanguageModel;
@@ -84,12 +84,15 @@ public class LangChain4jTooNoToolsIT extends 
CamelTestSupport {
         return new RouteBuilder() {
             public void configure() {
                 from("direct:test")
-                        .to("langchain4j-tools:test1?tags=somethingElse")
+                        .to("langchain4j-tools:test1?tags=user")
                         .log("response is: ${body}");
 
                 from("langchain4j-tools:test1?tags=user&description=Query user 
database by number&parameter.number=integer")
                         .setBody(simple("{\"name\": \"pippo\"}"));
 
+                from("langchain4j-tools:test1?tags=user&description=Does not 
do anything, really")
+                        .setBody(simple("{\"name\": \"pippo\"}"));
+
                 from("direct:noResponse")
                         .log("there is no tool to be called for the request: 
${body}")
                         .setBody(constant("There was no tool to be called"))
@@ -104,12 +107,11 @@ public class LangChain4jTooNoToolsIT extends 
CamelTestSupport {
         List<ChatMessage> messages = new ArrayList<>();
         messages.add(new SystemMessage(
                 """
-                        You provide the requested information using the 
functions you hava available. You can invoke the functions to obtain the 
information you need to complete the answer.
-                        If no tool matches the input, then don't invoke any of 
them.
+                        Your job is to help me test my code. When asked to 
call a tool you do not call anything.
                         """));
         messages.add(new UserMessage("""
-                What time is the breakfast tomorrow?
-                """));
+                How can you help?
+                 """));
 
         Exchange message = 
fluentTemplate.to("direct:test").withBody(messages).request(Exchange.class);
 

Reply via email to