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.
- checksums.yaml +7 -0
- data/.flayignore +1 -0
- data/.github/workflows/ci.yml +28 -0
- data/.github/workflows/gitleaks.yml +23 -0
- data/.github/workflows/release.yml +36 -0
- data/.overcommit.yml +31 -0
- data/.rspec +2 -0
- data/.rubocop.yml +29 -0
- data/Archspec.rb +14 -0
- data/LICENSE +21 -0
- data/README.md +114 -0
- data/lib/ruby_llm/providers/qiniu.rb +134 -0
- data/models.json +859 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_can_handle_a_multi_turn_conversation.yml +154 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_can_have_a_basic_conversation.yml +61 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_can_use_tools.yml +121 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_returns_structured_output.yml +62 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_returns_the_raw_response.yml +66 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_anthropic_claude_sonnet_5_supports_streaming_responses.yml +105 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_can_handle_a_multi_turn_conversation.yml +127 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_can_have_a_basic_conversation.yml +58 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_can_use_tools.yml +119 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_returns_structured_output.yml +59 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_returns_the_raw_response.yml +58 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_deepseek_deepseek_v4_1_flash_supports_streaming_responses.yml +89 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_can_handle_a_multi_turn_conversation.yml +195 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_can_have_a_basic_conversation.yml +96 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_can_use_tools.yml +165 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_returns_structured_output.yml +97 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_returns_the_raw_response.yml +97 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_gemini_3_1_flash_lite_preview_supports_streaming_responses.yml +70 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_can_handle_a_multi_turn_conversation.yml +194 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_can_have_a_basic_conversation.yml +96 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_can_use_tools.yml +165 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_returns_structured_output.yml +97 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_returns_the_raw_response.yml +97 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_supports_streaming_responses.yml +70 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_can_handle_a_multi_turn_conversation.yml +199 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_can_have_a_basic_conversation.yml +97 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_can_use_tools.yml +166 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_returns_structured_output.yml +98 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_returns_the_raw_response.yml +98 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_8_flash_supports_streaming_responses.yml +71 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_can_handle_a_multi_turn_conversation.yml +419 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_can_have_a_basic_conversation.yml +210 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_can_use_tools.yml +468 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_returns_structured_output.yml +229 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_returns_the_raw_response.yml +210 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_2_supports_streaming_responses.yml +102 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_can_handle_a_multi_turn_conversation.yml +421 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_can_have_a_basic_conversation.yml +157 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_can_use_tools.yml +469 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_can_handle_a_multi_turn_conversation.yml +422 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_can_have_a_basic_conversation.yml +211 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_can_use_tools.yml +469 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_returns_structured_output.yml +230 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_returns_the_raw_response.yml +211 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_mini_supports_streaming_responses.yml +102 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_returns_structured_output.yml +230 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_returns_the_raw_response.yml +157 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_4_supports_streaming_responses.yml +102 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_can_handle_a_multi_turn_conversation.yml +389 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_can_have_a_basic_conversation.yml +241 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_can_use_tools.yml +437 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_returns_structured_output.yml +214 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_returns_the_raw_response.yml +241 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_5_6_luna_supports_streaming_responses.yml +106 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_can_handle_a_multi_turn_conversation.yml +389 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_can_have_a_basic_conversation.yml +202 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_can_use_tools.yml +437 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_returns_structured_output.yml +221 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_returns_the_raw_response.yml +202 -0
- data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_openai_gpt_6_luna_supports_streaming_responses.yml +112 -0
- data/spec/ruby_llm/chat_schema_spec.rb +30 -0
- data/spec/ruby_llm/chat_spec.rb +35 -0
- data/spec/ruby_llm/chat_streaming_spec.rb +22 -0
- data/spec/ruby_llm/chat_tools_spec.rb +32 -0
- data/spec/ruby_llm/embedding_spec.rb +49 -0
- data/spec/ruby_llm/image_spec.rb +23 -0
- data/spec/ruby_llm/models_spec.rb +11 -0
- data/spec/ruby_llm/moderation_spec.rb +22 -0
- data/spec/ruby_llm/providers/qiniu_spec.rb +103 -0
- data/spec/ruby_llm/rerank_spec.rb +23 -0
- data/spec/ruby_llm/speech_spec.rb +25 -0
- data/spec/ruby_llm/video_spec.rb +27 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/support/models.rb +30 -0
- data/spec/support/rubyllm_configuration.rb +14 -0
- data/spec/support/vcr_configuration.rb +16 -0
- 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
|
data/spec/fixtures/vcr_cassettes/rubyllm_chat_qiniu_google_gemini_3_1_flash_lite_can_use_tools.yml
ADDED
|
@@ -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
|