import type { INodeType, INodeTypeDescription } from 'n8n-workflow'; import { NodeConnectionTypes } from 'n8n-workflow'; import { chatFields, chatOperations } from './ChatDescription'; import { imageFields, imageOperations } from './ImageDescription'; import { textFields, textOperations } from './TextDescription'; import { oldVersionNotice } from '../../utils/descriptions'; export class OpenAi implements INodeType { description: INodeTypeDescription = { displayName: 'OpenAI', name: 'openAi', hidden: true, icon: { light: 'file:openAi.svg', dark: 'file:openAi.dark.svg' }, group: ['transform'], version: [1, 1.1], subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Consume Open AI', defaults: { name: 'OpenAI', }, inputs: [NodeConnectionTypes.Main], outputs: [NodeConnectionTypes.Main], builderHint: { relatedNodes: [ { nodeType: '@n8n/n8n-nodes-langchain.lmChatOpenAi', relationHint: 'For most LLM tasks, text generation, reasoning, use Agent with this model', }, { nodeType: '@n8n/n8n-nodes-langchain.agent', relationHint: 'For most LLM tasks, text generation, reasoning, tool calls, etc.', }, ], }, credentials: [ { name: 'openAiApi', required: true, }, ], requestDefaults: { ignoreHttpStatusErrors: true, baseURL: '={{ $credentials.url?.split("/").slice(0,-1).join("/") ?? "https://api.openai.com" }}', }, properties: [ oldVersionNotice, { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Chat', value: 'chat', }, { name: 'Image', value: 'image', }, { name: 'Text', value: 'text', }, ], default: 'text', }, ...chatOperations, ...chatFields, ...imageOperations, ...imageFields, ...textOperations, ...textFields, ], }; }