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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# 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 'meta' do
let(:raw) { File.read('spec/data/cartridges/meta.md') }
it 'parses markdown cartridge' do
expect(described_class.parse(raw, format: 'md')).to eq(
{
meta: {
symbol: '🤖',
name: 'Nano Bot Name',
author: 'Your Name',
description: 'A helpful assistant.',
version: '1.0.0',
license: 'CC0-1.0'
},
behaviors: {
interaction: {
directive: 'You are a helpful assistant.'
}
}
}
)
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
|