Jlama icon indicating copy to clipboard operation
Jlama copied to clipboard

Tools called too many times

Open fancellu opened this issue 8 months ago • 3 comments

I saw this reported before https://github.com/tjake/Jlama/issues/93

Still does it for me

Sending email to [email protected] with content: squareRoot(26)
Sending email to [email protected] with content: 5.0990195135927845
Sending email to [email protected] with content: 5.0990195135927845

etc

Goes on forever

import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.jlama.JlamaChatModel;
import dev.langchain4j.service.AiServices;
import java.nio.file.Path;

public class JlamaToolsBug {

    interface MathGenius {

        String ask(String question);
    }

    static class Tools {
        @Tool("Sums 2 given numbers")
        double sum(double a, double b) {
            return a + b;
        }

        @Tool("Returns a square root of a given number")
        double squareRoot(double x) {
            return Math.sqrt(x);
        }

        @Tool("Send email")
        void sendEmail(String email, String content) {
            System.out.println("Sending email to " + email + " with content: " + content);
        }
    }

    public static void sendSquareRootToEmail(ChatLanguageModel model) {
        MathGenius mathGenius = AiServices.builder(MathGenius.class).chatLanguageModel(model).tools(new Tools()).build();
        mathGenius.ask("Send the square root of 26 to [email protected]");
    }

    public static void main(String[] args) {

        ChatLanguageModel model = JlamaChatModel.builder()
                .modelCachePath(Path.of("jlamaCache"))
                .modelName("tjake/Llama-3.2-1B-Instruct-JQ4")
                .build();

        sendSquareRootToEmail(model);

    }

}

fancellu avatar Apr 23 '25 11:04 fancellu

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>java1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <extensions>
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.7.0</version>
            </extension>
        </extensions>
    </build>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
            <version>1.0.0-beta3</version>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
            <version>1.0.0-beta3</version>
        </dependency>

        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-google-ai-gemini</artifactId>
            <version>1.0.0-beta3</version>
        </dependency>

        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-jlama</artifactId>
            <version>1.0.0-beta3</version>
        </dependency>

        <dependency>
            <groupId>com.github.tjake</groupId>
            <artifactId>jlama-native</artifactId>
            <classifier>${os.detected.name}-${os.detected.arch}</classifier>
            <version>0.8.3</version>
        </dependency>
    </dependencies>


</project>

fancellu avatar Apr 23 '25 11:04 fancellu

Ah, I was using 0.8.3

However when I use 0.8.4

Exception in thread "main" dev.langchain4j.exception.InternalServerException: Cannot invoke "java.lang.Comparable.compareTo(Object)" because the return value of "java.util.function.Function.apply(Object)" is null
	at dev.langchain4j.model.jlama.JlamaExceptionMapper.mapException(JlamaExceptionMapper.java:27)
	at dev.langchain4j.internal.ExceptionMapper.withExceptionMapper(ExceptionMapper.java:29)
	at dev.langchain4j.model.jlama.JlamaChatModel.generate(JlamaChatModel.java:158)
	at dev.langchain4j.model.jlama.JlamaChatModel.chat(JlamaChatModel.java:99)
	at dev.langchain4j.service.tool.ToolService.executeInferenceAndToolsLoop(ToolService.java:165)
	at dev.langchain4j.service.DefaultAiServices$1.invoke(DefaultAiServices.java:228)
	at $Proxy15.ask(Unknown Source)
	at JlamaToolsBug.sendSquareRootToEmail(JlamaToolsBug.java:33)
	at JlamaToolsBug.main(JlamaToolsBug.java:43)
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Comparable.compareTo(Object)" because the return value of "java.util.function.Function.apply(Object)" is null
	at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:473)
	at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
	at java.base/java.util.TimSort.sort(TimSort.java:220)
	at java.base/java.util.Arrays.sort(Arrays.java:1308)
	at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:353)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)

fancellu avatar Apr 23 '25 11:04 fancellu

If I use openai instead

   OpenAiChatModel model = OpenAiChatModel.builder()
                .apiKey("demo")
                .baseUrl("http://langchain4j.dev/demo/openai/v1")
                .modelName("gpt-4o-mini")
                .build();

I see Sending email to [email protected] with content: The square root of 26 is approximately 5.10. once. Which implies that my code is fairly reasonable

fancellu avatar Apr 23 '25 11:04 fancellu