ruby_llm-providers-lms 0.1.0 → 0.2.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +121 -0
  3. data/README.md +514 -24
  4. data/lib/ruby_llm/providers/lms/anthropic_messages.rb +28 -0
  5. data/lib/ruby_llm/providers/lms/connection_guard.rb +27 -0
  6. data/lib/ruby_llm/providers/lms/endpoints.rb +18 -0
  7. data/lib/ruby_llm/providers/lms/model_management.rb +59 -0
  8. data/lib/ruby_llm/providers/lms/models.rb +44 -12
  9. data/lib/ruby_llm/providers/lms/native_chat/conversation.rb +93 -0
  10. data/lib/ruby_llm/providers/lms/native_chat/streaming.rb +67 -0
  11. data/lib/ruby_llm/providers/lms/native_chat.rb +134 -0
  12. data/lib/ruby_llm/providers/lms/native_v1.rb +97 -0
  13. data/lib/ruby_llm/providers/lms/responses.rb +47 -0
  14. data/lib/ruby_llm/providers/lms/version.rb +15 -0
  15. data/lib/ruby_llm/providers/lms.rb +57 -1
  16. data/models.json +69 -454
  17. metadata +14 -37
  18. data/.flayignore +0 -1
  19. data/.github/workflows/ci.yml +0 -32
  20. data/.github/workflows/gitleaks.yml +0 -22
  21. data/.github/workflows/release.yml +0 -36
  22. data/.overcommit.yml +0 -31
  23. data/.rspec +0 -2
  24. data/.rubocop.yml +0 -29
  25. data/Archspec.rb +0 -14
  26. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_handle_a_multi_turn_conversation.yml +0 -92
  27. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_have_a_basic_conversation.yml +0 -45
  28. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_use_tools.yml +0 -129
  29. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_returns_the_raw_response.yml +0 -73
  30. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_supports_streaming_responses.yml +0 -81
  31. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_can_have_a_basic_conversation.yml +0 -73
  32. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_structured_output.yml +0 -73
  33. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_the_raw_response.yml +0 -73
  34. data/spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_one_text.yml +0 -828
  35. data/spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_several_texts.yml +0 -2375
  36. data/spec/ruby_llm/chat_schema_spec.rb +0 -30
  37. data/spec/ruby_llm/chat_spec.rb +0 -35
  38. data/spec/ruby_llm/chat_streaming_spec.rb +0 -22
  39. data/spec/ruby_llm/chat_tools_spec.rb +0 -30
  40. data/spec/ruby_llm/embedding_spec.rb +0 -49
  41. data/spec/ruby_llm/image_spec.rb +0 -23
  42. data/spec/ruby_llm/models_spec.rb +0 -11
  43. data/spec/ruby_llm/moderation_spec.rb +0 -22
  44. data/spec/ruby_llm/providers/lms_spec.rb +0 -149
  45. data/spec/ruby_llm/rerank_spec.rb +0 -23
  46. data/spec/ruby_llm/speech_spec.rb +0 -25
  47. data/spec/ruby_llm/video_spec.rb +0 -27
  48. data/spec/spec_helper.rb +0 -26
  49. data/spec/support/models.rb +0 -29
  50. data/spec/support/rubyllm_configuration.rb +0 -14
  51. data/spec/support/vcr_configuration.rb +0 -16
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_llm-providers-lms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - madbomber
@@ -31,52 +31,29 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
- - ".flayignore"
35
- - ".github/workflows/ci.yml"
36
- - ".github/workflows/gitleaks.yml"
37
- - ".github/workflows/release.yml"
38
- - ".overcommit.yml"
39
- - ".rspec"
40
- - ".rubocop.yml"
41
- - Archspec.rb
34
+ - CHANGELOG.md
42
35
  - LICENSE
43
36
  - README.md
44
37
  - lib/ruby_llm/providers/lms.rb
38
+ - lib/ruby_llm/providers/lms/anthropic_messages.rb
39
+ - lib/ruby_llm/providers/lms/connection_guard.rb
40
+ - lib/ruby_llm/providers/lms/endpoints.rb
41
+ - lib/ruby_llm/providers/lms/model_management.rb
45
42
  - lib/ruby_llm/providers/lms/models.rb
43
+ - lib/ruby_llm/providers/lms/native_chat.rb
44
+ - lib/ruby_llm/providers/lms/native_chat/conversation.rb
45
+ - lib/ruby_llm/providers/lms/native_chat/streaming.rb
46
+ - lib/ruby_llm/providers/lms/native_v1.rb
47
+ - lib/ruby_llm/providers/lms/responses.rb
48
+ - lib/ruby_llm/providers/lms/version.rb
46
49
  - models.json
