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,214 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/openai/v1/responses"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"openai/gpt-5.6-luna","input":[{"role":"user","content":"Generate
9
+ a person named John who is 30 years old"}],"stream":false,"store":false,"include":["reasoning.encrypted_content"],"text":{"format":{"type":"json_schema","name":"response","schema":{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer"}},"required":["name","age"],"additionalProperties":false},"strict":true}}}'
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
+ - chatptrsp-b9e44b71e3e64420bd751a1312f6dae4
40
+ X-Ratelimit-Abusepenalty-Active:
41
+ - 'False'
42
+ X-Ratelimit-Key:
43
+ - gpt-5.6-luna
44
+ X-Ratelimit-Limit-Requests:
45
+ - '15000'
46
+ X-Ratelimit-Limit-Tokens:
47
+ - '15000000'
48
+ X-Ratelimit-Remaining-Requests:
49
+ - '14999'
50
+ X-Ratelimit-Remaining-Tokens:
51
+ - '14999988'
52
+ X-Ratelimit-Renewalperiod-Requests:
53
+ - '60'
54
+ X-Ratelimit-Renewalperiod-Tokens:
55
+ - '60'
56
+ X-Ratelimit-Reset-Requests:
57
+ - '0'
58
+ X-Ratelimit-Reset-Tokens:
59
+ - '0'
60
+ X-Request-Id:
61
+ - d2abb344-31dc-4a46-bf8f-0fd6ea7903ac
62
+ Server:
63
+ - APISIX
64
+ Cache-Control:
65
+ - no-cache
66
+ Transfer-Encoding:
67
+ - chunked
68
+ Connection:
69
+ - keep-alive
70
+ Date:
71
+ - Wed, 30 Sep 2026 04:43:54 GMT
72
+ Eo-Log-Uuid:
73
+ - '1102221067772116168'
74
+ Eo-Cache-Status:
75
+ - MISS
76
+ body:
77
+ encoding: UTF-8
78
+ string: |-
79
+ {
80
+ "id": "resp_0d50c8576f05c628016abc938b813c81978dc7abef8b0a4ae0",
81
+ "object": "response",
82
+ "created_at": 1790743435,
83
+ "status": "completed",
84
+ "background": false,
85
+ "completed_at": 1790743436,
86
+ "content_filters": [
87
+ {
88
+ "blocked": false,
89
+ "source_type": "prompt",
90
+ "content_filter_raw": [],
91
+ "content_filter_results": {},
92
+ "content_filter_offsets": {
93
+ "start_offset": 0,
94
+ "end_offset": 967,
95
+ "check_offset": 0
96
+ }
97
+ },
98
+ {
99
+ "blocked": false,
100
+ "source_type": "completion",
101
+ "content_filter_raw": [],
102
+ "content_filter_results": {},
103
+ "content_filter_offsets": {
104
+ "start_offset": 0,
105
+ "end_offset": 24,
106
+ "check_offset": 0
107
+ }
108
+ }
109
+ ],
110
+ "error": null,
111
+ "frequency_penalty": 0.0,
112
+ "incomplete_details": null,
113
+ "instructions": null,
114
+ "max_output_tokens": null,
115
+ "max_tool_calls": null,
116
+ "model": "openai/gpt-5.6-luna",
117
+ "moderation": null,
118
+ "output": [
119
+ {
120
+ "id": "msg_0d50c8576f05c628016abc938c1a848197bf5a1937c7b9d4a3",
121
+ "type": "message",
122
+ "status": "completed",
123
+ "content": [
124
+ {
125
+ "type": "output_text",
126
+ "annotations": [],
127
+ "logprobs": [],
128
+ "text": "{\"name\":\"John\",\"age\":30}"
129
+ }
130
+ ],
131
+ "phase": "final_answer",
132
+ "role": "assistant"
133
+ }
134
+ ],
135
+ "parallel_tool_calls": true,
136
+ "presence_penalty": 0.0,
137
+ "previous_response_id": null,
138
+ "prompt_cache_key": null,
139
+ "prompt_cache_retention": "24h",
140
+ "reasoning": {
141
+ "context": "all_turns",
142
+ "effort": "medium",
143
+ "mode": "standard",
144
+ "summary": null
145
+ },
146
+ "safety_identifier": null,
147
+ "service_tier": "default",
148
+ "store": false,
149
+ "temperature": 1.0,
150
+ "text": {
151
+ "format": {
152
+ "type": "json_schema",
153
+ "description": null,
154
+ "name": "response",
155
+ "schema": {
156
+ "type": "object",
157
+ "properties": {
158
+ "name": {
159
+ "type": "string"
160
+ },
161
+ "age": {
162
+ "type": "integer"
163
+ }
164
+ },
165
+ "required": [
166
+ "name",
167
+ "age"
168
+ ],
169
+ "additionalProperties": false
170
+ },
171
+ "strict": true
172
+ },
173
+ "verbosity": "medium"
174
+ },
175
+ "tool_choice": "auto",
176
+ "tool_usage": {
177
+ "image_gen": {
178
+ "input_tokens": 0,
179
+ "input_tokens_details": {
180
+ "image_tokens": 0,
181
+ "text_tokens": 0
182
+ },
183
+ "output_tokens": 0,
184
+ "output_tokens_details": {
185
+ "image_tokens": 0,
186
+ "text_tokens": 0
187
+ },
188
+ "total_tokens": 0
189
+ },
190
+ "web_search": {
191
+ "num_requests": 0
192
+ }
193
+ },
194
+ "tools": [],
195
+ "top_logprobs": 0,
196
+ "top_p": 0.98,
197
+ "truncation": "disabled",
198
+ "usage": {
199
+ "input_tokens": 45,
200
+ "input_tokens_details": {
201
+ "cache_write_tokens": 0,
202
+ "cached_tokens": 0
203
+ },
204
+ "output_tokens": 16,
205
+ "output_tokens_details": {
206
+ "reasoning_tokens": 0
207
+ },
208
+ "total_tokens": 61
209
+ },
210
+ "user": null,
211
+ "metadata": {}
212
+ }
213
+ recorded_at: Wed, 30 Sep 2026 04:43:56 GMT
214
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,241 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/openai/v1/responses"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"openai/gpt-5.6-luna","input":[{"role":"user","content":"What
9
+ is the capital of France?"}],"stream":false,"store":false,"include":["reasoning.encrypted_content"]}'
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
+ - chatptrsp-8d084384a1fb406a82bee8dd71aacc78
40
+ X-Ratelimit-Abusepenalty-Active:
41
+ - 'False'
42
+ X-Ratelimit-Key:
43
+ - gpt-5.6-luna
44
+ X-Ratelimit-Limit-Requests:
45
+ - '1000'
46
+ X-Ratelimit-Limit-Tokens:
47
+ - '1000000'
48
+ X-Ratelimit-Remaining-Requests:
49
+ - '997'
50
+ X-Ratelimit-Remaining-Tokens:
51
+ - '997738'
52
+ X-Ratelimit-Renewalperiod-Requests:
53
+ - '60'
54
+ X-Ratelimit-Renewalperiod-Tokens:
55
+ - '60'
56
+ X-Ratelimit-Reset-Requests:
57
+ - '0'
58
+ X-Ratelimit-Reset-Tokens:
59
+ - '0'
60
+ X-Request-Id:
61
+ - fa716ceb-ff5a-482c-806b-3165367b17fb
62
+ Server:
63
+ - APISIX
64
+ Cache-Control:
65
+ - no-cache
66
+ Transfer-Encoding:
67
+ - chunked
68
+ Connection:
69
+ - keep-alive
70
+ Date:
71
+ - Wed, 30 Sep 2026 04:43:59 GMT
72
+ Eo-Log-Uuid:
73
+ - '13465252545337080144'
74
+ Eo-Cache-Status:
75
+ - MISS
76
+ body:
77
+ encoding: UTF-8
78
+ string: |-
79
+ {
80
+ "id": "resp_081186bb0a02415f016abc93903b6c8194841e7df39809697e",
81
+ "object": "response",
82
+ "created_at": 1790743440,
83
+ "status": "completed",
84
+ "background": false,
85
+ "completed_at": 1790743441,
86
+ "content_filters": [
87
+ {
88
+ "blocked": false,
89
+ "source_type": "prompt",
90
+ "content_filter_raw": [],
91
+ "content_filter_results": {
92
+ "hate": {
93
+ "filtered": false,
94
+ "severity": "safe"
95
+ },
96
+ "sexual": {
97
+ "filtered": false,
98
+ "severity": "safe"
99
+ },
100
+ "violence": {
101
+ "filtered": false,
102
+ "severity": "safe"
103
+ },
104
+ "self_harm": {
105
+ "filtered": false,
106
+ "severity": "safe"
107
+ },
108
+ "jailbreak": {
109
+ "detected": false,
110
+ "filtered": false
111
+ }
112
+ },
113
+ "content_filter_offsets": {
114
+ "start_offset": 0,
115
+ "end_offset": 808,
116
+ "check_offset": 0
117
+ }
118
+ },
119
+ {
120
+ "blocked": false,
121
+ "source_type": "completion",
122
+ "content_filter_raw": [],
123
+ "content_filter_results": {
124
+ "protected_material_text": {
125
+ "detected": false,
126
+ "filtered": false
127
+ },
128
+ "protected_material_code": {
129
+ "detected": false,
130
+ "filtered": false
131
+ },
132
+ "hate": {
133
+ "filtered": false,
134
+ "severity": "safe"
135
+ },
136
+ "sexual": {
137
+ "filtered": false,
138
+ "severity": "safe"
139
+ },
140
+ "violence": {
141
+ "filtered": false,
142
+ "severity": "safe"
143
+ },
144
+ "self_harm": {
145
+ "filtered": false,
146
+ "severity": "safe"
147
+ }
148
+ },
149
+ "content_filter_offsets": {
150
+ "start_offset": 0,
151
+ "end_offset": 35,
152
+ "check_offset": 0
153
+ }
154
+ }
155
+ ],
156
+ "error": null,
157
+ "frequency_penalty": 0.0,
158
+ "incomplete_details": null,
159
+ "instructions": null,
160
+ "max_output_tokens": null,
161
+ "max_tool_calls": null,
162
+ "model": "openai/gpt-5.6-luna",
163
+ "moderation": null,
164
+ "output": [
165
+ {
166
+ "id": "msg_081186bb0a02415f016abc9390dad88194a5c9fb6b991f34a5",
167
+ "type": "message",
168
+ "status": "completed",
169
+ "content": [
170
+ {
171
+ "type": "output_text",
172
+ "annotations": [],
173
+ "logprobs": [],
174
+ "text": "The capital of France is **Paris**."
175
+ }
176
+ ],
177
+ "phase": "final_answer",
178
+ "role": "assistant"
179
+ }
180
+ ],
181
+ "parallel_tool_calls": true,
182
+ "presence_penalty": 0.0,
183
+ "previous_response_id": null,
184
+ "prompt_cache_key": null,
185
+ "prompt_cache_retention": "24h",
186
+ "reasoning": {
187
+ "context": "all_turns",
188
+ "effort": "medium",
189
+ "mode": "standard",
190
+ "summary": null
191
+ },
192
+ "safety_identifier": null,
193
+ "service_tier": "default",
194
+ "store": false,
195
+ "temperature": 1.0,
196
+ "text": {
197
+ "format": {
198
+ "type": "text"
199
+ },
200
+ "verbosity": "medium"
201
+ },
202
+ "tool_choice": "auto",
203
+ "tool_usage": {
204
+ "image_gen": {
205
+ "input_tokens": 0,
206
+ "input_tokens_details": {
207
+ "image_tokens": 0,
208
+ "text_tokens": 0
209
+ },
210
+ "output_tokens": 0,
211
+ "output_tokens_details": {
212
+ "image_tokens": 0,
213
+ "text_tokens": 0
214
+ },
215
+ "total_tokens": 0
216
+ },
217
+ "web_search": {
218
+ "num_requests": 0
219
+ }
220
+ },
221
+ "tools": [],
222
+ "top_logprobs": 0,
223
+ "top_p": 0.98,
224
+ "truncation": "disabled",
225
+ "usage": {
226
+ "input_tokens": 13,
227
+ "input_tokens_details": {
228
+ "cache_write_tokens": 0,
229
+ "cached_tokens": 0
230
+ },
231
+ "output_tokens": 13,
232
+ "output_tokens_details": {
233
+ "reasoning_tokens": 0
234
+ },
235
+ "total_tokens": 26
236
+ },
237
+ "user": null,
238
+ "metadata": {}
239
+ }
240
+ recorded_at: Wed, 30 Sep 2026 04:44:01 GMT
241
+ recorded_with: VCR 6.4.0
@@ -0,0 +1,106 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: "<QINIU_BASE_URL>/bypass/openai/v1/responses"
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"openai/gpt-5.6-luna","input":[{"role":"user","content":"Count
9
+ from 1 to 3"}],"stream":true,"store":false,"include":["reasoning.encrypted_content"]}'
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
+ - 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
+ - chatptrsp-a598b5f6d72e43e5aac5f7a5031d4e9b
40
+ X-Request-Id:
41
+ - chatptrsp-a598b5f6d72e43e5aac5f7a5031d4e9b
42
+ Server:
43
+ - APISIX
44
+ Cache-Control:
45
+ - no-cache
46
+ Transfer-Encoding:
47
+ - chunked
48
+ Connection:
49
+ - keep-alive
50
+ Date:
51
+ - Wed, 30 Sep 2026 04:43:47 GMT
52
+ Eo-Log-Uuid:
53
+ - '4723929197155127051'
54
+ Eo-Cache-Status:
55
+ - MISS
56
+ body:
57
+ encoding: UTF-8
58
+ string: |+
59
+ event: response.created
60
+ data: {"type":"response.created","response":{"id":"resp_084838ff2065341a016abc9384e80081939be84ed4e3fb0450","object":"response","created_at":1790743428,"status":"in_progress","background":false,"completed_at":null,"content_filters":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"openai/gpt-5.6-luna","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"24h","reasoning":{"context":"all_turns","effort":"medium","mode":"standard","summary":null},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":0}
61
+
62
+ event: response.in_progress
63
+ data: {"type":"response.in_progress","response":{"id":"resp_084838ff2065341a016abc9384e80081939be84ed4e3fb0450","object":"response","created_at":1790743428,"status":"in_progress","background":false,"completed_at":null,"content_filters":null,"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"openai/gpt-5.6-luna","moderation":null,"output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"24h","reasoning":{"context":"all_turns","effort":"medium","mode":"standard","summary":null},"safety_identifier":null,"service_tier":"auto","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"metadata":{}},"sequence_number":1}
64
+
65
+ event: response.output_item.added
66
+ data: {"type":"response.output_item.added","item":{"id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","type":"message","status":"in_progress","content":[],"phase":"final_answer","role":"assistant"},"output_index":0,"sequence_number":2}
67
+
68
+ event: response.content_part.added
69
+ data: {"type":"response.content_part.added","content_index":0,"item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":""},"sequence_number":3}
70
+
71
+ event: response.output_text.delta
72
+ data: {"type":"response.output_text.delta","content_index":0,"delta":"1","item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"obfuscation":"X5wANvv1dThGpcB","output_index":0,"sequence_number":4}
73
+
74
+ event: response.output_text.delta
75
+ data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"obfuscation":"V2OxOyyQwiGj8pe","output_index":0,"sequence_number":5}
76
+
77
+ event: response.output_text.delta
78
+ data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"obfuscation":"1slMesKuxrERxEB","output_index":0,"sequence_number":6}
79
+
80
+ event: response.output_text.delta
81
+ data: {"type":"response.output_text.delta","content_index":0,"delta":"2","item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"obfuscation":"lCgvNx4NyrM30XN","output_index":0,"sequence_number":7}
82
+
83
+ event: response.output_text.delta
84
+ data: {"type":"response.output_text.delta","content_index":0,"delta":",","item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"obfuscation":"SRknFYax8oPy1mK","output_index":0,"sequence_number":8}
85
+
86
+ event: response.output_text.delta
87
+ data: {"type":"response.output_text.delta","content_index":0,"delta":" ","item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"obfuscation":"rPtG8iaY2884Ta2","output_index":0,"sequence_number":9}
88
+
89
+ event: response.output_text.delta
90
+ data: {"type":"response.output_text.delta","content_index":0,"delta":"3","item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"obfuscation":"NSUehv6URSsFs9W","output_index":0,"sequence_number":10}
91
+
92
+ event: response.output_text.done
93
+ data: {"type":"response.output_text.done","content_index":0,"item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","logprobs":[],"output_index":0,"sequence_number":11,"text":"1, 2, 3"}
94
+
95
+ event: response.content_part.done
96
+ data: {"type":"response.content_part.done","content_index":0,"item_id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","output_index":0,"part":{"type":"output_text","annotations":[],"logprobs":[],"text":"1, 2, 3"},"sequence_number":12}
97
+
98
+ event: response.output_item.done
99
+ data: {"type":"response.output_item.done","item":{"id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"1, 2, 3"}],"phase":"final_answer","role":"assistant"},"output_index":0,"sequence_number":13}
100
+
101
+ event: response.completed
102
+ data: {"type":"response.completed","response":{"id":"resp_084838ff2065341a016abc9384e80081939be84ed4e3fb0450","object":"response","created_at":1790743428,"status":"completed","background":false,"completed_at":1790743429,"content_filters":[{"blocked":false,"source_type":"prompt","content_filter_raw":[],"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"jailbreak":{"detected":false,"filtered":false}},"content_filter_offsets":{"start_offset":0,"end_offset":795,"check_offset":0}},{"blocked":false,"source_type":"completion","content_filter_raw":[],"content_filter_results":{"protected_material_code":{"detected":false,"filtered":false},"protected_material_text":{"detected":false,"filtered":false},"hate":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"start_offset":0,"end_offset":7,"check_offset":0}}],"error":null,"frequency_penalty":0.0,"incomplete_details":null,"instructions":null,"max_output_tokens":null,"max_tool_calls":null,"model":"openai/gpt-5.6-luna","moderation":null,"output":[{"id":"msg_084838ff2065341a016abc9385b990819388ee01a24c0d3a9a","type":"message","status":"completed","content":[{"type":"output_text","annotations":[],"logprobs":[],"text":"1, 2, 3"}],"phase":"final_answer","role":"assistant"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"24h","reasoning":{"context":"all_turns","effort":"medium","mode":"standard","summary":null},"safety_identifier":null,"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tool_usage":{"image_gen":{"input_tokens":0,"input_tokens_details":{"image_tokens":0,"text_tokens":0},"output_tokens":0,"output_tokens_details":{"image_tokens":0,"text_tokens":0},"total_tokens":0},"web_search":{"num_requests":0}},"tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":{"input_tokens":13,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":11,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":24},"user":null,"metadata":{}},"sequence_number":14}
103
+
104
+ recorded_at: Wed, 30 Sep 2026 04:43:50 GMT
105
+ recorded_with: VCR 6.4.0
106
+ ...