rager 0.6.0 → 0.7.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/README.md +26 -27
- data/lib/rager/chat/message.rb +10 -0
- data/lib/rager/chat/message_content.rb +7 -0
- data/lib/rager/chat/message_delta.rb +7 -0
- data/lib/rager/chat/options.rb +6 -7
- data/lib/rager/chat/providers/openai.rb +49 -34
- data/lib/rager/chat/schema.rb +0 -2
- data/lib/rager/config.rb +12 -20
- data/lib/rager/context.rb +302 -186
- data/lib/rager/context_options.rb +23 -0
- data/lib/rager/embed/options.rb +3 -3
- data/lib/rager/embed/providers/openai.rb +7 -3
- data/lib/rager/errors/options_error.rb +1 -1
- data/lib/rager/http/adapters/async_http.rb +0 -2
- data/lib/rager/http/adapters/mock.rb +0 -2
- data/lib/rager/http/adapters/net_http.rb +18 -19
- data/lib/rager/{image_gen → image}/options.rb +4 -4
- data/lib/rager/{image_gen → image}/output_format.rb +1 -1
- data/lib/rager/{image_gen → image}/providers/abstract.rb +4 -4
- data/lib/rager/{image_gen → image}/providers/replicate.rb +14 -10
- data/lib/rager/{logger.rb → log_strategy.rb} +2 -1
- data/lib/rager/{mesh_gen → mesh}/options.rb +3 -3
- data/lib/rager/{mesh_gen → mesh}/providers/abstract.rb +4 -4
- data/lib/rager/{mesh_gen → mesh}/providers/replicate.rb +13 -9
- data/lib/rager/operation.rb +2 -2
- data/lib/rager/options.rb +1 -1
- data/lib/rager/outcome.rb +25 -0
- data/lib/rager/providers.rb +37 -25
- data/lib/rager/rerank/input.rb +20 -0
- data/lib/rager/rerank/options.rb +2 -2
- data/lib/rager/rerank/providers/abstract.rb +2 -3
- data/lib/rager/rerank/providers/cohere.rb +19 -13
- data/lib/rager/rerank/result.rb +20 -0
- data/lib/rager/result.rb +92 -122
- data/lib/rager/search/options.rb +3 -2
- data/lib/rager/search/providers/jina.rb +16 -15
- data/lib/rager/search/result.rb +21 -0
- data/lib/rager/template/input.rb +20 -0
- data/lib/rager/template/options.rb +1 -1
- data/lib/rager/template/providers/abstract.rb +2 -3
- data/lib/rager/template/providers/erb.rb +4 -5
- data/lib/rager/template/providers/mustache.rb +30 -0
- data/lib/rager/types.rb +31 -24
- data/lib/rager/utils/http.rb +73 -15
- data/lib/rager/utils/replicate.rb +28 -6
- data/lib/rager/utils/runtime.rb +21 -0
- data/lib/rager/version.rb +1 -1
- metadata +18 -12
- data/lib/rager/rerank/output.rb +0 -13
- data/lib/rager/search/output.rb +0 -14
data/lib/rager/utils/http.rb
CHANGED
@@ -13,17 +13,13 @@ module Rager
|
|
13
13
|
module Http
|
14
14
|
extend T::Sig
|
15
15
|
|
16
|
-
sig {
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
sig { params(url: String, http_adapter: T.nilable(Rager::Http::Adapters::Abstract)).returns(T.nilable(String)) }
|
26
|
-
def self.download_binary(url, http_adapter: nil)
|
16
|
+
sig {
|
17
|
+
params(
|
18
|
+
url: String,
|
19
|
+
http_adapter: T.nilable(Rager::Http::Adapters::Abstract)
|
20
|
+
).returns(T.nilable(String))
|
21
|
+
}
|
22
|
+
def self.download(url, http_adapter: nil)
|
27
23
|
adapter = http_adapter || Rager.config.http_adapter
|
28
24
|
response = adapter.make_request(
|
29
25
|
Rager::Http::Request.new(url: url, headers: {})
|
@@ -42,15 +38,77 @@ module Rager
|
|
42
38
|
end
|
43
39
|
end
|
44
40
|
|
45
|
-
sig {
|
46
|
-
|
47
|
-
|
41
|
+
sig {
|
42
|
+
params(
|
43
|
+
url: String,
|
44
|
+
path: String,
|
45
|
+
http_adapter: T.nilable(Rager::Http::Adapters::Abstract)
|
46
|
+
).returns(T.nilable(String))
|
47
|
+
}
|
48
|
+
def self.download_to_file(url, path, http_adapter: nil)
|
49
|
+
content = download(url, http_adapter: http_adapter)
|
48
50
|
return nil if content.nil?
|
49
51
|
|
50
52
|
FileUtils.mkdir_p(File.dirname(path))
|
51
|
-
File.write(path, content)
|
53
|
+
File.write(path, content, mode: "wb")
|
52
54
|
path
|
53
55
|
end
|
56
|
+
|
57
|
+
sig do
|
58
|
+
params(
|
59
|
+
endpoint: String,
|
60
|
+
body: String,
|
61
|
+
error: T::Boolean
|
62
|
+
).void
|
63
|
+
end
|
64
|
+
def self.log_remote(endpoint, body, error = false)
|
65
|
+
logger = Rager.config.logger
|
66
|
+
|
67
|
+
case Rager.config.log_strategy
|
68
|
+
when Rager::LogStrategy::Stdout
|
69
|
+
error ? logger.error(body) : logger.info(body)
|
70
|
+
when Rager::LogStrategy::Remote
|
71
|
+
http_adapter = Rager.config.http_adapter
|
72
|
+
url = Rager.config.url
|
73
|
+
api_key = Rager.config.api_key
|
74
|
+
|
75
|
+
unless url && api_key
|
76
|
+
raise Rager::Errors::CredentialsError.new("Rager Cloud", details: "Missing url or api_key for remote logging")
|
77
|
+
end
|
78
|
+
|
79
|
+
headers = {
|
80
|
+
"Content-Type" => "application/json",
|
81
|
+
"Authorization" => "Bearer #{api_key}"
|
82
|
+
}
|
83
|
+
|
84
|
+
request = Rager::Http::Request.new(
|
85
|
+
url: "#{url}/#{endpoint}",
|
86
|
+
verb: Rager::Http::Verb::Post,
|
87
|
+
headers: headers,
|
88
|
+
body: body
|
89
|
+
)
|
90
|
+
|
91
|
+
begin
|
92
|
+
response = http_adapter.make_request(request)
|
93
|
+
|
94
|
+
unless response.success?
|
95
|
+
raise Rager::Errors::HttpError.new(
|
96
|
+
http_adapter,
|
97
|
+
request.url,
|
98
|
+
response.status,
|
99
|
+
body: T.cast(response.body, String),
|
100
|
+
details: "HTTP request failed during remote logging"
|
101
|
+
)
|
102
|
+
end
|
103
|
+
rescue Rager::Error => e
|
104
|
+
if Rager.config.log_raise
|
105
|
+
raise e
|
106
|
+
else
|
107
|
+
Rager.config.logger.error(e.message)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
54
112
|
end
|
55
113
|
end
|
56
114
|
end
|
@@ -10,20 +10,33 @@ module Rager
|
|
10
10
|
module Replicate
|
11
11
|
extend T::Sig
|
12
12
|
|
13
|
-
sig {
|
13
|
+
sig {
|
14
|
+
params(
|
15
|
+
prediction_url: String,
|
16
|
+
key: T.nilable(String),
|
17
|
+
http_adapter: T.nilable(Rager::Http::Adapters::Abstract)
|
18
|
+
).returns(T.nilable(String))
|
19
|
+
}
|
14
20
|
def self.download_prediction(prediction_url, key = nil, http_adapter: nil)
|
15
21
|
download_url = get_download_url(prediction_url, key, http_adapter: http_adapter)
|
16
22
|
return nil if download_url.nil?
|
17
23
|
|
18
|
-
Rager::Utils::Http.
|
24
|
+
Rager::Utils::Http.download(download_url)
|
19
25
|
end
|
20
26
|
|
21
|
-
sig {
|
27
|
+
sig {
|
28
|
+
params(
|
29
|
+
prediction_url: String,
|
30
|
+
key: T.nilable(String),
|
31
|
+
path: String,
|
32
|
+
http_adapter: T.nilable(Rager::Http::Adapters::Abstract)
|
33
|
+
).returns(T.nilable(String))
|
34
|
+
}
|
22
35
|
def self.download_prediction_to_file(prediction_url, key = nil, path:, http_adapter: nil)
|
23
36
|
download_url = get_download_url(prediction_url, key, http_adapter: http_adapter)
|
24
37
|
return nil if download_url.nil?
|
25
38
|
|
26
|
-
Rager::Utils::Http.
|
39
|
+
Rager::Utils::Http.download_to_file(download_url, path)
|
27
40
|
end
|
28
41
|
|
29
42
|
sig { params(prediction_url: String, key: T.nilable(String), http_adapter: T.nilable(Rager::Http::Adapters::Abstract)).returns(T.nilable(String)) }
|
@@ -70,7 +83,16 @@ module Rager
|
|
70
83
|
raise Rager::Errors::ParseError.new("Failed to parse prediction response", details: e.message)
|
71
84
|
end
|
72
85
|
|
73
|
-
sig {
|
86
|
+
sig {
|
87
|
+
params(
|
88
|
+
prediction_url: String,
|
89
|
+
key: T.nilable(String),
|
90
|
+
path: T.nilable(String),
|
91
|
+
max_attempts: Integer,
|
92
|
+
sleep_interval: Integer,
|
93
|
+
http_adapter: T.nilable(Rager::Http::Adapters::Abstract)
|
94
|
+
).returns(T.nilable(String))
|
95
|
+
}
|
74
96
|
def self.poll_prediction(prediction_url, key: nil, path: nil, max_attempts: 30, sleep_interval: 10, http_adapter: nil)
|
75
97
|
max_attempts.times do
|
76
98
|
result = if path
|
@@ -79,7 +101,7 @@ module Rager
|
|
79
101
|
download_prediction(prediction_url, key, http_adapter: http_adapter)
|
80
102
|
end
|
81
103
|
return result unless result.nil?
|
82
|
-
Rager::Utils::
|
104
|
+
Rager::Utils::Runtime.sleep(sleep_interval)
|
83
105
|
end
|
84
106
|
|
85
107
|
raise Rager::Errors::TimeoutError.new(
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
module Rager
|
7
|
+
module Utils
|
8
|
+
module Runtime
|
9
|
+
extend T::Sig
|
10
|
+
|
11
|
+
sig { params(duration: Numeric).void }
|
12
|
+
def self.sleep(duration)
|
13
|
+
if defined?(Async::Task) && (task = Async::Task.current?)
|
14
|
+
task.sleep(duration)
|
15
|
+
else
|
16
|
+
Kernel.sleep(duration)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/rager/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- mvkvc
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- lib/rager/chat/schema.rb
|
73
73
|
- lib/rager/config.rb
|
74
74
|
- lib/rager/context.rb
|
75
|
+
- lib/rager/context_options.rb
|
75
76
|
- lib/rager/embed/options.rb
|
76
77
|
- lib/rager/embed/providers/abstract.rb
|
77
78
|
- lib/rager/embed/providers/openai.rb
|
@@ -90,32 +91,37 @@ files:
|
|
90
91
|
- lib/rager/http/request.rb
|
91
92
|
- lib/rager/http/response.rb
|
92
93
|
- lib/rager/http/verb.rb
|
93
|
-
- lib/rager/
|
94
|
-
- lib/rager/
|
95
|
-
- lib/rager/
|
96
|
-
- lib/rager/
|
97
|
-
- lib/rager/
|
98
|
-
- lib/rager/
|
99
|
-
- lib/rager/
|
100
|
-
- lib/rager/
|
94
|
+
- lib/rager/image/options.rb
|
95
|
+
- lib/rager/image/output_format.rb
|
96
|
+
- lib/rager/image/providers/abstract.rb
|
97
|
+
- lib/rager/image/providers/replicate.rb
|
98
|
+
- lib/rager/log_strategy.rb
|
99
|
+
- lib/rager/mesh/options.rb
|
100
|
+
- lib/rager/mesh/providers/abstract.rb
|
101
|
+
- lib/rager/mesh/providers/replicate.rb
|
101
102
|
- lib/rager/operation.rb
|
102
103
|
- lib/rager/options.rb
|
104
|
+
- lib/rager/outcome.rb
|
103
105
|
- lib/rager/providers.rb
|
106
|
+
- lib/rager/rerank/input.rb
|
104
107
|
- lib/rager/rerank/options.rb
|
105
|
-
- lib/rager/rerank/output.rb
|
106
108
|
- lib/rager/rerank/providers/abstract.rb
|
107
109
|
- lib/rager/rerank/providers/cohere.rb
|
110
|
+
- lib/rager/rerank/result.rb
|
108
111
|
- lib/rager/result.rb
|
109
112
|
- lib/rager/search/options.rb
|
110
|
-
- lib/rager/search/output.rb
|
111
113
|
- lib/rager/search/providers/abstract.rb
|
112
114
|
- lib/rager/search/providers/jina.rb
|
115
|
+
- lib/rager/search/result.rb
|
116
|
+
- lib/rager/template/input.rb
|
113
117
|
- lib/rager/template/options.rb
|
114
118
|
- lib/rager/template/providers/abstract.rb
|
115
119
|
- lib/rager/template/providers/erb.rb
|
120
|
+
- lib/rager/template/providers/mustache.rb
|
116
121
|
- lib/rager/types.rb
|
117
122
|
- lib/rager/utils/http.rb
|
118
123
|
- lib/rager/utils/replicate.rb
|
124
|
+
- lib/rager/utils/runtime.rb
|
119
125
|
- lib/rager/version.rb
|
120
126
|
homepage: https://github.com/mvkvc/rager_rb
|
121
127
|
licenses:
|
@@ -135,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
141
|
- !ruby/object:Gem::Version
|
136
142
|
version: '0'
|
137
143
|
requirements: []
|
138
|
-
rubygems_version: 3.6.
|
144
|
+
rubygems_version: 3.6.9
|
139
145
|
specification_version: 4
|
140
146
|
summary: Build continuously improving generative workflows.
|
141
147
|
test_files: []
|
data/lib/rager/rerank/output.rb
DELETED
data/lib/rager/search/output.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Search
|
8
|
-
class Output < T::Struct
|
9
|
-
const :urls, T::Array[String]
|
10
|
-
const :titles, T::Array[String]
|
11
|
-
const :contents, T::Array[String]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|