ask-llm-providers 0.2.1 → 0.3.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,189 @@
1
+ [
2
+ {
3
+ "id": "claude-sonnet-4-6",
4
+ "name": "Claude Sonnet 4.6",
5
+ "family": "claude_sonnet",
6
+ "context_window": 200000,
7
+ "max_output_tokens": 8192,
8
+ "capabilities": [
9
+ "function_calling",
10
+ "streaming",
11
+ "vision",
12
+ "reasoning",
13
+ "tool_choice",
14
+ "parallel_tool_calls"
15
+ ],
16
+ "modalities": {
17
+ "input": [
18
+ "text",
19
+ "image"
20
+ ],
21
+ "output": [
22
+ "text"
23
+ ]
24
+ },
25
+ "provider": "opencode"
26
+ },
27
+ {
28
+ "id": "claude-opus-4-7",
29
+ "name": "Claude Opus 4.7",
30
+ "family": "claude_opus",
31
+ "context_window": 200000,
32
+ "max_output_tokens": 8192,
33
+ "capabilities": [
34
+ "function_calling",
35
+ "streaming",
36
+ "vision",
37
+ "reasoning",
38
+ "tool_choice",
39
+ "parallel_tool_calls"
40
+ ],
41
+ "modalities": {
42
+ "input": [
43
+ "text",
44
+ "image"
45
+ ],
46
+ "output": [
47
+ "text"
48
+ ]
49
+ },
50
+ "provider": "opencode"
51
+ },
52
+ {
53
+ "id": "claude-sonnet-4",
54
+ "name": "Claude Sonnet 4",
55
+ "family": "claude_sonnet",
56
+ "context_window": 200000,
57
+ "max_output_tokens": 8192,
58
+ "capabilities": [
59
+ "function_calling",
60
+ "streaming",
61
+ "vision",
62
+ "reasoning",
63
+ "tool_choice",
64
+ "parallel_tool_calls"
65
+ ],
66
+ "modalities": {
67
+ "input": [
68
+ "text",
69
+ "image"
70
+ ],
71
+ "output": [
72
+ "text"
73
+ ]
74
+ },
75
+ "provider": "opencode"
76
+ },
77
+ {
78
+ "id": "claude-haiku-4-5",
79
+ "name": "Claude Haiku 4.5",
80
+ "family": "claude_haiku",
81
+ "context_window": 200000,
82
+ "max_output_tokens": 8192,
83
+ "capabilities": [
84
+ "function_calling",
85
+ "streaming",
86
+ "vision",
87
+ "reasoning",
88
+ "tool_choice",
89
+ "parallel_tool_calls"
90
+ ],
91
+ "modalities": {
92
+ "input": [
93
+ "text",
94
+ "image"
95
+ ],
96
+ "output": [
97
+ "text"
98
+ ]
99
+ },
100
+ "provider": "opencode"
101
+ },
102
+ {
103
+ "id": "claude-opus-4-5",
104
+ "name": "Claude Opus 4.5",
105
+ "family": "claude_opus",
106
+ "context_window": 200000,
107
+ "max_output_tokens": 8192,
108
+ "capabilities": [
109
+ "function_calling",
110
+ "streaming",
111
+ "vision",
112
+ "reasoning",
113
+ "tool_choice",
114
+ "parallel_tool_calls"
115
+ ],
116
+ "modalities": {
117
+ "input": [
118
+ "text",
119
+ "image"
120
+ ],
121
+ "output": [
122
+ "text"
123
+ ]
124
+ },
125
+ "provider": "opencode"
126
+ },
127
+ {
128
+ "id": "gemini-3-flash",
129
+ "name": "Gemini 3 Flash",
130
+ "family": "gemini",
131
+ "context_window": 1000000,
132
+ "max_output_tokens": 8192,
133
+ "capabilities": [
134
+ "function_calling",
135
+ "streaming",
136
+ "vision",
137
+ "reasoning"
138
+ ],
139
+ "modalities": {
140
+ "input": [
141
+ "text",
142
+ "image"
143
+ ],
144
+ "output": [
145
+ "text"
146
+ ]
147
+ },
148
+ "provider": "opencode"
149
+ },
150
+ {
151
+ "id": "deepseek-v4-flash",
152
+ "name": "DeepSeek V4 Flash",
153
+ "family": "deepseek_v4",
154
+ "context_window": 1000000,
155
+ "max_output_tokens": 384000,
156
+ "capabilities": [
157
+ "function_calling",
158
+ "streaming",
159
+ "reasoning",
160
+ "tool_choice",
161
+ "parallel_tool_calls"
162
+ ],
163
+ "modalities": {
164
+ "input": ["text"],
165
+ "output": ["text"]
166
+ },
167
+ "provider": "opencode"
168
+ },
169
+ {
170
+ "id": "deepseek-v4-flash-free",
171
+ "name": "DeepSeek V4 Flash Free",
172
+ "family": "deepseek_v4",
173
+ "context_window": 128000,
174
+ "max_output_tokens": 64000,
175
+ "capabilities": [
176
+ "function_calling",
177
+ "streaming"
178
+ ],
179
+ "modalities": {
180
+ "input": [
181
+ "text"
182
+ ],
183
+ "output": [
184
+ "text"
185
+ ]
186
+ },
187
+ "provider": "opencode"
188
+ }
189
+ ]
@@ -0,0 +1,149 @@
1
+ [
2
+ {
3
+ "id": "kimi-k2.6",
4
+ "name": "Kimi K2.6",
5
+ "family": "kimi",
6
+ "context_window": 128000,
7
+ "max_output_tokens": 64000,
8
+ "capabilities": [
9
+ "function_calling",
10
+ "streaming",
11
+ "reasoning"
12
+ ],
13
+ "modalities": {
14
+ "input": [
15
+ "text"
16
+ ],
17
+ "output": [
18
+ "text"
19
+ ]
20
+ },
21
+ "provider": "opencode_go"
22
+ },
23
+ {
24
+ "id": "kimi-k2.5",
25
+ "name": "Kimi K2.5",
26
+ "family": "kimi",
27
+ "context_window": 128000,
28
+ "max_output_tokens": 64000,
29
+ "capabilities": [
30
+ "function_calling",
31
+ "streaming",
32
+ "reasoning"
33
+ ],
34
+ "modalities": {
35
+ "input": [
36
+ "text"
37
+ ],
38
+ "output": [
39
+ "text"
40
+ ]
41
+ },
42
+ "provider": "opencode_go"
43
+ },
44
+ {
45
+ "id": "qwen3.6-plus",
46
+ "name": "Qwen 3.6 Plus",
47
+ "family": "qwen",
48
+ "context_window": 128000,
49
+ "max_output_tokens": 64000,
50
+ "capabilities": [
51
+ "function_calling",
52
+ "streaming",
53
+ "reasoning"
54
+ ],
55
+ "modalities": {
56
+ "input": [
57
+ "text"
58
+ ],
59
+ "output": [
60
+ "text"
61
+ ]
62
+ },
63
+ "provider": "opencode_go"
64
+ },
65
+ {
66
+ "id": "qwen3.5-plus",
67
+ "name": "Qwen 3.5 Plus",
68
+ "family": "qwen",
69
+ "context_window": 128000,
70
+ "max_output_tokens": 64000,
71
+ "capabilities": [
72
+ "function_calling",
73
+ "streaming",
74
+ "reasoning"
75
+ ],
76
+ "modalities": {
77
+ "input": [
78
+ "text"
79
+ ],
80
+ "output": [
81
+ "text"
82
+ ]
83
+ },
84
+ "provider": "opencode_go"
85
+ },
86
+ {
87
+ "id": "glm-5",
88
+ "name": "GLM-5",
89
+ "family": "glm",
90
+ "context_window": 128000,
91
+ "max_output_tokens": 64000,
92
+ "capabilities": [
93
+ "function_calling",
94
+ "streaming",
95
+ "reasoning"
96
+ ],
97
+ "modalities": {
98
+ "input": [
99
+ "text"
100
+ ],
101
+ "output": [
102
+ "text"
103
+ ]
104
+ },
105
+ "provider": "opencode_go"
106
+ },
107
+ {
108
+ "id": "mimo-v2.5",
109
+ "name": "MIMO V2.5",
110
+ "family": "mimo",
111
+ "context_window": 128000,
112
+ "max_output_tokens": 64000,
113
+ "capabilities": [
114
+ "function_calling",
115
+ "streaming",
116
+ "reasoning"
117
+ ],
118
+ "modalities": {
119
+ "input": [
120
+ "text"
121
+ ],
122
+ "output": [
123
+ "text"
124
+ ]
125
+ },
126
+ "provider": "opencode_go"
127
+ },
128
+ {
129
+ "id": "minimax-m2.7",
130
+ "name": "MiniMax M2.7",
131
+ "family": "minimax",
132
+ "context_window": 128000,
133
+ "max_output_tokens": 64000,
134
+ "capabilities": [
135
+ "function_calling",
136
+ "streaming",
137
+ "reasoning"
138
+ ],
139
+ "modalities": {
140
+ "input": [
141
+ "text"
142
+ ],
143
+ "output": [
144
+ "text"
145
+ ]
146
+ },
147
+ "provider": "opencode_go"
148
+ }
149
+ ]
@@ -0,0 +1,115 @@
1
+ [
2
+ {
3
+ "id": "gpt-4o",
4
+ "name": "GPT-4o",
5
+ "family": "gpt4o",
6
+ "context_window": 128000,
7
+ "max_output_tokens": 16384,
8
+ "capabilities": [
9
+ "function_calling",
10
+ "streaming",
11
+ "structured_output",
12
+ "vision"
13
+ ],
14
+ "modalities": {
15
+ "input": [
16
+ "text",
17
+ "image"
18
+ ],
19
+ "output": [
20
+ "text"
21
+ ]
22
+ },
23
+ "provider": "openrouter"
24
+ },
25
+ {
26
+ "id": "claude-sonnet-4-6",
27
+ "name": "Claude Sonnet 4.6",
28
+ "family": "claude_sonnet",
29
+ "context_window": 200000,
30
+ "max_output_tokens": 8192,
31
+ "capabilities": [
32
+ "function_calling",
33
+ "streaming",
34
+ "vision",
35
+ "reasoning"
36
+ ],
37
+ "modalities": {
38
+ "input": [
39
+ "text",
40
+ "image"
41
+ ],
42
+ "output": [
43
+ "text"
44
+ ]
45
+ },
46
+ "provider": "openrouter"
47
+ },
48
+ {
49
+ "id": "claude-opus-4-7",
50
+ "name": "Claude Opus 4.7",
51
+ "family": "claude_opus",
52
+ "context_window": 200000,
53
+ "max_output_tokens": 8192,
54
+ "capabilities": [
55
+ "function_calling",
56
+ "streaming",
57
+ "vision",
58
+ "reasoning"
59
+ ],
60
+ "modalities": {
61
+ "input": [
62
+ "text",
63
+ "image"
64
+ ],
65
+ "output": [
66
+ "text"
67
+ ]
68
+ },
69
+ "provider": "openrouter"
70
+ },
71
+ {
72
+ "id": "gemini-3-flash",
73
+ "name": "Gemini 3 Flash",
74
+ "family": "gemini",
75
+ "context_window": 1000000,
76
+ "max_output_tokens": 8192,
77
+ "capabilities": [
78
+ "function_calling",
79
+ "streaming",
80
+ "vision",
81
+ "reasoning"
82
+ ],
83
+ "modalities": {
84
+ "input": [
85
+ "text",
86
+ "image"
87
+ ],
88
+ "output": [
89
+ "text"
90
+ ]
91
+ },
92
+ "provider": "openrouter"
93
+ },
94
+ {
95
+ "id": "deepseek-v4-flash",
96
+ "name": "DeepSeek V4 Flash",
97
+ "family": "deepseek_v4",
98
+ "context_window": 1000000,
99
+ "max_output_tokens": 384000,
100
+ "capabilities": [
101
+ "function_calling",
102
+ "streaming",
103
+ "reasoning"
104
+ ],
105
+ "modalities": {
106
+ "input": [
107
+ "text"
108
+ ],
109
+ "output": [
110
+ "text"
111
+ ]
112
+ },
113
+ "provider": "openrouter"
114
+ }
115
+ ]
@@ -0,0 +1,74 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Ask::LLM Model Entry",
4
+ "description": "A single model entry in the ask-llm-providers model catalog",
5
+ "type": "object",
6
+ "required": ["id", "provider"],
7
+ "properties": {
8
+ "id": {
9
+ "type": "string",
10
+ "description": "Model identifier used in API requests"
11
+ },
12
+ "name": {
13
+ "type": "string",
14
+ "description": "Human-readable model name"
15
+ },
16
+ "provider": {
17
+ "type": "string",
18
+ "description": "Provider slug matching a registered Ask::Provider (e.g. 'openai', 'opencode')"
19
+ },
20
+ "family": {
21
+ "type": "string",
22
+ "description": "Model family grouping (e.g. 'gpt4o', 'claude_sonnet')"
23
+ },
24
+ "context_window": {
25
+ "type": "integer",
26
+ "description": "Maximum context window in tokens"
27
+ },
28
+ "max_output_tokens": {
29
+ "type": "integer",
30
+ "description": "Maximum output tokens"
31
+ },
32
+ "capabilities": {
33
+ "type": "array",
34
+ "items": {
35
+ "type": "string",
36
+ "enum": [
37
+ "function_calling", "streaming", "structured_output",
38
+ "vision", "reasoning", "audio", "embedding",
39
+ "prompt_caching", "tool_choice", "parallel_tool_calls"
40
+ ]
41
+ },
42
+ "description": "Capability flags for this model"
43
+ },
44
+ "modalities": {
45
+ "type": "object",
46
+ "properties": {
47
+ "input": {
48
+ "type": "array",
49
+ "items": { "type": "string", "enum": ["text", "image", "audio", "pdf", "video"] }
50
+ },
51
+ "output": {
52
+ "type": "array",
53
+ "items": { "type": "string", "enum": ["text", "image", "audio", "embeddings"] }
54
+ }
55
+ }
56
+ },
57
+ "pricing": {
58
+ "type": "object",
59
+ "description": "Pricing information per million tokens"
60
+ },
61
+ "knowledge_cutoff": {
62
+ "type": "string",
63
+ "description": "Knowledge cutoff date"
64
+ },
65
+ "created_at": {
66
+ "type": "string",
67
+ "description": "Model release/creation date"
68
+ },
69
+ "metadata": {
70
+ "type": "object",
71
+ "description": "Additional metadata (open_weights, source, etc.)"
72
+ }
73
+ }
74
+ }
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ask
4
4
  module LLM
