ruby_llm-providers-qiniu 0.1.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 (90) hide show
  1. checksums.yaml +7 -0
  2. data/.flayignore +1 -0
  3. data/.github/workflows/ci.yml +28 -0
  4. data/.github/workflows/gitleaks.yml +23 -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 +114 -0
  12. data/lib/ruby_llm/providers/qiniu.rb +134 -0
  13. data/models.json +859 -0
  14. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_can_handle_a_multi_turn_conversation.yml +154 -0
  15. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_can_have_a_basic_conversation.yml +61 -0
  16. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_can_use_tools.yml +121 -0
  17. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_returns_structured_output.yml +62 -0
  18. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_returns_the_raw_response.yml +66 -0
  19. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_supports_streaming_responses.yml +105 -0
  20. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_can_handle_a_multi_turn_conversation.yml +127 -0
  21. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_can_have_a_basic_conversation.yml +58 -0
  22. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_can_use_tools.yml +119 -0
  23. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_returns_structured_output.yml +59 -0
  24. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_returns_the_raw_response.yml +58 -0
  25. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_supports_streaming_responses.yml +89 -0
  26. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_can_handle_a_multi_turn_conversation.yml +195 -0
  27. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_can_have_a_basic_conversation.yml +96 -0
  28. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_can_use_tools.yml +165 -0
  29. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_returns_structured_output.yml +97 -0
  30. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_returns_the_raw_response.yml +97 -0
  31. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_supports_streaming_responses.yml +70 -0
  32. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_can_handle_a_multi_turn_conversation.yml +194 -0
  33. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_can_have_a_basic_conversation.yml +96 -0
  34. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_can_use_tools.yml +165 -0
  35. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_returns_structured_output.yml +97 -0
  36. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_returns_the_raw_response.yml +97 -0
  37. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_supports_streaming_responses.yml +70 -0
  38. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_can_handle_a_multi_turn_conversation.yml +199 -0
  39. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_can_have_a_basic_conversation.yml +97 -0
  40. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_can_use_tools.yml +166 -0
  41. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_returns_structured_output.yml +98 -0
  42. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_returns_the_raw_response.yml +98 -0
  43. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_supports_streaming_responses.yml +71 -0
  44. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_can_handle_a_multi_turn_conversation.yml +419 -0
  45. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_can_have_a_basic_conversation.yml +210 -0
  46. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_can_use_tools.yml +468 -0
  47. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_returns_structured_output.yml +229 -0
  48. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_returns_the_raw_response.yml +210 -0
  49. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_supports_streaming_responses.yml +102 -0
  50. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_can_handle_a_multi_turn_conversation.yml +421 -0
  51. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_can_have_a_basic_conversation.yml +157 -0
  52. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_can_use_tools.yml +469 -0
  53. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_can_handle_a_multi_turn_conversation.yml +422 -0
  54. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_can_have_a_basic_conversation.yml +211 -0
  55. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_can_use_tools.yml +469 -0
  56. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_returns_structured_output.yml +230 -0
  57. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_returns_the_raw_response.yml +211 -0
  58. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_supports_streaming_responses.yml +102 -0
  59. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_returns_structured_output.yml +230 -0
  60. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_returns_the_raw_response.yml +157 -0
  61. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_supports_streaming_responses.yml +102 -0
  62. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_can_handle_a_multi_turn_conversation.yml +389 -0
  63. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_can_have_a_basic_conversation.yml +241 -0
  64. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_can_use_tools.yml +437 -0
  65. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_returns_structured_output.yml +214 -0
  66. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_returns_the_raw_response.yml +241 -0
  67. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_supports_streaming_responses.yml +106 -0
  68. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_can_handle_a_multi_turn_conversation.yml +389 -0
  69. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_can_have_a_basic_conversation.yml +202 -0
  70. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_can_use_tools.yml +437 -0
  71. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_returns_structured_output.yml +221 -0
  72. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_returns_the_raw_response.yml +202 -0
  73. data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_supports_streaming_responses.yml +112 -0
  74. data/spec/ruby_llm/chat_schema_spec.rb +30 -0
  75. data/spec/ruby_llm/chat_spec.rb +35 -0
  76. data/spec/ruby_llm/chat_streaming_spec.rb +22 -0
  77. data/spec/ruby_llm/chat_tools_spec.rb +32 -0
  78. data/spec/ruby_llm/embedding_spec.rb +49 -0
  79. data/spec/ruby_llm/image_spec.rb +23 -0
  80. data/spec/ruby_llm/models_spec.rb +11 -0
  81. data/spec/ruby_llm/moderation_spec.rb +22 -0
  82. data/spec/ruby_llm/providers/qiniu_spec.rb +103 -0
  83. data/spec/ruby_llm/rerank_spec.rb +23 -0
  84. data/spec/ruby_llm/speech_spec.rb +25 -0
  85. data/spec/ruby_llm/video_spec.rb +27 -0
  86. data/spec/spec_helper.rb +26 -0
  87. data/spec/support/models.rb +30 -0
  88. data/spec/support/rubyllm_configuration.rb +14 -0
  89. data/spec/support/vcr_configuration.rb +16 -0
  90. metadata +147 -0
