senior 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39730d334959dd50f95ebdf665ac8731d61fc15fda52692e61c6a521d1228b4b
4
- data.tar.gz: e2d2bb32557f3d3c7c780ec7f4293f0c56f68d885e0ed792ce2e0fce69e00b2a
3
+ metadata.gz: 3d973cd43135daeb4de71d71a43f52500fe6ab39f6ba507b032833eb65402977
4
+ data.tar.gz: 4bf83499dae649941e881453fd376603faad6399fa49970b1375a843af0a987f
5
5
  SHA512:
6
- metadata.gz: 30cabd4898ce92778b12e1bac480d6e6de51bf57af8a0f1356ab24f29626cbe1c778c89b89f073880bcb099e871ab45b65cbb0f162555b1a85db9014239f1342
7
- data.tar.gz: 5654b395cf96a528179988edc566ca0f4eebaa2a8f521859ba64b56f9ba1ffe60ef8a457c71f7d5da3a9ed2920b96568245fe676b2a9711b2cd9ca105cb47c1f
6
+ metadata.gz: 9d6394a7b1b08fd32299b43febd26143128befb958f1af203106ce05c8e809ec07a3cdd7eec1cc16b0e1ddc369b2f94873b1e9addb91a9b8385231990dcd929f
7
+ data.tar.gz: 6655e71e4676e35cae26aedd96bce779202a33982d028a68f8cdb1ef257ae1fcae1b86755b8c11c70d6c70cfd7dff900da2fc74d4d9d6ba4e456209c84740228
data/.rubocop.yml CHANGED
@@ -44,3 +44,6 @@ Metrics/MethodLength:
44
44
 
45
45
  RSpec/ExampleLength:
46
46
  Enabled: false
47
+
48
+ RSpec/NestedGroups:
49
+ Max: 4
data/CHANGELOG.md CHANGED
@@ -2,9 +2,6 @@
2
2
 
3
3
  - Ability to wrap a method invocation. For example, `Senior.suggest_fix { my_broken_method(2) }`
4
4
  - Test generation `Senior.write_tests_for {}`
5
- - Configure API keys for the OpenAI
6
- - Use different OpenAI models
7
- - Parametrize the calls to OpenAI
8
5
  - See price per call
9
6
  - Set API calling and pricing limits
10
7
  - Use different AI APIs, not just OpenAI
@@ -13,6 +10,41 @@
13
10
  - RBS Signatures
14
11
  - Domain exceptions
15
12
 
13
+ ## [0.3.0] - 2023-04-11
14
+
15
+ ### Added
16
+ - Added support for OpenAI's Chat Completion API. Setting `Senior.configuration.open_ai.model`
17
+ to any value of `Senior::Brains::OpenAI::CHAT_MODELS` will cause API requests to be sent to `/chat/completions`.
18
+ Whereas setting `Senior.configuration.open_ai.model` to any value of `Senior::Brains::OpenAI::COMPLETION_MODELS`
19
+ will cause API requests to be sent to `/completions`.
20
+
21
+ ### Changed
22
+ - Updated the gem's summary and description to match the idea of the gem - A senior software engineer assistant.
23
+ - Updated the `bin/setup` script to copy the `.env.example` file to `.env`
24
+
25
+ ## [0.2.0] - 2023-04-10
26
+
27
+ ### Added
28
+ - Added the ability to configure the gem with a block:
29
+ ```ruby
30
+ Senior.configure do |config|
31
+ config.open_ai.access_token = ENV.fetch('OPEN_AI_ACCESS_TOKEN')
32
+ config.open_ai.organization_id = ENV.fetch('OPEN_AI_ORGANIZATION_ID') # Optional
33
+ config.open_ai.api_version = 'v1'
34
+ config.open_ai.max_tokens = 1024
35
+ config.open_ai.model = 'text-davinci-003'
36
+ config.open_ai.n = 1
37
+ config.open_ai.request_timeout = 120
38
+ config.open_ai.temperature = 0.7
39
+ config.open_ai.uri_base = 'https://api.openai.com/'
40
+ end
41
+ ```
42
+ These configurations are used as default values for the OpenAI API calls.
43
+
16
44
  ## [0.1.0] - 2023-04-10
17
45
 
18
46
  - Initial release
