11# frozen_string_literal: true
22
3- # Additional dependencies needed for specific gems.
4- # These work around upstream gems that haven't declared dependencies properly.
5- # See docs/appraisal-ruby-version-support.md for future Ruby version support.
6- GEM_DEPENDENCIES = {
7- "openai" => [ "base64" ] # openai uses base64 but doesn't declare it (needed for Ruby 3.4+)
8- }
9-
10- def gem_dependencies_for ( gem_name )
11- GEM_DEPENDENCIES . fetch ( gem_name , [ ] )
12- end
13-
14- # Optional dependencies to test
3+ # Optional dependencies to test.
4+ # Each version entry is a hash with:
5+ # constraint: version constraint for the gem
6+ # deps: hash of additional gem dependencies to install, mapping gem name to
7+ # constraint (or nil for no constraint). Works around upstream gems that
8+ # haven't declared dependencies properly (e.g. base64/cgi removed from stdlib).
159OPTIONAL_GEMS = {
1610 "openai" => {
17- "0.33" => "~> 0.33.0" ,
18- "0.34" => "~> 0.34.0" ,
19- "latest" => ">= 0.34"
11+ "0.33" => { constraint : "~> 0.33.0" , deps : { "base64" => nil , "cgi" => nil } } ,
12+ "0.34" => { constraint : "~> 0.34.0" , deps : { "base64" => nil , "cgi" => nil } } ,
13+ "latest" => { constraint : ">= 0.34" , deps : { "base64" => nil , "cgi" => nil } }
2014 } ,
2115 "anthropic" => {
22- "1.11" => "~> 1.11.0" ,
23- "1.12" => "~> 1.12.0" ,
24- "latest" => ">= 1.11"
16+ "1.11" => { constraint : "~> 1.11.0" , deps : { "base64" => nil , "cgi" => nil } } ,
17+ "1.12" => { constraint : "~> 1.12.0" , deps : { "base64" => nil , "cgi" => nil } } ,
18+ "latest" => { constraint : ">= 1.11" , deps : { "base64" => nil , "cgi" => nil } }
2519 } ,
2620 "ruby-openai" => {
27- "7.0" => "~> 7.0" ,
28- "8.0" => "~> 8.0" ,
29- "latest" => ">= 8.0"
21+ "7.0" => { constraint : "~> 7.0" , deps : { } } ,
22+ "8.0" => { constraint : "~> 8.0" , deps : { } } ,
23+ "latest" => { constraint : ">= 8.0" , deps : { } }
3024 } ,
3125 "ruby_llm" => {
32- "1.8" => "~> 1.8.0" ,
33- "1.9" => "~> 1.9.0" ,
34- "latest" => ">= 1.9"
26+ "1.8" => { constraint : "~> 1.8.0" , deps : { } } ,
27+ "1.9" => { constraint : "~> 1.9.0" , deps : { } } ,
28+ "latest" => { constraint : ">= 1.9" , deps : { } }
3529 }
3630}
3731
3832# Generate appraisals for each optional gem
3933OPTIONAL_GEMS . each do |gem_name , versions |
40- extra_deps = gem_dependencies_for ( gem_name )
41-
42- versions . each do |name , constraint |
34+ versions . each do |name , config |
4335 suffix = ( name == "latest" ) ? "" : "-#{ name . tr ( "." , "-" ) } "
4436 appraise "#{ gem_name } #{ suffix } " do
45- gem gem_name , constraint
46- extra_deps . each { |dep | gem dep }
37+ gem gem_name , config [ : constraint]
38+ config [ :deps ] . each { |dep , version | gem dep , * [ version ] . compact }
4739 end
4840 end
4941
@@ -78,6 +70,7 @@ appraise "contrib" do
7870 gem "anthropic" , ">= 1.11"
7971 gem "ruby_llm" , ">= 1.9"
8072 gem "base64" # needed for openai gem on Ruby 3.4+
73+ gem "cgi" # needed for openai/anthropic gems on Ruby 4.0+
8174end
8275
8376# Server testing - all latest LLM SDKs + server deps for eval dev server
@@ -86,6 +79,7 @@ appraise "server" do
8679 gem "anthropic" , ">= 1.11"
8780 gem "ruby_llm" , ">= 1.9"
8881 gem "base64" # needed for openai gem on Ruby 3.4+
82+ gem "cgi" # needed for openai/anthropic gems on Ruby 4.0+
8983 gem "rack" , "~> 3.0"
9084 gem "rack-test" , "~> 2.1"
9185 gem "rackup" , "~> 2.3"
0 commit comments