sable-sphynx 0.7.0.dev0__py3-none-any.whl

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 (174) hide show
  1. sable_sphynx-0.7.0.dev0.dist-info/METADATA +152 -0
  2. sable_sphynx-0.7.0.dev0.dist-info/RECORD +174 -0
  3. sable_sphynx-0.7.0.dev0.dist-info/WHEEL +5 -0
  4. sable_sphynx-0.7.0.dev0.dist-info/top_level.txt +1 -0
  5. sphynx/__init__.py +469 -0
  6. sphynx/__init__.pyi +376 -0
  7. sphynx/_analytical_client.py +77 -0
  8. sphynx/_analytical_values.py +252 -0
  9. sphynx/_audit_client.py +173 -0
  10. sphynx/_comparison_adapters.py +113 -0
  11. sphynx/_componentized_full_rag.py +34 -0
  12. sphynx/_composed_pipeline.py +109 -0
  13. sphynx/_full_rag_grading.py +218 -0
  14. sphynx/_full_rag_trace.py +221 -0
  15. sphynx/_local_eval.py +268 -0
  16. sphynx/_pipeline_core.py +243 -0
  17. sphynx/_pr_client.py +237 -0
  18. sphynx/_rag_diagnostics_calibration.py +285 -0
  19. sphynx/_rag_diagnostics_catalog.py +39 -0
  20. sphynx/_rag_diagnostics_common.py +26 -0
  21. sphynx/_rag_diagnostics_contracts.py +186 -0
  22. sphynx/_rag_diagnostics_engine.py +243 -0
  23. sphynx/_rag_diagnostics_importers.py +242 -0
  24. sphynx/_rag_diagnostics_ranking.py +81 -0
  25. sphynx/_rag_diagnostics_semantic.py +325 -0
  26. sphynx/_rag_ranking.py +149 -0
  27. sphynx/_speech_benchmark_scoring.py +140 -0
  28. sphynx/_speech_benchmark_sources.py +275 -0
  29. sphynx/_speech_complete_scoring.py +218 -0
  30. sphynx/_speech_complete_source.py +118 -0
  31. sphynx/_speech_kido.py +294 -0
  32. sphynx/_speech_scoring.py +77 -0
  33. sphynx/_track_capture.py +213 -0
  34. sphynx/analytical_views.py +515 -0
  35. sphynx/assessment_contracts.py +378 -0
  36. sphynx/assessment_selection.py +57 -0
  37. sphynx/audit_access.py +245 -0
  38. sphynx/audit_contracts.py +204 -0
  39. sphynx/audit_requests.py +180 -0
  40. sphynx/authoring.py +188 -0
  41. sphynx/benchmarks.py +568 -0
  42. sphynx/candidates.py +62 -0
  43. sphynx/catalog.py +272 -0
  44. sphynx/chunking.py +372 -0
  45. sphynx/clickhouse_reader.py +169 -0
  46. sphynx/client.py +486 -0
  47. sphynx/comparison_core.py +149 -0
  48. sphynx/comparison_views.py +223 -0
  49. sphynx/components.py +1661 -0
  50. sphynx/contracts.py +514 -0
  51. sphynx/customer_rerank.py +299 -0
  52. sphynx/customer_retrieval.py +146 -0
  53. sphynx/data/benchmark-releases.v1.json +164 -0
  54. sphynx/data/public-benchmark-release.v1.json +354 -0
  55. sphynx/data/rag-diagnostics-synthetic.v1.json +6982 -0
  56. sphynx/data/rag-paper-references.v1.json +176 -0
  57. sphynx/data/rag-paper-schemas.v1.json +1069 -0
  58. sphynx/data/rag-rerank-v1.json +507 -0
  59. sphynx/dataset_catalog_data.py +1214 -0
  60. sphynx/dataset_readiness.py +138 -0
  61. sphynx/dataset_v3.py +999 -0
  62. sphynx/demo.py +130 -0
  63. sphynx/demo_candidates/__init__.py +1 -0
  64. sphynx/demo_candidates/dense.py +11 -0
  65. sphynx/demo_candidates/lexical.py +21 -0
  66. sphynx/diagnostics.py +207 -0
  67. sphynx/documentation.py +737 -0
  68. sphynx/documentation_candidate.py +939 -0
  69. sphynx/evals.py +538 -0
  70. sphynx/evaluation_protocols.py +124 -0
  71. sphynx/evaluator_bindings.py +370 -0
  72. sphynx/evidence.py +352 -0
  73. sphynx/execution_capabilities.py +109 -0
  74. sphynx/fast_search.py +285 -0
  75. sphynx/full_rag.py +341 -0
  76. sphynx/hosted/__init__.py +18 -0
  77. sphynx/hosted/benchmark_intake.py +218 -0
  78. sphynx/hosted/contracts.py +361 -0
  79. sphynx/hosted/model_admission.py +130 -0
  80. sphynx/hosted/model_artifacts.py +298 -0
  81. sphynx/hosted/model_contracts.py +63 -0
  82. sphynx/hosted/model_gcs.py +181 -0
  83. sphynx/hosted/model_history.py +84 -0
  84. sphynx/hosted/model_session.py +233 -0
  85. sphynx/hosted/public_suite.py +74 -0
  86. sphynx/hosted/registry.py +97 -0
  87. sphynx/hosted/revisions.py +126 -0
  88. sphynx/hosted/sandbox.py +105 -0
  89. sphynx/hosted/submission.py +287 -0
  90. sphynx/hosted_workflow.py +451 -0
  91. sphynx/http_transport.py +86 -0
  92. sphynx/integrated_rag.py +352 -0
  93. sphynx/integrated_workflow.py +552 -0
  94. sphynx/integration_contracts.py +474 -0
  95. sphynx/invocation.py +791 -0
  96. sphynx/invocation_candidates.py +392 -0
  97. sphynx/invocation_catalog_data.py +40 -0
  98. sphynx/learned_catalog_data.py +30 -0
  99. sphynx/learned_rerank.py +267 -0
  100. sphynx/legacy_full_rag.py +67 -0
  101. sphynx/lifecycle.py +885 -0
  102. sphynx/lifecycle_workflow.py +490 -0
  103. sphynx/metric_views.py +474 -0
  104. sphynx/metrics.py +282 -0
  105. sphynx/model_adapters.py +438 -0
  106. sphynx/model_catalog_data.py +30 -0
  107. sphynx/official_benchmarks.py +385 -0
  108. sphynx/packs.py +258 -0
  109. sphynx/pipeline.py +313 -0
  110. sphynx/pipeline_workflow.py +551 -0
  111. sphynx/pr_evaluations.py +560 -0
  112. sphynx/progress.py +89 -0
  113. sphynx/public_bundle.py +173 -0
  114. sphynx/public_eval.py +62 -0
  115. sphynx/public_rerank.py +355 -0
  116. sphynx/py.typed +0 -0
  117. sphynx/pytest_plugin.py +62 -0
  118. sphynx/question_robustness.py +437 -0
  119. sphynx/rag.py +329 -0
  120. sphynx/rag_diagnostics.py +309 -0
  121. sphynx/rag_papers/__init__.py +29 -0
  122. sphynx/rag_papers/__main__.py +45 -0
  123. sphynx/rag_papers/candidates.py +19 -0
  124. sphynx/rag_papers/contracts.py +282 -0
  125. sphynx/rag_papers/datasets.py +291 -0
  126. sphynx/rag_papers/experiments.py +116 -0
  127. sphynx/rag_papers/judges.py +308 -0
  128. sphynx/rag_papers/registry.py +33 -0
  129. sphynx/rag_papers/runner.py +176 -0
  130. sphynx/rag_papers/sable.py +135 -0
  131. sphynx/rag_papers/schemas.py +12 -0
  132. sphynx/rag_papers/scoring.py +249 -0
  133. sphynx/rag_papers/semantic.py +288 -0
  134. sphynx/rag_papers/trec.py +80 -0
  135. sphynx/recorded_scores.py +352 -0
  136. sphynx/records.py +124 -0
  137. sphynx/reflex_traces.py +193 -0
  138. sphynx/report_rendering.py +71 -0
  139. sphynx/rerank_family_contracts.py +150 -0
  140. sphynx/rerank_workflow.py +424 -0
  141. sphynx/research_candidate.py +190 -0
  142. sphynx/results.py +852 -0
  143. sphynx/retrieval.py +750 -0
  144. sphynx/retrieval_candidates.py +295 -0
  145. sphynx/retrieval_catalog_data.py +19 -0
  146. sphynx/retrieval_recordings.py +125 -0
  147. sphynx/reviewer_audit.py +266 -0
  148. sphynx/routing_policies.py +375 -0
  149. sphynx/runner.py +544 -0
  150. sphynx/sable_rerank.py +489 -0
  151. sphynx/score_reliability.py +393 -0
  152. sphynx/speech_benchmarks.py +204 -0
  153. sphynx/speech_campaigns.py +378 -0
  154. sphynx/speech_complete.py +236 -0
  155. sphynx/speech_contracts.py +225 -0
  156. sphynx/speech_evidence.py +429 -0
  157. sphynx/speech_listening.py +115 -0
  158. sphynx/speech_multilingual.py +71 -0
  159. sphynx/speech_tts.py +479 -0
  160. sphynx/sql/001_sync_v1.sql +30 -0
  161. sphynx/stage_contracts.py +199 -0
  162. sphynx/statistical_catalog_data.py +53 -0
  163. sphynx/statistical_rerank.py +232 -0
  164. sphynx/sync.py +797 -0
  165. sphynx/workbench.py +378 -0
  166. sphynx/workbench_catalog_data.py +13 -0
  167. sphynx/workbench_tracks.py +78 -0
  168. sphynx/workflow_async.py +197 -0
  169. sphynx/workflow_contracts.py +594 -0
  170. sphynx/workflow_decisions.py +211 -0
  171. sphynx/workflow_defaults.py +16 -0
  172. sphynx/workflow_extensions.py +212 -0
  173. sphynx/workflow_registry.py +513 -0
  174. sphynx/workflows.py +792 -0