@@ -0,0 +1,154 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"Who
9
+ created the programming language Ruby?"}]}],"stream":false,"max_tokens":128000}'
10
+ headers:
11
+ User-Agent:
12
+ - Faraday v2.14.4
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
+ Content-Type:
27
+ - application/json
28
+ Access-Control-Allow-Credentials:
29
+ - 'true'
30
+ Access-Control-Allow-Headers:
31
+ - ''
32
+ Access-Control-Allow-Methods:
33
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
34
+ Access-Control-Allow-Origin:
35
+ - ''
36
+ Access-Control-Expose-Headers:
37
+ - Http_x_reqid
38
+ Http-X-Reqid:
39
+ - chatptmsg-8a71a5ce97aa4df5b6b4c81ed3ae16bc
40
+ X-Request-Id:
41
+ - chatptmsg-8a71a5ce97aa4df5b6b4c81ed3ae16bc
42
+ Server:
43
+ - APISIX
44
+ Cache-Control:
45
+ - no-cache
46
+ Content-Length:
47
+ - '1632'
48
+ Connection:
49
+ - keep-alive
50
+ Date:
51
+ - Mon, 28 Sep 2026 07:54:18 GMT
52
+ Eo-Log-Uuid:
53
+ - '18423766280816035556'
54
+ Eo-Cache-Status:
55
+ - MISS
56
+ body:
57
+ encoding: UTF-8
58
+ string: '{"model":"anthropic/claude-sonnet-5","id":"msg_bdrk_j7uhnxi5kd4khksu3oqiufl3jh7b4kvqnu6rpzhmcy2h2d6tjvfq","type":"message","role":"assistant","content":[{"type":"text","text":"Ruby
59
+ was created by **Yukihiro Matsumoto**, often known by his nickname **\"Matz.\"**
60
+ He is a Japanese computer scientist and software programmer.\n\nHere are some
61
+ key details about Ruby''s creation:\n\n* **When:** Matsumoto began working
62
+ on Ruby in **1993**, and it was first publicly released in **1995**.\n* **Goal:**
63
+ He wanted to create a language that was more powerful than Perl and more object-oriented
64
+ than Python. His main design philosophy was to prioritize **programmer happiness
65
+ and productivity**, aiming to make coding a natural, enjoyable, and intuitive
66
+ experience rather than just focusing on machine efficiency.\n* **Influences:**
67
+ Ruby was influenced by several other languages, including Perl, Smalltalk,
68
+ Eiffel, Ada, and Lisp.\n* **Name Origin:** The name \"Ruby\" was chosen (over
69
+ an initial alternative name, \"Coral\") because it is the birthstone for June,
70
+ and was suggested by one of Matsumoto''s colleagues.\n\nMatsumoto remains
71
+ highly involved in the language''s development today, and Ruby has grown to
72
+ become widely known, especially due to the popular **Ruby on Rails** web framework."}],"container":null,"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":18,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":386,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard"}}'
73
+ recorded_at: Mon, 28 Sep 2026 07:54:24 GMT
74
+ - request:
75
+ method: post
76
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
77
+ body:
78
+ encoding: UTF-8
79
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"Who
80
+ created the programming language Ruby?"}]},{"role":"assistant","content":[{"type":"text","text":"Ruby
81
+ was created by **Yukihiro Matsumoto**, often known by his nickname **\"Matz.\"**
82
+ He is a Japanese computer scientist and software programmer.\n\nHere are some
83
+ key details about Ruby''s creation:\n\n* **When:** Matsumoto began working
84
+ on Ruby in **1993**, and it was first publicly released in **1995**.\n* **Goal:**
85
+ He wanted to create a language that was more powerful than Perl and more object-oriented
86
+ than Python. His main design philosophy was to prioritize **programmer happiness
87
+ and productivity**, aiming to make coding a natural, enjoyable, and intuitive
88
+ experience rather than just focusing on machine efficiency.\n* **Influences:**
89
+ Ruby was influenced by several other languages, including Perl, Smalltalk,
90
+ Eiffel, Ada, and Lisp.\n* **Name Origin:** The name \"Ruby\" was chosen (over
91
+ an initial alternative name, \"Coral\") because it is the birthstone for June,
92
+ and was suggested by one of Matsumoto''s colleagues.\n\nMatsumoto remains
93
+ highly involved in the language''s development today, and Ruby has grown to
94
+ become widely known, especially due to the popular **Ruby on Rails** web framework."}]},{"role":"user","content":[{"type":"text","text":"What
95
+ year was Ruby first released?"}]}],"stream":false,"max_tokens":128000}'
96
+ headers:
97
+ User-Agent:
98
+ - Faraday v2.14.4
99
+ Authorization:
100
+ - Bearer <AUTH_TOKEN>
101
+ Content-Type:
102
+ - application/json
103
+ Accept-Encoding:
104
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
105
+ Accept:
106
+ - "*/*"
107
+ response:
108
+ status:
109
+ code: 200
110
+ message: OK
111
+ headers:
112
+ Content-Type:
113
+ - application/json
114
+ Access-Control-Allow-Credentials:
115
+ - 'true'
116
+ Access-Control-Allow-Headers:
117
+ - ''
118
+ Access-Control-Allow-Methods:
119
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
120
+ Access-Control-Allow-Origin:
121
+ - ''
122
+ Access-Control-Expose-Headers:
123
+ - Http_x_reqid
124
+ Http-X-Reqid:
125
+ - chatptmsg-4f60ff06c9c3448cb49ecb2003cc5661
126
+ X-Request-Id:
127
+ - chatptmsg-4f60ff06c9c3448cb49ecb2003cc5661
128
+ Server:
129
+ - APISIX
130
+ Cache-Control:
131
+ - no-cache
132
+ Content-Length:
133
+ - '1543'
134
+ Connection:
135
+ - keep-alive
136
+ Date:
137
+ - Mon, 28 Sep 2026 07:54:24 GMT
138
+ Eo-Log-Uuid:
139
+ - '4123777483562112421'
140
+ Eo-Cache-Status:
141
+ - MISS
142
+ body:
143
+ encoding: UTF-8
144
+ string: '{"model":"anthropic/claude-sonnet-5","id":"msg_bdrk_fwveo7mbisd53w6ndp4muieoxzhsmn5je4mf3v2zeoewheqkuqnq","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EoQCCnkIEhABGAIqQK/NK6waJHRE+PHGKzmWGc/bB0lvprSAIxVNni0bz5R0IiAQ9yAJ8q/TnLXsiXSw//lQs38oAVb93xqDeUTmE0kyDmNsYXVkZS1zYWZmcm9uOABCCHRoaW5raW5nWgw5OTIzODI1ODI0NDGoAbO66NUGEgxayZb5TIT6di6PSHAaDFvXLox2mDcZcH2jFyIwMf3KbSbUbTHDdM/NRnAd8X27wEBLS1cX7l1vmthBMAkhyYQUBpqtwVfTOURFajJ9Kjm8qFzwRNjw41SSFzUWeWiVBbcfb4lIfukDbiwhCGWDNu1QEjahxYU1b/Ko3BgTjV65O6ASzWWObuIYAQ=="},{"type":"text","text":"Ruby
145
+ was first released to the public in **December 1995**.\n\nHere''s a bit more
146
+ context on its timeline:\n\n* **Development Start:** Yukihiro Matsumoto began
147
+ designing and working on the language in **February 1993**.\n* **Public Release:**
148
+ The first public version was released in Japan in December 1995.\n* **Global
149
+ Spread:** Ruby remained relatively unknown outside of Japan for several years
150
+ due to the lack of English documentation. It began gaining significant international
151
+ popularity in the early 2000s, and its growth accelerated dramatically after
152
+ the release of the **Ruby on Rails** framework in 2004."}],"container":null,"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":416,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":206,"output_tokens_details":{"thinking_tokens":15},"service_tier":"standard"}}'
153
+ recorded_at: Mon, 28 Sep 2026 07:54:29 GMT
154
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,61 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"What''s
9
+ 2 + 2?"}]}],"stream":false,"max_tokens":128000}'
10
+ headers:
11
+ User-Agent:
12
+ - Faraday v2.14.4
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
+ Content-Type:
27
+ - application/json
28
+ Access-Control-Allow-Credentials:
29
+ - 'true'
30
+ Access-Control-Allow-Headers:
31
+ - ''
32
+ Access-Control-Allow-Methods:
33
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
34
+ Access-Control-Allow-Origin:
35
+ - ''
36
+ Access-Control-Expose-Headers:
37
+ - Http_x_reqid
38
+ Http-X-Reqid:
39
+ - chatptmsg-fbff86290fb642d0a947d6e0984ede8a
40
+ X-Request-Id:
41
+ - chatptmsg-fbff86290fb642d0a947d6e0984ede8a
42
+ Server:
43
+ - APISIX
44
+ Cache-Control:
45
+ - no-cache
46
+ Content-Length:
47
+ - '530'
48
+ Connection:
49
+ - keep-alive
50
+ Date:
51
+ - Mon, 28 Sep 2026 07:54:59 GMT
52
+ Eo-Log-Uuid:
53
+ - '7099403250553221310'
54
+ Eo-Cache-Status:
55
+ - MISS
56
+ body:
57
+ encoding: UTF-8
58
+ string: '{"model":"anthropic/claude-sonnet-5","id":"msg_bdrk_ec4fzemixamfotovcwnju24nmeicguw7ting5l5nh5nfcw7fwqvq","type":"message","role":"assistant","content":[{"type":"text","text":"2
59
+ + 2 = 4"}],"container":null,"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":15,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":11,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard"}}'
60
+ recorded_at: Mon, 28 Sep 2026 07:55:02 GMT
61
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,121 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"What''s
9
+ the weather in Berlin? Use 52.5200, 13.4050."}]}],"stream":false,"max_tokens":128000,"tools":[{"name":"weather","description":"Gets
10
+ current weather for a location","input_schema":{"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.4
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
+ Content-Type:
28
+ - application/json
29
+ Access-Control-Allow-Credentials:
30
+ - 'true'
31
+ Access-Control-Allow-Headers:
32
+ - ''
33
+ Access-Control-Allow-Methods:
34
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
35
+ Access-Control-Allow-Origin:
36
+ - ''
37
+ Access-Control-Expose-Headers:
38
+ - Http_x_reqid
39
+ Http-X-Reqid:
40
+ - chatptmsg-38567ad22ad3402b934200c80941bd6a
41
+ X-Request-Id:
42
+ - chatptmsg-38567ad22ad3402b934200c80941bd6a
43
+ Server:
44
+ - APISIX
45
+ Cache-Control:
46
+ - no-cache
47
+ Content-Length:
48
+ - '1051'
49
+ Connection:
50
+ - keep-alive
51
+ Date:
52
+ - Mon, 28 Sep 2026 08:15:12 GMT
53
+ Eo-Log-Uuid:
54
+ - '4622289159287387617'
55
+ Eo-Cache-Status:
56
+ - MISS
57
+ body:
58
+ encoding: UTF-8
59
+ string: '{"model":"anthropic/claude-sonnet-5","id":"msg_bdrk_qwvkg6gp57u3zmj6kvvmqqlkmf7b5zzjg3bge3g6gy2wpmgzg3la","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EpACCnkIEhABGAIqQL5fzUD9sVa7b6dPdx463EFOZKPUXscg6tR6x/cRvN11z/7geYR2O5jXGznRvLgg8YYWh0GrsOORegiIc91uBNAyDmNsYXVkZS1zYWZmcm9uOABCCHRoaW5raW5nWgw5OTIzODI1ODI0NDGoAZPE6NUGEgwRxRAPgsvhEVd1jQQaDGitimYcXoxkLQcPhCIwUNptAUlR/F3trl50sE7sDXAXBe3T1zqkKCzCwUMAOh1qGqaB8zBvsSMBUztwWGL8KkUplgAEpxQOs8Gdhta33pWXVN5rqHU4LvTGPCx+Q3ip3xrz6qVOHBW5/qjhCPntoGh6jfCDoUAoIcpYvaFkzHHcmBxe0uwYAQ=="},{"type":"tool_use","id":"toolu_bdrk_01HBSNEnNJfs6ojbhg9SPtKs","name":"weather","input":{"latitude":"52.5200","longitude":"13.4050"}}],"container":null,"stop_reason":"tool_use","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":511,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":98,"output_tokens_details":{"thinking_tokens":19},"service_tier":"standard"}}'
60
+ recorded_at: Mon, 28 Sep 2026 08:15:15 GMT
61
+ - request:
62
+ method: post
63
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
64
+ body:
65
+ encoding: UTF-8
66
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"What''s
67
+ the weather in Berlin? Use 52.5200, 13.4050."}]},{"role":"assistant","content":[{"type":"thinking","thinking":"","signature":"EpACCnkIEhABGAIqQL5fzUD9sVa7b6dPdx463EFOZKPUXscg6tR6x/cRvN11z/7geYR2O5jXGznRvLgg8YYWh0GrsOORegiIc91uBNAyDmNsYXVkZS1zYWZmcm9uOABCCHRoaW5raW5nWgw5OTIzODI1ODI0NDGoAZPE6NUGEgwRxRAPgsvhEVd1jQQaDGitimYcXoxkLQcPhCIwUNptAUlR/F3trl50sE7sDXAXBe3T1zqkKCzCwUMAOh1qGqaB8zBvsSMBUztwWGL8KkUplgAEpxQOs8Gdhta33pWXVN5rqHU4LvTGPCx+Q3ip3xrz6qVOHBW5/qjhCPntoGh6jfCDoUAoIcpYvaFkzHHcmBxe0uwYAQ=="},{"type":"tool_use","id":"toolu_bdrk_01HBSNEnNJfs6ojbhg9SPtKs","name":"weather","input":{"latitude":"52.5200","longitude":"13.4050"}}]},{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_bdrk_01HBSNEnNJfs6ojbhg9SPtKs","content":[{"type":"text","text":"Current
68
+ weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h"}]}]}],"stream":false,"max_tokens":128000,"tools":[{"name":"weather","description":"Gets
69
+ current weather for a location","input_schema":{"type":"object","properties":{"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}},"required":["latitude","longitude"],"additionalProperties":false,"strict":true}}]}'
70
+ headers:
71
+ User-Agent:
72
+ - Faraday v2.14.4
73
+ Authorization:
74
+ - Bearer <AUTH_TOKEN>
75
+ Content-Type:
76
+ - application/json
77
+ Accept-Encoding:
78
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
79
+ Accept:
80
+ - "*/*"
81
+ response:
82
+ status:
83
+ code: 200
84
+ message: OK
85
+ headers:
86
+ Content-Type:
87
+ - application/json
88
+ Access-Control-Allow-Credentials:
89
+ - 'true'
90
+ Access-Control-Allow-Headers:
91
+ - ''
92
+ Access-Control-Allow-Methods:
93
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
94
+ Access-Control-Allow-Origin:
95
+ - ''
96
+ Access-Control-Expose-Headers:
97
+ - Http_x_reqid
98
+ Http-X-Reqid:
99
+ - chatptmsg-f422b2e36a54469fa54cad6ff87db2d5
100
+ X-Request-Id:
101
+ - chatptmsg-f422b2e36a54469fa54cad6ff87db2d5
102
+ Server:
103
+ - APISIX
104
+ Cache-Control:
105
+ - no-cache
106
+ Content-Length:
107
+ - '616'
108
+ Connection:
109
+ - keep-alive
110
+ Date:
111
+ - Mon, 28 Sep 2026 08:15:15 GMT
112
+ Eo-Log-Uuid:
113
+ - '10257978368420543588'
114
+ Eo-Cache-Status:
115
+ - MISS
116
+ body:
117
+ encoding: ASCII-8BIT
118
+ string: !binary |-
119
+ eyJtb2RlbCI6ImFudGhyb3BpYy9jbGF1ZGUtc29ubmV0LTUiLCJpZCI6Im1zZ19iZHJrXzZ0a3JlenFla2Fqb2h5Y2twcGltamI0dHpjdXU2eXVxenpuYW9iZ29xZDJqcnh6dHVrbnEiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJUaGUgY3VycmVudCB3ZWF0aGVyIGluIEJlcmxpbiAoNTIuNTIwMCwgMTMuNDA1MCkgaXMgKioxNcKwQyoqIHdpdGggd2luZCBzcGVlZHMgb2YgKioxMCBrbS9oKiouIn1dLCJjb250YWluZXIiOm51bGwsInN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJzdG9wX2RldGFpbHMiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NjQ1LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6NDQsIm91dHB1dF90b2tlbnNfZGV0YWlscyI6eyJ0aGlua2luZ190b2tlbnMiOjB9LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCJ9fQ==
120
+ recorded_at: Mon, 28 Sep 2026 08:15:18 GMT
121
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,62 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"Generate
9
+ a person named John who is 30 years old"}]}],"stream":false,"max_tokens":128000,"output_config":{"format":{"type":"json_schema","schema":{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer"}},"required":["name","age"],"additionalProperties":false}}}}'
10
+ headers:
11
+ User-Agent:
12
+ - Faraday v2.14.4
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
+ Content-Type:
27
+ - application/json
28
+ Access-Control-Allow-Credentials:
29
+ - 'true'
30
+ Access-Control-Allow-Headers:
31
+ - ''
32
+ Access-Control-Allow-Methods:
33
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
34
+ Access-Control-Allow-Origin:
35
+ - ''
36
+ Access-Control-Expose-Headers:
37
+ - Http_x_reqid
38
+ Http-X-Reqid:
39
+ - chatptmsg-b92d81f274744156b0b4b9a4f1eb3047
40
+ Request-Id:
41
+ - req_01WtTSjQ1tOoJq8bUsU4UJt3
42
+ X-Request-Id:
43
+ - chatptmsg-b92d81f274744156b0b4b9a4f1eb3047
44
+ Server:
45
+ - APISIX
46
+ Cache-Control:
47
+ - no-cache
48
+ Content-Length:
49
+ - '563'
50
+ Connection:
51
+ - keep-alive
52
+ Date:
53
+ - Mon, 28 Sep 2026 09:59:56 GMT
54
+ Eo-Log-Uuid:
55
+ - '7034863705874616068'
56
+ Eo-Cache-Status:
57
+ - MISS
58
+ body:
59
+ encoding: UTF-8
60
+ string: '{"model":"anthropic/claude-sonnet-5","id":"msg_011CfVeCv4iEJ3HeSFXB8trY","type":"message","role":"assistant","content":[{"type":"text","text":"{\"age\":30,\"name\":\"John\"}"}],"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":228,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":15,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard","inference_geo":"global"},"container":null,"diagnostics":null}'
61
+ recorded_at: Mon, 28 Sep 2026 10:00:00 GMT
62
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,66 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"What
9
+ is the capital of France?"}]}],"stream":false,"max_tokens":128000}'
10
+ headers:
11
+ User-Agent:
12
+ - Faraday v2.14.4
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
+ Content-Type:
27
+ - application/json
28
+ Access-Control-Allow-Credentials:
29
+ - 'true'
30
+ Access-Control-Allow-Headers:
31
+ - ''
32
+ Access-Control-Allow-Methods:
33
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
34
+ Access-Control-Allow-Origin:
35
+ - ''
36
+ Access-Control-Expose-Headers:
37
+ - Http_x_reqid
38
+ Http-X-Reqid:
39
+ - chatptmsg-b2a38a419284451682dadb09821f036d
40
+ X-Request-Id:
41
+ - chatptmsg-b2a38a419284451682dadb09821f036d
42
+ Server:
43
+ - APISIX
44
+ Cache-Control:
45
+ - no-cache
46
+ Content-Length:
47
+ - '934'
48
+ Connection:
49
+ - keep-alive
50
+ Date:
51
+ - Mon, 28 Sep 2026 07:54:56 GMT
52
+ Eo-Log-Uuid:
53
+ - '8753657181452655309'
54
+ Eo-Cache-Status:
55
+ - MISS
56
+ body:
57
+ encoding: UTF-8
58
+ string: '{"model":"anthropic/claude-sonnet-5","id":"msg_bdrk_vmeubati7scluhu7czxrt5kwhbtzdyod6epnd53tghly2ipja4cq","type":"message","role":"assistant","content":[{"type":"text","text":"#
59
+ Paris\n\n**Paris** is the capital of France.\n\nA few quick facts:\n- It''s
60
+ located in the north-central part of the country, on the Seine River\n- It''s
61
+ the largest city in France by population\n- Known for landmarks like the Eiffel
62
+ Tower, Louvre Museum, and Notre-Dame Cathedral\n- Serves as France''s political,
63
+ economic, and cultural center\n\nLet me know if you''d like more information
64
+ about Paris or France!"}],"container":null,"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"usage":{"input_tokens":14,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":138,"output_tokens_details":{"thinking_tokens":0},"service_tier":"standard"}}'
65
+ recorded_at: Mon, 28 Sep 2026 07:54:59 GMT
66
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,105 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/anthropic/v1/messages"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"anthropic/claude-sonnet-5","messages":[{"role":"user","content":[{"type":"text","text":"Count
9
+ from 1 to 3"}]}],"stream":true,"max_tokens":128000}'
10
+ headers:
11
+ Accept-Encoding:
12
+ - identity
13
+ User-Agent:
14
+ - Faraday v2.14.4
15
+ Authorization:
16
+ - Bearer <AUTH_TOKEN>
17
+ Content-Type:
18
+ - application/json
19
+ Accept:
20
+ - "*/*"
21
+ response:
22
+ status:
23
+ code: 200
24
+ message: OK
25
+ headers:
26
+ Content-Type:
27
+ - text/event-stream
28
+ Access-Control-Allow-Credentials:
29
+ - 'true'
30
+ Access-Control-Allow-Headers:
31
+ - ''
32
+ Access-Control-Allow-Methods:
33
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
34
+ Access-Control-Allow-Origin:
35
+ - ''
36
+ Access-Control-Expose-Headers:
37
+ - Http_x_reqid
38
+ Http-X-Reqid:
39
+ - chatptmsg-5068ecac64064bfbb48b8e0e4a199ee4
40
+ X-Request-Id:
41
+ - chatptmsg-5068ecac64064bfbb48b8e0e4a199ee4
42
+ Server:
43
+ - APISIX
44
+ Cache-Control:
45
+ - no-cache
46
+ Transfer-Encoding:
47
+ - chunked
48
+ Connection:
49
+ - keep-alive
50
+ Date:
51
+ - Mon, 28 Sep 2026 07:50:43 GMT
52
+ Eo-Log-Uuid:
53
+ - '14195755689834313710'
54
+ Eo-Cache-Status:
55
+ - MISS
56
+ body:
57
+ encoding: UTF-8
58
+ string: |+
59
+ event: message_start
60
+ data: {"type":"message_start","message":{"model":"anthropic/claude-sonnet-5","id":"msg_bdrk_plzfjsyjbrvqc57wrxzgy3ztkmx75p5snmkxnikdmc664mf32h6q","type":"message","role":"assistant","content":[],"container":null,"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":15,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard"}}}
61
+
62
+
63
+ event: content_block_start
64
+ data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}}
65
+
66
+
67
+ event: content_block_delta
68
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":""}}
69
+
70
+
71
+ event: content_block_delta
72
+ data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"EvoBCnkIEhABGAIqQDjmmPD6pEMeOfoT+z0mwOy+oCzqOtQlzvradJ205TDTIKY6bpMTyUWXCOraXSc5VGRfwkIwHZFLhGjI/YDeYMEyDmNsYXVkZS1zYWZmcm9uOABCCHRoaW5raW5nWgw5OTIzODI1ODI0NDGoAde46NUGEgxsojjKadirRdFoK10aDKU7YuQvRv94zQABcyIw9bGPtvGiIEUbm79eT233+TLxqI21STT/9wQ4WVXRyA1VEM7xAYkOYa+Uct/UysJjKi9bDwr8CgJ7OnJvai8p39BuDyUJSnhY7su/dTNb8Smab+/hD2KWFUJbB8ItzCe0yRgB"}}
73
+
74
+
75
+ event: content_block_stop
76
+ data: {"type":"content_block_stop","index":0}
77
+
78
+
79
+ event: content_block_start
80
+ data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}}
81
+
82
+
83
+ event: content_block_delta
84
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"1,"}}
85
+
86
+
87
+ event: content_block_delta
88
+ data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":" 2, 3"}}
89
+
90
+
91
+ event: content_block_stop
92
+ data: {"type":"content_block_stop","index":1}
93
+
94
+
95
+ event: message_delta
96
+ data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null,"stop_details":null,"container":null},"usage":{"input_tokens":15,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":25,"output_tokens_details":{"thinking_tokens":16}}}
97
+
98
+
99
+ event: message_stop
100
+ data: {"type":"message_stop","amazon-bedrock-invocationMetrics":{"inputTokenCount":15,"outputTokenCount":25,"invocationLatency":2990,"firstByteLatency":2679}}
101
+
102
+
103
+ recorded_at: Mon, 28 Sep 2026 07:50:47 GMT
104
+ recorded_with: VCR 6.4.0
105
+ ...