ruby_llm-providers-lms 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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.flayignore +1 -0
  3. data/.github/workflows/ci.yml +32 -0
  4. data/.github/workflows/gitleaks.yml +22 -0
  5. data/.github/workflows/release.yml +36 -0
  6. data/.overcommit.yml +31 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +29 -0
  9. data/Archspec.rb +14 -0
  10. data/LICENSE +21 -0
  11. data/README.md +87 -0
  12. data/lib/ruby_llm/providers/lms/models.rb +96 -0
  13. data/lib/ruby_llm/providers/lms.rb +55 -0
  14. data/models.json +603 -0
  15. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_handle_a_multi_turn_conversation.yml +92 -0
  16. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_have_a_basic_conversation.yml +45 -0
  17. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_use_tools.yml +129 -0
  18. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_returns_the_raw_response.yml +73 -0
  19. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_supports_streaming_responses.yml +81 -0
  20. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_can_have_a_basic_conversation.yml +73 -0
  21. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_structured_output.yml +73 -0
  22. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_the_raw_response.yml +73 -0
  23. data/spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_one_text.yml +828 -0
  24. data/spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_several_texts.yml +2375 -0
  25. data/spec/ruby_llm/chat_schema_spec.rb +30 -0
  26. data/spec/ruby_llm/chat_spec.rb +35 -0
  27. data/spec/ruby_llm/chat_streaming_spec.rb +22 -0
  28. data/spec/ruby_llm/chat_tools_spec.rb +30 -0
  29. data/spec/ruby_llm/embedding_spec.rb +49 -0
  30. data/spec/ruby_llm/image_spec.rb +23 -0
  31. data/spec/ruby_llm/models_spec.rb +11 -0
  32. data/spec/ruby_llm/moderation_spec.rb +22 -0
  33. data/spec/ruby_llm/providers/lms_spec.rb +149 -0
  34. data/spec/ruby_llm/rerank_spec.rb +23 -0
  35. data/spec/ruby_llm/speech_spec.rb +25 -0
  36. data/spec/ruby_llm/video_spec.rb +27 -0
  37. data/spec/spec_helper.rb +26 -0
  38. data/spec/support/models.rb +29 -0
  39. data/spec/support/rubyllm_configuration.rb +14 -0
  40. data/spec/support/vcr_configuration.rb +16 -0
  41. metadata +99 -0