47
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_handle_a_multi_turn_conversation.yml
48
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_have_a_basic_conversation.yml
49
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_use_tools.yml
50
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_returns_the_raw_response.yml
51
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_supports_streaming_responses.yml
52
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_can_have_a_basic_conversation.yml
53
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_structured_output.yml
54
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_the_raw_response.yml
55
- - spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_one_text.yml
56
- - spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_several_texts.yml
57
- - spec/ruby_llm/chat_schema_spec.rb
58
- - spec/ruby_llm/chat_spec.rb
59
- - spec/ruby_llm/chat_streaming_spec.rb
60
- - spec/ruby_llm/chat_tools_spec.rb
61
- - spec/ruby_llm/embedding_spec.rb
62
- - spec/ruby_llm/image_spec.rb
63
- - spec/ruby_llm/models_spec.rb
64
- - spec/ruby_llm/moderation_spec.rb
65
- - spec/ruby_llm/providers/lms_spec.rb
66
- - spec/ruby_llm/rerank_spec.rb
67
- - spec/ruby_llm/speech_spec.rb
68
- - spec/ruby_llm/video_spec.rb
69
- - spec/spec_helper.rb
70
- - spec/support/models.rb
71
- - spec/support/rubyllm_configuration.rb
72
- - spec/support/vcr_configuration.rb
73
50
  homepage: https://github.com/madbomber/ruby_llm-providers-lms
74
51
  licenses:
75
52
  - MIT
76
53
  metadata:
77
54
  homepage_uri: https://github.com/madbomber/ruby_llm-providers-lms
78
55
  source_code_uri: https://github.com/madbomber/ruby_llm-providers-lms
79
- changelog_uri: https://github.com/madbomber/ruby_llm-providers-lms/releases
56
+ changelog_uri: https://github.com/madbomber/ruby_llm-providers-lms/blob/main/CHANGELOG.md
80
57
  bug_tracker_uri: https://github.com/madbomber/ruby_llm-providers-lms/issues
81
58
  rubygems_mfa_required: 'true'
82
59
  rdoc_options: []
@@ -86,7 +63,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
63
  requirements:
87
64
  - - ">="
88
65
  - !ruby/object:Gem::Version
89
- version: '3.1'
66
+ version: '3.3'
90
67
  required_rubygems_version: !ruby/object:Gem::Requirement
91
68
  requirements:
92
69
  - - ">="