5
- VERSION = "0.2.1"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
@@ -11,7 +11,8 @@ require "base64"
11
11
  require_relative "ask/llm/config"
12
12
  require_relative "ask/llm/http"
13
13
  require_relative "ask/llm/sse_buffer"
14
- require_relative "ask/llm/models/openai"
14
+ require_relative "ask/llm/catalog"
15
+ require_relative "ask/llm/aliases"
15
16
 
16
17
  # Load providers
17
18
  require_relative "ask/provider/openai"
@@ -41,19 +42,5 @@ Ask::Provider.register(:mimo, Ask::Providers::Mimo)
41
42
  Ask::Provider.register(:deepseek, Ask::Providers::DeepSeek)
42
43
  Ask::Provider.register(:openrouter, Ask::Providers::OpenRouter)
43
44
 
44
- # Register known models for each provider in the catalog
45
- [
46
- [Ask::Providers::OpenAI, Ask::LLM::Models::OPENAI_MODELS],
47
- [Ask::Providers::Anthropic, Ask::LLM::Models::ANTHROPIC_MODELS],
48
- [Ask::Providers::Google, Ask::LLM::Models::GOOGLE_MODELS],
49
- [Ask::Providers::Mistral, Ask::LLM::Models::MISTRAL_MODELS],
50
- [Ask::Providers::Ollama, Ask::LLM::Models::OLLAMA_MODELS]
51
- ].each do |provider, models|
52
- models.each do |m|
53
- Ask::ModelCatalog.instance.register(Ask::ModelInfo.new(
54
- id: m[:id], provider: provider.slug, family: m[:family],
55
- capabilities: m[:capabilities],
56
- context_window: m[:context], max_output_tokens: m[:output]
57
- ))
58
- end
59
- end
45
+ # Load bundled model catalog into Ask::ModelCatalog
46
+ Ask::LLM::Catalog.load!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ask-llm-providers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kaka Ruto
@@ -27,14 +27,14 @@ dependencies:
27
27
  name: ask-auth
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - "~>"
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: '0.1'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0.1'
40
40
  - !ruby/object:Gem::Dependency
