openrouter_client 0.1.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.
@@ -0,0 +1,152 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module OpenRouter
5
+ class Completion
6
+ COMPLETIONS_PATH = T.let(T.unsafe(nil), String)
7
+
8
+ module Role
9
+ SYSTEM = T.let(T.unsafe(nil), String)
10
+ USER = T.let(T.unsafe(nil), String)
11
+ ASSISTANT = T.let(T.unsafe(nil), String)
12
+ TOOL = T.let(T.unsafe(nil), String)
13
+ end
14
+
15
+ module FinishReason
16
+ STOP = T.let(T.unsafe(nil), String)
17
+ LENGTH = T.let(T.unsafe(nil), String)
18
+ TOOL_CALLS = T.let(T.unsafe(nil), String)
19
+ CONTENT_FILTER = T.let(T.unsafe(nil), String)
20
+ ERROR = T.let(T.unsafe(nil), String)
21
+ end
22
+
23
+ sig { returns(String) }
24
+ def id; end
25
+
26
+ sig { returns(String) }
27
+ def model; end
28
+
29
+ sig { returns(Integer) }
30
+ def created; end
31
+
32
+ sig { returns(String) }
33
+ def object; end
34
+
35
+ sig { returns(T::Array[T::Hash[T.untyped, T.untyped]]) }
36
+ def choices; end
37
+
38
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
39
+ def usage; end
40
+
41
+ sig { returns(T.nilable(String)) }
42
+ def system_fingerprint; end
43
+
44
+ sig { params(attributes: T.untyped, client: OpenRouter::Client).void }
45
+ def initialize(attributes, client: OpenRouter.client); end
46
+
47
+ class << self
48
+ sig do
49
+ params(
50
+ messages: T::Array[T::Hash[T.untyped, T.untyped]],
51
+ model: T.nilable(String),
52
+ temperature: T.nilable(Float),
53
+ max_tokens: T.nilable(Integer),
54
+ top_p: T.nilable(Float),
55
+ top_k: T.nilable(Integer),
56
+ frequency_penalty: T.nilable(Float),
57
+ presence_penalty: T.nilable(Float),
58
+ repetition_penalty: T.nilable(Float),
59
+ stop: T.nilable(T.any(String, T::Array[String])),
60
+ seed: T.nilable(Integer),
61
+ tools: T.nilable(T::Array[T::Hash[T.untyped, T.untyped]]),
62
+ tool_choice: T.nilable(T.any(String, T::Hash[T.untyped, T.untyped])),
63
+ response_format: T.nilable(T::Hash[T.untyped, T.untyped]),
64
+ transforms: T.nilable(T::Array[String]),
65
+ models: T.nilable(T::Array[String]),
66
+ route: T.nilable(String),
67
+ provider: T.nilable(T::Hash[T.untyped, T.untyped]),
68
+ client: OpenRouter::Client,
69
+ options: T.untyped
70
+ ).returns(OpenRouter::Completion)
71
+ end
72
+ def create!(messages:, model: nil, temperature: nil, max_tokens: nil, top_p: nil,
73
+ top_k: nil, frequency_penalty: nil, presence_penalty: nil, repetition_penalty: nil,
74
+ stop: nil, seed: nil, tools: nil, tool_choice: nil, response_format: nil,
75
+ transforms: nil, models: nil, route: nil, provider: nil, client: OpenRouter.client, **options); end
76
+
77
+ sig do
78
+ params(
79
+ messages: T::Array[T::Hash[T.untyped, T.untyped]],
80
+ model: T.nilable(String),
81
+ temperature: T.nilable(Float),
82
+ max_tokens: T.nilable(Integer),
83
+ top_p: T.nilable(Float),
84
+ top_k: T.nilable(Integer),
85
+ frequency_penalty: T.nilable(Float),
86
+ presence_penalty: T.nilable(Float),
87
+ repetition_penalty: T.nilable(Float),
88
+ stop: T.nilable(T.any(String, T::Array[String])),
89
+ seed: T.nilable(Integer),
90
+ tools: T.nilable(T::Array[T::Hash[T.untyped, T.untyped]]),
91
+ tool_choice: T.nilable(T.any(String, T::Hash[T.untyped, T.untyped])),
92
+ response_format: T.nilable(T::Hash[T.untyped, T.untyped]),
93
+ transforms: T.nilable(T::Array[String]),
94
+ models: T.nilable(T::Array[String]),
95
+ route: T.nilable(String),
96
+ provider: T.nilable(T::Hash[T.untyped, T.untyped]),
97
+ client: OpenRouter::Client,
98
+ options: T.untyped,
99
+ block: T.nilable(T.proc.params(arg0: T::Hash[T.untyped, T.untyped]).void)
100
+ ).returns(OpenRouter::Completion)
101
+ end
102
+ def stream!(messages:, model: nil, temperature: nil, max_tokens: nil, top_p: nil,
103
+ top_k: nil, frequency_penalty: nil, presence_penalty: nil, repetition_penalty: nil,
104
+ stop: nil, seed: nil, tools: nil, tool_choice: nil, response_format: nil,
105
+ transforms: nil, models: nil, route: nil, provider: nil, client: OpenRouter.client, **options, &block); end
106
+ end
107
+
108
+ sig { returns(T.nilable(String)) }
109
+ def content; end
110
+
111
+ sig { returns(T.nilable(String)) }
112
+ def role; end
113
+
114
+ sig { returns(T.nilable(String)) }
115
+ def finish_reason; end
116
+
117
+ sig { returns(T.nilable(T::Array[T::Hash[T.untyped, T.untyped]])) }
118
+ def tool_calls; end
119
+
120
+ sig { returns(T.nilable(T::Array[T::Hash[T.untyped, T.untyped]])) }
121
+ def images; end
122
+
123
+ sig { returns(T::Boolean) }
124
+ def images?; end
125
+
126
+ sig { returns(T.nilable(Integer)) }
127
+ def prompt_tokens; end
128
+
129
+ sig { returns(T.nilable(Integer)) }
130
+ def completion_tokens; end
131
+
132
+ sig { returns(T.nilable(Integer)) }
133
+ def total_tokens; end
134
+
135
+ sig { returns(T::Boolean) }
136
+ def stopped?; end
137
+
138
+ sig { returns(T::Boolean) }
139
+ def truncated?; end
140
+
141
+ sig { returns(T::Boolean) }
142
+ def tool_calls?; end
143
+
144
+ sig { returns(T::Boolean) }
145
+ def has_tool_calls?; end
146
+
147
+ private
148
+
149
+ sig { params(attributes: T.untyped).void }
150
+ def reset_attributes(attributes); end
151
+ end
152
+ end
@@ -0,0 +1,42 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module OpenRouter
5
+ class Credit
6
+ CREDITS_PATH = T.let(T.unsafe(nil), String)
7
+
8
+ sig { returns(T.nilable(Float)) }
9
+ def total_credits; end
10
+
11
+ sig { returns(Float) }
12
+ def total_usage; end
13
+
14
+ sig { returns(Float) }
15
+ def remaining; end
16
+
17
+ sig { params(attributes: T.untyped, client: OpenRouter::Client).void }
18
+ def initialize(attributes, client: OpenRouter.client); end
19
+
20
+ class << self
21
+ sig { params(client: OpenRouter::Client).returns(OpenRouter::Credit) }
22
+ def fetch(client: OpenRouter.client); end
23
+
24
+ sig { params(client: OpenRouter::Client).returns(Float) }
25
+ def remaining(client: OpenRouter.client); end
26
+ end
27
+
28
+ sig { returns(T::Boolean) }
29
+ def low?; end
30
+
31
+ sig { returns(T::Boolean) }
32
+ def exhausted?; end
33
+
34
+ sig { returns(T.nilable(Float)) }
35
+ def usage_percentage; end
36
+
37
+ private
38
+
39
+ sig { params(attributes: T.untyped).void }
40
+ def reset_attributes(attributes); end
41
+ end
42
+ end
@@ -0,0 +1,69 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module OpenRouter
5
+ class Generation
6
+ GENERATION_PATH = T.let(T.unsafe(nil), String)
7
+
8
+ sig { returns(String) }
9
+ def id; end
10
+
11
+ sig { returns(T.nilable(String)) }
12
+ def model; end
13
+
14
+ sig { returns(T.nilable(Integer)) }
15
+ def total_time; end
16
+
17
+ sig { returns(T.nilable(Integer)) }
18
+ def time_to_first_token; end
19
+
20
+ sig { returns(T.nilable(Integer)) }
21
+ def native_prompt_tokens; end
22
+
23
+ sig { returns(T.nilable(Integer)) }
24
+ def native_completion_tokens; end
25
+
26
+ sig { returns(T.nilable(Integer)) }
27
+ def native_total_tokens; end
28
+
29
+ sig { returns(T.nilable(Float)) }
30
+ def total_cost; end
31
+
32
+ sig { returns(T.nilable(String)) }
33
+ def provider; end
34
+
35
+ sig { returns(T.nilable(String)) }
36
+ def status; end
37
+
38
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
39
+ def raw; end
40
+
41
+ sig { params(attributes: T.untyped, client: OpenRouter::Client).void }
42
+ def initialize(attributes, client: OpenRouter.client); end
43
+
44
+ class << self
45
+ sig { params(id: String, client: OpenRouter::Client).returns(T.nilable(OpenRouter::Generation)) }
46
+ def find_by(id:, client: OpenRouter.client); end
47
+ end
48
+
49
+ sig { returns(T.nilable(Float)) }
50
+ def prompt_cost; end
51
+
52
+ sig { returns(T.nilable(Float)) }
53
+ def completion_cost; end
54
+
55
+ sig { returns(T.nilable(Float)) }
56
+ def tokens_per_second; end
57
+
58
+ sig { returns(T::Boolean) }
59
+ def complete?; end
60
+
61
+ sig { returns(T::Boolean) }
62
+ def failed?; end
63
+
64
+ private
65
+
66
+ sig { params(attributes: T.untyped).void }
67
+ def reset_attributes(attributes); end
68
+ end
69
+ end
@@ -0,0 +1,92 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module OpenRouter
5
+ class Model
6
+ MODELS_PATH = T.let(T.unsafe(nil), String)
7
+
8
+ sig { returns(String) }
9
+ def id; end
10
+
11
+ sig { returns(T.nilable(String)) }
12
+ def name; end
13
+
14
+ sig { returns(T.nilable(String)) }
15
+ def description; end
16
+
17
+ sig { returns(T.nilable(Integer)) }
18
+ def context_length; end
19
+
20
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
21
+ def pricing; end
22
+
23
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
24
+ def top_provider; end
25
+
26
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
27
+ def architecture; end
28
+
29
+ sig { returns(T.nilable(T::Array[String])) }
30
+ def supported_parameters; end
31
+
32
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
33
+ def per_request_limits; end
34
+
35
+ sig { returns(T.nilable(String)) }
36
+ def created; end
37
+
38
+ sig { params(attributes: T.untyped, client: OpenRouter::Client).void }
39
+ def initialize(attributes, client: OpenRouter.client); end
40
+
41
+ sig { returns(T.nilable(Float)) }
42
+ def input_price; end
43
+
44
+ sig { returns(T.nilable(Float)) }
45
+ def output_price; end
46
+
47
+ sig { returns(T.nilable(Float)) }
48
+ def image_price; end
49
+
50
+ sig { returns(T::Boolean) }
51
+ def free?; end
52
+
53
+ sig { params(messages: T::Array[T::Hash[T.untyped, T.untyped]], options: T.untyped).returns(OpenRouter::Completion) }
54
+ def complete(messages:, **options); end
55
+
56
+ class << self
57
+ sig { params(id: String, client: OpenRouter::Client).returns(OpenRouter::Model) }
58
+ def find(id, client: OpenRouter.client); end
59
+
60
+ sig { params(id: String, client: OpenRouter::Client).returns(T.nilable(OpenRouter::Model)) }
61
+ def find_by(id:, client: OpenRouter.client); end
62
+
63
+ sig { params(id: String, client: OpenRouter::Client).returns(OpenRouter::Model) }
64
+ def find_by!(id:, client: OpenRouter.client); end
65
+
66
+ sig do
67
+ params(
68
+ client: OpenRouter::Client,
69
+ block: T.proc.params(arg0: OpenRouter::Model).void
70
+ ).void
71
+ end
72
+ def each(client: OpenRouter.client, &block); end
73
+
74
+ sig { params(client: OpenRouter::Client).returns(T::Array[OpenRouter::Model]) }
75
+ def all(client: OpenRouter.client); end
76
+
77
+ sig { params(query: String, client: OpenRouter::Client).returns(T::Array[OpenRouter::Model]) }
78
+ def search(query:, client: OpenRouter.client); end
79
+
80
+ sig { params(provider: String, client: OpenRouter::Client).returns(T::Array[OpenRouter::Model]) }
81
+ def by_provider(provider:, client: OpenRouter.client); end
82
+
83
+ sig { params(client: OpenRouter::Client).returns(T::Array[OpenRouter::Model]) }
84
+ def free(client: OpenRouter.client); end
85
+ end
86
+
87
+ private
88
+
89
+ sig { params(attributes: T.untyped).void }
90
+ def reset_attributes(attributes); end
91
+ end
92
+ end
@@ -0,0 +1,77 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module OpenRouter
5
+ class Error < StandardError; end
6
+ class UnauthorizedError < Error; end
7
+ class NotFoundError < Error; end
8
+ class ServerError < Error; end
9
+ class ConfigurationError < Error; end
10
+ class ForbiddenError < Error; end
11
+ class RateLimitError < Error; end
12
+ class BadRequestError < Error; end
13
+ class PaymentRequiredError < Error; end
14
+
15
+ class Configuration
16
+ DEFAULT_API_BASE = T.let(T.unsafe(nil), String)
17
+ DEFAULT_REQUEST_TIMEOUT = T.let(T.unsafe(nil), Integer)
18
+
19
+ # api_key
20
+ sig { returns(T.nilable(String)) }
21
+ def api_key; end
22
+
23
+ sig { params(value: T.nilable(String)).returns(T.nilable(String)) }
24
+ def api_key=(value); end
25
+
26
+ # api_base
27
+ sig { returns(String) }
28
+ def api_base; end
29
+
30
+ sig { params(value: String).returns(String) }
31
+ def api_base=(value); end
32
+
33
+ # request_timeout
34
+ sig { returns(Integer) }
35
+ def request_timeout; end
36
+
37
+ sig { params(value: Integer).returns(Integer) }
38
+ def request_timeout=(value); end
39
+
40
+ # site_url
41
+ sig { returns(T.nilable(String)) }
42
+ def site_url; end
43
+
44
+ sig { params(value: T.nilable(String)).returns(T.nilable(String)) }
45
+ def site_url=(value); end
46
+
47
+ # site_name
48
+ sig { returns(T.nilable(String)) }
49
+ def site_name; end
50
+
51
+ sig { params(value: T.nilable(String)).returns(T.nilable(String)) }
52
+ def site_name=(value); end
53
+
54
+ sig { void }
55
+ def initialize; end
56
+ end
57
+
58
+ class << self
59
+ sig { returns(OpenRouter::Configuration) }
60
+ def configuration; end
61
+
62
+ sig { params(value: OpenRouter::Configuration).returns(OpenRouter::Configuration) }
63
+ def configuration=(value); end
64
+
65
+ sig { params(block: T.proc.params(arg0: OpenRouter::Configuration).void).void }
66
+ def configure(&block); end
67
+
68
+ sig { returns(OpenRouter::Client) }
69
+ def client; end
70
+
71
+ sig { void }
72
+ def reset_client!; end
73
+
74
+ sig { params(object: T.untyped).returns(T.untyped) }
75
+ def deep_symbolize_keys(object); end
76
+ end
77
+ end
@@ -0,0 +1,39 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module OpenRouter
5
+ class Stream
6
+ sig { returns(String) }
7
+ def path; end
8
+
9
+ sig do
10
+ params(
11
+ path: String,
12
+ input: T.untyped,
13
+ client: OpenRouter::Client
14
+ ).void
15
+ end
16
+ def initialize(path:, input:, client: OpenRouter.client); end
17
+
18
+ sig do
19
+ params(block: T.proc.params(arg0: T::Hash[T.untyped, T.untyped]).void).void
20
+ end
21
+ def each(&block); end
22
+
23
+ class SSEDecoder
24
+ sig { void }
25
+ def initialize; end
26
+
27
+ sig { params(line: String).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
28
+ def decode(line); end
29
+
30
+ private
31
+
32
+ sig { returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
33
+ def flush_event; end
34
+
35
+ sig { returns(NilClass) }
36
+ def reset_state; end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,6 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module OpenRouter
5
+ VERSION = T.let(T.unsafe(nil), String)
6
+ end
data/sorbet/config ADDED
@@ -0,0 +1,2 @@
1
+ --dir=rbi/
2
+ --ignore=test/
@@ -0,0 +1,2 @@
1
+ *
2
+ !.gitignore
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openrouter_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Dylan Player
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2026-01-06 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: faraday
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '1'
26
+ description: A comprehensive Ruby client for the OpenRouter API, providing access
27
+ to hundreds of AI models through a unified interface.
28
+ email:
29
+ - dylan@851.sh
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".env.example"
35
+ - ".rubocop.yml"
36
+ - ".ruby-version"
37
+ - Gemfile
38
+ - Gemfile.lock
39
+ - LICENSE
40
+ - README.md
41
+ - Rakefile
42
+ - lib/openrouter.rb
43
+ - lib/openrouter/api_key.rb
44
+ - lib/openrouter/client.rb
45
+ - lib/openrouter/completion.rb
46
+ - lib/openrouter/credit.rb
47
+ - lib/openrouter/generation.rb
48
+ - lib/openrouter/model.rb
49
+ - lib/openrouter/stream.rb
50
+ - lib/openrouter/version.rb
51
+ - openrouter_client.gemspec
52
+ - rbi/openrouter/api_key.rbi
53
+ - rbi/openrouter/client.rbi
54
+ - rbi/openrouter/completion.rbi
55
+ - rbi/openrouter/credit.rbi
56
+ - rbi/openrouter/generation.rbi
57
+ - rbi/openrouter/model.rbi
58
+ - rbi/openrouter/openrouter.rbi
59
+ - rbi/openrouter/stream.rbi
60
+ - rbi/openrouter/version.rbi
61
+ - sorbet/config
62
+ - sorbet/rbi/.gitignore
63
+ homepage: https://github.com/851-labs/openrouter_client
64
+ licenses:
65
+ - MIT
66
+ metadata:
67
+ allowed_push_host: https://rubygems.org
68
+ homepage_uri: https://github.com/851-labs/openrouter_client
69
+ source_code_uri: https://github.com/851-labs/openrouter_client
70
+ changelog_uri: https://github.com/851-labs/openrouter_client/blob/main/CHANGELOG.md
71
+ rubygems_mfa_required: 'true'
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 3.3.0
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubygems_version: 3.6.2
87
+ specification_version: 4
88
+ summary: Ruby client for OpenRouter API.
89
+ test_files: []