liter_llm 1.9.3-aarch64-linux → 1.11.0-aarch64-linux

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14979506241e7b986a857219c354ffdb9355af9186e038521984cd4a8ce4e6fd
4
- data.tar.gz: 9e6b5f79a61fa03107c03562fbe88262087aacd9803cdd836383d06c84aa8a6a
3
+ metadata.gz: 20faa8336a22bf266be00859a78678f4ba05091e33442c2d072d3e2c27a25b29
4
+ data.tar.gz: 8f001da72950e9355dd8fc2af0e01c52f84cbc53e170617ca29a04fa06f63310
5
5
  SHA512:
6
- metadata.gz: ff47981d72ad056ddf585f98fa482ae7a6b9a568c96a32a4b0cc533cc07f71a7612867b9c35da788796b02b3e20d087d29f4755b87f1e9d17ef5923f2bbfbb92
7
- data.tar.gz: 0cedbc04c44ebfd73ec6ecba41d1a784ac5e6d47379bd92867efda53a205892256dba024d90fdeff7e2c5d886a9cf4c6d07fc4a3631b73a0fe8447ff7b4b5dd4
6
+ metadata.gz: 4688f29c9c6d098772b6293bce03e48b86870b9b955dfff0784517bd01963680659bebb72692d0ed7e4bc0181603fe22c79c4fc572b7af9789f9824ccd315e73
7
+ data.tar.gz: fdfc89757f84abafa56398d3e96a69309fe3299dd6965006062d601e05425ee157f1a0e256617b8df37f0e176a8aae4a0aaa9d83dde1e542ad31d92dbcf66f21
data/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  <div align="center" style="display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin: 20px 0">
11
11
  <!-- Built with -->
12
12
  <a href="https://github.com/xberg-io/alef">
13
- <img src="https://img.shields.io/badge/Bindings-alef%20%D7%90-007ec6" alt="Bindings" />
13
+ <img src="https://img.shields.io/badge/built%20with-alef%20%D7%90-007ec6" alt="Built with alef" />
14
14
  </a>
15
15
  <!-- Language Bindings -->
16
16
  <a href="https://crates.io/crates/liter-llm">
@@ -79,7 +79,7 @@
79
79
  </a>
80
80
  </div>
81
81
 
82
- Universal LLM API client for Ruby. Access 143 LLM providers through a single interface with idiomatic Ruby API and native performance.
82
+ Universal LLM API client for Ruby. Access 165 LLM providers through a single interface with idiomatic Ruby API and native performance.
83
83
 
84
84
  ## What This Package Provides
85
85
 
@@ -168,7 +168,7 @@ puts
168
168
 
169
169
  ## Features
170
170
 
171
- ### Supported Providers (143)
171
+ ### Supported Providers (165)
172
172
 
173
173
  Route to any provider using the `provider/model` prefix convention:
174
174
 
@@ -188,7 +188,7 @@ Route to any provider using the `provider/model` prefix convention:
188
188
 
189
189
  ### Key Capabilities
190
190
 
191
- - **Provider Routing** -- Single client for 143 LLM providers via `provider/model` prefix
191
+ - **Provider Routing** -- Single client for 165 LLM providers via `provider/model` prefix
192
192
  - **Local LLMs** — Connect to locally-hosted models via Ollama, LM Studio, vLLM, llama.cpp, and other local inference servers
193
193
  - **Unified API** -- Consistent `chat`, `chat_stream`, `embeddings`, `list_models` interface
194
194
  - **Streaming** -- Real-time token streaming via `chat_stream`
@@ -209,7 +209,7 @@ Built on a compiled Rust core for speed and safety:
209
209
 
210
210
  ## Provider Routing
211
211
 
212
- Route to 143 providers using the `provider/model` prefix convention:
212
+ Route to 165 providers using the `provider/model` prefix convention:
213
213
 
