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,70 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/vertex/v1/models/gemini-3.1-flash-lite-preview:streamGenerateContent?alt=sse"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"contents":[{"role":"user","parts":[{"text":"Count from 1 to 3"}]}],"generationConfig":{}}'
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v2.14.4
12
+ Authorization:
13
+ - Bearer <AUTH_TOKEN>
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Content-Type:
26
+ - text/event-stream
27
+ Access-Control-Allow-Credentials:
28
+ - 'true'
29
+ Access-Control-Allow-Headers:
30
+ - ''
31
+ Access-Control-Allow-Methods:
32
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
33
+ Access-Control-Allow-Origin:
34
+ - ''
35
+ Access-Control-Expose-Headers:
36
+ - Http_x_reqid
37
+ Content-Disposition:
38
+ - attachment
39
+ Http-X-Reqid:
40
+ - chatptvtx-9ec24a9a7a914d04835d3344d2ef84d7
41
+ X-Request-Id:
42
+ - chatptvtx-9ec24a9a7a914d04835d3344d2ef84d7
43
+ Server:
44
+ - APISIX
45
+ Cache-Control:
46
+ - no-cache
47
+ Transfer-Encoding:
48
+ - chunked
49
+ Connection:
50
+ - keep-alive
51
+ Date:
52
+ - Mon, 28 Sep 2026 09:11:56 GMT
53
+ Eo-Log-Uuid:
54
+ - '15923481858230019085'
55
+ Eo-Cache-Status:
56
+ - MISS
57
+ body:
58
+ encoding: UTF-8
59
+ string: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\":
60
+ [{\"text\": \"1, 2, 3\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\":
61
+ \"gemini-3.1-flash-lite\",\"createTime\": \"2026-09-28T09:11:57.233808Z\",\"responseId\":
62
+ \"XS-6atCiDq7K998PlMiwkAE\"}\r\n\r\ndata: {\"candidates\": [{\"content\":
63
+ {\"role\": \"model\",\"parts\": [{\"text\": \"\",\"thoughtSignature\": \"AY89a18tEA+xrFOo2YNCGl3nllWUyYMbL6GHwxFtk/mCNpeLHr4JYz8FSwiOtb24Mmo6Gvfd4QT/qIGaIj6WOniV9oqQkhSA1DyjDnWAtCWuFfaJ8J7VHpQC\"}]},\"finishReason\":
64
+ \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 7,\"candidatesTokenCount\":
65
+ 7,\"totalTokenCount\": 14,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\":
66
+ [{\"modality\": \"TEXT\",\"tokenCount\": 7}],\"candidatesTokensDetails\":
67
+ [{\"modality\": \"TEXT\",\"tokenCount\": 7}]},\"modelVersion\": \"gemini-3.1-flash-lite\",\"createTime\":
68
+ \"2026-09-28T09:11:57.233808Z\",\"responseId\": \"XS-6atCiDq7K998PlMiwkAE\"}\r\n\r\n"
69
+ recorded_at: Mon, 28 Sep 2026 09:11:58 GMT
70
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,194 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/vertex/v1/models/google/gemini-3.1-flash-lite:generateContent"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"contents":[{"role":"user","parts":[{"text":"Who created the programming
9
+ language Ruby?"}]}],"generationConfig":{}}'
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; charset=UTF-8
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
+ - chatptvtx-a8b86692c8064b3ebc872394f6c8b061
40
+ X-Request-Id:
41
+ - chatptvtx-a8b86692c8064b3ebc872394f6c8b061
42
+ Server:
43
+ - APISIX
44
+ Cache-Control:
45
+ - no-cache
46
+ Content-Length:
47
+ - '1011'
48
+ Connection:
49
+ - keep-alive
50
+ Date:
51
+ - Mon, 28 Sep 2026 07:55:27 GMT
52
+ Eo-Log-Uuid:
53
+ - '9728074568940328106'
54
+ Eo-Cache-Status:
55
+ - MISS
56
+ body:
57
+ encoding: UTF-8
58
+ string: |
59
+ {
60
+ "candidates": [
61
+ {
62
+ "content": {
63
+ "role": "model",
64
+ "parts": [
65
+ {
66
+ "text": "The programming language Ruby was created by **Yukihiro Matsumoto** (often known in the community as **\"Matz\"**). He released the first version of the language in 1995.",
67
+ "thoughtSignature": "AY89a198v9m9H0C0B+HUaD3Gj4i4Wm4iu2M70IPZMbUS8mzXa+/EpeG2GJZ0yy4Sb8W1uZT6TX63rEwhjnc+AslhESINDpAldbZLc3tOzMUP/fah2uVevCGg"
68
+ }
69
+ ]
70
+ },
71
+ "finishReason": "STOP"
72
+ }
73
+ ],
74
+ "usageMetadata": {
75
+ "promptTokenCount": 7,
76
+ "candidatesTokenCount": 42,
77
+ "totalTokenCount": 49,
78
+ "trafficType": "ON_DEMAND",
79
+ "promptTokensDetails": [
80
+ {
81
+ "modality": "TEXT",
82
+ "tokenCount": 7
83
+ }
84
+ ],
85
+ "candidatesTokensDetails": [
86
+ {
87
+ "modality": "TEXT",
88
+ "tokenCount": 42
89
+ }
90
+ ]
91
+ },
92
+ "modelVersion": "gemini-3.1-flash-lite",
93
+ "createTime": "2026-09-28T07:55:28.527135Z",
94
+ "responseId": "cB26ap-WIPWV9LsPyM_MiAs"
95
+ }
96
+ recorded_at: Mon, 28 Sep 2026 07:55:30 GMT
97
+ - request:
98
+ method: post
99
+ uri: "<QINIU_BASE_URL>/bypass/vertex/v1/models/google/gemini-3.1-flash-lite:generateContent"
100
+ body:
101
+ encoding: UTF-8
102
+ string: '{"contents":[{"role":"user","parts":[{"text":"Who created the programming
103
+ language Ruby?"}]},{"role":"model","parts":[{"thought":true,"thoughtSignature":"AY89a198v9m9H0C0B+HUaD3Gj4i4Wm4iu2M70IPZMbUS8mzXa+/EpeG2GJZ0yy4Sb8W1uZT6TX63rEwhjnc+AslhESINDpAldbZLc3tOzMUP/fah2uVevCGg"},{"text":"The
104
+ programming language Ruby was created by **Yukihiro Matsumoto** (often known
105
+ in the community as **\"Matz\"**). He released the first version of the language
106
+ in 1995."}]},{"role":"user","parts":[{"text":"What year was Ruby first released?"}]}],"generationConfig":{}}'
107
+ headers:
108
+ User-Agent:
109
+ - Faraday v2.14.4
110
+ Authorization:
111
+ - Bearer <AUTH_TOKEN>
112
+ Content-Type:
113
+ - application/json
114
+ Accept-Encoding:
115
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
116
+ Accept:
117
+ - "*/*"
118
+ response:
119
+ status:
120
+ code: 200
121
+ message: OK
122
+ headers:
123
+ Content-Type:
124
+ - application/json; charset=UTF-8
125
+ Access-Control-Allow-Credentials:
126
+ - 'true'
127
+ Access-Control-Allow-Headers:
128
+ - ''
129
+ Access-Control-Allow-Methods:
130
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
131
+ Access-Control-Allow-Origin:
132
+ - ''
133
+ Access-Control-Expose-Headers:
134
+ - Http_x_reqid
135
+ Http-X-Reqid:
136
+ - chatptvtx-7308fcdeab52474ba4fa8cb14f4906cf
137
+ X-Request-Id:
138
+ - chatptvtx-7308fcdeab52474ba4fa8cb14f4906cf
139
+ Server:
140
+ - APISIX
141
+ Cache-Control:
142
+ - no-cache
143
+ Content-Length:
144
+ - '892'
145
+ Connection:
146
+ - keep-alive
147
+ Date:
148
+ - Mon, 28 Sep 2026 07:55:30 GMT
149
+ Eo-Log-Uuid:
150
+ - '17032516712876033456'
151
+ Eo-Cache-Status:
152
+ - MISS
153
+ body:
154
+ encoding: UTF-8
155
+ string: |
156
+ {
157
+ "candidates": [
158
+ {
159
+ "content": {
160
+ "role": "model",
161
+ "parts": [
162
+ {
163
+ "text": "Ruby was first released on **December 21, 1995**.",
164
+ "thoughtSignature": "AY89a1+BSKrtSCouEjrBgavshtQyEimUhZSEKG6SWCnTn8JSlMpZNwPEgKStQlbugVI/mI5nLtvhXd+hOkRTKx62mHN8AfZiwDtMU0rspuk8JSbqEWgyNgI1"
165
+ }
166
+ ]
167
+ },
168
+ "finishReason": "STOP"
169
+ }
170
+ ],
171
+ "usageMetadata": {
172
+ "promptTokenCount": 56,
173
+ "candidatesTokenCount": 17,
174
+ "totalTokenCount": 73,
175
+ "trafficType": "ON_DEMAND",
176
+ "promptTokensDetails": [
177
+ {
178
+ "modality": "TEXT",
179
+ "tokenCount": 56
180
+ }
181
+ ],
182
+ "candidatesTokensDetails": [
183
+ {
184
+ "modality": "TEXT",
185
+ "tokenCount": 17
186
+ }
187
+ ]
188
+ },
189
+ "modelVersion": "gemini-3.1-flash-lite",
190
+ "createTime": "2026-09-28T07:55:31.662571Z",
191
+ "responseId": "cx26aqu4KNCZ4_UPjayRmAg"
192
+ }
193
+ recorded_at: Mon, 28 Sep 2026 07:55:32 GMT
194
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,96 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/vertex/v1/models/google/gemini-3.1-flash-lite:generateContent"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"contents":[{"role":"user","parts":[{"text":"What''s 2 + 2?"}]}],"generationConfig":{}}'
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v2.14.4
12
+ Authorization:
13
+ - Bearer <AUTH_TOKEN>
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Content-Type:
26
+ - application/json; charset=UTF-8
27
+ Access-Control-Allow-Credentials:
28
+ - 'true'
29
+ Access-Control-Allow-Headers:
30
+ - ''
31
+ Access-Control-Allow-Methods:
32
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
33
+ Access-Control-Allow-Origin:
34
+ - ''
35
+ Access-Control-Expose-Headers:
36
+ - Http_x_reqid
37
+ Http-X-Reqid:
38
+ - chatptvtx-9c63456f43234c8197fac1cb3359aeae
39
+ X-Request-Id:
40
+ - chatptvtx-9c63456f43234c8197fac1cb3359aeae
41
+ Server:
42
+ - APISIX
43
+ Cache-Control:
44
+ - no-cache
45
+ Content-Length:
46
+ - '850'
47
+ Connection:
48
+ - keep-alive
49
+ Date:
50
+ - Mon, 28 Sep 2026 07:54:29 GMT
51
+ Eo-Log-Uuid:
52
+ - '5370398606444757460'
53
+ Eo-Cache-Status:
54
+ - MISS
55
+ body:
56
+ encoding: UTF-8
57
+ string: |
58
+ {
59
+ "candidates": [
60
+ {
61
+ "content": {
62
+ "role": "model",
63
+ "parts": [
64
+ {
65
+ "text": "2 + 2 is 4.",
66
+ "thoughtSignature": "AY89a1/FEzctevOq3hoikXa46XAD1+W6cygK7uStqQ6EPhhwA7cmzsI9beUFWtlFlm7zqosUPUE1nAE2t8XPGzRNPnpcdqpTtOE0TTyzoRc1hoPIBiG4cqbB"
67
+ }
68
+ ]
69
+ },
70
+ "finishReason": "STOP"
71
+ }
72
+ ],
73
+ "usageMetadata": {
74
+ "promptTokenCount": 9,
75
+ "candidatesTokenCount": 8,
76
+ "totalTokenCount": 17,
77
+ "trafficType": "ON_DEMAND",
78
+ "promptTokensDetails": [
79
+ {
80
+ "modality": "TEXT",
81
+ "tokenCount": 9
82
+ }
83
+ ],
84
+ "candidatesTokensDetails": [
85
+ {
86
+ "modality": "TEXT",
87
+ "tokenCount": 8
88
+ }
89
+ ]
90
+ },
91
+ "modelVersion": "gemini-3.1-flash-lite",
92
+ "createTime": "2026-09-28T07:54:30.886595Z",
93
+ "responseId": "Nh26asOONr6bpucPwvej0Ac"
94
+ }
95
+ recorded_at: Mon, 28 Sep 2026 07:54:31 GMT
96
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,165 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/vertex/v1/models/google/gemini-3.1-flash-lite:generateContent"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"contents":[{"role":"user","parts":[{"text":"What''s the weather in
9
+ Berlin? Use 52.5200, 13.4050."}]}],"generationConfig":{},"tools":[{"functionDeclarations":[{"name":"weather","description":"Gets
10
+ current weather for a location","parametersJsonSchema":{"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; charset=UTF-8
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
+ - chatptvtx-57f48a3b92e9425cae2c759a56631aa4
41
+ X-Request-Id:
42
+ - chatptvtx-57f48a3b92e9425cae2c759a56631aa4
43
+ Server:
44
+ - APISIX
45
+ Cache-Control:
46
+ - no-cache
47
+ Content-Length:
48
+ - '1050'
49
+ Connection:
50
+ - keep-alive
51
+ Date:
52
+ - Mon, 28 Sep 2026 08:15:36 GMT
53
+ Eo-Log-Uuid:
54
+ - '5858328024871794054'
55
+ Eo-Cache-Status:
56
+ - MISS
57
+ body:
58
+ encoding: UTF-8
59
+ string: |
60
+ {
61
+ "candidates": [
62
+ {
63
+ "content": {
64
+ "role": "model",
65
+ "parts": [
66
+ {
67
+ "functionCall": {
68
+ "name": "weather",
69
+ "args": {
70
+ "latitude": "52.5200",
71
+ "longitude": "13.4050"
72
+ },
73
+ "id": "call_1315654"
74
+ },
75
+ "thoughtSignature": "AY89a188LvwiIvqe2Ww2EK2evZCuv1eCLOMBEPnYfGL1m6Vu4tLpYjd3YEw4vDrhk23BgA7GYYNAMINdlgiEsCWwVZzhujwCqGget148gACc8yRZ/QQG2A3t"
76
+ }
77
+ ]
78
+ },
79
+ "finishReason": "STOP"
80
+ }
81
+ ],
82
+ "usageMetadata": {
83
+ "promptTokenCount": 56,
84
+ "candidatesTokenCount": 32,
85
+ "totalTokenCount": 88,
86
+ "trafficType": "ON_DEMAND",
87
+ "promptTokensDetails": [
88
+ {
89
+ "modality": "TEXT",
90
+ "tokenCount": 56
91
+ }
92
+ ],
93
+ "candidatesTokensDetails": [
94
+ {
95
+ "modality": "TEXT",
96
+ "tokenCount": 32
97
+ }
98
+ ]
99
+ },
100
+ "modelVersion": "gemini-3.1-flash-lite",
101
+ "createTime": "2026-09-28T08:15:37.077901Z",
102
+ "responseId": "KSK6as3gBKiY4_UP_56EGA"
103
+ }
104
+ recorded_at: Mon, 28 Sep 2026 08:15:38 GMT
105
+ - request:
106
+ method: post
107
+ uri: "<QINIU_BASE_URL>/bypass/vertex/v1/models/google/gemini-3.1-flash-lite:generateContent"
108
+ body:
109
+ encoding: UTF-8
110
+ string: '{"contents":[{"role":"user","parts":[{"text":"What''s the weather in
111
+ Berlin? Use 52.5200, 13.4050."}]},{"role":"model","parts":[{"functionCall":{"name":"weather","args":{"latitude":"52.5200","longitude":"13.4050"}},"thoughtSignature":"AY89a188LvwiIvqe2Ww2EK2evZCuv1eCLOMBEPnYfGL1m6Vu4tLpYjd3YEw4vDrhk23BgA7GYYNAMINdlgiEsCWwVZzhujwCqGget148gACc8yRZ/QQG2A3t"}]},{"role":"user","parts":[{"functionResponse":{"name":"weather","response":{"name":"weather","content":[{"text":"Current
112
+ weather at 52.5200, 13.4050: 15°C, Wind: 10 km/h"}]}}}]}],"generationConfig":{},"tools":[{"functionDeclarations":[{"name":"weather","description":"Gets
113
+ current weather for a location","parametersJsonSchema":{"type":"object","properties":{"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}},"required":["latitude","longitude"],"additionalProperties":false,"strict":true}}]}]}'
114
+ headers:
115
+ User-Agent:
116
+ - Faraday v2.14.4
117
+ Authorization:
118
+ - Bearer <AUTH_TOKEN>
119
+ Content-Type:
120
+ - application/json
121
+ Accept-Encoding:
122
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
123
+ Accept:
124
+ - "*/*"
125
+ response:
126
+ status:
127
+ code: 200
128
+ message: OK
129
+ headers:
130
+ Content-Type:
131
+ - application/json; charset=UTF-8
132
+ Access-Control-Allow-Credentials:
133
+ - 'true'
134
+ Access-Control-Allow-Headers:
135
+ - ''
136
+ Access-Control-Allow-Methods:
137
+ - GET, POST, PUT, PATCH, DELETE, OPTIONS
138
+ Access-Control-Allow-Origin:
139
+ - ''
140
+ Access-Control-Expose-Headers:
141
+ - Http_x_reqid
142
+ Http-X-Reqid:
143
+ - chatptvtx-6643440125b84c1cae6ce233601f0035
144
+ X-Request-Id:
145
+ - chatptvtx-6643440125b84c1cae6ce233601f0035
146
+ Server:
147
+ - APISIX
148
+ Cache-Control:
149
+ - no-cache
150
+ Content-Length:
151
+ - '933'
152
+ Connection:
153
+ - keep-alive
154
+ Date:
155
+ - Mon, 28 Sep 2026 08:15:38 GMT
156
+ Eo-Log-Uuid:
157
+ - '14235039674328150372'
158
+ Eo-Cache-Status:
159
+ - MISS
160
+ body:
161
+ encoding: ASCII-8BIT
162
+ string: !binary |-
163
+ ewogICJjYW5kaWRhdGVzIjogWwogICAgewogICAgICAiY29udGVudCI6IHsKICAgICAgICAicm9sZSI6ICJtb2RlbCIsCiAgICAgICAgInBhcnRzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidGV4dCI6ICJUaGUgY3VycmVudCB3ZWF0aGVyIGluIEJlcmxpbiAoNTIuNTIwMCwgMTMuNDA1MCkgaXMgMTXCsEMgd2l0aCBhIHdpbmQgc3BlZWQgb2YgMTAga20vaC4iLAogICAgICAgICAgICAidGhvdWdodFNpZ25hdHVyZSI6ICJBWTg5YTE4ZWNIZlRyb1Q0UDd6M052YlRPVGN2MnFHdTU2cHplSDl0eEdvcU5VWlhCT0JVbEtuMG1WYXgxc21yS3BaQ2pjamV3MEFDbFlic0o1My9IbWdzb0lZay9PRWZ4blBlRWIzS3grR0NyQlJ4NDFIMGs4QVIiCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9LAogICAgICAiZmluaXNoUmVhc29uIjogIlNUT1AiCiAgICB9CiAgXSwKICAidXNhZ2VNZXRhZGF0YSI6IHsKICAgICJwcm9tcHRUb2tlbkNvdW50IjogMTIxLAogICAgImNhbmRpZGF0ZXNUb2tlbkNvdW50IjogNDEsCiAgICAidG90YWxUb2tlbkNvdW50IjogMTYyLAogICAgInRyYWZmaWNUeXBlIjogIk9OX0RFTUFORCIsCiAgICAicHJvbXB0VG9rZW5zRGV0YWlscyI6IFsKICAgICAgewogICAgICAgICJtb2RhbGl0eSI6ICJURVhUIiwKICAgICAgICAidG9rZW5Db3VudCI6IDEyMQogICAgICB9CiAgICBdLAogICAgImNhbmRpZGF0ZXNUb2tlbnNEZXRhaWxzIjogWwogICAgICB7CiAgICAgICAgIm1vZGFsaXR5IjogIlRFWFQiLAogICAgICAgICJ0b2tlbkNvdW50IjogNDEKICAgICAgfQogICAgXQogIH0sCiAgIm1vZGVsVmVyc2lvbiI6ICJnZW1pbmktMy4xLWZsYXNoLWxpdGUiLAogICJjcmVhdGVUaW1lIjogIjIwMjYtMDktMjhUMDg6MTU6MzguOTAwMzQxWiIsCiAgInJlc3BvbnNlSWQiOiAiS2lLNmF2WDVOdmVaOUxzUGlkT0dpQWciCn0K
164
+ recorded_at: Mon, 28 Sep 2026 08:15:39 GMT
165
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,97 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/vertex/v1/models/google/gemini-3.1-flash-lite:generateContent"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"contents":[{"role":"user","parts":[{"text":"Generate a person named
9
+ John who is 30 years old"}]}],"generationConfig":{"responseMimeType":"application/json","responseJsonSchema":{"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; charset=UTF-8
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
+ - chatptvtx-0de9762832654ec684af9c0d55b7c005
40
+ X-Request-Id:
41
+ - chatptvtx-0de9762832654ec684af9c0d55b7c005
42
+ Server:
43
+ - APISIX
44
+ Cache-Control:
45
+ - no-cache
46
+ Content-Length:
47
+ - '885'
48
+ Connection:
49
+ - keep-alive
50
+ Date:
51
+ - Mon, 28 Sep 2026 07:52:39 GMT
52
+ Eo-Log-Uuid:
53
+ - '6512597416582819119'
54
+ Eo-Cache-Status:
55
+ - MISS
56
+ body:
57
+ encoding: UTF-8
58
+ string: |
59
+ {
60
+ "candidates": [
61
+ {
62
+ "content": {
63
+ "role": "model",
64
+ "parts": [
65
+ {
66
+ "text": "{\n \"name\": \"John\",\n \"age\": 30\n}",
67
+ "thoughtSignature": "AY89a1+hQF5x+XGTKJgliSpa7ySY7yJU1+rbZYcl/T21isU8iGZuYgijnS7rb7xAGY294V5eb0eoTqs5XrTJlXmzl73Lqi5MRjKK23all8fhQQjHqBqee5bk"
68
+ }
69
+ ]
70
+ },
71
+ "finishReason": "STOP"
72
+ }
73
+ ],
74
+ "usageMetadata": {
75
+ "promptTokenCount": 77,
76
+ "candidatesTokenCount": 19,
77
+ "totalTokenCount": 96,
78
+ "trafficType": "ON_DEMAND",
79
+ "promptTokensDetails": [
80
+ {
81
+ "modality": "TEXT",
82
+ "tokenCount": 77
83
+ }
84
+ ],
85
+ "candidatesTokensDetails": [
86
+ {
87
+ "modality": "TEXT",
88
+ "tokenCount": 19
89
+ }
90
+ ]
91
+ },
92
+ "modelVersion": "gemini-3.1-flash-lite",
93
+ "createTime": "2026-09-28T07:52:39.943465Z",
94
+ "responseId": "xxy6aunKOdGj9LsPnKCUuAM"
95
+ }
96
+ recorded_at: Mon, 28 Sep 2026 07:52:41 GMT
97
+ recorded_with: VCR 6.4.0