rager 0.5.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 +49 -7
- 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 +12 -9
- data/lib/rager/chat/providers/openai.rb +64 -48
- data/lib/rager/chat/schema.rb +3 -4
- data/lib/rager/config.rb +16 -20
- data/lib/rager/context.rb +326 -97
- data/lib/rager/context_options.rb +23 -0
- data/lib/rager/embed/options.rb +4 -3
- data/lib/rager/embed/providers/openai.rb +14 -6
- data/lib/rager/errors/credentials_error.rb +24 -0
- data/lib/rager/errors/dependency_error.rb +23 -0
- data/lib/rager/errors/http_error.rb +12 -5
- data/lib/rager/errors/options_error.rb +10 -5
- data/lib/rager/errors/parse_error.rb +9 -5
- data/lib/rager/errors/template_error.rb +10 -4
- data/lib/rager/errors/timeout_error.rb +25 -0
- data/lib/rager/http/adapters/async_http.rb +66 -14
- data/lib/rager/http/adapters/mock.rb +41 -45
- data/lib/rager/http/adapters/net_http.rb +144 -0
- data/lib/rager/http/request.rb +2 -0
- data/lib/rager/{image_gen → image}/options.rb +5 -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 +19 -14
- data/lib/rager/{logger.rb → log_strategy.rb} +2 -1
- data/lib/rager/{mesh_gen → mesh}/options.rb +4 -3
- data/lib/rager/{mesh_gen → mesh}/providers/abstract.rb +4 -4
- data/lib/rager/{mesh_gen → mesh}/providers/replicate.rb +20 -14
- 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 +61 -0
- data/lib/rager/rerank/{query.rb → input.rb} +8 -1
- data/lib/rager/rerank/options.rb +3 -2
- data/lib/rager/rerank/providers/abstract.rb +2 -2
- data/lib/rager/rerank/providers/cohere.rb +24 -15
- data/lib/rager/rerank/result.rb +8 -1
- data/lib/rager/result.rb +98 -108
- data/lib/rager/search/options.rb +4 -1
- data/lib/rager/search/providers/jina.rb +68 -0
- data/lib/rager/search/result.rb +9 -2
- data/lib/rager/template/input.rb +9 -0
- data/lib/rager/template/options.rb +1 -1
- data/lib/rager/template/providers/erb.rb +3 -3
- data/lib/rager/template/providers/mustache.rb +30 -0
- data/lib/rager/types.rb +28 -17
- data/lib/rager/utils/http.rb +92 -27
- data/lib/rager/utils/replicate.rb +40 -21
- data/lib/rager/utils/runtime.rb +21 -0
- data/lib/rager/version.rb +1 -1
- metadata +22 -36
- data/lib/rager/chat.rb +0 -35
- data/lib/rager/embed.rb +0 -35
- data/lib/rager/errors/missing_credentials_error.rb +0 -19
- data/lib/rager/errors/unknown_provider_error.rb +0 -17
- data/lib/rager/image_gen.rb +0 -31
- data/lib/rager/mesh_gen.rb +0 -31
- data/lib/rager/rerank.rb +0 -35
- data/lib/rager/search/providers/brave.rb +0 -59
- data/lib/rager/search.rb +0 -35
- data/lib/rager/template.rb +0 -35
data/lib/rager/chat.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Chat
|
8
|
-
extend T::Sig
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
messages: Rager::Types::ChatInput,
|
13
|
-
options: Rager::Chat::Options
|
14
|
-
).returns(Rager::Types::ChatOutput)
|
15
|
-
end
|
16
|
-
def self.chat(messages, options = Rager::Chat::Options.new)
|
17
|
-
provider = get_provider(options.provider)
|
18
|
-
provider.chat(messages, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
sig do
|
22
|
-
params(
|
23
|
-
key: String
|
24
|
-
).returns(Rager::Chat::Providers::Abstract)
|
25
|
-
end
|
26
|
-
def self.get_provider(key)
|
27
|
-
case key.downcase
|
28
|
-
when "openai"
|
29
|
-
Rager::Chat::Providers::Openai.new
|
30
|
-
else
|
31
|
-
raise Rager::Errors::UnknownProviderError.new(Rager::Operation::Chat, key)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/rager/embed.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Embed
|
8
|
-
extend T::Sig
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
text: Rager::Types::EmbedInput,
|
13
|
-
options: Rager::Embed::Options
|
14
|
-
).returns(Rager::Types::EmbedOutput)
|
15
|
-
end
|
16
|
-
def self.embed(text, options = Rager::Embed::Options.new)
|
17
|
-
provider = get_provider(options.provider)
|
18
|
-
provider.embed(text, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
sig do
|
22
|
-
params(
|
23
|
-
key: String
|
24
|
-
).returns(Rager::Embed::Providers::Abstract)
|
25
|
-
end
|
26
|
-
def self.get_provider(key)
|
27
|
-
case key.downcase
|
28
|
-
when "openai"
|
29
|
-
Rager::Embed::Providers::Openai.new
|
30
|
-
else
|
31
|
-
raise Rager::Errors::UnknownProviderError.new(Rager::Operation::Embed, key)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Errors
|
8
|
-
class MissingCredentialsError < Rager::Error
|
9
|
-
extend T::Sig
|
10
|
-
|
11
|
-
sig { params(provider_name: String, env_var: T.nilable(String)).void }
|
12
|
-
def initialize(provider_name, env_var = nil)
|
13
|
-
message = "Missing credentials for provider #{provider_name}"
|
14
|
-
message += " -- attempted lookup with #{env_var}" if env_var
|
15
|
-
super(message)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Errors
|
8
|
-
class UnknownProviderError < Rager::Error
|
9
|
-
extend T::Sig
|
10
|
-
|
11
|
-
sig { params(operation: Rager::Operation, key: String).void }
|
12
|
-
def initialize(operation, key)
|
13
|
-
super("Unknown provider #{key} for operation #{operation.serialize}")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/lib/rager/image_gen.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module ImageGen
|
8
|
-
extend T::Sig
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
prompt: Rager::Types::ImageGenInput,
|
13
|
-
options: Rager::ImageGen::Options
|
14
|
-
).returns(Rager::Types::ImageGenOutput)
|
15
|
-
end
|
16
|
-
def self.image_gen(prompt, options = Rager::ImageGen::Options.new)
|
17
|
-
provider = get_provider(options.provider)
|
18
|
-
provider.image_gen(prompt, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
sig { params(key: String).returns(Rager::ImageGen::Providers::Abstract) }
|
22
|
-
def self.get_provider(key)
|
23
|
-
case key.downcase
|
24
|
-
when "replicate"
|
25
|
-
Rager::ImageGen::Providers::Replicate.new
|
26
|
-
else
|
27
|
-
raise Rager::Errors::UnknownProviderError.new(Rager::Operation::ImageGen, key)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/rager/mesh_gen.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module MeshGen
|
8
|
-
extend T::Sig
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
image_url: Rager::Types::MeshGenInput,
|
13
|
-
options: Rager::MeshGen::Options
|
14
|
-
).returns(Rager::Types::MeshGenOutput)
|
15
|
-
end
|
16
|
-
def self.mesh_gen(image_url, options = Rager::MeshGen::Options.new)
|
17
|
-
provider = get_provider(options.provider)
|
18
|
-
provider.mesh_gen(image_url, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
sig { params(key: String).returns(Rager::MeshGen::Providers::Abstract) }
|
22
|
-
def self.get_provider(key)
|
23
|
-
case key.downcase
|
24
|
-
when "replicate"
|
25
|
-
Rager::MeshGen::Providers::Replicate.new
|
26
|
-
else
|
27
|
-
raise Rager::Errors::UnknownProviderError.new(Rager::Operation::MeshGen, key)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/rager/rerank.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Rerank
|
8
|
-
extend T::Sig
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
query: Rager::Types::RerankInput,
|
13
|
-
options: Rager::Rerank::Options
|
14
|
-
).returns(Rager::Types::RerankOutput)
|
15
|
-
end
|
16
|
-
def self.rerank(query, options = Rager::Rerank::Options.new)
|
17
|
-
provider = get_provider(options.provider)
|
18
|
-
provider.rerank(query, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
sig do
|
22
|
-
params(
|
23
|
-
key: String
|
24
|
-
).returns(Rager::Rerank::Providers::Abstract)
|
25
|
-
end
|
26
|
-
def self.get_provider(key)
|
27
|
-
case key.downcase
|
28
|
-
when "cohere"
|
29
|
-
Rager::Rerank::Providers::Cohere.new
|
30
|
-
else
|
31
|
-
raise Rager::Errors::UnknownProviderError.new(Rager::Operation::Rerank, key)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "json"
|
5
|
-
require "uri"
|
6
|
-
require "sorbet-runtime"
|
7
|
-
|
8
|
-
module Rager
|
9
|
-
module Search
|
10
|
-
module Providers
|
11
|
-
class Brave < Rager::Search::Providers::Abstract
|
12
|
-
extend T::Sig
|
13
|
-
|
14
|
-
sig do
|
15
|
-
override.params(
|
16
|
-
query: String,
|
17
|
-
options: Rager::Search::Options
|
18
|
-
).returns(Rager::Types::SearchOutput)
|
19
|
-
end
|
20
|
-
def search(query, options)
|
21
|
-
api_key = options.api_key || ENV["BRAVE_API_KEY"]
|
22
|
-
raise Rager::Errors::MissingCredentialsError.new("Brave", "BRAVE_API_KEY") if api_key.nil?
|
23
|
-
|
24
|
-
params = {"q" => query}.tap do |p|
|
25
|
-
p["count"] = options.n.to_s if options.n
|
26
|
-
end
|
27
|
-
|
28
|
-
request = Rager::Http::Request.new(
|
29
|
-
verb: Rager::Http::Verb::Get,
|
30
|
-
url: "https://api.search.brave.com/res/v1/web/search?#{URI.encode_www_form(params)}",
|
31
|
-
headers: {
|
32
|
-
"Accept" => "application/json",
|
33
|
-
"Accept-Encoding" => "gzip",
|
34
|
-
"x-subscription-token" => api_key
|
35
|
-
}
|
36
|
-
)
|
37
|
-
|
38
|
-
response = Rager.config.http_adapter.make_request(request)
|
39
|
-
response_body = T.cast(T.must(response.body), String)
|
40
|
-
|
41
|
-
raise Rager::Errors::HttpError.new(Rager.config.http_adapter, response.status, response_body) if response.status != 200
|
42
|
-
|
43
|
-
parsed_response = JSON.parse(response_body)
|
44
|
-
web_results = parsed_response.dig("web", "results") || []
|
45
|
-
|
46
|
-
web_results.filter_map do |result|
|
47
|
-
next unless result["title"] && result["url"] && result["description"]
|
48
|
-
|
49
|
-
Rager::Search::Result.new(
|
50
|
-
title: result["title"],
|
51
|
-
url: result["url"],
|
52
|
-
description: result["description"]
|
53
|
-
)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
data/lib/rager/search.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Search
|
8
|
-
extend T::Sig
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
query: Rager::Types::SearchInput,
|
13
|
-
options: Rager::Search::Options
|
14
|
-
).returns(Rager::Types::SearchOutput)
|
15
|
-
end
|
16
|
-
def self.search(query, options = Rager::Search::Options.new)
|
17
|
-
provider = get_provider(options.provider)
|
18
|
-
provider.search(query, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
sig do
|
22
|
-
params(
|
23
|
-
key: String
|
24
|
-
).returns(Rager::Search::Providers::Abstract)
|
25
|
-
end
|
26
|
-
def self.get_provider(key)
|
27
|
-
case key.downcase
|
28
|
-
when "brave"
|
29
|
-
Rager::Search::Providers::Brave.new
|
30
|
-
else
|
31
|
-
raise Rager::Errors::UnknownProviderError.new(Rager::Operation::Search, key)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/rager/template.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# typed: strict
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "sorbet-runtime"
|
5
|
-
|
6
|
-
module Rager
|
7
|
-
module Template
|
8
|
-
extend T::Sig
|
9
|
-
|
10
|
-
sig do
|
11
|
-
params(
|
12
|
-
input: Rager::Types::TemplateInput,
|
13
|
-
options: Rager::Template::Options
|
14
|
-
).returns(Rager::Types::TemplateOutput)
|
15
|
-
end
|
16
|
-
def self.template(input, options = Rager::Template::Options.new)
|
17
|
-
provider = get_provider(options.provider)
|
18
|
-
provider.template(input, options)
|
19
|
-
end
|
20
|
-
|
21
|
-
sig do
|
22
|
-
params(
|
23
|
-
key: String
|
24
|
-
).returns(Rager::Template::Providers::Abstract)
|
25
|
-
end
|
26
|
-
def self.get_provider(key)
|
27
|
-
case key.downcase
|
28
|
-
when "erb"
|
29
|
-
Rager::Template::Providers::Erb.new
|
30
|
-
else
|
31
|
-
raise Rager::Errors::UnknownProviderError.new(Rager::Operation::Template, key)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|