senior 0.2.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +10 -7
- data/lib/senior/brains/open_ai.rb +40 -2
- data/lib/senior/version.rb +1 -1
- data/sig/senior/brains/open_ai.rbs +5 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d973cd43135daeb4de71d71a43f52500fe6ab39f6ba507b032833eb65402977
|
4
|
+
data.tar.gz: 4bf83499dae649941e881453fd376603faad6399fa49970b1375a843af0a987f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d6394a7b1b08fd32299b43febd26143128befb958f1af203106ce05c8e809ec07a3cdd7eec1cc16b0e1ddc369b2f94873b1e9addb91a9b8385231990dcd929f
|
7
|
+
data.tar.gz: 6655e71e4676e35cae26aedd96bce779202a33982d028a68f8cdb1ef257ae1fcae1b86755b8c11c70d6c70cfd7dff900da2fc74d4d9d6ba4e456209c84740228
|
data/CHANGELOG.md
CHANGED
@@ -10,6 +10,18 @@
|
|
10
10
|
- RBS Signatures
|
11
11
|
- Domain exceptions
|
12
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
|
+
|
13
25
|
## [0.2.0] - 2023-04-10
|
14
26
|
|
15
27
|
### Added
|
@@ -33,5 +45,6 @@ These configurations are used as default values for the OpenAI API calls.
|
|
33
45
|
|
34
46
|
- Initial release
|
35
47
|
|
48
|
+
[0.3.0]: https://github.com/wilsonsilva/senior/compare/v0.2.0...v0.3.0
|
36
49
|
[0.2.0]: https://github.com/wilsonsilva/senior/compare/v0.1.0...v0.2.0
|
37
50
|
[0.1.0]: https://github.com/wilsonsilva/senior/compare/eecec20...v0.1.0
|
data/README.md
CHANGED
@@ -5,8 +5,9 @@
|
|
5
5
|
[](https://codeclimate.com/github/wilsonsilva/senior/test_coverage)
|
6
6
|
[](https://codeclimate.com/github/wilsonsilva/senior/maintainability)
|
7
7
|
|
8
|
-
|
9
|
-
and
|
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.
|
10
11
|
|
11
12
|
## Table of Contents
|
12
13
|
|
@@ -48,12 +49,11 @@ environment. You should never hardcode your API credentials directly in your cod
|
|
48
49
|
Instead, store your API credentials securely, such as using environment variables or a separate configuration file that
|
49
50
|
is excluded from source control.
|
50
51
|
|
51
|
-
Once you have configured the
|
52
|
+
Once you have configured the gem, you can use the `Senior` module to interact with the OpenAI API.
|
52
53
|
|
53
54
|
### Auto-debugging a broken method
|
54
|
-
To debug a broken method, call Senior.auto_debug and pass in the broken method
|
55
|
-
|
56
|
-
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.
|
57
57
|
|
58
58
|
```ruby
|
59
59
|
def square(n) = n * y
|
@@ -63,7 +63,7 @@ puts result # => 4
|
|
63
63
|
```
|
64
64
|
|
65
65
|
### Suggesting a fix for a broken method
|
66
|
-
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.
|
67
67
|
The method will be analyzed and a fix will be suggested in the form of modified source code.
|
68
68
|
|
69
69
|
```ruby
|
@@ -77,6 +77,9 @@ puts suggestion # => "def square(n) = n * n"
|
|
77
77
|
|
78
78
|
After checking out the repo, run `bin/setup` to install dependencies.
|
79
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
|
+
|
80
83
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
81
84
|
|
82
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
|
-
|
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
|
@@ -56,7 +67,7 @@ module Senior
|
|
56
67
|
#
|
57
68
|
# @param prompt [String] The prompt for which to generate a completion
|
58
69
|
#
|
59
|
-
# @return [String] The
|
70
|
+
# @return [String] The created completion
|
60
71
|
#
|
61
72
|
def request_completion(prompt)
|
62
73
|
response = open_ai_client.completions(
|
@@ -75,6 +86,33 @@ module Senior
|
|
75
86
|
response.dig('choices', 0, 'text').strip
|
76
87
|
end
|
77
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
|
+
|
78
116
|
# Returns the default configuration object for the OpenAI brain
|
79
117
|
#
|
80
118
|
# @api private
|
data/lib/senior/version.rb
CHANGED
@@ -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
|
@@ -9,6 +13,7 @@ module Senior
|
|
9
13
|
|
10
14
|
def open_ai_client: -> untyped
|
11
15
|
def request_completion: (String prompt) -> String
|
16
|
+
def request_chat_completion: (String prompt) -> String
|
12
17
|
def defaults: -> Senior::Configuration::OpenAI
|
13
18
|
end
|
14
19
|
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.
|
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-
|
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
|
-
|
365
|
-
code
|
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: []
|
@@ -427,5 +428,5 @@ requirements: []
|
|
427
428
|
rubygems_version: 3.4.10
|
428
429
|
signing_key:
|
429
430
|
specification_version: 4
|
430
|
-
summary: AI
|
431
|
+
summary: An AI-powered pair programmer
|
431
432
|
test_files: []
|