summaryrefslogtreecommitdiff
path: root/spec/logic/cartridge/parser_spec.rb
blob: e8bac0bf0734f67713688cfc7288eaffd5d83d99 (about) (plain)
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
# frozen_string_literal: true

require_relative '../../../logic/cartridge/parser'

RSpec.describe NanoBot::Logic::Cartridge::Parser do
  context 'markdown' do
    context 'default' do
      let(:raw) { File.read('spec/data/cartridges/markdown.md') }

      it 'parses markdown cartridge' do
        expect(described_class.parse(raw, format: 'md')).to eq(
          { meta: {
              symbol: '🤖',
              name: 'ChatGPT 4 Turbo',
              author: 'icebaker',
              version: '0.0.1',
              license: 'CC0-1.0',
              description: 'A helpful assistant.'
            },
            behaviors: { interaction: { directive: 'You are a helpful assistant.' } },
            provider: {
              id: 'openai',
              credentials: { 'access-token': 'ENV/OPENAI_API_KEY' },
              settings: {
                user: 'ENV/NANO_BOTS_END_USER',
                model: 'gpt-4-1106-preview'
              }
            } }
        )
      end
    end

    context 'tools' do
      let(:raw) { File.read('spec/data/cartridges/tools.md') }

      it 'parses markdown cartridge' do
        expect(described_class.parse(raw, format: 'md')).to eq(
          { meta: {
              symbol: '🕛',
              name: 'Date and Time',
              author: 'icebaker',
              version: '0.0.1',
              license: 'CC0-1.0',
              description: 'A helpful assistant.'
            },
            behaviors: {
              interaction: {
                directive: 'You are a helpful assistant.'
              }
            },
            provider: {
              id: 'openai',
              credentials: { 'access-token': 'ENV/OPENAI_API_KEY' },
              settings: {
                user: 'ENV/NANO_BOTS_END_USER',
                model: 'gpt-4-1106-preview'
              }
            },
            tools: [
              { name: 'random-number',
                description: 'Generates a random number within a given range.',
                parameters: {
                  type: 'object',
                  properties: {
                    from: {
                      type: 'integer',
                      description: 'The minimum expected number for random generation.'
                    },
                    to: {
                      type: 'integer',
                      description: 'The maximum expected number for random generation.'
                    }
                  },
                  required: %w[from to]
                },
                clojure: "(let [{:strs [from to]} parameters]\n  (+ from (rand-int (+ 1 (- to from)))))\n" },
              { name: 'date-and-time',
                description: 'Returns the current date and time.',
                fennel: "(os.date)\n" }
            ] }
        )
      end
    end

    context 'block' do
      let(:raw) { File.read('spec/data/cartridges/block.md') }

      it 'parses markdown cartridge' do
        expect(described_class.parse(raw, format: 'md')).to eq(
          { safety: { functions: { sandboxed: false } } }
        )
      end
    end
  end
end