| _id: openai | |
| author: Anton Breslavskii | https://github.com/breslavsky | |
| description: Includes Chat GPT | |
| readme: The first base version | |
| title: Open AI | |
| url: https://huggingface.co/PiperMy/Node-Packages/resolve/main/openai.yaml | |
| version: 2 | |
| nodes: | |
| ask_chat_gpt: | |
| _id: ask_chat_gpt | |
| arrange: | |
| x: 120 | |
| y: 110 | |
| category: | |
| _id: llm_agents | |
| title: en=Language Agents;ru=Языковые агенты | |
| environment: | |
| OPEN_API_KEY: | |
| title: Open API key | |
| type: string | |
| scope: global | |
| inputs: | |
| question: | |
| order: 2 | |
| title: en=Question;ru=Вопрос | |
| type: string | |
| required: true | |
| multiline: true | |
| default: What time is it now? Only JSON ready to parse. | |
| model: | |
| order: 2 | |
| title: en=Model;ru=Модель | |
| type: string | |
| required: true | |
| default: gpt-4o-mini | |
| enum: | |
| - gpt-4o-mini|4o mini | |
| - gpt-4o|4o | |
| answerFormat: | |
| order: 3 | |
| title: en=Answer format;ru=Формат ответа | |
| description: Don't forget add instructions for LLM | |
| type: string | |
| required: true | |
| default: text | |
| enum: | |
| - text|Text | |
| - json|JSON | |
| outputs: | |
| answer: | |
| title: en=Answer;ru=Ответ | |
| type: string | |
| json: | |
| title: JSON | |
| type: json | |
| package: openai | |
| script: | | |
| export async function run({ inputs }) { | |
| const { FatalError, NextNode } = DEFINITIONS; | |
| const OpenAI = require('openai'); | |
| const OPEN_API_KEY = env?.variables?.get('OPEN_API_KEY'); | |
| if (!OPEN_API_KEY) { | |
| throw new FatalError('Please, set your API key for Open AI'); | |
| } | |
| const { question, model, answerFormat } = inputs; | |
| const openai = new OpenAI({ | |
| apiKey: OPEN_API_KEY, | |
| }); | |
| const result = await openai.chat.completions.create({ | |
| model: model, | |
| store: true, | |
| messages: [ | |
| { "role": "user", "content": question }, | |
| ], | |
| }); | |
| const { content: answer } = result.choices[0].message; | |
| switch (answerFormat) { | |
| case 'text': | |
| return NextNode.from({ outputs: { answer } }); | |
| case 'json': | |
| try { | |
| const json = answer.replace(/^\`\`\`json\s*/ig, '').replace(/\`\`\`\s*$/ig, ''); | |
| return NextNode.from({ outputs: { json: JSON.parse(json) } }); | |
| } catch (e) { | |
| console.log(e); | |
| message(`Wrong JSON for question \`\`\`text\n${question}\n\`\`\`\nnanswer from LLM\n\`\`\`text${answer}\n\`\`\``, 'defect'); | |
| throw new FatalError("Can't parse JSON asnwer from LLM"); | |
| } | |
| default: | |
| throw new FatalError(`Wrong answer format ${answerFormat}`); | |
| } | |
| } | |
| source: catalog | |
| title: en=Ask Chat GPT;ru=Спросить Chat GPT | |
| version: 1 | |