in src/lib/server/endpoints/openai/endpointOai.ts [23:86]
function createChatCompletionToolsArray(tools: Tool[] | undefined): ChatCompletionTool[] {
const toolChoices = [] as ChatCompletionTool[];
if (tools === undefined) {
return toolChoices;
}
for (const t of tools) {
const requiredProperties = [] as string[];
const properties = {} as Record<string, unknown>;
for (const idx in t.inputs) {
const parameterDefinition = t.inputs[idx];
const parameter = {} as Record<string, unknown>;
switch (parameterDefinition.type) {
case "str":
parameter.type = "string";
break;
case "float":
case "int":
parameter.type = "number";
break;
case "bool":
parameter.type = "boolean";
break;
case "file":
throw new Error("File type's currently not supported");
default:
throw new Error(`Unknown tool IO type: ${t}`);
}
if ("description" in parameterDefinition) {
parameter.description = parameterDefinition.description;
}
if (parameterDefinition.paramType == "required") {
requiredProperties.push(t.inputs[idx].name);
}
properties[t.inputs[idx].name] = parameter;
}
const functionParameters: FunctionParameters = {
type: "object",
...(requiredProperties.length > 0 ? { required: requiredProperties } : {}),
properties,
};
const functionDefinition: FunctionDefinition = {
name: t.name,
description: t.description,
parameters: functionParameters,
};
const toolDefinition: ChatCompletionTool = {
type: "function",
function: functionDefinition,
};
toolChoices.push(toolDefinition);
}
return toolChoices;
}