UNPKG

@nomyx/assistant

Version:

A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)

131 lines (130 loc) 4.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertMessages = convertMessages; exports.convertToolSchema = convertToolSchema; exports.convertParameters = convertParameters; exports.convertParameterDefinition = convertParameterDefinition; exports.convertToolCall = convertToolCall; exports.validateToolCall = validateToolCall; exports.convertToolCalls = convertToolCalls; exports.extractToolCalls = extractToolCalls; function convertMessages(messages) { return messages.map(msg => { let convertedMessage = { content: msg.content, }; switch (msg.role) { case 'system': case 'user': case 'assistant': convertedMessage.role = msg.role; break; case 'function': convertedMessage = { role: 'tool', content: msg.content, }; break; default: console.warn(`Unknown role "${msg.role}" encountered. Treating as "user".`); convertedMessage.role = 'user'; } if (msg.role === 'assistant' && msg.function_call) { convertedMessage.tool_calls = [{ id: msg.function_call.name, type: 'function', function: { name: msg.function_call.name, arguments: msg.function_call.arguments, }, }]; } return convertedMessage; }); } function convertToolSchema(schema) { return { type: 'function', function: { name: schema.name, description: schema.description, parameters: { type: 'object', properties: convertParameters(schema.parameters.properties), required: schema.parameters.required, }, }, }; } function convertParameters(params) { const result = {}; for (const [key, value] of Object.entries(params)) { result[key] = convertParameterDefinition(value); } return result; } function convertParameterDefinition(param) { const result = { type: param.type }; if (param.description) result.description = param.description; if (param.enum) result.enum = param.enum; if (param.items) result.items = convertParameterDefinition(param.items); if (param.properties) result.properties = convertParameters(param.properties); if (param.required) result.required = param.required; return result; } function convertToolCall(call) { try { const convertedCall = { name: call.function.name, arguments: JSON.parse(call.function.arguments), }; validateToolCall(convertedCall); return convertedCall; } catch (error) { throw new Error(`Failed to convert tool call: ${error instanceof Error ? error.message : String(error)}`); } } function validateToolCall(toolCall) { if (typeof toolCall.name !== 'string' || toolCall.name.trim() === '') { throw new Error('Invalid tool call: name must be a non-empty string'); } if (typeof toolCall.arguments !== 'object' || toolCall.arguments === null) { throw new Error('Invalid tool call: arguments must be an object'); } } function convertToolCalls(toolCalls) { if (!toolCalls || toolCalls.length === 0) return []; return toolCalls.map(call => { try { return convertToolCall(call); } catch (error) { console.error('Error converting tool call:', error); return null; } }).filter((call) => call !== null); } function extractToolCalls(message) { if (!message.tool_calls || message.tool_calls.length === 0) { return []; } return message.tool_calls.map(toolCall => { try { return { name: toolCall.function.name, arguments: JSON.parse(toolCall.function.arguments), }; } catch (error) { console.error('Error parsing tool call arguments:', error); return null; } }).filter((call) => call !== null); }