47
+
48
+ [0.3.0]: https://github.com/wilsonsilva/senior/compare/v0.2.0...v0.3.0
49
+ [0.2.0]: https://github.com/wilsonsilva/senior/compare/v0.1.0...v0.2.0
50
+ [0.1.0]: https://github.com/wilsonsilva/senior/compare/eecec20...v0.1.0
data/README.md CHANGED
@@ -2,9 +2,24 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/senior.svg)](https://badge.fury.io/rb/senior)
4
4
  [![Tests](https://github.com/wilsonsilva/senior/actions/workflows/main.yml/badge.svg)](https://github.com/wilsonsilva/senior/actions/workflows/main.yml)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/87e6e2167d3283e3b79b/test_coverage)](https://codeclimate.com/github/wilsonsilva/senior/test_coverage)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/87e6e2167d3283e3b79b/maintainability)](https://codeclimate.com/github/wilsonsilva/senior/maintainability)
5
7
 
6
- Provides AI-powered debugging and automatic suggestion of code fixes. It makes use of OpenAI's language model to analyze
7
- and modify the source code of broken methods, allowing them to be fixed automatically.
8
+ An AI-powered pair programmer. Provides a user-friendly interface for using AI API's to automatically repair broken code
9
+ and suggest improvements. Simply provide the faulty code as input, and the gem will generate a corrected version using
10
+ advanced machine learning techniques.
11
+
12
+ ## Table of Contents
13
+
14
+ - [Installation](#installation)
15
+ - [Usage](#usage)
16
+ - [Auto-debugging a broken method](#auto-debugging-a-broken-method)
17
+ - [Suggesting a fix for a broken method](#suggesting-a-fix-for-a-broken-method)
18
+ - [Development](#development)
19
+ - [Type checking](#type-checking)
20
+ - [Contributing](#contributing)
21
+ - [License](#license)
22
+ - [Code of Conduct](#code-of-conduct)
8
23
 
9
24
  ## Installation
10
25
 
@@ -18,13 +33,27 @@ If bundler is not being used to manage dependencies, install the gem by executin
18
33
 
19
34
  ## Usage
20
35
 
21
- Before using Senior, ensure that the environment variables `OPEN_AI_ACCESS_TOKEN` and `OPEN_AI_ORGANIZATION_ID` are
22
- defined. These variables are used by the gem to authenticate and access OpenAI's language model.
36
+ - Get your API key from https://platform.openai.com/account/api-keys
37
+ - (optional) If you belong to multiple organizations, you can get your Organization ID from https://platform.openai.com/account/org-settings
38
+ - Configure the library by passing your OpenAI API credentials:
39
+
40
+ ```ruby
41
+ Senior.configure do |config|
42
+ config.open_ai.access_token = ENV.fetch('OPEN_AI_ACCESS_TOKEN')
43
+ config.open_ai.organization_id = ENV.fetch('OPEN_AI_ORGANIZATION_ID') # Optional
44
+ end
45
+ ```
46
+
47
+ Note that `OPEN_AI_ACCESS_TOKEN` and `OPEN_AI_ORGANIZATION_ID` are environment variables that should be set in your
48
+ environment. You should never hardcode your API credentials directly in your code, as this is a security risk.
49
+ Instead, store your API credentials securely, such as using environment variables or a separate configuration file that
50
+ is excluded from source control.
51
+
52
+ Once you have configured the gem, you can use the `Senior` module to interact with the OpenAI API.
23
53
 
24
54
  ### Auto-debugging a broken method
25
- To debug a broken method, call Senior.auto_debug and pass in the broken method, its arguments, and optionally its
26
- source code. The method will be called repeatedly, with modifications made to its source code each time, until it no
27
- longer raises exceptions.
55
+ To debug a broken method, call `Senior.auto_debug` and pass in the broken method and its arguments. The method will be
56
+ called repeatedly, with modifications made to its source code each time, until it no longer raises exceptions.
28
57
 
29
58
  ```ruby
30
59
  def square(n) = n * y
@@ -34,7 +63,7 @@ puts result # => 4
34
63
  ```
35
64
 
36
65
  ### Suggesting a fix for a broken method
37
- To suggest a fix for a broken method, call Senior.suggest_fix and pass in the broken method and its arguments.
66
+ To suggest a fix for a broken method, call `Senior.suggest_fix` and pass in the broken method and its arguments.
38
67
  The method will be analyzed and a fix will be suggested in the form of modified source code.
39
68
 
40
69
  ```ruby
@@ -48,6 +77,9 @@ puts suggestion # => "def square(n) = n * n"
48
77
 
49
78
  After checking out the repo, run `bin/setup` to install dependencies.
50
79
 
80
+ Set your OpenAI API credentials in the environment variables `OPEN_AI_ACCESS_TOKEN` and `OPEN_AI_ORGANIZATION_ID`.
81
+ Either in your machine's environment or in a `.env` file in the root of the project.
82
+
51
83
  To install this gem onto your local machine, run `bundle exec rake install`.
52
84
 
53
85
  You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -10,6 +10,11 @@ module Senior
10
10
  # @api private
11
11
  #
12
12
  class OpenAI
13
+ CHAT_MODELS = %w[gpt-4 gpt-4-0314 gpt-4-32k gpt-4-32k-0314 gpt-3.5-turbo gpt-3.5-turbo-0301].freeze
14
+ COMPLETION_MODELS = %w[text-davinci-003 text-davinci-002 text-curie-001 text-babbage-001 text-ada-001
15
+ davinci curie babbage ada].freeze
16
+ CHAT_SYSTEM_PROMPT = "You're a Ruby dev. Only reply with plain code, no explanations."
17
+
13
18
  # Suggests a fix for a broken method
14
19
  #
15
20
  # @api private
@@ -32,7 +37,13 @@ module Senior
32
37
  ## Updated source:
33
38
  PROMPT
34
39
 
35
- request_completion(prompt)
40
+ if CHAT_MODELS.include?(defaults.model)
41
+ request_chat_completion(prompt)
42
+ elsif COMPLETION_MODELS.include?(defaults.model)
43
+ request_completion(prompt)
44
+ else
45
+ raise "Unknown model '#{defaults.model}'. If this is a mistake, open a PR in github.com/wilsonsilva/senior"
46
+ end
36
47
  end
37
48
 
38
49
  private
@@ -45,8 +56,8 @@ module Senior
45
56
  #
46
57
  def open_ai_client
47
58
  @open_ai_client ||= ::OpenAI::Client.new(
48
- access_token: ENV.fetch('OPEN_AI_ACCESS_TOKEN'),
49
- organization_id: ENV.fetch('OPEN_AI_ORGANIZATION_ID')
59
+ access_token: Senior.configuration.open_ai.access_token,
60
+ organization_id: Senior.configuration.open_ai.organization_id
50
61
  )
51
62
  end
52
63
 
@@ -55,19 +66,18 @@ module Senior
55
66
  # @api private
56
67
  #
57
68
  # @param prompt [String] The prompt for which to generate a completion
58
- # @param max_tokens [Integer] The maximum number of tokens to generate in the completion. Default value is 1024
59
69
  #
60
- # @return [String] The create completion
70
+ # @return [String] The created completion
61
71
  #
62
- def request_completion(prompt, max_tokens = 1024)
72
+ def request_completion(prompt)
63
73
  response = open_ai_client.completions(
64
74
  parameters: {
65
- model: 'text-davinci-003',
75
+ model: defaults.model,
66
76
  prompt:,
67
- max_tokens:,
68
- n: 1,
77
+ max_tokens: defaults.max_tokens,
78
+ n: defaults.n,
69
79
  stop: nil,
70
- temperature: 0.7
80
+ temperature: defaults.temperature
71
81
  }
72
82
  )
73
83
 
@@ -75,6 +85,43 @@ module Senior
75
85
 
76
86
  response.dig('choices', 0, 'text').strip
77
87
  end
88
+
89
+ # Creates a chat completion in OpenAI's API
90
+ #
91
+ # @api private
92
+ #
93
+ # @param prompt [String] The prompt for which to generate a chat completion
94
+ #
95
+ # @return [String] The created chat completion
96
+ #
97
+ def request_chat_completion(prompt)
98
+ response = open_ai_client.chat(
99
+ parameters: {
100
+ model: defaults.model,
101
+ max_tokens: defaults.max_tokens,
102
+ n: defaults.n,
103
+ temperature: defaults.temperature,
104
+ messages: [
105
+ { role: 'system', content: CHAT_SYSTEM_PROMPT },
106
+ { role: 'user', content: prompt }
107
+ ]
108
+ }
109
+ )
110
+
111
+ raise 'No chat completion found' unless response['choices'].any?
112
+
113
+ response.dig('choices', 0, 'message', 'content').strip
114
+ end
115
+
116
+ # Returns the default configuration object for the OpenAI brain
117
+ #
118
+ # @api private
119
+ #
120
+ # @return [Senior::Configuration::OpenAI] The default configuration object for the OpenAI brain.
121
+ #
122
+ def defaults
123
+ Senior.configuration.open_ai
124
+ end
78
125
  end
79
126
  end
80
127
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'senior/configuration/open_ai'
4
+
5
+ module Senior
6
+ module Configuration
7
+ # Index file for all configurations of the gem
8
+ #
9
+ # @api public
10
+ #
11
+ class Main
12
+ # The OpenAI configuration
13
+ #
14
+ # @api public
15
+ #
16
+ #
17
+ # @example
18
+ # configuration = Senior::Configuration::Main.new
19
+ # configuration.open_ai # => #<Configuration::OpenAI:0x00007fa2a61a63d8>
20
+ #
21
+ # @return [Configuration::OpenAI] The OpenAI configuration
22
+ #
23
+ attr_accessor :open_ai
24
+
25
+ # Initializes a new instance of the configuration for the Senior gem
26
+ #
27
+ # @api public
28
+ #
29
+ # @example
30
+ # configuration = Senior::Configuration::Main.new
31
+ #
32
+ def initialize
33
+ @open_ai = Configuration::OpenAI.new
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,146 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Senior
4
+ module Configuration
5
+ # Encapsulates the OpenAI configuration
6
+ #
7
+ # @api public
8
+ class OpenAI
9
+ # The OpenAI access token
10
+ #
11
+ # @return [String, nil] The OpenAI access token, or nil if not set
12
+ #
13
+ # @example
14
+ # configuration = Senior::Configuration::OpenAI.new
15
+ # configuration.access_token = 'your_openai_api_key'
16
+ attr_writer :access_token
17
+
18
+ # The OpenAI API version
19
+ #
20
+ # @return [String] The OpenAI API version
21
+ #
22
+ # @example
23
+ # configuration = Senior::Configuration::OpenAI.new
24
+ # configuration.api_version = 'v1'
25
+ attr_accessor :api_version
26
+
27
+ # The maximum number of tokens to use in the OpenAI API request
28
+ #
29
+ # @return [Integer] The maximum number of tokens to use in the OpenAI API request
30
+ #
31
+ # @example
32
+ # configuration = Senior::Configuration::OpenAI.new
33
+ # configuration.max_tokens = 1024
34
+ attr_accessor :max_tokens
35
+
36
+ # The OpenAI model to use
37
+ #
38
+ # @return [String] The OpenAI model to use
39
+ #
40
+ # @example
41
+ # configuration = Senior::Configuration::OpenAI.new
42
+ # configuration.model = 'text-davinci-003'
43
+ attr_accessor :model
44
+
45
+ # The number of responses to generate
46
+ #
47
+ # @return [Integer] The number of responses to generate
48
+ #
49
+ # @example
50
+ # configuration = Senior::Configuration::OpenAI.new
51
+ # configuration.n = 1
52
+ attr_accessor :n
53
+
54
+ # The OpenAI organization ID
55
+ #
56
+ # @return [String, nil] The OpenAI organization ID, or nil if not set
57
+ #
58
+ # @example
59
+ # configuration = Senior::Configuration::OpenAI.new
60
+ # configuration.organization_id = 'your_organization_id'
61
+ attr_accessor :organization_id
62
+
63
+ # The maximum amount of time to wait for an OpenAI API request to complete
64
+ #
65
+ # @return [Integer] The maximum amount of time to wait for an OpenAI API request to complete
66
+ #
67
+ # @example
68
+ # configuration = Senior::Configuration::OpenAI.new
69
+ # configuration.request_timeout = 120
70
+ attr_accessor :request_timeout
71
+
72
+ # The temperature to use in the OpenAI API request
73
+ #
74
+ # @return [Float] The temperature to use in the OpenAI API request
75
+ #
76
+ # @example
77
+ # configuration = Senior::Configuration::OpenAI.new
78
+ # configuration.temperature = 0.7
79
+ attr_accessor :temperature
80
+
81
+ # The OpenAI URI base
82
+ #
83
+ # @return [String] The OpenAI URI base
84
+ #
85
+ # @example
86
+ # configuration = Senior::Configuration::OpenAI.new
87
+ # configuration.uri_base = 'https://api.openai.com/'
88
+ attr_accessor :uri_base
89
+
90
+ # The default OpenAI API version
91
+ DEFAULT_API_VERSION = 'v1'
92
+
93
+ # The default maximum number of tokens to use in the OpenAI API request
94
+ DEFAULT_MAX_TOKENS = 1024
95
+
96
+ # The default OpenAI model to use
97
+ DEFAULT_MODEL = 'text-davinci-003'
98
+
99
+ # The default number of responses to generate
100
+ DEFAULT_N = 1
101
+
102
+ # The default maximum amount of time to wait for an OpenAI API request to complete
103
+ DEFAULT_REQUEST_TIMEOUT = 120
104
+
105
+ # The default temperature to use in the OpenAI API request
106
+ DEFAULT_TEMPERATURE = 0.7
107
+
108
+ # The default OpenAI URI base
109
+ DEFAULT_URI_BASE = 'https://api.openai.com/'
110
+
111
+ # Initializes a new instance of the OpenAI configuration for the Senior gem
112
+ #
113
+ # @example
114
+ # configuration = Senior::Configuration::OpenAI.new
115
+ #
116
+ def initialize
117
+ @access_token = nil
118
+ @api_version = DEFAULT_API_VERSION
119
+ @max_tokens = DEFAULT_MAX_TOKENS
120
+ @model = DEFAULT_MODEL
121
+ @n = DEFAULT_N
122
+ @organization_id = nil
123
+ @request_timeout = DEFAULT_REQUEST_TIMEOUT
124
+ @temperature = DEFAULT_TEMPERATURE
125
+ @uri_base = DEFAULT_URI_BASE
126
+ end
127
+
128
+ # Gets the OpenAI access token, raising an error if it is not set
129
+ #
130
+ # @raise [ConfigurationError] If the OpenAI access token is not set
131
+ #
132
+ # @return [String] The OpenAI access token.
133
+ #
134
+ # @example
135
+ # configuration = Senior::Configuration::OpenAI.new
136
+ # configuration.access_token # => raises ConfigurationError if access token is not set
137
+ #
138
+ def access_token
139
+ return @access_token if @access_token
140
+
141
+ error_text = 'OpenAI access token missing! See https://github.com/wilsonsilva/senior#usage'
142
+ raise ConfigurationError, error_text
143
+ end
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Senior
4
+ # Base class for all Senior's errors
5
+ class Error < StandardError; end
6
+
7
+ # Raised when the gem's configuration is faulty
8
+ class ConfigurationError < Error; end
9
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Senior
4
- VERSION = '0.1.0'
4
+ VERSION = '0.3.0'
5
5
  end
data/lib/senior.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'senior/errors'
4
+ require_relative 'senior/configuration/main'
3
5
  require_relative 'senior/brains/open_ai'
4
6
  require_relative 'senior/agent'
5
7
  require_relative 'senior/version'
@@ -56,4 +58,32 @@ module Senior
56
58
  def self.agent
57
59
  @agent ||= Agent.new
58
60
  end
61
+
62
+ # Returns the configuration object for the Senior gem
63
+ #
64
+ # @api private
65
+ #
66
+ # @return [Senior::Configuration::Main] The configuration object for the Senior gem
67
+ #
68
+ def self.configuration
69
+ @configuration ||= Configuration::Main.new
70
+ end
71
+
72
+ # Provides a way to configure the Senior gem
73
+ #
74
+ # @api public
75
+ #
76
+ # @yield [configuration] A block to configure the Senior gem
77
+ # @yieldparam configuration [Senior::Configuration::Main] The configuration object for the Senior gem
78
+ #
79
+ # @example Configuring the Senior gem
80
+ # Senior.configure do |config|
81
+ # config.open_ai.access_token = 'your_openai_api_key'
82
+ # end
83
+ #
84
+ # @return [void]
85
+ #
86
+ def self.configure
87
+ yield(configuration)
88
+ end
59
89
  end
@@ -1,6 +1,10 @@
1
1
  module Senior
2
2
  module Brains
3
3
  class OpenAI
4
+ CHAT_MODELS: Array[String]
5
+ COMPLETION_MODELS: Array[String]
6
+ CHAT_SYSTEM_PROMPT: String
7
+
4
8
  @open_ai_client: untyped
5
9
 
6
10
  def suggest_fix: (erroneous_source: String, exception_backtrace: String) -> String
@@ -8,7 +12,9 @@ module Senior
8
12
  private
9
13
 
10
14
  def open_ai_client: -> untyped
11
- def request_completion: (String prompt, ?Integer max_tokens) -> String
15
+ def request_completion: (String prompt) -> String
16
+ def request_chat_completion: (String prompt) -> String
17
+ def defaults: -> Senior::Configuration::OpenAI
12
18
  end
13
19
  end
14
20
  end
@@ -0,0 +1,7 @@
1
+ module Senior
2
+ module Configuration
3
+ class Main
4
+ attr_accessor open_ai: Configuration::OpenAI
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ module Senior
2
+ module Configuration
3
+ class OpenAI
4
+ DEFAULT_API_VERSION: String
5
+ DEFAULT_MAX_TOKENS: Integer
6
+ DEFAULT_MODEL: String
7
+ DEFAULT_N: Integer
8
+ DEFAULT_REQUEST_TIMEOUT: Integer
9
+ DEFAULT_TEMPERATURE: Float
10
+ DEFAULT_URI_BASE: String
11
+
12
+ attr_writer access_token: String?|nil
13
+ attr_accessor api_version: String
14
+ attr_accessor max_tokens: Integer
15
+ attr_accessor model: String
16
+ attr_accessor n: Integer
17
+ attr_accessor organization_id: String?|nil
18
+ attr_accessor request_timeout: Integer
19
+ attr_accessor temperature: Float
20
+ attr_accessor uri_base: String
21
+
22
+ def initialize: -> void
23
+ def access_token: -> String?
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,7 @@
1
+ module Senior
2
+ class Error < StandardError
3
+ end
4
+
5
+ class ConfigurationError < Error
6
+ end
7
+ end
data/sig/senior.rbs CHANGED
@@ -1,12 +1,11 @@
1
1
  module Senior
2
2
  VERSION: String
3
+ self.@configuration: Configuration::Main
3
4
  self.@agent: Agent
4
5
 
5
6
  def self.auto_debug: (Method broken_method, untyped args, String? | nil broken_method_source) -> untyped
6
-
7
7
  def self.suggest_fix: (Method broken_method, untyped args) -> String
8
-
9
- private
10
-
8
+ def self.configuration: -> Configuration::Main
9
+ def self.configure: -> untyped
11
10
  def self.agent: -> Agent
12
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: senior
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wilson Silva
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-10 00:00:00.000000000 Z
11
+ date: 2023-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: method_source
@@ -361,8 +361,9 @@ dependencies:
361
361
  - !ruby/object:Gem::Version
362
362
  version: '0.9'
363
363
  description: |-
364
- This gem provides a simple interface to OpenAI's GPT4 API for code repair. Given a piece of broken
365
- code, the gem generates a corrected version.
364
+ An AI-powered pair programmer. Provides a user-friendly interface for using AI API's to
365
+ automatically repair broken code and suggest improvements. Simply provide the faulty code as input, and the gem will
366
+ generate a corrected version using advanced machine learning techniques.
366
367
  email:
367
368
  - wilson.dsigns@gmail.com
368
369
  executables: []
@@ -387,6 +388,9 @@ files:
387
388
  - lib/senior.rb
388
389
  - lib/senior/agent.rb
389
390
  - lib/senior/brains/open_ai.rb
391
+ - lib/senior/configuration/main.rb
392
+ - lib/senior/configuration/open_ai.rb
393
+ - lib/senior/errors.rb
390
394
  - lib/senior/version.rb
391
395
  - sig/gems/method_source/method.rbs
392
396
  - sig/gems/ruby-openai/client.rbs
@@ -394,6 +398,9 @@ files:
394
398
  - sig/senior/agent.rbs
395
399
  - sig/senior/brains/i_brain.rbs
396
400
  - sig/senior/brains/open_ai.rbs
401
+ - sig/senior/configuration/main.rbs
402
+ - sig/senior/configuration/open_ai.rbs
403
+ - sig/senior/errors.rbs
397
404
  homepage: https://github.com/wilsonsilva/senior
398
405
  licenses:
399
406
  - MIT
@@ -421,5 +428,5 @@ requirements: []
421
428
  rubygems_version: 3.4.10
422
429
  signing_key:
423
430
  specification_version: 4
424
- summary: AI coding companion
431
+ summary: An AI-powered pair programmer
425
432
  test_files: []