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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 66eb331546278792ee33031dc56d22e86f13afce
Author: Otavio Rodolfo Piske <angusyo...@gmail.com>
AuthorDate: Mon Aug 12 17:52:58 2024 +0200

    (chores) camel-langchain4j-chat: convert consumer function calling test to 
use Ollama
---
 .../langchain4j.chat/LangChain4jConsumerIT.java    | 58 +++++++++++++++++-----
 .../langchain4j.chat/OllamaTestSupport.java        |  4 +-
 2 files changed, 48 insertions(+), 14 deletions(-)

diff --git 
a/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/LangChain4jConsumerIT.java
 
b/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/LangChain4jConsumerIT.java
index 21f6f2fe81f..aa8748b8890 100644
--- 
a/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/LangChain4jConsumerIT.java
+++ 
b/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/LangChain4jConsumerIT.java
@@ -23,21 +23,39 @@ import dev.langchain4j.agent.tool.JsonSchemaProperty;
 import dev.langchain4j.data.message.ChatMessage;
 import dev.langchain4j.data.message.SystemMessage;
 import dev.langchain4j.data.message.UserMessage;
+import dev.langchain4j.model.chat.ChatLanguageModel;
 import dev.langchain4j.model.openai.OpenAiChatModel;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import 
org.apache.camel.component.langchain4j.chat.tool.CamelSimpleToolParameter;
 import 
org.apache.camel.component.langchain4j.chat.tool.NamedJsonSchemaProperty;
+import org.apache.camel.test.infra.ollama.services.OllamaService;
+import org.apache.camel.test.infra.ollama.services.OllamaServiceFactory;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.assertj.core.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
+import org.junit.jupiter.api.RepeatedTest;
+import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
-@EnabledIfEnvironmentVariable(named = "OPENAI_API_KEY", matches = ".*")
+import static java.time.Duration.ofSeconds;
+
+@DisabledIfSystemProperty(named = "ci.env.name", matches = ".*", 
disabledReason = "Requires too much network resources")
 public class LangChain4jConsumerIT extends CamelTestSupport {
 
+    public static final String MODEL_NAME = "llama3.1:latest";
     private final String nameFromDB = "pippo";
+    private ChatLanguageModel chatLanguageModel;
+
+    @RegisterExtension
+    static OllamaService OLLAMA = 
OllamaServiceFactory.createServiceWithConfiguration(() -> MODEL_NAME);
+
+    @Override
+    protected void setupResources() throws Exception {
+        super.setupResources();
+
+        chatLanguageModel = createModel();
+    }
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
@@ -46,12 +64,25 @@ public class LangChain4jConsumerIT extends CamelTestSupport 
{
         LangChain4jChatComponent component
                 = context.getComponent(LangChain4jChat.SCHEME, 
LangChain4jChatComponent.class);
 
-        component.getConfiguration().setChatModel(
-                OpenAiChatModel.withApiKey(System.getenv("OPENAI_API_KEY")));
+        component.getConfiguration().setChatModel(chatLanguageModel);
 
         return context;
     }
 
+    protected ChatLanguageModel createModel() {
+        chatLanguageModel = OpenAiChatModel.builder()
+                .apiKey("NO_API_KEY")
+                .modelName(MODEL_NAME)
+                .baseUrl(OLLAMA.getEndpoint())
+                .temperature(0.0)
+                .timeout(ofSeconds(60))
+                .logRequests(true)
+                .logResponses(true)
+                .build();
+
+        return chatLanguageModel;
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
@@ -65,10 +96,11 @@ public class LangChain4jConsumerIT extends CamelTestSupport 
{
                 context().getRegistry().bind("parameters", camelToolParameter);
 
                 from("direct:test")
-                        
.to("langchain4j-chat:test1?chatOperation=CHAT_MULTIPLE_MESSAGES");
+                        
.to("langchain4j-chat:test1?chatOperation=CHAT_MULTIPLE_MESSAGES")
+                        .log("response is: ${body}");
 
                 from("langchain4j-chat:test1?description=Query user database 
by number&parameter.number=integer")
-                        .process(exchange -> 
exchange.getIn().setBody(nameFromDB));
+                        .setBody(simple("{\"name\": \"pippo\"}"));
 
                 from("langchain4j-chat:test1?camelToolParameter=#parameters")
                         .setBody(constant("Hello World"));
@@ -76,12 +108,13 @@ public class LangChain4jConsumerIT extends 
CamelTestSupport {
         };
     }
 
-    @Test
+    @RepeatedTest(10)
     public void testSimpleInvocation() {
         List<ChatMessage> messages = new ArrayList<>();
-        messages.add(new SystemMessage("""
-                You provide information about specific user name querying the 
database given a number.
-                """));
+        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.
+                        """));
         messages.add(new UserMessage("""
                 What is the name of the user 1?
                 """));
@@ -89,6 +122,7 @@ public class LangChain4jConsumerIT extends CamelTestSupport {
         Exchange message = 
fluentTemplate.to("direct:test").withBody(messages).request(Exchange.class);
 
         Assertions.assertThat(message).isNotNull();
-        
Assertions.assertThat(message.getMessage().getBody().toString()).contains(nameFromDB);
+        final String responseContent = 
message.getMessage().getBody().toString();
+        
Assertions.assertThat(responseContent).containsIgnoringCase(nameFromDB);
     }
 }
diff --git 
a/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/OllamaTestSupport.java
 
b/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/OllamaTestSupport.java
index f23197a8ec8..24a3c0a3da4 100644
--- 
a/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/OllamaTestSupport.java
+++ 
b/components/camel-ai/camel-langchain4j-chat/src/test/java/org/apache/camel/component/langchain4j.chat/OllamaTestSupport.java
@@ -39,9 +39,9 @@ public class OllamaTestSupport extends CamelTestSupport {
         chatLanguageModel = createModel();
     }
 
-    public ChatLanguageModel createModel() {
+    protected ChatLanguageModel createModel() {
         return OllamaChatModel.builder()
-                .baseUrl(OLLAMA.getBaseUrl())
+                .baseUrl(OLLAMA.getEndpoint())
                 .modelName(OLLAMA.getModel())
                 .temperature(0.3)
                 .timeout(ofSeconds(60))

Reply via email to