@@ -0,0 +1,507 @@
1
+ {
2
+ "schema_version": "rag-evals.dataset.v2",
3
+ "dataset_id": "help-center-evidence-mini",
4
+ "version": "2.0.0",
5
+ "default_relevance_threshold": 2,
6
+ "tasks": [
7
+ {
8
+ "task_id": "core-onboarding-security",
9
+ "query_id": "q-onboarding-security",
10
+ "cluster_id": "cluster-onboarding-security",
11
+ "split_group_id": "split-onboarding-security",
12
+ "split": "dev",
13
+ "suite_type": "core",
14
+ "domain": "help-center",
15
+ "query": "How do onboarding and the security review work?",
16
+ "query_variants": ["What happens during setup and compliance review?"],
17
+ "answerability": "answerable",
18
+ "query_categories": ["multi_part", "multi_document", "straightforward_factual"],
19
+ "business_severity": "high",
20
+ "versions": {
21
+ "corpus": "fixture-corpus-v2",
22
+ "index": "fixture-index-v2",
23
+ "chunking": "section-v2",
24
+ "embedding": "fixture-embed-v2"
25
+ },
26
+ "candidates": [
27
+ {
28
+ "candidate_id": "onboarding-flow",
29
+ "document_id": "doc-onboarding",
30
+ "url": "https://example.invalid/onboarding",
31
+ "source_id": "help",
32
+ "chunk_id": "onboarding-1",
33
+ "input": "Start onboarding by connecting the workspace, inviting an owner, and completing the setup checklist.",
34
+ "dense_rank": 1,
35
+ "dense_score": 0.94,
36
+ "relevance_grade": 3,
37
+ "evidence_group_ids": ["onboarding-workflow"],
38
+ "evidence_spans": [{ "start": 0, "end": 16, "text": "Start onboarding" }],
39
+ "annotations": [
40
+ { "annotator_id": "labeler-a", "relevance_grade": 3, "rationale": "Direct workflow evidence" },
41
+ { "annotator_id": "labeler-b", "relevance_grade": 2, "rationale": "Useful but concise" }
42
+ ],
43
+ "adjudication": {
44
+ "adjudicator_id": "sme-a",
45
+ "relevance_grade": 3,
46
+ "rationale": "Directly answers the onboarding facet"
47
+ }
48
+ },
49
+ {
50
+ "candidate_id": "login-help",
51
+ "document_id": "doc-login",
52
+ "url": "https://example.invalid/login",
53
+ "source_id": "help",
54
+ "chunk_id": "login-1",
55
+ "input": "Reset a forgotten password from the login page.",
56
+ "dense_rank": 2,
57
+ "dense_score": 0.82,
58
+ "relevance_grade": 0,
59
+ "evidence_group_ids": [],
60
+ "known_hard_negative": true
61
+ },
62
+ {
63
+ "candidate_id": "pricing-help",
64
+ "document_id": "doc-pricing",
65
+ "url": "https://example.invalid/pricing",
66
+ "source_id": "help",
67
+ "chunk_id": "pricing-1",
68
+ "input": "Annual plans are billed at the beginning of each term.",
69
+ "dense_rank": 3,
70
+ "dense_score": 0.76,
71
+ "relevance_grade": 0,
72
+ "evidence_group_ids": []
73
+ },
74
+ {
75
+ "candidate_id": "export-help",
76
+ "document_id": "doc-export",
77
+ "url": "https://example.invalid/export",
78
+ "source_id": "help",
79
+ "chunk_id": "export-1",
80
+ "input": "Export reports as CSV from the Reports page.",
81
+ "dense_rank": 4,
82
+ "dense_score": 0.72,
83
+ "relevance_grade": 0,
84
+ "evidence_group_ids": []
85
+ },
86
+ {
87
+ "candidate_id": "audit-overview",
88
+ "document_id": "doc-audit",
89
+ "url": "https://example.invalid/audit",
90
+ "source_id": "help",
91
+ "chunk_id": "audit-1",
92
+ "input": "The audit log records administrative changes.",
93
+ "dense_rank": 5,
94
+ "dense_score": 0.66,
95
+ "relevance_grade": 1,
96
+ "evidence_group_ids": [],
97
+ "known_hard_negative": true
98
+ },
99
+ {
100
+ "candidate_id": "security-review",
101
+ "document_id": "doc-security",
102
+ "url": "https://example.invalid/security",
103
+ "source_id": "trust",
104
+ "chunk_id": "security-4",
105
+ "input": "The security review covers data handling, access controls, compliance evidence, and approval before launch.",
106
+ "dense_rank": 6,
107
+ "dense_score": 0.61,
108
+ "relevance_grade": 3,
109
+ "evidence_group_ids": ["security-review"]
110
+ }
111
+ ],
112
+ "evidence_groups": [
113
+ {
114
+ "evidence_group_id": "onboarding-workflow",
115
+ "description": "The onboarding workflow",
116
+ "required": true,
117
+ "acceptable_candidate_ids": ["onboarding-flow"]
118
+ },
119
+ {
120
+ "evidence_group_id": "security-review",
121
+ "description": "The security/compliance review",
122
+ "required": true,
123
+ "acceptable_candidate_ids": ["security-review"]
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "task_id": "core-onboarding-security-paraphrase",
129
+ "query_id": "q-onboarding-security-paraphrase",
130
+ "cluster_id": "cluster-onboarding-security",
131
+ "split_group_id": "split-onboarding-security",
132
+ "split": "dev",
133
+ "suite_type": "core",
134
+ "domain": "help-center",
135
+ "query": "What happens during setup and compliance review?",
136
+ "answerability": "answerable",
137
+ "query_categories": ["semantic_paraphrase", "multi_part", "multi_document"],
138
+ "business_severity": "high",
139
+ "versions": {
140
+ "corpus": "fixture-corpus-v2",
141
+ "index": "fixture-index-v2",
142
+ "chunking": "section-v2",
143
+ "embedding": "fixture-embed-v2"
144
+ },
145
+ "candidates": [
146
+ {
147
+ "candidate_id": "onboarding-flow",
148
+ "document_id": "doc-onboarding",
149
+ "url": "https://example.invalid/onboarding",
150
+ "source_id": "help",
151
+ "chunk_id": "onboarding-1",
152
+ "input": "Start onboarding by connecting the workspace, inviting an owner, and completing the setup checklist.",
153
+ "dense_rank": 1,
154
+ "dense_score": 0.9,
155
+ "relevance_grade": 3,
156
+ "evidence_group_ids": ["onboarding-workflow"]
157
+ },
158
+ {
159
+ "candidate_id": "login-help",
160
+ "document_id": "doc-login",
161
+ "url": "https://example.invalid/login",
162
+ "source_id": "help",
163
+ "chunk_id": "login-1",
164
+ "input": "Reset a forgotten password from the login page.",
165
+ "dense_rank": 2,
166
+ "dense_score": 0.8,
167
+ "relevance_grade": 0,
168
+ "evidence_group_ids": []
169
+ },
170
+ {
171
+ "candidate_id": "pricing-help",
172
+ "document_id": "doc-pricing",
173
+ "url": "https://example.invalid/pricing",
174
+ "source_id": "help",
175
+ "chunk_id": "pricing-1",
176
+ "input": "Annual plans are billed at the beginning of each term.",
177
+ "dense_rank": 3,
178
+ "dense_score": 0.75,
179
+ "relevance_grade": 0,
180
+ "evidence_group_ids": []
181
+ },
182
+ {
183
+ "candidate_id": "export-help",
184
+ "document_id": "doc-export",
185
+ "url": "https://example.invalid/export",
186
+ "source_id": "help",
187
+ "chunk_id": "export-1",
188
+ "input": "Export reports as CSV from the Reports page.",
189
+ "dense_rank": 4,
190
+ "dense_score": 0.7,
191
+ "relevance_grade": 0,
192
+ "evidence_group_ids": []
193
+ },
194
+ {
195
+ "candidate_id": "audit-overview",
196
+ "document_id": "doc-audit",
197
+ "url": "https://example.invalid/audit",
198
+ "source_id": "help",
199
+ "chunk_id": "audit-1",
200
+ "input": "The audit log records administrative changes.",
201
+ "dense_rank": 5,
202
+ "dense_score": 0.65,
203
+ "relevance_grade": 1,
204
+ "evidence_group_ids": []
205
+ },
206
+ {
207
+ "candidate_id": "security-review",
208
+ "document_id": "doc-security",
209
+ "url": "https://example.invalid/security",
210
+ "source_id": "trust",
211
+ "chunk_id": "security-4",
212
+ "input": "The security review covers data handling, access controls, compliance evidence, and approval before launch.",
213
+ "dense_rank": 6,
214
+ "dense_score": 0.6,
215
+ "relevance_grade": 3,
216
+ "evidence_group_ids": ["security-review"]
217
+ }
218
+ ],
219
+ "evidence_groups": [
220
+ {
221
+ "evidence_group_id": "onboarding-workflow",
222
+ "description": "The onboarding workflow",
223
+ "required": true,
224
+ "acceptable_candidate_ids": ["onboarding-flow"]
225
+ },
226
+ {
227
+ "evidence_group_id": "security-review",
228
+ "description": "The security/compliance review",
229
+ "required": true,
230
+ "acceptable_candidate_ids": ["security-review"]
231
+ }
232
+ ]
233
+ },
234
+ {
235
+ "task_id": "customer-seat-transfer",
236
+ "query_id": "q-customer-seat-transfer",
237
+ "cluster_id": "cluster-seat-transfer",
238
+ "split_group_id": "split-seat-transfer",
239
+ "split": "test",
240
+ "suite_type": "customer_acceptance",
241
+ "customer": "customer-fixture-a",
242
+ "domain": "account-admin",
243
+ "query": "Move a named seat to the new workspace steward.",
244
+ "answerability": "answerable",
245
+ "query_categories": ["customer_specific_terminology", "postsales_language", "exact_product_feature_name"],
246
+ "business_severity": "critical",
247
+ "versions": {
248
+ "corpus": "fixture-corpus-v2",
249
+ "index": "fixture-index-v2",
250
+ "chunking": "section-v2",
251
+ "embedding": "fixture-embed-v2"
252
+ },
253
+ "candidates": [
254
+ {
255
+ "candidate_id": "seat-transfer",
256
+ "document_id": "doc-seats",
257
+ "url": "https://example.invalid/seats",
258
+ "source_id": "help",
259
+ "chunk_id": "seats-2",
260
+ "input": "An administrator can transfer an assigned seat to another teammate from Workspace members.",
261
+ "dense_rank": 1,
262
+ "dense_score": 0.93,
263
+ "relevance_grade": 3,
264
+ "evidence_group_ids": ["seat-transfer"]
265
+ },
266
+ {
267
+ "candidate_id": "seat-cancel",
268
+ "document_id": "doc-seats",
269
+ "url": "https://example.invalid/seats",
270
+ "source_id": "help",
271
+ "chunk_id": "seats-3",
272
+ "input": "Canceling a seat removes access at the end of the term.",
273
+ "dense_rank": 2,
274
+ "dense_score": 0.8,
275
+ "relevance_grade": 1,
276
+ "evidence_group_ids": [],
277
+ "known_hard_negative": true
278
+ },
279
+ {
280
+ "candidate_id": "invite-user",
281
+ "document_id": "doc-users",
282
+ "url": "https://example.invalid/users",
283
+ "source_id": "help",
284
+ "chunk_id": "users-1",
285
+ "input": "Invite a new user by email.",
286
+ "dense_rank": 3,
287
+ "dense_score": 0.7,
288
+ "relevance_grade": 0,
289
+ "evidence_group_ids": []
290
+ },
291
+ {
292
+ "candidate_id": "change-owner",
293
+ "document_id": "doc-owner",
294
+ "url": "https://example.invalid/owner",
295
+ "source_id": "help",
296
+ "chunk_id": "owner-1",
297
+ "input": "Workspace ownership can be changed by an existing owner.",
298
+ "dense_rank": 4,
299
+ "dense_score": 0.65,
300
+ "relevance_grade": 1,
301
+ "evidence_group_ids": []
302
+ },
303
+ {
304
+ "candidate_id": "billing-owner",
305
+ "document_id": "doc-billing",
306
+ "url": "https://example.invalid/billing",
307
+ "source_id": "help",
308
+ "chunk_id": "billing-2",
309
+ "input": "The billing contact receives invoices.",
310
+ "dense_rank": 5,
311
+ "dense_score": 0.6,
312
+ "relevance_grade": 0,
313
+ "evidence_group_ids": []
314
+ },
315
+ {
316
+ "candidate_id": "delete-user",
317
+ "document_id": "doc-users",
318
+ "url": "https://example.invalid/users",
319
+ "source_id": "help",
320
+ "chunk_id": "users-4",
321
+ "input": "Deleting a user permanently removes the profile.",
322
+ "dense_rank": 6,
323
+ "dense_score": 0.55,
324
+ "relevance_grade": 0,
325
+ "evidence_group_ids": []
326
+ }
327
+ ],
328
+ "evidence_groups": [
329
+ {
330
+ "evidence_group_id": "seat-transfer",
331
+ "description": "Transfer an existing seat without canceling it",
332
+ "required": true,
333
+ "acceptable_candidate_ids": ["seat-transfer"]
334
+ }
335
+ ]
336
+ },
337
+ {
338
+ "task_id": "production-passage-not-url",
339
+ "query_id": "q-production-passage-not-url",
340
+ "cluster_id": "cluster-production-passage",
341
+ "split_group_id": "split-production-passage",
342
+ "split": "test",
343
+ "suite_type": "production_failure",
344
+ "domain": "api",
345
+ "query": "How do I rotate an API key?",
346
+ "answerability": "answerable",
347
+ "query_categories": ["exact_product_feature_name", "postsales_language"],
348
+ "business_severity": "high",
349
+ "versions": {
350
+ "corpus": "fixture-corpus-v2",
351
+ "index": "fixture-index-v2",
352
+ "chunking": "section-v2",
353
+ "embedding": "fixture-embed-v2"
354
+ },
355
+ "candidates": [
356
+ {
357
+ "candidate_id": "api-overview",
358
+ "document_id": "doc-api",
359
+ "url": "https://example.invalid/api",
360
+ "source_id": "help",
361
+ "chunk_id": "api-1",
362
+ "input": "API keys authenticate requests to the service.",
363
+ "dense_rank": 1,
364
+ "dense_score": 0.9,
365
+ "relevance_grade": 1,
366
+ "evidence_group_ids": [],
367
+ "known_hard_negative": true
368
+ },
369
+ {
370
+ "candidate_id": "api-rotate",
371
+ "document_id": "doc-api",
372
+ "url": "https://example.invalid/api",
373
+ "source_id": "help",
374
+ "chunk_id": "api-7",
375
+ "input": "Create a replacement key, update clients, verify traffic, and revoke the previous key.",
376
+ "dense_rank": 2,
377
+ "dense_score": 0.86,
378
+ "relevance_grade": 3,
379
+ "evidence_group_ids": ["key-rotation"]
380
+ }
381
+ ],
382
+ "evidence_groups": [
383
+ {
384
+ "evidence_group_id": "key-rotation",
385
+ "description": "Safe API-key rotation procedure",
386
+ "required": true,
387
+ "acceptable_candidate_ids": ["api-rotate"]
388
+ }
389
+ ],
390
+ "source_case_id": "anonymized-regression-key-rotation"
391
+ },
392
+ {
393
+ "task_id": "adversarial-unsupported-sso",
394
+ "query_id": "q-adversarial-unsupported-sso",
395
+ "cluster_id": "cluster-unsupported-sso",
396
+ "split_group_id": "split-unsupported-sso",
397
+ "split": "test",
398
+ "suite_type": "adversarial_robustness",
399
+ "domain": "security",
400
+ "query": "Can this product configure SAML single sign-on?",
401
+ "answerability": "unsupported",
402
+ "query_categories": ["unsupported_not_in_kb", "false_premise", "competitor_named_entity"],
403
+ "business_severity": "critical",
404
+ "versions": {
405
+ "corpus": "fixture-corpus-v2",
406
+ "index": "fixture-index-v2",
407
+ "chunking": "section-v2",
408
+ "embedding": "fixture-embed-v2"
409
+ },
410
+ "candidates": [
411
+ {
412
+ "candidate_id": "two-factor",
413
+ "document_id": "doc-security",
414
+ "url": "https://example.invalid/security",
415
+ "source_id": "help",
416
+ "chunk_id": "security-2",
417
+ "input": "Two-factor authentication can be enabled in account security.",
418
+ "dense_rank": 1,
419
+ "dense_score": 0.79,
420
+ "relevance_grade": 0,
421
+ "evidence_group_ids": [],
422
+ "known_hard_negative": true
423
+ },
424
+ {
425
+ "candidate_id": "password-reset",
426
+ "document_id": "doc-password",
427
+ "url": "https://example.invalid/password",
428
+ "source_id": "help",
429
+ "chunk_id": "password-1",
430
+ "input": "Send a password reset link from the login screen.",
431
+ "dense_rank": 2,
432
+ "dense_score": 0.61,
433
+ "relevance_grade": 0,
434
+ "evidence_group_ids": []
435
+ }
436
+ ],
437
+ "evidence_groups": [],
438
+ "expected_unsupported_behavior": "abstain"
439
+ },
440
+ {
441
+ "task_id": "adversarial-duplicate-guides",
442
+ "query_id": "q-adversarial-duplicate-guides",
443
+ "cluster_id": "cluster-duplicate-guides",
444
+ "split_group_id": "split-duplicate-guides",
445
+ "split": "test",
446
+ "suite_type": "adversarial_robustness",
447
+ "domain": "billing",
448
+ "query": "Where can I download an invoice?",
449
+ "answerability": "answerable",
450
+ "query_categories": ["duplicate_documentation", "adjacent_chunk_dependency"],
451
+ "business_severity": "medium",
452
+ "versions": {
453
+ "corpus": "fixture-corpus-v2",
454
+ "index": "fixture-index-v2",
455
+ "chunking": "section-v2",
456
+ "embedding": "fixture-embed-v2"
457
+ },
458
+ "candidates": [
459
+ {
460
+ "candidate_id": "invoice-primary",
461
+ "document_id": "doc-invoice",
462
+ "url": "https://example.invalid/invoices",
463
+ "source_id": "help",
464
+ "chunk_id": "invoice-3",
465
+ "input": "Open Billing, choose an invoice, then select Download PDF.",
466
+ "dense_rank": 1,
467
+ "dense_score": 0.95,
468
+ "relevance_grade": 3,
469
+ "evidence_group_ids": ["invoice-download"]
470
+ },
471
+ {
472
+ "candidate_id": "invoice-copy",
473
+ "document_id": "doc-invoice-copy",
474
+ "url": "https://example.invalid/invoice-copy",
475
+ "source_id": "help-copy",
476
+ "chunk_id": "invoice-copy-3",
477
+ "input": "Open Billing, choose an invoice, then select Download PDF.",
478
+ "dense_rank": 2,
479
+ "dense_score": 0.94,
480
+ "relevance_grade": 3,
481
+ "evidence_group_ids": ["invoice-download"],
482
+ "duplicate_of_candidate_id": "invoice-primary"
483
+ },
484
+ {
485
+ "candidate_id": "invoice-email",
486
+ "document_id": "doc-invoice",
487
+ "url": "https://example.invalid/invoices",
488
+ "source_id": "help",
489
+ "chunk_id": "invoice-4",
490
+ "input": "Invoices are emailed to the billing contact after payment.",
491
+ "dense_rank": 3,
492
+ "dense_score": 0.62,
493
+ "relevance_grade": 1,
494
+ "evidence_group_ids": []
495
+ }
496
+ ],
497
+ "evidence_groups": [
498
+ {
499
+ "evidence_group_id": "invoice-download",
500
+ "description": "Invoice PDF download workflow",
501
+ "required": true,
502
+ "acceptable_candidate_ids": ["invoice-primary", "invoice-copy"]
503
+ }
504
+ ]
505
+ }
506
+ ]
507
+ }