summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/data/cartridges/tools.yml39
-rw-r--r--spec/logic/cartridge/tools_spec.rb58
-rw-r--r--spec/logic/providers/openai/tools_spec.rb24
3 files changed, 71 insertions, 50 deletions
diff --git a/spec/data/cartridges/tools.yml b/spec/data/cartridges/tools.yml
index 0c2a30b..08164a4 100644
--- a/spec/data/cartridges/tools.yml
+++ b/spec/data/cartridges/tools.yml
@@ -1,28 +1,41 @@
---
tools:
+ - name: what-time-is-it
+ description: Returns the current date and time for a given timezone.
+ parameters:
+ type: object
+ properties:
+ timezone:
+ type: string
+ description: A string representing the timezone that should be used to provide a datetime, following the IANA (Internet Assigned Numbers Authority) Time Zone Database. Examples are "Asia/Tokyo" and "Europe/Paris".
+ required:
+ - timezone
+ fennel: |
+ (os.date)
+
- name: get-current-weather
- type: function
description: Get the current weather in a given location.
parameters:
- - name: location
- - name: unit
+ type: object
+ properties:
+ location:
+ type: string
+ unit:
+ type: string
fennel: |
(let [{:location location :unit unit} parameters]
(.. "Here is the weather in " location ", in " unit ": 35.8°C."))
- - name: what-time-is-it
- description: Returns the current date and time.
- fennel: |
- (os.date)
-
- name: sh
description: It has access to computer users' data and can be used to run shell commands, similar to those in a Linux terminal, to extract information. Please be mindful and careful to avoid running dangerous commands on users' computers.
parameters:
- - name: command
- type: array
- items:
- type: string
- description: An array of strings that represents a shell command along with its arguments or options. For instance, `["df", "-h"]` executes the `df -h` command, where each array element specifies either the command itself or an associated argument/option.
+ type: object
+ properties:
+ command:
+ type: array
+ description: An array of strings that represents a shell command along with its arguments or options. For instance, `["df", "-h"]` executes the `df -h` command, where each array element specifies either the command itself or an associated argument/option.
+ items:
+ type: string
clojure: |
(require '[clojure.java.shell :refer [sh]])
(println (apply sh (get parameters "command")))
diff --git a/spec/logic/cartridge/tools_spec.rb b/spec/logic/cartridge/tools_spec.rb
index 42b8c57..913fa62 100644
--- a/spec/logic/cartridge/tools_spec.rb
+++ b/spec/logic/cartridge/tools_spec.rb
@@ -10,11 +10,11 @@ RSpec.describe NanoBot::Logic::Cartridge::Tools do
let(:cartridge) { {} }
it 'uses default values when appropriate' do
- expect(described_class.feedback?(cartridge, :repl, :call)).to be(true)
- expect(described_class.feedback?(cartridge, :eval, :call)).to be(true)
+ expect(described_class.feedback?(cartridge, :repl, :executing)).to be(true)
+ expect(described_class.feedback?(cartridge, :eval, :executing)).to be(true)
- expect(described_class.feedback?(cartridge, :repl, :response)).to be(false)
- expect(described_class.feedback?(cartridge, :eval, :response)).to be(false)
+ expect(described_class.feedback?(cartridge, :repl, :responding)).to be(false)
+ expect(described_class.feedback?(cartridge, :eval, :responding)).to be(false)
end
end
@@ -24,11 +24,11 @@ RSpec.describe NanoBot::Logic::Cartridge::Tools do
end
it 'overrides default values when appropriate' do
- expect(described_class.feedback?(cartridge, :repl, :call)).to be(false)
- expect(described_class.feedback?(cartridge, :eval, :call)).to be(false)
+ expect(described_class.feedback?(cartridge, :repl, :executing)).to be(false)
+ expect(described_class.feedback?(cartridge, :eval, :executing)).to be(false)
- expect(described_class.feedback?(cartridge, :repl, :response)).to be(false)
- expect(described_class.feedback?(cartridge, :eval, :response)).to be(false)
+ expect(described_class.feedback?(cartridge, :repl, :responding)).to be(false)
+ expect(described_class.feedback?(cartridge, :eval, :responding)).to be(false)
end
end
@@ -38,59 +38,59 @@ RSpec.describe NanoBot::Logic::Cartridge::Tools do
end
it 'overrides default values when appropriate' do
- expect(described_class.feedback?(cartridge, :repl, :call)).to be(true)
- expect(described_class.feedback?(cartridge, :eval, :call)).to be(true)
+ expect(described_class.feedback?(cartridge, :repl, :executing)).to be(true)
+ expect(described_class.feedback?(cartridge, :eval, :executing)).to be(true)
- expect(described_class.feedback?(cartridge, :repl, :response)).to be(true)
- expect(described_class.feedback?(cartridge, :eval, :response)).to be(true)
+ expect(described_class.feedback?(cartridge, :repl, :responding)).to be(true)
+ expect(described_class.feedback?(cartridge, :eval, :responding)).to be(true)
end
end
context 'top-level-specific overrides' do
let(:cartridge) do
- { interfaces: { tools: { call: { feedback: false }, response: { feedback: true } } } }
+ { interfaces: { tools: { executing: { feedback: false }, responding: { feedback: true } } } }
end
it 'overrides default values when appropriate' do
- expect(described_class.feedback?(cartridge, :repl, :call)).to be(false)
- expect(described_class.feedback?(cartridge, :eval, :call)).to be(false)
+ expect(described_class.feedback?(cartridge, :repl, :executing)).to be(false)
+ expect(described_class.feedback?(cartridge, :eval, :executing)).to be(false)
- expect(described_class.feedback?(cartridge, :repl, :response)).to be(true)
- expect(described_class.feedback?(cartridge, :eval, :response)).to be(true)
+ expect(described_class.feedback?(cartridge, :repl, :responding)).to be(true)
+ expect(described_class.feedback?(cartridge, :eval, :responding)).to be(true)
end
end
context 'repl interface overrides' do
let(:cartridge) do
{ interfaces: {
- tools: { call: { feedback: false }, response: { feedback: true } },
- repl: { tools: { call: { feedback: true }, response: { feedback: false } } }
+ tools: { executing: { feedback: false }, responding: { feedback: true } },
+ repl: { tools: { executing: { feedback: true }, responding: { feedback: false } } }
} }
end
it 'overrides default values when appropriate' do
- expect(described_class.feedback?(cartridge, :repl, :call)).to be(true)
- expect(described_class.feedback?(cartridge, :eval, :call)).to be(false)
+ expect(described_class.feedback?(cartridge, :repl, :executing)).to be(true)
+ expect(described_class.feedback?(cartridge, :eval, :executing)).to be(false)
- expect(described_class.feedback?(cartridge, :repl, :response)).to be(false)
- expect(described_class.feedback?(cartridge, :eval, :response)).to be(true)
+ expect(described_class.feedback?(cartridge, :repl, :responding)).to be(false)
+ expect(described_class.feedback?(cartridge, :eval, :responding)).to be(true)
end
end
context 'eval interface overrides' do
let(:cartridge) do
{ interfaces: {
- tools: { call: { feedback: false }, response: { feedback: true } },
- eval: { tools: { call: { feedback: true }, response: { feedback: false } } }
+ tools: { executing: { feedback: false }, responding: { feedback: true } },
+ eval: { tools: { executing: { feedback: true }, responding: { feedback: false } } }
} }
end
it 'overrides default values when appropriate' do
- expect(described_class.feedback?(cartridge, :repl, :call)).to be(false)
- expect(described_class.feedback?(cartridge, :eval, :call)).to be(true)
+ expect(described_class.feedback?(cartridge, :repl, :executing)).to be(false)
+ expect(described_class.feedback?(cartridge, :eval, :executing)).to be(true)
- expect(described_class.feedback?(cartridge, :repl, :response)).to be(true)
- expect(described_class.feedback?(cartridge, :eval, :response)).to be(false)
+ expect(described_class.feedback?(cartridge, :repl, :responding)).to be(true)
+ expect(described_class.feedback?(cartridge, :eval, :responding)).to be(false)
end
end
end
diff --git a/spec/logic/providers/openai/tools_spec.rb b/spec/logic/providers/openai/tools_spec.rb
index c92c374..1758e5f 100644
--- a/spec/logic/providers/openai/tools_spec.rb
+++ b/spec/logic/providers/openai/tools_spec.rb
@@ -13,14 +13,16 @@ RSpec.describe NanoBot::Logic::OpenAI::Tools do
expect(described_class.adapt(cartridge[:tools][0])).to eq(
{ type: 'function',
function: {
- name: 'get-current-weather',
- description: 'Get the current weather in a given location.',
+ name: 'what-time-is-it',
+ description: 'Returns the current date and time for a given timezone.',
parameters: {
type: 'object',
properties: {
- location: { type: 'string' },
- unit: { type: 'string' }
- }
+ timezone: {
+ type: 'string',
+ description: 'A string representing the timezone that should be used to provide a datetime, following the IANA (Internet Assigned Numbers Authority) Time Zone Database. Examples are "Asia/Tokyo" and "Europe/Paris".'
+ }
+ }, required: ['timezone']
}
} }
)
@@ -28,9 +30,15 @@ RSpec.describe NanoBot::Logic::OpenAI::Tools do
expect(described_class.adapt(cartridge[:tools][1])).to eq(
{ type: 'function',
function: {
- name: 'what-time-is-it',
- description: 'Returns the current date and time.',
- parameters: { properties: {}, type: 'object' }
+ name: 'get-current-weather',
+ description: 'Get the current weather in a given location.',
+ parameters: {
+ type: 'object',
+ properties: {
+ location: { type: 'string' },
+ unit: { type: 'string' }
+ }
+ }
} }
)