data/.flayignore DELETED
@@ -1 +0,0 @@
1
- spec/support/streaming_error_helpers.rb
@@ -1,32 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- pull_request:
5
- branches: ["main"]
6
- push:
7
- branches: ["main"]
8
-
9
- permissions:
10
- contents: read
11
-
12
- jobs:
13
- test:
14
- name: Ruby ${{ matrix.ruby-version }}
15
- runs-on: ubuntu-latest
16
- strategy:
17
- fail-fast: false
18
- matrix:
19
- ruby-version: ["3.1", "3.2", "3.3", "3.4", "4.0"]
20
- steps:
21
- - uses: actions/checkout@v6
22
-
23
- - uses: ruby/setup-ruby@v1
24
- with:
25
- ruby-version: ${{ matrix.ruby-version }}
26
- bundler-cache: true
27
-
28
- - run: bundle exec rake
29
- if: matrix.ruby-version != '3.1'
30
-
31
- - run: bundle exec rake rubocop flay spec
32
- if: matrix.ruby-version == '3.1'
@@ -1,22 +0,0 @@
1
- name: Gitleaks
2
-
3
- on:
4
- pull_request:
5
- branches: ["main"]
6
- push:
7
- branches: ["main"]
8
-
9
- permissions:
10
- contents: read
11
-
12
- jobs:
13
- scan:
14
- runs-on: ubuntu-latest
15
- steps:
16
- - uses: actions/checkout@v6
17
- with:
18
- fetch-depth: 0
19
-
20
- - uses: gitleaks/gitleaks-action@v2
21
- env:
22
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,36 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- push:
5
- tags:
6
- - "v*"
7
-
8
- permissions:
9
- contents: read
10
-
11
- jobs:
12
- publish:
13
- name: Build and publish
14
- runs-on: ubuntu-latest
15
- steps:
16
- - uses: actions/checkout@v6
17
-
18
- - uses: ruby/setup-ruby@v1
19
- with:
20
- ruby-version: "3.4"
21
- bundler-cache: true
22
-
23
- - run: bundle exec rake
24
-
25
- - name: Build gem
26
- run: gem build ruby_llm-providers-lms.gemspec
27
-
28
- - name: Publish to RubyGems
29
- run: |
30
- mkdir -p "$HOME/.gem"
31
- touch "$HOME/.gem/credentials"
32
- chmod 0600 "$HOME/.gem/credentials"
33
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > "$HOME/.gem/credentials"
34
- gem push ruby_llm-providers-lms-*.gem
35
- env:
36
- GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_AUTH_TOKEN }}
data/.overcommit.yml DELETED
@@ -1,31 +0,0 @@
1
- PreCommit:
2
- RuboCop:
3
- enabled: true
4
- auto_correct: true
5
- on_warn: fail
6
-
7
- Flay:
8
- enabled: true
9
- include:
10
- - lib/**/*.rb
11
- - spec/**/*.rb
12
- mass_threshold: 70
13
-
14
- ArchSpec:
15
- enabled: true
16
- command: ['bundle', 'exec', 'archspec', 'check']
17
- on_warn: fail
18
-
19
- RSpec:
20
- enabled: true
21
- command: ['bundle', 'exec', 'rspec']
22
- on_warn: fail
23
-
24
- TrailingWhitespace:
25
- enabled: true
26
- auto_correct: true
27
-
28
- Gitleaks:
29
- enabled: true
30
- required_executable: gitleaks
31
- command: ['gitleaks', 'protect', '--staged', '--redact', '--verbose']
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --require spec_helper
2
- --format progress
data/.rubocop.yml DELETED
@@ -1,29 +0,0 @@
1
- plugins:
2
- - rubocop-performance
3
- - rubocop-rake
4
- - rubocop-rspec
5
-
6
- AllCops:
7
- NewCops: enable
8
- TargetRubyVersion: 3.1
9
- Exclude:
10
- - Archspec.rb
11
- - vendor/**/*
12
- - gemfiles/**/*
13
- SuggestExtensions: false
14
-
15
- Metrics/AbcSize:
16
- Max: 80
17
- Metrics/MethodLength:
18
- Max: 40
19
- CountAsOne:
20
- - array
21
- - hash
22
- - heredoc
23
- Metrics/BlockLength:
24
- Exclude:
25
- - spec/**/*.rb
26
- RSpec/ExampleLength:
27
- Enabled: false
28
- RSpec/MultipleExpectations:
29
- Enabled: false
data/Archspec.rb DELETED
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'lib/**/*.rb'
4
-
5
- component :provider,
6
- in: %w[
7
- lib/ruby_llm/providers/lms.rb
8
- lib/ruby_llm/providers/lms/**/*.rb
9
- ],
10
- namespace: 'RubyLLM::Providers::LMS'
11
-
12
- provider.cannot_reference_constants 'RSpec', 'WebMock', 'VCR'
13
-
14
- preset :ruby_conventions
@@ -1,92 +0,0 @@
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
@@ -1,45 +0,0 @@
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":"What''s
9
- 2 + 2?"}],"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
- - '623'
32
- Etag:
33
- - W/"26f-kDMLUbsR80Kkz1Ypkhx/iqdGgq8"
34
- Date:
35
- - Fri, 11 Sep 2026 17:27:56 GMT
36
- Connection:
37
- - keep-alive
38
- Keep-Alive:
39
- - timeout=5
40
- body:
41
- encoding: ASCII-8BIT
42
- string: !binary |-
43
- ewogICJpZCI6ICJjaGF0Y21wbC10ZzNjczZlbXZ3OG95d3Q1Zjh6cDgiLAogICJvYmplY3QiOiAiY2hhdC5jb21wbGV0aW9uIiwKICAiY3JlYXRlZCI6IDE3ODkxNDc2NzYsCiAgIm1vZGVsIjogIm9wZW5haS9ncHQtb3NzLTIwYiIsCiAgImNob2ljZXMiOiBbCiAgICB7CiAgICAgICJpbmRleCI6IDAsCiAgICAgICJtZXNzYWdlIjogewogICAgICAgICJyb2xlIjogImFzc2lzdGFudCIsCiAgICAgICAgImNvbnRlbnQiOiAiMuKAryvigK8y4oCvPeKArzQuIiwKICAgICAgICAicmVhc29uaW5nIjogIlNpbXBsZSBtYXRoLiIsCiAgICAgICAgInRvb2xfY2FsbHMiOiBbXQogICAgICB9LAogICAgICAibG9ncHJvYnMiOiBudWxsLAogICAgICAiZmluaXNoX3JlYXNvbiI6ICJzdG9wIgogICAgfQogIF0sCiAgInVzYWdlIjogewogICAgInByb21wdF90b2tlbnMiOiA3NCwKICAgICJjb21wbGV0aW9uX3Rva2VucyI6IDIzLAogICAgInRvdGFsX3Rva2VucyI6IDk3LAogICAgImNvbXBsZXRpb25fdG9rZW5zX2RldGFpbHMiOiB7CiAgICAgICJyZWFzb25pbmdfdG9rZW5zIjogMwogICAgfQogIH0sCiAgInN0YXRzIjoge30sCiAgInN5c3RlbV9maW5nZXJwcmludCI6ICJvcGVuYWkvZ3B0LW9zcy0yMGIiCn0=
44
- recorded_at: Fri, 11 Sep 2026 17:27:56 GMT
45
- recorded_with: VCR 6.4.0
@@ -1,129 +0,0 @@
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":"What''s
9
- the weather in Berlin? Use 52.5200, 13.4050."}],"stream":false,"tools":[{"type":"function","function":{"name":"","description":"Gets
10
- current weather for a location","parameters":{"type":"object","properties":{"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}},"required":["latitude","longitude"],"additionalProperties":false,"strict":true}}}]}'
11
- headers:
12
- User-Agent:
13
- - Faraday v2.14.3
14
- Authorization:
15
- - Bearer <AUTH_TOKEN>
16
- Content-Type:
17
- - application/json
18
- Accept-Encoding:
19
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
20
- Accept:
21
- - "*/*"
22
- response:
23
- status:
24
- code: 200
25
- message: OK
26
- headers:
27
- X-Powered-By:
28
- - Express
29
- Content-Type:
30
- - application/json; charset=utf-8
31
- Content-Length:
32
- - '879'
33
- Etag:
34
- - W/"36f-cxGzH3DZRnQutMMM+dsgqVyBZjg"
35
- Date:
36
- - Fri, 11 Sep 2026 17:28:04 GMT
37
- Connection:
38
- - keep-alive
39
- Keep-Alive:
40
- - timeout=5
41
- body:
42
- encoding: UTF-8
43
- string: |-
44
- {
45
- "id": "chatcmpl-80f0o9tdkt82gtn9t6q8ta",
46
- "object": "chat.completion",
47
- "created": 1789147683,
48
- "model": "openai/gpt-oss-20b",
49
- "choices": [
50
- {
51
- "index": 0,
52
- "message": {
53
- "role": "assistant",
54
- "content": "",
55
- "reasoning": "We need to call weather function.",
56
- "tool_calls": [
57
- {
58
- "type": "function",
59
- "id": "117069919",
60
- "function": {
61
- "name": "",
62
- "arguments": "{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"
63
- }
64
- }
65
- ]
66
- },
67
- "logprobs": null,
68
- "finish_reason": "tool_calls"
69
- }
70
- ],
71
- "usage": {
72
- "prompt_tokens": 146,
73
- "completion_tokens": 42,
74
- "total_tokens": 188,
75
- "completion_tokens_details": {
76
- "reasoning_tokens": 7
77
- }
78
- },
79
- "stats": {},
80
- "system_fingerprint": "openai/gpt-oss-20b"
81
- }
82
- recorded_at: Fri, 11 Sep 2026 17:28:04 GMT
83
- - request:
84
- method: post
85
- uri: "<LMS_API_BASE>/chat/completions"
86
- body:
87
- encoding: UTF-8
88
- string: '{"model":"openai/gpt-oss-20b","messages":[{"role":"user","content":"What''s
89
- the weather in Berlin? Use 52.5200, 13.4050."},{"role":"assistant","content":"","tool_calls":[{"id":"117069919","type":"function","function":{"name":"","arguments":"{\"latitude\":\"52.5200\",\"longitude\":\"13.4050\"}"}}],"reasoning":"We
90
- need to call weather function.","reasoning_content":"We need to call weather
91
- function."},{"role":"tool","content":"Current weather at 52.5200, 13.4050:
92
- 15°C, Wind: 10 km/h","tool_call_id":"117069919"}],"stream":false,"tools":[{"type":"function","function":{"name":"","description":"Gets
93
- current weather for a location","parameters":{"type":"object","properties":{"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}},"required":["latitude","longitude"],"additionalProperties":false,"strict":true}}}]}'
94
- headers:
95
- User-Agent:
96
- - Faraday v2.14.3
97
- Authorization:
98
- - Bearer <AUTH_TOKEN>
99
- Content-Type:
100
- - application/json
101
- Accept-Encoding:
102
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
103
- Accept:
104
- - "*/*"
105
- response:
106
- status:
107
- code: 200
108
- message: OK
109
- headers:
110
- X-Powered-By:
111
- - Express
112
- Content-Type:
113
- - application/json; charset=utf-8
114
- Content-Length:
115
- - '781'
116
- Etag:
117
- - W/"30d-lBARRVGlBGe9sqYIa3IIttf2Jg0"
118
- Date:
119
- - Fri, 11 Sep 2026 17:28:06 GMT
120
- Connection:
121
- - keep-alive
122
- Keep-Alive:
123
- - timeout=5
124
- body:
125
- encoding: ASCII-8BIT
126
- string: !binary |-
127
- ewogICJpZCI6ICJjaGF0Y21wbC1ud3NrZTh6ODhjdmQxazFrZHV6dSIsCiAgIm9iamVjdCI6ICJjaGF0LmNvbXBsZXRpb24iLAogICJjcmVhdGVkIjogMTc4OTE0NzY4NCwKICAibW9kZWwiOiAib3BlbmFpL2dwdC1vc3MtMjBiIiwKICAiY2hvaWNlcyI6IFsKICAgIHsKICAgICAgImluZGV4IjogMCwKICAgICAgIm1lc3NhZ2UiOiB7CiAgICAgICAgInJvbGUiOiAiYXNzaXN0YW50IiwKICAgICAgICAiY29udGVudCI6ICIqKkJlcmxpbiAoNTIuNTIwMOKAr04sIDEzLjQwNTDigK9FKSoqICBcbi0gKipUZW1wZXJhdHVyZToqKiB+MTXigK/CsEMgIFxuLSAqKldpbmQ6KiogfjEw4oCva20vaCAgXG5cblRoZSBmb3JlY2FzdCBpcyBtaWxkIHdpdGggY2xlYXIgc2tpZXMuIEVuam95IHlvdXIgZGF5ISIsCiAgICAgICAgInJlYXNvbmluZyI6ICJXZSBuZWVkIHRvIHJlc3BvbmQgd2l0aCB3ZWF0aGVyLiIsCiAgICAgICAgInRvb2xfY2FsbHMiOiBbXQogICAgICB9LAogICAgICAibG9ncHJvYnMiOiBudWxsLAogICAgICAiZmluaXNoX3JlYXNvbiI6ICJzdG9wIgogICAgfQogIF0sCiAgInVzYWdlIjogewogICAgInByb21wdF90b2tlbnMiOiAyMTMsCiAgICAiY29tcGxldGlvbl90b2tlbnMiOiA2NywKICAgICJ0b3RhbF90b2tlbnMiOiAyODAsCiAgICAiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgInJlYXNvbmluZ190b2tlbnMiOiA3CiAgICB9CiAgfSwKICAic3RhdHMiOiB7fSwKICAic3lzdGVtX2ZpbmdlcnByaW50IjogIm9wZW5haS9ncHQtb3NzLTIwYiIKfQ==
128
- recorded_at: Fri, 11 Sep 2026 17:28:06 GMT
129
- recorded_with: VCR 6.4.0
@@ -1,73 +0,0 @@
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":"What
9
- is the capital of France?"}],"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
- - '648'
32
- Etag:
33
- - W/"288-2+2eF5UFjDweyMb8HxN1pATbogM"
34
- Date:
35
- - Fri, 11 Sep 2026 17:27:53 GMT
36
- Connection:
37
- - keep-alive
38
- Keep-Alive:
39
- - timeout=5
40
- body:
41
- encoding: UTF-8
42
- string: |-
43
- {
44
- "id": "chatcmpl-sli6wgxdxqbgf872enruvr",
45
- "object": "chat.completion",
46
- "created": 1789147670,
47
- "model": "openai/gpt-oss-20b",
48
- "choices": [
49
- {
50
- "index": 0,
51
- "message": {
52
- "role": "assistant",
53
- "content": "The capital of France is Paris.",
54
- "reasoning": "Answer straightforward.",
55
- "tool_calls": []
56
- },
57
- "logprobs": null,
58
- "finish_reason": "stop"
59
- }
60
- ],
61
- "usage": {
62
- "prompt_tokens": 74,
63
- "completion_tokens": 20,
64
- "total_tokens": 94,
65
- "completion_tokens_details": {
66
- "reasoning_tokens": 3
67
- }
68
- },
69
- "stats": {},
70
- "system_fingerprint": "openai/gpt-oss-20b"
71
- }
72
- recorded_at: Fri, 11 Sep 2026 17:27:53 GMT
73
- recorded_with: VCR 6.4.0