ncp-olmo-eval 0.1.0a16__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. ncp_olmo_eval-0.1.0a16/.github/workflows/ci.yml +107 -0
  2. ncp_olmo_eval-0.1.0a16/.github/workflows/publish-images.yml +163 -0
  3. ncp_olmo_eval-0.1.0a16/.github/workflows/release.yml +74 -0
  4. ncp_olmo_eval-0.1.0a16/CHANGELOG.md +214 -0
  5. ncp_olmo_eval-0.1.0a16/CONTRIBUTING.md +26 -0
  6. ncp_olmo_eval-0.1.0a16/LICENSE +201 -0
  7. ncp_olmo_eval-0.1.0a16/MANIFEST.in +7 -0
  8. ncp_olmo_eval-0.1.0a16/NOTICE +10 -0
  9. ncp_olmo_eval-0.1.0a16/PKG-INFO +408 -0
  10. ncp_olmo_eval-0.1.0a16/README.md +358 -0
  11. ncp_olmo_eval-0.1.0a16/SECURITY.md +10 -0
  12. ncp_olmo_eval-0.1.0a16/THIRD_PARTY_NOTICES.md +57 -0
  13. ncp_olmo_eval-0.1.0a16/configs/apptainer-images.example.json +1 -0
  14. ncp_olmo_eval-0.1.0a16/configs/assets.example.json +26 -0
  15. ncp_olmo_eval-0.1.0a16/configs/assets.gated.example.json +19 -0
  16. ncp_olmo_eval-0.1.0a16/configs/public-image-bases.json +20 -0
  17. ncp_olmo_eval-0.1.0a16/configs/runtime.env.example +33 -0
  18. ncp_olmo_eval-0.1.0a16/docker/core88_bigcodebench_sandbox.Dockerfile +69 -0
  19. ncp_olmo_eval-0.1.0a16/docker/core88_ds1000.Dockerfile +100 -0
  20. ncp_olmo_eval-0.1.0a16/docker/core88_sandbox.Dockerfile +53 -0
  21. ncp_olmo_eval-0.1.0a16/docker/core88_thin_sandbox.Dockerfile +56 -0
  22. ncp_olmo_eval-0.1.0a16/docker/offline-assets.Dockerfile +15 -0
  23. ncp_olmo_eval-0.1.0a16/docker/runtime.Dockerfile +38 -0
  24. ncp_olmo_eval-0.1.0a16/docs/IMAGES.md +80 -0
  25. ncp_olmo_eval-0.1.0a16/docs/OFFLINE_ASSETS.md +60 -0
  26. ncp_olmo_eval-0.1.0a16/docs/PORTABILITY.md +66 -0
  27. ncp_olmo_eval-0.1.0a16/docs/PROTOCOLS.md +108 -0
  28. ncp_olmo_eval-0.1.0a16/docs/RELEASE_CHECKLIST.md +167 -0
  29. ncp_olmo_eval-0.1.0a16/docs/SPECULATIVE_DECODING.md +178 -0
  30. ncp_olmo_eval-0.1.0a16/docs/VALIDATION.md +60 -0
  31. ncp_olmo_eval-0.1.0a16/docs/validation/dflash_a14_synthetic.json +85 -0
  32. ncp_olmo_eval-0.1.0a16/pyproject.toml +97 -0
  33. ncp_olmo_eval-0.1.0a16/scripts/build-public-images.sh +174 -0
  34. ncp_olmo_eval-0.1.0a16/scripts/render-kubernetes-jobs.py +66 -0
  35. ncp_olmo_eval-0.1.0a16/scripts/run-plan-local.sh +25 -0
  36. ncp_olmo_eval-0.1.0a16/scripts/run-task-apptainer.sh +32 -0
  37. ncp_olmo_eval-0.1.0a16/scripts/submit-plan-slurm.sh +44 -0
  38. ncp_olmo_eval-0.1.0a16/setup.cfg +4 -0
  39. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/__init__.py +10 -0
  40. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/assets.py +156 -0
  41. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/benchmark.py +80 -0
  42. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core88_workflow.py +1143 -0
  43. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_aggregate.py +797 -0
  44. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_answer_eval.py +526 -0
  45. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_cached_finalize.py +336 -0
  46. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_code_eval.py +1595 -0
  47. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_contract.py +6 -0
  48. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_eval.py +2180 -0
  49. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_plan.py +57 -0
  50. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_pool.py +1083 -0
  51. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_summary.py +939 -0
  52. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/core_native_work.py +380 -0
  53. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/device_layout.py +45 -0
  54. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/dflash_checkpoint.py +120 -0
  55. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/dflash_contract.py +250 -0
  56. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/evaluation_cli.py +3324 -0
  57. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/gsm8k_eval.py +1077 -0
  58. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/helmet_api_judge.py +449 -0
  59. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/helmet_prepare.py +374 -0
  60. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/helmet_protocol.py +1074 -0
  61. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/helmet_score.py +600 -0
  62. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/helmet_trec_eval_compat.py +108 -0
  63. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/inference.py +39 -0
  64. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/lm_eval_runtime.py +59 -0
  65. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/lmdeploy_inference.py +26 -0
  66. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/long_context_inference.py +745 -0
  67. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/long_context_prepare.py +302 -0
  68. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/long_context_protocol.py +1322 -0
  69. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/long_context_score.py +192 -0
  70. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/native_megatron_inference.py +11 -0
  71. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/native_vllm_inference.py +1003 -0
  72. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/ncp_dflash_vllm_benchmark.py +558 -0
  73. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/portable_tasks.py +553 -0
  74. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/prepare_cli.py +33 -0
  75. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/prepare_long_context_model_overlay.py +87 -0
  76. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/prepare_native_vllm_model.py +43 -0
  77. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/py.typed +1 -0
  78. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/runtime_smoke.py +79 -0
  79. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/source_identity.py +102 -0
  80. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/task_runner.py +102 -0
  81. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/task_spec.py +199 -0
  82. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/transformers_inference.py +10 -0
  83. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/unified_eval_results.py +281 -0
  84. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/__init__.py +10 -0
  85. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/batch_invariance.py +154 -0
  86. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/compare_backend_runs.py +199 -0
  87. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/compare_flash_versions.py +199 -0
  88. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/contract.py +317 -0
  89. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/gsm8k.py +1125 -0
  90. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/hf_config.py +26 -0
  91. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/hlm.py +1386 -0
  92. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/model.py +876 -0
  93. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/model_runner.py +125 -0
  94. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/ncp_dflash_proposer.py +1314 -0
  95. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/ncp_dflash_state.py +80 -0
  96. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/parity.py +758 -0
  97. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/plugin.py +29 -0
  98. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/probe.py +84 -0
  99. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/qkv.py +45 -0
  100. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/routes.py +321 -0
  101. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/state.py +471 -0
  102. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/throughput.py +482 -0
  103. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/token_tower.py +566 -0
  104. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/weights.py +753 -0
  105. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval/vllm_plugin/worker.py +114 -0
  106. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval.egg-info/PKG-INFO +408 -0
  107. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval.egg-info/SOURCES.txt +145 -0
  108. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval.egg-info/dependency_links.txt +1 -0
  109. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval.egg-info/entry_points.txt +10 -0
  110. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval.egg-info/requires.txt +35 -0
  111. ncp_olmo_eval-0.1.0a16/src/ncp_olmo_eval.egg-info/top_level.txt +1 -0
  112. ncp_olmo_eval-0.1.0a16/tests/conftest.py +30 -0
  113. ncp_olmo_eval-0.1.0a16/tests/installed_package_summary_smoke.py +53 -0
  114. ncp_olmo_eval-0.1.0a16/tests/unit/test_bigcodebench_sandbox_contract.py +31 -0
  115. ncp_olmo_eval-0.1.0a16/tests/unit/test_core88_workflow.py +128 -0
  116. ncp_olmo_eval-0.1.0a16/tests/unit/test_core_native_cached_finalize.py +184 -0
  117. ncp_olmo_eval-0.1.0a16/tests/unit/test_core_native_code_loader.py +78 -0
  118. ncp_olmo_eval-0.1.0a16/tests/unit/test_core_native_summary.py +716 -0
  119. ncp_olmo_eval-0.1.0a16/tests/unit/test_core_summary_source_identity.py +36 -0
  120. ncp_olmo_eval-0.1.0a16/tests/unit/test_dflash_checkpoint.py +98 -0
  121. ncp_olmo_eval-0.1.0a16/tests/unit/test_dflash_contract.py +79 -0
  122. ncp_olmo_eval-0.1.0a16/tests/unit/test_evaluation_cli.py +515 -0
  123. ncp_olmo_eval-0.1.0a16/tests/unit/test_gsm8k_eval.py +99 -0
  124. ncp_olmo_eval-0.1.0a16/tests/unit/test_helmet_api_judge.py +29 -0
  125. ncp_olmo_eval-0.1.0a16/tests/unit/test_helmet_protocol.py +541 -0
  126. ncp_olmo_eval-0.1.0a16/tests/unit/test_lm_eval_runtime.py +40 -0
  127. ncp_olmo_eval-0.1.0a16/tests/unit/test_long_context_protocol.py +1239 -0
  128. ncp_olmo_eval-0.1.0a16/tests/unit/test_native_vllm_inference.py +733 -0
  129. ncp_olmo_eval-0.1.0a16/tests/unit/test_ncp_dflash_vllm_benchmark.py +192 -0
  130. ncp_olmo_eval-0.1.0a16/tests/unit/test_portable_runtime.py +152 -0
  131. ncp_olmo_eval-0.1.0a16/tests/unit/test_release_integrity.py +289 -0
  132. ncp_olmo_eval-0.1.0a16/tests/unit/test_release_metadata.py +45 -0
  133. ncp_olmo_eval-0.1.0a16/tests/unit/test_sciq_protocol.py +336 -0
  134. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_compare_backend_runs.py +85 -0
  135. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_compare_flash_versions.py +91 -0
  136. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_contract.py +151 -0
  137. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_gsm8k.py +224 -0
  138. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_hf_config.py +53 -0
  139. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_hlm.py +374 -0
  140. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_model_transaction.py +187 -0
  141. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_ncp_dflash_model_runner.py +159 -0
  142. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_ncp_dflash_proposer.py +689 -0
  143. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_ncp_dflash_state.py +67 -0
  144. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_plugin.py +76 -0
  145. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_qk_norm.py +81 -0
  146. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_state.py +337 -0
  147. ncp_olmo_eval-0.1.0a16/tests/vllm_plugin/test_weights.py +532 -0
