superagi 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1109bc83d866891b9a49c0f029536824dd65895a64941e24a3b6c00e2e15f1d
4
- data.tar.gz: 815b50f3d3c237354c64b46da34f61fafec6252bcdae843d5989ba1198f10040
3
+ metadata.gz: 477d9cd1d2f1dcdbdcc691730e62692e5ca732f555f7126d0814dc7e6b938f65
4
+ data.tar.gz: 38e0496835095a59ca7f825dc0125da3053f39c2bbbc5358690ad0da9f971082
5
5
  SHA512:
6
- metadata.gz: e9a06e3bb7db1570373e08767485484b4052df9f0731a8b8f44e6bbf67528a8d217d1c0f96e6be158167f0aad9255a3c004ca3b8db405a4ca725910d4cd28a04
7
- data.tar.gz: c84e0b997d14bbe4466a8a71431d0ff400e415f6d110a88143c0f1fe64e611fa80922f95a89c8494c12f43e016435c4d2505eb3f92f3f0d9c8156b995911a02e
6
+ metadata.gz: ef9fa9c5e6ea03936a65dff236d338d3e7ffff9923149c86040175a0a1399b20a6e6545571765c386b21022cdb0c66baabbc42d3362a4011edc930e46279dad6
7
+ data.tar.gz: ad7df73c2df566c168c5e90eb5e3b2b1ff7a25e0b4bb681c7e8528d02d963d30087788a59c0ccca90aa5b68e8b4326f35081bfb4f91f14b2f47a66dbf3d21907
data/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.0] - 2023-10-28
9
+
10
+ ### Added
11
+
12
+ - Add SuperAGI::Agent#update to create a new agent.
13
+ - Add SuperAGI::Agent#run to run an agent.
14
+ - Add SuperAGI::Agent#status to get the status of an agent run.
15
+
8
16
  ## [0.1.0] - 2023-10-25
9
17
 
10
18
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- superagi (0.1.0)
4
+ superagi (0.2.0)
5
5
  faraday (>= 1)
6
6
  faraday-multipart (>= 1)
