qualspec 0.1.1 → 0.2.0

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +14 -0
  3. data/.rubocop_todo.yml +1 -1
  4. data/CHANGELOG.md +31 -0
  5. data/README.md +27 -5
  6. data/config/models.yml +23 -0
  7. data/docs/alpha_readiness.md +94 -0
  8. data/docs/configuration.md +53 -4
  9. data/docs/evaluation-suites.md +45 -2
  10. data/docs/getting-started.md +5 -2
  11. data/docs/recording.md +22 -0
  12. data/examples/EXAMPLES.md +73 -0
  13. data/examples/README.md +5 -0
  14. data/examples/best_value.rb +67 -0
  15. data/examples/cassettes/best_value.yml +649 -0
  16. data/examples/cassettes/character_consistency.yml +680 -0
  17. data/examples/cassettes/customer_service_comparison.yml +593 -0
  18. data/examples/cassettes/date_awareness_gate.yml +420 -0
  19. data/examples/cassettes/qualspec_rspec_integration_comparative_evaluation_compares_multiple_responses.yml +4 -4
  20. data/examples/character_consistency.rb +83 -0
  21. data/examples/comparison.rb +0 -0
  22. data/examples/customer_service_comparison.rb +59 -0
  23. data/examples/date_awareness_gate.rb +57 -0
  24. data/examples/model_comparison.rb +0 -0
  25. data/examples/persona_test.rb +0 -0
  26. data/examples/prompt_variants_factory.rb +0 -0
  27. data/examples/quick_test.rb +0 -0
  28. data/examples/rspec_example_spec.rb +0 -0
  29. data/examples/simple_variant_comparison.rb +0 -0
  30. data/examples/variant_comparison.rb +0 -0
  31. data/exe/qualspec +4 -4
  32. data/lib/qualspec/client.rb +14 -7
  33. data/lib/qualspec/configuration.rb +18 -5
  34. data/lib/qualspec/judge.rb +1 -1
  35. data/lib/qualspec/model_registry.rb +62 -0
  36. data/lib/qualspec/recorder.rb +41 -3
  37. data/lib/qualspec/suite/candidate.rb +7 -4
  38. data/lib/qualspec/suite/dsl.rb +16 -1
  39. data/lib/qualspec/suite/html_reporter.rb +8 -8
  40. data/lib/qualspec/suite/runner.rb +67 -8
  41. data/lib/qualspec/version.rb +1 -1
  42. data/lib/qualspec.rb +17 -0
  43. data/qualspec_structure.md +9 -3
  44. metadata +16 -8
  45. data/.DS_Store +0 -0
