Jlama
Jlama copied to clipboard
Tools called too many times
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);
}
}
<?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>
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)
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