File size: 3,093 Bytes
1050f6e
abfaf50
1050f6e
 
abfaf50
1050f6e
c4672f7
1050f6e
 
 
 
abfaf50
 
1050f6e
abfaf50
1050f6e
 
 
 
 
 
 
 
 
 
 
 
 
abfaf50
1050f6e
 
 
 
 
 
 
 
 
223d0d4
 
 
 
 
 
 
 
 
 
1050f6e
 
 
 
 
 
 
 
 
223d0d4
1050f6e
223d0d4
 
 
 
 
 
 
1050f6e
223d0d4
1050f6e
 
 
 
 
 
 
 
 
223d0d4
1050f6e
 
 
 
 
223d0d4
 
abfaf50
223d0d4
 
 
 
 
 
 
 
 
 
 
1050f6e
223d0d4
1050f6e
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
_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