@@ -0,0 +1,107 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ host-contracts:
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ python: ["3.10", "3.12"]
19
+ steps:
20
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803
21
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
22
+ with:
23
+ python-version: ${{ matrix.python }}
24
+ cache: pip
25
+ - name: Install host-only dependencies
26
+ run: python -m pip install -e '.[dev,scoring]'
27
+ - name: Lint
28
+ run: ruff check src tests scripts
29
+ - name: Compile
30
+ run: python -m compileall -q src
31
+ - name: Test contracts
32
+ run: pytest -q
33
+ - name: Check portable adapters
34
+ run: |
35
+ find scripts -name '*.sh' -print0 | xargs -0 -n1 bash -n
36
+ python -m py_compile scripts/*.py
37
+ - name: Build distributions
38
+ if: matrix.python == '3.12'
39
+ run: python -m build
40
+ - name: Verify Core88 summary from installed wheel path
41
+ if: matrix.python == '3.12'
42
+ run: |
43
+ python -m venv .ci/installed-package
44
+ .ci/installed-package/bin/python -m pip install --no-deps dist/*.whl
45
+ .ci/installed-package/bin/ncp-olmo-eval-dflash-benchmark --help
46
+ NCP_OLMO_SOURCE_REVISION="$(git rev-parse HEAD)" \
47
+ .ci/installed-package/bin/python tests/installed_package_summary_smoke.py
48
+
49
+ docker-scorer-contracts:
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803
53
+ - name: Fetch pinned OLMo-Eval scorer source
54
+ env:
55
+ OLMO_EVAL_COMMIT: f8816eea36563f27b4a9dd2533d68d34f3c67d3f
56
+ run: |
57
+ git clone --filter=blob:none https://github.com/allenai/OLMo-Eval.git .ci/olmo-eval
58
+ git -C .ci/olmo-eval checkout --detach "$OLMO_EVAL_COMMIT"
59
+ test "$(git -C .ci/olmo-eval rev-parse HEAD)" = "$OLMO_EVAL_COMMIT"
60
+ - name: Build release runtime scorer slice and run Math smoke
61
+ run: |
62
+ docker build \
63
+ -f docker/runtime.Dockerfile \
64
+ --build-arg BASE_IMAGE=python:3.12.11-slim-bookworm \
65
+ --build-arg INSTALL_EXTRAS=scoring \
66
+ --build-arg SOURCE_REVISION="$(git rev-parse HEAD)" \
67
+ -t ncp-olmo-eval:ci-runtime .
68
+ - name: Prepare locked BigCodeBench parser wheels
69
+ run: |
70
+ mkdir -p .ci/wheels
71
+ python -m pip download --only-binary=:all: --no-deps \
72
+ --dest .ci/wheels \
73
+ --python-version 310 \
74
+ --implementation cp \
75
+ --abi cp310 \
76
+ --abi abi3 \
77
+ --platform manylinux_2_28_x86_64 \
78
+ tree-sitter==0.25.2 tree-sitter-python==0.25.0
79
+ tree_sitter_wheel="$(basename "$(find .ci/wheels -maxdepth 1 -name 'tree_sitter-*.whl' -print -quit)")"
80
+ tree_sitter_python_wheel="$(basename "$(find .ci/wheels -maxdepth 1 -name 'tree_sitter_python-*.whl' -print -quit)")"
81
+ test -n "$tree_sitter_wheel"
82
+ test -n "$tree_sitter_python_wheel"
83
+ {
84
+ echo "TREE_SITTER_WHEEL=.ci/wheels/$tree_sitter_wheel"
85
+ echo "TREE_SITTER_SHA256=$(sha256sum ".ci/wheels/$tree_sitter_wheel" | awk '{print $1}')"
86
+ echo "TREE_SITTER_PYTHON_WHEEL=.ci/wheels/$tree_sitter_python_wheel"
87
+ echo "TREE_SITTER_PYTHON_SHA256=$(sha256sum ".ci/wheels/$tree_sitter_python_wheel" | awk '{print $1}')"
88
+ } >> "$GITHUB_ENV"
89
+ - name: Build and execute the formal BigCodeBench sandbox image
90
+ env:
91
+ OLMO_EVAL_COMMIT: f8816eea36563f27b4a9dd2533d68d34f3c67d3f
92
+ run: |
93
+ docker build \
94
+ -f docker/core88_bigcodebench_sandbox.Dockerfile \
95
+ --build-arg CORE88_UPSTREAM_REFERENCE="allenai/OLMo-Eval@$OLMO_EVAL_COMMIT" \
96
+ --build-arg CORE88_SCORER_COMMIT="$(git rev-parse HEAD)" \
97
+ --build-arg TREE_SITTER_WHEEL="$TREE_SITTER_WHEEL" \
98
+ --build-arg TREE_SITTER_SHA256="$TREE_SITTER_SHA256" \
99
+ --build-arg TREE_SITTER_PYTHON_WHEEL="$TREE_SITTER_PYTHON_WHEEL" \
100
+ --build-arg TREE_SITTER_PYTHON_SHA256="$TREE_SITTER_PYTHON_SHA256" \
101
+ -t ncp-olmo-eval:ci-bigcodebench-sandbox .
102
+ docker run --rm \
103
+ -e OLMO_EVAL_COMMIT="$OLMO_EVAL_COMMIT" \
104
+ -e OLMO_EVAL_ROOT=/opt/olmo-eval \
105
+ -v "$PWD/.ci/olmo-eval:/opt/olmo-eval:ro" \
106
+ ncp-olmo-eval:ci-bigcodebench-sandbox \
107
+ python3 -m ncp_olmo_eval.runtime_smoke bigcodebench
@@ -0,0 +1,163 @@
1
+ name: publish-public-images
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+ inputs:
8
+ ref:
9
+ description: Existing tag or full commit SHA to build
10
+ required: true
11
+ version:
12
+ description: Existing package version used as the image tag
13
+ required: true
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ publish:
20
+ runs-on: ubuntu-latest
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ image_key:
25
+ - NCP_OLMO_EVAL_IMAGE
26
+ - CORE88_PYTHON_IMAGE
27
+ - CORE88_BIGCODEBENCH_IMAGE
28
+ - CORE88_DS1000_IMAGE
29
+ - CORE88_MULTIPLE_IMAGE
30
+ permissions:
31
+ contents: read
32
+ packages: write
33
+ steps:
34
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803
35
+ with:
36
+ ref: ${{ github.event_name == 'release' && github.event.release.tag_name || inputs.ref }}
37
+ - name: Free runner disk for the CUDA runtime image
38
+ if: matrix.image_key == 'NCP_OLMO_EVAL_IMAGE'
39
+ run: |
40
+ df -h /
41
+ sudo rm -rf /usr/local/lib/android /usr/share/dotnet /opt/ghc /usr/local/share/boost
42
+ docker system prune --all --force
43
+ df -h /
44
+ - uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f
45
+ - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9
46
+ with:
47
+ registry: ghcr.io
48
+ username: ${{ github.actor }}
49
+ password: ${{ secrets.GITHUB_TOKEN }}
50
+ - name: Verify version and source identity
51
+ id: identity
52
+ env:
53
+ REQUESTED_VERSION: ${{ github.event_name == 'release' && github.event.release.tag_name || inputs.version }}
54
+ run: |
55
+ package_version="$(python3 -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
56
+ requested="${REQUESTED_VERSION#v}"
57
+ test "$requested" = "$package_version"
58
+ revision="$(git rev-parse HEAD)"
59
+ test "${#revision}" = 40
60
+ echo "version=$package_version" >> "$GITHUB_OUTPUT"
61
+ echo "revision=$revision" >> "$GITHUB_OUTPUT"
62
+ - name: Build, smoke, and push release images
63
+ env:
64
+ IMAGE_KEY: ${{ matrix.image_key }}
65
+ OUTPUT_DIR: dist/${{ matrix.image_key }}
66
+ PUSH: "1"
67
+ VERSION: ${{ steps.identity.outputs.version }}
68
+ SOURCE_REVISION: ${{ steps.identity.outputs.revision }}
69
+ REGISTRY: ghcr.io/luckysjtu
70
+ run: scripts/build-public-images.sh
71
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
72
+ with:
73
+ name: public-image-${{ matrix.image_key }}
74
+ path: |
75
+ dist/${{ matrix.image_key }}/public-images-${{ matrix.image_key }}.env
76
+ dist/${{ matrix.image_key }}/public-images-${{ matrix.image_key }}.json
77
+ if-no-files-found: error
78
+
79
+ manifest:
80
+ needs: publish
81
+ runs-on: ubuntu-latest
82
+ permissions:
83
+ contents: write
84
+ steps:
85
+ - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
86
+ with:
87
+ pattern: public-image-*
88
+ path: dist/fragments
89
+ merge-multiple: true
90
+ - name: Merge and verify immutable image manifests
91
+ run: |
92
+ python3 - <<'PY'
93
+ import json
94
+ import re
95
+ from pathlib import Path
96
+
97
+ expected = (
98
+ "NCP_OLMO_EVAL_IMAGE",
99
+ "CORE88_PYTHON_IMAGE",
100
+ "CORE88_BIGCODEBENCH_IMAGE",
101
+ "CORE88_DS1000_IMAGE",
102
+ "CORE88_MULTIPLE_IMAGE",
103
+ )
104
+ fragments = sorted(Path("dist/fragments").glob("public-images-*.json"))
105
+ if len(fragments) != len(expected):
106
+ raise SystemExit(f"expected {len(expected)} image fragments, found {len(fragments)}")
107
+
108
+ version = None
109
+ revision = None
110
+ images = {}
111
+ for path in fragments:
112
+ payload = json.loads(path.read_text(encoding="utf-8"))
113
+ if payload.get("schema_version") != "ncp-olmo-eval-published-images-v1":
114
+ raise SystemExit(f"unexpected schema in {path}")
115
+ if payload.get("immutable") is not True:
116
+ raise SystemExit(f"mutable image fragment: {path}")
117
+ version = version or payload["release_version"]
118
+ revision = revision or payload["source_revision"]
119
+ if payload["release_version"] != version or payload["source_revision"] != revision:
120
+ raise SystemExit(f"release identity mismatch in {path}")
121
+ for key, value in payload["images"].items():
122
+ if key in images:
123
+ raise SystemExit(f"duplicate image key: {key}")
124
+ if not re.search(r"@sha256:[0-9a-f]{64}$", value):
125
+ raise SystemExit(f"missing immutable digest for {key}")
126
+ images[key] = value
127
+
128
+ if tuple(key for key in expected if key in images) != expected or len(images) != len(expected):
129
+ raise SystemExit(f"image keys do not match release contract: {sorted(images)}")
130
+
131
+ output = Path("dist")
132
+ combined = {
133
+ "schema_version": "ncp-olmo-eval-published-images-v1",
134
+ "release_version": version,
135
+ "source_revision": revision,
136
+ "immutable": True,
137
+ "images": {key: images[key] for key in expected},
138
+ }
139
+ (output / "public-images.json").write_text(
140
+ json.dumps(combined, indent=2, sort_keys=True) + "\n", encoding="utf-8"
141
+ )
142
+ (output / "public-images.env").write_text(
143
+ "\n".join(f"{key}={images[key]}" for key in expected) + "\n",
144
+ encoding="utf-8",
145
+ )
146
+ PY
147
+ test "$(grep -Ec '@sha256:[0-9a-f]{64}$' dist/public-images.env)" = 5
148
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
149
+ with:
150
+ name: public-image-digests
151
+ path: |
152
+ dist/public-images.env
153
+ dist/public-images.json
154
+ if-no-files-found: error
155
+ - name: Attach digest manifests to GitHub release
156
+ if: github.event_name == 'release'
157
+ env:
158
+ GH_TOKEN: ${{ github.token }}
159
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
160
+ run: |
161
+ gh release upload "$RELEASE_TAG" \
162
+ --repo "$GITHUB_REPOSITORY" \
163
+ dist/public-images.env dist/public-images.json --clobber
@@ -0,0 +1,74 @@
1
+ name: publish-python-release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803
15
+ with:
16
+ ref: ${{ github.event.release.tag_name }}
17
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1
18
+ with:
19
+ python-version: "3.12"
20
+ cache: pip
21
+ - name: Verify release identity
22
+ env:
23
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
24
+ run: |
25
+ python - <<'PY'
26
+ import os
27
+ import tomllib
28
+ from pathlib import Path
29
+
30
+ version = tomllib.loads(Path("pyproject.toml").read_text())["project"]["version"]
31
+ assert os.environ["RELEASE_TAG"] == f"v{version}"
32
+ PY
33
+ test "$(git rev-parse HEAD)" = "${{ github.sha }}"
34
+ - name: Build and inspect distributions
35
+ run: |
36
+ python -m pip install --upgrade build twine
37
+ python -m build
38
+ python -m twine check dist/*
39
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
40
+ with:
41
+ name: python-package-distributions
42
+ path: dist/
43
+ if-no-files-found: error
44
+
45
+ publish-pypi:
46
+ needs: build
47
+ runs-on: ubuntu-latest
48
+ environment:
49
+ name: pypi
50
+ url: https://pypi.org/p/ncp-olmo-eval
51
+ permissions:
52
+ id-token: write
53
+ steps:
54
+ - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
55
+ with:
56
+ name: python-package-distributions
57
+ path: dist/
58
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33
59
+
60
+ attach-distributions:
61
+ needs: build
62
+ runs-on: ubuntu-latest
63
+ permissions:
64
+ contents: write
65
+ steps:
66
+ - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0
67
+ with:
68
+ name: python-package-distributions
69
+ path: dist/
70
+ - name: Attach immutable distributions to GitHub release
71
+ env:
72
+ GH_TOKEN: ${{ github.token }}
73
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
74
+ run: gh release upload "$RELEASE_TAG" --repo "$GITHUB_REPOSITORY" dist/* --clobber
@@ -0,0 +1,214 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.1.0a16
6
+
7
+ - Make checkout-free release jobs pass the repository explicitly when attaching
8
+ Python distributions and immutable OCI digest manifests to GitHub Releases.
9
+ - Replace the unpublished `lm-evaluation-harness` Git direct reference with
10
+ the official `lm-eval==0.4.13` PyPI release. The pinned tag retains the same
11
+ GSM8K task files as the validated development commit, while making wheel and
12
+ source-distribution metadata acceptable to public package indexes.
13
+ - Reject direct URL dependencies in the release metadata contract so PyPI
14
+ publication failures are caught before a tag is created.
15
+
16
+ ## 0.1.0a15
17
+
18
+ - Accept NCP DFlash checkpoints published as Hugging Face sharded SafeTensors,
19
+ validate every file referenced by `model.safetensors.index.json`, and seal
20
+ the full shard identity while retaining one-file checkpoint compatibility.
21
+ - Adopt **NCP-ArchPreview** as the public model-family name throughout the
22
+ documentation and package metadata while retaining existing distribution,
23
+ import, CLI, environment-variable, schema, and model-config identifiers for
24
+ backward compatibility.
25
+ - Document the public Stage1, Stage2 v1/v2/v3, and Stage2 DFlash2 NCPFlash
26
+ checkpoints published by the ArchSpace Collection on Hugging Face.
27
+ - Re-license original repository code under Apache-2.0 and separate upstream
28
+ attribution and asset terms into `NOTICE` and `THIRD_PARTY_NOTICES.md`.
29
+ - Pin the public upstream OCI bases used by the validated Core88 sandboxes and
30
+ add release automation that publishes runtime and scorer images to GHCR with
31
+ an immutable digest manifest.
32
+ - Add a PyPI Trusted Publishing workflow that builds once, validates the wheel
33
+ and source distribution, and publishes through GitHub OIDC without a stored
34
+ API token.
35
+ - Build each public OCI image on an isolated matrix runner, then merge and
36
+ verify their immutable digest fragments without exhausting a shared runner.
37
+ - Reclaim preinstalled hosted-runner toolchains before building the large CUDA
38
+ runtime image, and bootstrap pinned modern packaging tools in the legacy
39
+ MultiPL-E base so the release package is installed by its real identity.
40
+ - Replace asset and image placeholders with pinned public references or an
41
+ explicit gated-asset boundary, and document the one-time publisher setup.
42
+
43
+ ## 0.1.0a14
44
+
45
+ - Publish the a14 validation record for the sealed NCP DFlash
46
+ continuous-batching operating point introduced in `0.1.0a13`, without
47
+ changing the inference or scoring protocols.
48
+ - Record both the fixed active-batch/draft-width sweep and a mixed-length
49
+ 32-request continuous queue. The tested pair reached `1.43x` steady-state
50
+ continuous throughput and preserved the adaptive `1:8,2:8,4:4,8:2` policy.
51
+ - Document cold-start cost, pair-specific acceptance, and matched downstream
52
+ quality A/B results so the synthetic speed result cannot be presented as a
53
+ universal or target-exact guarantee.
54
+ - Add release-metadata consistency coverage and package the sanitized
55
+ validation evidence in the source distribution.
56
+
57
+ ## 0.1.0a13
58
+
59
+ - Seal the complete target-plus-DFlash operating point into every comparison
60
+ artifact and registration, including active batch size, scheduler queue,
61
+ draft width policy, model-runner selection, cache/mixer settings, and target
62
+ runtime controls. Legacy speculative comparison artifacts must be regenerated.
63
+ - Preserve the verified batch-to-draft-width policy when emitting Core88 and
64
+ GSM8K tasks instead of replacing it with a hard-coded width of 16 or planner
65
+ environment variables.
66
+ - Require continuous-batching A/B runs to submit at least one full scheduler
67
+ queue, and bind the same batch, queue, and runtime contract into formal
68
+ inference manifests and GSM8K aggregates.
69
+
70
+ ## 0.1.0a12
71
+
72
+ - Add the correctness-gated NCP DFlash proposer and vLLM 0.13 model-runner
73
+ adapter without patching installed vLLM files.
74
+ - Add target/draft A/B benchmarking with exact and explicitly approximate
75
+ verification modes, immutable artifact binding, speed gates, GPU-memory
76
+ evidence, and proposal/rejection telemetry.
77
+ - Extend model registration with a sealed draft identity and comparison
78
+ artifact. Formal speculative inference fails closed until the artifact
79
+ covers at least eight prompts and 1,024 forced tokens at seed 42.
80
+ - Route verified speculative registrations through GSM8K and Core88 task specs,
81
+ propagate their proven generation batch size, and reject SciQ/RULER/HELMET
82
+ speculative use.
83
+ - Add continuous scheduler-queue support and request-local target state
84
+ transactions needed for batched DFlash proposal and rejection.
85
+ - Document the source integration's known exact-parity limitation: exact modes
86
+ remain fail-closed diagnostic gates, while the evidenced tuned path is an
87
+ explicitly approximate registration requiring matched downstream quality
88
+ A/B.
89
+
90
+ ## 0.1.0a11
91
+
92
+ - Add standalone SciQ inference, scoring, status validation, and final result
93
+ materialization to the scheduler-neutral unified entry.
94
+ - Seal SciQ to the OLMo `all_supported_local` task 348 export: 1,000 test
95
+ examples, four continuation likelihoods, zero-shot `Question:/Answer:`
96
+ prompts, seed 42, one eight-GPU vLLM job, and official raw `acc`.
97
+ - Normalize OLMo's ordered metric definitions without losing their source
98
+ evidence, selecting raw `acc` ahead of `acc_norm` for SciQ.
99
+ - Add subset-aware Core-native planning and aggregation while retaining strict
100
+ full-profile order checks, exact source SHA-256 validation, complete unique
101
+ prediction coverage, and CPU-only rescoring.
102
+
103
+ ## 0.1.0a10
104
+
105
+ - Separate the immutable evaluator identity recorded in a Core88 prediction-score
106
+ snapshot from the installed release that only materializes the final tables.
107
+ - Preserve and validate the cached scorer commit/tree against the workflow even
108
+ when the clean finalizer is installed at another path or comes from a newer
109
+ release; record the finalizer identity independently in the output report.
110
+ - Extend the clean-wheel regression smoke to cover cached Core88 finalization
111
+ across distinct workflow, scorer, and installed-package paths.
112
+
113
+ ## 0.1.0a9
114
+
115
+ - Preserve the installed evaluator package tree SHA-256 when the fixed Core88
116
+ 30-column summary revalidates a workflow-bound GSM8K companion.
117
+ - Add a regression contract for matching evaluator packages installed at a
118
+ different absolute path from the workflow checkout, including a clean-wheel
119
+ installation smoke in CI.
120
+
121
+ ## 0.1.0a8
122
+
123
+ - Expose the locked BigCodeBench parser wheels at
124
+ `/opt/core88/olmo-eval-deps` through the formal sandbox image's
125
+ `PYTHONPATH`, and verify both `tree_sitter` modules during the image build.
126
+ - Give copied parser wheels fixed container-side names, allowing formal builds
127
+ to use either root-level files or paths nested inside the build context.
128
+ - Preserve that image-local dependency directory after task-spec environment
129
+ merging, so an explicit OLMo-Eval source `PYTHONPATH` cannot hide the
130
+ sandbox's parser modules.
131
+ - Replace the synthetic BigCodeBench CI layer with a build and execution of
132
+ the published `core88_bigcodebench_sandbox.Dockerfile`, using the same
133
+ locked-wheel extraction layout as the release image.
134
+
135
+ ## 0.1.0a7
136
+
137
+ - Pin the mutually compatible and previously GPU-validated dependency pair
138
+ `transformers==4.57.6` and `huggingface-hub==0.36.2`; the old public
139
+ `transformers>=5` declaration conflicted with vLLM 0.13.0's `<5` bound.
140
+ - Pin the release Math scorer runtime to `sympy==1.14.0` and
141
+ `antlr4-python3-runtime==4.11`, install it in the default runtime image, and
142
+ execute a real Minerva/MATH equivalence smoke during the Docker build.
143
+ - Load BigCodeBench's two required helpers from SHA-verified files at the
144
+ pinned OLMo-Eval commit instead of importing its eager task registry. This
145
+ removes the accidental dependency on the deleted
146
+ `huggingface_hub.utils.silent_tqdm` API without weakening source fidelity.
147
+ - Add Docker CI that builds the runtime scorer slice, runs the official Math
148
+ runtime smoke, and runs a BigCodeBench helper preflight against the pinned
149
+ upstream source.
150
+ - Allow site executors to replace only a Python task's interpreter through the
151
+ explicit `NCP_OLMO_TASK_PYTHON` boundary, so heterogeneous sandbox images do
152
+ not inherit an unrelated inference virtualenv.
153
+
154
+ ## 0.1.0a6
155
+
156
+ - Gate LMDeploy argument validation on the selected backend in the Core88
157
+ worker pool and standalone GSM8K evaluator. Public vLLM jobs no longer enter
158
+ the intentionally unavailable LMDeploy compatibility boundary.
159
+ - Make the omitted-LMDeploy validator itself a no-op for non-LMDeploy
160
+ backends, while continuing to fail closed when LMDeploy is explicitly
161
+ selected.
162
+ - Add a regression test for both sides of that backend boundary.
163
+
164
+ ## 0.1.0a5
165
+
166
+ - Remove the unpublished LMDeploy verification flag from portable vLLM
167
+ Core88, RULER, and HELMET commands. The public package intentionally omits
168
+ LMDeploy, so passing its internal-only flag made the public parsers reject
169
+ otherwise valid jobs before model loading.
170
+ - Add release-integrity coverage that rejects future command-generation leaks
171
+ of the removed flag; release validation also parses the generated Core88
172
+ worker command in the pinned GPU runtime.
173
+
174
+ ## 0.1.0a4
175
+
176
+ - Pin the official `lm-evaluation-harness` commit required by GSM8K/Core88.
177
+ - Include that runtime in the `vllm` and CPU-only `gsm8k` installation extras.
178
+ - Fail early on a missing or version-drifted harness and record its immutable
179
+ identity in prepared GSM8K manifests.
180
+
181
+ ## 0.1.0a3
182
+
183
+ - Restored the CUDA device-layout helper required when Core88 starts its GPU
184
+ worker pool from an installed package.
185
+ - Made the unpublished native-Megatron reference side of the optional parity
186
+ harness fail early with an actionable boundary instead of importing modules
187
+ that are not part of the public distribution.
188
+ - Added release-integrity tests for internal package imports and worker device
189
+ mapping so source extraction omissions fail in CPU-only CI.
190
+ - Kept the GSM8K, Core88, RULER, and HELMET vLLM protocol contracts unchanged.
191
+
192
+ ## 0.1.0a2
193
+
194
+ - Replaced the site-specific submission layer with portable JSON task specs,
195
+ atomic task status files, and a local task runner.
196
+ - Added example local, Slurm, and Kubernetes adapters with no site defaults.
197
+ - Added a reproducible CUDA runtime image, explicit Core88 sandbox image
198
+ contracts, and sealed/verified Hugging Face asset preparation.
199
+ - Made formal execution offline by default and rejected serialized secrets.
200
+ - Preserved strict artifact validation and raw-rescore fallback for Core88.
201
+ - Replaced Core88's worker-side `.git` requirement with an exact evaluator
202
+ source-tree SHA-256 while retaining Git revision evidence when available.
203
+
204
+ ## 0.1.0a1
205
+
206
+ - First standalone alpha release.
207
+ - Added a unified interactive and non-interactive CLI for model registration,
208
+ inference, scoring, status, and finalization.
209
+ - Added vLLM support for stock OLMo and the experimental NCP-ArchPreview plugin.
210
+ - Added Core88 plus standard GSM8K, RULER 4K-64K, and HELMET 8K-64K.
211
+ - Added tokenizer-bound sealed long-context preparation, fail-closed resume and
212
+ finalization contracts and explicit seed 42.
213
+ - Removed private paths, registry names, mounts, accounts, proxies, and model
214
+ defaults from the published code.
@@ -0,0 +1,26 @@
1
+ # Contributing
2
+
3
+ Please keep benchmark protocol changes explicit and reviewable. A protocol
4
+ change must update tests, result metadata/schema where necessary,
5
+ `docs/PROTOCOLS.md`, and the changelog. Do not mix predictions from different
6
+ protocol revisions under resume.
7
+
8
+ Before submitting a change, run:
9
+
10
+ ```bash
11
+ python -m compileall -q src tests
12
+ python -m pytest
13
+ ruff check src tests scripts
14
+ git diff --check
15
+ for script in scripts/*.sh; do bash -n "$script"; done
16
+ python -m py_compile scripts/*.py
17
+ ```
18
+
19
+ Release candidates must also follow
20
+ [`docs/RELEASE_CHECKLIST.md`](docs/RELEASE_CHECKLIST.md), including clean-wheel,
21
+ distribution-content, public-tree, and formal sandbox-image validation. Version
22
+ changes, tags, and publication are explicit release actions and should not be
23
+ mixed into routine cleanup.
24
+
25
+ Never commit model weights, benchmark data, credentials, private registry
26
+ names, internal mounts, or judge API keys.