58 lines
1.9 KiB
TypeScript
58 lines
1.9 KiB
TypeScript
import {
|
|
Tool,
|
|
} from "@anthropic-ai/sdk/resources/messages/messages.mjs";
|
|
import OpenAI from "openai";
|
|
|
|
|
|
|
|
export const convertContext = (tools: Tool[]): OpenAI.Chat.Completions.ChatCompletionTool[] => {
|
|
return tools.map((tool) => {
|
|
const functionDeclaration: OpenAI.Chat.Completions.ChatCompletionTool = {
|
|
type: "function",
|
|
function: {
|
|
name: tool.name,
|
|
description: tool.description,
|
|
parameters: {
|
|
type: "object",
|
|
properties: {}, // TODO: Add properties
|
|
required: [], // TODO: Add required fields
|
|
},
|
|
strict: true,
|
|
},
|
|
};
|
|
|
|
if (tool.input_schema) {
|
|
// for required fields
|
|
if (tool.input_schema.required) {
|
|
if (functionDeclaration.function.parameters) {
|
|
functionDeclaration.function.parameters.required = Array.isArray(tool.input_schema.required)
|
|
? tool.input_schema.required
|
|
: [];
|
|
}
|
|
}
|
|
}
|
|
|
|
const properties: {
|
|
[key: string]: {
|
|
type: "string" | "number" | "integer" | "boolean" | "object" | "array";
|
|
description: string;
|
|
};
|
|
} = {};
|
|
if (tool.input_schema?.properties && typeof tool.input_schema.properties === 'object') {
|
|
for (const [key, value] of Object.entries(tool.input_schema.properties)) {
|
|
properties[key] = {
|
|
type: value.type,
|
|
description: value.description,
|
|
};
|
|
}
|
|
}
|
|
|
|
if (functionDeclaration.function.parameters) {
|
|
functionDeclaration.function.parameters.properties = properties;
|
|
}
|
|
|
|
return functionDeclaration;
|
|
});
|
|
}
|
|
|