ruby_llm-providers-lms 0.1.1 → 0.2.1

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 +128 -0
  3. data/README.md +467 -104
  4. data/lib/ruby_llm/providers/lms/anthropic_messages.rb +28 -0
  5. data/lib/ruby_llm/providers/lms/endpoints.rb +18 -0
  6. data/lib/ruby_llm/providers/lms/model_management.rb +59 -0
  7. data/lib/ruby_llm/providers/lms/models.rb +44 -12
  8. data/lib/ruby_llm/providers/lms/native_chat/conversation.rb +93 -0
  9. data/lib/ruby_llm/providers/lms/native_chat/streaming.rb +67 -0
  10. data/lib/ruby_llm/providers/lms/native_chat.rb +134 -0
  11. data/lib/ruby_llm/providers/lms/native_v1.rb +97 -0
  12. data/lib/ruby_llm/providers/lms/responses.rb +47 -0
  13. data/lib/ruby_llm/providers/lms/version.rb +15 -0
  14. data/lib/ruby_llm/providers/lms.rb +51 -1
  15. data/models.json +69 -454
  16. metadata +15 -40
  17. data/.flayignore +0 -1
  18. data/.github/workflows/ci.yml +0 -29
  19. data/.github/workflows/gitleaks.yml +0 -22
  20. data/.github/workflows/release.yml +0 -36
  21. data/.overcommit.yml +0 -31
  22. data/.rspec +0 -2
  23. data/.rubocop.yml +0 -29
  24. data/Archspec.rb +0 -14
  25. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_handle_a_multi_turn_conversation.yml +0 -92
  26. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_have_a_basic_conversation.yml +0 -45
  27. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_use_tools.yml +0 -129
  28. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_returns_the_raw_response.yml +0 -73
  29. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_supports_streaming_responses.yml +0 -81
  30. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_can_have_a_basic_conversation.yml +0 -73
  31. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_structured_output.yml +0 -73
  32. data/spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_the_raw_response.yml +0 -73
  33. data/spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_one_text.yml +0 -828
  34. data/spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_several_texts.yml +0 -2375
  35. data/spec/ruby_llm/chat_schema_spec.rb +0 -30
  36. data/spec/ruby_llm/chat_spec.rb +0 -35
  37. data/spec/ruby_llm/chat_streaming_spec.rb +0 -22
  38. data/spec/ruby_llm/chat_tools_spec.rb +0 -30
  39. data/spec/ruby_llm/embedding_spec.rb +0 -49
  40. data/spec/ruby_llm/image_spec.rb +0 -23
  41. data/spec/ruby_llm/models_spec.rb +0 -11
  42. data/spec/ruby_llm/moderation_spec.rb +0 -22
  43. data/spec/ruby_llm/providers/lms/connection_guard_spec.rb +0 -47
  44. data/spec/ruby_llm/providers/lms_spec.rb +0 -153
  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 -24
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.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - madbomber
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 2.0.0.rc1
18
+ version: 2.0.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 2.0.0.rc1
25
+ version: 2.0.0
26
26
  description: Adds LM Studio provider support to RubyLLM via LM Studio's OpenAI-compatible
27
27
  local server, with model listings enriched from LM Studio's native REST API.
28
28
  email:
@@ -31,54 +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
45
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
46
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
47
49
  - models.json
48
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_handle_a_multi_turn_conversation.yml
49
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_have_a_basic_conversation.yml
50
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_can_use_tools.yml
51
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_returns_the_raw_response.yml
52
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_openai_gpt_oss_20b_supports_streaming_responses.yml
53
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_can_have_a_basic_conversation.yml
54
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_structured_output.yml
55
- - spec/fixtures/vcr_cassettes/rubyllm_chat_lms_qwen3_0_6b_bible_assistant_returns_the_raw_response.yml
56
- - spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_one_text.yml
57
- - spec/fixtures/vcr_cassettes/rubyllm_embedding_lms_text_embedding_nomic_embed_text_v1_5_embeds_several_texts.yml
58
- - spec/ruby_llm/chat_schema_spec.rb
59
- - spec/ruby_llm/chat_spec.rb
60
- - spec/ruby_llm/chat_streaming_spec.rb
61
- - spec/ruby_llm/chat_tools_spec.rb
62
- - spec/ruby_llm/embedding_spec.rb
63
- - spec/ruby_llm/image_spec.rb
64
- - spec/ruby_llm/models_spec.rb
65
- - spec/ruby_llm/moderation_spec.rb
66
- - spec/ruby_llm/providers/lms/connection_guard_spec.rb
67
- - spec/ruby_llm/providers/lms_spec.rb
68
- - spec/ruby_llm/rerank_spec.rb
69
- - spec/ruby_llm/speech_spec.rb
70
- - spec/ruby_llm/video_spec.rb
71
- - spec/spec_helper.rb
72
- - spec/support/models.rb
73
- - spec/support/rubyllm_configuration.rb
74
- - spec/support/vcr_configuration.rb
75
50
  homepage: https://github.com/madbomber/ruby_llm-providers-lms
76
51
  licenses:
77
52
  - MIT
78
53
  metadata:
79
54
  homepage_uri: https://github.com/madbomber/ruby_llm-providers-lms
80
55
  source_code_uri: https://github.com/madbomber/ruby_llm-providers-lms
81
- 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
82
57
  bug_tracker_uri: https://github.com/madbomber/ruby_llm-providers-lms/issues
83
58
  rubygems_mfa_required: 'true'
84
59
  rdoc_options: []
@@ -95,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
70
  - !ruby/object:Gem::Version
96
71
  version: '0'
97
72
  requirements: []
98
- rubygems_version: 4.0.20
73
+ rubygems_version: 4.0.21
99
74
  specification_version: 4
100
75
  summary: RubyLLM provider for LM Studio.
101
76
  test_files: []
data/.flayignore DELETED
@@ -1 +0,0 @@
1
- spec/support/streaming_error_helpers.rb
@@ -1,29 +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
- # Non-EOL Rubies only; must match the gemspec's required_ruby_version.
20
- ruby-version: ["3.3", "3.4", "4.0"]
21
- steps:
22
- - uses: actions/checkout@v6
23
-
24
- - uses: ruby/setup-ruby@v1
25
- with:
26
- ruby-version: ${{ matrix.ruby-version }}
27
- bundler-cache: true
28
-
29
- - run: bundle exec rake
@@ -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.3
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: "http://localhost:1234/v1/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: "http://localhost:1234/v1/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: "http://localhost:1234/v1/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: "http://localhost:1234/v1/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: "http://localhost:1234/v1/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: "http://localhost:1234/v1/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