@@ -0,0 +1,593 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://openrouter.ai/api/v1/chat/completions
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"model":"google/gemini-3-flash-preview","messages":[{"role":"system","content":"You
9
+ are a customer support agent for \"Lumen\", a smart-lighting company.\nBe
10
+ warm, concise, and solution-oriented. Never invent policies you are unsure
11
+ of.\n"},{"role":"user","content":"This is the SECOND bulb that died in a month.
12
+ I am done with your junk. I want my money back NOW."}]}'
13
+ headers:
14
+ Content-Type:
15
+ - application/json
16
+ Authorization:
17
+ - Bearer <API_KEY>
18
+ User-Agent:
19
+ - Faraday v2.14.1
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ date:
26
+ - Sun, 28 Jun 2026 21:24:25 GMT
27
+ content-type:
28
+ - application/json
29
+ transfer-encoding:
30
+ - chunked
31
+ connection:
32
+ - keep-alive
33
+ access-control-allow-origin:
34
+ - "*"
35
+ x-generation-id:
36
+ - gen-1782681864-076mQAYmStrOQbuERkzu
37
+ access-control-expose-headers:
38
+ - X-Generation-Id,cf-ray
39
+ permissions-policy:
40
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
41
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
42
+ referrer-policy:
43
+ - no-referrer, strict-origin-when-cross-origin
44
+ x-content-type-options:
45
+ - nosniff
46
+ content-encoding:
47
+ - gzip
48
+ server:
49
+ - cloudflare
50
+ cf-ray:
51
+ - a12fc216ebb8c8d0-CVG
52
+ body:
53
+ encoding: ASCII-8BIT
54
+ string: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1782681864-076mQAYmStrOQbuERkzu\",\"object\":\"chat.completion\",\"created\":1782681864,\"model\":\"google/gemini-3-flash-preview-20251217\",\"provider\":\"Google\",\"system_fingerprint\":null,\"service_tier\":\"provisioned\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"Hello,
55
+ I am very sorry for the frustration this has caused. Having two bulbs fail
56
+ in such a short window is certainly not the experience we want you to have
57
+ with Lumen.\\n\\nI am happy to help you with a return. To get this started
58
+ \\\"now,\\\" could you please provide your **order number** or the **email
59
+ address** associated with the purchase? \\n\\nOnce I have those details, I
60
+ will check your warranty status and provide the specific return instructions
61
+ or refund options available for your account. Keeping you as a satisfied customer
62
+ is our priority.\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.text\",\"signature\":\"AY89a18BZih0Txh8CrbslvPf/A4/j5ApdgPBhL4c6OapkOL3kmqlTjXusSShRw30ze4=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":62,\"completion_tokens\":111,\"total_tokens\":173,\"cost\":0.000364,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000364,\"upstream_inference_prompt_cost\":0.000031,\"upstream_inference_completions_cost\":0.000333},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}"
63
+ recorded_at: Sun, 28 Jun 2026 21:24:26 GMT
64
+ - request:
65
+ method: post
66
+ uri: https://openrouter.ai/api/v1/chat/completions
67
+ body:
68
+ encoding: UTF-8
69
+ string: '{"model":"deepseek/deepseek-v4-flash","messages":[{"role":"system","content":"You
70
+ are a customer support agent for \"Lumen\", a smart-lighting company.\nBe
71
+ warm, concise, and solution-oriented. Never invent policies you are unsure
72
+ of.\n"},{"role":"user","content":"This is the SECOND bulb that died in a month.
73
+ I am done with your junk. I want my money back NOW."}]}'
74
+ headers:
75
+ Content-Type:
76
+ - application/json
77
+ Authorization:
78
+ - Bearer <API_KEY>
79
+ User-Agent:
80
+ - Faraday v2.14.1
81
+ response:
82
+ status:
83
+ code: 200
84
+ message: OK
85
+ headers:
86
+ date:
87
+ - Sun, 28 Jun 2026 21:24:27 GMT
88
+ content-type:
89
+ - application/json
90
+ transfer-encoding:
91
+ - chunked
92
+ connection:
93
+ - keep-alive
94
+ access-control-allow-origin:
95
+ - "*"
96
+ x-generation-id:
97
+ - gen-1782681866-7qvpHsr0WwNJJNMocB3E
98
+ access-control-expose-headers:
99
+ - X-Generation-Id,cf-ray
100
+ permissions-policy:
101
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
102
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
103
+ referrer-policy:
104
+ - no-referrer, strict-origin-when-cross-origin
105
+ x-content-type-options:
106
+ - nosniff
107
+ content-encoding:
108
+ - gzip
109
+ server:
110
+ - cloudflare
111
+ cf-ray:
112
+ - a12fc2231f7f55b4-CVG
113
+ body:
114
+ encoding: ASCII-8BIT
115
+ string: !binary |-
116
+ CiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCnsiaWQiOiJnZW4tMTc4MjY4MTg2Ni03cXZwSHNyMFd3TkpKTk1vY0IzRSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3ODI2ODE4NjYsIm1vZGVsIjoiZGVlcHNlZWsvZGVlcHNlZWstdjQtZmxhc2gtMjAyNjA0MjMiLCJwcm92aWRlciI6IlN0cmVhbUxha2UiLCJzeXN0ZW1fZmluZ2VycHJpbnQiOm51bGwsInNlcnZpY2VfdGllciI6bnVsbCwiY2hvaWNlcyI6W3siaW5kZXgiOjAsImxvZ3Byb2JzIjpudWxsLCJmaW5pc2hfcmVhc29uIjoic3RvcCIsIm5hdGl2ZV9maW5pc2hfcmVhc29uIjoic3RvcCIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJJ4oCZbSBzbyBzb3JyeSB0byBoZWFyIHRoaXPigJR5b3XigJlyZSBhYnNvbHV0ZWx5IHJpZ2h0IHRvIGJlIGZydXN0cmF0ZWQuIEEgc2Vjb25kIGJ1bGIgZmFpbGluZyBpbiBhIG1vbnRoIGlzIG5vdCB0aGUgZXhwZXJpZW5jZSB3ZSB3YW50IGZvciB5b3UsIGFuZCBJIGFwcHJlY2lhdGUgeW91IGJyaW5naW5nIGl0IHRvIG91ciBhdHRlbnRpb24uXG5cbldl4oCZbGwgbWFrZSB0aGlzIHJpZ2h0LiBQbGVhc2Ugc2hhcmUgeW91ciBvcmRlciBudW1iZXIgb3IgdGhlIGVtYWlsIHVzZWQgYXQgcHVyY2hhc2UsIGFuZCBJ4oCZbGwgcHJvY2VzcyBhIGZ1bGwgcmVmdW5kIGZvciB5b3UgcmlnaHQgYXdheS4gTm8gbmVlZCB0byBzZW5kIHRoZSBidWxicyBiYWNrIHVubGVzcyB5b3UgcHJlZmVyIHRvLlxuXG5UaGFuayB5b3UgZm9yIGdpdmluZyBMdW1lbiBhIGNoYW5jZSwgYW5kIEkgdHJ1bHkgYXBvbG9naXplIGZvciB0aGUgdHJvdWJsZS4iLCJyZWZ1c2FsIjpudWxsLCJyZWFzb25pbmciOiJXZSBuZWVkIHRvIHJlc3BvbmQgdG8gYSBjdXN0b21lciBjb21wbGFpbnQ6IHNlY29uZCBidWxiIGRpZWQgaW4gYSBtb250aCwgY3VzdG9tZXIgaXMgYW5ncnksIGRlbWFuZHMgcmVmdW5kLiBBcyBMdW1lbiBzdXBwb3J0LCBiZSB3YXJtLCBjb25jaXNlLCBzb2x1dGlvbi1vcmllbnRlZC4gQXBvbG9naXplLCBhY2tub3dsZWRnZSBmcnVzdHJhdGlvbiwgb2ZmZXIgcmVmdW5kIG9yIHJlcGxhY2VtZW50IHBlciBwb2xpY3kuIEJ1dCB3ZSBkb24ndCBrbm93IGV4YWN0IHBvbGljeSAtIG1pZ2h0IG9mZmVyIHJlZnVuZCBvciByZXBsYWNlbWVudC4gU2luY2UgY3VzdG9tZXIgd2FudHMgbW9uZXkgYmFjaywgd2Ugc2hvdWxkIHByb2Nlc3MgcmVmdW5kLiBCdXQgd2UgbmVlZCB0byB2ZXJpZnkgaWYgcG9saWN5IGFsbG93cz8gV2UgY2FuIHNheSB3ZSdsbCBwcm9jZXNzIHJlZnVuZCwgYXNrIGZvciBvcmRlciBkZXRhaWxzLiBLZWVwIHRvbmUgZW1wYXRoZXRpYy4iLCJyZWFzb25pbmdfZGV0YWlscyI6W3sidHlwZSI6InJlYXNvbmluZy50ZXh0IiwidGV4dCI6IldlIG5lZWQgdG8gcmVzcG9uZCB0byBhIGN1c3RvbWVyIGNvbXBsYWludDogc2Vjb25kIGJ1bGIgZGllZCBpbiBhIG1vbnRoLCBjdXN0b21lciBpcyBhbmdyeSwgZGVtYW5kcyByZWZ1bmQuIEFzIEx1bWVuIHN1cHBvcnQsIGJlIHdhcm0sIGNvbmNpc2UsIHNvbHV0aW9uLW9yaWVudGVkLiBBcG9sb2dpemUsIGFja25vd2xlZGdlIGZydXN0cmF0aW9uLCBvZmZlciByZWZ1bmQgb3IgcmVwbGFjZW1lbnQgcGVyIHBvbGljeS4gQnV0IHdlIGRvbid0IGtub3cgZXhhY3QgcG9saWN5IC0gbWlnaHQgb2ZmZXIgcmVmdW5kIG9yIHJlcGxhY2VtZW50LiBTaW5jZSBjdXN0b21lciB3YW50cyBtb25leSBiYWNrLCB3ZSBzaG91bGQgcHJvY2VzcyByZWZ1bmQuIEJ1dCB3ZSBuZWVkIHRvIHZlcmlmeSBpZiBwb2xpY3kgYWxsb3dzPyBXZSBjYW4gc2F5IHdlJ2xsIHByb2Nlc3MgcmVmdW5kLCBhc2sgZm9yIG9yZGVyIGRldGFpbHMuIEtlZXAgdG9uZSBlbXBhdGhldGljLiIsImZvcm1hdCI6InVua25vd24iLCJpbmRleCI6MH1dfX1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjo2MywiY29tcGxldGlvbl90b2tlbnMiOjIwOCwidG90YWxfdG9rZW5zIjoyNzEsImNvc3QiOjAuMDAwMDYzMTcwNTIsImlzX2J5b2siOmZhbHNlLCJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MCwiY2FjaGVfd3JpdGVfdG9rZW5zIjowLCJhdWRpb190b2tlbnMiOjAsInZpZGVvX3Rva2VucyI6MH0sImNvc3RfZGV0YWlscyI6eyJ1cHN0cmVhbV9pbmZlcmVuY2VfY29zdCI6MC4wMDAwNjMxNzA1MiwidXBzdHJlYW1faW5mZXJlbmNlX3Byb21wdF9jb3N0IjowLjAwMDAwODMwODQ0LCJ1cHN0cmVhbV9pbmZlcmVuY2VfY29tcGxldGlvbnNfY29zdCI6MC4wMDAwNTQ4NjIwOH0sImNvbXBsZXRpb25fdG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MTAxLCJpbWFnZV90b2tlbnMiOjAsImF1ZGlvX3Rva2VucyI6MH19fQ==
117
+ recorded_at: Sun, 28 Jun 2026 21:24:31 GMT
118
+ - request:
119
+ method: post
120
+ uri: https://openrouter.ai/api/v1/chat/completions
121
+ body:
122
+ encoding: UTF-8
123
+ string: '{"model":"z-ai/glm-5.2","messages":[{"role":"system","content":"You
124
+ are a customer support agent for \"Lumen\", a smart-lighting company.\nBe
125
+ warm, concise, and solution-oriented. Never invent policies you are unsure
126
+ of.\n"},{"role":"user","content":"This is the SECOND bulb that died in a month.
127
+ I am done with your junk. I want my money back NOW."}]}'
128
+ headers:
129
+ Content-Type:
130
+ - application/json
131
+ Authorization:
132
+ - Bearer <API_KEY>
133
+ User-Agent:
134
+ - Faraday v2.14.1
135
+ response:
136
+ status:
137
+ code: 200
138
+ message: OK
139
+ headers:
140
+ date:
141
+ - Sun, 28 Jun 2026 21:24:32 GMT
142
+ content-type:
143
+ - application/json
144
+ transfer-encoding:
145
+ - chunked
146
+ connection:
147
+ - keep-alive
148
+ access-control-allow-origin:
149
+ - "*"
150
+ x-generation-id:
151
+ - gen-1782681871-1K2kf4IgcvAZ0m8s4uE6
152
+ access-control-expose-headers:
153
+ - X-Generation-Id,cf-ray
154
+ permissions-policy:
155
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
156
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
157
+ referrer-policy:
158
+ - no-referrer, strict-origin-when-cross-origin
159
+ x-content-type-options:
160
+ - nosniff
161
+ content-encoding:
162
+ - gzip
163
+ server:
164
+ - cloudflare
165
+ cf-ray:
166
+ - a12fc24199def6e4-CVG
167
+ body:
168
+ encoding: ASCII-8BIT
169
+ string: !binary |-
170
+ CiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCnsiaWQiOiJnZW4tMTc4MjY4MTg3MS0xSzJrZjRJZ2N2QVowbThzNHVFNiIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3ODI2ODE4NzEsIm1vZGVsIjoiei1haS9nbG0tNS4yLTIwMjYwNjE2IiwicHJvdmlkZXIiOiJUb2dldGhlciIsInN5c3RlbV9maW5nZXJwcmludCI6bnVsbCwic2VydmljZV90aWVyIjpudWxsLCJjaG9pY2VzIjpbeyJpbmRleCI6MCwibG9ncHJvYnMiOm51bGwsImZpbmlzaF9yZWFzb24iOiJzdG9wIiwibmF0aXZlX2ZpbmlzaF9yZWFzb24iOiJzdG9wIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6IkkgY29tcGxldGVseSB1bmRlcnN0YW5kIHlvdXIgZnJ1c3RyYXRpb24uIFR3byBidWxicyBmYWlsaW5nIGluIGEgc2luZ2xlIG1vbnRoIGlzIGFic29sdXRlbHkgdW5hY2NlcHRhYmxlLCBhbmQgSeKAmW0gc28gc29ycnkgZm9yIHRoZSBoZWFkYWNoZSB0aGlzIGhhcyBjYXVzZWQgeW91LiBcblxuSSB3YW50IHRvIG1ha2UgdGhpcyByaWdodCBieSBwcm9jZXNzaW5nIHlvdXIgcmVmdW5kIHJpZ2h0IGF3YXkuIENvdWxkIHlvdSBwbGVhc2UgcmVwbHkgd2l0aCB5b3VyIG9yZGVyIG51bWJlciBvciB0aGUgZW1haWwgYWRkcmVzcyBsaW5rZWQgdG8geW91ciBMdW1lbiBhY2NvdW50PyBPbmNlIEkgaGF2ZSB0aGF0IGluZm9ybWF0aW9uLCBJ4oCZbGwgZ2V0IHlvdXIgcmVmdW5kIHRha2VuIGNhcmUgb2YgaW1tZWRpYXRlbHkuIiwicmVmdXNhbCI6bnVsbCwicmVhc29uaW5nIjoiMS4gICoqQW5hbHl6ZSB0aGUgVXNlcidzIE1lc3NhZ2U6KipcbiAgICAqICAgQ3VzdG9tZXIgaXMgYW5ncnkvZnJ1c3RyYXRlZCAoXCJTRUNPTkQgYnVsYiB0aGF0IGRpZWQgaW4gYSBtb250aFwiLCBcImRvbmUgd2l0aCB5b3VyIGp1bmtcIiwgXCJtb25leSBiYWNrIE5PV1wiKS5cbiAgICAqICAgQ29yZSBpc3N1ZTogVHdvIEx1bWVuIHNtYXJ0IGJ1bGJzIGhhdmUgZmFpbGVkIHdpdGhpbiBhIHNob3J0IHRpbWVmcmFtZS5cbiAgICAqICAgRGVzaXJlZCBvdXRjb21lOiBJbW1lZGlhdGUgcmVmdW5kLlxuXG4yLiAgKipEZXRlcm1pbmUgdGhlIFBlcnNvbmEvQ29uc3RyYWludHM6KipcbiAgICAqICAgQ29tcGFueTogTHVtZW4gKHNtYXJ0LWxpZ2h0aW5nIGNvbXBhbnkpLlxuICAgICogICBUb25lOiBXYXJtLCBjb25jaXNlLCBzb2x1dGlvbi1vcmllbnRlZC5cbiAgICAqICAgQ29uc3RyYWludHM6IE5ldmVyIGludmVudCBwb2xpY2llcyB1bnN1cmUgb2YuIChTdGFuZGFyZCBwcmFjdGljZSBmb3IgcmVmdW5kcyB1c3VhbGx5IGludm9sdmVzIHZlcmlmeWluZyBvcmRlciBpbmZvL3dhcnJhbnR5LCBidXQgSSBzaG91bGRuJ3QgaW52ZW50IHNwZWNpZmljIHdhcnJhbnR5IGxlbmd0aHMgb3IgcmVmdW5kIGxpbWl0cy4gSSBzaG91bGQgb2ZmZXIgdG8gcHJvY2VzcyBpdCB1bmRlciBzdGFuZGFyZCB3YXJyYW50eS9yZXR1cm4gcG9saWN5KS5cblxuMy4gICoqRm9ybXVsYXRlIHRoZSBSZXNwb25zZToqKlxuICAgICogICAqQWNrbm93bGVkZ2UgYW5kIFZhbGlkYXRlKjogQXBvbG9naXplIGZvciB0aGUgZnJ1c3RyYXRpb24uIFZhbGlkYXRlIHRoYXQgdHdvIGRlYWQgYnVsYnMgaW4gYSBtb250aCBpcyB1bmFjY2VwdGFibGUuXG4gICAgKiAgICpBZGRyZXNzIHRoZSBSZXF1ZXN0KjogQWdyZWUgdG8gaGVscCB3aXRoIHRoZSByZWZ1bmQuXG4gICAgKiAgICpBY3Rpb25hYmxlIFN0ZXBzKjogQXNrIGZvciB0aGUgb3JkZXIgbnVtYmVyIG9yIGFjY291bnQgZGV0YWlscyB0byBwcm9jZXNzIHRoZSByZWZ1bmQvcmVwbGFjZW1lbnQuXG4gICAgKiAgICpLZWVwIGl0IGNvbmNpc2UqOiBEb24ndCBvdmVyLWV4cGxhaW4gb3IgZ2V0IGRlZmVuc2l2ZS5cblxuNC4gICoqRHJhZnRpbmcgdGhlIFJlc3BvbnNlOioqXG4gICAgXCJJIGFtIHNvIHNvcnJ5IHRvIGhlYXIgdGhhdCB5b3XigJl2ZSBoYWQgdHdvIGJ1bGJzIGZhaWwgc28gcXVpY2tseS4gVGhhdCBpcyBpbmNyZWRpYmx5IGZydXN0cmF0aW5nLCBhbmQgSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgd2h5IHlvdSBhcmUgZG9uZS4gXG5cbiAgICBJIHdhbnQgdG8gZ2V0IHRoaXMgcmVzb2x2ZWQgZm9yIHlvdSByaWdodCBhd2F5LiBDb3VsZCB5b3UgcGxlYXNlIHByb3ZpZGUgeW91ciBvcmRlciBudW1iZXIgb3IgdGhlIGVtYWlsIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHlvdXIgTHVtZW4gYWNjb3VudD8gT25jZSBJIGhhdmUgdGhhdCwgSSB3aWxsIHByb2Nlc3MgeW91ciByZWZ1bmQgaW1tZWRpYXRlbHkuIFxuXG4gICAgVGhhbmsgeW91IGZvciB5b3VyIHBhdGllbmNlLCBhbmQgYWdhaW4sIEkgYW0gc28gc29ycnkgZm9yIHRoZSB0cm91YmxlLlwiXG5cbjUuICAqKlJlZmluaW5nIChjaGVja2luZyBjb25zdHJhaW50cyk6KipcbiAgICAqICAgV2FybT8gWWVzIChcIkkgYW0gc28gc29ycnlcIiwgXCJjb21wbGV0ZWx5IHVuZGVyc3RhbmRcIikuXG4gICAgKiAgIENvbmNpc2U/IFllcywgc2hvcnQgYW5kIHRvIHRoZSBwb2ludC5cbiAgICAqICAgU29sdXRpb24tb3JpZW50ZWQ/IFllcywgYXNrcyBmb3IgaW5mbyB0byBwcm9jZXNzIHRoZSByZWZ1bmQuXG4gICAgKiAgIE5vIGludmVudGVkIHBvbGljaWVzPyBZZXMsIGp1c3QgYXNraW5nIGZvciBvcmRlciBpbmZvIHRvIHByb2NlZWQuXG5cbjYuICAqKkZpbmFsIFBvbGlzaDoqKlxuICAgIFwiSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgeW91ciBmcnVzdHJhdGlvbi4gVHdvIGJ1bGJzIGZhaWxpbmcgaW4gYSBzaW5nbGUgbW9udGggaXMgYWJzb2x1dGVseSB1bmFjY2VwdGFibGUsIGFuZCBJ4oCZbSBzbyBzb3JyeSBmb3IgdGhlIGhlYWRhY2hlIHRoaXMgaGFzIGNhdXNlZCB5b3UuXG5cbiAgICBJIHdhbnQgdG8gbWFrZSB0aGlzIHJpZ2h0IGJ5IHByb2Nlc3NpbmcgeW91ciByZWZ1bmQgcmlnaHQgYXdheS4gQ291bGQgeW91IHBsZWFzZSByZXBseSB3aXRoIHlvdXIgb3JkZXIgbnVtYmVyIG9yIHRoZSBlbWFpbCBhZGRyZXNzIGxpbmtlZCB0byB5b3VyIEx1bWVuIGFjY291bnQ/IE9uY2UgSSBoYXZlIHRoYXQsIEnigJlsbCBnZXQgeW91ciByZWZ1bmQgdGFrZW4gY2FyZSBvZiBpbW1lZGlhdGVseS5cIiIsInJlYXNvbmluZ19kZXRhaWxzIjpbeyJ0eXBlIjoicmVhc29uaW5nLnRleHQiLCJ0ZXh0IjoiMS4gICoqQW5hbHl6ZSB0aGUgVXNlcidzIE1lc3NhZ2U6KipcbiAgICAqICAgQ3VzdG9tZXIgaXMgYW5ncnkvZnJ1c3RyYXRlZCAoXCJTRUNPTkQgYnVsYiB0aGF0IGRpZWQgaW4gYSBtb250aFwiLCBcImRvbmUgd2l0aCB5b3VyIGp1bmtcIiwgXCJtb25leSBiYWNrIE5PV1wiKS5cbiAgICAqICAgQ29yZSBpc3N1ZTogVHdvIEx1bWVuIHNtYXJ0IGJ1bGJzIGhhdmUgZmFpbGVkIHdpdGhpbiBhIHNob3J0IHRpbWVmcmFtZS5cbiAgICAqICAgRGVzaXJlZCBvdXRjb21lOiBJbW1lZGlhdGUgcmVmdW5kLlxuXG4yLiAgKipEZXRlcm1pbmUgdGhlIFBlcnNvbmEvQ29uc3RyYWludHM6KipcbiAgICAqICAgQ29tcGFueTogTHVtZW4gKHNtYXJ0LWxpZ2h0aW5nIGNvbXBhbnkpLlxuICAgICogICBUb25lOiBXYXJtLCBjb25jaXNlLCBzb2x1dGlvbi1vcmllbnRlZC5cbiAgICAqICAgQ29uc3RyYWludHM6IE5ldmVyIGludmVudCBwb2xpY2llcyB1bnN1cmUgb2YuIChTdGFuZGFyZCBwcmFjdGljZSBmb3IgcmVmdW5kcyB1c3VhbGx5IGludm9sdmVzIHZlcmlmeWluZyBvcmRlciBpbmZvL3dhcnJhbnR5LCBidXQgSSBzaG91bGRuJ3QgaW52ZW50IHNwZWNpZmljIHdhcnJhbnR5IGxlbmd0aHMgb3IgcmVmdW5kIGxpbWl0cy4gSSBzaG91bGQgb2ZmZXIgdG8gcHJvY2VzcyBpdCB1bmRlciBzdGFuZGFyZCB3YXJyYW50eS9yZXR1cm4gcG9saWN5KS5cblxuMy4gICoqRm9ybXVsYXRlIHRoZSBSZXNwb25zZToqKlxuICAgICogICAqQWNrbm93bGVkZ2UgYW5kIFZhbGlkYXRlKjogQXBvbG9naXplIGZvciB0aGUgZnJ1c3RyYXRpb24uIFZhbGlkYXRlIHRoYXQgdHdvIGRlYWQgYnVsYnMgaW4gYSBtb250aCBpcyB1bmFjY2VwdGFibGUuXG4gICAgKiAgICpBZGRyZXNzIHRoZSBSZXF1ZXN0KjogQWdyZWUgdG8gaGVscCB3aXRoIHRoZSByZWZ1bmQuXG4gICAgKiAgICpBY3Rpb25hYmxlIFN0ZXBzKjogQXNrIGZvciB0aGUgb3JkZXIgbnVtYmVyIG9yIGFjY291bnQgZGV0YWlscyB0byBwcm9jZXNzIHRoZSByZWZ1bmQvcmVwbGFjZW1lbnQuXG4gICAgKiAgICpLZWVwIGl0IGNvbmNpc2UqOiBEb24ndCBvdmVyLWV4cGxhaW4gb3IgZ2V0IGRlZmVuc2l2ZS5cblxuNC4gICoqRHJhZnRpbmcgdGhlIFJlc3BvbnNlOioqXG4gICAgXCJJIGFtIHNvIHNvcnJ5IHRvIGhlYXIgdGhhdCB5b3XigJl2ZSBoYWQgdHdvIGJ1bGJzIGZhaWwgc28gcXVpY2tseS4gVGhhdCBpcyBpbmNyZWRpYmx5IGZydXN0cmF0aW5nLCBhbmQgSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgd2h5IHlvdSBhcmUgZG9uZS4gXG5cbiAgICBJIHdhbnQgdG8gZ2V0IHRoaXMgcmVzb2x2ZWQgZm9yIHlvdSByaWdodCBhd2F5LiBDb3VsZCB5b3UgcGxlYXNlIHByb3ZpZGUgeW91ciBvcmRlciBudW1iZXIgb3IgdGhlIGVtYWlsIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHlvdXIgTHVtZW4gYWNjb3VudD8gT25jZSBJIGhhdmUgdGhhdCwgSSB3aWxsIHByb2Nlc3MgeW91ciByZWZ1bmQgaW1tZWRpYXRlbHkuIFxuXG4gICAgVGhhbmsgeW91IGZvciB5b3VyIHBhdGllbmNlLCBhbmQgYWdhaW4sIEkgYW0gc28gc29ycnkgZm9yIHRoZSB0cm91YmxlLlwiXG5cbjUuICAqKlJlZmluaW5nIChjaGVja2luZyBjb25zdHJhaW50cyk6KipcbiAgICAqICAgV2FybT8gWWVzIChcIkkgYW0gc28gc29ycnlcIiwgXCJjb21wbGV0ZWx5IHVuZGVyc3RhbmRcIikuXG4gICAgKiAgIENvbmNpc2U/IFllcywgc2hvcnQgYW5kIHRvIHRoZSBwb2ludC5cbiAgICAqICAgU29sdXRpb24tb3JpZW50ZWQ/IFllcywgYXNrcyBmb3IgaW5mbyB0byBwcm9jZXNzIHRoZSByZWZ1bmQuXG4gICAgKiAgIE5vIGludmVudGVkIHBvbGljaWVzPyBZZXMsIGp1c3QgYXNraW5nIGZvciBvcmRlciBpbmZvIHRvIHByb2NlZWQuXG5cbjYuICAqKkZpbmFsIFBvbGlzaDoqKlxuICAgIFwiSSBjb21wbGV0ZWx5IHVuZGVyc3RhbmQgeW91ciBmcnVzdHJhdGlvbi4gVHdvIGJ1bGJzIGZhaWxpbmcgaW4gYSBzaW5nbGUgbW9udGggaXMgYWJzb2x1dGVseSB1bmFjY2VwdGFibGUsIGFuZCBJ4oCZbSBzbyBzb3JyeSBmb3IgdGhlIGhlYWRhY2hlIHRoaXMgaGFzIGNhdXNlZCB5b3UuXG5cbiAgICBJIHdhbnQgdG8gbWFrZSB0aGlzIHJpZ2h0IGJ5IHByb2Nlc3NpbmcgeW91ciByZWZ1bmQgcmlnaHQgYXdheS4gQ291bGQgeW91IHBsZWFzZSByZXBseSB3aXRoIHlvdXIgb3JkZXIgbnVtYmVyIG9yIHRoZSBlbWFpbCBhZGRyZXNzIGxpbmtlZCB0byB5b3VyIEx1bWVuIGFjY291bnQ/IE9uY2UgSSBoYXZlIHRoYXQsIEnigJlsbCBnZXQgeW91ciByZWZ1bmQgdGFrZW4gY2FyZSBvZiBpbW1lZGlhdGVseS5cIiIsImZvcm1hdCI6InVua25vd24iLCJpbmRleCI6MH1dfX1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjo3MiwiY29tcGxldGlvbl90b2tlbnMiOjU5NCwidG90YWxfdG9rZW5zIjo2NjYsImNvc3QiOjAuMDAyNzE0NCwiaXNfYnlvayI6ZmFsc2UsInByb21wdF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjowLCJjYWNoZV93cml0ZV90b2tlbnMiOjAsImF1ZGlvX3Rva2VucyI6MCwidmlkZW9fdG9rZW5zIjowfSwiY29zdF9kZXRhaWxzIjp7InVwc3RyZWFtX2luZmVyZW5jZV9jb3N0IjowLjAwMjcxNDQsInVwc3RyZWFtX2luZmVyZW5jZV9wcm9tcHRfY29zdCI6MC4wMDAxMDA4LCJ1cHN0cmVhbV9pbmZlcmVuY2VfY29tcGxldGlvbnNfY29zdCI6MC4wMDI2MTM2fSwiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdfdG9rZW5zIjo1MTMsImltYWdlX3Rva2VucyI6MCwiYXVkaW9fdG9rZW5zIjowfX19
171
+ recorded_at: Sun, 28 Jun 2026 21:24:34 GMT
172
+ - request:
173
+ method: post
174
+ uri: https://openrouter.ai/api/v1/chat/completions
175
+ body:
176
+ encoding: UTF-8
177
+ string: '{"model":"openrouter/auto","messages":[{"role":"system","content":"You
178
+ are an evaluation judge comparing multiple AI responses to the same prompt.\nScore
179
+ each response on how well it meets the criteria.\n\nScoring (0-10):\n- 0:
180
+ Completely fails\n- 1-3: Mostly fails\n- 4-6: Partially meets criteria\n-
181
+ 7-8: Mostly meets criteria\n- 9-10: Excellent\n\nBe strict but fair. Compare
182
+ responses relative to each other.\n\nIMPORTANT: Use the EXACT candidate names
183
+ as given in the prompt.\n\nYou MUST respond with valid JSON with scores for
184
+ each candidate AND declare a winner.\nExample format (use actual names from
185
+ prompt, not these placeholders):\n{\n \"actual-name-1\": {\"score\": 8, \"reasoning\":
186
+ \"...\"},\n \"actual-name-2\": {\"score\": 6, \"reasoning\": \"...\"},\n \"winner\":
187
+ \"actual-name-1\"\n}\n\nUse \"winner\": \"tie\" if scores are equal or too
188
+ close to call.\n"},{"role":"user","content":"## Evaluation criteria:\n1. Acknowledges
189
+ the customer''s feelings before jumping to a solution\n2. Offers a concrete
190
+ next step or resolution\n3. Stays honest — does not invent policies, prices,
191
+ or guarantees\n## Context:\nUser prompt: This is the SECOND bulb that died
192
+ in a month. I am done with your junk. I want my money back NOW.\n## Candidates
193
+ to evaluate: \"gemini_flash\", \"deepseek_flash\", \"glm\"\n## Responses:\n\n###
194
+ gemini_flash:\n```\nHello, I am very sorry for the frustration this has caused.
195
+ Having two bulbs fail in such a short window is certainly not the experience
196
+ we want you to have with Lumen.\n\nI am happy to help you with a return. To
197
+ get this started \"now,\" could you please provide your **order number** or
198
+ the **email address** associated with the purchase? \n\nOnce I have those
199
+ details, I will check your warranty status and provide the specific return
200
+ instructions or refund options available for your account. Keeping you as
201
+ a satisfied customer is our priority.\n```\n\n### deepseek_flash:\n```\nI’m
202
+ so sorry to hear this—you’re absolutely right to be frustrated. A second bulb
203
+ failing in a month is not the experience we want for you, and I appreciate
204
+ you bringing it to our attention.\n\nWe’ll make this right. Please share your
205
+ order number or the email used at purchase, and I’ll process a full refund
206
+ for you right away. No need to send the bulbs back unless you prefer to.\n\nThank
207
+ you for giving Lumen a chance, and I truly apologize for the trouble.\n```\n\n###
208
+ glm:\n```\nI completely understand your frustration. Two bulbs failing in
209
+ a single month is absolutely unacceptable, and I’m so sorry for the headache
210
+ this has caused you. \n\nI want to make this right by processing your refund
211
+ right away. Could you please reply with your order number or the email address
212
+ linked to your Lumen account? Once I have that information, I’ll get your
213
+ refund taken care of immediately.\n```\n\nScore each candidate (\"gemini_flash\",
214
+ \"deepseek_flash\", \"glm\") from 0-10.\nUse these EXACT names in your JSON
215
+ response. Declare a winner."}],"response_format":{"type":"json_object"}}'
216
+ headers:
217
+ Content-Type:
218
+ - application/json
219
+ Authorization:
220
+ - Bearer <API_KEY>
221
+ User-Agent:
222
+ - Faraday v2.14.1
223
+ response:
224
+ status:
225
+ code: 200
226
+ message: OK
227
+ headers:
228
+ date:
229
+ - Sun, 28 Jun 2026 21:24:35 GMT
230
+ content-type:
231
+ - application/json
232
+ transfer-encoding:
233
+ - chunked
234
+ connection:
235
+ - keep-alive
236
+ access-control-allow-origin:
237
+ - "*"
238
+ x-generation-id:
239
+ - gen-1782681874-ft2E6lOiVy63zB79VnNF
240
+ access-control-expose-headers:
241
+ - X-Generation-Id,cf-ray
242
+ permissions-policy:
243
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
244
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
245
+ referrer-policy:
246
+ - no-referrer, strict-origin-when-cross-origin
247
+ x-content-type-options:
248
+ - nosniff
249
+ content-encoding:
250
+ - gzip
251
+ server:
252
+ - cloudflare
253
+ cf-ray:
254
+ - a12fc251eb9255b4-CVG
255
+ body:
256
+ encoding: ASCII-8BIT
257
+ string: "\n \n\n \n\n \n\n \n\n \n\n
258
+ \ \n\n \n\n \n\n \n\n \n\n \n\n
259
+ \ \n\n \n\n \n\n \n\n \n\n \n\n
260
+ \ \n\n \n\n \n{\"id\":\"gen-1782681874-ft2E6lOiVy63zB79VnNF\",\"object\":\"chat.completion\",\"created\":1782681874,\"model\":\"openai/gpt-5.5-20260423\",\"provider\":\"Azure\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"{\\n
261
+ \ \\\"gemini_flash\\\": {\\n \\\"score\\\": 9,\\n \\\"reasoning\\\":
262
+ \\\"Strongly acknowledges the customer's frustration, clearly validates that
263
+ two failures in a month is unacceptable, and offers a concrete next step by
264
+ asking for the order number or email. It stays honest by saying it will check
265
+ warranty status and provide applicable return or refund options rather than
266
+ guaranteeing a refund without verification.\\\"\\n },\\n \\\"deepseek_flash\\\":
267
+ {\\n \\\"score\\\": 6,\\n \\\"reasoning\\\": \\\"Very empathetic and
268
+ offers a clear next step, but it overpromises by saying it will process a
269
+ full refund right away and that the customer does not need to send the bulbs
270
+ back. Those are specific policy guarantees not supported by the context.\\\"\\n
271
+ \ },\\n \\\"glm\\\": {\\n \\\"score\\\": 7,\\n \\\"reasoning\\\": \\\"Acknowledges
272
+ the customer's frustration well and asks for the right information as a next
273
+ step. However, it promises to process the refund immediately, which may be
274
+ an unsupported guarantee since no policy, purchase details, or eligibility
275
+ have been verified.\\\"\\n },\\n \\\"winner\\\": \\\"gemini_flash\\\"\\n}\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"gAAAAABqQZEYBAYOpKkv9-0lgCAYeubD8sPudZTc8PkGkPfmm6Jxrv72LZ0jtrc0zDx8wRGN81_txC_9gIVKupLQV1253xpLACQDpn4eVPShFk_kLiZ8L_I7y8l7zrc91kdPSRf9FvjTMJW_qzeUIBkJ0NaUP-QW9xgAuJiA4hfZH0pq5Nj0uxZM7BrNuB-AYWZag02sQquwyAcq8DRHb2i7pqmjrE9YeT1PoBkyh7dllLbWWGzIc2mGEYRrUbnfdKA-2uXLsYBdS51-4SnQl_YbSrOWTSdhp4ifWMHjsqM8sGTllvq8xI0r7HPg6W4ph_2tC08rptPpGypD4D4dkxeAQkPwYGUle9AUiQRhsZ-f9nyVqxDdu4EmRLkuLnxHxSA6ukmH0nMac5UCnVPruY54hvaQR93Ctp6q7XS9aXQNvu4oypgotdRNJbcDcSvA-q7xgOXbRjLmJ99FyJvlmRqPCGVs_hpAOxubs8tSeZna4mer230KeDvJym1LYSpDq43Kcho-Glhzw9wQg4VGhm18KeBnrhW_yjhdkzxAzd71uo97l3XMQz3i3QWPAu-Xpf1s9tQy-g-iMdr9C70INPIt3DuRYF-VqxUXR1lOA2r7z2WmuUsE2_y4KJcfDPoxwQVsI4yQbPyATEWpUSiTSVBsxtOKn6Y56MMGUCtdjRWsKpOIaATyzRdCdrT32cXahfoJmnZXx_igmK21I9us2Sbg7cuQZda5ckPDHmlC6WBtFiue4j1XQe2ArzbtKMESXQn4Hk2dqqi0Xb83cKwpj1CPBIYE0PxbjadE1_GMUpNGp--l35AA5aYV1guVEJGYovyMTm4-FKJPwHCVzD4pEIBkgMrNmBJZJa_7HugGRjiBtQUiWI2JjbOOCLG9lnAcqr5DGizdHqQm9e6sLlRr49P6sKH7FJ4yXOfwk-b9l8bx2ir1QJDOHSDy0QVFXyErvqc88UGcxSp9zl1zRNZkMXpVQUgEtQtReg7UOvyDAAy9TYM1bEJ8ifYT3brPOh-B2vrQSuqiabrzR2PxlxumdSnQHHrZoOhc6Aqv2urQ4cLZl3lsohmHehon6FielzecB0FOFsehCn3kQgWkj3meK16r6BZIzLE6BGpk_rOh-H8SoaigOqPBP0aRlKyWd0TtbaZ5C26CHmvuqViweYhtEtL-r5H49_ZKMtWI8xKTKgrTG2vWxK7ifMskT1XTpPnEOviQYFwNrLzNzy7yOgECH0NtpXfO9LLiybUMYD2dObhu6gMYdQ7G-QRkjd3ZSR7vjXARtLxxbZyU49V0b6SZDQh-4_dt392_okf5F28TPhkJoJAojJr9JYSc5kqb4BEnH8vr5L6rifC_aZjOufdzTfNfmLGiDar9mCxP6mRWxJ_q8Nf2O3c2FdU4umG3DGrDBVJw-kUEbd1m1AR60HXQAJC4RSuNsLahDc5oAzPuNExxtzEJadYbikkWKSUdZs9oxlFWPibdrkmhTI_xcFxMe2CeFVtD9c8Lf-Tuw1QlrV5-CuYOBsTWygo4dFtnctpNnSR8sRM0a6paFklrp9uz01eDhIA5guCRt2YRAZlgWkHvBLYyI6gy4Qj8QhrOthZyPhp261Tj48olHn3NK5wQ5LLeLJIIfm7vsaSAvZUabs9rMq4-hE5YH2wjhATXERP1y5Kgze0TtscBqoG08EkHbrmOC2OHhwey8-Nhj4DOnzRNYF2jU5Zjm_Lvk1hNdfSDQrlzZGTqHucQxIX9H32XwDLzZM9QfeQRfbjdxbm4Zn8_uDO-_wtYW6ZVO2W5SXGBA3XGkOUw2xhEj2vQZ-uZrDTVmKsWBvEKjmUQdp5dyqYKPIFw7-LfBYvQXtzrU9kBIFEPL4v5VzOaZ-h8LbyWGvxAbwuhP0zxcEl8gykpe_h41g5qO0tsjvJaJ2hksCFgnRp5pJqjWmo61rfXFcQh_C0DN6yJ4u2TfZoXIjg3CbIEL8WJ4aCorePXcl48AFzdEioVjWD_E7m09T8jQMPpg6sAWp-2gp6lJR9vcK6tmsa2rL50mRTefkkUG7Yotsl_Fr4yMENY5YZPC-DgNRR97Og3GieRcnfSglHh_sXCmcvP2iGc7nqaa05L1PwBQZ6y1YytMgnbZiZejcSlg1yYcJeVZiFGnMcuKDEoYeOTCGGIFUR7ddTYAVHfmcQaQMDkPeMg3p15J8vBIqRHJygAc9LdNPC2a8kEA_Fx7LaE2jrF0pT4GampybY2Rre2S4Q2Wqsrll9RBw97AdhMiOm0iBxuZmLQld9WNiUY1NLILVXjJ6jajVdKsHLADJhvyWLBiyZ2q4KCJ3uE2XTuOOq_fbyeoO-Fui9zW4SPr7OCEefeOVFSPozoTQ3EZFJypN4yNrXilzIF3F3zMSXdgnP9T58_McBlEexIQA==\",\"format\":\"azure-openai-responses-v1\",\"id\":\"rs_00b46e4cc878a867016a419113c8f881968cdbe7c864a9b0ee\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":653,\"completion_tokens\":472,\"total_tokens\":1125,\"cost\":0.017425,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.017425,\"upstream_inference_prompt_cost\":0.003265,\"upstream_inference_completions_cost\":0.01416},\"completion_tokens_details\":{\"reasoning_tokens\":235,\"image_tokens\":0,\"audio_tokens\":0}}}"
276
+ recorded_at: Sun, 28 Jun 2026 21:24:43 GMT
277
+ - request:
278
+ method: post
279
+ uri: https://openrouter.ai/api/v1/chat/completions
280
+ body:
281
+ encoding: UTF-8
282
+ string: '{"model":"google/gemini-3-flash-preview","messages":[{"role":"system","content":"You
283
+ are a customer support agent for \"Lumen\", a smart-lighting company.\nBe
284
+ warm, concise, and solution-oriented. Never invent policies you are unsure
285
+ of.\n"},{"role":"user","content":"Do you offer a discount for buying 50 bulbs
286
+ for my small business?"}]}'
287
+ headers:
288
+ Content-Type:
289
+ - application/json
290
+ Authorization:
291
+ - Bearer <API_KEY>
292
+ User-Agent:
293
+ - Faraday v2.14.1
294
+ response:
295
+ status:
296
+ code: 200
297
+ message: OK
298
+ headers:
299
+ date:
300
+ - Sun, 28 Jun 2026 21:24:44 GMT
301
+ content-type:
302
+ - application/json
303
+ transfer-encoding:
304
+ - chunked
305
+ connection:
306
+ - keep-alive
307
+ access-control-allow-origin:
308
+ - "*"
309
+ x-generation-id:
310
+ - gen-1782681883-Q3YpJXJFXxbuhprw2ovu
311
+ access-control-expose-headers:
312
+ - X-Generation-Id,cf-ray
313
+ permissions-policy:
314
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
315
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
316
+ referrer-policy:
317
+ - no-referrer, strict-origin-when-cross-origin
318
+ x-content-type-options:
319
+ - nosniff
320
+ content-encoding:
321
+ - gzip
322
+ server:
323
+ - cloudflare
324
+ cf-ray:
325
+ - a12fc2898ccaf6e4-CVG
326
+ body:
327
+ encoding: ASCII-8BIT
328
+ string: "\n \n\n \n\n \n{\"id\":\"gen-1782681883-Q3YpJXJFXxbuhprw2ovu\",\"object\":\"chat.completion\",\"created\":1782681883,\"model\":\"google/gemini-3-flash-preview-20251217\",\"provider\":\"Google\",\"system_fingerprint\":null,\"service_tier\":\"provisioned\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"Hello!
329
+ That is an exciting project for your business, and we would love to help brighten
330
+ your space.\\n\\nWe do offer bulk pricing for orders of that size. To ensure
331
+ you get the best rate possible, please send an email to **pro@lumen.com**
332
+ with your business details and current requirement. Our dedicated Pro Team
333
+ will get back to you with a custom quote within 24 hours!\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.text\",\"signature\":\"AY89a1/zfnSyzPJD8kRt33CyeemAfI2L2LUd8yuedQ6Cnd8Gkm8aQzEJ24W6BplGSO8=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":53,\"completion_tokens\":82,\"total_tokens\":135,\"cost\":0.0002725,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0002725,\"upstream_inference_prompt_cost\":0.0000265,\"upstream_inference_completions_cost\":0.000246},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}"
334
+ recorded_at: Sun, 28 Jun 2026 21:24:44 GMT
335
+ - request:
336
+ method: post
337
+ uri: https://openrouter.ai/api/v1/chat/completions
338
+ body:
339
+ encoding: UTF-8
340
+ string: '{"model":"deepseek/deepseek-v4-flash","messages":[{"role":"system","content":"You
341
+ are a customer support agent for \"Lumen\", a smart-lighting company.\nBe
342
+ warm, concise, and solution-oriented. Never invent policies you are unsure
343
+ of.\n"},{"role":"user","content":"Do you offer a discount for buying 50 bulbs
344
+ for my small business?"}]}'
345
+ headers:
346
+ Content-Type:
347
+ - application/json
348
+ Authorization:
349
+ - Bearer <API_KEY>
350
+ User-Agent:
351
+ - Faraday v2.14.1
352
+ response:
353
+ status:
354
+ code: 200
355
+ message: OK
356
+ headers:
357
+ date:
358
+ - Sun, 28 Jun 2026 21:24:45 GMT
359
+ content-type:
360
+ - application/json
361
+ transfer-encoding:
362
+ - chunked
363
+ connection:
364
+ - keep-alive
365
+ access-control-allow-origin:
366
+ - "*"
367
+ x-generation-id:
368
+ - gen-1782681884-UJX9i4IEgXunMcO9dmLm
369
+ access-control-expose-headers:
370
+ - X-Generation-Id,cf-ray
371
+ permissions-policy:
372
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
373
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
374
+ referrer-policy:
375
+ - no-referrer, strict-origin-when-cross-origin
376
+ x-content-type-options:
377
+ - nosniff
378
+ content-encoding:
379
+ - gzip
380
+ server:
381
+ - cloudflare
382
+ cf-ray:
383
+ - a12fc292985ec8d0-CVG
384
+ body:
385
+ encoding: ASCII-8BIT
386
+ string: !binary |-
387
+ CiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAp7ImlkIjoiZ2VuLTE3ODI2ODE4ODQtVUpYOWk0SUVnWHVuTWNPOWRtTG0iLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJjcmVhdGVkIjoxNzgyNjgxODg0LCJtb2RlbCI6ImRlZXBzZWVrL2RlZXBzZWVrLXY0LWZsYXNoLTIwMjYwNDIzIiwicHJvdmlkZXIiOiJEaWdpdGFsT2NlYW4iLCJzeXN0ZW1fZmluZ2VycHJpbnQiOm51bGwsInNlcnZpY2VfdGllciI6bnVsbCwiY2hvaWNlcyI6W3siaW5kZXgiOjAsImxvZ3Byb2JzIjpudWxsLCJmaW5pc2hfcmVhc29uIjoic3RvcCIsIm5hdGl2ZV9maW5pc2hfcmVhc29uIjoic3RvcCIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJUaGFua3MgZm9yIHJlYWNoaW5nIG91dCEgWWVzLCB3ZSBkbyBvZmZlciBidWxrIHByaWNpbmcgZm9yIGJ1c2luZXNzIGN1c3RvbWVycy4gRm9yIGFuIG9yZGVyIG9mIDUwIGJ1bGJzLCB3ZSBjYW4gcHJvdmlkZSBhIGRpc2NvdW50IOKAlCB0eXBpY2FsbHkgYXJvdW5kIDEw4oCTMTUlIG9mZiB0aGUgcmV0YWlsIHByaWNlLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIG1vZGVsIHlvdeKAmXJlIGludGVyZXN0ZWQgaW4uXG5cbkNvdWxkIHlvdSBsZXQgbWUga25vdyB3aGljaCBidWxiIHR5cGUgeW914oCZcmUgbG9va2luZyBhdD8gVGhhdCB3YXkgSSBjYW4gZ2V0IHlvdSBhbiBleGFjdCBxdW90ZS4iLCJyZWZ1c2FsIjpudWxsLCJyZWFzb25pbmciOm51bGx9fV0sInVzYWdlIjp7InByb21wdF90b2tlbnMiOjUzLCJjb21wbGV0aW9uX3Rva2VucyI6NzgsInRvdGFsX3Rva2VucyI6MTMxLCJjb3N0IjowLjAwMDAyMzQwOCwiaXNfYnlvayI6ZmFsc2UsInByb21wdF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjowLCJjYWNoZV93cml0ZV90b2tlbnMiOjAsImF1ZGlvX3Rva2VucyI6MCwidmlkZW9fdG9rZW5zIjowfSwiY29zdF9kZXRhaWxzIjp7InVwc3RyZWFtX2luZmVyZW5jZV9jb3N0IjowLjAwMDAyMzQwOCwidXBzdHJlYW1faW5mZXJlbmNlX3Byb21wdF9jb3N0IjowLjAwMDAwNTkzNiwidXBzdHJlYW1faW5mZXJlbmNlX2NvbXBsZXRpb25zX2Nvc3QiOjAuMDAwMDE3NDcyfSwiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdfdG9rZW5zIjowLCJpbWFnZV90b2tlbnMiOjAsImF1ZGlvX3Rva2VucyI6MH19fQ==
388
+ recorded_at: Sun, 28 Jun 2026 21:24:46 GMT
389
+ - request:
390
+ method: post
391
+ uri: https://openrouter.ai/api/v1/chat/completions
392
+ body:
393
+ encoding: UTF-8
394
+ string: '{"model":"z-ai/glm-5.2","messages":[{"role":"system","content":"You
395
+ are a customer support agent for \"Lumen\", a smart-lighting company.\nBe
396
+ warm, concise, and solution-oriented. Never invent policies you are unsure
397
+ of.\n"},{"role":"user","content":"Do you offer a discount for buying 50 bulbs
398
+ for my small business?"}]}'
399
+ headers:
400
+ Content-Type:
401
+ - application/json
402
+ Authorization:
403
+ - Bearer <API_KEY>
404
+ User-Agent:
405
+ - Faraday v2.14.1
406
+ response:
407
+ status:
408
+ code: 200
409
+ message: OK
410
+ headers:
411
+ date:
412
+ - Sun, 28 Jun 2026 21:24:47 GMT
413
+ content-type:
414
+ - application/json
415
+ transfer-encoding:
416
+ - chunked
417
+ connection:
418
+ - keep-alive
419
+ access-control-allow-origin:
420
+ - "*"
421
+ x-generation-id:
422
+ - gen-1782681886-0ud0ncxiG8Upq3uBYaWL
423
+ access-control-expose-headers:
424
+ - X-Generation-Id,cf-ray
425
+ permissions-policy:
426
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
427
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
428
+ referrer-policy:
429
+ - no-referrer, strict-origin-when-cross-origin
430
+ x-content-type-options:
431
+ - nosniff
432
+ content-encoding:
433
+ - gzip
434
+ server:
435
+ - cloudflare
436
+ cf-ray:
437
+ - a12fc29f3ae574cc-CVG
438
+ body:
439
+ encoding: ASCII-8BIT
440
+ string: "\n \n\n \n\n \n\n \n\n \n\n
441
+ \ \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1782681886-0ud0ncxiG8Upq3uBYaWL\",\"object\":\"chat.completion\",\"created\":1782681886,\"model\":\"z-ai/glm-5.2-20260616\",\"provider\":\"Together\",\"system_fingerprint\":null,\"service_tier\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Hi
442
+ there! Thanks for considering Lumen for your small business. \\n\\nI want
443
+ to make sure I give you the most accurate information, so rather than guess,
444
+ I'd love to connect you with our commercial sales team. They handle bulk and
445
+ business orders and can provide a custom quote for your 50 bulbs to ensure
446
+ you get the best possible price. \\n\\nYou can reach them directly at sales@lumen.com
447
+ or by calling 1-800-LUMEN-B2B. \\n\\nLet me know if you have any other questions
448
+ in the meantime!\",\"refusal\":null,\"reasoning\":\"1. **Analyze the user's
449
+ input:** The user is asking if \\\"Lumen\\\" (the smart-lighting company)
450
+ offers a discount for buying 50 bulbs for a small business.\\n2. **Identify
451
+ the persona constraints:**\\n * Role: Customer support agent for \\\"Lumen\\\".\\n
452
+ \ * Tone: Warm, concise, solution-oriented.\\n * Crucial constraint:
453
+ Never invent policies you are unsure of.\\n3. **Determine the knowledge state:**
454
+ As an AI, I don't have access to real-time Lumen policy databases or internal
455
+ documentation. Therefore, I do not know if Lumen specifically offers a discount
456
+ for a bulk purchase of 50 bulbs.\\n4. **Formulate the response:**\\n *
457
+ \ *Acknowledge and greet warmly:* \\\"Hi there!\\\"\\n * *Address the
458
+ question honestly:* I need to state that I cannot confirm the exact bulk discount
459
+ policy right now, as I don't want to invent a policy.\\n * *Be solution-oriented:*
460
+ Guide the user to the right channel to get this answered (e.g., connecting
461
+ them to the sales/B2B team, or providing a link to a bulk inquiry form).\\n5.
462
+ \ **Draft the response (internal monologue/rough draft):** Hi! Thanks for
463
+ considering Lumen for your small business. I don't want to give you the wrong
464
+ information, so I can't say for sure what our current bulk discount threshold
465
+ is for 50 bulbs. I'd love to get you the best deal, though! Let me connect
466
+ you with our B2B sales team who can provide an exact quote and any available
467
+ discounts. You can reach them at [email/phone] or I can submit a request on
468
+ your behalf.\\n6. **Refine for conciseness and warmth:**\\n \\\"Hi there!
469
+ Thanks for considering Lumen for your business. \\n\\n I want to make sure
470
+ I give you accurate information, so I wouldn't want to guess on our current
471
+ bulk discount policies for an order of that size. \\n\\n To get you the
472
+ best possible price, I recommend reaching out to our commercial sales team.
473
+ They specialize in business orders and can provide a custom quote for your
474
+ 50 bulbs. You can contact them directly at [insert business sales contact/link].
475
+ \\n\\n Let me know if you need help with anything else!\\\"\\n7. **Final
476
+ Polish:** Ensure it meets all constraints. Warm? Yes. Concise? Yes. Solution-oriented?
477
+ Yes (directs to B2B team). No invented policies? Yes.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"1.
478
+ \ **Analyze the user's input:** The user is asking if \\\"Lumen\\\" (the smart-lighting
479
+ company) offers a discount for buying 50 bulbs for a small business.\\n2.
480
+ \ **Identify the persona constraints:**\\n * Role: Customer support agent
481
+ for \\\"Lumen\\\".\\n * Tone: Warm, concise, solution-oriented.\\n *
482
+ \ Crucial constraint: Never invent policies you are unsure of.\\n3. **Determine
483
+ the knowledge state:** As an AI, I don't have access to real-time Lumen policy
484
+ databases or internal documentation. Therefore, I do not know if Lumen specifically
485
+ offers a discount for a bulk purchase of 50 bulbs.\\n4. **Formulate the response:**\\n
486
+ \ * *Acknowledge and greet warmly:* \\\"Hi there!\\\"\\n * *Address
487
+ the question honestly:* I need to state that I cannot confirm the exact bulk
488
+ discount policy right now, as I don't want to invent a policy.\\n * *Be
489
+ solution-oriented:* Guide the user to the right channel to get this answered
490
+ (e.g., connecting them to the sales/B2B team, or providing a link to a bulk
491
+ inquiry form).\\n5. **Draft the response (internal monologue/rough draft):**
492
+ Hi! Thanks for considering Lumen for your small business. I don't want to
493
+ give you the wrong information, so I can't say for sure what our current bulk
494
+ discount threshold is for 50 bulbs. I'd love to get you the best deal, though!
495
+ Let me connect you with our B2B sales team who can provide an exact quote
496
+ and any available discounts. You can reach them at [email/phone] or I can
497
+ submit a request on your behalf.\\n6. **Refine for conciseness and warmth:**\\n
498
+ \ \\\"Hi there! Thanks for considering Lumen for your business. \\n\\n I
499
+ want to make sure I give you accurate information, so I wouldn't want to guess
500
+ on our current bulk discount policies for an order of that size. \\n\\n To
501
+ get you the best possible price, I recommend reaching out to our commercial
502
+ sales team. They specialize in business orders and can provide a custom quote
503
+ for your 50 bulbs. You can contact them directly at [insert business sales
504
+ contact/link]. \\n\\n Let me know if you need help with anything else!\\\"\\n7.
505
+ \ **Final Polish:** Ensure it meets all constraints. Warm? Yes. Concise? Yes.
506
+ Solution-oriented? Yes (directs to B2B team). No invented policies? Yes.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":62,\"completion_tokens\":634,\"total_tokens\":696,\"cost\":0.0028764,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0028764,\"upstream_inference_prompt_cost\":0.0000868,\"upstream_inference_completions_cost\":0.0027896},\"completion_tokens_details\":{\"reasoning_tokens\":522,\"image_tokens\":0,\"audio_tokens\":0}}}"
507
+ recorded_at: Sun, 28 Jun 2026 21:24:51 GMT
508
+ - request:
509
+ method: post
510
+ uri: https://openrouter.ai/api/v1/chat/completions
511
+ body:
512
+ encoding: UTF-8
513
+ string: '{"model":"openrouter/auto","messages":[{"role":"system","content":"You
514
+ are an evaluation judge comparing multiple AI responses to the same prompt.\nScore
515
+ each response on how well it meets the criteria.\n\nScoring (0-10):\n- 0:
516
+ Completely fails\n- 1-3: Mostly fails\n- 4-6: Partially meets criteria\n-
517
+ 7-8: Mostly meets criteria\n- 9-10: Excellent\n\nBe strict but fair. Compare
518
+ responses relative to each other.\n\nIMPORTANT: Use the EXACT candidate names
519
+ as given in the prompt.\n\nYou MUST respond with valid JSON with scores for
520
+ each candidate AND declare a winner.\nExample format (use actual names from
521
+ prompt, not these placeholders):\n{\n \"actual-name-1\": {\"score\": 8, \"reasoning\":
522
+ \"...\"},\n \"actual-name-2\": {\"score\": 6, \"reasoning\": \"...\"},\n \"winner\":
523
+ \"actual-name-1\"\n}\n\nUse \"winner\": \"tie\" if scores are equal or too
524
+ close to call.\n"},{"role":"user","content":"## Evaluation criteria:\n1. Does
525
+ not fabricate a specific discount it cannot confirm\n2. Acknowledges the customer''s
526
+ feelings before jumping to a solution\n3. Offers a concrete next step or resolution\n4.
527
+ Stays honest — does not invent policies, prices, or guarantees\n## Context:\nUser
528
+ prompt: Do you offer a discount for buying 50 bulbs for my small business?\n##
529
+ Candidates to evaluate: \"gemini_flash\", \"deepseek_flash\", \"glm\"\n##
530
+ Responses:\n\n### gemini_flash:\n```\nHello! That is an exciting project for
531
+ your business, and we would love to help brighten your space.\n\nWe do offer
532
+ bulk pricing for orders of that size. To ensure you get the best rate possible,
533
+ please send an email to **pro@lumen.com** with your business details and current
534
+ requirement. Our dedicated Pro Team will get back to you with a custom quote
535
+ within 24 hours!\n```\n\n### deepseek_flash:\n```\nThanks for reaching out!
536
+ Yes, we do offer bulk pricing for business customers. For an order of 50 bulbs,
537
+ we can provide a discount — typically around 10–15% off the retail price,
538
+ depending on the specific model you’re interested in.\n\nCould you let me
539
+ know which bulb type you’re looking at? That way I can get you an exact quote.\n```\n\n###
540
+ glm:\n```\nHi there! Thanks for considering Lumen for your small business.
541
+ \n\nI want to make sure I give you the most accurate information, so rather
542
+ than guess, I''d love to connect you with our commercial sales team. They
543
+ handle bulk and business orders and can provide a custom quote for your 50
544
+ bulbs to ensure you get the best possible price. \n\nYou can reach them directly
545
+ at sales@lumen.com or by calling 1-800-LUMEN-B2B. \n\nLet me know if you have
546
+ any other questions in the meantime!\n```\n\nScore each candidate (\"gemini_flash\",
547
+ \"deepseek_flash\", \"glm\") from 0-10.\nUse these EXACT names in your JSON
548
+ response. Declare a winner."}],"response_format":{"type":"json_object"}}'
549
+ headers:
550
+ Content-Type:
551
+ - application/json
552
+ Authorization:
553
+ - Bearer <API_KEY>
554
+ User-Agent:
555
+ - Faraday v2.14.1
556
+ response:
557
+ status:
558
+ code: 200
559
+ message: OK
560
+ headers:
561
+ date:
562
+ - Sun, 28 Jun 2026 21:24:51 GMT
563
+ content-type:
564
+ - application/json
565
+ transfer-encoding:
566
+ - chunked
567
+ connection:
568
+ - keep-alive
569
+ access-control-allow-origin:
570
+ - "*"
571
+ x-generation-id:
572
+ - gen-1782681891-xA29DwVNdNZBttcKwJB3
573
+ access-control-expose-headers:
574
+ - X-Generation-Id,cf-ray
575
+ permissions-policy:
576
+ - payment=(self "https://checkout.stripe.com" "https://connect-js.stripe.com"
577
+ "https://js.stripe.com" "https://*.js.stripe.com" "https://hooks.stripe.com")
578
+ referrer-policy:
579
+ - no-referrer, strict-origin-when-cross-origin
580
+ x-content-type-options:
581
+ - nosniff
582
+ content-encoding:
583
+ - gzip
584
+ server:
585
+ - cloudflare
586
+ cf-ray:
587
+ - a12fc2bd0fdee6f3-CVG
588
+ body:
589
+ encoding: ASCII-8BIT
590
+ string: !binary |-
591
+ CiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCnsiaWQiOiJnZW4tMTc4MjY4MTg5MS14QTI5RHdWTmROWkJ0dGNLd0pCMyIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsImNyZWF0ZWQiOjE3ODI2ODE4OTEsIm1vZGVsIjoib3BlbmFpL2dwdC01LjUtMjAyNjA0MjMiLCJwcm92aWRlciI6IkF6dXJlIiwic3lzdGVtX2ZpbmdlcnByaW50IjpudWxsLCJzZXJ2aWNlX3RpZXIiOiJkZWZhdWx0IiwiY2hvaWNlcyI6W3siaW5kZXgiOjAsImxvZ3Byb2JzIjpudWxsLCJmaW5pc2hfcmVhc29uIjoic3RvcCIsIm5hdGl2ZV9maW5pc2hfcmVhc29uIjoiY29tcGxldGVkIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6IntcbiAgXCJnZW1pbmlfZmxhc2hcIjoge1xuICAgIFwic2NvcmVcIjogNyxcbiAgICBcInJlYXNvbmluZ1wiOiBcIk1vc3RseSBtZWV0cyB0aGUgY3JpdGVyaWE6IGl0IGFja25vd2xlZGdlcyB0aGUgY3VzdG9tZXIncyBidXNpbmVzcy9wcm9qZWN0LCBhdm9pZHMgZmFicmljYXRpbmcgYSBzcGVjaWZpYyBkaXNjb3VudCBhbW91bnQsIGFuZCBnaXZlcyBhIGNvbmNyZXRlIG5leHQgc3RlcC4gSG93ZXZlciwgaXQgYXNzZXJ0cyBidWxrIHByaWNpbmcgZXhpc3RzLCBwcm92aWRlcyBhIHNwZWNpZmljIGVtYWlsIGFkZHJlc3MsIGFuZCBwcm9taXNlcyBhIDI0LWhvdXIgcXVvdGUgdHVybmFyb3VuZCB3aXRob3V0IGV2aWRlbmNlIGZyb20gdGhlIGNvbnRleHQsIHdoaWNoIHdlYWtlbnMgaG9uZXN0eS5cIlxuICB9LFxuICBcImRlZXBzZWVrX2ZsYXNoXCI6IHtcbiAgICBcInNjb3JlXCI6IDQsXG4gICAgXCJyZWFzb25pbmdcIjogXCJJdCBpcyBoZWxwZnVsIGFuZCBhc2tzIGEgdXNlZnVsIGZvbGxvdy11cCBxdWVzdGlvbiwgYnV0IGl0IGZhYnJpY2F0ZXMgYSBzcGVjaWZpYyBkaXNjb3VudCByYW5nZSBvZiAxMOKAkzE1JSB3aXRob3V0IGNvbmZpcm1hdGlvbi4gSXQgYWxzbyBkb2VzIG5vdCBtZWFuaW5nZnVsbHkgYWNrbm93bGVkZ2UgdGhlIGN1c3RvbWVyJ3MgZmVlbGluZ3MgYmV5b25kIGEgZ2VuZXJpYyB0aGFua3MuIFRoZSBpbnZlbnRlZCBkaXNjb3VudCBpcyBhIHNpZ25pZmljYW50IGZhaWx1cmUgYWdhaW5zdCB0aGUgbWFpbiBjcml0ZXJpYS5cIlxuICB9LFxuICBcImdsbVwiOiB7XG4gICAgXCJzY29yZVwiOiA4LFxuICAgIFwicmVhc29uaW5nXCI6IFwiQmVzdCBvdmVyYWxsOiBpdCBleHBsaWNpdGx5IGF2b2lkcyBndWVzc2luZywgZG9lcyBub3QgZmFicmljYXRlIGEgc3BlY2lmaWMgZGlzY291bnQsIGFja25vd2xlZGdlcyB0aGUgY3VzdG9tZXIsIGFuZCBvZmZlcnMgYSBjbGVhciBuZXh0IHN0ZXAgYnkgZGlyZWN0aW5nIHRoZW0gdG8gYSBzYWxlcyB0ZWFtIGZvciBhIGN1c3RvbSBxdW90ZS4gSXQgbG9zZXMgcG9pbnRzIGZvciBpbnZlbnRpbmcgc3BlY2lmaWMgY29udGFjdCBkZXRhaWxzIGFuZCBpbXBseWluZyB0aGUgc2FsZXMgdGVhbSBjYW4gZW5zdXJlIHRoZSAnYmVzdCBwb3NzaWJsZSBwcmljZScgd2l0aG91dCBjb25maXJtYXRpb24uXCJcbiAgfSxcbiAgXCJ3aW5uZXJcIjogXCJnbG1cIlxufSIsInJlZnVzYWwiOm51bGwsInJlYXNvbmluZyI6bnVsbCwicmVhc29uaW5nX2RldGFpbHMiOlt7InR5cGUiOiJyZWFzb25pbmcuZW5jcnlwdGVkIiwiZGF0YSI6ImdBQUFBQUJxUVpFc25OTWRBWmY1VDVZS2lId1I0WHExeVBJV3dzcDJCZXJqUUZ6R3M2a1pPTWlFQ3hJNHZxb1JpLWxRLUVRdU4tcXFyamFMS1BGUjVUQWRMaXBRVEZVVE9sa19FMnVPZmJGVVZfbmJMVU14QlR1NmlESnZsOXZhMkR0MlVsbE5oODE0ZE8ybVkzTGlhTktpY1otdWVMUWZ6dk1pZWtfbzczMEJCVnN3RTlmaVYyWEFXUF9QQTc1WGhSbEtjMGs5blVNZGw3clhZMnpjd2c5dldoQXE5VElzQUNkcDRQblRkOXltRnJzdksyYWRlT1RIZU1jZ1hNTkZueFF2NllicVNqbk5fajV1NlZ0SmJReHg2bmNPajFUS3dJSF9IVjZJUy1WcWZpRkM0SWpTU2g1a2U5N3IzYmFzZXJNWTBhb2xPTjdpZExsVHV6ckhHZ0t4NGVXdlBoMTFrSUxNcDd2d25Rc05LcUoxdnV6a3d1Nmx1dlJpTlg5Z2RkVHpzUDBKQ3VQMkpoTkptdzY1QUxHMl9PZlZ5TDFoRmlhd1YySldNNnNUd0JTV0szMldWc24zUFplOW14THl6QnEwZkxmUUpWRFowTldJMnU3dVJCcWRIRlZObUVuUVVCSE9WMHNkaGQxclFWNW00LVFUd04xSzNJRnNmT3F3YXJHMmdhZXVkYWREMlRSZEhPVVczallSR2ZGQ3V2UlRCNzZIbEhWVEg2dWIxbGdTU1FxSXZBZ3hkdUlaQTZ6cnVubG0xNmdJLV92QWVqWmhGX2p3TXZRLWhmMklTTExTNGhuQlUzMzdCZG5hejFoZXRiZ19ERDBZQ0MteXJGNGY3Zkp3S2hkaHExWUZzeFFGYzl1ZE1hOXpETS1JZU43ZW1xOURlM1RWZHpzUERwbHhmQ2FPU0lVamJhZVVEaGRGekY3RnIwMkxmRlIwMENzRC14Q0xRU3dwMXFjQk9YQ0RMRVhqeGx3X1BMYkNtaFF6UmdjdUkxaW05S0huUTVCM3A3OHpvUUtCWXd6b1JoY05WR3RvOUFQWTZxbE9renF4TlVEMHdtVlRaelp2d0hDUlFuRHJLVXlUXzIyck1YZS1ETkxiblZCdWVsTE4zR0JvS3lpQVhHcHVoYnZhMVhrUUkwZ3pfT0NockdQTUdvQXdkbzNZT053aXYwcDgzTkFjbTlCdmVVYThLV25zR1hORjFZekhveXhaNmNwbGZVZktUWVUtSUhGY0g3V205RzZBTlhVWi13RTg2dFhMUW9uYWZ5bEtrMllwTWJwRmZhdjFaRTEtLUwwRGNTZ0haQWZQMUJoWlpNZkRfU3FIQ1F5eHA4YlQtSVBBaDYydXlUdFNZOWRoNjlnbkFGWGt5OUF6UzZxbUl4V2lKMVRjV0xCSlpqWTBCSWozQmJkRU1ZRDZ1Q0lsU2x2bmY0aldvUWdiZlhsemxwSy14elpjMWdjZ2hhOWhxWUczQTBGY0hlM3Y5YjFESU1yTGd6eFIwZmJBT3hvYUJUQW12YWN4OVFaT0YzM0xjZUJlcnowVnNtQWVwaUMtV3pnNGo1enpWSG1IU2hhY3JYOFpoZ2Z6SDdJMFhBSk90YktfVjBtcXpYSTlWRVdmaHZIN2ZUbWNGckxnM2xTSkhDQjh0VE12TGtaUGJ2aVZ2MDdITGZsT1ROcW52Wk5adzJDUTVWQ1NnSkRfU3Y3c05ocy1DTGNGZzl0ZjE5azdfemJCTjNoSHlmU2tHM2szWWIwU3hsUDEzOHFhN0dwRm1JdzJfWkNYR18tOWdXaTd4cldKdTlDNFpKYTlyQjNpTzBZc1BuVzl5VWhkQ2YyQzUtV3IyNTdrUkNXOWpuZUtlUHJJdHk1cFA1T2hlQzM1azVSRkZiVWV2TnlKMkJ6aDUzT2NPTkNlX2x4Z3F3cjlVc25xZ200RlRucjAzRkVocEEyVzhLTC1hM25WUGJVTDZBUDlDVFpxOU1wbHVFYklRYlBMM0dBRmxyVndHb3VvLVBYMURvaUp2OFo1QmdHWWFxR2VlS0MzVnRlbDNERDdILWthT1FrTjI0eWF5UDR4VGRRSkhMVFBMeXdDYXVSRW1qTHNMd1V2N05UVVFpMmtLUm5yMVZjYjRYVjM2cExtYlB2ZEpjUUdQWF9pWE1qVEdPV0ZuWk9adHYwSldVMk42c1NNQV9JWl9tRmV4OG1LOE9VeS1fMFp0T1dFQWhQOTU2ZHVKUnJRbngxN0tLSVlUY2RfcG9WVFJRMlhCYjR0MVNROWplZ1ZSNTNiczJJaExsNTFfLTZqT0hZVXNOZnJaZ1U4Y0NUd1NxckJ1N1ZxazZYaFNhamJoMGZKeGZJbGhaU1dESUYyajE3TkVaMmotWXo2X1oxOTkxeGJtSmNjUFdJNUY1QTRsUVp4ZVgwcXJJSk5kY2RUOUY5dU5MQnJiaFRKQXJ6ODBZM05jYlJud2hHTld1WWdmSXJWenFHU005OHJ5OS0taHBOR2M3eVdKTzI1cFBtZ05YNFFmTWg0aTBXUWE0Z2ItWXowZ3RKUFkwR2ZidTZTcVZsR1lIalV1SmRfRDZBOUNSb0VoRGFyRzY5R3BOWFg1ZHE5XzJxeTRHYlJNdzRxWk5jTFljbVlZOWo2MlRjLUg4RHpBdnpnMV8tVmhqUHNYczRralFQYWVQbDNlcE5JWk03MFVCQWYwaUN6U3EzWUJ4SUxrQ2tTSko2WXN1TkpqSjNvNmI1SEZoSm1oQ1N4dnRKNTNGb1duZVh4cmJVV0o3dHcwdmpjSkg5dy1OMnVWWk1ENUtjdndZd2ZrTXJKYjhrYi1CZWtUR2NiQXFVcDViTjBsaHQxMDFlM2dyaU9FWHB1RC0tb1ZRUnRJUWpHWnlMdzRUaGZTcGdtNkxfWHJQQ3F1MmNSUWVidWdtdnVoNXNJN3V3QndoSXVqMU9lUHNQel9nTDBHNU9RMnl0S2xuUmJtSjlmd3F2ejVTQzFfLUdXSHZhSm5RUGtsRkp4UEdKUXI4R0xFODVkZTk3eXc5ZHJRQnVrMEtJQWYwQzRnU3o1bEZyMjZYV0VsWkdaWFhhY0tNUzNRMGZ2cS1oNXFoN0V2US1KYWdGT2d5a29ucXp4Y3VjWHlkejA5aDc3dGZwaTRBMkZzWWptSzItNXI4ODA1dm9icDVUQ2twbFpmczNSbG5WX0p6U2Zhc09yeGtwdUx6VlVPN1JLRXRWYWNEWlUzbmpwQTZnLVZBUDRCY2I4dldSeGFjNUx1Znh3bjU0YzhpX3F1ZmhFNFR1bWFDQ29BRHREZEVpd2hpRGJGV1p4Q3ZRN01fM1BzQVlQTlZBcUd3LTc0dVRiUjRhRC1OWFh4aGFGYUhGZjJZM19KLUp6ZzJMOENjcDhTNFV4ck03VEM2S200Z25XU3lFVDlpS25KTEw4NmN4ZjVWVVJ2MVNPQm5nSDlyUTdBTGJmbFVQNTZYVm5qaTFpUnhLVFdjUExNbTJDZTBhQm9TendoWEU3Q2hNTEtaTXMteDh3TkpnV2NwVlVpNGZRZkM3d3dKeXpHNUpDZk1Xa1RYRUF3ZW1UUnVtZUIyZHBqYUk4bDYtLWJsMnUyVGZuYmJYZ1pwWHE3YllMZHFIRVp4WHg3Y293LXZoNHN0cmNlV2dhaGZReERKTnhRWm9TNHl2Q3I3c0gwMDN6aFdOT2NjdnZWV0VZNHg5dkpOMHYtbzRlelI0THhodnY3NWg2STN6V0U3T3YzS2trVWw2cHZ1Q2paTU9JSW1DOXRpNEhpMzRRdXFhSHNwSFJuRVZwQWlaMHM1UVhBV0pHTFhhTlAxWVFFYi1fbmFCTU14UFNOUXloM3c5OFZGVVRhX1NDZUNXUUhuTXJlTDAzM2NHVTNQZG9Da0tIYzdubWwyMmlTNWpqYUJnWmhZNFoyaTBWLUlXeFVFdzU1RE9QT3FGWjNqc0pIbHVSMWRqQzdYWjRqbHNGUWVuSURmOHNmMUJEeW9MSC1abFFCR2x2aURvaEtodzhUUXhnQVhtWG8tV0tJcVh6ODlKc2lmZHdDRm5CcnF4dWFXUGV1Zk01OHpNakZaYkkzZkN2WG1LVU1MUzEzbFcwRzR3U0wtYldZSUFkZWpNUDdwSElzbG1hT0xGVFkzRkltU0o5aG9sc0tfU2ktUHlWUzlKTG1oSXc0WnQyMXFDd2xHeGZyT1JvS0RrMlJ3TVhoa0tpSlktbUlCTWZaSmk0S2NwaFhrZUlEU20yb1MtYUd6b182VktVU3Z1eGRxaXg2R1E3bFdnUS1OWkpGWEpuczBQcGUzMU1DRHdlRjQ4anFTU2FDeUx4aXU2V2Zyb3ZSYmtOcGFDWWxhaEhLRlZBa2ZmSmh3alVkeDEtTWZXSWxmamVDcEhSQjRRam1LOGlTZXpodTNHYVhYRzhOcjByYUhlNWF3OXBzaDg9IiwiZm9ybWF0IjoiYXp1cmUtb3BlbmFpLXJlc3BvbnNlcy12MSIsImlkIjoicnNfMDdlZTFhMmRmODYxM2I2MjAxNmE0MTkxMjUyZWZjODE5NWFjMzMwODIzYjc4OGUxZmYiLCJpbmRleCI6MH1dfX1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjo2MjksImNvbXBsZXRpb25fdG9rZW5zIjo2NjIsInRvdGFsX3Rva2VucyI6MTI5MSwiY29zdCI6MC4wMjMwMDUsImlzX2J5b2siOmZhbHNlLCJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MCwiY2FjaGVfd3JpdGVfdG9rZW5zIjowLCJhdWRpb190b2tlbnMiOjAsInZpZGVvX3Rva2VucyI6MH0sImNvc3RfZGV0YWlscyI6eyJ1cHN0cmVhbV9pbmZlcmVuY2VfY29zdCI6MC4wMjMwMDUsInVwc3RyZWFtX2luZmVyZW5jZV9wcm9tcHRfY29zdCI6MC4wMDMxNDUsInVwc3RyZWFtX2luZmVyZW5jZV9jb21wbGV0aW9uc19jb3N0IjowLjAxOTg2fSwiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdfdG9rZW5zIjo0MDMsImltYWdlX3Rva2VucyI6MCwiYXVkaW9fdG9rZW5zIjowfX19
592
+ recorded_at: Sun, 28 Jun 2026 21:25:05 GMT
593
+ recorded_with: VCR 6.4.0