Skip to content

Commit 3b40384

Browse files
committed
add parameter types to tool call arguments
1 parent 9219810 commit 3b40384

File tree

3 files changed

+35
-4
lines changed
  • aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion
  • samples/semantickernel-concepts/semantickernel-syntax-examples/src/main/java/com/microsoft/semantickernel/samples/demos/lights
  • semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions

3 files changed

+35
-4
lines changed

aiservices/openai/src/main/java/com/microsoft/semantickernel/aiservices/openai/chatcompletion/OpenAIFunction.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.Collections;
1414
import java.util.HashMap;
1515
import java.util.List;
16+
import java.util.Locale;
1617
import java.util.Map;
1718
import java.util.stream.Collectors;
1819
import javax.annotation.Nonnull;
@@ -149,7 +150,13 @@ public Map<String, JsonNode> getProperties() {
149150
private static String getSchemaForFunctionParameter(@Nullable InputVariable parameter) {
150151
List<String> entries = new ArrayList<>();
151152

152-
entries.add("\"type\":\"string\"");
153+
String type = "string";
154+
155+
if (parameter != null && parameter.getType() != null) {
156+
type = getJavaTypeToOpenAiFunctionType(parameter.getType());
157+
}
158+
159+
entries.add("\"type\":\"" + type + "\"");
153160

154161
// Add description if present
155162
if (parameter != null && parameter.getDescription() != null && !parameter.getDescription()
@@ -179,4 +186,28 @@ private static String getSchemaForFunctionParameter(@Nullable InputVariable para
179186

180187
return "{" + schema + "}";
181188
}
189+
190+
private static String getJavaTypeToOpenAiFunctionType(String javaType) {
191+
switch (javaType.toLowerCase(Locale.ROOT)) {
192+
case "boolean":
193+
return "boolean";
194+
case "integer":
195+
case "int":
196+
case "long":
197+
case "short":
198+
case "byte":
199+
return "integer";
200+
case "double":
201+
case "float":
202+
return "number";
203+
case "string":
204+
return "string";
205+
case "array":
206+
return "array";
207+
case "void":
208+
return "null";
209+
default:
210+
return "object";
211+
}
212+
}
182213
}

samples/semantickernel-concepts/semantickernel-syntax-examples/src/main/java/com/microsoft/semantickernel/samples/demos/lights/LightsPlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ public List<LightModel> getLights() {
2626

2727
@DefineKernelFunction(name = "change_state", description = "Changes the state of the light")
2828
public LightModel changeState(
29-
@KernelFunctionParameter(name = "id", description = "The ID of the light to change") int id,
30-
@KernelFunctionParameter(name = "isOn", description = "The new state of the light") boolean isOn) {
29+
@KernelFunctionParameter(name = "id", description = "The ID of the light to change", type = int.class) int id,
30+
@KernelFunctionParameter(name = "isOn", description = "The new state of the light", type = boolean.class) boolean isOn) {
3131
System.out.println("Changing light " + id + " " + isOn);
3232
Optional<LightModel> light = lights.stream()
3333
.filter(l -> l.getId() == id)

semantickernel-api/src/main/java/com/microsoft/semantickernel/semanticfunctions/KernelFunctionFromMethod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ private static Object toObjectType(
476476
ContextVariableTypeConverter<?> c = sourceType.getConverter();
477477

478478
Object converted = c.toObject(invocationContext.getContextVariableTypes(), sourceValue,
479-
targetArgType);
479+
targetArgType, false);
480480
if (converted != null) {
481481
return converted;
482482
}

0 commit comments

Comments
 (0)