diff --git a/.gitattributes b/.gitattributes index 4dbd338c2400cc005edc6198a0adb427c5704e3a..ed80f4d62b0fda91548c9c9290c19ef83d285830 100644 --- a/.gitattributes +++ b/.gitattributes @@ -34,3 +34,24 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text models/Ternary-Bonsai-2-27B-PQ2_0.gguf filter=lfs diff=lfs merge=lfs -text +adapters/broad-lr0.0001.adapter filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-base.so filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-base.so.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-base.so.0.21.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-cpu.so filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-cpu.so.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-cpu.so.0.21.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-cuda.so filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-cuda.so.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libggml-cuda.so.0.21.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libllama-cli-impl.so filter=lfs diff=lfs merge=lfs -text +native/bin/libllama-common.so filter=lfs diff=lfs merge=lfs -text +native/bin/libllama-common.so.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libllama-common.so.0.2.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libllama-server-impl.so filter=lfs diff=lfs merge=lfs -text +native/bin/libllama.so filter=lfs diff=lfs merge=lfs -text +native/bin/libllama.so.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libllama.so.0.2.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libmtmd.so filter=lfs diff=lfs merge=lfs -text +native/bin/libmtmd.so.0 filter=lfs diff=lfs merge=lfs -text +native/bin/libmtmd.so.0.2.0 filter=lfs diff=lfs merge=lfs -text diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/MANIFEST.json b/MANIFEST.json new file mode 100644 index 0000000000000000000000000000000000000000..3825c1e44079901674bb35bc0fa93fec133481e5 --- /dev/null +++ b/MANIFEST.json @@ -0,0 +1,239 @@ +{ + "artifact": "Jev-Bonsai-Compass", + "files": { + "LICENSE": { + "bytes": 11358, + "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30" + }, + "NOTICE": { + "bytes": 1921, + "sha256": "0e07ba76a10c7fcacfbdd295e65568493580f7516e34be86655734b3a3d4a4a0" + }, + "README.md": { + "bytes": 4929, + "sha256": "90a528ef80aaa1b54e0ea0cd6ea6109eacb529f80ec1e7f082effc018b6da4c4" + }, + "adapters/broad-lr0.0001.adapter": { + "bytes": 318802208, + "sha256": "4903a7c9fd91c9a89ad504716d8fb497a2fbe94a6158148e02ea0ae0237ac233" + }, + "benchmark-manifest.json": { + "bytes": 90664, + "sha256": "e1d69ca0cedf7ff53168089dfee4b786ecefef03e86ea8fcc5d1e0efe8db6f20" + }, + "benchmarks/LICENSE": { + "bytes": 11358, + "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30" + }, + "benchmarks/NOTICE": { + "bytes": 324, + "sha256": "146ce8016a4c45d9e01c34a01d16c86ca35701c955131756c86349a45f771585" + }, + "benchmarks/numeric-regression.jsonl": { + "bytes": 114059, + "sha256": "ae7f72acecf2b527d2bb398484ba2420555979aeb4783f452404ca8b29fcceb4" + }, + "bonsai-decision-runtime-0.1.0-source.tar.gz": { + "bytes": 15031, + "sha256": "270eabe54de1f26ea41c2f2298d953967b29a3eff1ad7c5bd214fedb9c95d057" + }, + "bonsai_decision_runtime-0.1.0-py3-none-any.whl": { + "bytes": 23282, + "sha256": "1fdfcff8a6b1a05af3263d8e57352c3839cc1a99e79b1025841fd7961580bd6e" + }, + "evaluate.py": { + "bytes": 1475, + "sha256": "53220b92c86c21ae084c027ff65b236b503d52c0bb5ef9def7f1fa0f2c3641cd" + }, + "evidence/agent-final.json": { + "bytes": 28581, + "sha256": "a2bcb946034ad7a7adaf526e9a9ed1116b1cca7ad6bf724a841ad5fcdcf5329b" + }, + "evidence/agent-recovery-summary.json": { + "bytes": 2224, + "sha256": "2de342c427c547c4bbd4302814f7ab0ad87b48a3e0135934961937082abdd5f3" + }, + "evidence/core-base.json": { + "bytes": 596, + "sha256": "28eb40406144fd029e4566af8fe3bfaf092bc03a7462cb8478f62161a5195660" + }, + "evidence/core-current.json": { + "bytes": 596, + "sha256": "94fed3f492cdf480fb0d933eaea8034a6e9eb347d5c4856c4812c394e5e9ae9e" + }, + "evidence/core-preservation-audit.json": { + "bytes": 3927, + "sha256": "885ebdaa5f0efaf710a771da3013a6d399c347f7977dd64e81c5b492f7ab596f" + }, + "evidence/core-public-domains.json": { + "bytes": 3335, + "sha256": "f1dc64e58dab2984d82f88f77be189f351a213ed060e861dda2864d3efd147b6" + }, + "evidence/core-resource-summary.json": { + "bytes": 1334, + "sha256": "26733b43329c084ac5d44839a1a9e35872f61a41e28a64d687d5db2f64029c51" + }, + "evidence/core-selection.json": { + "bytes": 1935, + "sha256": "ed8157da96293e52c266996d5e86f52d0b10f45761614ceb821bbe0cf2050163" + }, + "evidence/public-sources.json": { + "bytes": 2860, + "sha256": "4c8469fe283a9868f7e174b57676047f8485cbe51a572cb1bdb8c5598ce47f98" + }, + "examples/evaluation.jsonl": { + "bytes": 600, + "sha256": "74da66c03cd92d7ce882d5cc1a80f08359d69b50b6667a1032c4345a074a69af" + }, + "examples/requests.jsonl": { + "bytes": 451, + "sha256": "3a7bb89d145f5d6212de512e74852ac213f75874ef272966fb7115bd90e9c36d" + }, + "licenses/base-weights-APACHE-2.0": { + "bytes": 10174, + "sha256": "69849221bfb90053de2134ef5e6d540287b4b98062326492f1f96f5da685524b" + }, + "licenses/native-MIT": { + "bytes": 1078, + "sha256": "94f29bbed6a22c35b992c5c6ebf0e7c92f13b836b90f36f461c9cf2f0f1d010d" + }, + "licenses/openjev-upstream-NOTICE": { + "bytes": 567, + "sha256": "c07600d670ed9e19c55bcf4478313c88547c13c185411b93f6cfa40555cb9048" + }, + "licenses/openjev-weight-terms": { + "bytes": 19347, + "sha256": "41003d4a74749c0220e33dd415042164b5a1093ed401f36277234f772d22d3d0" + }, + "licenses/prism-bonsai-NOTICE": { + "bytes": 411, + "sha256": "de0e0c48fb6f691a31e74f338e3ccf93f9ecdfe2866ab769c4bf8b79a7636a30" + }, + "licenses/qwen-base-APACHE-2.0": { + "bytes": 11544, + "sha256": "bbedc3fda3305820b977265f01b8619d87570a6739de3a5582c3464840f1e57a" + }, + "licenses/runtime-APACHE-2.0": { + "bytes": 11358, + "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30" + }, + "licenses/runtime-NOTICE": { + "bytes": 1130, + "sha256": "c8f2a950c5e8dee0aff4e52da936b2e145ee800c6066d8edd526a427ac4163a4" + }, + "models/Ternary-Bonsai-2-27B-PQ2_0.gguf": { + "bytes": 7206168928, + "sha256": "3907dc1658db1f78a9826bf8d5bcb8dc65db0d466388937af57f2294fae62ec1" + }, + "native-runtime.json": { + "bytes": 4263, + "sha256": "a3828fed58dd5b5dc75bf833896955a2052bcea885889b2505ea1fe5d0c02c94" + }, + "native/LICENSE": { + "bytes": 1078, + "sha256": "94f29bbed6a22c35b992c5c6ebf0e7c92f13b836b90f36f461c9cf2f0f1d010d" + }, + "native/bin/libggml-base.so.0.21.0": { + "bytes": 939104, + "sha256": "bb2e08d6d1d286044e210fccad6b87ad56cab9a905efca8c33493637d02770e4" + }, + "native/bin/libggml-cpu.so.0.21.0": { + "bytes": 1421624, + "sha256": "eed2acd145c161a1c902efe435d6879a1aa7481c1ac729b93d8911931d60fc00" + }, + "native/bin/libggml-cuda.so.0.21.0": { + "bytes": 49193080, + "sha256": "b3be257e214b5d8264a57a56185d9612024ddee7f9bd38662f7e981a596353e1" + }, + "native/bin/libggml.so.0.21.0": { + "bytes": 55384, + "sha256": "2b8b4cb00d91c894c432744a4e53206b033922949774b2c1fddc82690bfb6c80" + }, + "native/bin/libllama-cli-impl.so": { + "bytes": 235344, + "sha256": "919317105262dcfda2b2a73235b27f435be63f85de672fd3ed0ac6f47c3ae69b" + }, + "native/bin/libllama-common.so.0.2.0": { + "bytes": 5769016, + "sha256": "29149691e8cdba482142e324cb404f8b52fc28addd0f1b3f7d8b164468ca860c" + }, + "native/bin/libllama-server-impl.so": { + "bytes": 6863696, + "sha256": "e22898b4b47edbf8576222ea6fc25841de8ba66d1089bc08984b51dae4918e2a" + }, + "native/bin/libllama.so.0.2.0": { + "bytes": 4617376, + "sha256": "a38adf43b9dc0e1d86620fa79d94a480f75d59733205cdd8d29281bacb397ba9" + }, + "native/bin/libmtmd.so.0.2.0": { + "bytes": 1874536, + "sha256": "022c08839b66df4d936bc7a34f0386706e01aeb07f165a6a572636d5659be97a" + }, + "native/bin/llama-server": { + "bytes": 18000, + "sha256": "9f89e204f245718c4d3efead026c0b9cedb062e416b3267a9ebaee2328f74328" + }, + "native/source/local-qwen35.patch": { + "bytes": 1494, + "sha256": "ad6a3fac748a69d4d620906f534a01c36310e90a7f45adbe550ebc2f68718fba" + }, + "prepare_public.py": { + "bytes": 2965, + "sha256": "4ca639e3eaff12e250d25a5f5a290bc7e9377d580a23ae8ba16d0d722d9dffaf" + }, + "profiles.json": { + "bytes": 985, + "sha256": "6a8e419361b690a461f3e022f694cb986694da628ed567951083f415708aa1a9" + }, + "run.sh": { + "bytes": 2204, + "sha256": "0ce3fdff5b488398994338c18045a0f8e69c224437832224b616d8cc749afdc5" + }, + "source/bonsai_runtime/LICENSE": { + "bytes": 11358, + "sha256": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30" + }, + "source/bonsai_runtime/NOTICE": { + "bytes": 1130, + "sha256": "c8f2a950c5e8dee0aff4e52da936b2e145ee800c6066d8edd526a427ac4163a4" + }, + "source/bonsai_runtime/__init__.py": { + "bytes": 106, + "sha256": "535f8abf3a37bc38f9f8ebfe5839a7197a058994f466eaa28990cbec4164bca4" + }, + "source/bonsai_runtime/__main__.py": { + "bytes": 31, + "sha256": "23799e542967e0ebb213accf23afdb375d9a6ace81c7f1a17c97c26e3bf1b206" + }, + "source/bonsai_runtime/backend.py": { + "bytes": 6862, + "sha256": "dc84801d37fcb8c346e0358e41f72905d7c69d0afce43af2b6d2e3e868c15b6f" + }, + "source/bonsai_runtime/decision.py": { + "bytes": 3495, + "sha256": "7c82bfbc99ae7328f4c82e35cc8b8a1042923383c58288b40f9553b7711d7bad" + }, + "source/bonsai_runtime/numeric.py": { + "bytes": 9622, + "sha256": "500a225a671af1c2b7cc62907263bd0c7d97af87304b3c33b2ddfd60591d1564" + }, + "source/bonsai_runtime/readout.py": { + "bytes": 2682, + "sha256": "911186ca5059f4e33faa9f5837f3403b0091ffeb54ed1c78d0991de34ef7d8dd" + }, + "source/bonsai_runtime/service.py": { + "bytes": 6293, + "sha256": "a73a0f6f1b2f3f71a490f7702308c7e110260df26ffd132bd6625aabcb9f7a8a" + }, + "source/pyproject.toml": { + "bytes": 588, + "sha256": "4d6ad17a3bb514d8241b21611c653d3cd1d875434163822d19624244ee564c75" + }, + "validate_release.py": { + "bytes": 934, + "sha256": "b929980596ebda9f62e71183e6ca2b531d862381eb33be46fafc1c1001679caa" + } + }, + "format_version": 1, + "version": "0.1.0" +} diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..1ee06fddc4770647f7da6ee74a30274ba67dff34 --- /dev/null +++ b/NOTICE @@ -0,0 +1,30 @@ +Bonsai decision runtime + +The newly packaged bonsai_runtime software is distributed under Apache-2.0. +This statement applies to the runtime package, not all files in the research +workspace, and does not relicense the bundled model or adapter weights. + +Letter-option prompting/readout follows OpenJev's Apache-2.0 helper interface. +The local implementation is modified for the Prism native server, explicit +adapter profiles, compact numerical tools, and bounded local API entry points. +OpenJev project: https://huggingface.co/openjev/openjev +Its helper/ and serve/ code are Apache-2.0; its weights are CC-BY-NC-4.0. +This bundle includes a locally modified adapter descended from OpenJev weight +deltas. Its terms retain OpenJev's CC-BY-NC-4.0 noncommercial lineage. The +adapter is not licensed under the software's Apache-2.0 terms. +Changes from OpenJev: rank-32 factors were extracted from OpenJev/Qwen3.8-27B +weight differences, adapted for the unmodified Bonsai PQ2_0 base, and further +trained in local decision-preservation and fast-route experiments. The selected +artifact is `adapters/broad-lr0.0001.adapter` (GGUF-formatted bytes). OpenJev's original weights, license +and notice are at https://huggingface.co/openjev/openjev; the CC terms are at +https://creativecommons.org/licenses/by-nc/4.0/. + +The bundled native llama.cpp runtime is MIT-licensed by the ggml authors. It +was built from PrismML-Eng/llama.cpp commit f0a2b5dc9ea066780b9b410d2c0f95d675859bf7 +with the local qwen35 source change in native/source/local-qwen35.patch. +The bundled, byte-identical Prism Ternary-Bonsai-2-27B weights are Apache-2.0; +their ancestor Qwen3.8-27B is Apache-2.0. Preserve their licenses and notices. + +The Python decision core has no tzdata dependency. The experimental agent +controller is excluded from this bundle. See MANIFEST.json for exact +artifacts and native-runtime.json for the tested build and its system dependencies. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7503b463582d1a732e7237cf4852f61ad30ea36d --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +--- +license: cc-by-nc-4.0 +language: + - en +library_name: gguf +pipeline_tag: text-classification +base_model: prism-ml/Ternary-Bonsai-2-27B-gguf +tags: + - jev + - jev-style + - openjev + - decision-model + - typed-decisions + - gguf + - bonsai + - ternary + - local-inference + - blackwell +--- + +# Jev-Bonsai-Compass + +A complete, local **Jev-style text decision** download: [Prism's Ternary Bonsai 2 27B](https://huggingface.co/prism-ml/Ternary-Bonsai-2-27B-gguf), a decision adapter derived from [OpenJev](https://huggingface.co/openjev/openjev), the tested native server, and a small Python decision API. This is an independent project, not an official Jev or OpenJev release. Fast choices use one short option-scoring pass without reasoning; numerical questions can use a checked CPU calculation. + +## What was measured + +| Local configuration | Correct on the same 720 text questions | Sampled GPU memory | Mean text-decision latency | +|---|---:|---:|---:| +| **Jev-Bonsai-Compass**, adapter + compact runtime | **611/720 (84.9%)** | **7,844 MiB**, one RTX 5080 | **177 ms** | +| Full OpenJev FP8 reference | 615/720 (85.4%) | 30,974 MiB total, two GPUs | 118 ms | +| Untuned Bonsai + the same compact runtime | 584/720 (81.1%) | 7,510 MiB, one RTX 5080 | 145 ms | + +The 720 questions comprise 120 each from AG News, Emotion, BoolQ, SNLI, ARC-Challenge and a **20-intent subset** of Banking77. They used identical prompts and option order across the three local configurations. Current versus full OpenJev differs by four answers; a paired bootstrap interval for the accuracy difference is −2.50 to +1.25 percentage points. This does **not** establish formal parity, and it is **not** OpenJev's published 10,000-question or hosted Jev evaluation. The full reference used a different two-GPU serving stack, so its latency is not a same-hardware speed comparison. See [domain and method evidence](evidence/core-public-domains.json) and [benchmark metadata](benchmark-manifest.json). + +Accuracy varies by task: this adapter scored 117/120 on science, 113/120 on the selected banking intents, **102/120 on SNLI**, and **65/120 on Emotion**. It scored 327/328 on reused, authored numerical regressions with compact calculator assistance; that is a system result, not raw-model arithmetic accuracy. [Numeric cases](benchmarks/numeric-regression.jsonl) and [summary evidence](evidence/core-current.json) are included. All timing and memory figures are serial local measurements with context 4,096 and one active request. + +## Download and run + +The complete repository includes one canonical Bonsai GGUF, the adapter, Python source and wheel, a Linux x86-64 native server and shared libraries, examples, licenses, and a [SHA-256 manifest](MANIFEST.json). The bundled native build targets NVIDIA Blackwell `sm_120a` and needs a driver plus CUDA 13, cuBLAS 13 and NCCL 2 system libraries. Python 3.10+ is required; the decision core itself has no third-party Python dependencies. + +```bash +hf download ajh-code/Jev-Bonsai-Compass --local-dir Jev-Bonsai-Compass +cd Jev-Bonsai-Compass +python3 validate_release.py +bash run.sh serve --gpu 0 --host 127.0.0.1 --port 9304 +``` + +In another terminal: + +```bash +curl -s http://127.0.0.1:9304/v1/decide \ + -H 'Content-Type: application/json' \ + -d '{"state":"There are 9 boxes with 12 pens in each.","question":"How many pens are there?","options":[["a","108"],["b","96"],["c","21"]]}' +``` + +The result contains the selected option ID, method, timing and trace. `bash run.sh decide --input examples/requests.jsonl --gpu 0` processes JSONL without exposing HTTP. `bash run.sh serve --profile base --gpu 0` selects the untuned, Apache-licensed Bonsai path. The server has no authentication; use `--host 127.0.0.1` or a trusted network. For other GPU architectures, build a compatible [Prism llama.cpp fork](https://github.com/PrismML-Eng/llama.cpp) and pass `--binary /path/to/llama-server`. + +## Scope and terms + +The API accepts text `state`, `question`, and 2–26 `[id, description]` options at `POST /v1/decide`; it also provides `/health` and `/v1/capabilities`. It is **not** a drop-in `/v1/systemone` implementation, vision model, general chat model, or autonomous agent service. Option-relative scores are not guarantees of correctness. The separate experimental agent evidence is included for transparency but its controller is not part of this decision API. + +The bundled adapter contains locally modified OpenJev-derived weight factors and retains **CC BY-NC 4.0** noncommercial terms. The unmodified Bonsai base weights are Apache 2.0, this Python software is Apache 2.0, and the native runtime is MIT. The [NOTICE](NOTICE), [licenses](licenses/) and [profile identities](profiles.json) distinguish the components. The adapter is GGUF-formatted data stored as `adapters/broad-lr0.0001.adapter`; `run.sh` loads it directly. The single `.gguf` file is the canonical base model used by both profiles. diff --git a/adapters/broad-lr0.0001.adapter b/adapters/broad-lr0.0001.adapter new file mode 100644 index 0000000000000000000000000000000000000000..43b3797a2e6a91cf527f9b137f52fe423aca86c6 --- /dev/null +++ b/adapters/broad-lr0.0001.adapter @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4903a7c9fd91c9a89ad504716d8fb497a2fbe94a6158148e02ea0ae0237ac233 +size 318802208 diff --git a/benchmark-manifest.json b/benchmark-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..a79c561975bbcbcaaf202a00136f3dfb2ed49ea0 --- /dev/null +++ b/benchmark-manifest.json @@ -0,0 +1,4241 @@ +{ + "public_cases_sha256": "9a8a9d62b7c62486d5a027e29c99f2f3a0b3e7319cc627a60c4066db7263f722", + "numeric_cases_sha256": "d87f9109201ec001c2662418b3c81a68a5f2ba6b5e92f8cc808bdb927b7340d0", + "final_agent_cases_sha256": "120e800428a5e775735d8290fb12500007498476c3e92f7240f70e110aef4f3c", + "selection": { + "created": "2026-09-24T08:51:29.756341+00:00", + "files": { + "bonsai_runtime/backend.py": "dc84801d37fcb8c346e0358e41f72905d7c69d0afce43af2b6d2e3e868c15b6f", + "bonsai_runtime/reference.py": "49ad026d1de9c3a0c0f241642b3b558f5b27bec4d7721cce6fb39f70566e3e41", + "bonsai_runtime/__main__.py": "23799e542967e0ebb213accf23afdb375d9a6ace81c7f1a17c97c26e3bf1b206", + "bonsai_runtime/agent.py": "2f5ce4c190e358b25578e8dcf1b0d1a33fdbf21b6502158386924b4d69fbbdd1", + "bonsai_runtime/readout.py": "911186ca5059f4e33faa9f5837f3403b0091ffeb54ed1c78d0991de34ef7d8dd", + "bonsai_runtime/__init__.py": "535f8abf3a37bc38f9f8ebfe5839a7197a058994f466eaa28990cbec4164bca4", + "bonsai_runtime/controller.py": "287160d5d56a8068e061474ed17e054b11b3bd264383516cb79d37eaed44fb58", + "bonsai_runtime/service.py": "be31817ff7b8a9ec10ffd42146da3bc4352426482244d58f1b5ca93b791a3c7d", + "bonsai_runtime/worker.py": "fe6eb5e4e80db1d26c40f45c809d592c6a7d18b28aa6f238ad01ce2547f56df1", + "bonsai_runtime/decision.py": "7c82bfbc99ae7328f4c82e35cc8b8a1042923383c58288b40f9553b7711d7bad", + "bonsai_runtime/timefields.py": "d48369ef7241fa36d86939c8e0649962f3991cebe78705303c9b5d634167d548", + "bonsai_runtime/numeric.py": "500a225a671af1c2b7cc62907263bd0c7d97af87304b3c33b2ddfd60591d1564", + "analysis/run_guarded_runtime.py": "bfa325c8e21d704d965296f366704122cbcf8e12fc4e020f59715209ca2d4235", + "analysis/guarded-runtime-20260924T0800Z/development.json": "a97ff0c9f10a9d31ac24797f04cf40e8a6c609dfe696ed5383c155027333ba69", + "analysis/guarded-runtime-20260924T0800Z/final-v2.json": "120e800428a5e775735d8290fb12500007498476c3e92f7240f70e110aef4f3c", + "analysis/guarded-runtime-20260924T0800Z/protocol.json": "107ea440aca7ca64c8992995bccb8fa0bf59aad888f28359bc394f163062232d", + "analysis/guarded-runtime-20260924T0800Z/protocol-amendment.json": "fa1726f51584874d12d96f48f50a4c22fbe8eb45be4f88213d3799c8c3ab7a79", + "analysis/guarded-runtime-20260924T0800Z/turn-labels.json": "f7ed87921a7e0e033a45511476bd4dbd6d816a0fdfa829ba1cd646116db700c3", + "analysis/guarded-runtime-20260924T0800Z/turn-labels-protocol.json": "3c11baccbb7df687f10701b980383ac3e18ddc38412dbffb32aee7b4e319648d" + }, + "weights": { + "models/Ternary-Bonsai-2-27B-PQ2_0.gguf": "3907dc1658db1f78a9826bf8d5bcb8dc65db0d466388937af57f2294fae62ec1", + "models/fast-routes-20260924T0101Z/broad-lr0.0001.gguf": "4903a7c9fd91c9a89ad504716d8fb497a2fbe94a6158148e02ea0ae0237ac233" + }, + "profiles": { + "base": null, + "current": "models/fast-routes-20260924T0101Z/broad-lr0.0001.gguf" + }, + "final_metrics_seen": false + }, + "case_identifiers": { + "public": [ + { + "id": "news-5655", + "domain": "news" + }, + { + "id": "news-1753", + "domain": "news" + }, + { + "id": "news-1097", + "domain": "news" + }, + { + "id": "news-5945", + "domain": "news" + }, + { + "id": "news-2926", + "domain": "news" + }, + { + "id": "news-1535", + "domain": "news" + }, + { + "id": "news-2640", + "domain": "news" + }, + { + "id": "news-4403", + "domain": "news" + }, + { + "id": "news-6096", + "domain": "news" + }, + { + "id": "news-6032", + "domain": "news" + }, + { + "id": "news-5232", + "domain": "news" + }, + { + "id": "news-3765", + "domain": "news" + }, + { + "id": "news-5068", + "domain": "news" + }, + { + "id": "news-2763", + "domain": "news" + }, + { + "id": "news-3521", + "domain": "news" + }, + { + "id": "news-5010", + "domain": "news" + }, + { + "id": "news-6783", + "domain": "news" + }, + { + "id": "news-1466", + "domain": "news" + }, + { + "id": "news-3408", + "domain": "news" + }, + { + "id": "news-6846", + "domain": "news" + }, + { + "id": "news-2084", + "domain": "news" + }, + { + "id": "news-39", + "domain": "news" + }, + { + "id": "news-6728", + "domain": "news" + }, + { + "id": "news-4686", + "domain": "news" + }, + { + "id": "news-2323", + "domain": "news" + }, + { + "id": "news-4029", + "domain": "news" + }, + { + "id": "news-3383", + "domain": "news" + }, + { + "id": "news-3440", + "domain": "news" + }, + { + "id": "news-1634", + "domain": "news" + }, + { + "id": "news-6957", + "domain": "news" + }, + { + "id": "news-941", + "domain": "news" + }, + { + "id": "news-4789", + "domain": "news" + }, + { + "id": "news-3817", + "domain": "news" + }, + { + "id": "news-1780", + "domain": "news" + }, + { + "id": "news-6656", + "domain": "news" + }, + { + "id": "news-6747", + "domain": "news" + }, + { + "id": "news-1018", + "domain": "news" + }, + { + "id": "news-5178", + "domain": "news" + }, + { + "id": "news-5980", + "domain": "news" + }, + { + "id": "news-4648", + "domain": "news" + }, + { + "id": "news-215", + "domain": "news" + }, + { + "id": "news-5461", + "domain": "news" + }, + { + "id": "news-473", + "domain": "news" + }, + { + "id": "news-107", + "domain": "news" + }, + { + "id": "news-1295", + "domain": "news" + }, + { + "id": "news-1849", + "domain": "news" + }, + { + "id": "news-5402", + "domain": "news" + }, + { + "id": "news-2293", + "domain": "news" + }, + { + "id": "news-4083", + "domain": "news" + }, + { + "id": "news-5000", + "domain": "news" + }, + { + "id": "news-6676", + "domain": "news" + }, + { + "id": "news-2544", + "domain": "news" + }, + { + "id": "news-7047", + "domain": "news" + }, + { + "id": "news-6229", + "domain": "news" + }, + { + "id": "news-7250", + "domain": "news" + }, + { + "id": "news-158", + "domain": "news" + }, + { + "id": "news-571", + "domain": "news" + }, + { + "id": "news-6679", + "domain": "news" + }, + { + "id": "news-915", + "domain": "news" + }, + { + "id": "news-2964", + "domain": "news" + }, + { + "id": "news-3786", + "domain": "news" + }, + { + "id": "news-2057", + "domain": "news" + }, + { + "id": "news-3843", + "domain": "news" + }, + { + "id": "news-3065", + "domain": "news" + }, + { + "id": "news-3561", + "domain": "news" + }, + { + "id": "news-6881", + "domain": "news" + }, + { + "id": "news-3569", + "domain": "news" + }, + { + "id": "news-7022", + "domain": "news" + }, + { + "id": "news-3184", + "domain": "news" + }, + { + "id": "news-694", + "domain": "news" + }, + { + "id": "news-3127", + "domain": "news" + }, + { + "id": "news-961", + "domain": "news" + }, + { + "id": "news-7271", + "domain": "news" + }, + { + "id": "news-5982", + "domain": "news" + }, + { + "id": "news-6802", + "domain": "news" + }, + { + "id": "news-707", + "domain": "news" + }, + { + "id": "news-5186", + "domain": "news" + }, + { + "id": "news-1478", + "domain": "news" + }, + { + "id": "news-1098", + "domain": "news" + }, + { + "id": "news-7011", + "domain": "news" + }, + { + "id": "news-4240", + "domain": "news" + }, + { + "id": "news-7530", + "domain": "news" + }, + { + "id": "news-6862", + "domain": "news" + }, + { + "id": "news-2192", + "domain": "news" + }, + { + "id": "news-431", + "domain": "news" + }, + { + "id": "news-6649", + "domain": "news" + }, + { + "id": "news-7025", + "domain": "news" + }, + { + "id": "news-5294", + "domain": "news" + }, + { + "id": "news-2088", + "domain": "news" + }, + { + "id": "news-951", + "domain": "news" + }, + { + "id": "news-1174", + "domain": "news" + }, + { + "id": "news-7410", + "domain": "news" + }, + { + "id": "news-7101", + "domain": "news" + }, + { + "id": "news-4381", + "domain": "news" + }, + { + "id": "news-1492", + "domain": "news" + }, + { + "id": "news-6878", + "domain": "news" + }, + { + "id": "news-1947", + "domain": "news" + }, + { + "id": "news-336", + "domain": "news" + }, + { + "id": "news-1033", + "domain": "news" + }, + { + "id": "news-5856", + "domain": "news" + }, + { + "id": "news-3955", + "domain": "news" + }, + { + "id": "news-2954", + "domain": "news" + }, + { + "id": "news-57", + "domain": "news" + }, + { + "id": "news-6049", + "domain": "news" + }, + { + "id": "news-5485", + "domain": "news" + }, + { + "id": "news-7109", + "domain": "news" + }, + { + "id": "news-3323", + "domain": "news" + }, + { + "id": "news-5684", + "domain": "news" + }, + { + "id": "news-819", + "domain": "news" + }, + { + "id": "news-2035", + "domain": "news" + }, + { + "id": "news-7173", + "domain": "news" + }, + { + "id": "news-2664", + "domain": "news" + }, + { + "id": "news-3009", + "domain": "news" + }, + { + "id": "news-1423", + "domain": "news" + }, + { + "id": "news-7247", + "domain": "news" + }, + { + "id": "news-638", + "domain": "news" + }, + { + "id": "news-2478", + "domain": "news" + }, + { + "id": "news-6770", + "domain": "news" + }, + { + "id": "news-2504", + "domain": "news" + }, + { + "id": "news-3130", + "domain": "news" + }, + { + "id": "emotion-1413", + "domain": "emotion" + }, + { + "id": "emotion-438", + "domain": "emotion" + }, + { + "id": "emotion-274", + "domain": "emotion" + }, + { + "id": "emotion-1486", + "domain": "emotion" + }, + { + "id": "emotion-731", + "domain": "emotion" + }, + { + "id": "emotion-383", + "domain": "emotion" + }, + { + "id": "emotion-660", + "domain": "emotion" + }, + { + "id": "emotion-1100", + "domain": "emotion" + }, + { + "id": "emotion-1524", + "domain": "emotion" + }, + { + "id": "emotion-1508", + "domain": "emotion" + }, + { + "id": "emotion-1308", + "domain": "emotion" + }, + { + "id": "emotion-941", + "domain": "emotion" + }, + { + "id": "emotion-1267", + "domain": "emotion" + }, + { + "id": "emotion-690", + "domain": "emotion" + }, + { + "id": "emotion-880", + "domain": "emotion" + }, + { + "id": "emotion-1252", + "domain": "emotion" + }, + { + "id": "emotion-1695", + "domain": "emotion" + }, + { + "id": "emotion-366", + "domain": "emotion" + }, + { + "id": "emotion-852", + "domain": "emotion" + }, + { + "id": "emotion-1711", + "domain": "emotion" + }, + { + "id": "emotion-521", + "domain": "emotion" + }, + { + "id": "emotion-9", + "domain": "emotion" + }, + { + "id": "emotion-1682", + "domain": "emotion" + }, + { + "id": "emotion-1171", + "domain": "emotion" + }, + { + "id": "emotion-580", + "domain": "emotion" + }, + { + "id": "emotion-1007", + "domain": "emotion" + }, + { + "id": "emotion-845", + "domain": "emotion" + }, + { + "id": "emotion-860", + "domain": "emotion" + }, + { + "id": "emotion-408", + "domain": "emotion" + }, + { + "id": "emotion-1739", + "domain": "emotion" + }, + { + "id": "emotion-235", + "domain": "emotion" + }, + { + "id": "emotion-1197", + "domain": "emotion" + }, + { + "id": "emotion-954", + "domain": "emotion" + }, + { + "id": "emotion-445", + "domain": "emotion" + }, + { + "id": "emotion-1664", + "domain": "emotion" + }, + { + "id": "emotion-1686", + "domain": "emotion" + }, + { + "id": "emotion-254", + "domain": "emotion" + }, + { + "id": "emotion-1294", + "domain": "emotion" + }, + { + "id": "emotion-1495", + "domain": "emotion" + }, + { + "id": "emotion-1162", + "domain": "emotion" + }, + { + "id": "emotion-53", + "domain": "emotion" + }, + { + "id": "emotion-1365", + "domain": "emotion" + }, + { + "id": "emotion-118", + "domain": "emotion" + }, + { + "id": "emotion-26", + "domain": "emotion" + }, + { + "id": "emotion-323", + "domain": "emotion" + }, + { + "id": "emotion-462", + "domain": "emotion" + }, + { + "id": "emotion-1350", + "domain": "emotion" + }, + { + "id": "emotion-573", + "domain": "emotion" + }, + { + "id": "emotion-1020", + "domain": "emotion" + }, + { + "id": "emotion-1250", + "domain": "emotion" + }, + { + "id": "emotion-1669", + "domain": "emotion" + }, + { + "id": "emotion-636", + "domain": "emotion" + }, + { + "id": "emotion-1761", + "domain": "emotion" + }, + { + "id": "emotion-1557", + "domain": "emotion" + }, + { + "id": "emotion-1812", + "domain": "emotion" + }, + { + "id": "emotion-39", + "domain": "emotion" + }, + { + "id": "emotion-142", + "domain": "emotion" + }, + { + "id": "emotion-228", + "domain": "emotion" + }, + { + "id": "emotion-741", + "domain": "emotion" + }, + { + "id": "emotion-946", + "domain": "emotion" + }, + { + "id": "emotion-514", + "domain": "emotion" + }, + { + "id": "emotion-1928", + "domain": "emotion" + }, + { + "id": "emotion-960", + "domain": "emotion" + }, + { + "id": "emotion-766", + "domain": "emotion" + }, + { + "id": "emotion-890", + "domain": "emotion" + }, + { + "id": "emotion-1720", + "domain": "emotion" + }, + { + "id": "emotion-892", + "domain": "emotion" + }, + { + "id": "emotion-1755", + "domain": "emotion" + }, + { + "id": "emotion-796", + "domain": "emotion" + }, + { + "id": "emotion-173", + "domain": "emotion" + }, + { + "id": "emotion-1979", + "domain": "emotion" + }, + { + "id": "emotion-781", + "domain": "emotion" + }, + { + "id": "emotion-240", + "domain": "emotion" + }, + { + "id": "emotion-1817", + "domain": "emotion" + }, + { + "id": "emotion-1700", + "domain": "emotion" + }, + { + "id": "emotion-176", + "domain": "emotion" + }, + { + "id": "emotion-1296", + "domain": "emotion" + }, + { + "id": "emotion-369", + "domain": "emotion" + }, + { + "id": "emotion-1752", + "domain": "emotion" + }, + { + "id": "emotion-1060", + "domain": "emotion" + }, + { + "id": "emotion-1882", + "domain": "emotion" + }, + { + "id": "emotion-1715", + "domain": "emotion" + }, + { + "id": "emotion-548", + "domain": "emotion" + }, + { + "id": "emotion-107", + "domain": "emotion" + }, + { + "id": "emotion-1662", + "domain": "emotion" + }, + { + "id": "emotion-1756", + "domain": "emotion" + }, + { + "id": "emotion-1323", + "domain": "emotion" + }, + { + "id": "emotion-522", + "domain": "emotion" + }, + { + "id": "emotion-237", + "domain": "emotion" + }, + { + "id": "emotion-293", + "domain": "emotion" + }, + { + "id": "emotion-1852", + "domain": "emotion" + }, + { + "id": "emotion-1775", + "domain": "emotion" + }, + { + "id": "emotion-1095", + "domain": "emotion" + }, + { + "id": "emotion-373", + "domain": "emotion" + }, + { + "id": "emotion-1719", + "domain": "emotion" + }, + { + "id": "emotion-486", + "domain": "emotion" + }, + { + "id": "emotion-84", + "domain": "emotion" + }, + { + "id": "emotion-258", + "domain": "emotion" + }, + { + "id": "emotion-1464", + "domain": "emotion" + }, + { + "id": "emotion-988", + "domain": "emotion" + }, + { + "id": "emotion-738", + "domain": "emotion" + }, + { + "id": "emotion-14", + "domain": "emotion" + }, + { + "id": "emotion-1512", + "domain": "emotion" + }, + { + "id": "emotion-1371", + "domain": "emotion" + }, + { + "id": "emotion-1777", + "domain": "emotion" + }, + { + "id": "emotion-830", + "domain": "emotion" + }, + { + "id": "emotion-1919", + "domain": "emotion" + }, + { + "id": "emotion-1936", + "domain": "emotion" + }, + { + "id": "emotion-1421", + "domain": "emotion" + }, + { + "id": "emotion-204", + "domain": "emotion" + }, + { + "id": "emotion-508", + "domain": "emotion" + }, + { + "id": "emotion-1793", + "domain": "emotion" + }, + { + "id": "emotion-666", + "domain": "emotion" + }, + { + "id": "emotion-752", + "domain": "emotion" + }, + { + "id": "emotion-355", + "domain": "emotion" + }, + { + "id": "emotion-1811", + "domain": "emotion" + }, + { + "id": "emotion-159", + "domain": "emotion" + }, + { + "id": "emotion-619", + "domain": "emotion" + }, + { + "id": "emotion-1692", + "domain": "emotion" + }, + { + "id": "emotion-626", + "domain": "emotion" + }, + { + "id": "reading-2827", + "domain": "reading" + }, + { + "id": "reading-876", + "domain": "reading" + }, + { + "id": "reading-548", + "domain": "reading" + }, + { + "id": "reading-2972", + "domain": "reading" + }, + { + "id": "reading-1463", + "domain": "reading" + }, + { + "id": "reading-767", + "domain": "reading" + }, + { + "id": "reading-1320", + "domain": "reading" + }, + { + "id": "reading-2201", + "domain": "reading" + }, + { + "id": "reading-3048", + "domain": "reading" + }, + { + "id": "reading-3016", + "domain": "reading" + }, + { + "id": "reading-2616", + "domain": "reading" + }, + { + "id": "reading-1882", + "domain": "reading" + }, + { + "id": "reading-2534", + "domain": "reading" + }, + { + "id": "reading-1381", + "domain": "reading" + }, + { + "id": "reading-1760", + "domain": "reading" + }, + { + "id": "reading-2505", + "domain": "reading" + }, + { + "id": "reading-733", + "domain": "reading" + }, + { + "id": "reading-1704", + "domain": "reading" + }, + { + "id": "reading-1042", + "domain": "reading" + }, + { + "id": "reading-19", + "domain": "reading" + }, + { + "id": "reading-2343", + "domain": "reading" + }, + { + "id": "reading-1161", + "domain": "reading" + }, + { + "id": "reading-2014", + "domain": "reading" + }, + { + "id": "reading-1691", + "domain": "reading" + }, + { + "id": "reading-1720", + "domain": "reading" + }, + { + "id": "reading-817", + "domain": "reading" + }, + { + "id": "reading-470", + "domain": "reading" + }, + { + "id": "reading-2394", + "domain": "reading" + }, + { + "id": "reading-1908", + "domain": "reading" + }, + { + "id": "reading-890", + "domain": "reading" + }, + { + "id": "reading-509", + "domain": "reading" + }, + { + "id": "reading-2589", + "domain": "reading" + }, + { + "id": "reading-2990", + "domain": "reading" + }, + { + "id": "reading-2324", + "domain": "reading" + }, + { + "id": "reading-107", + "domain": "reading" + }, + { + "id": "reading-2730", + "domain": "reading" + }, + { + "id": "reading-236", + "domain": "reading" + }, + { + "id": "reading-53", + "domain": "reading" + }, + { + "id": "reading-647", + "domain": "reading" + }, + { + "id": "reading-924", + "domain": "reading" + }, + { + "id": "reading-2701", + "domain": "reading" + }, + { + "id": "reading-1146", + "domain": "reading" + }, + { + "id": "reading-2041", + "domain": "reading" + }, + { + "id": "reading-2500", + "domain": "reading" + }, + { + "id": "reading-1272", + "domain": "reading" + }, + { + "id": "reading-3114", + "domain": "reading" + }, + { + "id": "reading-79", + "domain": "reading" + }, + { + "id": "reading-285", + "domain": "reading" + }, + { + "id": "reading-457", + "domain": "reading" + }, + { + "id": "reading-1482", + "domain": "reading" + }, + { + "id": "reading-1893", + "domain": "reading" + }, + { + "id": "reading-1028", + "domain": "reading" + }, + { + "id": "reading-1921", + "domain": "reading" + }, + { + "id": "reading-1532", + "domain": "reading" + }, + { + "id": "reading-1780", + "domain": "reading" + }, + { + "id": "reading-1784", + "domain": "reading" + }, + { + "id": "reading-1592", + "domain": "reading" + }, + { + "id": "reading-347", + "domain": "reading" + }, + { + "id": "reading-1563", + "domain": "reading" + }, + { + "id": "reading-480", + "domain": "reading" + }, + { + "id": "reading-2991", + "domain": "reading" + }, + { + "id": "reading-353", + "domain": "reading" + }, + { + "id": "reading-2593", + "domain": "reading" + }, + { + "id": "reading-739", + "domain": "reading" + }, + { + "id": "reading-549", + "domain": "reading" + }, + { + "id": "reading-2120", + "domain": "reading" + }, + { + "id": "reading-1096", + "domain": "reading" + }, + { + "id": "reading-215", + "domain": "reading" + }, + { + "id": "reading-2647", + "domain": "reading" + }, + { + "id": "reading-1044", + "domain": "reading" + }, + { + "id": "reading-475", + "domain": "reading" + }, + { + "id": "reading-587", + "domain": "reading" + }, + { + "id": "reading-2190", + "domain": "reading" + }, + { + "id": "reading-746", + "domain": "reading" + }, + { + "id": "reading-973", + "domain": "reading" + }, + { + "id": "reading-168", + "domain": "reading" + }, + { + "id": "reading-516", + "domain": "reading" + }, + { + "id": "reading-2928", + "domain": "reading" + }, + { + "id": "reading-1977", + "domain": "reading" + }, + { + "id": "reading-1477", + "domain": "reading" + }, + { + "id": "reading-28", + "domain": "reading" + }, + { + "id": "reading-3024", + "domain": "reading" + }, + { + "id": "reading-2742", + "domain": "reading" + }, + { + "id": "reading-1661", + "domain": "reading" + }, + { + "id": "reading-2842", + "domain": "reading" + }, + { + "id": "reading-409", + "domain": "reading" + }, + { + "id": "reading-1017", + "domain": "reading" + }, + { + "id": "reading-1332", + "domain": "reading" + }, + { + "id": "reading-1504", + "domain": "reading" + }, + { + "id": "reading-711", + "domain": "reading" + }, + { + "id": "reading-319", + "domain": "reading" + }, + { + "id": "reading-1239", + "domain": "reading" + }, + { + "id": "reading-1252", + "domain": "reading" + }, + { + "id": "reading-1565", + "domain": "reading" + }, + { + "id": "reading-3047", + "domain": "reading" + }, + { + "id": "reading-2741", + "domain": "reading" + }, + { + "id": "reading-2405", + "domain": "reading" + }, + { + "id": "reading-1615", + "domain": "reading" + }, + { + "id": "reading-2252", + "domain": "reading" + }, + { + "id": "reading-427", + "domain": "reading" + }, + { + "id": "reading-533", + "domain": "reading" + }, + { + "id": "reading-3070", + "domain": "reading" + }, + { + "id": "reading-2427", + "domain": "reading" + }, + { + "id": "reading-1988", + "domain": "reading" + }, + { + "id": "reading-2562", + "domain": "reading" + }, + { + "id": "reading-283", + "domain": "reading" + }, + { + "id": "reading-2993", + "domain": "reading" + }, + { + "id": "reading-1620", + "domain": "reading" + }, + { + "id": "reading-1743", + "domain": "reading" + }, + { + "id": "reading-133", + "domain": "reading" + }, + { + "id": "reading-2230", + "domain": "reading" + }, + { + "id": "reading-1903", + "domain": "reading" + }, + { + "id": "reading-646", + "domain": "reading" + }, + { + "id": "reading-2412", + "domain": "reading" + }, + { + "id": "reading-2711", + "domain": "reading" + }, + { + "id": "reading-2333", + "domain": "reading" + }, + { + "id": "reading-1227", + "domain": "reading" + }, + { + "id": "reading-1577", + "domain": "reading" + }, + { + "id": "reading-91", + "domain": "reading" + }, + { + "id": "reading-2722", + "domain": "reading" + }, + { + "id": "entailment-3574", + "domain": "entailment" + }, + { + "id": "entailment-2235", + "domain": "entailment" + }, + { + "id": "entailment-5955", + "domain": "entailment" + }, + { + "id": "entailment-3130", + "domain": "entailment" + }, + { + "id": "entailment-5370", + "domain": "entailment" + }, + { + "id": "entailment-8965", + "domain": "entailment" + }, + { + "id": "entailment-7665", + "domain": "entailment" + }, + { + "id": "entailment-5622", + "domain": "entailment" + }, + { + "id": "entailment-7167", + "domain": "entailment" + }, + { + "id": "entailment-2991", + "domain": "entailment" + }, + { + "id": "entailment-6935", + "domain": "entailment" + }, + { + "id": "entailment-4248", + "domain": "entailment" + }, + { + "id": "entailment-79", + "domain": "entailment" + }, + { + "id": "entailment-9543", + "domain": "entailment" + }, + { + "id": "entailment-4730", + "domain": "entailment" + }, + { + "id": "entailment-8206", + "domain": "entailment" + }, + { + "id": "entailment-6884", + "domain": "entailment" + }, + { + "id": "entailment-6999", + "domain": "entailment" + }, + { + "id": "entailment-3331", + "domain": "entailment" + }, + { + "id": "entailment-1917", + "domain": "entailment" + }, + { + "id": "entailment-9753", + "domain": "entailment" + }, + { + "id": "entailment-7771", + "domain": "entailment" + }, + { + "id": "entailment-3627", + "domain": "entailment" + }, + { + "id": "entailment-2072", + "domain": "entailment" + }, + { + "id": "entailment-9465", + "domain": "entailment" + }, + { + "id": "entailment-435", + "domain": "entailment" + }, + { + "id": "entailment-958", + "domain": "entailment" + }, + { + "id": "entailment-219", + "domain": "entailment" + }, + { + "id": "entailment-2642", + "domain": "entailment" + }, + { + "id": "entailment-3768", + "domain": "entailment" + }, + { + "id": "entailment-4670", + "domain": "entailment" + }, + { + "id": "entailment-8315", + "domain": "entailment" + }, + { + "id": "entailment-5179", + "domain": "entailment" + }, + { + "id": "entailment-320", + "domain": "entailment" + }, + { + "id": "entailment-1159", + "domain": "entailment" + }, + { + "id": "entailment-1863", + "domain": "entailment" + }, + { + "id": "entailment-6031", + "domain": "entailment" + }, + { + "id": "entailment-7709", + "domain": "entailment" + }, + { + "id": "entailment-4191", + "domain": "entailment" + }, + { + "id": "entailment-7823", + "domain": "entailment" + }, + { + "id": "entailment-6240", + "domain": "entailment" + }, + { + "id": "entailment-7250", + "domain": "entailment" + }, + { + "id": "entailment-7267", + "domain": "entailment" + }, + { + "id": "entailment-6482", + "domain": "entailment" + }, + { + "id": "entailment-1411", + "domain": "entailment" + }, + { + "id": "entailment-6366", + "domain": "entailment" + }, + { + "id": "entailment-1956", + "domain": "entailment" + }, + { + "id": "entailment-1437", + "domain": "entailment" + }, + { + "id": "entailment-3014", + "domain": "entailment" + }, + { + "id": "entailment-2238", + "domain": "entailment" + }, + { + "id": "entailment-8636", + "domain": "entailment" + }, + { + "id": "entailment-4467", + "domain": "entailment" + }, + { + "id": "entailment-874", + "domain": "entailment" + }, + { + "id": "entailment-4255", + "domain": "entailment" + }, + { + "id": "entailment-1937", + "domain": "entailment" + }, + { + "id": "entailment-2394", + "domain": "entailment" + }, + { + "id": "entailment-8921", + "domain": "entailment" + }, + { + "id": "entailment-3043", + "domain": "entailment" + }, + { + "id": "entailment-3967", + "domain": "entailment" + }, + { + "id": "entailment-679", + "domain": "entailment" + }, + { + "id": "entailment-2102", + "domain": "entailment" + }, + { + "id": "entailment-8054", + "domain": "entailment" + }, + { + "id": "entailment-6012", + "domain": "entailment" + }, + { + "id": "entailment-117", + "domain": "entailment" + }, + { + "id": "entailment-6764", + "domain": "entailment" + }, + { + "id": "entailment-1670", + "domain": "entailment" + }, + { + "id": "entailment-4146", + "domain": "entailment" + }, + { + "id": "entailment-5419", + "domain": "entailment" + }, + { + "id": "entailment-6125", + "domain": "entailment" + }, + { + "id": "entailment-2901", + "domain": "entailment" + }, + { + "id": "entailment-1296", + "domain": "entailment" + }, + { + "id": "entailment-5045", + "domain": "entailment" + }, + { + "id": "entailment-5097", + "domain": "entailment" + }, + { + "id": "entailment-6371", + "domain": "entailment" + }, + { + "id": "entailment-9795", + "domain": "entailment" + }, + { + "id": "entailment-6574", + "domain": "entailment" + }, + { + "id": "entailment-9173", + "domain": "entailment" + }, + { + "id": "entailment-1742", + "domain": "entailment" + }, + { + "id": "entailment-2172", + "domain": "entailment" + }, + { + "id": "entailment-9883", + "domain": "entailment" + }, + { + "id": "entailment-8100", + "domain": "entailment" + }, + { + "id": "entailment-1151", + "domain": "entailment" + }, + { + "id": "entailment-6595", + "domain": "entailment" + }, + { + "id": "entailment-7092", + "domain": "entailment" + }, + { + "id": "entailment-540", + "domain": "entailment" + }, + { + "id": "entailment-9085", + "domain": "entailment" + }, + { + "id": "entailment-9796", + "domain": "entailment" + }, + { + "id": "entailment-1413", + "domain": "entailment" + }, + { + "id": "entailment-7752", + "domain": "entailment" + }, + { + "id": "entailment-2634", + "domain": "entailment" + }, + { + "id": "entailment-9824", + "domain": "entailment" + }, + { + "id": "entailment-9500", + "domain": "entailment" + }, + { + "id": "entailment-4998", + "domain": "entailment" + }, + { + "id": "entailment-6423", + "domain": "entailment" + }, + { + "id": "entailment-372", + "domain": "entailment" + }, + { + "id": "entailment-7387", + "domain": "entailment" + }, + { + "id": "entailment-6930", + "domain": "entailment" + }, + { + "id": "entailment-6561", + "domain": "entailment" + }, + { + "id": "entailment-1707", + "domain": "entailment" + }, + { + "id": "entailment-9906", + "domain": "entailment" + }, + { + "id": "entailment-3361", + "domain": "entailment" + }, + { + "id": "entailment-3150", + "domain": "entailment" + }, + { + "id": "entailment-2953", + "domain": "entailment" + }, + { + "id": "entailment-7117", + "domain": "entailment" + }, + { + "id": "entailment-263", + "domain": "entailment" + }, + { + "id": "entailment-3858", + "domain": "entailment" + }, + { + "id": "entailment-2772", + "domain": "entailment" + }, + { + "id": "entailment-1450", + "domain": "entailment" + }, + { + "id": "entailment-4763", + "domain": "entailment" + }, + { + "id": "entailment-9492", + "domain": "entailment" + }, + { + "id": "entailment-3525", + "domain": "entailment" + }, + { + "id": "entailment-4969", + "domain": "entailment" + }, + { + "id": "entailment-8052", + "domain": "entailment" + }, + { + "id": "entailment-6433", + "domain": "entailment" + }, + { + "id": "entailment-6955", + "domain": "entailment" + }, + { + "id": "entailment-7485", + "domain": "entailment" + }, + { + "id": "entailment-1907", + "domain": "entailment" + }, + { + "id": "entailment-5240", + "domain": "entailment" + }, + { + "id": "entailment-4585", + "domain": "entailment" + }, + { + "id": "entailment-7057", + "domain": "entailment" + }, + { + "id": "science-438", + "domain": "science" + }, + { + "id": "science-274", + "domain": "science" + }, + { + "id": "science-731", + "domain": "science" + }, + { + "id": "science-383", + "domain": "science" + }, + { + "id": "science-660", + "domain": "science" + }, + { + "id": "science-1100", + "domain": "science" + }, + { + "id": "science-941", + "domain": "science" + }, + { + "id": "science-690", + "domain": "science" + }, + { + "id": "science-880", + "domain": "science" + }, + { + "id": "science-366", + "domain": "science" + }, + { + "id": "science-852", + "domain": "science" + }, + { + "id": "science-521", + "domain": "science" + }, + { + "id": "science-9", + "domain": "science" + }, + { + "id": "science-1171", + "domain": "science" + }, + { + "id": "science-580", + "domain": "science" + }, + { + "id": "science-1007", + "domain": "science" + }, + { + "id": "science-845", + "domain": "science" + }, + { + "id": "science-860", + "domain": "science" + }, + { + "id": "science-408", + "domain": "science" + }, + { + "id": "science-235", + "domain": "science" + }, + { + "id": "science-954", + "domain": "science" + }, + { + "id": "science-445", + "domain": "science" + }, + { + "id": "science-254", + "domain": "science" + }, + { + "id": "science-1162", + "domain": "science" + }, + { + "id": "science-53", + "domain": "science" + }, + { + "id": "science-118", + "domain": "science" + }, + { + "id": "science-26", + "domain": "science" + }, + { + "id": "science-323", + "domain": "science" + }, + { + "id": "science-462", + "domain": "science" + }, + { + "id": "science-573", + "domain": "science" + }, + { + "id": "science-1020", + "domain": "science" + }, + { + "id": "science-636", + "domain": "science" + }, + { + "id": "science-39", + "domain": "science" + }, + { + "id": "science-142", + "domain": "science" + }, + { + "id": "science-228", + "domain": "science" + }, + { + "id": "science-741", + "domain": "science" + }, + { + "id": "science-946", + "domain": "science" + }, + { + "id": "science-514", + "domain": "science" + }, + { + "id": "science-960", + "domain": "science" + }, + { + "id": "science-766", + "domain": "science" + }, + { + "id": "science-890", + "domain": "science" + }, + { + "id": "science-892", + "domain": "science" + }, + { + "id": "science-796", + "domain": "science" + }, + { + "id": "science-173", + "domain": "science" + }, + { + "id": "science-781", + "domain": "science" + }, + { + "id": "science-240", + "domain": "science" + }, + { + "id": "science-176", + "domain": "science" + }, + { + "id": "science-369", + "domain": "science" + }, + { + "id": "science-1060", + "domain": "science" + }, + { + "id": "science-548", + "domain": "science" + }, + { + "id": "science-107", + "domain": "science" + }, + { + "id": "science-522", + "domain": "science" + }, + { + "id": "science-237", + "domain": "science" + }, + { + "id": "science-293", + "domain": "science" + }, + { + "id": "science-1095", + "domain": "science" + }, + { + "id": "science-373", + "domain": "science" + }, + { + "id": "science-486", + "domain": "science" + }, + { + "id": "science-84", + "domain": "science" + }, + { + "id": "science-258", + "domain": "science" + }, + { + "id": "science-988", + "domain": "science" + }, + { + "id": "science-738", + "domain": "science" + }, + { + "id": "science-14", + "domain": "science" + }, + { + "id": "science-830", + "domain": "science" + }, + { + "id": "science-204", + "domain": "science" + }, + { + "id": "science-508", + "domain": "science" + }, + { + "id": "science-666", + "domain": "science" + }, + { + "id": "science-752", + "domain": "science" + }, + { + "id": "science-355", + "domain": "science" + }, + { + "id": "science-159", + "domain": "science" + }, + { + "id": "science-619", + "domain": "science" + }, + { + "id": "science-626", + "domain": "science" + }, + { + "id": "science-782", + "domain": "science" + }, + { + "id": "science-807", + "domain": "science" + }, + { + "id": "science-1126", + "domain": "science" + }, + { + "id": "science-213", + "domain": "science" + }, + { + "id": "science-266", + "domain": "science" + }, + { + "id": "science-994", + "domain": "science" + }, + { + "id": "science-141", + "domain": "science" + }, + { + "id": "science-810", + "domain": "science" + }, + { + "id": "science-871", + "domain": "science" + }, + { + "id": "science-66", + "domain": "science" + }, + { + "id": "science-1115", + "domain": "science" + }, + { + "id": "science-951", + "domain": "science" + }, + { + "id": "science-1166", + "domain": "science" + }, + { + "id": "science-613", + "domain": "science" + }, + { + "id": "science-788", + "domain": "science" + }, + { + "id": "science-45", + "domain": "science" + }, + { + "id": "science-907", + "domain": "science" + }, + { + "id": "science-851", + "domain": "science" + }, + { + "id": "science-805", + "domain": "science" + }, + { + "id": "science-209", + "domain": "science" + }, + { + "id": "science-412", + "domain": "science" + }, + { + "id": "science-386", + "domain": "science" + }, + { + "id": "science-362", + "domain": "science" + }, + { + "id": "science-874", + "domain": "science" + }, + { + "id": "science-32", + "domain": "science" + }, + { + "id": "science-473", + "domain": "science" + }, + { + "id": "science-340", + "domain": "science" + }, + { + "id": "science-178", + "domain": "science" + }, + { + "id": "science-584", + "domain": "science" + }, + { + "id": "science-1165", + "domain": "science" + }, + { + "id": "science-432", + "domain": "science" + }, + { + "id": "science-610", + "domain": "science" + }, + { + "id": "science-790", + "domain": "science" + }, + { + "id": "science-854", + "domain": "science" + }, + { + "id": "science-919", + "domain": "science" + }, + { + "id": "science-234", + "domain": "science" + }, + { + "id": "science-643", + "domain": "science" + }, + { + "id": "science-562", + "domain": "science" + }, + { + "id": "science-867", + "domain": "science" + }, + { + "id": "science-826", + "domain": "science" + }, + { + "id": "science-862", + "domain": "science" + }, + { + "id": "science-993", + "domain": "science" + }, + { + "id": "science-401", + "domain": "science" + }, + { + "id": "science-189", + "domain": "science" + }, + { + "id": "science-884", + "domain": "science" + }, + { + "id": "science-600", + "domain": "science" + }, + { + "id": "science-750", + "domain": "science" + }, + { + "id": "science-747", + "domain": "science" + }, + { + "id": "science-502", + "domain": "science" + }, + { + "id": "banking-1773", + "domain": "banking20" + }, + { + "id": "banking-1768", + "domain": "banking20" + }, + { + "id": "banking-1782", + "domain": "banking20" + }, + { + "id": "banking-1771", + "domain": "banking20" + }, + { + "id": "banking-1780", + "domain": "banking20" + }, + { + "id": "banking-1794", + "domain": "banking20" + }, + { + "id": "banking-1053", + "domain": "banking20" + }, + { + "id": "banking-1048", + "domain": "banking20" + }, + { + "id": "banking-1062", + "domain": "banking20" + }, + { + "id": "banking-1051", + "domain": "banking20" + }, + { + "id": "banking-1060", + "domain": "banking20" + }, + { + "id": "banking-1074", + "domain": "banking20" + }, + { + "id": "banking-13", + "domain": "banking20" + }, + { + "id": "banking-8", + "domain": "banking20" + }, + { + "id": "banking-22", + "domain": "banking20" + }, + { + "id": "banking-11", + "domain": "banking20" + }, + { + "id": "banking-20", + "domain": "banking20" + }, + { + "id": "banking-34", + "domain": "banking20" + }, + { + "id": "banking-1093", + "domain": "banking20" + }, + { + "id": "banking-1088", + "domain": "banking20" + }, + { + "id": "banking-1102", + "domain": "banking20" + }, + { + "id": "banking-1091", + "domain": "banking20" + }, + { + "id": "banking-1100", + "domain": "banking20" + }, + { + "id": "banking-1114", + "domain": "banking20" + }, + { + "id": "banking-2133", + "domain": "banking20" + }, + { + "id": "banking-2128", + "domain": "banking20" + }, + { + "id": "banking-2142", + "domain": "banking20" + }, + { + "id": "banking-2131", + "domain": "banking20" + }, + { + "id": "banking-2140", + "domain": "banking20" + }, + { + "id": "banking-2154", + "domain": "banking20" + }, + { + "id": "banking-1413", + "domain": "banking20" + }, + { + "id": "banking-1408", + "domain": "banking20" + }, + { + "id": "banking-1422", + "domain": "banking20" + }, + { + "id": "banking-1411", + "domain": "banking20" + }, + { + "id": "banking-1420", + "domain": "banking20" + }, + { + "id": "banking-1434", + "domain": "banking20" + }, + { + "id": "banking-1813", + "domain": "banking20" + }, + { + "id": "banking-1808", + "domain": "banking20" + }, + { + "id": "banking-1822", + "domain": "banking20" + }, + { + "id": "banking-1811", + "domain": "banking20" + }, + { + "id": "banking-1820", + "domain": "banking20" + }, + { + "id": "banking-1834", + "domain": "banking20" + }, + { + "id": "banking-1573", + "domain": "banking20" + }, + { + "id": "banking-1568", + "domain": "banking20" + }, + { + "id": "banking-1582", + "domain": "banking20" + }, + { + "id": "banking-1571", + "domain": "banking20" + }, + { + "id": "banking-1580", + "domain": "banking20" + }, + { + "id": "banking-1594", + "domain": "banking20" + }, + { + "id": "banking-1133", + "domain": "banking20" + }, + { + "id": "banking-1128", + "domain": "banking20" + }, + { + "id": "banking-1142", + "domain": "banking20" + }, + { + "id": "banking-1131", + "domain": "banking20" + }, + { + "id": "banking-1140", + "domain": "banking20" + }, + { + "id": "banking-1154", + "domain": "banking20" + }, + { + "id": "banking-2773", + "domain": "banking20" + }, + { + "id": "banking-2768", + "domain": "banking20" + }, + { + "id": "banking-2782", + "domain": "banking20" + }, + { + "id": "banking-2771", + "domain": "banking20" + }, + { + "id": "banking-2780", + "domain": "banking20" + }, + { + "id": "banking-2794", + "domain": "banking20" + }, + { + "id": "banking-2293", + "domain": "banking20" + }, + { + "id": "banking-2288", + "domain": "banking20" + }, + { + "id": "banking-2302", + "domain": "banking20" + }, + { + "id": "banking-2291", + "domain": "banking20" + }, + { + "id": "banking-2300", + "domain": "banking20" + }, + { + "id": "banking-2314", + "domain": "banking20" + }, + { + "id": "banking-933", + "domain": "banking20" + }, + { + "id": "banking-928", + "domain": "banking20" + }, + { + "id": "banking-942", + "domain": "banking20" + }, + { + "id": "banking-931", + "domain": "banking20" + }, + { + "id": "banking-940", + "domain": "banking20" + }, + { + "id": "banking-954", + "domain": "banking20" + }, + { + "id": "banking-1653", + "domain": "banking20" + }, + { + "id": "banking-1648", + "domain": "banking20" + }, + { + "id": "banking-1662", + "domain": "banking20" + }, + { + "id": "banking-1651", + "domain": "banking20" + }, + { + "id": "banking-1660", + "domain": "banking20" + }, + { + "id": "banking-1674", + "domain": "banking20" + }, + { + "id": "banking-1533", + "domain": "banking20" + }, + { + "id": "banking-1528", + "domain": "banking20" + }, + { + "id": "banking-1542", + "domain": "banking20" + }, + { + "id": "banking-1531", + "domain": "banking20" + }, + { + "id": "banking-1540", + "domain": "banking20" + }, + { + "id": "banking-1554", + "domain": "banking20" + }, + { + "id": "banking-2093", + "domain": "banking20" + }, + { + "id": "banking-2088", + "domain": "banking20" + }, + { + "id": "banking-2102", + "domain": "banking20" + }, + { + "id": "banking-2091", + "domain": "banking20" + }, + { + "id": "banking-2100", + "domain": "banking20" + }, + { + "id": "banking-2114", + "domain": "banking20" + }, + { + "id": "banking-893", + "domain": "banking20" + }, + { + "id": "banking-888", + "domain": "banking20" + }, + { + "id": "banking-902", + "domain": "banking20" + }, + { + "id": "banking-891", + "domain": "banking20" + }, + { + "id": "banking-900", + "domain": "banking20" + }, + { + "id": "banking-914", + "domain": "banking20" + }, + { + "id": "banking-1893", + "domain": "banking20" + }, + { + "id": "banking-1888", + "domain": "banking20" + }, + { + "id": "banking-1902", + "domain": "banking20" + }, + { + "id": "banking-1891", + "domain": "banking20" + }, + { + "id": "banking-1900", + "domain": "banking20" + }, + { + "id": "banking-1914", + "domain": "banking20" + }, + { + "id": "banking-2453", + "domain": "banking20" + }, + { + "id": "banking-2448", + "domain": "banking20" + }, + { + "id": "banking-2462", + "domain": "banking20" + }, + { + "id": "banking-2451", + "domain": "banking20" + }, + { + "id": "banking-2460", + "domain": "banking20" + }, + { + "id": "banking-2474", + "domain": "banking20" + }, + { + "id": "banking-1013", + "domain": "banking20" + }, + { + "id": "banking-1008", + "domain": "banking20" + }, + { + "id": "banking-1022", + "domain": "banking20" + }, + { + "id": "banking-1011", + "domain": "banking20" + }, + { + "id": "banking-1020", + "domain": "banking20" + }, + { + "id": "banking-1034", + "domain": "banking20" + }, + { + "id": "banking-1213", + "domain": "banking20" + }, + { + "id": "banking-1208", + "domain": "banking20" + }, + { + "id": "banking-1222", + "domain": "banking20" + }, + { + "id": "banking-1211", + "domain": "banking20" + }, + { + "id": "banking-1220", + "domain": "banking20" + }, + { + "id": "banking-1234", + "domain": "banking20" + } + ], + "numeric": [ + { + "id": "numeric-fresh-round-currency-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-002", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-003", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-015", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-identifier-distraction-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-compare-mass-008", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-overnight-time-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-whole-packages-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-percentage-change-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-013", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-012", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-010", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-018", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-011", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-001", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-irrelevant-inventory-016", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-014", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-019", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-004", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-distance-009", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-parallel-rates-006", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-round-currency-000", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-temperature-change-017", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-missing-price-005", + "domain": "numeric-fresh" + }, + { + "id": "numeric-fresh-mixed-money-007", + "domain": "numeric-fresh" + }, + { + "id": "numeric-unseen-successive-discounts-009", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-011", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-005", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-000", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-010", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-003", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-011", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-011", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-000", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-007", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-012", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-001", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-006", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-006", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-000", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-008", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-012", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-011", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-012", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-012", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-003", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-005", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-014", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-008", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-009", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-004", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-001", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-004", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-004", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-002", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-007", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-013", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-005", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-002", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-015", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-002", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-003", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-000", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-001", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-014", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-013", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-009", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-015", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-007", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-010", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-015", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-003", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-007", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-009", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-006", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-010", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-002", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-010", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-001", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-013", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-tiered-charge-014", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-008", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-missing-average-008", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-013", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-014", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-015", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-006", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-production-yield-005", + "domain": "numeric-unseen" + }, + { + "id": "numeric-unseen-successive-discounts-004", + "domain": "numeric-unseen" + }, + { + "id": "numeric-authored-00", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-01", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-02", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-03", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-04", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-05", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-06", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-07", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-08", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-09", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-10", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-11", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-12", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-13", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-14", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-15", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-16", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-17", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-18", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-19", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-20", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-21", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-22", + "domain": "numeric-challenge" + }, + { + "id": "numeric-authored-23", + "domain": "numeric-challenge" + } + ] + }, + "commands_in_research_workspace": [ + "python -B -m analysis.run_guarded_runtime --stage final --gpu 0", + "python -B -m analysis.verify_runtime_core" + ], + "raw_public_data_redistributed": false +} diff --git a/benchmarks/LICENSE b/benchmarks/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/benchmarks/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/benchmarks/NOTICE b/benchmarks/NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..e60d793989bb537dce863bc3a0b1751341009064 --- /dev/null +++ b/benchmarks/NOTICE @@ -0,0 +1,3 @@ +Authored arithmetic regression fixtures from this project, distributed under Apache-2.0. +Generated by analysis/prepare_numeric_stress.py and analysis/add_numeric_challenge.py; labels audited with exact arithmetic. +No public dataset text or model weights included. Reused evaluation cases, not independent new test evidence. diff --git a/benchmarks/numeric-regression.jsonl b/benchmarks/numeric-regression.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..2f74292fff8d4918ff638d930ce5f07e414f0b16 --- /dev/null +++ b/benchmarks/numeric-regression.jsonl @@ -0,0 +1,328 @@ +{"id": "numeric-fresh-round-currency-019", "request": {"state": "The subtotal is $43.17 and tax is 26%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "272/5 USD"], ["X", "5439/100 USD"], ["Y", "2719/50 USD"], ["Z", "4317/100 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-019", "request": {"state": "At closing, count the parts left after shipping 44 singles from 45 full cartons containing 26 each. The stockroom code is 173.", "question": "How many parts remain?", "options": [["W", "1126"], ["X", "1214"], ["Y", "27"], ["Z", "1170"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-distance-012", "request": {"state": "A route contains 39 kilometers followed by 420 meters. The vehicle carries 17 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "1971/50 km"], ["X", "81/1000 km"], ["Y", "81 km"], ["Z", "459 km"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-distance-004", "request": {"state": "A route contains 30 kilometers followed by 230 meters. The vehicle carries 5 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "53/1000 km"], ["X", "53 km"], ["Y", "3023/100 km"], ["Z", "260 km"]]}, "expected": "Y"} +{"id": "numeric-fresh-temperature-change-001", "request": {"state": "Temperature starts at minus 39 degrees, rises by 19 degrees, and then falls by 7 degrees. The weather-station code is 657.", "question": "After both changes, what does the thermometer read?", "options": [["W", "51"], ["X", "-65"], ["Y", "-13"], ["Z", "-27"]]}, "expected": "Z"} +{"id": "numeric-fresh-compare-mass-012", "request": {"state": "A parcel weighs 24000 grams. The comparison mass is 24 kilograms. Its reference number is 618.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Unknown"], ["X", "Below"], ["Y", "Above"], ["Z", "Equal"]]}, "expected": "Z"} +{"id": "numeric-fresh-percentage-change-016", "request": {"state": "The old count was 1100; the new count is 1276. A separate department has 920 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "11 %"], ["X", "176 %"], ["Y", "16 %"], ["Z", "116 %"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-006", "request": {"state": "The old count was 2500; the new count is 2575. A separate department has 382 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "103 %"], ["X", "75 %"], ["Y", "25 %"], ["Z", "3 %"]]}, "expected": "Z"} +{"id": "numeric-fresh-round-currency-016", "request": {"state": "The subtotal is $28.04 and tax is 47%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "701/25 USD"], ["X", "4121/100 USD"], ["Y", "4123/100 USD"], ["Z", "2061/50 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-005", "request": {"state": "A route contains 47 kilometers followed by 30 meters. The vehicle carries 25 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "77 km"], ["X", "50 km"], ["Y", "1/20 km"], ["Z", "4703/100 km"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-011", "request": {"state": "A wallet contains 46 dollars. A purchase costs 15 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "4585 USD"], ["X", "917/20 USD"], ["Y", "31 USD"], ["Z", "923/20 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-007", "request": {"state": "At closing, count the parts left after shipping 7 singles from 5 full cartons containing 21 each. The stockroom code is 919.", "question": "How many parts remain?", "options": [["W", "19"], ["X", "105"], ["Y", "98"], ["Z", "112"]]}, "expected": "Y"} +{"id": "numeric-fresh-identifier-distraction-017", "request": {"state": "Batch 127 uses 15 bottles of 44 milliliters each. The contents are shared equally among 6 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "666"], ["X", "110"], ["Y", "127/6"], ["Z", "59/6"]]}, "expected": "X"} +{"id": "numeric-fresh-round-currency-011", "request": {"state": "The subtotal is $20.04 and tax is 19%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "477/20 USD"], ["X", "501/25 USD"], ["Y", "596/25 USD"], ["Z", "1193/50 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-missing-price-004", "request": {"state": "A shipment contains 3 identical units. A different product costs $15 per unit. Shipping this shipment costs $13. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "45"], ["X", "3"], ["Y", "15"], ["Z", "Cannot determine"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-013", "request": {"state": "A route contains 25 kilometers followed by 320 meters. The vehicle carries 44 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "57/1000 km"], ["X", "57 km"], ["Y", "633/25 km"], ["Z", "345 km"]]}, "expected": "Y"} +{"id": "numeric-fresh-parallel-rates-002", "request": {"state": "Pump A fills a reservoir in 8 hours alone and pump B fills it in 7 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 160.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "1 hours"], ["X", "15 hours"], ["Y", "56/15 hours"], ["Z", "15/2 hours"]]}, "expected": "Y"} +{"id": "numeric-fresh-parallel-rates-000", "request": {"state": "Pump A fills a reservoir in 4 hours alone and pump B fills it in 40 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 119.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "44 hours"], ["X", "22 hours"], ["Y", "36 hours"], ["Z", "40/11 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-percentage-change-012", "request": {"state": "The old count was 3200; the new count is 3616. A separate department has 649 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "416 %"], ["X", "13 %"], ["Y", "32 %"], ["Z", "113 %"]]}, "expected": "X"} +{"id": "numeric-fresh-missing-price-006", "request": {"state": "A shipment contains 14 identical units. A different product costs $47 per unit. Shipping this shipment costs $44. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "658"], ["X", "Cannot determine"], ["Y", "14"], ["Z", "47"]]}, "expected": "X"} +{"id": "numeric-fresh-identifier-distraction-011", "request": {"state": "Batch 417 uses 27 bottles of 44 milliliters each. The contents are shared equally among 9 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "1197"], ["X", "71/9"], ["Y", "132"], ["Z", "139/3"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-015", "request": {"state": "The old count was 2100; the new count is 2940. A separate department has 162 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "40 %"], ["X", "840 %"], ["Y", "21 %"], ["Z", "140 %"]]}, "expected": "W"} +{"id": "numeric-fresh-irrelevant-inventory-004", "request": {"state": "At closing, count the parts left after shipping 32 singles from 7 full cartons containing 35 each. The stockroom code is 166.", "question": "How many parts remain?", "options": [["W", "10"], ["X", "245"], ["Y", "213"], ["Z", "277"]]}, "expected": "Y"} +{"id": "numeric-fresh-temperature-change-007", "request": {"state": "Temperature starts at minus 8 degrees, rises by 25 degrees, and then falls by 36 degrees. The weather-station code is 380.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-69"], ["X", "53"], ["Y", "-19"], ["Z", "-3"]]}, "expected": "Y"} +{"id": "numeric-fresh-parallel-rates-008", "request": {"state": "Pump A fills a reservoir in 23 hours alone and pump B fills it in 9 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 844.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "16 hours"], ["X", "14 hours"], ["Y", "207/32 hours"], ["Z", "32 hours"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-001", "request": {"state": "The old count was 4100; the new count is 4879. A separate department has 903 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "119 %"], ["X", "19 %"], ["Y", "41 %"], ["Z", "779 %"]]}, "expected": "X"} +{"id": "numeric-fresh-identifier-distraction-007", "request": {"state": "Batch 927 uses 36 bottles of 5 milliliters each. The contents are shared equally among 28 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "41/28"], ["X", "208"], ["Y", "927/28"], ["Z", "45/7"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-005", "request": {"state": "We need 554 labels. Each sealed package contains 16 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "554"], ["X", "34"], ["Y", "35"], ["Z", "16"]]}, "expected": "Y"} +{"id": "numeric-fresh-compare-mass-010", "request": {"state": "A parcel weighs 33070 grams. The comparison mass is 33 kilograms. Its reference number is 575.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Unknown"], ["X", "Below"], ["Y", "Above"], ["Z", "Equal"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-002", "request": {"state": "The old count was 4100; the new count is 5289. A separate department has 637 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "129 %"], ["X", "41 %"], ["Y", "29 %"], ["Z", "1189 %"]]}, "expected": "Y"} +{"id": "numeric-fresh-whole-packages-006", "request": {"state": "We need 830 labels. Each sealed package contains 19 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "43"], ["X", "19"], ["Y", "44"], ["Z", "830"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-016", "request": {"state": "A shipment contains 8 identical units. A different product costs $45 per unit. Shipping this shipment costs $30. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "360"], ["X", "45"], ["Y", "8"], ["Z", "Cannot determine"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-002", "request": {"state": "A route contains 25 kilometers followed by 270 meters. The vehicle carries 33 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "2527/100 km"], ["X", "13/250 km"], ["Y", "52 km"], ["Z", "295 km"]]}, "expected": "W"} +{"id": "numeric-fresh-percentage-change-014", "request": {"state": "The old count was 3800; the new count is 4142. A separate department has 523 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "9 %"], ["X", "38 %"], ["Y", "109 %"], ["Z", "342 %"]]}, "expected": "W"} +{"id": "numeric-fresh-temperature-change-009", "request": {"state": "Temperature starts at minus 45 degrees, rises by 17 degrees, and then falls by 4 degrees. The weather-station code is 666.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-24"], ["X", "58"], ["Y", "-32"], ["Z", "-66"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-distance-010", "request": {"state": "A route contains 37 kilometers followed by 180 meters. The vehicle carries 3 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "1859/50 km"], ["X", "217 km"], ["Y", "11/200 km"], ["Z", "55 km"]]}, "expected": "W"} +{"id": "numeric-fresh-overnight-time-002", "request": {"state": "A job starts at 22:19 and ends at 05:40 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "501 minutes"], ["X", "441 minutes"], ["Y", "381 minutes"], ["Z", "-999 minutes"]]}, "expected": "X"} +{"id": "numeric-fresh-compare-mass-009", "request": {"state": "A parcel weighs 39000 grams. The comparison mass is 39 kilograms. Its reference number is 334.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Equal"], ["X", "Unknown"], ["Y", "Above"], ["Z", "Below"]]}, "expected": "W"} +{"id": "numeric-fresh-irrelevant-inventory-013", "request": {"state": "At closing, count the parts left after shipping 25 singles from 41 full cartons containing 15 each. The stockroom code is 103.", "question": "How many parts remain?", "options": [["W", "31"], ["X", "615"], ["Y", "590"], ["Z", "640"]]}, "expected": "Y"} +{"id": "numeric-fresh-whole-packages-002", "request": {"state": "We need 485 labels. Each sealed package contains 20 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "25"], ["X", "485"], ["Y", "24"], ["Z", "20"]]}, "expected": "W"} +{"id": "numeric-fresh-identifier-distraction-009", "request": {"state": "Batch 582 uses 24 bottles of 11 milliliters each. The contents are shared equally among 5 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "582/5"], ["X", "269"], ["Y", "264/5"], ["Z", "7"]]}, "expected": "Y"} +{"id": "numeric-fresh-identifier-distraction-012", "request": {"state": "Batch 797 uses 5 bottles of 28 milliliters each. The contents are shared equally among 24 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "797/24"], ["X", "11/8"], ["Y", "164"], ["Z", "35/6"]]}, "expected": "Z"} +{"id": "numeric-fresh-parallel-rates-013", "request": {"state": "Pump A fills a reservoir in 37 hours alone and pump B fills it in 23 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 542.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "30 hours"], ["X", "60 hours"], ["Y", "14 hours"], ["Z", "851/60 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-017", "request": {"state": "We need 307 labels. Each sealed package contains 10 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "31"], ["X", "10"], ["Y", "30"], ["Z", "307"]]}, "expected": "W"} +{"id": "numeric-fresh-compare-mass-003", "request": {"state": "A parcel weighs 28950 grams. The comparison mass is 29 kilograms. Its reference number is 605.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Above"], ["X", "Unknown"], ["Y", "Below"], ["Z", "Equal"]]}, "expected": "Y"} +{"id": "numeric-fresh-irrelevant-inventory-017", "request": {"state": "At closing, count the parts left after shipping 47 singles from 37 full cartons containing 23 each. The stockroom code is 569.", "question": "How many parts remain?", "options": [["W", "898"], ["X", "13"], ["Y", "804"], ["Z", "851"]]}, "expected": "Y"} +{"id": "numeric-fresh-irrelevant-inventory-006", "request": {"state": "At closing, count the parts left after shipping 4 singles from 27 full cartons containing 15 each. The stockroom code is 523.", "question": "How many parts remain?", "options": [["W", "405"], ["X", "401"], ["Y", "409"], ["Z", "38"]]}, "expected": "X"} +{"id": "numeric-fresh-whole-packages-010", "request": {"state": "We need 361 labels. Each sealed package contains 23 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "15"], ["X", "23"], ["Y", "16"], ["Z", "361"]]}, "expected": "Y"} +{"id": "numeric-fresh-temperature-change-005", "request": {"state": "Temperature starts at minus 45 degrees, rises by 9 degrees, and then falls by 36 degrees. The weather-station code is 808.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-90"], ["X", "0"], ["Y", "-72"], ["Z", "18"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-017", "request": {"state": "A shipment contains 9 identical units. A different product costs $30 per unit. Shipping this shipment costs $41. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "9"], ["X", "Cannot determine"], ["Y", "30"], ["Z", "270"]]}, "expected": "X"} +{"id": "numeric-fresh-missing-price-013", "request": {"state": "A shipment contains 5 identical units. A different product costs $23 per unit. Shipping this shipment costs $17. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "23"], ["X", "Cannot determine"], ["Y", "5"], ["Z", "115"]]}, "expected": "X"} +{"id": "numeric-fresh-identifier-distraction-005", "request": {"state": "Batch 838 uses 43 bottles of 8 milliliters each. The contents are shared equally among 26 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "51/26"], ["X", "370"], ["Y", "419/13"], ["Z", "172/13"]]}, "expected": "Z"} +{"id": "numeric-fresh-irrelevant-inventory-003", "request": {"state": "At closing, count the parts left after shipping 32 singles from 30 full cartons containing 10 each. The stockroom code is 650.", "question": "How many parts remain?", "options": [["W", "332"], ["X", "268"], ["Y", "8"], ["Z", "300"]]}, "expected": "X"} +{"id": "numeric-fresh-missing-price-019", "request": {"state": "A shipment contains 21 identical units. A different product costs $45 per unit. Shipping this shipment costs $12. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "Cannot determine"], ["X", "21"], ["Y", "945"], ["Z", "45"]]}, "expected": "W"} +{"id": "numeric-fresh-parallel-rates-017", "request": {"state": "Pump A fills a reservoir in 32 hours alone and pump B fills it in 42 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 873.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "74 hours"], ["X", "37 hours"], ["Y", "10 hours"], ["Z", "672/37 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-018", "request": {"state": "We need 611 labels. Each sealed package contains 17 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "35"], ["X", "17"], ["Y", "36"], ["Z", "611"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-011", "request": {"state": "A shipment contains 35 identical units. A different product costs $16 per unit. Shipping this shipment costs $12. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "35"], ["X", "560"], ["Y", "Cannot determine"], ["Z", "16"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-009", "request": {"state": "A shipment contains 43 identical units. A different product costs $26 per unit. Shipping this shipment costs $38. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "26"], ["X", "Cannot determine"], ["Y", "43"], ["Z", "1118"]]}, "expected": "X"} +{"id": "numeric-fresh-identifier-distraction-013", "request": {"state": "Batch 915 uses 37 bottles of 30 milliliters each. The contents are shared equally among 28 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "915/28"], ["X", "1138"], ["Y", "67/28"], ["Z", "555/14"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-017", "request": {"state": "A wallet contains 12 dollars. A purchase costs 30 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "123/10 USD"], ["X", "117/10 USD"], ["Y", "-18 USD"], ["Z", "1170 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-mixed-money-010", "request": {"state": "A wallet contains 33 dollars. A purchase costs 16 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "829/25 USD"], ["X", "3284 USD"], ["Y", "17 USD"], ["Z", "821/25 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-015", "request": {"state": "A wallet contains 10 dollars. A purchase costs 44 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "239/25 USD"], ["X", "956 USD"], ["Y", "261/25 USD"], ["Z", "-34 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-identifier-distraction-003", "request": {"state": "Batch 441 uses 15 bottles of 18 milliliters each. The contents are shared equally among 43 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "313"], ["X", "270/43"], ["Y", "33/43"], ["Z", "441/43"]]}, "expected": "X"} +{"id": "numeric-fresh-identifier-distraction-010", "request": {"state": "Batch 318 uses 10 bottles of 27 milliliters each. The contents are shared equally among 17 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "318/17"], ["X", "270/17"], ["Y", "287"], ["Z", "37/17"]]}, "expected": "X"} +{"id": "numeric-fresh-compare-mass-018", "request": {"state": "A parcel weighs 21320 grams. The comparison mass is 21 kilograms. Its reference number is 672.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Above"], ["X", "Equal"], ["Y", "Unknown"], ["Z", "Below"]]}, "expected": "W"} +{"id": "numeric-fresh-overnight-time-011", "request": {"state": "A job starts at 22:45 and ends at 01:39 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "-1266 minutes"], ["X", "114 minutes"], ["Y", "234 minutes"], ["Z", "174 minutes"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-016", "request": {"state": "A wallet contains 42 dollars. A purchase costs 33 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "4233/100 USD"], ["X", "4167 USD"], ["Y", "4167/100 USD"], ["Z", "9 USD"]]}, "expected": "Y"} +{"id": "numeric-fresh-parallel-rates-003", "request": {"state": "Pump A fills a reservoir in 29 hours alone and pump B fills it in 39 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 388.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "68 hours"], ["X", "1131/68 hours"], ["Y", "10 hours"], ["Z", "34 hours"]]}, "expected": "X"} +{"id": "numeric-fresh-overnight-time-018", "request": {"state": "A job starts at 23:38 and ends at 03:14 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "216 minutes"], ["X", "156 minutes"], ["Y", "-1224 minutes"], ["Z", "276 minutes"]]}, "expected": "W"} +{"id": "numeric-fresh-identifier-distraction-014", "request": {"state": "Batch 762 uses 22 bottles of 11 milliliters each. The contents are shared equally among 38 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "381/19"], ["X", "280"], ["Y", "33/38"], ["Z", "121/19"]]}, "expected": "Z"} +{"id": "numeric-fresh-overnight-time-012", "request": {"state": "A job starts at 22:27 and ends at 03:20 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "-1147 minutes"], ["X", "233 minutes"], ["Y", "353 minutes"], ["Z", "293 minutes"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-009", "request": {"state": "A wallet contains 40 dollars. A purchase costs 15 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "803/20 USD"], ["X", "3985 USD"], ["Y", "25 USD"], ["Z", "797/20 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-percentage-change-017", "request": {"state": "The old count was 4200; the new count is 4578. A separate department has 356 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "378 %"], ["X", "42 %"], ["Y", "9 %"], ["Z", "109 %"]]}, "expected": "Y"} +{"id": "numeric-fresh-temperature-change-015", "request": {"state": "Temperature starts at minus 33 degrees, rises by 41 degrees, and then falls by 32 degrees. The weather-station code is 555.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-106"], ["X", "40"], ["Y", "-24"], ["Z", "42"]]}, "expected": "Y"} +{"id": "numeric-fresh-compare-mass-001", "request": {"state": "A parcel weighs 20340 grams. The comparison mass is 20 kilograms. Its reference number is 992.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Unknown"], ["X", "Equal"], ["Y", "Below"], ["Z", "Above"]]}, "expected": "Z"} +{"id": "numeric-fresh-overnight-time-000", "request": {"state": "A job starts at 22:17 and ends at 01:54 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "217 minutes"], ["X", "277 minutes"], ["Y", "-1223 minutes"], ["Z", "157 minutes"]]}, "expected": "W"} +{"id": "numeric-fresh-whole-packages-014", "request": {"state": "We need 122 labels. Each sealed package contains 13 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "13"], ["X", "122"], ["Y", "9"], ["Z", "10"]]}, "expected": "Z"} +{"id": "numeric-fresh-compare-mass-004", "request": {"state": "A parcel weighs 3400 grams. The comparison mass is 3 kilograms. Its reference number is 958.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Above"], ["X", "Below"], ["Y", "Equal"], ["Z", "Unknown"]]}, "expected": "W"} +{"id": "numeric-fresh-irrelevant-inventory-002", "request": {"state": "At closing, count the parts left after shipping 28 singles from 44 full cartons containing 33 each. The stockroom code is 333.", "question": "How many parts remain?", "options": [["W", "1452"], ["X", "49"], ["Y", "1424"], ["Z", "1480"]]}, "expected": "Y"} +{"id": "numeric-fresh-parallel-rates-011", "request": {"state": "Pump A fills a reservoir in 36 hours alone and pump B fills it in 33 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 592.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "3 hours"], ["X", "69/2 hours"], ["Y", "69 hours"], ["Z", "396/23 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-missing-price-002", "request": {"state": "A shipment contains 33 identical units. A different product costs $34 per unit. Shipping this shipment costs $36. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "33"], ["X", "34"], ["Y", "Cannot determine"], ["Z", "1122"]]}, "expected": "Y"} +{"id": "numeric-fresh-irrelevant-inventory-001", "request": {"state": "At closing, count the parts left after shipping 33 singles from 10 full cartons containing 4 each. The stockroom code is 864.", "question": "How many parts remain?", "options": [["W", "73"], ["X", "40"], ["Y", "-19"], ["Z", "7"]]}, "expected": "Z"} +{"id": "numeric-fresh-parallel-rates-004", "request": {"state": "Pump A fills a reservoir in 24 hours alone and pump B fills it in 7 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 725.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "17 hours"], ["X", "31/2 hours"], ["Y", "31 hours"], ["Z", "168/31 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-round-currency-015", "request": {"state": "The subtotal is $10.22 and tax is 3%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "511/50 USD"], ["X", "263/25 USD"], ["Y", "527/50 USD"], ["Z", "1053/100 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-003", "request": {"state": "We need 882 labels. Each sealed package contains 32 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "28"], ["X", "882"], ["Y", "32"], ["Z", "27"]]}, "expected": "W"} +{"id": "numeric-fresh-identifier-distraction-008", "request": {"state": "Batch 480 uses 26 bottles of 31 milliliters each. The contents are shared equally among 18 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "824"], ["X", "80/3"], ["Y", "403/9"], ["Z", "19/6"]]}, "expected": "Y"} +{"id": "numeric-fresh-overnight-time-017", "request": {"state": "A job starts at 22:55 and ends at 02:32 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "277 minutes"], ["X", "157 minutes"], ["Y", "217 minutes"], ["Z", "-1223 minutes"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-money-006", "request": {"state": "A wallet contains 29 dollars. A purchase costs 8 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "727/25 USD"], ["X", "21 USD"], ["Y", "723/25 USD"], ["Z", "2892 USD"]]}, "expected": "Y"} +{"id": "numeric-fresh-identifier-distraction-019", "request": {"state": "Batch 636 uses 11 bottles of 7 milliliters each. The contents are shared equally among 10 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "318/5"], ["X", "87"], ["Y", "9/5"], ["Z", "77/10"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-003", "request": {"state": "A wallet contains 10 dollars. A purchase costs 12 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "-2 USD"], ["X", "247/25 USD"], ["Y", "988 USD"], ["Z", "253/25 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-overnight-time-014", "request": {"state": "A job starts at 22:16 and ends at 02:25 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "189 minutes"], ["X", "249 minutes"], ["Y", "-1191 minutes"], ["Z", "309 minutes"]]}, "expected": "X"} +{"id": "numeric-fresh-temperature-change-019", "request": {"state": "Temperature starts at minus 31 degrees, rises by 19 degrees, and then falls by 42 degrees. The weather-station code is 473.", "question": "After both changes, what does the thermometer read?", "options": [["W", "8"], ["X", "30"], ["Y", "-92"], ["Z", "-54"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-008", "request": {"state": "A route contains 23 kilometers followed by 320 meters. The vehicle carries 38 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "11/200 km"], ["X", "343 km"], ["Y", "583/25 km"], ["Z", "55 km"]]}, "expected": "Y"} +{"id": "numeric-fresh-whole-packages-009", "request": {"state": "We need 592 labels. Each sealed package contains 19 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "31"], ["X", "19"], ["Y", "32"], ["Z", "592"]]}, "expected": "Y"} +{"id": "numeric-fresh-overnight-time-005", "request": {"state": "A job starts at 23:58 and ends at 04:10 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "192 minutes"], ["X", "312 minutes"], ["Y", "-1188 minutes"], ["Z", "252 minutes"]]}, "expected": "Z"} +{"id": "numeric-fresh-missing-price-008", "request": {"state": "A shipment contains 16 identical units. A different product costs $10 per unit. Shipping this shipment costs $21. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "16"], ["X", "160"], ["Y", "Cannot determine"], ["Z", "10"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-015", "request": {"state": "A shipment contains 14 identical units. A different product costs $32 per unit. Shipping this shipment costs $26. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "14"], ["X", "32"], ["Y", "448"], ["Z", "Cannot determine"]]}, "expected": "Z"} +{"id": "numeric-fresh-irrelevant-inventory-010", "request": {"state": "At closing, count the parts left after shipping 21 singles from 42 full cartons containing 4 each. The stockroom code is 909.", "question": "How many parts remain?", "options": [["W", "189"], ["X", "147"], ["Y", "25"], ["Z", "168"]]}, "expected": "X"} +{"id": "numeric-fresh-identifier-distraction-018", "request": {"state": "Batch 284 uses 5 bottles of 36 milliliters each. The contents are shared equally among 29 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "209"], ["X", "180/29"], ["Y", "41/29"], ["Z", "284/29"]]}, "expected": "X"} +{"id": "numeric-fresh-overnight-time-008", "request": {"state": "A job starts at 20:56 and ends at 03:49 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "473 minutes"], ["X", "-1027 minutes"], ["Y", "353 minutes"], ["Z", "413 minutes"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-000", "request": {"state": "We need 432 labels. Each sealed package contains 20 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "432"], ["X", "22"], ["Y", "20"], ["Z", "21"]]}, "expected": "X"} +{"id": "numeric-fresh-compare-mass-006", "request": {"state": "A parcel weighs 21310 grams. The comparison mass is 21 kilograms. Its reference number is 803.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Unknown"], ["X", "Equal"], ["Y", "Above"], ["Z", "Below"]]}, "expected": "Y"} +{"id": "numeric-fresh-identifier-distraction-001", "request": {"state": "Batch 842 uses 42 bottles of 28 milliliters each. The contents are shared equally among 47 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "842/47"], ["X", "70/47"], ["Y", "1223"], ["Z", "1176/47"]]}, "expected": "Z"} +{"id": "numeric-fresh-overnight-time-019", "request": {"state": "A job starts at 21:19 and ends at 02:45 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "326 minutes"], ["X", "386 minutes"], ["Y", "266 minutes"], ["Z", "-1114 minutes"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-money-002", "request": {"state": "A wallet contains 25 dollars. A purchase costs 13 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "2487 USD"], ["X", "2513/100 USD"], ["Y", "12 USD"], ["Z", "2487/100 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-irrelevant-inventory-014", "request": {"state": "At closing, count the parts left after shipping 16 singles from 20 full cartons containing 10 each. The stockroom code is 102.", "question": "How many parts remain?", "options": [["W", "14"], ["X", "184"], ["Y", "216"], ["Z", "200"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-008", "request": {"state": "At closing, count the parts left after shipping 29 singles from 8 full cartons containing 18 each. The stockroom code is 854.", "question": "How many parts remain?", "options": [["W", "115"], ["X", "-3"], ["Y", "144"], ["Z", "173"]]}, "expected": "W"} +{"id": "numeric-fresh-parallel-rates-014", "request": {"state": "Pump A fills a reservoir in 41 hours alone and pump B fills it in 3 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 116.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "22 hours"], ["X", "44 hours"], ["Y", "38 hours"], ["Z", "123/44 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-identifier-distraction-015", "request": {"state": "Batch 183 uses 11 bottles of 44 milliliters each. The contents are shared equally among 14 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "55/14"], ["X", "242/7"], ["Y", "498"], ["Z", "183/14"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-012", "request": {"state": "At closing, count the parts left after shipping 5 singles from 46 full cartons containing 37 each. The stockroom code is 352.", "question": "How many parts remain?", "options": [["W", "1707"], ["X", "1702"], ["Y", "1697"], ["Z", "78"]]}, "expected": "Y"} +{"id": "numeric-fresh-round-currency-007", "request": {"state": "The subtotal is $40.34 and tax is 37%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "2017/50 USD"], ["X", "2763/50 USD"], ["Y", "5527/100 USD"], ["Z", "1382/25 USD"]]}, "expected": "Y"} +{"id": "numeric-fresh-overnight-time-003", "request": {"state": "A job starts at 21:10 and ends at 04:21 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "371 minutes"], ["X", "431 minutes"], ["Y", "-1009 minutes"], ["Z", "491 minutes"]]}, "expected": "X"} +{"id": "numeric-fresh-overnight-time-015", "request": {"state": "A job starts at 23:33 and ends at 05:40 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "367 minutes"], ["X", "427 minutes"], ["Y", "-1073 minutes"], ["Z", "307 minutes"]]}, "expected": "W"} +{"id": "numeric-fresh-overnight-time-009", "request": {"state": "A job starts at 23:24 and ends at 05:48 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "324 minutes"], ["X", "384 minutes"], ["Y", "444 minutes"], ["Z", "-1056 minutes"]]}, "expected": "X"} +{"id": "numeric-fresh-compare-mass-019", "request": {"state": "A parcel weighs 27340 grams. The comparison mass is 27 kilograms. Its reference number is 641.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Below"], ["X", "Equal"], ["Y", "Above"], ["Z", "Unknown"]]}, "expected": "Y"} +{"id": "numeric-fresh-overnight-time-013", "request": {"state": "A job starts at 20:44 and ends at 03:31 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "467 minutes"], ["X", "-1033 minutes"], ["Y", "407 minutes"], ["Z", "347 minutes"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-distance-003", "request": {"state": "A route contains 42 kilometers followed by 390 meters. The vehicle carries 8 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "81/1000 km"], ["X", "4239/100 km"], ["Y", "432 km"], ["Z", "81 km"]]}, "expected": "X"} +{"id": "numeric-fresh-missing-price-012", "request": {"state": "A shipment contains 26 identical units. A different product costs $28 per unit. Shipping this shipment costs $9. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "728"], ["X", "28"], ["Y", "26"], ["Z", "Cannot determine"]]}, "expected": "Z"} +{"id": "numeric-fresh-compare-mass-007", "request": {"state": "A parcel weighs 24770 grams. The comparison mass is 25 kilograms. Its reference number is 806.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Equal"], ["X", "Above"], ["Y", "Unknown"], ["Z", "Below"]]}, "expected": "Z"} +{"id": "numeric-fresh-round-currency-009", "request": {"state": "The subtotal is $46.21 and tax is 36%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "1571/25 USD"], ["X", "1257/20 USD"], ["Y", "3143/50 USD"], ["Z", "4621/100 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-temperature-change-014", "request": {"state": "Temperature starts at minus 5 degrees, rises by 9 degrees, and then falls by 7 degrees. The weather-station code is 281.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-3"], ["X", "11"], ["Y", "7"], ["Z", "-21"]]}, "expected": "W"} +{"id": "numeric-fresh-percentage-change-008", "request": {"state": "The old count was 1100; the new count is 1265. A separate department has 213 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "115 %"], ["X", "15 %"], ["Y", "165 %"], ["Z", "11 %"]]}, "expected": "X"} +{"id": "numeric-fresh-missing-price-001", "request": {"state": "A shipment contains 34 identical units. A different product costs $29 per unit. Shipping this shipment costs $16. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "Cannot determine"], ["X", "29"], ["Y", "34"], ["Z", "986"]]}, "expected": "W"} +{"id": "numeric-fresh-overnight-time-001", "request": {"state": "A job starts at 20:31 and ends at 05:39 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "-892 minutes"], ["X", "548 minutes"], ["Y", "608 minutes"], ["Z", "488 minutes"]]}, "expected": "X"} +{"id": "numeric-fresh-whole-packages-008", "request": {"state": "We need 248 labels. Each sealed package contains 9 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "248"], ["X", "27"], ["Y", "28"], ["Z", "9"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-018", "request": {"state": "The old count was 1500; the new count is 2190. A separate department has 119 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "46 %"], ["X", "690 %"], ["Y", "146 %"], ["Z", "15 %"]]}, "expected": "W"} +{"id": "numeric-fresh-percentage-change-013", "request": {"state": "The old count was 4300; the new count is 5117. A separate department has 553 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "19 %"], ["X", "43 %"], ["Y", "119 %"], ["Z", "817 %"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-money-019", "request": {"state": "A wallet contains 27 dollars. A purchase costs 13 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "14 USD"], ["X", "2687/100 USD"], ["Y", "2713/100 USD"], ["Z", "2687 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-parallel-rates-015", "request": {"state": "Pump A fills a reservoir in 31 hours alone and pump B fills it in 8 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 183.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "39 hours"], ["X", "23 hours"], ["Y", "248/39 hours"], ["Z", "39/2 hours"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-distance-017", "request": {"state": "A route contains 42 kilometers followed by 470 meters. The vehicle carries 21 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "512 km"], ["X", "89/1000 km"], ["Y", "4247/100 km"], ["Z", "89 km"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-money-008", "request": {"state": "A wallet contains 27 dollars. A purchase costs 8 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "2692 USD"], ["X", "677/25 USD"], ["Y", "673/25 USD"], ["Z", "19 USD"]]}, "expected": "Y"} +{"id": "numeric-fresh-whole-packages-013", "request": {"state": "We need 497 labels. Each sealed package contains 34 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "34"], ["X", "497"], ["Y", "14"], ["Z", "15"]]}, "expected": "Z"} +{"id": "numeric-fresh-irrelevant-inventory-000", "request": {"state": "At closing, count the parts left after shipping 16 singles from 24 full cartons containing 3 each. The stockroom code is 283.", "question": "How many parts remain?", "options": [["W", "72"], ["X", "11"], ["Y", "88"], ["Z", "56"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-007", "request": {"state": "A route contains 30 kilometers followed by 420 meters. The vehicle carries 43 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "450 km"], ["X", "9/125 km"], ["Y", "72 km"], ["Z", "1521/50 km"]]}, "expected": "Z"} +{"id": "numeric-fresh-temperature-change-000", "request": {"state": "Temperature starts at minus 11 degrees, rises by 12 degrees, and then falls by 18 degrees. The weather-station code is 629.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-17"], ["X", "19"], ["Y", "-41"], ["Z", "5"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-money-018", "request": {"state": "A wallet contains 13 dollars. A purchase costs 21 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "1279/100 USD"], ["X", "1279 USD"], ["Y", "1321/100 USD"], ["Z", "-8 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-compare-mass-014", "request": {"state": "A parcel weighs 33000 grams. The comparison mass is 33 kilograms. Its reference number is 835.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Unknown"], ["X", "Above"], ["Y", "Below"], ["Z", "Equal"]]}, "expected": "Z"} +{"id": "numeric-fresh-round-currency-001", "request": {"state": "The subtotal is $11.47 and tax is 21%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "1147/100 USD"], ["X", "347/25 USD"], ["Y", "1387/100 USD"], ["Z", "1389/100 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-mixed-money-000", "request": {"state": "A wallet contains 9 dollars. A purchase costs 5 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "4 USD"], ["X", "179/20 USD"], ["Y", "181/20 USD"], ["Z", "895 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-temperature-change-013", "request": {"state": "Temperature starts at minus 43 degrees, rises by 34 degrees, and then falls by 11 degrees. The weather-station code is 275.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-88"], ["X", "66"], ["Y", "-20"], ["Z", "2"]]}, "expected": "Y"} +{"id": "numeric-fresh-round-currency-017", "request": {"state": "The subtotal is $18.47 and tax is 16%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "1071/50 USD"], ["X", "536/25 USD"], ["Y", "1847/100 USD"], ["Z", "2143/100 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-round-currency-006", "request": {"state": "The subtotal is $33.06 and tax is 11%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "367/10 USD"], ["X", "3671/100 USD"], ["Y", "3669/100 USD"], ["Z", "1653/50 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-round-currency-002", "request": {"state": "The subtotal is $33.42 and tax is 11%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "1671/50 USD"], ["X", "3711/100 USD"], ["Y", "3709/100 USD"], ["Z", "371/10 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-019", "request": {"state": "A route contains 27 kilometers followed by 290 meters. The vehicle carries 37 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "2729/100 km"], ["X", "7/125 km"], ["Y", "56 km"], ["Z", "317 km"]]}, "expected": "W"} +{"id": "numeric-fresh-round-currency-010", "request": {"state": "The subtotal is $7.17 and tax is 20%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "859/100 USD"], ["X", "717/100 USD"], ["Y", "861/100 USD"], ["Z", "43/5 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-missing-price-003", "request": {"state": "A shipment contains 28 identical units. A different product costs $40 per unit. Shipping this shipment costs $21. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "1120"], ["X", "28"], ["Y", "Cannot determine"], ["Z", "40"]]}, "expected": "Y"} +{"id": "numeric-fresh-compare-mass-000", "request": {"state": "A parcel weighs 32440 grams. The comparison mass is 32 kilograms. Its reference number is 450.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Below"], ["X", "Above"], ["Y", "Unknown"], ["Z", "Equal"]]}, "expected": "X"} +{"id": "numeric-fresh-round-currency-003", "request": {"state": "The subtotal is $19.35 and tax is 15%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "387/20 USD"], ["X", "1113/50 USD"], ["Y", "89/4 USD"], ["Z", "556/25 USD"]]}, "expected": "Y"} +{"id": "numeric-fresh-temperature-change-018", "request": {"state": "Temperature starts at minus 34 degrees, rises by 5 degrees, and then falls by 17 degrees. The weather-station code is 746.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-12"], ["X", "-46"], ["Y", "22"], ["Z", "-56"]]}, "expected": "X"} +{"id": "numeric-fresh-compare-mass-017", "request": {"state": "A parcel weighs 47220 grams. The comparison mass is 47 kilograms. Its reference number is 283.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Equal"], ["X", "Below"], ["Y", "Unknown"], ["Z", "Above"]]}, "expected": "Z"} +{"id": "numeric-fresh-parallel-rates-012", "request": {"state": "Pump A fills a reservoir in 37 hours alone and pump B fills it in 43 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 754.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "6 hours"], ["X", "40 hours"], ["Y", "1591/80 hours"], ["Z", "80 hours"]]}, "expected": "Y"} +{"id": "numeric-fresh-compare-mass-011", "request": {"state": "A parcel weighs 19460 grams. The comparison mass is 19 kilograms. Its reference number is 671.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Above"], ["X", "Unknown"], ["Y", "Equal"], ["Z", "Below"]]}, "expected": "W"} +{"id": "numeric-fresh-percentage-change-019", "request": {"state": "The old count was 3500; the new count is 3955. A separate department has 210 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "13 %"], ["X", "35 %"], ["Y", "113 %"], ["Z", "455 %"]]}, "expected": "W"} +{"id": "numeric-fresh-compare-mass-002", "request": {"state": "A parcel weighs 9840 grams. The comparison mass is 10 kilograms. Its reference number is 479.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Below"], ["X", "Above"], ["Y", "Unknown"], ["Z", "Equal"]]}, "expected": "W"} +{"id": "numeric-fresh-identifier-distraction-000", "request": {"state": "Batch 415 uses 46 bottles of 27 milliliters each. The contents are shared equally among 21 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "73/21"], ["X", "415/21"], ["Y", "414/7"], ["Z", "1263"]]}, "expected": "Y"} +{"id": "numeric-fresh-temperature-change-003", "request": {"state": "Temperature starts at minus 4 degrees, rises by 31 degrees, and then falls by 41 degrees. The weather-station code is 293.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-6"], ["X", "-76"], ["Y", "68"], ["Z", "-14"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-000", "request": {"state": "A route contains 33 kilometers followed by 360 meters. The vehicle carries 11 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "69 km"], ["X", "69/1000 km"], ["Y", "834/25 km"], ["Z", "393 km"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-007", "request": {"state": "The old count was 3900; the new count is 4719. A separate department has 639 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "39 %"], ["X", "819 %"], ["Y", "21 %"], ["Z", "121 %"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-010", "request": {"state": "A shipment contains 12 identical units. A different product costs $18 per unit. Shipping this shipment costs $32. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "18"], ["X", "216"], ["Y", "12"], ["Z", "Cannot determine"]]}, "expected": "Z"} +{"id": "numeric-fresh-identifier-distraction-006", "request": {"state": "Batch 313 uses 11 bottles of 9 milliliters each. The contents are shared equally among 23 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "99/23"], ["X", "122"], ["Y", "20/23"], ["Z", "313/23"]]}, "expected": "W"} +{"id": "numeric-fresh-temperature-change-002", "request": {"state": "Temperature starts at minus 33 degrees, rises by 32 degrees, and then falls by 4 degrees. The weather-station code is 789.", "question": "After both changes, what does the thermometer read?", "options": [["W", "3"], ["X", "-5"], ["Y", "61"], ["Z", "-69"]]}, "expected": "X"} +{"id": "numeric-fresh-identifier-distraction-002", "request": {"state": "Batch 281 uses 37 bottles of 45 milliliters each. The contents are shared equally among 16 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "281/16"], ["X", "1681"], ["Y", "41/8"], ["Z", "1665/16"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-007", "request": {"state": "We need 919 labels. Each sealed package contains 45 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "20"], ["X", "919"], ["Y", "21"], ["Z", "45"]]}, "expected": "Y"} +{"id": "numeric-fresh-overnight-time-016", "request": {"state": "A job starts at 21:56 and ends at 02:32 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "-1164 minutes"], ["X", "336 minutes"], ["Y", "216 minutes"], ["Z", "276 minutes"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-012", "request": {"state": "We need 214 labels. Each sealed package contains 6 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "35"], ["X", "36"], ["Y", "6"], ["Z", "214"]]}, "expected": "X"} +{"id": "numeric-fresh-parallel-rates-001", "request": {"state": "Pump A fills a reservoir in 26 hours alone and pump B fills it in 32 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 860.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "6 hours"], ["X", "416/29 hours"], ["Y", "29 hours"], ["Z", "58 hours"]]}, "expected": "X"} +{"id": "numeric-fresh-percentage-change-003", "request": {"state": "The old count was 1000; the new count is 1320. A separate department has 584 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "320 %"], ["X", "32 %"], ["Y", "10 %"], ["Z", "132 %"]]}, "expected": "X"} +{"id": "numeric-fresh-overnight-time-007", "request": {"state": "A job starts at 21:13 and ends at 05:21 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "-952 minutes"], ["X", "428 minutes"], ["Y", "548 minutes"], ["Z", "488 minutes"]]}, "expected": "Z"} +{"id": "numeric-fresh-percentage-change-000", "request": {"state": "The old count was 3500; the new count is 4130. A separate department has 276 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "630 %"], ["X", "18 %"], ["Y", "35 %"], ["Z", "118 %"]]}, "expected": "X"} +{"id": "numeric-fresh-mixed-money-005", "request": {"state": "A wallet contains 6 dollars. A purchase costs 17 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "583 USD"], ["X", "583/100 USD"], ["Y", "-11 USD"], ["Z", "617/100 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-percentage-change-004", "request": {"state": "The old count was 3700; the new count is 3996. A separate department has 340 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "108 %"], ["X", "296 %"], ["Y", "8 %"], ["Z", "37 %"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-011", "request": {"state": "The old count was 500; the new count is 710. A separate department has 224 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "5 %"], ["X", "42 %"], ["Y", "210 %"], ["Z", "142 %"]]}, "expected": "X"} +{"id": "numeric-fresh-round-currency-013", "request": {"state": "The subtotal is $22.35 and tax is 32%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "447/20 USD"], ["X", "59/2 USD"], ["Y", "2951/100 USD"], ["Z", "2949/100 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-missing-price-000", "request": {"state": "A shipment contains 8 identical units. A different product costs $5 per unit. Shipping this shipment costs $25. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "5"], ["X", "8"], ["Y", "Cannot determine"], ["Z", "40"]]}, "expected": "Y"} +{"id": "numeric-fresh-overnight-time-006", "request": {"state": "A job starts at 20:43 and ends at 01:37 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "-1146 minutes"], ["X", "234 minutes"], ["Y", "294 minutes"], ["Z", "354 minutes"]]}, "expected": "Y"} +{"id": "numeric-fresh-percentage-change-009", "request": {"state": "The old count was 2400; the new count is 2568. A separate department has 970 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "168 %"], ["X", "24 %"], ["Y", "7 %"], ["Z", "107 %"]]}, "expected": "Y"} +{"id": "numeric-fresh-compare-mass-015", "request": {"state": "A parcel weighs 44590 grams. The comparison mass is 45 kilograms. Its reference number is 504.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Equal"], ["X", "Above"], ["Y", "Below"], ["Z", "Unknown"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-distance-015", "request": {"state": "A route contains 31 kilometers followed by 100 meters. The vehicle carries 44 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "311/10 km"], ["X", "41/1000 km"], ["Y", "131 km"], ["Z", "41 km"]]}, "expected": "W"} +{"id": "numeric-fresh-compare-mass-005", "request": {"state": "A parcel weighs 17000 grams. The comparison mass is 17 kilograms. Its reference number is 785.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Unknown"], ["X", "Below"], ["Y", "Equal"], ["Z", "Above"]]}, "expected": "Y"} +{"id": "numeric-fresh-compare-mass-016", "request": {"state": "A parcel weighs 41190 grams. The comparison mass is 41 kilograms. Its reference number is 225.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Above"], ["X", "Below"], ["Y", "Equal"], ["Z", "Unknown"]]}, "expected": "W"} +{"id": "numeric-fresh-parallel-rates-005", "request": {"state": "Pump A fills a reservoir in 40 hours alone and pump B fills it in 44 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 773.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "84 hours"], ["X", "440/21 hours"], ["Y", "42 hours"], ["Z", "4 hours"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-015", "request": {"state": "At closing, count the parts left after shipping 41 singles from 44 full cartons containing 47 each. The stockroom code is 153.", "question": "How many parts remain?", "options": [["W", "2068"], ["X", "2109"], ["Y", "50"], ["Z", "2027"]]}, "expected": "Z"} +{"id": "numeric-fresh-round-currency-008", "request": {"state": "The subtotal is $38.41 and tax is 25%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "4801/100 USD"], ["X", "2401/50 USD"], ["Y", "3841/100 USD"], ["Z", "48 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-compare-mass-013", "request": {"state": "A parcel weighs 8770 grams. The comparison mass is 9 kilograms. Its reference number is 853.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Above"], ["X", "Unknown"], ["Y", "Below"], ["Z", "Equal"]]}, "expected": "Y"} +{"id": "numeric-fresh-whole-packages-015", "request": {"state": "We need 602 labels. Each sealed package contains 20 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "31"], ["X", "30"], ["Y", "602"], ["Z", "20"]]}, "expected": "W"} +{"id": "numeric-fresh-identifier-distraction-016", "request": {"state": "Batch 363 uses 46 bottles of 32 milliliters each. The contents are shared equally among 24 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "13/4"], ["X", "184/3"], ["Y", "121/8"], ["Z", "1496"]]}, "expected": "X"} +{"id": "numeric-fresh-percentage-change-005", "request": {"state": "The old count was 3300; the new count is 3729. A separate department has 478 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "113 %"], ["X", "429 %"], ["Y", "13 %"], ["Z", "33 %"]]}, "expected": "Y"} +{"id": "numeric-fresh-round-currency-014", "request": {"state": "The subtotal is $22.16 and tax is 41%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "1563/50 USD"], ["X", "125/4 USD"], ["Y", "781/25 USD"], ["Z", "554/25 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-overnight-time-004", "request": {"state": "A job starts at 22:01 and ends at 02:15 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "314 minutes"], ["X", "194 minutes"], ["Y", "254 minutes"], ["Z", "-1186 minutes"]]}, "expected": "Y"} +{"id": "numeric-fresh-round-currency-004", "request": {"state": "The subtotal is $9.38 and tax is 3%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "193/20 USD"], ["X", "483/50 USD"], ["Y", "967/100 USD"], ["Z", "469/50 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-005", "request": {"state": "At closing, count the parts left after shipping 4 singles from 38 full cartons containing 15 each. The stockroom code is 611.", "question": "How many parts remain?", "options": [["W", "570"], ["X", "49"], ["Y", "566"], ["Z", "574"]]}, "expected": "Y"} +{"id": "numeric-fresh-whole-packages-004", "request": {"state": "We need 1724 labels. Each sealed package contains 40 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "40"], ["X", "1724"], ["Y", "44"], ["Z", "43"]]}, "expected": "Y"} +{"id": "numeric-fresh-parallel-rates-007", "request": {"state": "Pump A fills a reservoir in 26 hours alone and pump B fills it in 3 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 282.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "29 hours"], ["X", "23 hours"], ["Y", "29/2 hours"], ["Z", "78/29 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-018", "request": {"state": "A route contains 28 kilometers followed by 150 meters. The vehicle carries 29 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "43 km"], ["X", "43/1000 km"], ["Y", "178 km"], ["Z", "563/20 km"]]}, "expected": "Z"} +{"id": "numeric-fresh-temperature-change-006", "request": {"state": "Temperature starts at minus 16 degrees, rises by 39 degrees, and then falls by 34 degrees. The weather-station code is 343.", "question": "After both changes, what does the thermometer read?", "options": [["W", "57"], ["X", "21"], ["Y", "-89"], ["Z", "-11"]]}, "expected": "Z"} +{"id": "numeric-fresh-identifier-distraction-004", "request": {"state": "Batch 109 uses 18 bottles of 43 milliliters each. The contents are shared equally among 40 cups.", "question": "What volume does one cup receive, in milliliters?", "options": [["W", "61/40"], ["X", "814"], ["Y", "109/40"], ["Z", "387/20"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-012", "request": {"state": "A wallet contains 14 dollars. A purchase costs 6 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "697/50 USD"], ["X", "703/50 USD"], ["Y", "1394 USD"], ["Z", "8 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-temperature-change-008", "request": {"state": "Temperature starts at minus 8 degrees, rises by 29 degrees, and then falls by 26 degrees. The weather-station code is 270.", "question": "After both changes, what does the thermometer read?", "options": [["W", "47"], ["X", "-5"], ["Y", "11"], ["Z", "-63"]]}, "expected": "X"} +{"id": "numeric-fresh-temperature-change-010", "request": {"state": "Temperature starts at minus 5 degrees, rises by 35 degrees, and then falls by 9 degrees. The weather-station code is 898.", "question": "After both changes, what does the thermometer read?", "options": [["W", "39"], ["X", "21"], ["Y", "-49"], ["Z", "31"]]}, "expected": "X"} +{"id": "numeric-fresh-temperature-change-004", "request": {"state": "Temperature starts at minus 7 degrees, rises by 11 degrees, and then falls by 18 degrees. The weather-station code is 598.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-36"], ["X", "22"], ["Y", "-14"], ["Z", "0"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-018", "request": {"state": "A shipment contains 27 identical units. A different product costs $3 per unit. Shipping this shipment costs $29. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "Cannot determine"], ["X", "27"], ["Y", "81"], ["Z", "3"]]}, "expected": "W"} +{"id": "numeric-fresh-whole-packages-001", "request": {"state": "We need 1286 labels. Each sealed package contains 42 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "42"], ["X", "1286"], ["Y", "30"], ["Z", "31"]]}, "expected": "Z"} +{"id": "numeric-fresh-compare-mass-008", "request": {"state": "A parcel weighs 12940 grams. The comparison mass is 13 kilograms. Its reference number is 799.", "question": "Which relation describes the measured mass relative to the comparison mass?", "options": [["W", "Equal"], ["X", "Above"], ["Y", "Below"], ["Z", "Unknown"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-distance-016", "request": {"state": "A route contains 46 kilometers followed by 410 meters. The vehicle carries 30 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "456 km"], ["X", "87/1000 km"], ["Y", "87 km"], ["Z", "4641/100 km"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-016", "request": {"state": "We need 731 labels. Each sealed package contains 34 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "22"], ["X", "21"], ["Y", "34"], ["Z", "731"]]}, "expected": "W"} +{"id": "numeric-fresh-irrelevant-inventory-018", "request": {"state": "At closing, count the parts left after shipping 28 singles from 10 full cartons containing 4 each. The stockroom code is 773.", "question": "How many parts remain?", "options": [["W", "-14"], ["X", "12"], ["Y", "40"], ["Z", "68"]]}, "expected": "X"} +{"id": "numeric-fresh-round-currency-012", "request": {"state": "The subtotal is $3.10 and tax is 35%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "419/100 USD"], ["X", "209/50 USD"], ["Y", "31/10 USD"], ["Z", "21/5 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-overnight-time-010", "request": {"state": "A job starts at 23:15 and ends at 02:49 the following day. Both times use the same timezone with no clock changes.", "question": "What is the total runtime, measured in minutes?", "options": [["W", "154 minutes"], ["X", "214 minutes"], ["Y", "-1226 minutes"], ["Z", "274 minutes"]]}, "expected": "X"} +{"id": "numeric-fresh-parallel-rates-016", "request": {"state": "Pump A fills a reservoir in 33 hours alone and pump B fills it in 34 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 836.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "67/2 hours"], ["X", "1122/67 hours"], ["Y", "1 hours"], ["Z", "67 hours"]]}, "expected": "X"} +{"id": "numeric-fresh-mixed-money-001", "request": {"state": "A wallet contains 29 dollars. A purchase costs 38 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "2862 USD"], ["X", "-9 USD"], ["Y", "1431/50 USD"], ["Z", "1469/50 USD"]]}, "expected": "Y"} +{"id": "numeric-fresh-round-currency-018", "request": {"state": "The subtotal is $15.47 and tax is 25%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "1933/100 USD"], ["X", "1547/100 USD"], ["Y", "967/50 USD"], ["Z", "387/20 USD"]]}, "expected": "Y"} +{"id": "numeric-fresh-whole-packages-019", "request": {"state": "We need 388 labels. Each sealed package contains 25 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "15"], ["X", "25"], ["Y", "388"], ["Z", "16"]]}, "expected": "Z"} +{"id": "numeric-fresh-whole-packages-011", "request": {"state": "We need 743 labels. Each sealed package contains 29 labels. Only whole packages can be bought; unused labels are allowed.", "question": "Choose the minimum purchase quantity in whole packages.", "options": [["W", "25"], ["X", "26"], ["Y", "743"], ["Z", "29"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-009", "request": {"state": "At closing, count the parts left after shipping 22 singles from 17 full cartons containing 19 each. The stockroom code is 994.", "question": "How many parts remain?", "options": [["W", "323"], ["X", "14"], ["Y", "345"], ["Z", "301"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-014", "request": {"state": "A wallet contains 44 dollars. A purchase costs 14 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "4386 USD"], ["X", "2193/50 USD"], ["Y", "30 USD"], ["Z", "2207/50 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-011", "request": {"state": "At closing, count the parts left after shipping 9 singles from 26 full cartons containing 47 each. The stockroom code is 216.", "question": "How many parts remain?", "options": [["W", "1222"], ["X", "1213"], ["Y", "64"], ["Z", "1231"]]}, "expected": "X"} +{"id": "numeric-fresh-percentage-change-010", "request": {"state": "The old count was 900; the new count is 1323. A separate department has 339 units.", "question": "Calculate the percentage growth from the old count to the new count.", "options": [["W", "9 %"], ["X", "47 %"], ["Y", "147 %"], ["Z", "423 %"]]}, "expected": "X"} +{"id": "numeric-fresh-mixed-money-013", "request": {"state": "A wallet contains 12 dollars. A purchase costs 25 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "1175 USD"], ["X", "47/4 USD"], ["Y", "-13 USD"], ["Z", "49/4 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-temperature-change-012", "request": {"state": "Temperature starts at minus 38 degrees, rises by 3 degrees, and then falls by 34 degrees. The weather-station code is 385.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-69"], ["X", "7"], ["Y", "-75"], ["Z", "-1"]]}, "expected": "W"} +{"id": "numeric-fresh-parallel-rates-010", "request": {"state": "Pump A fills a reservoir in 21 hours alone and pump B fills it in 43 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 313.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "32 hours"], ["X", "903/64 hours"], ["Y", "22 hours"], ["Z", "64 hours"]]}, "expected": "X"} +{"id": "numeric-fresh-missing-price-007", "request": {"state": "A shipment contains 9 identical units. A different product costs $39 per unit. Shipping this shipment costs $4. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "Cannot determine"], ["X", "39"], ["Y", "351"], ["Z", "9"]]}, "expected": "W"} +{"id": "numeric-fresh-temperature-change-011", "request": {"state": "Temperature starts at minus 3 degrees, rises by 27 degrees, and then falls by 37 degrees. The weather-station code is 313.", "question": "After both changes, what does the thermometer read?", "options": [["W", "61"], ["X", "-7"], ["Y", "-67"], ["Z", "-13"]]}, "expected": "Z"} +{"id": "numeric-fresh-parallel-rates-018", "request": {"state": "Pump A fills a reservoir in 43 hours alone and pump B fills it in 28 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 630.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "71 hours"], ["X", "15 hours"], ["Y", "71/2 hours"], ["Z", "1204/71 hours"]]}, "expected": "Z"} +{"id": "numeric-fresh-missing-price-014", "request": {"state": "A shipment contains 3 identical units. A different product costs $36 per unit. Shipping this shipment costs $5. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "Cannot determine"], ["X", "108"], ["Y", "36"], ["Z", "3"]]}, "expected": "W"} +{"id": "numeric-fresh-temperature-change-016", "request": {"state": "Temperature starts at minus 20 degrees, rises by 8 degrees, and then falls by 43 degrees. The weather-station code is 132.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-71"], ["X", "31"], ["Y", "-55"], ["Z", "-15"]]}, "expected": "Y"} +{"id": "numeric-fresh-mixed-distance-011", "request": {"state": "A route contains 46 kilometers followed by 290 meters. The vehicle carries 22 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "4629/100 km"], ["X", "75 km"], ["Y", "336 km"], ["Z", "3/40 km"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-distance-001", "request": {"state": "A route contains 43 kilometers followed by 300 meters. The vehicle carries 37 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "73 km"], ["X", "433/10 km"], ["Y", "343 km"], ["Z", "73/1000 km"]]}, "expected": "X"} +{"id": "numeric-fresh-irrelevant-inventory-016", "request": {"state": "At closing, count the parts left after shipping 39 singles from 35 full cartons containing 27 each. The stockroom code is 423.", "question": "How many parts remain?", "options": [["W", "23"], ["X", "945"], ["Y", "984"], ["Z", "906"]]}, "expected": "Z"} +{"id": "numeric-fresh-round-currency-005", "request": {"state": "The subtotal is $10.19 and tax is 24%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "253/20 USD"], ["X", "1263/100 USD"], ["Y", "1019/100 USD"], ["Z", "316/25 USD"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-distance-014", "request": {"state": "A route contains 44 kilometers followed by 270 meters. The vehicle carries 34 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "4427/100 km"], ["X", "314 km"], ["Y", "71/1000 km"], ["Z", "71 km"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-distance-006", "request": {"state": "A route contains 31 kilometers followed by 90 meters. The vehicle carries 37 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "3109/100 km"], ["X", "121 km"], ["Y", "1/25 km"], ["Z", "40 km"]]}, "expected": "W"} +{"id": "numeric-fresh-parallel-rates-009", "request": {"state": "Pump A fills a reservoir in 46 hours alone and pump B fills it in 13 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 315.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "33 hours"], ["X", "598/59 hours"], ["Y", "59 hours"], ["Z", "59/2 hours"]]}, "expected": "X"} +{"id": "numeric-fresh-parallel-rates-019", "request": {"state": "Pump A fills a reservoir in 9 hours alone and pump B fills it in 8 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 504.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "17/2 hours"], ["X", "72/17 hours"], ["Y", "1 hours"], ["Z", "17 hours"]]}, "expected": "X"} +{"id": "numeric-fresh-mixed-money-004", "request": {"state": "A wallet contains 33 dollars. A purchase costs 18 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "1641/50 USD"], ["X", "1659/50 USD"], ["Y", "3282 USD"], ["Z", "15 USD"]]}, "expected": "W"} +{"id": "numeric-fresh-mixed-distance-009", "request": {"state": "A route contains 11 kilometers followed by 230 meters. The vehicle carries 3 passengers.", "question": "How far does the vehicle travel altogether, measured in kilometers?", "options": [["W", "17/500 km"], ["X", "34 km"], ["Y", "241 km"], ["Z", "1123/100 km"]]}, "expected": "Z"} +{"id": "numeric-fresh-parallel-rates-006", "request": {"state": "Pump A fills a reservoir in 47 hours alone and pump B fills it in 43 hours alone. Both have constant rates and run together from empty. The reservoir has inspection ID 574.", "question": "What elapsed time in hours is required when both operate?", "options": [["W", "4 hours"], ["X", "90 hours"], ["Y", "2021/90 hours"], ["Z", "45 hours"]]}, "expected": "Y"} +{"id": "numeric-fresh-round-currency-000", "request": {"state": "The subtotal is $14.10 and tax is 38%. Round the final total to the nearest cent, with exact half-cent ties rounded upward.", "question": "Give the final bill in USD, rounded as specified.", "options": [["W", "1947/100 USD"], ["X", "973/50 USD"], ["Y", "389/20 USD"], ["Z", "141/10 USD"]]}, "expected": "X"} +{"id": "numeric-fresh-temperature-change-017", "request": {"state": "Temperature starts at minus 23 degrees, rises by 45 degrees, and then falls by 10 degrees. The weather-station code is 157.", "question": "After both changes, what does the thermometer read?", "options": [["W", "-78"], ["X", "58"], ["Y", "12"], ["Z", "32"]]}, "expected": "Y"} +{"id": "numeric-fresh-missing-price-005", "request": {"state": "A shipment contains 10 identical units. A different product costs $19 per unit. Shipping this shipment costs $24. No unit price for the shipped product is supplied.", "question": "How much do the shipped items cost before adding transport?", "options": [["W", "190"], ["X", "19"], ["Y", "10"], ["Z", "Cannot determine"]]}, "expected": "Z"} +{"id": "numeric-fresh-mixed-money-007", "request": {"state": "A wallet contains 40 dollars. A purchase costs 20 cents. There are no fees or other transactions.", "question": "What is the remaining balance in USD?", "options": [["W", "201/5 USD"], ["X", "20 USD"], ["Y", "199/5 USD"], ["Z", "3980 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-009", "request": {"state": "A listed price of $600 gets a 15% discount. A further 18% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "600 USD"], ["X", "402 USD"], ["Y", "510 USD"], ["Z", "2091/5 USD"]]}, "expected": "Z"} +{"id": "numeric-unseen-tiered-charge-011", "request": {"state": "The first 22 units cost $20 each; additional units cost $22 each. A customer buys 53 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "1122 USD"], ["X", "471 USD"], ["Y", "1060 USD"], ["Z", "1166 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-successive-discounts-005", "request": {"state": "A listed price of $1500 gets a 16% discount. A further 13% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "5481/5 USD"], ["X", "1065 USD"], ["Y", "1260 USD"], ["Z", "1500 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-successive-discounts-000", "request": {"state": "A listed price of $4300 gets a 46% discount. A further 4% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "55728/25 USD"], ["X", "2150 USD"], ["Y", "2322 USD"], ["Z", "4300 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-tiered-charge-010", "request": {"state": "The first 36 units cost $43 each; additional units cost $45 each. A customer buys 83 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "3735 USD"], ["X", "1595 USD"], ["Y", "3663 USD"], ["Z", "3569 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-003", "request": {"state": "A listed price of $2900 gets a 16% discount. A further 18% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "2900 USD"], ["X", "49938/25 USD"], ["Y", "2436 USD"], ["Z", "1914 USD"]]}, "expected": "X"} +{"id": "numeric-unseen-production-yield-011", "request": {"state": "A factory makes 4700 pieces. Exactly 30 lots each have 14 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "4686"], ["X", "4670"], ["Y", "4280"], ["Z", "4656"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-011", "request": {"state": "A listed price of $1800 gets a 29% discount. A further 6% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "1170 USD"], ["X", "30033/25 USD"], ["Y", "1278 USD"], ["Z", "1800 USD"]]}, "expected": "X"} +{"id": "numeric-unseen-tiered-charge-000", "request": {"state": "The first 17 units cost $18 each; additional units cost $20 each. A customer buys 50 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "966 USD"], ["X", "339 USD"], ["Y", "900 USD"], ["Z", "1000 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-missing-average-007", "request": {"state": "After one new observation, 14 observations have mean 11. Before adding it, the 13 observations had mean 36.", "question": "What is the numerical value of the new observation?", "options": [["W", "25"], ["X", "118"], ["Y", "-314"], ["Z", "-25"]]}, "expected": "Y"} +{"id": "numeric-unseen-tiered-charge-012", "request": {"state": "The first 27 units cost $10 each; additional units cost $12 each. A customer buys 60 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "303 USD"], ["X", "600 USD"], ["Y", "720 USD"], ["Z", "666 USD"]]}, "expected": "Z"} +{"id": "numeric-unseen-successive-discounts-001", "request": {"state": "A listed price of $3700 gets a 10% discount. A further 36% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "1998 USD"], ["X", "10656/5 USD"], ["Y", "3330 USD"], ["Z", "3700 USD"]]}, "expected": "X"} +{"id": "numeric-unseen-production-yield-006", "request": {"state": "A factory makes 4300 pieces. Exactly 13 lots each have 5 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "4287"], ["X", "4295"], ["Y", "4235"], ["Z", "4282"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-006", "request": {"state": "After one new observation, 10 observations have mean 14. Before adding it, the 9 observations had mean 11.", "question": "What is the numerical value of the new observation?", "options": [["W", "41"], ["X", "129"], ["Y", "3"], ["Z", "-3"]]}, "expected": "W"} +{"id": "numeric-unseen-missing-average-000", "request": {"state": "After one new observation, 11 observations have mean 34. Before adding it, the 10 observations had mean 41.", "question": "What is the numerical value of the new observation?", "options": [["W", "-36"], ["X", "333"], ["Y", "-7"], ["Z", "7"]]}, "expected": "W"} +{"id": "numeric-unseen-production-yield-008", "request": {"state": "A factory makes 2200 pieces. Exactly 34 lots each have 31 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "1146"], ["X", "2135"], ["Y", "2166"], ["Z", "2169"]]}, "expected": "W"} +{"id": "numeric-unseen-production-yield-012", "request": {"state": "A factory makes 2000 pieces. Exactly 10 lots each have 46 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "1990"], ["X", "1954"], ["Y", "1540"], ["Z", "1944"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-011", "request": {"state": "After one new observation, 32 observations have mean 4. Before adding it, the 31 observations had mean 32.", "question": "What is the numerical value of the new observation?", "options": [["W", "28"], ["X", "-864"], ["Y", "96"], ["Z", "-28"]]}, "expected": "X"} +{"id": "numeric-unseen-missing-average-012", "request": {"state": "After one new observation, 24 observations have mean 38. Before adding it, the 23 observations had mean 31.", "question": "What is the numerical value of the new observation?", "options": [["W", "-7"], ["X", "7"], ["Y", "199"], ["Z", "881"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-012", "request": {"state": "A listed price of $400 gets a 47% discount. A further 25% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "159 USD"], ["X", "400 USD"], ["Y", "212 USD"], ["Z", "112 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-tiered-charge-003", "request": {"state": "The first 10 units cost $21 each; additional units cost $23 each. A customer buys 57 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "257 USD"], ["X", "1291 USD"], ["Y", "1197 USD"], ["Z", "1311 USD"]]}, "expected": "X"} +{"id": "numeric-unseen-missing-average-005", "request": {"state": "After one new observation, 11 observations have mean 16. Before adding it, the 10 observations had mean 17.", "question": "What is the numerical value of the new observation?", "options": [["W", "6"], ["X", "1"], ["Y", "159"], ["Z", "-1"]]}, "expected": "W"} +{"id": "numeric-unseen-missing-average-014", "request": {"state": "After one new observation, 19 observations have mean 29. Before adding it, the 18 observations had mean 38.", "question": "What is the numerical value of the new observation?", "options": [["W", "513"], ["X", "-133"], ["Y", "9"], ["Z", "-9"]]}, "expected": "X"} +{"id": "numeric-unseen-tiered-charge-008", "request": {"state": "The first 4 units cost $34 each; additional units cost $36 each. A customer buys 13 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "460 USD"], ["X", "468 USD"], ["Y", "145 USD"], ["Z", "442 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-tiered-charge-009", "request": {"state": "The first 34 units cost $10 each; additional units cost $12 each. A customer buys 47 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "564 USD"], ["X", "353 USD"], ["Y", "496 USD"], ["Z", "470 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-004", "request": {"state": "After one new observation, 15 observations have mean 10. Before adding it, the 14 observations had mean 12.", "question": "What is the numerical value of the new observation?", "options": [["W", "-2"], ["X", "138"], ["Y", "-18"], ["Z", "2"]]}, "expected": "Y"} +{"id": "numeric-unseen-tiered-charge-001", "request": {"state": "The first 11 units cost $39 each; additional units cost $41 each. A customer buys 48 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "1946 USD"], ["X", "1968 USD"], ["Y", "466 USD"], ["Z", "1872 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-production-yield-004", "request": {"state": "A factory makes 400 pieces. Exactly 3 lots each have 47 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "397"], ["X", "350"], ["Y", "353"], ["Z", "259"]]}, "expected": "Z"} +{"id": "numeric-unseen-tiered-charge-004", "request": {"state": "The first 34 units cost $43 each; additional units cost $45 each. A customer buys 39 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "1755 USD"], ["X", "1677 USD"], ["Y", "1467 USD"], ["Z", "1687 USD"]]}, "expected": "Z"} +{"id": "numeric-unseen-production-yield-002", "request": {"state": "A factory makes 1800 pieces. Exactly 8 lots each have 42 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "1464"], ["X", "1758"], ["Y", "1792"], ["Z", "1750"]]}, "expected": "W"} +{"id": "numeric-unseen-tiered-charge-007", "request": {"state": "The first 35 units cost $41 each; additional units cost $43 each. A customer buys 82 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "3526 USD"], ["X", "3456 USD"], ["Y", "1482 USD"], ["Z", "3362 USD"]]}, "expected": "X"} +{"id": "numeric-unseen-successive-discounts-013", "request": {"state": "A listed price of $2900 gets a 28% discount. A further 43% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "2088 USD"], ["X", "841 USD"], ["Y", "29754/25 USD"], ["Z", "2900 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-tiered-charge-005", "request": {"state": "The first 27 units cost $18 each; additional units cost $20 each. A customer buys 72 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "1440 USD"], ["X", "531 USD"], ["Y", "1386 USD"], ["Z", "1296 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-tiered-charge-002", "request": {"state": "The first 33 units cost $8 each; additional units cost $10 each. A customer buys 71 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "710 USD"], ["X", "302 USD"], ["Y", "644 USD"], ["Z", "568 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-015", "request": {"state": "A listed price of $4300 gets a 31% discount. A further 23% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "1978 USD"], ["X", "2967 USD"], ["Y", "228459/100 USD"], ["Z", "4300 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-002", "request": {"state": "After one new observation, 6 observations have mean 33. Before adding it, the 5 observations had mean 42.", "question": "What is the numerical value of the new observation?", "options": [["W", "156"], ["X", "-9"], ["Y", "-12"], ["Z", "9"]]}, "expected": "Y"} +{"id": "numeric-unseen-production-yield-003", "request": {"state": "A factory makes 1900 pieces. Exactly 45 lots each have 26 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "1855"], ["X", "1829"], ["Y", "730"], ["Z", "1874"]]}, "expected": "Y"} +{"id": "numeric-unseen-production-yield-000", "request": {"state": "A factory makes 2000 pieces. Exactly 34 lots each have 14 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "1952"], ["X", "1986"], ["Y", "1524"], ["Z", "1966"]]}, "expected": "Y"} +{"id": "numeric-unseen-production-yield-001", "request": {"state": "A factory makes 2700 pieces. Exactly 36 lots each have 43 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "2657"], ["X", "2621"], ["Y", "1152"], ["Z", "2664"]]}, "expected": "Y"} +{"id": "numeric-unseen-production-yield-014", "request": {"state": "A factory makes 900 pieces. Exactly 27 lots each have 18 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "873"], ["X", "855"], ["Y", "414"], ["Z", "882"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-013", "request": {"state": "After one new observation, 45 observations have mean 37. Before adding it, the 44 observations had mean 10.", "question": "What is the numerical value of the new observation?", "options": [["W", "-27"], ["X", "1655"], ["Y", "1225"], ["Z", "27"]]}, "expected": "Y"} +{"id": "numeric-unseen-production-yield-009", "request": {"state": "A factory makes 4700 pieces. Exactly 7 lots each have 35 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "4693"], ["X", "4658"], ["Y", "4455"], ["Z", "4665"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-015", "request": {"state": "After one new observation, 10 observations have mean 45. Before adding it, the 9 observations had mean 34.", "question": "What is the numerical value of the new observation?", "options": [["W", "-11"], ["X", "416"], ["Y", "144"], ["Z", "11"]]}, "expected": "Y"} +{"id": "numeric-unseen-production-yield-007", "request": {"state": "A factory makes 3900 pieces. Exactly 13 lots each have 23 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "3877"], ["X", "3887"], ["Y", "3601"], ["Z", "3864"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-010", "request": {"state": "After one new observation, 24 observations have mean 30. Before adding it, the 23 observations had mean 28.", "question": "What is the numerical value of the new observation?", "options": [["W", "692"], ["X", "76"], ["Y", "2"], ["Z", "-2"]]}, "expected": "X"} +{"id": "numeric-unseen-tiered-charge-015", "request": {"state": "The first 21 units cost $41 each; additional units cost $43 each. A customer buys 43 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "1807 USD"], ["X", "1763 USD"], ["Y", "1849 USD"], ["Z", "883 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-missing-average-003", "request": {"state": "After one new observation, 35 observations have mean 12. Before adding it, the 34 observations had mean 40.", "question": "What is the numerical value of the new observation?", "options": [["W", "-28"], ["X", "380"], ["Y", "-940"], ["Z", "28"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-007", "request": {"state": "A listed price of $2800 gets a 38% discount. A further 40% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "2800 USD"], ["X", "616 USD"], ["Y", "5208/5 USD"], ["Z", "1736 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-009", "request": {"state": "After one new observation, 28 observations have mean 4. Before adding it, the 27 observations had mean 30.", "question": "What is the numerical value of the new observation?", "options": [["W", "-26"], ["X", "82"], ["Y", "-698"], ["Z", "26"]]}, "expected": "Y"} +{"id": "numeric-unseen-tiered-charge-006", "request": {"state": "The first 4 units cost $26 each; additional units cost $28 each. A customer buys 48 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "148 USD"], ["X", "1344 USD"], ["Y", "1336 USD"], ["Z", "1248 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-010", "request": {"state": "A listed price of $3000 gets a 43% discount. A further 18% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "1170 USD"], ["X", "1710 USD"], ["Y", "7011/5 USD"], ["Z", "3000 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-successive-discounts-002", "request": {"state": "A listed price of $3700 gets a 19% discount. A further 41% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "176823/100 USD"], ["X", "1480 USD"], ["Y", "2997 USD"], ["Z", "3700 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-production-yield-010", "request": {"state": "A factory makes 3000 pieces. Exactly 13 lots each have 4 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "2996"], ["X", "2948"], ["Y", "2987"], ["Z", "2983"]]}, "expected": "X"} +{"id": "numeric-unseen-missing-average-001", "request": {"state": "After one new observation, 27 observations have mean 3. Before adding it, the 26 observations had mean 11.", "question": "What is the numerical value of the new observation?", "options": [["W", "-8"], ["X", "-205"], ["Y", "8"], ["Z", "70"]]}, "expected": "X"} +{"id": "numeric-unseen-tiered-charge-013", "request": {"state": "The first 38 units cost $29 each; additional units cost $31 each. A customer buys 49 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "1443 USD"], ["X", "1421 USD"], ["Y", "1519 USD"], ["Z", "1113 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-tiered-charge-014", "request": {"state": "The first 44 units cost $23 each; additional units cost $25 each. A customer buys 72 units. There is no fixed fee.", "question": "What is the total charge in dollars?", "options": [["W", "1800 USD"], ["X", "1712 USD"], ["Y", "1040 USD"], ["Z", "1656 USD"]]}, "expected": "X"} +{"id": "numeric-unseen-successive-discounts-008", "request": {"state": "A listed price of $4500 gets a 11% discount. A further 30% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "4005 USD"], ["X", "2655 USD"], ["Y", "5607/2 USD"], ["Z", "4500 USD"]]}, "expected": "Y"} +{"id": "numeric-unseen-missing-average-008", "request": {"state": "After one new observation, 26 observations have mean 15. Before adding it, the 25 observations had mean 8.", "question": "What is the numerical value of the new observation?", "options": [["W", "7"], ["X", "-7"], ["Y", "382"], ["Z", "190"]]}, "expected": "Z"} +{"id": "numeric-unseen-production-yield-013", "request": {"state": "A factory makes 1400 pieces. Exactly 22 lots each have 18 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "1378"], ["X", "1360"], ["Y", "1382"], ["Z", "1004"]]}, "expected": "Z"} +{"id": "numeric-unseen-successive-discounts-014", "request": {"state": "A listed price of $1000 gets a 5% discount. A further 28% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "684 USD"], ["X", "1000 USD"], ["Y", "670 USD"], ["Z", "950 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-production-yield-015", "request": {"state": "A factory makes 2400 pieces. Exactly 47 lots each have 35 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "755"], ["X", "2365"], ["Y", "2353"], ["Z", "2318"]]}, "expected": "W"} +{"id": "numeric-unseen-successive-discounts-006", "request": {"state": "A listed price of $4100 gets a 33% discount. A further 20% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "10988/5 USD"], ["X", "2747 USD"], ["Y", "1927 USD"], ["Z", "4100 USD"]]}, "expected": "W"} +{"id": "numeric-unseen-production-yield-005", "request": {"state": "A factory makes 4600 pieces. Exactly 34 lots each have 20 defective pieces; all other pieces are usable. No defective piece belongs to more than one lot.", "question": "How many pieces are usable?", "options": [["W", "4580"], ["X", "4546"], ["Y", "4566"], ["Z", "3920"]]}, "expected": "Z"} +{"id": "numeric-unseen-successive-discounts-004", "request": {"state": "A listed price of $2700 gets a 26% discount. A further 30% discount is then applied to the already reduced price.", "question": "What is the final price in USD?", "options": [["W", "1188 USD"], ["X", "2700 USD"], ["Y", "6993/5 USD"], ["Z", "1998 USD"]]}, "expected": "Y"} +{"id": "numeric-authored-00", "request": {"state": "The tank held 2 liters. We added 750 mL and removed 125 mL.", "question": "How much liquid remains, in milliliters?", "options": [["A", "2625 mL"], ["B", "3 L"], ["C", "0.625 L"], ["D", "2.5 L"]]}, "expected": "A"} +{"id": "numeric-authored-01", "request": {"state": "An item listed at $18.75 gets 20% off. Shipping is $2.40 after the discount and is not discounted.", "question": "What is the amount payable?", "options": [["A", "17.40 USD"], ["B", "15 USD"], ["C", "16.92 USD"], ["D", "21.15 USD"]]}, "expected": "A"} +{"id": "numeric-authored-02", "request": {"state": "Invoice 5482 totals $360 for 12 identical units. A separate invoice for another product totals $108.", "question": "What is the unit price on invoice 5482?", "options": [["A", "39 USD"], ["B", "30 USD"], ["C", "9 USD"], ["D", "360 USD"]]}, "expected": "B"} +{"id": "numeric-authored-03", "request": {"state": "A car traveled 120 km. Its tank capacity is 50 liters. Neither fuel used nor fuel remaining was measured.", "question": "How many liters did this trip consume?", "options": [["A", "12"], ["B", "2.4"], ["C", "Cannot determine"], ["D", "50"]]}, "expected": "C"} +{"id": "numeric-authored-04", "request": {"state": "The measuring jug contains 1.2 liters. The reference volume is 1150 milliliters.", "question": "Is the jug volume above, below, or equal to the reference?", "options": [["A", "Equal"], ["B", "Unknown"], ["C", "Below"], ["D", "Above"]]}, "expected": "D"} +{"id": "numeric-authored-05", "request": {"state": "A signed account adjustment is exactly -1.235 dollars. Round to the nearest cent, with half ties away from zero.", "question": "What is the rounded adjustment?", "options": [["A", "-1.20 USD"], ["B", "-1.24 USD"], ["C", "-1.23 USD"], ["D", "1.24 USD"]]}, "expected": "B"} +{"id": "numeric-authored-06", "request": {"state": "There is a $100 budget. One shipment costs $7 regardless of quantity. Each item costs $6.", "question": "What is the maximum number of whole items affordable?", "options": [["A", "17"], ["B", "15"], ["C", "16"], ["D", "14"]]}, "expected": "B"} +{"id": "numeric-authored-07", "request": {"state": "Nine identical items normally cost $4.50 each. Every third item in this purchase is free.", "question": "What is the total charge?", "options": [["A", "40.50 USD"], ["B", "27 USD"], ["C", "31.50 USD"], ["D", "13.50 USD"]]}, "expected": "B"} +{"id": "numeric-authored-08", "request": {"state": "A mixture uses flour and water in a 3:2 mass ratio. The total mass is 20 kg.", "question": "How much water is needed?", "options": [["A", "12 kg"], ["B", "6 kg"], ["C", "8 kg"], ["D", "10 kg"]]}, "expected": "C"} +{"id": "numeric-authored-09", "request": {"state": "A bag contains 8 red and 4 blue balls. Three balls are drawn uniformly without replacement.", "question": "What is the probability that all three are blue?", "options": [["A", "1/3"], ["B", "1/55"], ["C", "1/220"], ["D", "1/27"]]}, "expected": "B"} +{"id": "numeric-authored-10", "request": {"state": "A service begins at 23:53 and ends at 00:12 the next day. The timezone is unchanged.", "question": "How many minutes did it run?", "options": [["A", "41 minutes"], ["B", "19 minutes"], ["C", "59 minutes"], ["D", "12 minutes"]]}, "expected": "B"} +{"id": "numeric-authored-11", "request": {"state": "An event starts at midnight at the beginning of February 28, 2024, and ends at midnight at the beginning of March 1, 2024.", "question": "How many full days elapse?", "options": [["A", "2"], ["B", "3"], ["C", "29"], ["D", "1"]]}, "expected": "A"} +{"id": "numeric-authored-12", "request": {"state": "A cyclist covers 100 km at 40 km/h, then another 100 km at 60 km/h, without stopping.", "question": "What is the average speed for the entire trip?", "options": [["A", "60 km/h"], ["B", "48 km/h"], ["C", "45 km/h"], ["D", "50 km/h"]]}, "expected": "B"} +{"id": "numeric-authored-13", "request": {"state": "Invoice 1047 is unpaid. Invoice 2032 is paid. Receipt 6000 is unrelated to either invoice.", "question": "Which invoice is paid?", "options": [["A", "1047"], ["B", "6000"], ["C", "Cannot determine"], ["D", "2032"]]}, "expected": "D"} +{"id": "numeric-authored-14", "request": {"state": "A benefit is awarded only when the measured mass is strictly above 1 kg. A sample weighs 1000 g.", "question": "Does this sample qualify?", "options": [["A", "No"], ["B", "Unknown"], ["C", "Yes"]]}, "expected": "A"} +{"id": "numeric-authored-15", "request": {"state": "A recipe needs 250 mL of a powder. No density or mass measurement is supplied.", "question": "What is the powder mass in grams?", "options": [["A", "1000 g"], ["B", "250 g"], ["C", "Cannot determine"], ["D", "1 g"]]}, "expected": "C"} +{"id": "numeric-authored-16", "request": {"state": "A success probability is exactly 0.125.", "question": "Express this probability as a percentage.", "options": [["A", "0.125%"], ["B", "1.25%"], ["C", "125%"], ["D", "12.5%"]]}, "expected": "D"} +{"id": "numeric-authored-17", "request": {"state": "Room 32 contains file 7. Room 7 contains file 32.", "question": "Which room contains file 32?", "options": [["A", "Unknown"], ["B", "Both rooms"], ["C", "Room 7"], ["D", "Room 32"]]}, "expected": "C"} +{"id": "numeric-authored-18", "request": {"state": "Setup takes 7 minutes. Each subsequent complete six-minute cycle makes 10 pieces. There are 48 minutes available, including setup.", "question": "How many completed pieces can be produced?", "options": [["A", "68"], ["B", "60"], ["C", "80"], ["D", "70"]]}, "expected": "B"} +{"id": "numeric-authored-19", "request": {"state": "A parcel weighs 1001 grams.", "question": "Is its mass not greater than one kilogram?", "options": [["A", "Cannot determine"], ["B", "No"], ["C", "Yes"]]}, "expected": "B"} +{"id": "numeric-authored-20", "request": {"state": "A line starts with 100 pieces. Ninety percent pass the first stage. Eighty percent of those survivors pass the second stage.", "question": "How many pieces pass both stages?", "options": [["A", "70"], ["B", "72"], ["C", "80"], ["D", "90"]]}, "expected": "B"} +{"id": "numeric-authored-21", "request": {"state": "A balance of $400 earns simple interest at 5% per year for two years. Interest is not compounded and there are no fees.", "question": "What is the balance after two years?", "options": [["A", "441 USD"], ["B", "400 USD"], ["C", "440 USD"], ["D", "420 USD"]]}, "expected": "C"} +{"id": "numeric-authored-22", "request": {"state": "Group A has a mean of 10, and group B has a mean of 20. Both groups are nonempty, but neither group size is known.", "question": "What is the combined mean?", "options": [["A", "Cannot determine"], ["B", "10"], ["C", "20"], ["D", "15"]]}, "expected": "A"} +{"id": "numeric-authored-23", "request": {"state": "The exact price is 2.675 dollars. Round to the nearest cent with half ties rounded upward.", "question": "What price should be printed?", "options": [["A", "2.67 USD"], ["B", "2.68 USD"], ["C", "2.60 USD"], ["D", "2.70 USD"]]}, "expected": "B"} diff --git a/bonsai-decision-runtime-0.1.0-source.tar.gz b/bonsai-decision-runtime-0.1.0-source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..efa754a065a3500dc7be260f63279d174df0ba83 --- /dev/null +++ b/bonsai-decision-runtime-0.1.0-source.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270eabe54de1f26ea41c2f2298d953967b29a3eff1ad7c5bd214fedb9c95d057 +size 15031 diff --git a/bonsai_decision_runtime-0.1.0-py3-none-any.whl b/bonsai_decision_runtime-0.1.0-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..8b683b842ba79550f1c89b9c5a1f1669c248b734 Binary files /dev/null and b/bonsai_decision_runtime-0.1.0-py3-none-any.whl differ diff --git a/evaluate.py b/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..e686710ea27552a9aecffc91dff3fa63cb9399ee --- /dev/null +++ b/evaluate.py @@ -0,0 +1,20 @@ +"""Evaluate supplied labeled decisions; no bundled public benchmark text.""" +import argparse,json,statistics,time +from collections import defaultdict +from pathlib import Path +from bonsai_runtime.backend import Client +from bonsai_runtime.decision import DecisionEngine +p=argparse.ArgumentParser();p.add_argument('--input',required=True);p.add_argument('--output',required=True) +p.add_argument('--base',default='http://127.0.0.1:5991');p.add_argument('--profile',choices=['base','current'],default='base');p.add_argument('--adapter-id',type=int,default=0) +a=p.parse_args();engine=DecisionEngine(Client(a.base,None if a.profile=='base' else a.adapter_id));rows=[] +with Path(a.output).open('x') as out: + for line in Path(a.input).read_text().splitlines(): + item=json.loads(line);request=item['request'] + for order in [0,1]: + r=dict(request);options=r['options'];r['options']=options[order:]+options[:order] + result=engine.decide(r);row=dict(id=item['id'],order=order,correct=result['answer']==item['expected'],result=result) + out.write(json.dumps(row)+'\n');out.flush();rows.append(row) +groups=defaultdict(list) +for r in rows:groups[r['id']].append(r) +canonical=[r for r in rows if r['order']==0] +print(json.dumps(dict(profile=a.profile,requests=len(groups),canonical_correct=sum(r['correct'] for r in canonical),all_order_correct=sum(all(r['correct'] for r in rs) for rs in groups.values()),mean_seconds=statistics.mean(r['result']['seconds'] for r in rows)),indent=2)) diff --git a/evidence/agent-final.json b/evidence/agent-final.json new file mode 100644 index 0000000000000000000000000000000000000000..a15caa750331cd30646b04fa14f0bb9989235364 --- /dev/null +++ b/evidence/agent-final.json @@ -0,0 +1,948 @@ +{ + "created": "2026-09-24T09:30:25.338471+00:00", + "profiles": { + "base": { + "summary": { + "episodes": 480, + "successful_episodes": 457, + "requests": 240, + "all_order_correct": 227, + "fulfillable_n": 189, + "fulfillable_correct": 177, + "noncompletion_n": 51, + "noncompletion_correct": 50, + "false_completion": 1, + "unintended_effect": 0, + "mean_seconds": 2.0932355162791585, + "median_seconds": 1.427165471999615, + "p95_seconds": 10.745632594000199, + "model_calls": 516, + "generated_tokens": 61147, + "families": { + "clarification": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 0.8892722672494225 + }, + "corrections": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.9588820694332147 + }, + "existing": { + "episodes": 60, + "success": 56, + "requests": 30, + "all_order_correct": 27, + "false_completion": 1, + "unintended_effect": 0, + "mean_seconds": 1.2470223798843412 + }, + "faults": { + "episodes": 60, + "success": 53, + "requests": 30, + "all_order_correct": 26, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.4525465179996293 + }, + "long": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 7.21421824521749 + }, + "scheduling": { + "episodes": 60, + "success": 52, + "requests": 30, + "all_order_correct": 26, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.436056523432732 + }, + "time": { + "episodes": 60, + "success": 56, + "requests": 30, + "all_order_correct": 28, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.4590127553822336 + }, + "writing": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.0888733716342054 + } + }, + "failures": [ + { + "id": "final-scheduling-02", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-02", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-08", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Both date and time are required" + ] + }, + { + "id": "final-scheduling-08", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Both date and time are required" + ] + }, + { + "id": "final-scheduling-18", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-18", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-28", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-28", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-09", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-09", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-19", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-19", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-existing-05", + "rotation": 1, + "terminal": "done", + "expected": "done", + "error": null, + "questions": [ + null + ] + }, + { + "id": "final-existing-15", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Which paragraph should \"Cedar existing 16\" be moved to? Please specify the target paragraph ID and whether to place it before or after that paragraph." + ] + }, + { + "id": "final-existing-25", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Which paragraph should \"Cedar existing 26\" be moved before or after?" + ] + }, + { + "id": "final-existing-25", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Which paragraph should \"Cedar existing 26\" be moved before or after?" + ] + }, + { + "id": "final-faults-03", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-faults-04", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-faults-04", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-faults-05", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-faults-05", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-faults-07", + "rotation": 0, + "terminal": "clarify", + "expected": "unverified", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-faults-07", + "rotation": 1, + "terminal": "clarify", + "expected": "unverified", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + } + ] + }, + "all_requests": { + "correct": 227, + "n": 240, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 80, + "lower": 0.9, + "upper": 0.9833333333333333, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "supported": { + "correct": 177, + "n": 189, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 63, + "lower": 0.8835978835978836, + "upper": 0.9788359788359788, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "noncompletion": { + "correct": 50, + "n": 51, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 17, + "lower": 0.9411764705882353, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "clarification_or_unsupported": { + "correct": 42, + "n": 42, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 14, + "lower": 1.0, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "externally_unresolvable": { + "correct": 8, + "n": 9, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 3, + "lower": 0.6666666666666666, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "gates": { + "mechanical_tests": true, + "zero_false_completion": false, + "zero_unintended_content_effect": true, + "zero_unrequested_version_only_effect": false, + "zero_duplicate_retry_records": true, + "exact_supported": false, + "appropriate_noncompletion": true, + "every_family_90pct": false, + "memory_8192mib": true + }, + "agent_release_eligible": false, + "sampled_inference_peak_mib": 7510, + "memory_samples": 1770, + "logical_tasks": 1381, + "controller_attempts": 1449, + "persisted_receipts": 1369, + "sqlite_snapshots_audited": 480, + "intermediate_and_final_turns_audited": 516, + "subprocess_restarts": 12, + "supplementary_effects": { + "version_only_document_episodes": 7, + "unrequested_version_only_document_episodes": 1 + }, + "field_and_plan_diagnostics": { + "structured_extraction_calls": 516, + "planned_create": 1250, + "episodes_with_requested_record_changes": 350, + "requested_record_state_exact": 327, + "field_validation_rejections": 37, + "planned_ensure": 6, + "model_clarification_decisions": 57, + "planned_cancel": 24, + "planned_update": 26, + "planned_move": 75, + "episodes_with_requested_paragraph_reordering": 68, + "requested_paragraph_state_exact": 68 + }, + "batch_latency": { + "5": { + "latency_seconds": { + "n": 12, + "mean": 3.364545529749497, + "median": 3.3820472994993906, + "p95": 3.4253152440069243 + }, + "successful": 12, + "episodes": 12, + "model_calls": 12 + }, + "10": { + "latency_seconds": { + "n": 12, + "mean": 5.82880883333443, + "median": 5.828707496999414, + "p95": 5.898608537012478 + }, + "successful": 12, + "episodes": 12, + "model_calls": 12 + }, + "20": { + "latency_seconds": { + "n": 16, + "mean": 10.94719133887611, + "median": 11.008852277998812, + "p95": 11.075326010002755 + }, + "successful": 16, + "episodes": 16, + "model_calls": 16 + } + }, + "lifecycle": [ + { + "time_utc": "2026-09-24T08:52:14.783713+00:00", + "kind": "server_started", + "pid": 890397, + "gpu": 0, + "command": [ + "llama.cpp-b2/build/bin/llama-server", + "-m", + "models/Ternary-Bonsai-2-27B-PQ2_0.gguf", + "--host", + "0.0.0.0", + "--port", + "5991", + "-c", + "4096", + "-ngl", + "99", + "-fa", + "on", + "--jinja", + "--reasoning", + "off", + "-np", + "1", + "--no-context-shift", + "--cache-ram", + "0", + "--no-cache-idle-slots" + ] + }, + { + "time_utc": "2026-09-24T08:52:16.869817+00:00", + "kind": "server_ready", + "memory_mib": 7496, + "loaded_adapters": [] + }, + { + "time_utc": "2026-09-24T09:09:02.248742+00:00", + "kind": "server_stopped", + "pid": 890397, + "exit_code": 0, + "peak_mib": 7510 + } + ], + "failures_by_cause": { + "unnecessary-or-wrong-clarification": 22, + "wrong-plan-completed": 1 + } + }, + "current": { + "summary": { + "episodes": 480, + "successful_episodes": 466, + "requests": 240, + "all_order_correct": 233, + "fulfillable_n": 189, + "fulfillable_correct": 182, + "noncompletion_n": 51, + "noncompletion_correct": 51, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 2.64747540518271, + "median_seconds": 1.4224572904931847, + "p95_seconds": 14.418956352004898, + "model_calls": 516, + "generated_tokens": 58550, + "families": { + "clarification": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.1387293695152039 + }, + "corrections": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 2.4705934978165414 + }, + "existing": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.5115148826160294 + }, + "faults": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.5206247512658593 + }, + "long": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 9.634415864581873 + }, + "scheduling": { + "episodes": 60, + "success": 50, + "requests": 30, + "all_order_correct": 25, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.783248349016018 + }, + "time": { + "episodes": 60, + "success": 56, + "requests": 30, + "all_order_correct": 28, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.7420912066338738 + }, + "writing": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.3785853200162819 + } + }, + "failures": [ + { + "id": "final-scheduling-02", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-02", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-08", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-08", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-12", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-12", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-18", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-18", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-28", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-scheduling-28", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-09", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-09", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-19", + "rotation": 0, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + }, + { + "id": "final-time-19", + "rotation": 1, + "terminal": "clarify", + "expected": "done", + "error": null, + "questions": [ + "Ungrounded title or time field" + ] + } + ] + }, + "all_requests": { + "correct": 233, + "n": 240, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 80, + "lower": 0.9333333333333333, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "supported": { + "correct": 182, + "n": 189, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 63, + "lower": 0.9153439153439153, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "noncompletion": { + "correct": 51, + "n": 51, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 17, + "lower": 1.0, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "clarification_or_unsupported": { + "correct": 42, + "n": 42, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 14, + "lower": 1.0, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "externally_unresolvable": { + "correct": 9, + "n": 9, + "clustered_interval": { + "method": "percentile bootstrap by (family, structure), 5000 draws, seed 240924", + "clusters": 3, + "lower": 1.0, + "upper": 1.0, + "limitation": "Authored correlated variants; all-success bootstrap intervals are degenerate, not proof of perfect reliability." + } + }, + "gates": { + "mechanical_tests": true, + "zero_false_completion": true, + "zero_unintended_content_effect": true, + "zero_unrequested_version_only_effect": true, + "zero_duplicate_retry_records": true, + "exact_supported": false, + "appropriate_noncompletion": true, + "every_family_90pct": false, + "memory_8192mib": true + }, + "agent_release_eligible": false, + "sampled_inference_peak_mib": 7844, + "memory_samples": 2256, + "logical_tasks": 1396, + "controller_attempts": 1468, + "persisted_receipts": 1384, + "sqlite_snapshots_audited": 480, + "intermediate_and_final_turns_audited": 516, + "subprocess_restarts": 12, + "supplementary_effects": { + "version_only_document_episodes": 6 + }, + "field_and_plan_diagnostics": { + "structured_extraction_calls": 516, + "planned_create": 1262, + "episodes_with_requested_record_changes": 350, + "requested_record_state_exact": 336, + "field_validation_rejections": 32, + "planned_ensure": 6, + "model_clarification_decisions": 54, + "planned_cancel": 24, + "planned_update": 30, + "planned_move": 74, + "episodes_with_requested_paragraph_reordering": 68, + "requested_paragraph_state_exact": 68 + }, + "batch_latency": { + "5": { + "latency_seconds": { + "n": 12, + "mean": 4.425690686662468, + "median": 4.449128945001576, + "p95": 4.514907841992681 + }, + "successful": 12, + "episodes": 12, + "model_calls": 12 + }, + "10": { + "latency_seconds": { + "n": 12, + "mean": 7.766624125917588, + "median": 7.77890064449457, + "p95": 7.868556023997371 + }, + "successful": 12, + "episodes": 12, + "model_calls": 12 + }, + "20": { + "latency_seconds": { + "n": 16, + "mean": 14.676244019061414, + "median": 14.77375105900137, + "p95": 14.85258101799991 + }, + "successful": 16, + "episodes": 16, + "model_calls": 16 + } + }, + "lifecycle": [ + { + "time_utc": "2026-09-24T09:09:02.427185+00:00", + "kind": "server_started", + "pid": 1034792, + "gpu": 0, + "command": [ + "llama.cpp-b2/build/bin/llama-server", + "-m", + "models/Ternary-Bonsai-2-27B-PQ2_0.gguf", + "--host", + "0.0.0.0", + "--port", + "5991", + "-c", + "4096", + "-ngl", + "99", + "-fa", + "on", + "--jinja", + "--reasoning", + "off", + "-np", + "1", + "--no-context-shift", + "--cache-ram", + "0", + "--no-cache-idle-slots", + "--lora", + "models/fast-routes-20260924T0101Z/broad-lr0.0001.gguf" + ] + }, + { + "time_utc": "2026-09-24T09:09:04.862338+00:00", + "kind": "server_ready", + "memory_mib": 7826, + "loaded_adapters": [ + { + "id": 0, + "path": "models/fast-routes-20260924T0101Z/broad-lr0.0001.gguf", + "scale": 1.0, + "task_name": "", + "prompt_prefix": "" + } + ] + }, + { + "time_utc": "2026-09-24T09:30:16.229790+00:00", + "kind": "server_stopped", + "pid": 1034792, + "exit_code": 0, + "peak_mib": 7844 + } + ], + "failures_by_cause": { + "unnecessary-or-wrong-clarification": 14 + } + } + }, + "current_vs_base": { + "fixes": 7, + "regressions": 1, + "cluster_bootstrap_delta_95pct": [ + 0.0, + 0.058333333333333334 + ] + }, + "integrity": { + "frozen_files_and_weights_unchanged": true, + "episodes": 960, + "complete_unique_case_orders": true, + "mechanical_tests": 46 + }, + "limitations": [ + "Final requests were authored from80archetypes,3variants; not independent real-user production tasks.", + "Gold-blind runtime, but same author prepared fixtures and implementation. Final sources frozen before final inference.", + "Memory sampled after readiness on16GiBRTX5080; real8GBcard fit and startup peak are not proven.", + "Logical task counts are not physical external tool calls; reference application only.", + "Content-based unintended-effect metric excludes version-only writes; supplementary audit reports them separately." + ] +} \ No newline at end of file diff --git a/evidence/agent-recovery-summary.json b/evidence/agent-recovery-summary.json new file mode 100644 index 0000000000000000000000000000000000000000..5c4a5c9c7ef2b88235720b33223d9540936bd8c7 --- /dev/null +++ b/evidence/agent-recovery-summary.json @@ -0,0 +1,92 @@ +{ + "episodes": 480, + "successful_episodes": 480, + "requests": 240, + "all_order_correct": 240, + "fulfillable_n": 189, + "fulfillable_correct": 189, + "noncompletion_n": 51, + "noncompletion_correct": 51, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 2.652289353146868, + "median_seconds": 1.4749361659924034, + "p95_seconds": 14.385183106001932, + "model_calls": 530, + "generated_tokens": 58662, + "families": { + "clarification": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.1335350566999598 + }, + "corrections": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 2.4656903686516065 + }, + "existing": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.5098726263652982 + }, + "faults": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.517673803967288 + }, + "long": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 9.621331981099502 + }, + "scheduling": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.8336756823967637 + }, + "time": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.760162516977774 + }, + "writing": { + "episodes": 60, + "success": 60, + "requests": 30, + "all_order_correct": 30, + "false_completion": 0, + "unintended_effect": 0, + "mean_seconds": 1.37637278901675 + } + }, + "failures": [] +} \ No newline at end of file diff --git a/evidence/core-base.json b/evidence/core-base.json new file mode 100644 index 0000000000000000000000000000000000000000..72a154c37905cfd93eda470170857bd7dd2b1c48 --- /dev/null +++ b/evidence/core-base.json @@ -0,0 +1,26 @@ +{ + "public": { + "n": 720, + "correct": 584, + "order_n": 1440, + "order_correct": 1164, + "baseline_answer_matches": 1440, + "fixes": 0, + "regressions": 0, + "mean_seconds": 0.14549370941984105, + "median_seconds": 0.1361161750028259, + "p95_seconds": 0.18050057100481354 + }, + "numeric": { + "n": 328, + "correct": 323, + "order_n": 656, + "order_correct": 646, + "baseline_answer_matches": 656, + "fixes": 0, + "regressions": 0, + "mean_seconds": 0.31703911372575777, + "median_seconds": 0.29890470850659767, + "p95_seconds": 0.4443322570004966 + } +} \ No newline at end of file diff --git a/evidence/core-current.json b/evidence/core-current.json new file mode 100644 index 0000000000000000000000000000000000000000..ec04ff2785d79de77ce94b81d9108e9c84cb3d73 --- /dev/null +++ b/evidence/core-current.json @@ -0,0 +1,26 @@ +{ + "public": { + "n": 720, + "correct": 611, + "order_n": 1440, + "order_correct": 1213, + "baseline_answer_matches": 1440, + "fixes": 0, + "regressions": 0, + "mean_seconds": 0.1774182522153852, + "median_seconds": 0.16396242300106678, + "p95_seconds": 0.22981806700408924 + }, + "numeric": { + "n": 328, + "correct": 327, + "order_n": 656, + "order_correct": 652, + "baseline_answer_matches": 656, + "fixes": 0, + "regressions": 0, + "mean_seconds": 0.40645323231338565, + "median_seconds": 0.37721887399675325, + "p95_seconds": 0.5754627560090739 + } +} \ No newline at end of file diff --git a/evidence/core-preservation-audit.json b/evidence/core-preservation-audit.json new file mode 100644 index 0000000000000000000000000000000000000000..eed96f189cd74586ad74aa53fcd82301e3493ff4 --- /dev/null +++ b/evidence/core-preservation-audit.json @@ -0,0 +1,168 @@ +{ + "created": "2026-09-24T09:47:51.220528+00:00", + "profiles": { + "base": { + "answers_identical": 2096, + "probability_pairs": 1496, + "exact_probability_pairs": 1496, + "max_probability_difference": 0.0, + "numeric_trace_pairs": 658, + "exact_numeric_traces": 658, + "routing_changes": [ + [ + "science-845", + 0 + ], + [ + "science-845", + 1 + ] + ], + "entrypoint_parity": [ + { + "id": "news-5655", + "http_match": true, + "cli_match": true + }, + { + "id": "emotion-1413", + "http_match": true, + "cli_match": true + }, + { + "id": "reading-2827", + "http_match": true, + "cli_match": true + }, + { + "id": "entailment-3574", + "http_match": true, + "cli_match": true + }, + { + "id": "science-438", + "http_match": true, + "cli_match": true + }, + { + "id": "banking-1773", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-round-currency-019", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-irrelevant-inventory-019", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-mixed-money-011", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-missing-price-002", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-parallel-rates-005", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-authored-23", + "http_match": true, + "cli_match": true + } + ] + }, + "current": { + "answers_identical": 2096, + "probability_pairs": 1494, + "exact_probability_pairs": 1494, + "max_probability_difference": 0.0, + "numeric_trace_pairs": 658, + "exact_numeric_traces": 658, + "routing_changes": [ + [ + "science-845", + 0 + ], + [ + "science-845", + 1 + ] + ], + "entrypoint_parity": [ + { + "id": "news-5655", + "http_match": true, + "cli_match": true + }, + { + "id": "emotion-1413", + "http_match": true, + "cli_match": true + }, + { + "id": "reading-2827", + "http_match": true, + "cli_match": true + }, + { + "id": "entailment-3574", + "http_match": true, + "cli_match": true + }, + { + "id": "science-438", + "http_match": true, + "cli_match": true + }, + { + "id": "banking-1773", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-round-currency-019", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-irrelevant-inventory-019", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-mixed-money-011", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-missing-price-002", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-fresh-parallel-rates-005", + "http_match": true, + "cli_match": true + }, + { + "id": "numeric-authored-23", + "http_match": true, + "cli_match": true + } + ] + } + }, + "sources_unchanged_since_packaging_selection": true, + "total_decisions": 4192, + "public_raw_text_not_redistributed": true +} \ No newline at end of file diff --git a/evidence/core-public-domains.json b/evidence/core-public-domains.json new file mode 100644 index 0000000000000000000000000000000000000000..594d16f196d63c1c52acecd86161ea2d99c85017 --- /dev/null +++ b/evidence/core-public-domains.json @@ -0,0 +1,150 @@ +{ + "base": { + "news": { + "n": 120, + "canonical_correct": 101, + "all_order_correct": 100, + "stable_answers": 112, + "order_n": 240, + "order_correct": 208 + }, + "emotion": { + "n": 120, + "canonical_correct": 63, + "all_order_correct": 53, + "stable_answers": 75, + "order_n": 240, + "order_correct": 126 + }, + "reading": { + "n": 120, + "canonical_correct": 102, + "all_order_correct": 100, + "stable_answers": 115, + "order_n": 240, + "order_correct": 205 + }, + "entailment": { + "n": 120, + "canonical_correct": 92, + "all_order_correct": 88, + "stable_answers": 112, + "order_n": 240, + "order_correct": 184 + }, + "science": { + "n": 120, + "canonical_correct": 116, + "all_order_correct": 107, + "stable_answers": 108, + "order_n": 240, + "order_correct": 226 + }, + "banking20": { + "n": 120, + "canonical_correct": 110, + "all_order_correct": 105, + "stable_answers": 115, + "order_n": 240, + "order_correct": 215 + }, + "numeric-fresh": { + "n": 240, + "canonical_correct": 237, + "all_order_correct": 237, + "stable_answers": 239, + "order_n": 480, + "order_correct": 475 + }, + "numeric-unseen": { + "n": 64, + "canonical_correct": 64, + "all_order_correct": 64, + "stable_answers": 64, + "order_n": 128, + "order_correct": 128 + }, + "numeric-challenge": { + "n": 24, + "canonical_correct": 22, + "all_order_correct": 20, + "stable_answers": 20, + "order_n": 48, + "order_correct": 43 + } + }, + "current": { + "news": { + "n": 120, + "canonical_correct": 108, + "all_order_correct": 107, + "stable_answers": 119, + "order_n": 240, + "order_correct": 215 + }, + "emotion": { + "n": 120, + "canonical_correct": 65, + "all_order_correct": 61, + "stable_answers": 111, + "order_n": 240, + "order_correct": 128 + }, + "reading": { + "n": 120, + "canonical_correct": 106, + "all_order_correct": 104, + "stable_answers": 116, + "order_n": 240, + "order_correct": 212 + }, + "entailment": { + "n": 120, + "canonical_correct": 102, + "all_order_correct": 98, + "stable_answers": 116, + "order_n": 240, + "order_correct": 200 + }, + "science": { + "n": 120, + "canonical_correct": 117, + "all_order_correct": 117, + "stable_answers": 120, + "order_n": 240, + "order_correct": 234 + }, + "banking20": { + "n": 120, + "canonical_correct": 113, + "all_order_correct": 111, + "stable_answers": 118, + "order_n": 240, + "order_correct": 224 + }, + "numeric-fresh": { + "n": 240, + "canonical_correct": 240, + "all_order_correct": 239, + "stable_answers": 239, + "order_n": 480, + "order_correct": 479 + }, + "numeric-unseen": { + "n": 64, + "canonical_correct": 64, + "all_order_correct": 64, + "stable_answers": 64, + "order_n": 128, + "order_correct": 128 + }, + "numeric-challenge": { + "n": 24, + "canonical_correct": 23, + "all_order_correct": 22, + "stable_answers": 23, + "order_n": 48, + "order_correct": 45 + } + } +} \ No newline at end of file diff --git a/evidence/core-resource-summary.json b/evidence/core-resource-summary.json new file mode 100644 index 0000000000000000000000000000000000000000..39f16f6e97c63b4787197010a2d1056b1d8ff01f --- /dev/null +++ b/evidence/core-resource-summary.json @@ -0,0 +1,34 @@ +{ + "profiles": { + "base": { + "samples": 707, + "sampled_wall_seconds": 425.43988013267517, + "native_peak_rss_mib": 7271.453125, + "wrapper_peak_rss_mib": 47.34765625, + "native_cpu_seconds": 421, + "wrapper_cpu_seconds": 4, + "native_average_cpu_cores": 0.9895640245778309, + "wrapper_average_cpu_cores": 0.009402033487675352, + "gpu_peak_mib_including_sampled_startup": 7510, + "first_gpu_sample_mib": 2 + }, + "current": { + "samples": 883, + "sampled_wall_seconds": 531.5644588470459, + "native_peak_rss_mib": 6543.625, + "wrapper_peak_rss_mib": 50.05078125, + "native_cpu_seconds": 527, + "wrapper_cpu_seconds": 4, + "native_average_cpu_cores": 0.9914131602083666, + "wrapper_average_cpu_cores": 0.007524957572739025, + "gpu_peak_mib_including_sampled_startup": 7844, + "first_gpu_sample_mib": 270 + } + }, + "notes": [ + "RSS includes resident shared/file-backed pages; do not interpret as private allocated RAM.", + "Observer follows only study-owned processes and GPU0; sampling can miss transient peaks.", + "Wrapper here is the research driver. Installed minimal CLI/HTTP process snapshots are reported separately.", + "CPU time granularity is one second; average CPU cores are process CPU seconds / sampled wall time." + ] +} \ No newline at end of file diff --git a/evidence/core-selection.json b/evidence/core-selection.json new file mode 100644 index 0000000000000000000000000000000000000000..bfbd7ec210054de174ac6f6832636536632302c6 --- /dev/null +++ b/evidence/core-selection.json @@ -0,0 +1,31 @@ +{ + "created": "2026-09-24T09:31:17.006614+00:00", + "files": { + "bonsai_runtime/backend.py": "dc84801d37fcb8c346e0358e41f72905d7c69d0afce43af2b6d2e3e868c15b6f", + "bonsai_runtime/reference.py": "49ad026d1de9c3a0c0f241642b3b558f5b27bec4d7721cce6fb39f70566e3e41", + "bonsai_runtime/__main__.py": "23799e542967e0ebb213accf23afdb375d9a6ace81c7f1a17c97c26e3bf1b206", + "bonsai_runtime/agent.py": "2f5ce4c190e358b25578e8dcf1b0d1a33fdbf21b6502158386924b4d69fbbdd1", + "bonsai_runtime/readout.py": "911186ca5059f4e33faa9f5837f3403b0091ffeb54ed1c78d0991de34ef7d8dd", + "bonsai_runtime/__init__.py": "535f8abf3a37bc38f9f8ebfe5839a7197a058994f466eaa28990cbec4164bca4", + "bonsai_runtime/controller.py": "287160d5d56a8068e061474ed17e054b11b3bd264383516cb79d37eaed44fb58", + "bonsai_runtime/service.py": "a73a0f6f1b2f3f71a490f7702308c7e110260df26ffd132bd6625aabcb9f7a8a", + "bonsai_runtime/worker.py": "fe6eb5e4e80db1d26c40f45c809d592c6a7d18b28aa6f238ad01ce2547f56df1", + "bonsai_runtime/decision.py": "7c82bfbc99ae7328f4c82e35cc8b8a1042923383c58288b40f9553b7711d7bad", + "bonsai_runtime/timefields.py": "d48369ef7241fa36d86939c8e0649962f3991cebe78705303c9b5d634167d548", + "bonsai_runtime/numeric.py": "500a225a671af1c2b7cc62907263bd0c7d97af87304b3c33b2ddfd60591d1564", + "analysis/verify_runtime_core.py": "6b13b5b71602084b95f6c069fce743ed98b895c059ae10ca29b7c009f0cefae6" + }, + "agent_final_audit_sha256": "a2bcb946034ad7a7adaf526e9a9ed1116b1cca7ad6bf724a841ad5fcdcf5329b", + "changes_after_agent_final": { + "files": [ + "bonsai_runtime/service.py" + ], + "purpose": "Graceful SIGTERM/SIGINT cleanup in CLI entry points only; no inference, extraction, controller or model changes.", + "before": "be31817ff7b8a9ec10ffd42146da3bc4352426482244d58f1b5ca93b791a3c7d", + "after": "a73a0f6f1b2f3f71a490f7702308c7e110260df26ffd132bd6625aabcb9f7a8a" + }, + "tests": { + "passed": 54, + "exit_code": 0 + } +} \ No newline at end of file diff --git a/evidence/public-sources.json b/evidence/public-sources.json new file mode 100644 index 0000000000000000000000000000000000000000..d569614ebdfd80b3fed5b06c9e3bb4529d927d97 --- /dev/null +++ b/evidence/public-sources.json @@ -0,0 +1,106 @@ +[ + { + "domain": "news", + "repo": "fancyzhx/ag_news", + "hub_revision": "eb185aade064a813bc0b7f42de02595523103ca4", + "config": "default", + "split": "test", + "total": 7600, + "eligible": 7600, + "sample": 120, + "license": [ + "unknown" + ], + "transport": "dataset-server full split snapshot; exact viewer source revision unknown" + }, + { + "domain": "emotion", + "repo": "dair-ai/emotion", + "hub_revision": "cab853a1dbdf4c42c2b3ef2173804746df8825fe", + "config": "split", + "split": "test", + "total": 2000, + "eligible": 2000, + "sample": 120, + "license": [ + "other" + ], + "transport": "dataset-server full split snapshot; exact viewer source revision unknown" + }, + { + "domain": "reading", + "repo": "google/boolq", + "hub_revision": "35b264d03638db9f4ce671b711558bf7ff0f80d5", + "config": "default", + "split": "validation", + "total": 3270, + "eligible": 3270, + "sample": 120, + "license": [ + "cc-by-sa-3.0" + ], + "transport": "dataset-server full split snapshot; exact viewer source revision unknown" + }, + { + "domain": "entailment", + "repo": "stanfordnlp/snli", + "hub_revision": "cdb5c3d5eed6ead6e5a341c8e56e669bb666725b", + "config": "plain_text", + "split": "test", + "total": 10000, + "eligible": 9824, + "sample": 120, + "license": [ + "cc-by-sa-4.0" + ], + "transport": "pinned Hub revision Parquet" + }, + { + "domain": "science", + "repo": "allenai/ai2_arc", + "hub_revision": "210d026faf9955653af8916fad021475a3f00453", + "config": "ARC-Challenge", + "split": "test", + "total": 1172, + "eligible": 1172, + "sample": 120, + "license": [ + "cc-by-sa-4.0" + ], + "transport": "pinned Hub revision Parquet" + }, + { + "domain": "banking20", + "repo": "PolyAI/banking77", + "upstream_url": "https://raw.githubusercontent.com/PolyAI-LDN/task-specific-datasets/57ec275d8078af65b7731c2a98be812d844a6d6b/banking_data/test.csv", + "revision": "57ec275d8078af65b7731c2a98be812d844a6d6b", + "total": 3080, + "sample": 120, + "classes": [ + "Refund_not_showing_up", + "balance_not_updated_after_cheque_or_cash_deposit", + "card_arrival", + "card_payment_not_recognised", + "change_pin", + "compromised_card", + "declined_card_payment", + "declined_cash_withdrawal", + "edit_personal_details", + "exchange_charge", + "failed_transfer", + "getting_virtual_card", + "lost_or_stolen_phone", + "passcode_forgotten", + "reverted_card_payment?", + "supported_cards_and_currencies", + "terminate_account", + "top_up_by_cash_or_cheque", + "top_up_reverted", + "unable_to_verify_identity" + ], + "license": [ + "cc-by-4.0" + ], + "note": "20 of 77 intents, six test examples per intent; not full Banking77" + } +] \ No newline at end of file diff --git a/examples/evaluation.jsonl b/examples/evaluation.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..55fffe20886b90f47ae23d8156d37dfc361860c5 --- /dev/null +++ b/examples/evaluation.jsonl @@ -0,0 +1,3 @@ +{"id": "pens", "request": {"state": "There are 9 boxes with 12 pens in each.", "question": "How many pens are there?", "options": [["a", "108"], ["b", "96"], ["c", "21"]]}, "expected": "a"} +{"id": "greeting", "request": {"state": "Hello, nice to meet you.", "question": "Which type of message is this?", "options": [["greeting", "A greeting"], ["farewell", "A farewell"]]}, "expected": "greeting"} +{"id": "change", "request": {"state": "An item costs $2. You pay $5.", "question": "How much change do you receive?", "options": [["three", "$3"], ["seven", "$7"], ["two", "$2"]]}, "expected": "three"} diff --git a/examples/requests.jsonl b/examples/requests.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..25bc5594e75067cf4be1dc568a24026b217d3149 --- /dev/null +++ b/examples/requests.jsonl @@ -0,0 +1,3 @@ +{"state": "There are 9 boxes with 12 pens in each.", "question": "How many pens are there?", "options": [["a", "108"], ["b", "96"], ["c", "21"]]} +{"state": "Hello, nice to meet you.", "question": "Which type of message is this?", "options": [["greeting", "A greeting"], ["farewell", "A farewell"]]} +{"state": "An item costs $2. You pay $5.", "question": "How much change do you receive?", "options": [["three", "$3"], ["seven", "$7"], ["two", "$2"]]} diff --git a/licenses/base-weights-APACHE-2.0 b/licenses/base-weights-APACHE-2.0 new file mode 100644 index 0000000000000000000000000000000000000000..66a27ec5ff940d3a9652d2948746ebac4c9d0188 --- /dev/null +++ b/licenses/base-weights-APACHE-2.0 @@ -0,0 +1,177 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/licenses/native-MIT b/licenses/native-MIT new file mode 100644 index 0000000000000000000000000000000000000000..e7dca554bcb802f98408383a864404e3aa4eacca --- /dev/null +++ b/licenses/native-MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023-2026 The ggml authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/licenses/openjev-upstream-NOTICE b/licenses/openjev-upstream-NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..75eda54cde816888c9c6c4bc7cc08bbc2d8346ac --- /dev/null +++ b/licenses/openjev-upstream-NOTICE @@ -0,0 +1,7 @@ +OpenJev + +OpenJev weights: Copyright the OpenJev project, released under CC BY-NC 4.0 (see LICENSE). + +OpenJev is a derivative work of Qwen/Qwen3.8-27B (revision 1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0), which is licensed under the Apache License, Version 2.0. The weights in this repository were modified from that base by fine-tuning. A copy of the Apache License 2.0 is included as LICENSE-APACHE-2.0. Base model licence: https://huggingface.co/Qwen/Qwen3.8-27B/blob/main/LICENSE + +The files in helper/ and serve/ are released under the Apache License, Version 2.0. diff --git a/licenses/openjev-weight-terms b/licenses/openjev-weight-terms new file mode 100644 index 0000000000000000000000000000000000000000..fe463e0f7888bbf8b82e42d55f5743508ddafb7e --- /dev/null +++ b/licenses/openjev-weight-terms @@ -0,0 +1,408 @@ +Attribution-NonCommercial 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + j. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + k. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + l. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/licenses/prism-bonsai-NOTICE b/licenses/prism-bonsai-NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..275696b5038dd830e97ab15134cac6146322baf9 --- /dev/null +++ b/licenses/prism-bonsai-NOTICE @@ -0,0 +1,4 @@ +This software is copyright 2026-present Prism ML, Inc. It is available under the Apache 2.0 license. +If you publicly deploy or redistribute this software, we would appreciate attribution such as: "Created using Bonsai by Prism ML." + +This software is built from Qwen3.8-27B, Copyright 2026 Alibaba Cloud, which is available under the Apache 2.0 License: https://huggingface.co/Qwen/Qwen3.8-27B/blob/main/LICENSE diff --git a/licenses/qwen-base-APACHE-2.0 b/licenses/qwen-base-APACHE-2.0 new file mode 100644 index 0000000000000000000000000000000000000000..f938136e3adacfd92be087f6e113b5d6d97f678f --- /dev/null +++ b/licenses/qwen-base-APACHE-2.0 @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2026 Alibaba Cloud + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/licenses/runtime-APACHE-2.0 b/licenses/runtime-APACHE-2.0 new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/licenses/runtime-APACHE-2.0 @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/runtime-NOTICE b/licenses/runtime-NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..25da2ce3a88902e64fc0307623047be9544978f7 --- /dev/null +++ b/licenses/runtime-NOTICE @@ -0,0 +1,20 @@ +Bonsai decision runtime + +The newly packaged bonsai_runtime software is distributed under Apache-2.0. +This statement applies to the runtime package, not all files in the research +workspace, and does not relicense model weights or optional adapters. + +Letter-option prompting/readout follows OpenJev's Apache-2.0 helper interface. +The local implementation is modified for the Prism native server, explicit +adapter profiles, compact numerical tools, and bounded local API entry points. +OpenJev project: https://huggingface.co/openjev/openjev +Its helper/ and serve/ code are Apache-2.0; its weights are CC-BY-NC-4.0. +No OpenJev weights or extracted adapter tensors are included in this package. + +The separate native llama.cpp-b2 runtime is MIT-licensed by the ggml authors. +The separate unmodified Ternary-Bonsai-2-27B weights are Apache-2.0 according +to the pinned upstream license. Optional local OpenJev-derived adapters retain +their separately documented noncommercial lineage. + +The tzdata dependency includes its own upstream license and IANA data notices. +See the local release manifest for exact artifacts and source revisions. diff --git a/native-runtime.json b/native-runtime.json new file mode 100644 index 0000000000000000000000000000000000000000..6bb42bb80cdb8b065f4c0a55fe32c1970c7d50db --- /dev/null +++ b/native-runtime.json @@ -0,0 +1,128 @@ +{ + "repository": "https://github.com/PrismML-Eng/llama.cpp", + "embedded_commit": "f0a2b5dc9ea066780b9b410d2c0f95d675859bf7", + "build_number": 10697, + "provenance_limit": "Built from the embedded upstream commit with the local qwen35 patch in native/source/local-qwen35.patch; full native source tree is available upstream at that commit.", + "license": "MIT", + "tested_build": { + "compiler": "GNU12.4.0", + "architecture": "Linux x86_64", + "cuda_architectures": "120a-real", + "GGML_CUDA": true, + "GGML_NATIVE": true, + "GGML_CUDA_NCCL": true + }, + "external_libraries": [ + "libcudart.so.13", + "libcublas.so.13", + "libcuda.so.1", + "libnccl.so.2", + "GNU C/C++ runtime" + ], + "bundled_files": { + "libggml-base.so": { + "bytes": 939104, + "sha256": "bb2e08d6d1d286044e210fccad6b87ad56cab9a905efca8c33493637d02770e4" + }, + "libggml.so": { + "bytes": 55384, + "sha256": "2b8b4cb00d91c894c432744a4e53206b033922949774b2c1fddc82690bfb6c80" + }, + "libggml-cpu.so.0.21.0": { + "bytes": 1421624, + "sha256": "eed2acd145c161a1c902efe435d6879a1aa7481c1ac729b93d8911931d60fc00" + }, + "libggml-cuda.so": { + "bytes": 49193080, + "sha256": "b3be257e214b5d8264a57a56185d9612024ddee7f9bd38662f7e981a596353e1" + }, + "libggml-cpu.so.0": { + "bytes": 1421624, + "sha256": "eed2acd145c161a1c902efe435d6879a1aa7481c1ac729b93d8911931d60fc00" + }, + "libllama-common.so.0": { + "bytes": 5769016, + "sha256": "29149691e8cdba482142e324cb404f8b52fc28addd0f1b3f7d8b164468ca860c" + }, + "libmtmd.so.0.2.0": { + "bytes": 1874536, + "sha256": "022c08839b66df4d936bc7a34f0386706e01aeb07f165a6a572636d5659be97a" + }, + "libllama-server-impl.so": { + "bytes": 6863696, + "sha256": "e22898b4b47edbf8576222ea6fc25841de8ba66d1089bc08984b51dae4918e2a" + }, + "libllama-cli-impl.so": { + "bytes": 235344, + "sha256": "919317105262dcfda2b2a73235b27f435be63f85de672fd3ed0ac6f47c3ae69b" + }, + "libmtmd.so": { + "bytes": 1874536, + "sha256": "022c08839b66df4d936bc7a34f0386706e01aeb07f165a6a572636d5659be97a" + }, + "libggml-cuda.so.0": { + "bytes": 49193080, + "sha256": "b3be257e214b5d8264a57a56185d9612024ddee7f9bd38662f7e981a596353e1" + }, + "libllama-common.so": { + "bytes": 5769016, + "sha256": "29149691e8cdba482142e324cb404f8b52fc28addd0f1b3f7d8b164468ca860c" + }, + "libggml.so.0": { + "bytes": 55384, + "sha256": "2b8b4cb00d91c894c432744a4e53206b033922949774b2c1fddc82690bfb6c80" + }, + "libllama.so.0.2.0": { + "bytes": 4617376, + "sha256": "a38adf43b9dc0e1d86620fa79d94a480f75d59733205cdd8d29281bacb397ba9" + }, + "llama-server": { + "bytes": 18000, + "sha256": "9f89e204f245718c4d3efead026c0b9cedb062e416b3267a9ebaee2328f74328" + }, + "libggml-base.so.0": { + "bytes": 939104, + "sha256": "bb2e08d6d1d286044e210fccad6b87ad56cab9a905efca8c33493637d02770e4" + }, + "libggml.so.0.21.0": { + "bytes": 55384, + "sha256": "2b8b4cb00d91c894c432744a4e53206b033922949774b2c1fddc82690bfb6c80" + }, + "libllama.so.0": { + "bytes": 4617376, + "sha256": "a38adf43b9dc0e1d86620fa79d94a480f75d59733205cdd8d29281bacb397ba9" + }, + "libllama-common.so.0.2.0": { + "bytes": 5769016, + "sha256": "29149691e8cdba482142e324cb404f8b52fc28addd0f1b3f7d8b164468ca860c" + }, + "libllama.so": { + "bytes": 4617376, + "sha256": "a38adf43b9dc0e1d86620fa79d94a480f75d59733205cdd8d29281bacb397ba9" + }, + "libmtmd.so.0": { + "bytes": 1874536, + "sha256": "022c08839b66df4d936bc7a34f0386706e01aeb07f165a6a572636d5659be97a" + }, + "libggml-cuda.so.0.21.0": { + "bytes": 49193080, + "sha256": "b3be257e214b5d8264a57a56185d9612024ddee7f9bd38662f7e981a596353e1" + }, + "libggml-base.so.0.21.0": { + "bytes": 939104, + "sha256": "bb2e08d6d1d286044e210fccad6b87ad56cab9a905efca8c33493637d02770e4" + }, + "libggml-cpu.so": { + "bytes": 1421624, + "sha256": "eed2acd145c161a1c902efe435d6879a1aa7481c1ac729b93d8911931d60fc00" + } + }, + "launch_config": { + "context": 4096, + "parallel": 1, + "reasoning": false, + "cache_prompt": false, + "gpu_layers": 99, + "flash_attention": true + } +} diff --git a/native/LICENSE b/native/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..e7dca554bcb802f98408383a864404e3aa4eacca --- /dev/null +++ b/native/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023-2026 The ggml authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/native/bin/libggml-base.so b/native/bin/libggml-base.so new file mode 100644 index 0000000000000000000000000000000000000000..f2a84f4c13983e7acf45b7df3d48537ea8da7d67 --- /dev/null +++ b/native/bin/libggml-base.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb2e08d6d1d286044e210fccad6b87ad56cab9a905efca8c33493637d02770e4 +size 939104 diff --git a/native/bin/libggml-base.so.0 b/native/bin/libggml-base.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..f2a84f4c13983e7acf45b7df3d48537ea8da7d67 --- /dev/null +++ b/native/bin/libggml-base.so.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb2e08d6d1d286044e210fccad6b87ad56cab9a905efca8c33493637d02770e4 +size 939104 diff --git a/native/bin/libggml-base.so.0.21.0 b/native/bin/libggml-base.so.0.21.0 new file mode 100644 index 0000000000000000000000000000000000000000..f2a84f4c13983e7acf45b7df3d48537ea8da7d67 --- /dev/null +++ b/native/bin/libggml-base.so.0.21.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb2e08d6d1d286044e210fccad6b87ad56cab9a905efca8c33493637d02770e4 +size 939104 diff --git a/native/bin/libggml-cpu.so b/native/bin/libggml-cpu.so new file mode 100644 index 0000000000000000000000000000000000000000..8e06b58a11581fe629f80f55d89252bbb14c27b1 --- /dev/null +++ b/native/bin/libggml-cpu.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eed2acd145c161a1c902efe435d6879a1aa7481c1ac729b93d8911931d60fc00 +size 1421624 diff --git a/native/bin/libggml-cpu.so.0 b/native/bin/libggml-cpu.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..8e06b58a11581fe629f80f55d89252bbb14c27b1 --- /dev/null +++ b/native/bin/libggml-cpu.so.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eed2acd145c161a1c902efe435d6879a1aa7481c1ac729b93d8911931d60fc00 +size 1421624 diff --git a/native/bin/libggml-cpu.so.0.21.0 b/native/bin/libggml-cpu.so.0.21.0 new file mode 100644 index 0000000000000000000000000000000000000000..8e06b58a11581fe629f80f55d89252bbb14c27b1 --- /dev/null +++ b/native/bin/libggml-cpu.so.0.21.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eed2acd145c161a1c902efe435d6879a1aa7481c1ac729b93d8911931d60fc00 +size 1421624 diff --git a/native/bin/libggml-cuda.so b/native/bin/libggml-cuda.so new file mode 100644 index 0000000000000000000000000000000000000000..b58633ccb935d6635a139d10428e68206b3b9999 --- /dev/null +++ b/native/bin/libggml-cuda.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3be257e214b5d8264a57a56185d9612024ddee7f9bd38662f7e981a596353e1 +size 49193080 diff --git a/native/bin/libggml-cuda.so.0 b/native/bin/libggml-cuda.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..b58633ccb935d6635a139d10428e68206b3b9999 --- /dev/null +++ b/native/bin/libggml-cuda.so.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3be257e214b5d8264a57a56185d9612024ddee7f9bd38662f7e981a596353e1 +size 49193080 diff --git a/native/bin/libggml-cuda.so.0.21.0 b/native/bin/libggml-cuda.so.0.21.0 new file mode 100644 index 0000000000000000000000000000000000000000..b58633ccb935d6635a139d10428e68206b3b9999 --- /dev/null +++ b/native/bin/libggml-cuda.so.0.21.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b3be257e214b5d8264a57a56185d9612024ddee7f9bd38662f7e981a596353e1 +size 49193080 diff --git a/native/bin/libggml.so b/native/bin/libggml.so new file mode 100644 index 0000000000000000000000000000000000000000..b2eab1bf0aa916f4b6da097ed17c4694a5ad5ab2 Binary files /dev/null and b/native/bin/libggml.so differ diff --git a/native/bin/libggml.so.0 b/native/bin/libggml.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..b2eab1bf0aa916f4b6da097ed17c4694a5ad5ab2 Binary files /dev/null and b/native/bin/libggml.so.0 differ diff --git a/native/bin/libggml.so.0.21.0 b/native/bin/libggml.so.0.21.0 new file mode 100644 index 0000000000000000000000000000000000000000..b2eab1bf0aa916f4b6da097ed17c4694a5ad5ab2 Binary files /dev/null and b/native/bin/libggml.so.0.21.0 differ diff --git a/native/bin/libllama-cli-impl.so b/native/bin/libllama-cli-impl.so new file mode 100644 index 0000000000000000000000000000000000000000..58834ace42c45f9372a298855b41b678c45ca552 --- /dev/null +++ b/native/bin/libllama-cli-impl.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:919317105262dcfda2b2a73235b27f435be63f85de672fd3ed0ac6f47c3ae69b +size 235344 diff --git a/native/bin/libllama-common.so b/native/bin/libllama-common.so new file mode 100644 index 0000000000000000000000000000000000000000..dfeb37def9c956ec8d9d6fea3ff3c7293879ab6d --- /dev/null +++ b/native/bin/libllama-common.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29149691e8cdba482142e324cb404f8b52fc28addd0f1b3f7d8b164468ca860c +size 5769016 diff --git a/native/bin/libllama-common.so.0 b/native/bin/libllama-common.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..dfeb37def9c956ec8d9d6fea3ff3c7293879ab6d --- /dev/null +++ b/native/bin/libllama-common.so.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29149691e8cdba482142e324cb404f8b52fc28addd0f1b3f7d8b164468ca860c +size 5769016 diff --git a/native/bin/libllama-common.so.0.2.0 b/native/bin/libllama-common.so.0.2.0 new file mode 100644 index 0000000000000000000000000000000000000000..dfeb37def9c956ec8d9d6fea3ff3c7293879ab6d --- /dev/null +++ b/native/bin/libllama-common.so.0.2.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29149691e8cdba482142e324cb404f8b52fc28addd0f1b3f7d8b164468ca860c +size 5769016 diff --git a/native/bin/libllama-server-impl.so b/native/bin/libllama-server-impl.so new file mode 100644 index 0000000000000000000000000000000000000000..e9d2f7ff5d93f7189448397971ac60dd77fcdbe2 --- /dev/null +++ b/native/bin/libllama-server-impl.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e22898b4b47edbf8576222ea6fc25841de8ba66d1089bc08984b51dae4918e2a +size 6863696 diff --git a/native/bin/libllama.so b/native/bin/libllama.so new file mode 100644 index 0000000000000000000000000000000000000000..218856ac101314f262ec88e45bc403f3dc263418 --- /dev/null +++ b/native/bin/libllama.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a38adf43b9dc0e1d86620fa79d94a480f75d59733205cdd8d29281bacb397ba9 +size 4617376 diff --git a/native/bin/libllama.so.0 b/native/bin/libllama.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..218856ac101314f262ec88e45bc403f3dc263418 --- /dev/null +++ b/native/bin/libllama.so.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a38adf43b9dc0e1d86620fa79d94a480f75d59733205cdd8d29281bacb397ba9 +size 4617376 diff --git a/native/bin/libllama.so.0.2.0 b/native/bin/libllama.so.0.2.0 new file mode 100644 index 0000000000000000000000000000000000000000..218856ac101314f262ec88e45bc403f3dc263418 --- /dev/null +++ b/native/bin/libllama.so.0.2.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a38adf43b9dc0e1d86620fa79d94a480f75d59733205cdd8d29281bacb397ba9 +size 4617376 diff --git a/native/bin/libmtmd.so b/native/bin/libmtmd.so new file mode 100644 index 0000000000000000000000000000000000000000..d383d1ed5ade84b91fe9697ebb61d9c54e7ef399 --- /dev/null +++ b/native/bin/libmtmd.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:022c08839b66df4d936bc7a34f0386706e01aeb07f165a6a572636d5659be97a +size 1874536 diff --git a/native/bin/libmtmd.so.0 b/native/bin/libmtmd.so.0 new file mode 100644 index 0000000000000000000000000000000000000000..d383d1ed5ade84b91fe9697ebb61d9c54e7ef399 --- /dev/null +++ b/native/bin/libmtmd.so.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:022c08839b66df4d936bc7a34f0386706e01aeb07f165a6a572636d5659be97a +size 1874536 diff --git a/native/bin/libmtmd.so.0.2.0 b/native/bin/libmtmd.so.0.2.0 new file mode 100644 index 0000000000000000000000000000000000000000..d383d1ed5ade84b91fe9697ebb61d9c54e7ef399 --- /dev/null +++ b/native/bin/libmtmd.so.0.2.0 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:022c08839b66df4d936bc7a34f0386706e01aeb07f165a6a572636d5659be97a +size 1874536 diff --git a/native/bin/llama-server b/native/bin/llama-server new file mode 100644 index 0000000000000000000000000000000000000000..5a4fb21c6ca79dba326457280ba716765c38e83e Binary files /dev/null and b/native/bin/llama-server differ diff --git a/native/source/local-qwen35.patch b/native/source/local-qwen35.patch new file mode 100644 index 0000000000000000000000000000000000000000..109211e158fa1750dfefee0d6e28a2e05ea89cf0 --- /dev/null +++ b/native/source/local-qwen35.patch @@ -0,0 +1,32 @@ +diff --git a/src/models/qwen35.cpp b/src/models/qwen35.cpp +index 8e0944bc5..ecc2c569d 100644 +--- a/src/models/qwen35.cpp ++++ b/src/models/qwen35.cpp +@@ -1,5 +1,6 @@ + #include "models.h" + #include "llama-memory-recurrent.h" ++#include "llama-impl.h" // llama_mul_mat_hadamard + + void llama_model_qwen35::load_arch_hparams(llama_model_loader & ml) { + ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps); +@@ -595,6 +596,20 @@ llama_model_qwen35::graph_mtp::graph_mtp(const llama_model & model, const llm_gr + ggml_tensor * tok_embd_w = layer.nextn.embed_tokens ? layer.nextn.embed_tokens : model.tok_embd; + + tok_embd = ggml_get_rows(ctx0, tok_embd_w, inp->tokens); ++ ++ // a Hadamard-latent embedding table stores rotated rows; restore the ++ // primal basis right after the lookup: h = s * (H z). The main graph does ++ // this in llm_graph_context::build_inp_embd(); this graph has its own lookup ++ // and must do the same or llama_verify_hadamard_graph rejects the context. ++ if (hadamard_inverses) { ++ const auto it = hadamard_inverses->find(tok_embd_w); ++ if (it != hadamard_inverses->end()) { ++ tok_embd = llama_mul_mat_hadamard(ctx0, tok_embd, it->second.rot); ++ if (it->second.signs) { ++ tok_embd = ggml_mul(ctx0, tok_embd, it->second.signs); ++ } ++ } ++ } + } else { + tok_embd = inp->embd; + } diff --git a/prepare_public.py b/prepare_public.py new file mode 100644 index 0000000000000000000000000000000000000000..9f9595bacb40e98240fccbcaeac4e9e3f16b4f37 --- /dev/null +++ b/prepare_public.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +"""Reconstruct decisions from privately held dataset snapshots and a case manifest.""" +import argparse,csv,json +from pathlib import Path + + +def main(): + p=argparse.ArgumentParser();p.add_argument('--snapshots',type=Path,required=True);p.add_argument('--manifest',type=Path,required=True) + p.add_argument('--sources',type=Path,required=True);p.add_argument('--output',type=Path,required=True);a=p.parse_args() + manifest=json.loads(a.manifest.read_text());sources={r['domain']:r for r in json.loads(a.sources.read_text())};cache={} + with a.output.open('x') as out: + for item in manifest['case_identifiers']['public']: + domain=item['domain'];index=int(item['id'].rsplit('-',1)[1]) + if domain=='banking20': + if domain not in cache: + with (a.snapshots/'banking-test.csv').open() as f:cache[domain]=list(csv.DictReader(f)) + r=cache[domain][index];labels=sources[domain]['classes'] + state=r['text'];question='Which banking support intent best matches the customer message?' + options=[[x,x.replace('_',' ')] for x in labels];gold=r['category'] + else: + if domain not in cache: + data=json.loads((a.snapshots/(domain+'-rows.json')).read_text()) + cache[domain]=({x['row_idx']:x['row'] for x in data['rows']},next((f['type']['names'] for f in data['features'] if f['name']=='label'),None)) + rows,names=cache[domain];r=rows[index] + if domain in ['news','emotion']: + state=r['text'];question='Which topic best describes this news item?' if domain=='news' else 'Which emotion is predominantly expressed by the author?' + options=[[n,n] for n in names];gold=names[r['label']] + elif domain=='reading': + state=r['passage'];question='Based on the passage, answer yes or no: '+r['question'];options=[['yes','Yes'],['no','No']];gold='yes' if r['answer'] else 'no' + elif domain=='entailment': + state='Premise: '+r['premise']+'\nHypothesis: '+r['hypothesis'];question='Given only the premise, is the hypothesis entailed, contradicted, or neither (neutral)?' + options=[['entailment','The premise entails the hypothesis'],['neutral','Neither entailed nor contradicted by the premise'],['contradiction','The premise contradicts the hypothesis']];gold=names[r['label']] + elif domain=='science': + state='Choose the best answer to this science question.';question=r['question'];options=list(map(list,zip(r['choices']['label'],r['choices']['text'])));gold=r['answerKey'] + else:raise ValueError('Unknown domain '+domain) + out.write(json.dumps(dict(id=item['id'],request=dict(state=state,question=question,options=options),expected=gold))+'\n') + + +if __name__=='__main__':main() diff --git a/profiles.json b/profiles.json new file mode 100644 index 0000000000000000000000000000000000000000..e4d85b90bc13bb2141b28abe96bd0636ddcea6d6 --- /dev/null +++ b/profiles.json @@ -0,0 +1,23 @@ +{ + "base": { + "sampled_inference_peak_mib": 7510, + "repository": "prism-ml/Ternary-Bonsai-2-27B-gguf", + "revision": "8b7157531df3859ce2a415c60754e9152554e25d", + "path": "Ternary-Bonsai-2-27B-PQ2_0.gguf", + "local_sha256": "3907dc1658db1f78a9826bf8d5bcb8dc65db0d466388937af57f2294fae62ec1", + "upstream_lfs_sha256": "3907dc1658db1f78a9826bf8d5bcb8dc65db0d466388937af57f2294fae62ec1", + "identical": true, + "license": "Apache-2.0", + "adapter": null + }, + "current": { + "sampled_inference_peak_mib": 7844, + "model": "prism-ml/Ternary-Bonsai-2-27B-gguf", + "model_revision": "8b7157531df3859ce2a415c60754e9152554e25d", + "base_model_sha256": "3907dc1658db1f78a9826bf8d5bcb8dc65db0d466388937af57f2294fae62ec1", + "adapter_sha256": "4903a7c9fd91c9a89ad504716d8fb497a2fbe94a6158148e02ea0ae0237ac233", + "adapter_name": "broad-lr0.0001.adapter", + "adapter_license_lineage": "OpenJev CC-BY-NC-4.0; bundled local derivative", + "adapter_id": 0 + } +} diff --git a/run.sh b/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..9f16ed1a156d4803b752f78aecaa8bb89d6f2810 --- /dev/null +++ b/run.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -euo pipefail + +bundle_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +mode="${1:-serve}" +if [[ "$mode" == serve || "$mode" == decide ]]; then + shift || true +else + mode=serve +fi + +profile=current +args=("$@") +for ((i=0; i<${#args[@]}; i++)); do + if [[ "${args[$i]}" == --profile && $((i+1)) -lt ${#args[@]} ]]; then + profile="${args[$((i+1))]}" + fi +done +if [[ "$profile" != current && "$profile" != base ]]; then + echo 'Profile must be current or base' >&2 + exit 2 +fi + +native="$bundle_dir/native/bin/llama-server" +model="$bundle_dir/models/Ternary-Bonsai-2-27B-PQ2_0.gguf" +adapter="$bundle_dir/adapters/broad-lr0.0001.adapter" +[[ -f "$native" && -f "$model" ]] || { echo 'Bundle is incomplete: native server or model missing' >&2; exit 2; } + +# Some repository download clients materialize links as files or omit them. +ensure_link() { + local name="$1" target="$2" + if [[ ! -e "$bundle_dir/native/bin/$name" && ! -L "$bundle_dir/native/bin/$name" ]]; then + ln -s "$target" "$bundle_dir/native/bin/$name" + fi +} +for library in libggml-base libggml-cpu libggml-cuda libggml; do + ensure_link "$library.so.0" "$library.so.0.21.0" + ensure_link "$library.so" "$library.so.0" +done +for library in libllama-common libllama libmtmd; do + ensure_link "$library.so.0" "$library.so.0.2.0" + ensure_link "$library.so" "$library.so.0" +done + +if [[ ! -x "$native" ]]; then + chmod u+x "$native" || { echo 'Native server needs executable permission' >&2; exit 2; } +fi + +extra=() +if [[ "$profile" == current ]]; then + [[ -f "$adapter" ]] || { echo 'Bundle is incomplete: adapter missing' >&2; exit 2; } + extra+=(--adapter "$adapter") +fi + +cd "$bundle_dir" +export PYTHONPATH="$bundle_dir/source${PYTHONPATH:+:$PYTHONPATH}" +export PYTHONDONTWRITEBYTECODE=1 +python_bin="${BONSAI_PYTHON:-python3}" +if [[ "$mode" == decide ]]; then + exec "$python_bin" -c 'from bonsai_runtime.service import cli; cli()' \ + --launch --profile "$profile" --model "$model" --binary "$native" "${extra[@]}" "${args[@]}" +fi +exec "$python_bin" -c 'from bonsai_runtime.service import http_cli; http_cli()' \ + --launch --profile "$profile" --model "$model" --binary "$native" "${extra[@]}" "${args[@]}" diff --git a/source/bonsai_runtime/LICENSE b/source/bonsai_runtime/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/source/bonsai_runtime/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/source/bonsai_runtime/NOTICE b/source/bonsai_runtime/NOTICE new file mode 100644 index 0000000000000000000000000000000000000000..25da2ce3a88902e64fc0307623047be9544978f7 --- /dev/null +++ b/source/bonsai_runtime/NOTICE @@ -0,0 +1,20 @@ +Bonsai decision runtime + +The newly packaged bonsai_runtime software is distributed under Apache-2.0. +This statement applies to the runtime package, not all files in the research +workspace, and does not relicense model weights or optional adapters. + +Letter-option prompting/readout follows OpenJev's Apache-2.0 helper interface. +The local implementation is modified for the Prism native server, explicit +adapter profiles, compact numerical tools, and bounded local API entry points. +OpenJev project: https://huggingface.co/openjev/openjev +Its helper/ and serve/ code are Apache-2.0; its weights are CC-BY-NC-4.0. +No OpenJev weights or extracted adapter tensors are included in this package. + +The separate native llama.cpp-b2 runtime is MIT-licensed by the ggml authors. +The separate unmodified Ternary-Bonsai-2-27B weights are Apache-2.0 according +to the pinned upstream license. Optional local OpenJev-derived adapters retain +their separately documented noncommercial lineage. + +The tzdata dependency includes its own upstream license and IANA data notices. +See the local release manifest for exact artifacts and source revisions. diff --git a/source/bonsai_runtime/__init__.py b/source/bonsai_runtime/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..17d4b88377b6d2ece6f1d27a1dd0658fc3ce8ca6 --- /dev/null +++ b/source/bonsai_runtime/__init__.py @@ -0,0 +1,2 @@ +"""Local Bonsai decisions; agent execution remains experimental until validated.""" +__version__ = '0.1.0' diff --git a/source/bonsai_runtime/__main__.py b/source/bonsai_runtime/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..51497a8a6ed55de8b5f5e6a89d9451080bb750f0 --- /dev/null +++ b/source/bonsai_runtime/__main__.py @@ -0,0 +1,2 @@ +from .service import cli +cli() diff --git a/source/bonsai_runtime/backend.py b/source/bonsai_runtime/backend.py new file mode 100644 index 0000000000000000000000000000000000000000..8bde9c63e86fa7e8f93abd80688259e1d13c299d --- /dev/null +++ b/source/bonsai_runtime/backend.py @@ -0,0 +1,124 @@ +"""Small HTTP transport and owned single-GPU native-server lifecycle.""" +from contextlib import contextmanager +from datetime import datetime, timezone +import json +import os +from pathlib import Path +import signal +import socket +import subprocess +import threading +import time +import urllib.request + + +class Client: + def __init__(self, base='http://127.0.0.1:5991', adapter_id=None, timeout=120): + self.base=base.rstrip('/').removesuffix('/v1') + self.adapter_id=adapter_id + self.timeout=timeout + self.calls=[] + self.lock=threading.RLock() + + def health(self): + with urllib.request.urlopen(self.base+'/health',timeout=5) as stream:return json.load(stream) + + def verify_profile(self): + with urllib.request.urlopen(self.base+'/lora-adapters',timeout=5) as stream:loaded=json.load(stream) + if self.adapter_id is None and loaded: + raise RuntimeError('Base-only profile requires a backend with no adapters loaded') + if self.adapter_id is not None and self.adapter_id not in [r['id'] for r in loaded]: + raise RuntimeError('Requested adapter ID is not loaded by the backend') + return loaded + + def post(self, path, payload): + body=dict(payload) + if self.adapter_id is None: + body.pop('lora',None) + else: + body['lora']=[dict(id=self.adapter_id,scale=1)] + body.update(cache_prompt=False,chat_template_kwargs=dict(enable_thinking=False)) + req=urllib.request.Request(self.base+path,data=json.dumps(body).encode(),headers={'Content-Type':'application/json'}) + tick=time.perf_counter() + with self.lock, urllib.request.urlopen(req,timeout=self.timeout) as stream: + result=json.load(stream) + usage=result.get('usage') or {} + self.calls.append(dict(seconds=time.perf_counter()-tick,prompt_tokens=usage.get('prompt_tokens'), + completion_tokens=usage.get('completion_tokens'), + cached_tokens=(usage.get('prompt_tokens_details') or {}).get('cached_tokens',0), + finish_reason=(result.get('choices') or [{}])[0].get('finish_reason'),adapter_id=self.adapter_id)) + return result + + def generate(self, prompt, max_tokens=1536, json_output=False, schema=None): + body=dict(model='qwen',messages=[dict(role='user',content=prompt)],max_tokens=max_tokens,temperature=0) + if json_output: body['response_format']={'type':'json_object'} + if schema is not None:body['response_format']={'type':'json_object','schema':schema} + result=self.post('/v1/chat/completions',body) + choice=result['choices'][0] + if choice['finish_reason']=='length': + raise ValueError('Structured response was truncated; no actions may execute') + return choice['message'].get('content') or '' + + +class NativeServer: + def __init__(self, root, gpu=0, port=5991, model='models/Ternary-Bonsai-2-27B-PQ2_0.gguf', adapter=None, + binary='llama.cpp-b2/build/bin/llama-server', context=4096): + self.root=Path(root); self.root.mkdir(parents=True,exist_ok=True) + self.gpu,self.port,self.model,self.adapter,self.binary,self.context=gpu,port,str(model),adapter,str(binary),context + self.proc=None; self.samples=[]; self.stop=threading.Event() + + def event(self,kind,**values): + row=dict(time_utc=datetime.now(timezone.utc).isoformat(),kind=kind,**values) + with (self.root/'runtime-events.jsonl').open('a') as f:f.write(json.dumps(row)+'\n') + + def memory(self): + return int(subprocess.check_output(['nvidia-smi',f'--id={self.gpu}','--query-gpu=memory.used','--format=csv,noheader,nounits'],text=True)) + + def __enter__(self): + with socket.socket() as sock: + if sock.connect_ex(('127.0.0.1',self.port))==0:raise RuntimeError('Port occupied; no existing server will be stopped') + if self.memory()>=100:raise RuntimeError(f'GPU {self.gpu} is occupied') + env=dict(os.environ,CUDA_VISIBLE_DEVICES=str(self.gpu),PYTHONDONTWRITEBYTECODE='1') + env['LD_LIBRARY_PATH']=str(Path(self.binary).resolve().parent)+((':'+env['LD_LIBRARY_PATH']) if env.get('LD_LIBRARY_PATH') else '') + command=[self.binary,'-m',self.model,'--host','0.0.0.0','--port',str(self.port),'-c',str(self.context),'-ngl','99','-fa','on', + '--jinja','--reasoning','off','-np','1','--no-context-shift','--cache-ram','0','--no-cache-idle-slots'] + if self.adapter:command+=['--lora',str(self.adapter)] + self.log=(self.root/f'server-{time.time_ns()}.log').open('x') + self.proc=subprocess.Popen(command,env=env,stdout=self.log,stderr=subprocess.STDOUT) + self.event('server_started',pid=self.proc.pid,gpu=self.gpu,command=command) + try: + deadline=time.monotonic()+180 + while time.monotonic()65536:raise ValueError('Request exceeds the 64 KiB input limit') + + +class DecisionEngine: + def __init__(self,client): + client.verify_profile() + self.client=client + + def decide(self,request): + validate(request) + # One entire decision (including a possible fallback) holds the worker slot. + with self.client.lock:return self._decide(request) + + def _decide(self,request): + self.client.calls.clear() + tick=time.perf_counter();start=0;trace={};attempted=applicable(request) + if attempted: + unit=compact_unit(request) + prompt=compact_prompt(request) if unit is not None else INSTRUCTION+'\n'+prompt_for(request['state'],request['question'],request['options']).replace('Answer with the letter of the best option only.','Return only the JSON calculation, or a null expression.') + response=self.client.post('/v1/chat/completions',dict(model='qwen',messages=[dict(role='user',content=prompt)],max_tokens=64 if unit is not None else 96,temperature=0)) + choice=response['choices'][0];content=choice['message'].get('content') or '' + trace=dict(tool_expression=content,tool_tokens=(response.get('usage') or {}).get('completion_tokens'),tool_finish_reason=choice['finish_reason'],tool_error=None) + if unit is not None:trace['output_unit']=unit + try: + if choice['finish_reason']=='length':raise ValueError('truncated') + answer,_=decode(json.dumps(dict(expression=content,unit=unit)) if unit is not None else content,request['options']) + return dict(answer=answer,method='numeric-tool',tool_attempted=True,seconds=time.perf_counter()-tick,score=None,trace=trace,calls=self.client.calls[start:]) + except (ValueError,TypeError,AssertionError,SyntaxError,ZeroDivisionError,OverflowError,KeyError,IndexError) as exc:trace['tool_error']=str(exc) + result=readout(self.client,request['state'],request['question'],request['options'],.85,dict(cache_prompt=False,top_logprobs=1024)) + if result['missing_letters']:raise RuntimeError('Backend did not return all option scores') + return dict(answer=result['argmax'],method='fast',tool_attempted=attempted,seconds=time.perf_counter()-tick, + score=max(p['p'] for p in result['probs']),score_kind='option-relative softmax; not a correctness guarantee', + probs=result['probs'],trace=trace,calls=self.client.calls[start:]) diff --git a/source/bonsai_runtime/numeric.py b/source/bonsai_runtime/numeric.py new file mode 100644 index 0000000000000000000000000000000000000000..fe14c75fd9fe504722e2e1a39e1fd38f80fa05da --- /dev/null +++ b/source/bonsai_runtime/numeric.py @@ -0,0 +1,148 @@ +"""Audited compact CPU calculator; option IDs are opaque in the runtime API.""" +import ast,json,math,re +from fractions import Fraction as Q +from .readout import prompt_for + +def safe_expression(text): + text=text.strip() + if text.startswith('```'):text=re.sub(r'^```(?:python)?\s*|\s*```$','',text).strip() + if text in ['null','None','']:raise ValueError('abstain') + if len(text)>1200:raise ValueError('too long') + tree=ast.parse(text,mode='eval');assert sum(1 for _ in ast.walk(tree))<=200 + def walk(n): + if isinstance(n,ast.Constant): + if isinstance(n.value,bool):return n.value + if isinstance(n.value,(int,float)) and abs(n.value)<=10**9:return Q(str(n.value)) + if isinstance(n.value,str) and len(n.value)<=100:return n.value + raise ValueError('constant') + if isinstance(n,(ast.List,ast.Tuple)) and len(n.elts)<=24:return [walk(x) for x in n.elts] + if isinstance(n,ast.UnaryOp): + v=walk(n.operand) + if isinstance(n.op,ast.USub) and isinstance(v,Q):return -v + if isinstance(n.op,ast.UAdd) and isinstance(v,Q):return v + if isinstance(n.op,ast.Not) and isinstance(v,bool):return not v + if isinstance(n,ast.BinOp): + a,b=walk(n.left),walk(n.right) + if not isinstance(a,Q) or not isinstance(b,Q):raise ValueError('numeric operands required') + if isinstance(n.op,ast.Add):v=a+b + elif isinstance(n.op,ast.Sub):v=a-b + elif isinstance(n.op,ast.Mult):v=a*b + elif isinstance(n.op,ast.Div):v=a/b + elif isinstance(n.op,ast.Pow) and b.denominator==1 and abs(b)<=4:v=a**int(b) + else:raise ValueError('operator') + if abs(v.numerator)>10**18 or v.denominator>10**18:raise ValueError('magnitude') + return v + if isinstance(n,ast.Compare) and len(n.ops)==1: + a,b=walk(n.left),walk(n.comparators[0]);op=n.ops[0] + if isinstance(op,ast.Eq):return a==b + if isinstance(op,ast.NotEq):return a!=b + if isinstance(op,ast.Lt):return ab + if isinstance(op,ast.GtE):return a>=b + if isinstance(n,ast.BoolOp): + v=[walk(x) for x in n.values] + if not all(isinstance(x,bool) for x in v):raise ValueError('boolean operands required') + return all(v) if isinstance(n.op,ast.And) else any(v) + if isinstance(n,ast.Call) and isinstance(n.func,ast.Name) and not n.keywords: + args=[walk(x) for x in n.args] + if n.func.id=='order' and len(args)==2: + edges,position=args;assert isinstance(edges,list) and isinstance(position,Q) and position.denominator==1 + assert all(isinstance(e,list) and len(e)==2 and all(isinstance(x,str) for x in e) for e in edges) + remaining={x for e in edges for x in e};answer=[] + while remaining: + first=[x for x in remaining if not any(b==x and a in remaining for a,b in edges)] + if len(first)!=1:raise ValueError('ambiguous order') + answer+=first;remaining.remove(first[0]) + assert 1<=position<=len(answer);return answer[int(position)-1] + if n.func.id=='first' and len(args)==2: + conditions,values=args;assert isinstance(conditions,list) and isinstance(values,list) and len(conditions)==len(values) and all(isinstance(x,bool) for x in conditions) + return values[conditions.index(True)] + raise ValueError('unsupported syntax') + return walk(tree.body) +UNITS={ + 'number':('number',Q(1)), 'usd':('money',Q(1)), '$':('money',Q(1)), 'dollar':('money',Q(1)), 'dollars':('money',Q(1)), 'cent':('money',Q(1,100)), 'cents':('money',Q(1,100)), + 'km':('distance',Q(1000)), 'm':('distance',Q(1)), 'meter':('distance',Q(1)), 'meters':('distance',Q(1)), 'cm':('distance',Q(1,100)), + 'kg':('mass',Q(1000)), 'g':('mass',Q(1)), 'grams':('mass',Q(1)), + 'hours':('time',Q(3600)), 'hour':('time',Q(3600)), 'minutes':('time',Q(60)), 'minute':('time',Q(60)), 'seconds':('time',Q(1)), 'second':('time',Q(1)), + '%':('ratio',Q(1,100)), 'percent':('ratio',Q(1,100)), 'fraction':('ratio',Q(1)), + 'l':('volume',Q(1000)), 'ml':('volume',Q(1)), 'liters':('volume',Q(1000)), 'milliliters':('volume',Q(1)), 'km/h':('speed',Q(1)), 'degrees':('temperature',Q(1))} + +def quantity(text): + text=text.strip().lower().replace(',','') + m=re.fullmatch(r'(\$?)(-?\d+(?:\.\d+)?(?:/\d+)?)(?:[ -]*([a-z/%]+))?',text) + if not m:return None + unit='usd' if m[1] else m[3] + if unit is not None and unit not in UNITS:return None + return Q(m[2]),unit + +def extended_expression(text): + if not isinstance(text,str) or len(text)>1200:raise ValueError('invalid expression') + tree=ast.parse(text,mode='eval') + if sum(1 for _ in ast.walk(tree))>200:raise ValueError('expression too complex') + class Reduce(ast.NodeTransformer): + def visit_Call(self,node): + self.generic_visit(node) + if not isinstance(node.func,ast.Name) or node.func.id not in ['ceil','floor','round_to'] or node.keywords:raise ValueError('function not allowed') + args=[safe_expression(ast.unparse(x)) for x in node.args] + if not all(isinstance(x,Q) for x in args):raise ValueError('numeric arguments required') + if node.func.id in ['ceil','floor'] and len(args)==1:value=Q(math.ceil(args[0]) if node.func.id=='ceil' else math.floor(args[0])) + elif node.func.id=='round_to' and len(args)==2 and args[1].denominator==1 and 0<=args[1]<=4: + scale=10**int(args[1]);value=Q(math.floor(abs(args[0])*scale+Q(1,2)),scale)*(1 if args[0]>=0 else -1) + else:raise ValueError('invalid arguments') + return ast.parse(f'({value.numerator}/{value.denominator})',mode='eval').body + def visit_BinOp(self,node): + self.generic_visit(node) + if isinstance(node.op,ast.FloorDiv): + a=safe_expression(ast.unparse(node.left));b=safe_expression(ast.unparse(node.right)) + if not isinstance(a,Q) or not isinstance(b,Q):raise ValueError('numeric division required') + return ast.Constant(math.floor(a/b)) + return node + tree=Reduce().visit(tree);value=safe_expression(ast.unparse(ast.fix_missing_locations(tree))) + if not isinstance(value,Q):raise ValueError('numeric result required') + return value + +INSTRUCTION='''Return ONLY JSON with exactly "expression" and "unit". Translate the question into a short arithmetic expression using only the stated facts. Do not guess missing facts. If the requested answer cannot be calculated from the facts, return {"expression":null,"unit":null}. +Allowed arithmetic: numbers, + - * / **, //, parentheses, ceil(x), floor(x), round_to(x,digits). round_to uses nearest with half ties away from zero. Convert quantities inside the expression as necessary. Ignore identifiers and unrelated numbers. Keep arithmetic as an expression, rather than computing an answer mentally. +The unit describes the expression's output: number, USD, cents, km, m, cm, kg, g, hours, minutes, seconds, %, fraction, L, mL, km/h, degrees. Use the requested units; number is appropriate for counts or unitless answers. For Above/Below/Equal choices, calculate first quantity MINUS the comparison quantity in the same units and use unit "comparison"; the executor maps the sign. For explicitly requested rounding use round_to; for the minimum number of whole packages use ceil. Otherwise do not round. +Example: 3 groups of 8 and 2 groups of 5, combined mean -> {"expression":"(3*8+2*5)/(3+2)","unit":"number"} +Example: 2 dollars less 30 cents -> {"expression":"2-30/100","unit":"USD"} +''' + +def applicable(request): + opts=request['options'];descs={d.strip().lower() for _,d in opts} + return sum(quantity(d) is not None for _,d in opts)>=2 or {'above','below','equal'}<=descs + +def decode(text,options): + data=json.loads(text) + if not isinstance(data,dict) or set(data)!={'expression','unit'}:raise ValueError('invalid schema') + if data['expression'] is None:raise ValueError('abstain') + if not isinstance(data['unit'],str):raise ValueError('invalid unit') + unit=data['unit'].strip().lower();value=extended_expression(data['expression']);matches=[] + if unit=='comparison': + word='above' if value>0 else 'below' if value<0 else 'equal';matches=[k for k,d in options if d.strip().lower()==word] + else: + if unit not in UNITS:raise ValueError('unknown unit') + dim,factor=UNITS[unit] + for k,d in options: + number=quantity(d) + if number is None:continue + n,u=number + if u is None:match=n==value + else:od,of=UNITS[u];match=od==dim and n*of==value*factor + if match:matches.append(k) + if len(matches)!=1:raise ValueError('no unique unit-consistent match') + return matches[0],data + +def compact_unit(request): + descs={d.strip().lower() for _,d in request['options']} + if {'above','below','equal'}<=descs:return 'comparison' + found=[quantity(d) for k,d in request['options']] + units={x[1] for x in found if x is not None and x[1] is not None} + return next(iter(units)) if len(units)==1 else 'number' if not units else None + +def compact_prompt(request): + unit=compact_unit(request) + instruction=f'''Return only one arithmetic expression, not an answer letter or explanation. Calculate the requested quantity from the supplied facts; ignore identifiers and irrelevant numbers. Output unit: {unit}. If facts are insufficient, return null. Allowed: numbers, + - * / ** //, parentheses, ceil(x), floor(x), round_to(x,digits). round_to rounds nearest, half ties away from zero. Convert mixed units before arithmetic. Apply rounding only when requested; use ceil for a minimum whole-package purchase. Keep the calculation as an expression instead of doing it mentally.''' + if unit=='comparison':instruction+=' Compute the first quantity MINUS the comparison quantity, after converting to matching units. The sign determines Above/Below/Equal.' + return instruction+'\n'+prompt_for(request['state'],request['question'],request['options']).replace('Answer with the letter of the best option only.','Return only the arithmetic expression, or null.') diff --git a/source/bonsai_runtime/readout.py b/source/bonsai_runtime/readout.py new file mode 100644 index 0000000000000000000000000000000000000000..7e62e2d1ed34dc5f3746c447000e95f30df808a3 --- /dev/null +++ b/source/bonsai_runtime/readout.py @@ -0,0 +1,66 @@ +"""Letter readout extracted from the audited local analysis/letter_readout.py.""" +import math,time + +LETTERS = [chr(65 + i) for i in range(26)] + [chr(97 + i) for i in range(26)] + +def prompt_for(state, instructions, options): + lines = "\n".join(f"[{LETTERS[i]}] {k}: {d}" for i, (k, d) in enumerate(options)) + return ( + f"State:\n{state}\n\nQuestion: {instructions}\nOptions:\n{lines}\n\n" + "Answer with the letter of the best option only." + ) + +def letter_logprobs(choice, n): + content = (choice.get("logprobs") or {}).get("content") or [] + if not content: + return {}, choice.get("message", {}).get("content"), None + top = content[0].get("top_logprobs") or [] + found = {} + for item in top: + token = item.get("token") or "" + key = token if token in LETTERS else token.strip() + if key in LETTERS and (key not in found or token in LETTERS): + found[key] = item.get("logprob") + return found, content[0].get("token"), content[0].get("logprob") + +def readout(client, state, instructions, options, scale=1.1, request_options=None): + body = { + "model": "qwen", + "messages": [{"role": "user", "content": prompt_for(state, instructions, options)}], + "max_tokens": 1, + "temperature": 0, + "logprobs": True, + "top_logprobs": max(40, len(options)), + "chat_template_kwargs": {"enable_thinking": False}, + } + if request_options: + body.update(request_options) + t0 = time.perf_counter() + resp = client.post("/v1/chat/completions", body) + dt = time.perf_counter() - t0 + choice = resp["choices"][0] + found, first_token, first_lp = letter_logprobs(choice, len(options)) + raw = [found.get(LETTERS[i], -30.0) for i in range(len(options))] + missing = [LETTERS[i] for i in range(len(options)) if LETTERS[i] not in found] + scaled = [v / scale for v in raw] + m = max(scaled) + exps = [math.exp(v - m) for v in scaled] + z = sum(exps) + probs = [v / z for v in exps] + order = sorted(range(len(options)), key=lambda i: probs[i], reverse=True) + usage = resp.get("usage") or {} + timings = resp.get("timings") or {} + return { + "probs": [ + {"key": options[i][0], "letter": LETTERS[i], "p": probs[i], "logprob": raw[i]} + for i in order + ], + "argmax": options[order[0]][0], + "first_token": first_token, + "first_logprob": first_lp, + "missing_letters": missing, + "seconds": dt, + "prompt_tokens": usage.get("prompt_tokens"), + "cached_prompt_tokens": (usage.get("prompt_tokens_details") or {}).get("cached_tokens"), + "timings": timings, + } diff --git a/source/bonsai_runtime/service.py b/source/bonsai_runtime/service.py new file mode 100644 index 0000000000000000000000000000000000000000..c241bb37b114bd4bd048a8472d73d9be9a1543be --- /dev/null +++ b/source/bonsai_runtime/service.py @@ -0,0 +1,117 @@ +"""JSONL and local HTTP entry points sharing the supported decision engine.""" +import argparse +from contextlib import contextmanager +from datetime import datetime,timezone +from http.server import BaseHTTPRequestHandler,ThreadingHTTPServer +import json +from pathlib import Path +import signal,sys,threading +import urllib.error +from .backend import Client,NativeServer +from .decision import DecisionEngine + +CAPABILITIES=dict(api_version='1',input_fields=['state','question','options'],min_options=2,max_options=26, + option_ids='opaque',numeric_values='parsed from option descriptions only',reasoning=False, + modalities=['text'],agent_execution='experimental; not exposed by this HTTP service', + compatibility='This is a decision API, not complete Jev/OpenJev API compatibility.') + + +def server(engine,host='0.0.0.0',port=9304): + slots=threading.BoundedSemaphore(2) + class Handler(BaseHTTPRequestHandler): + def log_message(self,*args):pass + def send_json(self,status,payload): + data=json.dumps(payload,ensure_ascii=False).encode() + self.send_response(status);self.send_header('Content-Type','application/json');self.send_header('Content-Length',str(len(data)));self.end_headers() + try:self.wfile.write(data) + except (BrokenPipeError,ConnectionResetError):pass + def do_GET(self): + if self.path=='/health': + try: + engine.client.health() + self.send_json(200,dict(status='ready',profile='base' if engine.client.adapter_id is None else 'adapter')) + except (OSError,ValueError):self.send_json(503,dict(status='backend-unavailable')) + elif self.path=='/v1/capabilities':self.send_json(200,CAPABILITIES) + else:self.send_json(404,dict(error='Unknown endpoint')) + def do_POST(self): + if self.path!='/v1/decide':self.send_json(404,dict(error='Unknown endpoint'));return + if not slots.acquire(blocking=False):self.send_json(503,dict(error='Decision worker and bounded queue are busy'));return + try: + self.connection.settimeout(125) + length=int(self.headers.get('Content-Length','0')) + if not 0=77"] +build-backend = "setuptools.build_meta" +[project] +name = "bonsai-decision-runtime" +version = "0.1.0" +description = "Low-memory Bonsai text choices and compact exact arithmetic" +requires-python = ">=3.10" +dependencies = [] +license = "Apache-2.0" +license-files = ["bonsai_runtime/LICENSE", "bonsai_runtime/NOTICE"] +[project.scripts] +bonsai-decide = "bonsai_runtime.service:cli" +bonsai-serve = "bonsai_runtime.service:http_cli" +[tool.setuptools] +packages = ["bonsai_runtime"] +[tool.setuptools.package-data] +bonsai_runtime = ["LICENSE", "NOTICE"] diff --git a/validate_release.py b/validate_release.py new file mode 100644 index 0000000000000000000000000000000000000000..876021e23f274c0145cca0d1ba592a4222d3a4e5 --- /dev/null +++ b/validate_release.py @@ -0,0 +1,29 @@ +"""Check downloaded bundle files against the published SHA256 manifest.""" +from hashlib import sha256 +import json +from pathlib import Path +import sys + + +root = Path(__file__).resolve().parent +manifest = json.loads((root / "MANIFEST.json").read_text()) +errors = [] +for name, expected in manifest["files"].items(): + path = root / name + if not path.is_file(): + errors.append(f"missing: {name}") + continue + if path.stat().st_size != expected["bytes"]: + errors.append(f"size mismatch: {name}") + continue + digest = sha256() + with path.open("rb") as stream: + for chunk in iter(lambda: stream.read(4 * 1024 * 1024), b""): + digest.update(chunk) + if digest.hexdigest() != expected["sha256"]: + errors.append(f"SHA256 mismatch: {name}") + +if errors: + print("\n".join(errors), file=sys.stderr) + raise SystemExit(1) +print(f"Verified {len(manifest['files'])} bundle files")