214
214
  ```text
215
215
  openai/gpt-4o
@@ -244,7 +244,7 @@ To use the MCP server inside a coding agent, install the **liter-llm plugin** fr
244
244
 
245
245
  - **[Documentation](https://docs.liter-llm.xberg.io)** -- Full docs and API reference
246
246
  - **[GitHub Repository](https://github.com/xberg-io/liter-llm)** -- Source, issues, and discussions
247
- - **[Provider Registry](https://github.com/xberg-io/liter-llm/blob/main/schemas/providers.json)** -- 143 supported providers
247
+ - **[Provider Registry](https://github.com/xberg-io/liter-llm/blob/main/schemas/providers.json)** -- 165 supported providers
248
248
 
249
249
  ## Part of Xberg.io
250
250
 
@@ -252,7 +252,7 @@ To use the MCP server inside a coding agent, install the **liter-llm plugin** fr
252
252
  - [Xberg Enterprise](https://github.com/xberg-io/xberg-enterprise) — managed extraction API with SDKs, dashboards, and observability.
253
253
  - [crawlberg](https://github.com/xberg-io/crawlberg) — web crawling and scraping with HTML→Markdown and headless-Chrome fallback.
254
254
  - [html-to-markdown](https://github.com/xberg-io/html-to-markdown) — fast, lossless HTML→Markdown engine.
255
- - [liter-llm](https://github.com/xberg-io/liter-llm) — universal LLM API client with native bindings for 14 languages and 143 providers.
255
+ - [liter-llm](https://github.com/xberg-io/liter-llm) — universal LLM API client with native bindings for 14 languages and 165 providers.
256
256
  - [tree-sitter-language-pack](https://github.com/xberg-io/tree-sitter-language-pack) — tree-sitter grammars and code-intelligence primitives.
257
257
  - [alef](https://github.com/xberg-io/alef) — the polyglot binding generator that produces every per-language binding across the 5 polyglot repos.
258
258
  - [Discord](https://discord.gg/xt9WY3GnKR) — community, roadmap, announcements.
@@ -1,13 +1,39 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:b34f5dac0a6af082b71cab3b75e126050fd38402a73d6d3ff06130b6fe7d8875
2
+ # alef:hash:c7947a41084f71e69944233535fbeda5cd13b37144078f1895b6b57a7802d3fe
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify --exit-code
5
5
  # frozen_string_literal: true
6
6
 
7
7
  require "json"
8
8
  require "sorbet-runtime"
9
- require "liter_llm_rb"
9
+ require "rbconfig"
10
+
11
+ extension_name = "liter_llm_rb"
12
+ # Ruby may expose more than one shared-library extension via DLEXT/DLEXT2.
13
+ dlexts = [RbConfig::CONFIG["DLEXT"], RbConfig::CONFIG["DLEXT2"]].compact.uniq
14
+ ruby_abi = RbConfig::CONFIG.fetch("ruby_version")
15
+
16
+ library_candidates = dlexts.flat_map do |dlext|
17
+ [
18
+ File.join(__dir__, "..", extension_name, ruby_abi, "#{extension_name}.#{dlext}"),
19
+ File.join(__dir__, "..", extension_name, ruby_abi, "lib#{extension_name}.#{dlext}"),
20
+ File.join(__dir__, "..", "#{extension_name}.#{dlext}"),
21
+ File.join(__dir__, "..", "lib#{extension_name}.#{dlext}"),
22
+ ]
23
+ end
24
+
25
+ expanded_candidates = library_candidates.map { |path| File.expand_path(path) }
26
+ native_extension = expanded_candidates.find { |path| File.file?(path) }
27
+
28
+ unless native_extension
29
+ raise(
30
+ LoadError,
31
+ "cannot find #{extension_name} native extension for Ruby ABI #{ruby_abi}; " \
32
+ "searched: #{expanded_candidates.join(", ")}"
33
+ )
34
+ end
10
35
 
36
+ require native_extension
11
37
  module LiterLlm
12
38
  # A chat message in a conversation.
13
39
  module Message
@@ -23,20 +49,13 @@ module LiterLlm
23
49
  def self.from_hash(hash)
24
50
  discriminator = hash[:role] || hash["role"]
25
51
  case discriminator
26
- when "system"
27
- MessageSystem.from_hash(hash)
28
- when "user"
29
- MessageUser.from_hash(hash)
30
- when "assistant"
31
- MessageAssistant.from_hash(hash)
32
- when "tool"
33
- MessageTool.from_hash(hash)
34
- when "developer"
35
- MessageDeveloper.from_hash(hash)
36
- when "function"
37
- MessageFunction.from_hash(hash)
38
- else
39
- raise "Unknown discriminator: #{discriminator}"
52
+ when "system" then MessageSystem.from_hash(hash)
53
+ when "user" then MessageUser.from_hash(hash)
54
+ when "assistant" then MessageAssistant.from_hash(hash)
55
+ when "tool" then MessageTool.from_hash(hash)
56
+ when "developer" then MessageDeveloper.from_hash(hash)
57
+ when "function" then MessageFunction.from_hash(hash)
58
+ else raise "Unknown discriminator: #{discriminator}"
40
59
  end
41
60
  end
42
61
  end
@@ -47,8 +66,7 @@ module LiterLlm
47
66
 
48
67
  # @return [SystemMessage]
49
68
  sig { returns(SystemMessage) }
50
- # rubocop:disable Lint/UselessMethodDefinition
51
- def value = super
69
+ def value = super # rubocop:disable Lint/UselessMethodDefinition
52
70
  sig { returns(T::Boolean) }
53
71
  def system? = true
54
72
  sig { returns(T::Boolean) }
@@ -75,8 +93,7 @@ module LiterLlm
75
93
 
76
94
  # @return [UserMessage]
77
95
  sig { returns(UserMessage) }
78
- # rubocop:disable Lint/UselessMethodDefinition
79
- def value = super
96
+ def value = super # rubocop:disable Lint/UselessMethodDefinition
80
97
  sig { returns(T::Boolean) }
81
98
  def system? = false
82
99
  sig { returns(T::Boolean) }
@@ -103,8 +120,7 @@ module LiterLlm
103
120
 
104
121
  # @return [AssistantMessage]
105
122
  sig { returns(AssistantMessage) }
106
- # rubocop:disable Lint/UselessMethodDefinition
107
- def value = super
123
+ def value = super # rubocop:disable Lint/UselessMethodDefinition
108
124
  sig { returns(T::Boolean) }
109
125
  def system? = false
110
126
  sig { returns(T::Boolean) }
@@ -131,8 +147,7 @@ module LiterLlm
131
147
 
132
148
  # @return [ToolMessage]
133
149
  sig { returns(ToolMessage) }
134
- # rubocop:disable Lint/UselessMethodDefinition
135
- def value = super
150
+ def value = super # rubocop:disable Lint/UselessMethodDefinition
136
151
  sig { returns(T::Boolean) }
137
152
  def system? = false
138
153
  sig { returns(T::Boolean) }
@@ -159,8 +174,7 @@ module LiterLlm
159
174
 
160
175
  # @return [DeveloperMessage]
161
176
  sig { returns(DeveloperMessage) }
162
- # rubocop:disable Lint/UselessMethodDefinition
163
- def value = super
177
+ def value = super # rubocop:disable Lint/UselessMethodDefinition
164
178
  sig { returns(T::Boolean) }
165
179
  def system? = false
166
180
  sig { returns(T::Boolean) }
@@ -187,8 +201,7 @@ module LiterLlm
187
201
 
188
202
  # @return [FunctionMessage]
189
203
  sig { returns(FunctionMessage) }
190
- # rubocop:disable Lint/UselessMethodDefinition
191
- def value = super
204
+ def value = super # rubocop:disable Lint/UselessMethodDefinition
192
205
  sig { returns(T::Boolean) }
193
206
  def system? = false
194
207
  sig { returns(T::Boolean) }
@@ -225,16 +238,11 @@ module LiterLlm
225
238
  def self.from_hash(hash)
226
239
  discriminator = hash[:type] || hash["type"]
227
240
  case discriminator
228
- when "text"
229
- ContentPartText.from_hash(hash)
230
- when "image_url"
231
- ContentPartImageUrl.from_hash(hash)
232
- when "document"
233
- ContentPartDocument.from_hash(hash)
234
- when "input_audio"
235
- ContentPartInputAudio.from_hash(hash)
236
- else
237
- raise "Unknown discriminator: #{discriminator}"
241
+ when "text" then ContentPartText.from_hash(hash)
242
+ when "image_url" then ContentPartImageUrl.from_hash(hash)
243
+ when "document" then ContentPartDocument.from_hash(hash)
244
+ when "input_audio" then ContentPartInputAudio.from_hash(hash)
245
+ else raise "Unknown discriminator: #{discriminator}"
238
246
  end
239
247
  end
240
248
  end
@@ -245,8 +253,7 @@ module LiterLlm
245
253
 
246
254
  # @return [String]
247
255
  sig { returns(String) }
248
- # rubocop:disable Lint/UselessMethodDefinition
249
- def text = super
256
+ def text = super # rubocop:disable Lint/UselessMethodDefinition
250
257
  sig { returns(T::Boolean) }
251
258
  def text? = true
252
259
  sig { returns(T::Boolean) }
@@ -269,8 +276,7 @@ module LiterLlm
269
276
 
270
277
  # @return [ImageUrl]
271
278
  sig { returns(ImageUrl) }
272
- # rubocop:disable Lint/UselessMethodDefinition
273
- def image_url = super
279
+ def image_url = super # rubocop:disable Lint/UselessMethodDefinition
274
280
  sig { returns(T::Boolean) }
275
281
  def text? = false
276
282
  sig { returns(T::Boolean) }
@@ -293,8 +299,7 @@ module LiterLlm
293
299
 
294
300
  # @return [DocumentContent]
295
301
  sig { returns(DocumentContent) }
296
- # rubocop:disable Lint/UselessMethodDefinition
297
- def document = super
302
+ def document = super # rubocop:disable Lint/UselessMethodDefinition
298
303
  sig { returns(T::Boolean) }
299
304
  def text? = false
300
305
  sig { returns(T::Boolean) }
@@ -317,8 +322,7 @@ module LiterLlm
317
322
 
318
323
  # @return [AudioContent]
319
324
  sig { returns(AudioContent) }
320
- # rubocop:disable Lint/UselessMethodDefinition
321
- def input_audio = super
325
+ def input_audio = super # rubocop:disable Lint/UselessMethodDefinition
322
326
  sig { returns(T::Boolean) }
323
327
  def text? = false
324
328
  sig { returns(T::Boolean) }
@@ -354,16 +358,11 @@ module LiterLlm
354
358
  def self.from_hash(hash)
355
359
  discriminator = hash[:type] || hash["type"]
356
360
  case discriminator
357
- when "text"
358
- AssistantPartText.from_hash(hash)
359
- when "refusal"
360
- AssistantPartRefusal.from_hash(hash)
361
- when "output_image"
362
- AssistantPartOutputImage.from_hash(hash)
363
- when "output_audio"
364
- AssistantPartOutputAudio.from_hash(hash)
365
- else
366
- raise "Unknown discriminator: #{discriminator}"
361
+ when "text" then AssistantPartText.from_hash(hash)
362
+ when "refusal" then AssistantPartRefusal.from_hash(hash)
363
+ when "output_image" then AssistantPartOutputImage.from_hash(hash)
364
+ when "output_audio" then AssistantPartOutputAudio.from_hash(hash)
365
+ else raise "Unknown discriminator: #{discriminator}"
367
366
  end
368
367
  end
369
368
  end
@@ -374,8 +373,7 @@ module LiterLlm
374
373
 
375
374
  # The text content of this part.
376
375
  sig { returns(String) }
377
- # rubocop:disable Lint/UselessMethodDefinition
378
- def text = super
376
+ def text = super # rubocop:disable Lint/UselessMethodDefinition
379
377
  sig { returns(T::Boolean) }
380
378
  def text? = true
381
379
  sig { returns(T::Boolean) }
@@ -398,8 +396,7 @@ module LiterLlm
398
396
 
399
397
  # The refusal reason.
400
398
  sig { returns(String) }
401
- # rubocop:disable Lint/UselessMethodDefinition
402
- def refusal = super
399
+ def refusal = super # rubocop:disable Lint/UselessMethodDefinition
403
400
  sig { returns(T::Boolean) }
404
401
  def text? = false
405
402
  sig { returns(T::Boolean) }
@@ -422,8 +419,7 @@ module LiterLlm
422
419
 
423
420
  # Image URL or data URI referencing the generated image.
424
421
  sig { returns(ImageUrl) }
425
- # rubocop:disable Lint/UselessMethodDefinition
426
- def image_url = super
422
+ def image_url = super # rubocop:disable Lint/UselessMethodDefinition
427
423
  sig { returns(T::Boolean) }
428
424
  def text? = false
429
425
  sig { returns(T::Boolean) }
@@ -446,8 +442,7 @@ module LiterLlm
446
442
 
447
443
  # Base64-encoded audio data and its format.
448
444
  sig { returns(AudioContent) }
449
- # rubocop:disable Lint/UselessMethodDefinition
450
- def audio = super
445
+ def audio = super # rubocop:disable Lint/UselessMethodDefinition
451
446
  sig { returns(T::Boolean) }
452
447
  def text? = false
453
448
  sig { returns(T::Boolean) }
@@ -495,14 +490,10 @@ module LiterLlm
495
490
  def self.from_hash(hash)
496
491
  discriminator = hash[:type] || hash["type"]
497
492
  case discriminator
498
- when "text"
499
- ResponseFormatText.from_hash(hash)
500
- when "json_object"
501
- ResponseFormatJsonObject.from_hash(hash)
502
- when "json_schema"
503
- ResponseFormatJsonSchema.from_hash(hash)
504
- else
505
- raise "Unknown discriminator: #{discriminator}"
493
+ when "text" then ResponseFormatText.from_hash(hash)
494
+ when "json_object" then ResponseFormatJsonObject.from_hash(hash)
495
+ when "json_schema" then ResponseFormatJsonSchema.from_hash(hash)
496
+ else raise "Unknown discriminator: #{discriminator}"
506
497
  end
507
498
  end
508
499
  end
@@ -549,8 +540,7 @@ module LiterLlm
549
540
 
550
541
  # @return [JsonSchemaFormat]
551
542
  sig { returns(JsonSchemaFormat) }
552
- # rubocop:disable Lint/UselessMethodDefinition
553
- def json_schema = super
543
+ def json_schema = super # rubocop:disable Lint/UselessMethodDefinition
554
544
  sig { returns(T::Boolean) }
555
545
  def text? = false
556
546
  sig { returns(T::Boolean) }
@@ -581,12 +571,9 @@ module LiterLlm
581
571
  def self.from_hash(hash)
582
572
  discriminator = hash[:type] || hash["type"]
583
573
  case discriminator
584
- when "document_url"
585
- OcrDocumentUrl.from_hash(hash)
586
- when "base64"
587
- OcrDocumentBase64.from_hash(hash)
588
- else
589
- raise "Unknown discriminator: #{discriminator}"
574
+ when "document_url" then OcrDocumentUrl.from_hash(hash)
575
+ when "base64" then OcrDocumentBase64.from_hash(hash)
576
+ else raise "Unknown discriminator: #{discriminator}"
590
577
  end
591
578
  end
592
579
  end
@@ -597,8 +584,7 @@ module LiterLlm
597
584
 
598
585
  # The document URL (HTTP/HTTPS).
599
586
  sig { returns(String) }
600
- # rubocop:disable Lint/UselessMethodDefinition
601
- def url = super
587
+ def url = super # rubocop:disable Lint/UselessMethodDefinition
602
588
  sig { returns(T::Boolean) }
603
589
  def url? = true
604
590
  sig { returns(T::Boolean) }
@@ -617,12 +603,10 @@ module LiterLlm
617
603
 
618
604
  # Base64-encoded document content.
619
605
  sig { returns(String) }
620
- # rubocop:disable Lint/UselessMethodDefinition
621
- def data = super
606
+ def data = super # rubocop:disable Lint/UselessMethodDefinition
622
607
  # MIME type (e.g. `"application/pdf"`, `"image/png"`, `"image/jpeg"`).
623
608
  sig { returns(String) }
624
- # rubocop:disable Lint/UselessMethodDefinition
625
- def media_type = super
609
+ def media_type = super # rubocop:disable Lint/UselessMethodDefinition
626
610
  sig { returns(T::Boolean) }
627
611
  def url? = false
628
612
  sig { returns(T::Boolean) }
@@ -651,12 +635,9 @@ module LiterLlm
651
635
  def self.from_hash(hash)
652
636
  discriminator = hash[:type] || hash["type"]
653
637
  case discriminator
654
- when "memory"
655
- CacheBackendMemory.from_hash(hash)
656
- when "open_dal"
657
- CacheBackendOpenDal.from_hash(hash)
658
- else
659
- raise "Unknown discriminator: #{discriminator}"
638
+ when "memory" then CacheBackendMemory.from_hash(hash)
639
+ when "open_dal" then CacheBackendOpenDal.from_hash(hash)
640
+ else raise "Unknown discriminator: #{discriminator}"
660
641
  end
661
642
  end
662
643
  end
@@ -683,12 +664,10 @@ module LiterLlm
683
664
 
684
665
  # OpenDAL scheme name (e.g. "s3", "redis", "fs", "gcs", "azblob").
685
666
  sig { returns(String) }
686
- # rubocop:disable Lint/UselessMethodDefinition
687
- def scheme = super
667
+ def scheme = super # rubocop:disable Lint/UselessMethodDefinition
688
668
  # Backend-specific configuration as key-value pairs passed to OpenDAL.
689
669
  sig { returns(T::Hash[String, String]) }
690
- # rubocop:disable Lint/UselessMethodDefinition
691
- def config = super
670
+ def config = super # rubocop:disable Lint/UselessMethodDefinition
692
671
  sig { returns(T::Boolean) }
693
672
  def memory? = false
694
673
  sig { returns(T::Boolean) }
@@ -1,10 +1,10 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:b34f5dac0a6af082b71cab3b75e126050fd38402a73d6d3ff06130b6fe7d8875
2
+ # alef:hash:c7947a41084f71e69944233535fbeda5cd13b37144078f1895b6b57a7802d3fe
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify --exit-code
5
5
  # frozen_string_literal: true
6
6
 
7
7
  module LiterLlm
8
8
  ## The version string for this package.
9
- VERSION = "1.9.3"
9
+ VERSION = "1.11.0"
10
10
  end
data/lib/liter_llm.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # This file is auto-generated by alef — DO NOT EDIT.
2
- # alef:hash:b34f5dac0a6af082b71cab3b75e126050fd38402a73d6d3ff06130b6fe7d8875
2
+ # alef:hash:c7947a41084f71e69944233535fbeda5cd13b37144078f1895b6b57a7802d3fe
3
3
  # To regenerate: alef generate
4
4
  # To verify freshness: alef verify --exit-code
5
5
  # frozen_string_literal: true
data/lib/liter_llm_rb.so CHANGED
Binary file