generative-ui/lib/generate-ui-tool.ts (41 lines of code) (raw):

import { components } from './components-definition' const componentsList = components.map(component => { return { $ref: `#/$defs/${component.name}` } }) const componentsDefinitions = components.reduce((acc, component) => { acc[component.name] = { type: 'object', properties: { name: { type: 'string', enum: [component.name] }, ...component.parameters }, required: ['name', ...Object.keys(component.parameters)], additionalProperties: false } return acc }, {} as { [key: string]: any }) export const generateUITool = { name: 'generate_ui', description: 'Generate UI components dynamically to display relevant information.', parameters: { type: 'object', properties: { component: { anyOf: componentsList } }, required: ['component'], additionalProperties: false, $defs: { component: { anyOf: componentsList }, ...componentsDefinitions } }, strict: true }