data/models.json ADDED
@@ -0,0 +1,603 @@
1
+ [
2
+ {
3
+ "id": "qwen/qwen3.8-27b",
4
+ "name": "qwen/qwen3.8-27b",
5
+ "provider": "lms",
6
+ "family": "qwen35",
7
+ "created_at": null,
8
+ "context_window": 262144,
9
+ "max_output_tokens": null,
10
+ "knowledge_cutoff": null,
11
+ "modalities": {
12
+ "input": [
13
+ "text",
14
+ "image"
15
+ ],
16
+ "output": [
17
+ "text"
18
+ ]
19
+ },
20
+ "capabilities": [
21
+ "streaming",
22
+ "structured_output",
23
+ "function_calling",
24
+ "vision"
25
+ ],
26
+ "pricing": {},
27
+ "metadata": {
28
+ "owned_by": "organization_owner",
29
+ "publisher": "qwen",
30
+ "arch": "qwen35",
31
+ "compatibility_type": "gguf",
32
+ "quantization": "Q4_K_M",
33
+ "state": "not-loaded"
34
+ }
35
+ },
36
+ {
37
+ "id": "unlimited-ocr",
38
+ "name": "unlimited-ocr",
39
+ "provider": "lms",
40
+ "family": "deepseek2-ocr",
41
+ "created_at": null,
42
+ "context_window": 32768,
43
+ "max_output_tokens": null,
44
+ "knowledge_cutoff": null,
45
+ "modalities": {
46
+ "input": [
47
+ "text",
48
+ "image"
49
+ ],
50
+ "output": [
51
+ "text"
52
+ ]
53
+ },
54
+ "capabilities": [
55
+ "streaming",
56
+ "structured_output",
57
+ "vision"
58
+ ],
59
+ "pricing": {},
60
+ "metadata": {
61
+ "owned_by": "organization_owner",
62
+ "publisher": "sahilchachra",
63
+ "arch": "deepseek2-ocr",
64
+ "compatibility_type": "gguf",
65
+ "quantization": "IQ2_M",
66
+ "state": "not-loaded"
67
+ }
68
+ },
69
+ {
70
+ "id": "kimi-k2.7-code",
71
+ "name": "kimi-k2.7-code",
72
+ "provider": "lms",
73
+ "family": "deepseek2",
74
+ "created_at": null,
75
+ "context_window": 262144,
76
+ "max_output_tokens": null,
77
+ "knowledge_cutoff": null,
78
+ "modalities": {
79
+ "input": [
80
+ "text",
81
+ "image"
82
+ ],
83
+ "output": [
84
+ "text"
85
+ ]
86
+ },
87
+ "capabilities": [
88
+ "streaming",
89
+ "structured_output",
90
+ "vision"
91
+ ],
92
+ "pricing": {},
93
+ "metadata": {
94
+ "owned_by": "organization_owner",
95
+ "publisher": "NullVoider",
96
+ "arch": "deepseek2",
97
+ "compatibility_type": "gguf",
98
+ "quantization": "IQ1_M",
99
+ "state": "not-loaded"
100
+ }
101
+ },
102
+ {
103
+ "id": "qwen/qwen3.6-35b-a3b",
104
+ "name": "qwen/qwen3.6-35b-a3b",
105
+ "provider": "lms",
106
+ "family": "qwen3_5_moe",
107
+ "created_at": null,
108
+ "context_window": 262144,
109
+ "max_output_tokens": null,
110
+ "knowledge_cutoff": null,
111
+ "modalities": {
112
+ "input": [
113
+ "text",
114
+ "image"
115
+ ],
116
+ "output": [
117
+ "text"
118
+ ]
119
+ },
120
+ "capabilities": [
121
+ "streaming",
122
+ "structured_output",
123
+ "function_calling",
124
+ "vision"
125
+ ],
126
+ "pricing": {},
127
+ "metadata": {
128
+ "owned_by": "organization_owner",
129
+ "publisher": "qwen",
130
+ "arch": "qwen3_5_moe",
131
+ "compatibility_type": "mlx",
132
+ "quantization": "4bit",
133
+ "state": "not-loaded"
134
+ }
135
+ },
136
+ {
137
+ "id": "bibleai",
138
+ "name": "bibleai",
139
+ "provider": "lms",
140
+ "family": "gemma4",
141
+ "created_at": null,
142
+ "context_window": 131072,
143
+ "max_output_tokens": null,
144
+ "knowledge_cutoff": null,
145
+ "modalities": {
146
+ "input": [
147
+ "text"
148
+ ],
149
+ "output": [
150
+ "text"
151
+ ]
152
+ },
153
+ "capabilities": [
154
+ "streaming",
155
+ "structured_output"
156
+ ],
157
+ "pricing": {},
158
+ "metadata": {
159
+ "owned_by": "organization_owner",
160
+ "publisher": "rhemabible",
161
+ "arch": "gemma4",
162
+ "compatibility_type": "gguf",
163
+ "quantization": "Q8_0",
164
+ "state": "not-loaded"
165
+ }
166
+ },
167
+ {
168
+ "id": "bible-study-phi3-mini",
169
+ "name": "bible-study-phi3-mini",
170
+ "provider": "lms",
171
+ "family": "llama",
172
+ "created_at": null,
173
+ "context_window": 4096,
174
+ "max_output_tokens": null,
175
+ "knowledge_cutoff": null,
176
+ "modalities": {
177
+ "input": [
178
+ "text"
179
+ ],
180
+ "output": [
181
+ "text"
182
+ ]
183
+ },
184
+ "capabilities": [
185
+ "streaming",
186
+ "structured_output"
187
+ ],
188
+ "pricing": {},
189
+ "metadata": {
190
+ "owned_by": "organization_owner",
191
+ "publisher": "Phora68",
192
+ "arch": "llama",
193
+ "compatibility_type": "gguf",
194
+ "quantization": "Q4_K_M",
195
+ "state": "not-loaded"
196
+ }
197
+ },
198
+ {
199
+ "id": "qwen3-0.6b-bible-assistant",
200
+ "name": "qwen3-0.6b-bible-assistant",
201
+ "provider": "lms",
202
+ "family": "qwen3",
203
+ "created_at": null,
204
+ "context_window": 40960,
205
+ "max_output_tokens": null,
206
+ "knowledge_cutoff": null,
207
+ "modalities": {
208
+ "input": [
209
+ "text"
210
+ ],
211
+ "output": [
212
+ "text"
213
+ ]
214
+ },
215
+ "capabilities": [
216
+ "streaming",
217
+ "structured_output",
218
+ "function_calling"
219
+ ],
220
+ "pricing": {},
221
+ "metadata": {
222
+ "owned_by": "organization_owner",
223
+ "publisher": "juvereturn",
224
+ "arch": "qwen3",
225
+ "compatibility_type": "gguf",
226
+ "quantization": "Q4_K_M",
227
+ "state": "not-loaded"
228
+ }
229
+ },
230
+ {
231
+ "id": "kimi-k2.6-control-vectors",
232
+ "name": "kimi-k2.6-control-vectors",
233
+ "provider": "lms",
234
+ "family": "controlvector",
235
+ "created_at": null,
236
+ "context_window": null,
237
+ "max_output_tokens": null,
238
+ "knowledge_cutoff": null,
239
+ "modalities": {
240
+ "input": [
241
+ "text"
242
+ ],
243
+ "output": [
244
+ "text"
245
+ ]
246
+ },
247
+ "capabilities": [
248
+ "streaming",
249
+ "structured_output"
250
+ ],
251
+ "pricing": {},
252
+ "metadata": {
253
+ "owned_by": "organization_owner",
254
+ "publisher": "gghfez",
255
+ "arch": "controlvector",
256
+ "compatibility_type": "gguf",
257
+ "state": "not-loaded"
258
+ }
259
+ },
260
+ {
261
+ "id": "eloyon/christian-bible-expert-v2.0-24b",
262
+ "name": "eloyon/christian-bible-expert-v2.0-24b",
263
+ "provider": "lms",
264
+ "family": "llama",
265
+ "created_at": null,
266
+ "context_window": 32768,
267
+ "max_output_tokens": null,
268
+ "knowledge_cutoff": null,
269
+ "modalities": {
270
+ "input": [
271
+ "text"
272
+ ],
273
+ "output": [
274
+ "text"
275
+ ]
276
+ },
277
+ "capabilities": [
278
+ "streaming",
279
+ "structured_output"
280
+ ],
281
+ "pricing": {},
282
+ "metadata": {
283
+ "owned_by": "organization_owner",
284
+ "publisher": "EloyOn",
285
+ "arch": "llama",
286
+ "compatibility_type": "gguf",
287
+ "quantization": "Q5_0",
288
+ "state": "not-loaded"
289
+ }
290
+ },
291
+ {
292
+ "id": "eloyon/baptist-christian-bible-expert-v2.0-22b",
293
+ "name": "eloyon/baptist-christian-bible-expert-v2.0-22b",
294
+ "provider": "lms",
295
+ "family": "llama",
296
+ "created_at": null,
297
+ "context_window": 32768,
298
+ "max_output_tokens": null,
299
+ "knowledge_cutoff": null,
300
+ "modalities": {
301
+ "input": [
302
+ "text"
303
+ ],
304
+ "output": [
305
+ "text"
306
+ ]
307
+ },
308
+ "capabilities": [
309
+ "streaming",
310
+ "structured_output",
311
+ "function_calling"
312
+ ],
313
+ "pricing": {},
314
+ "metadata": {
315
+ "owned_by": "organization_owner",
316
+ "publisher": "EloyOn",
317
+ "arch": "llama",
318
+ "compatibility_type": "gguf",
319
+ "quantization": "Q5_0",
320
+ "state": "not-loaded"
321
+ }
322
+ },
323
+ {
324
+ "id": "reformed-christian-bible-expert-v2.1-12b-mlx",
325
+ "name": "reformed-christian-bible-expert-v2.1-12b-mlx",
326
+ "provider": "lms",
327
+ "family": "mistral",
328
+ "created_at": null,
329
+ "context_window": 131072,
330
+ "max_output_tokens": null,
331
+ "knowledge_cutoff": null,
332
+ "modalities": {
333
+ "input": [
334
+ "text"
335
+ ],
336
+ "output": [
337
+ "text"
338
+ ]
339
+ },
340
+ "capabilities": [
341
+ "streaming",
342
+ "structured_output",
343
+ "function_calling"
344
+ ],
345
+ "pricing": {},
346
+ "metadata": {
347
+ "owned_by": "organization_owner",
348
+ "publisher": "brianroberg",
349
+ "arch": "mistral",
350
+ "compatibility_type": "mlx",
351
+ "quantization": "bf16",
352
+ "state": "not-loaded"
353
+ }
354
+ },
355
+ {
356
+ "id": "christian-bible-expert-v2.0-12b",
357
+ "name": "christian-bible-expert-v2.0-12b",
358
+ "provider": "lms",
359
+ "family": "llama",
360
+ "created_at": null,
361
+ "context_window": 131072,
362
+ "max_output_tokens": null,
363
+ "knowledge_cutoff": null,
364
+ "modalities": {
365
+ "input": [
366
+ "text"
367
+ ],
368
+ "output": [
369
+ "text"
370
+ ]
371
+ },
372
+ "capabilities": [
373
+ "streaming",
374
+ "structured_output",
375
+ "function_calling"
376
+ ],
377
+ "pricing": {},
378
+ "metadata": {
379
+ "owned_by": "organization_owner",
380
+ "publisher": "EloyOn",
381
+ "arch": "llama",
382
+ "compatibility_type": "gguf",
383
+ "quantization": "Q5_0",
384
+ "state": "not-loaded"
385
+ }
386
+ },
387
+ {
388
+ "id": "text-embedding-nomic-embed-text-v1.5",
389
+ "name": "text-embedding-nomic-embed-text-v1.5",
390
+ "provider": "lms",
391
+ "family": "nomic-bert",
392
+ "created_at": null,
393
+ "context_window": 2048,
394
+ "max_output_tokens": null,
395
+ "knowledge_cutoff": null,
396
+ "modalities": {
397
+ "input": [
398
+ "text"
399
+ ],
400
+ "output": [
401
+ "embeddings"
402
+ ]
403
+ },
404
+ "capabilities": [],
405
+ "pricing": {},
406
+ "metadata": {
407
+ "owned_by": "organization_owner",
408
+ "publisher": "nomic-ai",
409
+ "arch": "nomic-bert",
410
+ "compatibility_type": "gguf",
411
+ "quantization": "Q4_K_M",
412
+ "state": "not-loaded"
413
+ }
414
+ },
415
+ {
416
+ "id": "openai/gpt-oss-20b",
417
+ "name": "openai/gpt-oss-20b",
418
+ "provider": "lms",
419
+ "family": "gpt_oss",
420
+ "created_at": null,
421
+ "context_window": 131072,
422
+ "max_output_tokens": null,
423
+ "knowledge_cutoff": null,
424
+ "modalities": {
425
+ "input": [
426
+ "text"
427
+ ],
428
+ "output": [
429
+ "text"
430
+ ]
431
+ },
432
+ "capabilities": [
433
+ "streaming",
434
+ "structured_output",
435
+ "function_calling"
436
+ ],
437
+ "pricing": {},
438
+ "metadata": {
439
+ "owned_by": "organization_owner",
440
+ "publisher": "openai",
441
+ "arch": "gpt_oss",
442
+ "compatibility_type": "mlx",
443
+ "quantization": "8bit",
444
+ "state": "not-loaded"
445
+ }
446
+ },
447
+ {
448
+ "id": "nondenominational-christian-bible-expert-v2.0-24b",
449
+ "name": "nondenominational-christian-bible-expert-v2.0-24b",
450
+ "provider": "lms",
451
+ "family": "llama",
452
+ "created_at": null,
453
+ "context_window": 32768,
454
+ "max_output_tokens": null,
455
+ "knowledge_cutoff": null,
456
+ "modalities": {
457
+ "input": [
458
+ "text"
459
+ ],
460
+ "output": [
461
+ "text"
462
+ ]
463
+ },
464
+ "capabilities": [
465
+ "streaming",
466
+ "structured_output"
467
+ ],
468
+ "pricing": {},
469
+ "metadata": {
470
+ "owned_by": "organization_owner",
471
+ "publisher": "mradermacher",
472
+ "arch": "llama",
473
+ "compatibility_type": "gguf",
474
+ "quantization": "Q4_K_S",
475
+ "state": "not-loaded"
476
+ }
477
+ },
478
+ {
479
+ "id": "mradermacher/baptist-christian-bible-expert-v2.0-22b",
480
+ "name": "mradermacher/baptist-christian-bible-expert-v2.0-22b",
481
+ "provider": "lms",
482
+ "family": "llama",
483
+ "created_at": null,
484
+ "context_window": 32768,
485
+ "max_output_tokens": null,
486
+ "knowledge_cutoff": null,
487
+ "modalities": {
488
+ "input": [
489
+ "text"
490
+ ],
491
+ "output": [
492
+ "text"
493
+ ]
494
+ },
495
+ "capabilities": [
496
+ "streaming",
497
+ "structured_output",
498
+ "function_calling"
499
+ ],
500
+ "pricing": {},
501
+ "metadata": {
502
+ "owned_by": "organization_owner",
503
+ "publisher": "mradermacher",
504
+ "arch": "llama",
505
+ "compatibility_type": "gguf",
506
+ "quantization": "Q4_K_S",
507
+ "state": "not-loaded"
508
+ }
509
+ },
510
+ {
511
+ "id": "protestant-christian-bible-expert-v2.0-24b",
512
+ "name": "protestant-christian-bible-expert-v2.0-24b",
513
+ "provider": "lms",
514
+ "family": "llama",
515
+ "created_at": null,
516
+ "context_window": 32768,
517
+ "max_output_tokens": null,
518
+ "knowledge_cutoff": null,
519
+ "modalities": {
520
+ "input": [
521
+ "text"
522
+ ],
523
+ "output": [
524
+ "text"
525
+ ]
526
+ },
527
+ "capabilities": [
528
+ "streaming",
529
+ "structured_output"
530
+ ],
531
+ "pricing": {},
532
+ "metadata": {
533
+ "owned_by": "organization_owner",
534
+ "publisher": "mradermacher",
535
+ "arch": "llama",
536
+ "compatibility_type": "gguf",
537
+ "quantization": "Q4_K_S",
538
+ "state": "not-loaded"
539
+ }
540
+ },
541
+ {
542
+ "id": "mradermacher/christian-bible-expert-v2.0-24b",
543
+ "name": "mradermacher/christian-bible-expert-v2.0-24b",
544
+ "provider": "lms",
545
+ "family": "llama",
546
+ "created_at": null,
547
+ "context_window": 32768,
548
+ "max_output_tokens": null,
549
+ "knowledge_cutoff": null,
550
+ "modalities": {
551
+ "input": [
552
+ "text"
553
+ ],
554
+ "output": [
555
+ "text"
556
+ ]
557
+ },
558
+ "capabilities": [
559
+ "streaming",
560
+ "structured_output"
561
+ ],
562
+ "pricing": {},
563
+ "metadata": {
564
+ "owned_by": "organization_owner",
565
+ "publisher": "mradermacher",
566
+ "arch": "llama",
567
+ "compatibility_type": "gguf",
568
+ "quantization": "Q4_K_S",
569
+ "state": "not-loaded"
570
+ }
571
+ },
572
+ {
573
+ "id": "baptist-christian-bible-expert-v2.0-24b",
574
+ "name": "baptist-christian-bible-expert-v2.0-24b",
575
+ "provider": "lms",
576
+ "family": "llama",
577
+ "created_at": null,
578
+ "context_window": 32768,
579
+ "max_output_tokens": null,
580
+ "knowledge_cutoff": null,
581
+ "modalities": {
582
+ "input": [
583
+ "text"
584
+ ],
585
+ "output": [
586
+ "text"
587
+ ]
588
+ },
589
+ "capabilities": [
590
+ "streaming",
591
+ "structured_output"
592
+ ],
593
+ "pricing": {},
594
+ "metadata": {
595
+ "owned_by": "organization_owner",
596
+ "publisher": "mradermacher",
597
+ "arch": "llama",
598
+ "compatibility_type": "gguf",
599
+ "quantization": "Q4_K_S",
600
+ "state": "not-loaded"
601
+ }
602
+ }
603
+ ]
@@ -0,0 +1,92 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<LMS_API_BASE>/chat/completions"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"openai/gpt-oss-20b","messages":[{"role":"user","content":"Who
9
+ created the programming language Ruby?"}],"stream":false}'
10
+ headers:
11
+ User-Agent:
12
+ - Faraday v2.14.3
13
+ Authorization:
14
+ - Bearer <AUTH_TOKEN>
15
+ Content-Type:
16
+ - application/json
17
+ Accept-Encoding:
18
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
19
+ Accept:
20
+ - "*/*"
21
+ response:
22
+ status:
23
+ code: 200
24
+ message: OK
25
+ headers:
26
+ X-Powered-By:
27
+ - Express
28
+ Content-Type:
29
+ - application/json; charset=utf-8
30
+ Content-Length:
31
+ - '859'
32
+ Etag:
33
+ - W/"35b-PewDTjLQ6JpT6DNfbSOXC+RE95Q"
34
+ Date:
35
+ - Fri, 11 Sep 2026 17:27:55 GMT
36
+ Connection:
37
+ - keep-alive
38
+ Keep-Alive:
39
+ - timeout=5
40
+ body:
41
+ encoding: ASCII-8BIT
42
+ string: !binary |-
43
+ ewogICJpZCI6ICJjaGF0Y21wbC1kNWkyM3Y2dWhhY3l6NnZ3Y29ldm8iLAogICJvYmplY3QiOiAiY2hhdC5jb21wbGV0aW9uIiwKICAiY3JlYXRlZCI6IDE3ODkxNDc2NzMsCiAgIm1vZGVsIjogIm9wZW5haS9ncHQtb3NzLTIwYiIsCiAgImNob2ljZXMiOiBbCiAgICB7CiAgICAgICJpbmRleCI6IDAsCiAgICAgICJtZXNzYWdlIjogewogICAgICAgICJyb2xlIjogImFzc2lzdGFudCIsCiAgICAgICAgImNvbnRlbnQiOiAiUnVieSB3YXMgY3JlYXRlZCBieSAqKll1a2loaXJvIOKAnE1hdHrigJ0gTWF0c3Vtb3RvKiouIEhlIHN0YXJ0ZWQgZGV2ZWxvcGluZyB0aGUgbGFuZ3VhZ2UgaW4gMTk5MyBhbmQgcmVsZWFzZWQgaXQgcHVibGljbHkgaW4gMTk5NSwgYWltaW5nIHRvIGNvbWJpbmUgcGFydHMgb2YgaGlzIGZhdm9yaXRlIGxhbmd1YWdlcyB3aGlsZSBlbXBoYXNpemluZyBwcm9ncmFtbWVyIGhhcHBpbmVzcyBhbmQgcHJvZHVjdGl2aXR5LiIsCiAgICAgICAgInJlYXNvbmluZyI6ICJBbnN3ZXI6IFl1a2loaXJvIE1hdHN1bW90by4iLAogICAgICAgICJ0b29sX2NhbGxzIjogW10KICAgICAgfSwKICAgICAgImxvZ3Byb2JzIjogbnVsbCwKICAgICAgImZpbmlzaF9yZWFzb24iOiAic3RvcCIKICAgIH0KICBdLAogICJ1c2FnZSI6IHsKICAgICJwcm9tcHRfdG9rZW5zIjogNzQsCiAgICAiY29tcGxldGlvbl90b2tlbnMiOiA3MCwKICAgICJ0b3RhbF90b2tlbnMiOiAxNDQsCiAgICAiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgInJlYXNvbmluZ190b2tlbnMiOiA5CiAgICB9CiAgfSwKICAic3RhdHMiOiB7fSwKICAic3lzdGVtX2ZpbmdlcnByaW50IjogIm9wZW5haS9ncHQtb3NzLTIwYiIKfQ==
44
+ recorded_at: Fri, 11 Sep 2026 17:27:55 GMT
45
+ - request:
46
+ method: post
47
+ uri: "<LMS_API_BASE>/chat/completions"
48
+ body:
49
+ encoding: UTF-8
50
+ string: '{"model":"openai/gpt-oss-20b","messages":[{"role":"user","content":"Who
51
+ created the programming language Ruby?"},{"role":"assistant","content":"Ruby
52
+ was created by **Yukihiro “Matz” Matsumoto**. He started developing the language
53
+ in 1993 and released it publicly in 1995, aiming to combine parts of his favorite
54
+ languages while emphasizing programmer happiness and productivity.","reasoning":"Answer:
55
+ Yukihiro Matsumoto.","reasoning_content":"Answer: Yukihiro Matsumoto."},{"role":"user","content":"What
56
+ year was Ruby first released?"}],"stream":false}'
57
+ headers:
58
+ User-Agent:
59
+ - Faraday v2.14.3
60
+ Authorization:
61
+ - Bearer <AUTH_TOKEN>
62
+ Content-Type:
63
+ - application/json
64
+ Accept-Encoding:
65
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
66
+ Accept:
67
+ - "*/*"
68
+ response:
69
+ status:
70
+ code: 200
71
+ message: OK
72
+ headers:
73
+ X-Powered-By:
74
+ - Express
75
+ Content-Type:
76
+ - application/json; charset=utf-8
77
+ Content-Length:
78
+ - '699'
79
+ Etag:
80
+ - W/"2bb-swU6OvSQEMJL7SbMLy00YyLs2b8"
81
+ Date:
82
+ - Fri, 11 Sep 2026 17:27:56 GMT
83
+ Connection:
84
+ - keep-alive
85
+ Keep-Alive:
86
+ - timeout=5
87
+ body:
88
+ encoding: ASCII-8BIT
89
+ string: !binary |-
90
+ ewogICJpZCI6ICJjaGF0Y21wbC1pczV2Z3hiczY1bzl4ZmNzOTdxaDUiLAogICJvYmplY3QiOiAiY2hhdC5jb21wbGV0aW9uIiwKICAiY3JlYXRlZCI6IDE3ODkxNDc2NzUsCiAgIm1vZGVsIjogIm9wZW5haS9ncHQtb3NzLTIwYiIsCiAgImNob2ljZXMiOiBbCiAgICB7CiAgICAgICJpbmRleCI6IDAsCiAgICAgICJtZXNzYWdlIjogewogICAgICAgICJyb2xlIjogImFzc2lzdGFudCIsCiAgICAgICAgImNvbnRlbnQiOiAiUnVieSB3YXMgZmlyc3QgcmVsZWFzZWQgaW4gKioxOTk1KiogKHNwZWNpZmljYWxseSwgdmVyc2lvbuKArzAuOTUgb24gQXVndXN0IDI1LCAxOTk1KS4iLAogICAgICAgICJyZWFzb25pbmciOiAiTmVlZCBhbnN3ZXI6IDE5OTUuIiwKICAgICAgICAidG9vbF9jYWxscyI6IFtdCiAgICAgIH0sCiAgICAgICJsb2dwcm9icyI6IG51bGwsCiAgICAgICJmaW5pc2hfcmVhc29uIjogInN0b3AiCiAgICB9CiAgXSwKICAidXNhZ2UiOiB7CiAgICAicHJvbXB0X3Rva2VucyI6IDE0MiwKICAgICJjb21wbGV0aW9uX3Rva2VucyI6IDQ0LAogICAgInRvdGFsX3Rva2VucyI6IDE4NiwKICAgICJjb21wbGV0aW9uX3Rva2Vuc19kZXRhaWxzIjogewogICAgICAicmVhc29uaW5nX3Rva2VucyI6IDcKICAgIH0KICB9LAogICJzdGF0cyI6IHt9LAogICJzeXN0ZW1fZmluZ2VycHJpbnQiOiAib3BlbmFpL2dwdC1vc3MtMjBiIgp9
91
+ recorded_at: Fri, 11 Sep 2026 17:27:56 GMT
92
+ recorded_with: VCR 6.4.0