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