Ollama4j
A Java library (wrapper/binding) for Ollama server.
Loading...
Searching...
No Matches
ReflectionalToolFunction.java
Go to the documentation of this file.
1package io.github.ollama4j.tools;
2
3import lombok.AllArgsConstructor;
4import lombok.Getter;
5import lombok.Setter;
6
7import java.lang.reflect.Method;
8import java.math.BigDecimal;
9import java.util.LinkedHashMap;
10import java.util.Map;
11
15@Setter
16@Getter
17@AllArgsConstructor
18public class ReflectionalToolFunction implements ToolFunction{
19
20 private Object functionHolder;
21 private Method function;
22 private LinkedHashMap<String,String> propertyDefinition;
23
24 @Override
25 public Object apply(Map<String, Object> arguments) {
26 LinkedHashMap<String, Object> argumentsCopy = new LinkedHashMap<>(this.propertyDefinition);
27 for (Map.Entry<String,String> param : this.propertyDefinition.entrySet()){
28 argumentsCopy.replace(param.getKey(),typeCast(arguments.get(param.getKey()),param.getValue()));
29 }
30 try {
31 return function.invoke(functionHolder, argumentsCopy.values().toArray());
32 } catch (Exception e) {
33 throw new RuntimeException("Failed to invoke tool: " + function.getName(), e);
34 }
35 }
36
37 private Object typeCast(Object inputValue, String className) {
38 if(className == null || inputValue == null) {
39 return null;
40 }
41 String inputValueString = inputValue.toString();
42 switch (className) {
43 case "java.lang.Integer":
44 return Integer.parseInt(inputValueString);
45 case "java.lang.Boolean":
46 return Boolean.valueOf(inputValueString);
47 case "java.math.BigDecimal":
48 return new BigDecimal(inputValueString);
49 default:
50 return inputValueString;
51 }
52 }
53
54}