UNPKG

@plastichub/osr-ai-tools

Version:

CLI and library for LLM tools

55 lines (45 loc) 1.86 kB
import { tools } from '../lib/tools/tools'; import { logger } from '../'; import { InvokeToolSchema } from '../zod_schemas'; import { toYargs } from '@plastichub/osr-commons'; import { sync as write } from '@plastichub/fs/write'; import type { Argv } from 'yargs'; import * as path from 'path'; const options = (yargs: Argv) => toYargs(yargs, InvokeToolSchema); export const invoke = async (argv: any) => { try { const { tools: toolCategory, function: funcName, target, params, output } = argv; // Get tool category const toolSet = tools[toolCategory]; if (!toolSet) { logger.error(`Tool category '${toolCategory}' not found`); return; } // Initialize tools with target directory const toolList = toolSet(target); // Find specific function const tool = toolList.find(t => t.function.name === funcName); if (!tool) { logger.error(`Function '${funcName}' not found in ${toolCategory} tools`); return; } // Parse parameters if provided const parameters = params ? JSON.parse(params) : {}; // Execute tool function logger.info(`Invoking ${toolCategory}::${funcName}`); const result = await tool.function.function(parameters); // Handle output if (output) { const outputPath = path.isAbsolute(output) ? output : path.join(process.cwd(), output); logger.info(`Writing output to ${outputPath}`); write(outputPath, JSON.stringify(result, null, 2)); } else { logger.info('Result:', result); } return result; } catch (error) { logger.error('Error invoking tool:', error); throw error; } }; export { options as invokeOptions };