@@ -172,12 +172,28 @@ executables: []
172
172
  extensions: []
173
173
  extra_rdoc_files: []
174
174
  files:
175
+ - CHANGELOG.md
175
176
  - LICENSE
176
177
  - README.md
177
178
  - lib/ask-llm-providers.rb
179
+ - lib/ask/llm/aliases.json
180
+ - lib/ask/llm/aliases.rb
181
+ - lib/ask/llm/catalog.rb
178
182
  - lib/ask/llm/config.rb
179
183
  - lib/ask/llm/http.rb
180
- - lib/ask/llm/models/openai.rb
184
+ - lib/ask/llm/models/anthropic.json
185
+ - lib/ask/llm/models/bedrock.json
186
+ - lib/ask/llm/models/cloudflare.json
187
+ - lib/ask/llm/models/deepseek.json
188
+ - lib/ask/llm/models/gemini.json
189
+ - lib/ask/llm/models/mimo.json
190
+ - lib/ask/llm/models/mistral.json
191
+ - lib/ask/llm/models/ollama.json
192
+ - lib/ask/llm/models/openai.json
193
+ - lib/ask/llm/models/opencode.json
194
+ - lib/ask/llm/models/opencode_go.json
195
+ - lib/ask/llm/models/openrouter.json
196
+ - lib/ask/llm/models_schema.json
181
197
  - lib/ask/llm/sse_buffer.rb
182
198
  - lib/ask/llm/version.rb
183
199
  - lib/ask/provider/anthropic.rb
@@ -196,7 +212,10 @@ files:
196
212
  homepage: https://github.com/ask-rb/ask-llm-providers
197
213
  licenses:
198
214
  - MIT
199
- metadata: {}
215
+ metadata:
216
+ homepage_uri: https://github.com/ask-rb/ask-llm-providers
217
+ source_code_uri: https://github.com/ask-rb/ask-llm-providers
218
+ changelog_uri: https://github.com/ask-rb/ask-llm-providers/blob/master/CHANGELOG.md
200
219
  rdoc_options: []
201
220
  require_paths:
202
221
  - lib