rbs_goose 0.1.1 → 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 +4 -4
- data/.rubocop.yml +9 -2
- data/.ruby-version +1 -1
- data/Gemfile +20 -13
- data/Gemfile.lock +69 -38
- data/README-ja.md +88 -0
- data/README.md +25 -22
- data/Rakefile +53 -8
- data/Steepfile +1 -3
- data/evaluations/01_rbs_goose/claude_haiku.log +1494 -0
- data/evaluations/01_rbs_goose/claude_opus.log +1439 -0
- data/evaluations/01_rbs_goose/claude_sonnet.log +1437 -0
- data/evaluations/01_rbs_goose/gpt-3-5-turbo.log +1241 -0
- data/evaluations/01_rbs_goose/gpt-4-turbo.log +1304 -0
- data/examples/fix_errors/Steepfile +6 -0
- data/examples/fix_errors/error_messages.txt +26 -0
- data/{lib/rbs_goose/examples/rbs_samples → examples/fix_errors}/refined/sig/email.rbs +1 -1
- data/{lib/rbs_goose/examples/rbs_samples → examples/fix_errors}/refined/sig/person.rbs +2 -2
- data/{lib/rbs_goose/examples/rbs_samples → examples/fix_errors}/refined/sig/phone.rbs +1 -1
- data/examples/fix_errors/sig/email.rbs +11 -0
- data/examples/fix_errors/sig/person.rbs +15 -0
- data/examples/fix_errors/sig/phone.rbs +15 -0
- data/examples/rbs_samples/lib/email.rb +16 -0
- data/examples/rbs_samples/lib/person.rb +23 -0
- data/examples/rbs_samples/lib/phone.rb +22 -0
- data/examples/rbs_samples/refined/sig/email.rbs +11 -0
- data/examples/rbs_samples/refined/sig/person.rbs +15 -0
- data/examples/rbs_samples/refined/sig/phone.rbs +15 -0
- data/examples/rbs_syntax/Steepfile +6 -0
- data/examples/rbs_syntax/lib/a.rb +53 -0
- data/examples/rbs_syntax/lib/list.rb +9 -0
- data/examples/rbs_syntax/lib/main.rb +17 -0
- data/examples/rbs_syntax/refined/sig/a.rbs +47 -0
- data/examples/rbs_syntax/refined/sig/list.rbs +7 -0
- data/examples/rbs_syntax/refined/sig/main.rbs +26 -0
- data/examples/rbs_syntax/sig/a.rbs +47 -0
- data/examples/rbs_syntax/sig/list.rbs +7 -0
- data/examples/rbs_syntax/sig/main.rbs +26 -0
- data/lib/rbs_goose/configuration.rb +93 -23
- data/lib/rbs_goose/io/example.rb +2 -2
- data/lib/rbs_goose/io/example_group.rb +16 -7
- data/lib/rbs_goose/io/target_group.rb +1 -1
- data/lib/rbs_goose/io/typed_ruby.rb +3 -3
- data/lib/rbs_goose/orthoses/fix_error.rb +26 -0
- data/lib/rbs_goose/orthoses/infer.rb +26 -0
- data/lib/rbs_goose/orthoses.rb +9 -0
- data/lib/rbs_goose/templates/base.rb +77 -0
- data/lib/rbs_goose/templates/fix_error_template.rb +43 -0
- data/lib/rbs_goose/templates/infer_template.rb +30 -0
- data/lib/rbs_goose/templates.rb +3 -1
- data/lib/rbs_goose/type_inferrer.rb +73 -2
- data/lib/rbs_goose/version.rb +1 -1
- data/lib/rbs_goose.rb +24 -4
- data/rbs_collection.lock.yaml +63 -47
- data/renovate.json +5 -0
- data/sig/rbs_goose/configuration.rbs +20 -12
- data/sig/rbs_goose/io/example.rbs +7 -7
- data/sig/rbs_goose/io/example_group.rbs +9 -7
- data/sig/rbs_goose/io/file.rbs +10 -10
- data/sig/rbs_goose/io/target_group.rbs +2 -2
- data/sig/rbs_goose/io/typed_ruby.rbs +7 -7
- data/sig/rbs_goose/io.rbs +1 -1
- data/sig/rbs_goose/orthoses/fix_error.rbs +11 -0
- data/sig/rbs_goose/orthoses/infer.rbs +11 -0
- data/sig/rbs_goose/orthoses.rbs +2 -0
- data/sig/rbs_goose/templates/base.rbs +18 -0
- data/sig/rbs_goose/templates/fix_error_template.rbs +6 -0
- data/sig/rbs_goose/templates/infer_template.rbs +6 -0
- data/sig/rbs_goose/templates.rbs +1 -1
- data/sig/rbs_goose/type_inferrer.rbs +9 -1
- data/sig/rbs_goose.rbs +18 -9
- metadata +137 -21
- data/README-EN-US.md +0 -85
- data/lib/rbs_goose/templates/default_template.rb +0 -49
- data/sig/rbs_goose/templates/default_template.rbs +0 -10
- /data/{lib/rbs_goose/examples/rbs_samples → examples/fix_errors}/lib/email.rb +0 -0
- /data/{lib/rbs_goose/examples/rbs_samples → examples/fix_errors}/lib/person.rb +0 -0
- /data/{lib/rbs_goose/examples/rbs_samples → examples/fix_errors}/lib/phone.rb +0 -0
- /data/{lib/rbs_goose/examples → examples}/rbs_samples/Steepfile +0 -0
- /data/{lib/rbs_goose/examples → examples}/rbs_samples/sig/email.rbs +0 -0
- /data/{lib/rbs_goose/examples → examples}/rbs_samples/sig/person.rbs +0 -0
- /data/{lib/rbs_goose/examples → examples}/rbs_samples/sig/phone.rbs +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 10bed3f0456e4a9262ed23aa377238af9fa6297fabc1792aac15146c6ef20325
|
|
4
|
+
data.tar.gz: 5b7ac52a808a4a62b71e9bb603f14c92d5dadb897b897fde004e9dcc1cbb9fff
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9f9e69a4443e9f08cb98f4282df0b4787f13a07563e74debea467da6216bb0e7034f9661c68896f1083e3edad2c9d61c2aa01c11b5864ca7368a1dd9abcd5d48
|
|
7
|
+
data.tar.gz: c92d6b1a3c4ac8b6988a8b33192b44a41404cc0e122d13323e945d2a44ba08a39bc261aa33b3c5c99bd9bc45d83c1d24f0702a1412880bafa542ebf6346747e8
|
data/.rubocop.yml
CHANGED
|
@@ -4,13 +4,17 @@ require:
|
|
|
4
4
|
- rubocop-rspec
|
|
5
5
|
|
|
6
6
|
AllCops:
|
|
7
|
-
TargetRubyVersion: 3.
|
|
7
|
+
TargetRubyVersion: 3.3
|
|
8
8
|
NewCops: enable
|
|
9
9
|
Exclude:
|
|
10
|
-
- '
|
|
10
|
+
- 'examples/**/*'
|
|
11
11
|
- 'spec/fixtures/**/*'
|
|
12
12
|
- 'vendor/bundle/**/*'
|
|
13
13
|
|
|
14
|
+
Metrics/BlockLength:
|
|
15
|
+
Exclude:
|
|
16
|
+
- Rakefile
|
|
17
|
+
|
|
14
18
|
Style/StringLiterals:
|
|
15
19
|
Enabled: true
|
|
16
20
|
|
|
@@ -38,5 +42,8 @@ RSpec/MultipleMemoizedHelpers:
|
|
|
38
42
|
RSpec/MultipleExpectations:
|
|
39
43
|
Max: 5
|
|
40
44
|
|
|
45
|
+
RSpec/NestedGroups:
|
|
46
|
+
Max: 4
|
|
47
|
+
|
|
41
48
|
FactoryBot/FactoryAssociationWithStrategy:
|
|
42
49
|
Enabled: false
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.3.
|
|
1
|
+
3.3.1
|
data/Gemfile
CHANGED
|
@@ -5,16 +5,23 @@ source 'https://rubygems.org'
|
|
|
5
5
|
# Specify your gem's dependencies in rbs_goose.gemspec
|
|
6
6
|
gemspec
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
gem '
|
|
10
|
-
gem '
|
|
11
|
-
gem '
|
|
12
|
-
gem '
|
|
13
|
-
gem '
|
|
14
|
-
gem '
|
|
15
|
-
gem '
|
|
16
|
-
gem 'rubocop
|
|
17
|
-
gem '
|
|
18
|
-
gem '
|
|
19
|
-
gem '
|
|
20
|
-
gem '
|
|
8
|
+
group :development, :test do
|
|
9
|
+
gem 'anthropic', '~> 0.2.0', require: false
|
|
10
|
+
gem 'dotenv', '~> 3.1.0', require: false
|
|
11
|
+
gem 'factory_bot', '~> 6.4.5', require: false
|
|
12
|
+
gem 'faraday', '~> 2.9.0', require: false
|
|
13
|
+
gem 'orthoses', '~> 1.13.0', require: false
|
|
14
|
+
gem 'rake', '~> 13.0', require: false
|
|
15
|
+
gem 'rspec', '~> 3.0', require: false
|
|
16
|
+
gem 'rubocop', '~> 1.21', require: false
|
|
17
|
+
gem 'rubocop-factory_bot', '~> 2.25.1', require: false
|
|
18
|
+
gem 'rubocop-rake', '~> 0.6.0', require: false
|
|
19
|
+
gem 'rubocop-rspec', '~> 2.22', require: false
|
|
20
|
+
gem 'ruby-openai', '~> 7.0.0', require: false
|
|
21
|
+
gem 'simplecov', require: false
|
|
22
|
+
gem 'simplecov-cobertura', require: false
|
|
23
|
+
gem 'simplecov-html', github: 'kokuyouwind/simplecov-html', ref: '132805391cda353'
|
|
24
|
+
gem 'steep', '~> 1.6.0', require: false
|
|
25
|
+
gem 'vcr', '~> 6.2.0', require: false
|
|
26
|
+
gem 'webmock', '~> 3.23.0', require: false
|
|
27
|
+
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
|
+
GIT
|
|
2
|
+
remote: https://github.com/kokuyouwind/simplecov-html.git
|
|
3
|
+
revision: 132805391cda353dedb59bdb1f4fbe0b8af789bc
|
|
4
|
+
ref: 132805391cda353
|
|
5
|
+
specs:
|
|
6
|
+
simplecov-html (0.12.3)
|
|
7
|
+
|
|
1
8
|
PATH
|
|
2
9
|
remote: .
|
|
3
10
|
specs:
|
|
4
|
-
rbs_goose (0.
|
|
5
|
-
|
|
6
|
-
|
|
11
|
+
rbs_goose (0.2.0)
|
|
12
|
+
anthropic (>= 0.2.0, < 1.0.0)
|
|
13
|
+
faraday (>= 2.9.0, < 3.0.0)
|
|
14
|
+
langchainrb (>= 0.12.0, < 1.0.0)
|
|
15
|
+
orthoses (>= 1.13.0, < 2.0.0)
|
|
16
|
+
ruby-openai (>= 6.1.0, < 8.0.0)
|
|
17
|
+
steep (>= 1.6.0, < 2.0.0)
|
|
7
18
|
|
|
8
19
|
GEM
|
|
9
20
|
remote: https://rubygems.org/
|
|
@@ -21,19 +32,23 @@ GEM
|
|
|
21
32
|
tzinfo (~> 2.0)
|
|
22
33
|
addressable (2.8.6)
|
|
23
34
|
public_suffix (>= 2.0.2, < 6.0)
|
|
35
|
+
anthropic (0.2.0)
|
|
36
|
+
faraday (>= 1)
|
|
37
|
+
faraday-multipart (>= 1)
|
|
24
38
|
ast (2.4.2)
|
|
25
39
|
baran (0.1.10)
|
|
26
40
|
base64 (0.2.0)
|
|
27
41
|
bigdecimal (3.1.6)
|
|
28
|
-
colorize (
|
|
42
|
+
colorize (1.1.0)
|
|
29
43
|
concurrent-ruby (1.2.3)
|
|
30
44
|
connection_pool (2.4.1)
|
|
31
45
|
crack (0.4.6)
|
|
32
46
|
bigdecimal
|
|
33
47
|
rexml
|
|
34
48
|
csv (3.2.8)
|
|
35
|
-
diff-lcs (1.5.
|
|
36
|
-
|
|
49
|
+
diff-lcs (1.5.1)
|
|
50
|
+
docile (1.4.0)
|
|
51
|
+
dotenv (3.1.2)
|
|
37
52
|
drb (2.2.0)
|
|
38
53
|
ruby2_keywords
|
|
39
54
|
event_stream_parser (1.0.0)
|
|
@@ -50,16 +65,17 @@ GEM
|
|
|
50
65
|
hashdiff (1.1.0)
|
|
51
66
|
i18n (1.14.1)
|
|
52
67
|
concurrent-ruby (~> 1.0)
|
|
53
|
-
json (2.7.
|
|
68
|
+
json (2.7.2)
|
|
54
69
|
json-schema (4.0.0)
|
|
55
70
|
addressable (>= 2.8)
|
|
56
|
-
langchainrb (0.
|
|
71
|
+
langchainrb (0.12.0)
|
|
72
|
+
activesupport (>= 7.0.8)
|
|
57
73
|
baran (~> 0.1.9)
|
|
58
|
-
colorize (~>
|
|
59
|
-
json-schema (~> 4
|
|
74
|
+
colorize (~> 1.1.0)
|
|
75
|
+
json-schema (~> 4)
|
|
60
76
|
matrix
|
|
61
77
|
pragmatic_segmenter (~> 0.3.0)
|
|
62
|
-
tiktoken_ruby (~> 0.0.
|
|
78
|
+
tiktoken_ruby (~> 0.0.8)
|
|
63
79
|
to_bool (~> 2.0.0)
|
|
64
80
|
zeitwerk (~> 2.5)
|
|
65
81
|
language_server-protocol (3.17.0.3)
|
|
@@ -69,14 +85,14 @@ GEM
|
|
|
69
85
|
logger (1.6.0)
|
|
70
86
|
matrix (0.4.2)
|
|
71
87
|
minitest (5.21.2)
|
|
72
|
-
multipart-post (2.
|
|
88
|
+
multipart-post (2.4.0)
|
|
73
89
|
mutex_m (0.2.0)
|
|
74
90
|
net-http (0.4.1)
|
|
75
91
|
uri
|
|
76
92
|
orthoses (1.13.0)
|
|
77
93
|
rbs (~> 3.0)
|
|
78
94
|
parallel (1.24.0)
|
|
79
|
-
parser (3.3.0
|
|
95
|
+
parser (3.3.1.0)
|
|
80
96
|
ast (~> 2.4.1)
|
|
81
97
|
racc
|
|
82
98
|
pragmatic_segmenter (0.3.23)
|
|
@@ -84,29 +100,28 @@ GEM
|
|
|
84
100
|
public_suffix (5.0.4)
|
|
85
101
|
racc (1.7.3)
|
|
86
102
|
rainbow (3.1.1)
|
|
87
|
-
rake (13.1
|
|
103
|
+
rake (13.2.1)
|
|
88
104
|
rb-fsevent (0.11.2)
|
|
89
105
|
rb-inotify (0.10.1)
|
|
90
106
|
ffi (~> 1.0)
|
|
91
|
-
rb_sys (0.9.86)
|
|
92
107
|
rbs (3.4.1)
|
|
93
108
|
abbrev
|
|
94
109
|
regexp_parser (2.9.0)
|
|
95
110
|
rexml (3.2.6)
|
|
96
|
-
rspec (3.
|
|
97
|
-
rspec-core (~> 3.
|
|
98
|
-
rspec-expectations (~> 3.
|
|
99
|
-
rspec-mocks (~> 3.
|
|
100
|
-
rspec-core (3.
|
|
101
|
-
rspec-support (~> 3.
|
|
102
|
-
rspec-expectations (3.
|
|
111
|
+
rspec (3.13.0)
|
|
112
|
+
rspec-core (~> 3.13.0)
|
|
113
|
+
rspec-expectations (~> 3.13.0)
|
|
114
|
+
rspec-mocks (~> 3.13.0)
|
|
115
|
+
rspec-core (3.13.0)
|
|
116
|
+
rspec-support (~> 3.13.0)
|
|
117
|
+
rspec-expectations (3.13.0)
|
|
103
118
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
104
|
-
rspec-support (~> 3.
|
|
105
|
-
rspec-mocks (3.
|
|
119
|
+
rspec-support (~> 3.13.0)
|
|
120
|
+
rspec-mocks (3.13.0)
|
|
106
121
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
107
|
-
rspec-support (~> 3.
|
|
108
|
-
rspec-support (3.
|
|
109
|
-
rubocop (1.
|
|
122
|
+
rspec-support (~> 3.13.0)
|
|
123
|
+
rspec-support (3.13.0)
|
|
124
|
+
rubocop (1.63.4)
|
|
110
125
|
json (~> 2.3)
|
|
111
126
|
language_server-protocol (>= 3.17.0)
|
|
112
127
|
parallel (~> 1.10)
|
|
@@ -114,28 +129,39 @@ GEM
|
|
|
114
129
|
rainbow (>= 2.2.2, < 4.0)
|
|
115
130
|
regexp_parser (>= 1.8, < 3.0)
|
|
116
131
|
rexml (>= 3.2.5, < 4.0)
|
|
117
|
-
rubocop-ast (>= 1.
|
|
132
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
118
133
|
ruby-progressbar (~> 1.7)
|
|
119
134
|
unicode-display_width (>= 2.4.0, < 3.0)
|
|
120
|
-
rubocop-ast (1.
|
|
121
|
-
parser (>= 3.
|
|
135
|
+
rubocop-ast (1.31.3)
|
|
136
|
+
parser (>= 3.3.1.0)
|
|
122
137
|
rubocop-capybara (2.20.0)
|
|
123
138
|
rubocop (~> 1.41)
|
|
124
139
|
rubocop-factory_bot (2.25.1)
|
|
125
140
|
rubocop (~> 1.41)
|
|
126
141
|
rubocop-rake (0.6.0)
|
|
127
142
|
rubocop (~> 1.0)
|
|
128
|
-
rubocop-rspec (2.
|
|
143
|
+
rubocop-rspec (2.29.2)
|
|
129
144
|
rubocop (~> 1.40)
|
|
130
145
|
rubocop-capybara (~> 2.17)
|
|
131
146
|
rubocop-factory_bot (~> 2.22)
|
|
132
|
-
|
|
147
|
+
rubocop-rspec_rails (~> 2.28)
|
|
148
|
+
rubocop-rspec_rails (2.28.3)
|
|
149
|
+
rubocop (~> 1.40)
|
|
150
|
+
ruby-openai (7.0.1)
|
|
133
151
|
event_stream_parser (>= 0.3.0, < 2.0.0)
|
|
134
152
|
faraday (>= 1)
|
|
135
153
|
faraday-multipart (>= 1)
|
|
136
154
|
ruby-progressbar (1.13.0)
|
|
137
155
|
ruby2_keywords (0.0.5)
|
|
138
156
|
securerandom (0.3.1)
|
|
157
|
+
simplecov (0.22.0)
|
|
158
|
+
docile (~> 1.1)
|
|
159
|
+
simplecov-html (~> 0.11)
|
|
160
|
+
simplecov_json_formatter (~> 0.1)
|
|
161
|
+
simplecov-cobertura (2.1.0)
|
|
162
|
+
rexml
|
|
163
|
+
simplecov (~> 0.19)
|
|
164
|
+
simplecov_json_formatter (0.1.4)
|
|
139
165
|
steep (1.6.0)
|
|
140
166
|
activesupport (>= 5.1)
|
|
141
167
|
concurrent-ruby (>= 1.1.10)
|
|
@@ -154,8 +180,8 @@ GEM
|
|
|
154
180
|
strscan (3.0.8)
|
|
155
181
|
terminal-table (3.0.2)
|
|
156
182
|
unicode-display_width (>= 1.1.1, < 3)
|
|
157
|
-
tiktoken_ruby (0.0.
|
|
158
|
-
|
|
183
|
+
tiktoken_ruby (0.0.8-arm64-darwin)
|
|
184
|
+
tiktoken_ruby (0.0.8-x86_64-linux)
|
|
159
185
|
to_bool (2.0.0)
|
|
160
186
|
tzinfo (2.0.6)
|
|
161
187
|
concurrent-ruby (~> 1.0)
|
|
@@ -163,7 +189,7 @@ GEM
|
|
|
163
189
|
unicode-display_width (2.5.0)
|
|
164
190
|
uri (0.13.0)
|
|
165
191
|
vcr (6.2.0)
|
|
166
|
-
webmock (3.
|
|
192
|
+
webmock (3.23.0)
|
|
167
193
|
addressable (>= 2.8.0)
|
|
168
194
|
crack (>= 0.3.2)
|
|
169
195
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
@@ -175,8 +201,10 @@ PLATFORMS
|
|
|
175
201
|
x86_64-linux
|
|
176
202
|
|
|
177
203
|
DEPENDENCIES
|
|
178
|
-
|
|
204
|
+
anthropic (~> 0.2.0)
|
|
205
|
+
dotenv (~> 3.1.0)
|
|
179
206
|
factory_bot (~> 6.4.5)
|
|
207
|
+
faraday (~> 2.9.0)
|
|
180
208
|
orthoses (~> 1.13.0)
|
|
181
209
|
rake (~> 13.0)
|
|
182
210
|
rbs_goose!
|
|
@@ -185,10 +213,13 @@ DEPENDENCIES
|
|
|
185
213
|
rubocop-factory_bot (~> 2.25.1)
|
|
186
214
|
rubocop-rake (~> 0.6.0)
|
|
187
215
|
rubocop-rspec (~> 2.22)
|
|
188
|
-
ruby-openai (~>
|
|
216
|
+
ruby-openai (~> 7.0.0)
|
|
217
|
+
simplecov
|
|
218
|
+
simplecov-cobertura
|
|
219
|
+
simplecov-html!
|
|
189
220
|
steep (~> 1.6.0)
|
|
190
221
|
vcr (~> 6.2.0)
|
|
191
|
-
webmock (~> 3.
|
|
222
|
+
webmock (~> 3.23.0)
|
|
192
223
|
|
|
193
224
|
BUNDLED WITH
|
|
194
225
|
2.4.10
|
data/README-ja.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/kokuyouwind/rbs_goose/main/assets/logo.svg" alt="RuboCop Logo"/>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
[](/README.md)
|
|
6
|
+
[](/README-ja.md)
|
|
7
|
+
|
|
8
|
+
[](https://github.com/kokuyouwind/rbs_goose/actions/workflows/main.yml)
|
|
9
|
+
[](https://badge.fury.io/rb/rbs_goose)
|
|
10
|
+
[](https://codeclimate.com/github/kokuyouwind/rbs_goose/test_coverage)
|
|
11
|
+
[](https://codeclimate.com/github/kokuyouwind/rbs_goose/maintainability)
|
|
12
|
+
|
|
13
|
+
RBS Goose は ChatGPT などの大規模言語モデルを利用して、 Ruby コードの RBS シグニチャを推測するツールです。
|
|
14
|
+
|
|
15
|
+
> [!CAUTION]
|
|
16
|
+
> 現在は技術検証中のため、適切な型がほとんど、あるいは全く出力されない可能性があります。
|
|
17
|
+
> また推測にあたっては ChatGPT API などを利用するため、コード規模によっては利用料が高額になる可能性があります。
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
$ gem install rbs_goose
|
|
23
|
+
# 利用する LangChain LLM に応じて、対応する gem を合わせてインストールします
|
|
24
|
+
$ gem install ruby-openai
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`bundler` を利用する場合は、代わりに以下を `Gemfile` に追加してください。
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
gem 'rbs_goose'
|
|
31
|
+
# 利用する LangChain LLM に応じて、対応する gem を合わせてインストールします
|
|
32
|
+
gem 'ruby-openai'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Usage
|
|
36
|
+
|
|
37
|
+
現状ではコマンドラインツールが未整備なので、 `Rakefile` などから `RbsGoose.run` を直接呼び出してください。
|
|
38
|
+
|
|
39
|
+
[OpenAI API](https://openai.com/blog/openai-api) を利用する場合は以下のようにします。
|
|
40
|
+
|
|
41
|
+
```ruby
|
|
42
|
+
require 'rbs_goose'
|
|
43
|
+
require 'openai'
|
|
44
|
+
|
|
45
|
+
desc 'refine RBS files in sig directory'
|
|
46
|
+
task :refine do
|
|
47
|
+
RbsGoose.configure do |c|
|
|
48
|
+
c.use_open_ai(ENV.fetch('OPENAI_ACCESS_TOKEN'))
|
|
49
|
+
end
|
|
50
|
+
RbsGoose.run
|
|
51
|
+
end
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
このタスクを実行すると、 `lib` 以下の Ruby コードと `sig` 以下の RBS シグニチャを参照し、推測したシグニチャを上書きします。
|
|
55
|
+
|
|
56
|
+
対象とするディレクトリを変更する場合、以下のように `RbsGoose.run` の引数を指定してください。
|
|
57
|
+
|
|
58
|
+
```ruby
|
|
59
|
+
RbsGoose.run(code_dir: 'app', sig_dir: 'types', base_path: Rails.root)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
大規模言語モデルの呼び出しには [Langchain.rb](https://github.com/andreibondarev/langchainrb) を利用しています。
|
|
63
|
+
|
|
64
|
+
他の大規模言語モデルを利用する場合は、以下のように `llm` を直接設定してください。
|
|
65
|
+
|
|
66
|
+
```ruby
|
|
67
|
+
RbsGoose.configure do |c|
|
|
68
|
+
c.llm = Langchain::LLM::GooglePalm.new(api_key: ENV["GOOGLE_PALM_API_KEY"])
|
|
69
|
+
end
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Development
|
|
73
|
+
|
|
74
|
+
リポジトリのチェックアウト後、bin/setup を実行して依存関係をインストールします。次に、`rake spec` を実行してテストを実行します。対話型プロンプトとして `bin/console` を実行して試してみることもできます。
|
|
75
|
+
|
|
76
|
+
この gem をローカルマシンにインストールするには、`bundle exec rake install` を実行します。新しいバージョンをリリースするには、`version.rb` でバージョン番号を更新してから `bundle exec rake release` を実行します。これにより、バージョンに対する Git タグが作成され、Git のコミットと作成されたタグがプッシュされ、.gem ファイルが rubygems.org にプッシュされます。
|
|
77
|
+
|
|
78
|
+
## Contributing
|
|
79
|
+
|
|
80
|
+
バグレポートやプルリクエストは GitHub の https://github.com/kokuyouwind/rbs_goose で受け付けています。このプロジェクトは、共同作業のための安全で歓迎すべきスペースを目指しており、貢献者は [行動規範](/CODE_OF_CONDUCT.md) に従うことが求められます。
|
|
81
|
+
|
|
82
|
+
## ライセンス
|
|
83
|
+
|
|
84
|
+
この gem は [MITライセンス](https://opensource.org/licenses/MIT) の条項に基づいてオープンソースとして利用できます。
|
|
85
|
+
|
|
86
|
+
## 行動規範
|
|
87
|
+
|
|
88
|
+
RbsGoose プロジェクトのコードベース、課題トラッカー、チャットルーム、およびメーリングリストに関わる全員は、 [行動規範](/CODE_OF_CONDUCT.md) に従うことが求められます。
|
data/README.md
CHANGED
|
@@ -2,38 +2,41 @@
|
|
|
2
2
|
<img src="https://raw.githubusercontent.com/kokuyouwind/rbs_goose/main/assets/logo.svg" alt="RuboCop Logo"/>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
[](/README
|
|
6
|
-
[](/README.md)
|
|
5
|
+
[](/README.md)
|
|
6
|
+
[](/README-ja.md)
|
|
7
7
|
|
|
8
|
-
[](https://github.com/kokuyouwind/rbs_goose/actions/workflows/main.yml)
|
|
9
|
+
[](https://badge.fury.io/rb/rbs_goose)
|
|
10
|
+
[](https://codeclimate.com/github/kokuyouwind/rbs_goose/test_coverage)
|
|
11
|
+
[](https://codeclimate.com/github/kokuyouwind/rbs_goose/maintainability)
|
|
9
12
|
|
|
10
|
-
RBS Goose
|
|
13
|
+
RBS Goose is a tool that uses large language models such as ChatGPT to infer RBS signatures for Ruby code.
|
|
11
14
|
|
|
12
15
|
> [!CAUTION]
|
|
13
|
-
>
|
|
14
|
-
>
|
|
16
|
+
> Currently in the process of technical verification, there is a possibility that appropriate types may not be output at all or may not be output at all.
|
|
17
|
+
> Also, when making inferences, it may be expensive to use the ChatGPT API, depending on the size of the code.
|
|
15
18
|
|
|
16
19
|
## Installation
|
|
17
20
|
|
|
18
21
|
```bash
|
|
19
22
|
$ gem install rbs_goose
|
|
20
|
-
#
|
|
23
|
+
# Install the corresponding gem according to the LangChain LLM you want to use
|
|
21
24
|
$ gem install ruby-openai
|
|
22
25
|
```
|
|
23
26
|
|
|
24
|
-
`bundler
|
|
27
|
+
If you are using `bundler`, add the following to your `Gemfile` instead.
|
|
25
28
|
|
|
26
29
|
```ruby
|
|
27
30
|
gem 'rbs_goose'
|
|
28
|
-
#
|
|
31
|
+
# Install the corresponding gem according to the LangChain LLM you want to use
|
|
29
32
|
gem 'ruby-openai'
|
|
30
33
|
```
|
|
31
34
|
|
|
32
35
|
## Usage
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
Currently, the command-line tool is not fully developed, so please call `RbsGoose.run` directly from a file like `Rakefile`.
|
|
35
38
|
|
|
36
|
-
[OpenAI API](https://openai.com/blog/openai-api)
|
|
39
|
+
To use the [OpenAI API](https://openai.com/blog/openai-api), do the following:
|
|
37
40
|
|
|
38
41
|
```ruby
|
|
39
42
|
require 'rbs_goose'
|
|
@@ -48,17 +51,17 @@ task :refine do
|
|
|
48
51
|
end
|
|
49
52
|
```
|
|
50
53
|
|
|
51
|
-
|
|
54
|
+
When you run this task, it will reference the Ruby code in the `lib` directory and the RBS signatures in the `sig` directory, and overwrite the inferred signatures.
|
|
52
55
|
|
|
53
|
-
|
|
56
|
+
If you want to change the target directory, specify the arguments for `RbsGoose.run` as follows:
|
|
54
57
|
|
|
55
58
|
```ruby
|
|
56
59
|
RbsGoose.run(code_dir: 'app', sig_dir: 'types', base_path: Rails.root)
|
|
57
60
|
```
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
The call to the large language model uses [Langchain.rb](https://github.com/andreibondarev/langchainrb).
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
If you want to use another large language model, set `llm` directly as follows:
|
|
62
65
|
|
|
63
66
|
```ruby
|
|
64
67
|
RbsGoose.configure do |c|
|
|
@@ -68,18 +71,18 @@ end
|
|
|
68
71
|
|
|
69
72
|
## Development
|
|
70
73
|
|
|
71
|
-
|
|
74
|
+
After checking out the repository, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt.
|
|
72
75
|
|
|
73
|
-
|
|
76
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`. This will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
|
|
74
77
|
|
|
75
78
|
## Contributing
|
|
76
79
|
|
|
77
|
-
|
|
80
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/kokuyouwind/rbs_goose. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](/CODE_OF_CONDUCT.md).
|
|
78
81
|
|
|
79
|
-
##
|
|
82
|
+
## License
|
|
80
83
|
|
|
81
|
-
|
|
84
|
+
This gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
|
82
85
|
|
|
83
|
-
##
|
|
86
|
+
## Code of Conduct
|
|
84
87
|
|
|
85
|
-
RbsGoose
|
|
88
|
+
Everyone interacting in the RbsGoose project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [code of conduct](/CODE_OF_CONDUCT.md).
|
data/Rakefile
CHANGED
|
@@ -25,12 +25,21 @@ task :'spec:record' do
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
namespace :sig do
|
|
28
|
-
desc '
|
|
29
|
-
task :
|
|
28
|
+
desc 'refine RBS files in sig directory'
|
|
29
|
+
task :refine do
|
|
30
30
|
require 'orthoses'
|
|
31
31
|
require_relative 'lib/rbs_goose'
|
|
32
32
|
|
|
33
33
|
Orthoses::Builder.new do
|
|
34
|
+
# use RbsGoose::Orthoses::FixError
|
|
35
|
+
use RbsGoose::Orthoses::Infer do |config|
|
|
36
|
+
# config.use_open_ai(ENV.fetch('OPENAI_ACCESS_TOKEN'), model_name: 'gpt-3.5-turbo-0125')
|
|
37
|
+
# config.use_open_ai(ENV.fetch('OPENAI_ACCESS_TOKEN'), model_name: 'gpt-4-turbo-2024-04-09')
|
|
38
|
+
# config.use_anthropic(ENV.fetch('ANTHROPIC_API_KEY', nil), model_name: 'claude-3-haiku-20240307')
|
|
39
|
+
# config.use_anthropic(ENV.fetch('ANTHROPIC_API_KEY', nil), model_name: 'claude-3-sonnet-20240229')
|
|
40
|
+
config.use_anthropic(ENV.fetch('ANTHROPIC_API_KEY', nil), model_name: 'claude-3-opus-20240229')
|
|
41
|
+
# config.use_ollama(model_name: 'codegemma')
|
|
42
|
+
end
|
|
34
43
|
use Orthoses::CreateFileByName,
|
|
35
44
|
to: 'sig',
|
|
36
45
|
rmtree: true
|
|
@@ -44,13 +53,49 @@ namespace :sig do
|
|
|
44
53
|
end.call
|
|
45
54
|
end
|
|
46
55
|
|
|
47
|
-
desc '
|
|
48
|
-
task :
|
|
56
|
+
desc 'fix RBS'
|
|
57
|
+
task :fix do
|
|
58
|
+
require 'orthoses'
|
|
49
59
|
require_relative 'lib/rbs_goose'
|
|
50
60
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
Orthoses::Builder.new do
|
|
62
|
+
use RbsGoose::Orthoses::FixError do |config|
|
|
63
|
+
config.use_anthropic(ENV.fetch('ANTHROPIC_API_KEY', nil), model_name: 'claude-3-opus-20240229')
|
|
64
|
+
# config.use_open_ai(ENV.fetch('OPENAI_ACCESS_TOKEN'), model_name: 'gpt-4-turbo-2024-04-09')
|
|
65
|
+
end
|
|
66
|
+
run -> {}
|
|
67
|
+
end.call
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
namespace :readme do
|
|
72
|
+
desc 'translate japanese README to english README'
|
|
73
|
+
task :translate do
|
|
74
|
+
require 'langchain'
|
|
75
|
+
require 'openai'
|
|
76
|
+
|
|
77
|
+
readme_ja = File.read('README-ja.md')
|
|
78
|
+
puts '======== Japanese README ========'
|
|
79
|
+
puts readme_ja
|
|
80
|
+
|
|
81
|
+
llm = Langchain::LLM::OpenAI.new(
|
|
82
|
+
api_key: ENV.fetch('OPENAI_ACCESS_TOKEN'),
|
|
83
|
+
default_options: {
|
|
84
|
+
completion_model_name: 'gpt-3.5-turbo-1106',
|
|
85
|
+
chat_completion_model_name: 'gpt-3.5-turbo-1106'
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
readme_en = llm.complete(prompt: <<~PROMPT).completion
|
|
90
|
+
Translate the following markdown document into English, keeping the markdown formatting.
|
|
91
|
+
|
|
92
|
+
======== INPUT ========
|
|
93
|
+
#{readme_ja}
|
|
94
|
+
|
|
95
|
+
======== OUTPUT ========
|
|
96
|
+
PROMPT
|
|
97
|
+
puts '======== Translated English README ========'
|
|
98
|
+
puts readme_en
|
|
99
|
+
File.write('README.md', readme_en)
|
|
55
100
|
end
|
|
56
101
|
end
|
data/Steepfile
CHANGED
|
@@ -5,10 +5,8 @@ D = Steep::Diagnostic
|
|
|
5
5
|
target :lib do
|
|
6
6
|
check 'lib'
|
|
7
7
|
signature 'sig', 'sig_ext'
|
|
8
|
-
ignore(
|
|
9
|
-
'lib/rbs_goose/examples'
|
|
10
|
-
)
|
|
11
8
|
configure_code_diagnostics(D::Ruby.default) do |hash|
|
|
12
9
|
hash[D::Ruby::BlockTypeMismatch] = :information
|
|
10
|
+
hash[D::Ruby::RequiredBlockMissing] = :information
|
|
13
11
|
end
|
|
14
12
|
end
|