7
7
 
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/alexrudall/superagi/blob/main/LICENSE.txt)
5
5
  [![CircleCI Build Status](https://circleci.com/gh/alexrudall/superagi.svg?style=shield)](https://circleci.com/gh/alexrudall/superagi)
6
6
 
7
- Use the [SuperAGI API](https://superagi.com/blog/superagi-api/) with Ruby! 🦄❤️
7
+ Use the [SuperAGI API](https://superagi.com/docs/) with Ruby! 🦄❤️
8
8
 
9
9
  Create and Manage Agents in your Ruby app...
10
10
 
@@ -77,18 +77,15 @@ client = SuperAGI::Client.new(secret_key: "secret_key_goes_here")
77
77
 
78
78
  #### Custom timeout or base URI
79
79
 
80
- The default timeout for any request using this library is 120 seconds. You can change that by passing a number of seconds to the `request_timeout` when initializing the client. You can also change the base URI used for all requests.
80
+ The default timeout for any request using this library is 120 seconds. You can change that by passing a number of seconds to the `request_timeout` when initializing the client. You can also change the base URI used for all requests, eg. if you're running SuperAGI locally with the default `docker-compose` setup you can use `http://superagi-backend-1:8001/`.
81
81
 
82
82
  ```ruby
83
83
  client = SuperAGI::Client.new(
84
84
  secret_key: "secret_key_goes_here",
85
- uri_base: "https://app.alternativeapi.com/",
85
+ uri_base: "http://superagi-backend-1:8001/",
86
86
  request_timeout: 240,
87
87
  extra_headers: {
88
- "X-Proxy-TTL" => "43200", # For https://github.com/6/superagi-caching-proxy-worker#specifying-a-cache-ttl
89
- "X-Proxy-Refresh": "true", # For https://github.com/6/superagi-caching-proxy-worker#refreshing-the-cache
90
- "Helicone-Auth": "Bearer HELICONE_API_KEY", # For https://docs.helicone.ai/getting-started/integration-method/superagi-proxy
91
- "helicone-stream-force-format" => "true", # Use this with Helicone otherwise streaming drops chunks # https://github.com/alexrudall/superagi/issues/251
88
+ "Extra-Header" => "43200",
92
89
  }
93
90
  )
94
91
  ```
@@ -98,7 +95,7 @@ or when configuring the gem:
98
95
  ```ruby
99
96
  SuperAGI.configure do |config|
100
97
  config.secret_key = ENV.fetch("SUPERAGI_SECRET_KEY")
101
- config.uri_base = "https://app.alternativeapi.com/" # Optional
98
+ config.uri_base = "http://superagi-backend-1:8001/" # Optional
102
99
  config.request_timeout = 240 # Optional
103
100
  config.extra_headers = {
104
101
  "abc" => "123",
@@ -107,6 +104,60 @@ SuperAGI.configure do |config|
107
104
  end
108
105
  ```
109
106
 
107
+ ### Create Agent
108
+
109
+ An agent is the primary entity in SuperAGI that carries out tasks. To create one:
110
+
111
+ ```ruby
112
+ response = client.agent.create(
113
+ parameters: {
114
+ name: "Motivational Quote Generator",
115
+ description: "Generates motivational quotes",
116
+ goal: ["I need a motivational quote"],
117
+ instruction: ["Write a new motivational quote"],
118
+ iteration_interval: 500,
119
+ max_iterations: 2,
120
+ constraints: [],
121
+ tools: []
122
+ })
123
+ puts response
124
+ # => {"agent_id"=>15312}
125
+ ```
126
+
127
+ ### Update Agent
128
+
129
+ To update an agent, pass the ID and 1 or more of the parameters you want to update:
130
+
131
+ ```ruby
132
+ response = client.agent.update(
133
+ id: 15312,
134
+ parameters: {
135
+ name: "Updated name",
136
+ })
137
+ puts response
138
+ # => {"agent_id"=>15312}
139
+ ```
140
+
141
+ ### Run Agent
142
+
143
+ To run an agent:
144
+
145
+ ```ruby
146
+ response = client.agent.run(id: 15312)
147
+ puts response
148
+ # => {"run_id"=>29970}
149
+ ```
150
+
151
+ ### Agent Status
152
+
153
+ To get the status of Agent runs:
154
+
155
+ ```ruby
156
+ response = client.agent.status(id: 15312)
157
+ puts response
158
+ # => [{"run_id"=>29970,"status"=>"CREATED"}]
159
+ ```
160
+
110
161
  ## Development
111
162
 
112
163
  After checking out the repo, run `bin/setup` to install dependencies. You can run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,22 +1,22 @@
1
1
  module SuperAGI
2
2
  class Agent
3
- # '{"loc":["body","constraints"],"msg":"field
4
- # required","type":"value_error.missing"},{"loc":["body","tools"],"msg":"field
5
- # required","type":"value_error.missing"},{"loc":["body","iteration_interval"],"msg":"field
6
- # required","type":"value_error.missing"},{"loc":["body","max_iterations"],"msg":"field
7
- # required","type":"value_error.missing"}]}'
8
-
9
3
  def initialize(client:)
10
4
  @client = client
11
5
  end
12
6
 
13
7
  def create(parameters:)
14
- parameters = valid_parameters(parameters: parameters)
8
+ parameters = valid_parameters(method: :create, parameters: parameters)
15
9
  @client.json_post(path: "/agent", parameters: parameters)
16
10
  end
17
11
 
18
- # def update(id:, parameters: {})
19
- # end
12
+ def update(id:, parameters:)
13
+ parameters = DEFAULT_UPDATE_PARAMETERS.merge(parameters)
14
+ @client.json_put(path: "/agent/#{id}", parameters: parameters)
15
+ end
16
+
17
+ def run(id:)
18
+ @client.json_post(path: "/agent/#{id}/run", parameters: {})
19
+ end
20
20
 
21
21
  # def pause(id:)
22
22
  # end
@@ -24,43 +24,62 @@ module SuperAGI
24
24
  # def resume(id:)
25
25
  # end
26
26
 
27
- # def delete(id:)
28
- # end
29
-
30
- # def status(id:)
31
- # end
27
+ def status(id:)
28
+ @client.json_post(path: "/agent/#{id}/run-status", parameters: {})
29
+ end
32
30
 
33
31
  # def resources(id:)
34
32
  # end
35
33
 
36
34
  private
37
35
 
38
- DEFAULT_PARAMETERS = {
39
- agent_workflow: "Goal Based Workflow",
40
- model: "gpt-4"
41
- }.freeze
42
36
  ARRAY_PARAMETERS = %w[
43
37
  constraints
44
38
  goal
45
39
  tools
46
40
  ].freeze
47
- REQUIRED_PARAMETERS = (%w[
41
+
42
+ DEFAULT_CREATE_PARAMETERS = {
43
+ agent_workflow: "Goal Based Workflow",
44
+ model: "gpt-4"
45
+ }.freeze
46
+ REQUIRED_CREATE_PARAMETERS = (%w[
48
47
  description
49
48
  instruction
50
49
  iteration_interval
51
50
  max_iterations
52
51
  name
53
- ] + ARRAY_PARAMETERS + DEFAULT_PARAMETERS.keys).freeze
52
+ ] + ARRAY_PARAMETERS + DEFAULT_CREATE_PARAMETERS.keys).freeze
54
53
 
55
- def valid_parameters(parameters:)
56
- parameters = DEFAULT_PARAMETERS.merge(parameters)
57
- validate_presence(parameters: parameters)
54
+ # Update parameters need to always include any List types, even if they are empty,
55
+ # otherwise the API will return a NoneType error.
56
+ DEFAULT_UPDATE_PARAMETERS = {
57
+ constraints: [],
58
+ goal: [],
59
+ tools: []
60
+ }.freeze
61
+ REQUIRED_UPDATE_PARAMETERS = DEFAULT_UPDATE_PARAMETERS.keys.freeze
62
+
63
+ def valid_parameters(method:, parameters:)
64
+ parameters = default_parameters(method: method, parameters: parameters)
65
+ validate_presence(method: method, parameters: parameters)
58
66
  validate_arrays(parameters: parameters)
59
67
  parameters
60
68
  end
61
69
 
62
- def validate_presence(parameters:)
63
- REQUIRED_PARAMETERS.each do |key|
70
+ def default_parameters(method:, parameters:)
71
+ case method
72
+ when :create then DEFAULT_CREATE_PARAMETERS.merge(parameters)
73
+ when :update then DEFAULT_UPDATE_PARAMETERS.merge(parameters)
74
+ end
75
+ end
76
+
77
+ def validate_presence(method:, parameters:)
78
+ required_parameters = case method
79
+ when :create then REQUIRED_CREATE_PARAMETERS
80
+ when :update then REQUIRED_UPDATE_PARAMETERS
81
+ end
82
+ required_parameters.each do |key|
64
83
  raise ArgumentError, "#{key} is required" unless parameters[key.to_sym]
65
84
  end
66
85
  end
data/lib/superagi/http.rb CHANGED
@@ -13,6 +13,13 @@ module SuperAGI
13
13
  end&.body)
14
14
  end
15
15
 
16
+ def json_put(path:, parameters:)
17
+ to_json(conn.put(uri(path: path)) do |req|
18
+ req.headers = headers
19
+ req.body = parameters.to_json
20
+ end&.body)
21
+ end
22
+
16
23
  def delete(path:)
17
24
  to_json(conn.delete(uri(path: path)) do |req|
18
25
  req.headers = headers
@@ -1,3 +1,3 @@
1
1
  module SuperAGI
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.2.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: superagi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-26 00:00:00.000000000 Z
11
+ date: 2023-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday