zorya-classifier 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE.md +2 -0
- package/README.md +37 -9
- package/dist/app/cli-arguments.d.ts +40 -0
- package/dist/app/cli-arguments.js +67 -0
- package/dist/app/create-classifier.d.ts +24 -0
- package/dist/app/create-classifier.js +226 -14
- package/dist/app/extraction-files.d.ts +9 -0
- package/dist/app/extraction-files.js +28 -0
- package/dist/cli.js +58 -14
- package/dist/entities/boundary-view.d.ts +29 -0
- package/dist/entities/boundary-view.js +1 -0
- package/dist/entities/contracts.d.ts +81 -1
- package/dist/entities/contracts.js +7 -0
- package/dist/entities/cutout-raster.d.ts +7 -0
- package/dist/entities/cutout-raster.js +1 -0
- package/dist/entities/object-proposals.d.ts +56 -0
- package/dist/entities/object-proposals.js +8 -0
- package/dist/entities/representation.d.ts +225 -0
- package/dist/entities/representation.js +33 -0
- package/dist/entities/segmentation-metadata.d.ts +11 -0
- package/dist/entities/segmentation-metadata.js +1 -0
- package/dist/entities/segmentation-verification.d.ts +31 -0
- package/dist/entities/segmentation-verification.js +1 -0
- package/dist/entities/segmentation.d.ts +164 -0
- package/dist/entities/segmentation.js +5 -0
- package/dist/entities/whole-object.d.ts +132 -0
- package/dist/entities/whole-object.js +7 -0
- package/dist/features/choice.d.ts +1 -1
- package/dist/features/choice.js +2 -2
- package/dist/features/segmentation/box-check.d.ts +10 -0
- package/dist/features/segmentation/box-check.js +299 -0
- package/dist/features/segmentation/mask.d.ts +6 -0
- package/dist/features/segmentation/mask.js +89 -0
- package/dist/features/segmentation/packed-mask.d.ts +5 -0
- package/dist/features/segmentation/packed-mask.js +53 -0
- package/dist/index.d.ts +6 -1
- package/dist/infrastructure/boundary-view.d.ts +2 -0
- package/dist/infrastructure/boundary-view.js +263 -0
- package/dist/infrastructure/openrouter-common.d.ts +8 -8
- package/dist/infrastructure/openrouter-vision.d.ts +3 -0
- package/dist/infrastructure/openrouter-vision.js +5 -0
- package/dist/infrastructure/raster.d.ts +10 -1
- package/dist/infrastructure/raster.js +99 -4
- package/dist/infrastructure/segmentation/box-presentation.d.ts +2 -0
- package/dist/infrastructure/segmentation/box-presentation.js +136 -0
- package/dist/infrastructure/segmentation/cutout-raster.d.ts +3 -0
- package/dist/infrastructure/segmentation/cutout-raster.js +79 -0
- package/dist/infrastructure/segmentation/grabcut/index.d.ts +17 -0
- package/dist/infrastructure/segmentation/grabcut/index.js +121 -0
- package/dist/infrastructure/segmentation/grabcut/worker-inference.d.ts +47 -0
- package/dist/infrastructure/segmentation/grabcut/worker-inference.js +260 -0
- package/dist/infrastructure/segmentation/index.d.ts +2 -0
- package/dist/infrastructure/segmentation/index.js +2 -0
- package/dist/infrastructure/segmentation/mobile-sam/index.d.ts +66 -0
- package/dist/infrastructure/segmentation/mobile-sam/index.js +478 -0
- package/dist/infrastructure/segmentation/mobile-sam/worker-inference.d.ts +149 -0
- package/dist/infrastructure/segmentation/mobile-sam/worker-inference.js +845 -0
- package/dist/infrastructure/segmentation/native-child.d.ts +23 -0
- package/dist/infrastructure/segmentation/native-child.js +297 -0
- package/dist/infrastructure/segmentation/native-protocol.d.ts +923 -0
- package/dist/infrastructure/segmentation/native-protocol.js +242 -0
- package/dist/infrastructure/segmentation/native-worker.d.ts +1 -0
- package/dist/infrastructure/segmentation/native-worker.js +93 -0
- package/dist/infrastructure/segmentation/probe-backend.d.ts +1 -0
- package/dist/infrastructure/segmentation/probe-backend.js +31 -0
- package/dist/infrastructure/segmentation/proposal-presentation.d.ts +3 -0
- package/dist/infrastructure/segmentation/proposal-presentation.js +371 -0
- package/dist/infrastructure/segmentation/verify-asset.d.ts +4 -0
- package/dist/infrastructure/segmentation/verify-asset.js +32 -0
- package/dist/infrastructure/text-representation.d.ts +23 -0
- package/dist/infrastructure/text-representation.js +226 -0
- package/dist/infrastructure/vision-chat.d.ts +1 -1
- package/dist/infrastructure/vision-chat.js +13 -4
- package/dist/openai-compatible.d.ts +3 -0
- package/dist/openai-compatible.js +4 -0
- package/dist/openrouter.d.ts +2 -2
- package/dist/openrouter.js +1 -1
- package/dist/processes/boundary-state.d.ts +12 -0
- package/dist/processes/boundary-state.js +196 -0
- package/dist/processes/classify.d.ts +2 -1
- package/dist/processes/classify.js +21 -3
- package/dist/processes/extract-from-region.d.ts +19 -0
- package/dist/processes/extract-from-region.js +415 -0
- package/dist/processes/extract.d.ts +25 -0
- package/dist/processes/extract.js +223 -0
- package/dist/processes/locate.d.ts +2 -1
- package/dist/processes/locate.js +84 -11
- package/dist/processes/proposal-location.d.ts +19 -0
- package/dist/processes/proposal-location.js +396 -0
- package/dist/processes/whole-object.d.ts +7 -0
- package/dist/processes/whole-object.js +272 -0
- package/dist/segmentation.d.ts +10 -0
- package/dist/segmentation.js +4 -0
- package/dist/shared/input-budget.d.ts +7 -0
- package/dist/shared/input-budget.js +21 -0
- package/docs/0.2.0-plan.md +190 -0
- package/docs/README.ru.md +43 -14
- package/docs/acceptance.md +116 -3
- package/docs/api.md +12 -6
- package/docs/architecture.md +22 -7
- package/docs/benchmarks.md +10 -0
- package/docs/categorical-presence-port.md +26 -0
- package/docs/evidence/v02/baseline.json +1043 -0
- package/docs/evidence/v02/boundary-variants.md +17 -0
- package/docs/evidence/v02/box-confirmation-dev40/README.md +15 -0
- package/docs/evidence/v02/box-confirmation-dev40/component-refinement.json +246 -0
- package/docs/evidence/v02/box-confirmation-dev40/evaluation.json +1663 -0
- package/docs/evidence/v02/box-confirmation-dev40/provenance.json +130 -0
- package/docs/evidence/v02/box-confirmation-dev40/report.json +127 -0
- package/docs/evidence/v02/box-confirmation-dev40-freeze-20261020-v1.json +230 -0
- package/docs/evidence/v02/box-confirmation-method-selection-20261020-v1.json +85 -0
- package/docs/evidence/v02/box-heldout-cancelled-before-dispatch-20261021-v1.json +32 -0
- package/docs/evidence/v02/box-heldout-combined-seal-20261021-v1.json +89 -0
- package/docs/evidence/v02/box-heldout-evaluator-truth-seal-20261021-v1.json +61 -0
- package/docs/evidence/v02/box-heldout-exclusion-audit-20261020-v1.json +81 -0
- package/docs/evidence/v02/box-heldout-map-seal-20261021-v1.json +48 -0
- package/docs/evidence/v02/box-heldout-photo-seal-20261020-v1.json +62 -0
- package/docs/evidence/v02/box-heldout-run-freeze-20261021-v1.json +61 -0
- package/docs/evidence/v02/box-heldout-source-review-20261020-v1.json +134 -0
- package/docs/evidence/v02/box-heldout-ui-seal-20261020-v1.json +44 -0
- package/docs/evidence/v02/calculator-proof-root-review-20261020-v1.json +63 -0
- package/docs/evidence/v02/categorical-dev40-freeze.json +94 -0
- package/docs/evidence/v02/categorical-dev40-preserve.json +460 -0
- package/docs/evidence/v02/categorical-dev40-target-only.json +460 -0
- package/docs/evidence/v02/categorical-heldout-admission-20261020-v3.json +215 -0
- package/docs/evidence/v02/categorical-heldout-admission-20261020-v4.json +270 -0
- package/docs/evidence/v02/categorical-heldout-dispatch-authorization-20261020-v4.json +79 -0
- package/docs/evidence/v02/categorical-heldout-predispatch-20261020-v3.json +57 -0
- package/docs/evidence/v02/categorical-heldout-producer-source-map-v4.json +262 -0
- package/docs/evidence/v02/categorical-heldout-producer-source-map.json +263 -0
- package/docs/evidence/v02/categorical-heldout-run-freeze-20261020-v3.json +35 -0
- package/docs/evidence/v02/categorical-heldout-run-freeze-20261020-v4.json +35 -0
- package/docs/evidence/v02/categorical-heldout-v4/candidate-evaluation.json +2812 -0
- package/docs/evidence/v02/categorical-heldout-v4/candidate-physical-receipts.json +15261 -0
- package/docs/evidence/v02/categorical-heldout-v4/candidate-provenance.json +131 -0
- package/docs/evidence/v02/categorical-heldout-v4/control-evaluation.json +855 -0
- package/docs/evidence/v02/categorical-heldout-v4/control-physical-receipts.json +4402 -0
- package/docs/evidence/v02/categorical-heldout-v4/control-provenance.json +31 -0
- package/docs/evidence/v02/categorical-heldout-v4/mask-normalized-exploratory.json +682 -0
- package/docs/evidence/v02/categorical-heldout-v4/paired-qualification.json +21 -0
- package/docs/evidence/v02/categorical-heldout-v4/report.json +258 -0
- package/docs/evidence/v02/categorical-presence-dev6.json +144 -0
- package/docs/evidence/v02/categorical-presence-dev6.md +18 -0
- package/docs/evidence/v02/categorical-vision-method-selection.json +90 -0
- package/docs/evidence/v02/checked-region-component-v1/README.md +7 -0
- package/docs/evidence/v02/checked-region-component-v1/evidence.json +311 -0
- package/docs/evidence/v02/checked-region-resource-interrupted-2b0d09f.json +102 -0
- package/docs/evidence/v02/checked-region-segmentation-resource-4df544c-receipt.json +167 -0
- package/docs/evidence/v02/checked-region-segmentation-resource-4df544c-root-review.json +58 -0
- package/docs/evidence/v02/checked-region-segmentation-resource-987ac32-receipt.json +158 -0
- package/docs/evidence/v02/ci-012b935.json +17 -0
- package/docs/evidence/v02/ci-0c365cb.json +372 -0
- package/docs/evidence/v02/ci-185bde8.json +32 -0
- package/docs/evidence/v02/ci-24f849f.json +95 -0
- package/docs/evidence/v02/ci-25c19cd.json +375 -0
- package/docs/evidence/v02/ci-2922caf.json +375 -0
- package/docs/evidence/v02/ci-29357d7.json +29 -0
- package/docs/evidence/v02/ci-32aa90d.json +24 -0
- package/docs/evidence/v02/ci-35e3064.json +376 -0
- package/docs/evidence/v02/ci-4331b1b.json +384 -0
- package/docs/evidence/v02/ci-43b7426.json +376 -0
- package/docs/evidence/v02/ci-450439c.json +373 -0
- package/docs/evidence/v02/ci-46283fe.json +29 -0
- package/docs/evidence/v02/ci-4c9c09f.json +34 -0
- package/docs/evidence/v02/ci-5579646.json +27 -0
- package/docs/evidence/v02/ci-6f9cc15.json +127 -0
- package/docs/evidence/v02/ci-7c1051f.json +27 -0
- package/docs/evidence/v02/ci-9837888.json +34 -0
- package/docs/evidence/v02/ci-987ac32.json +29 -0
- package/docs/evidence/v02/ci-9d00fe5.json +25 -0
- package/docs/evidence/v02/ci-9f85acc.json +127 -0
- package/docs/evidence/v02/ci-be275a6.json +201 -0
- package/docs/evidence/v02/ci-c107ddf.json +372 -0
- package/docs/evidence/v02/ci-c35f67d.json +127 -0
- package/docs/evidence/v02/ci-c5eddd8.json +32 -0
- package/docs/evidence/v02/ci-d2042e0.json +372 -0
- package/docs/evidence/v02/ci-d684259.json +375 -0
- package/docs/evidence/v02/ci-e0c190b.json +127 -0
- package/docs/evidence/v02/ci-e551253.json +372 -0
- package/docs/evidence/v02/ci-f9d4633.json +29 -0
- package/docs/evidence/v02/dev1-proposal-evaluation.md +13 -0
- package/docs/evidence/v02/dev2-mobile-sam-proposal-oracle.md +21 -0
- package/docs/evidence/v02/dev2-proposal-evaluation.md +21 -0
- package/docs/evidence/v02/fresh-development.md +16 -0
- package/docs/evidence/v02/fresh-native-numeric/artifact-hashes.json +9 -0
- package/docs/evidence/v02/fresh-native-numeric/evaluation-root-v1.json +568 -0
- package/docs/evidence/v02/fresh-native-numeric/run-manifest.json +342 -0
- package/docs/evidence/v02/fresh-native-numeric/summary.json +5654 -0
- package/docs/evidence/v02/fresh-native-outline-axis/artifact-hashes.json +9 -0
- package/docs/evidence/v02/fresh-native-outline-axis/evaluation-root-v1.json +568 -0
- package/docs/evidence/v02/fresh-native-outline-axis/run-manifest.json +378 -0
- package/docs/evidence/v02/fresh-native-outline-axis/summary.json +5605 -0
- package/docs/evidence/v02/fresh-text/README.md +23 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/original-summary.json +4416 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/original-summary.json +4647 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/classify-followup-summary.json +846 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/original-summary.json +1789 -0
- package/docs/evidence/v02/fresh-text/no-image-control/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/no-image-control/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/no-image-control/original-summary.json +3953 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/original-summary.json +3974 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/original-summary.json +4945 -0
- package/docs/evidence/v02/fresh-text/report.json +284 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/classify-followup-summary.json +846 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/original-summary.json +2189 -0
- package/docs/evidence/v02/heldout-evaluation-20261020.md +37 -0
- package/docs/evidence/v02/heldout-input-derivation.md +18 -0
- package/docs/evidence/v02/integration-0c365cb.json +90 -0
- package/docs/evidence/v02/integration-25c19cd.json +52 -0
- package/docs/evidence/v02/integration-35e3064.json +41 -0
- package/docs/evidence/v02/integration-4331b1b.json +42 -0
- package/docs/evidence/v02/integration-4c9c09f.json +46 -0
- package/docs/evidence/v02/integration-8010aad.json +48 -0
- package/docs/evidence/v02/integration-c1aa640.json +41 -0
- package/docs/evidence/v02/integration-eea1790.json +46 -0
- package/docs/evidence/v02/integration-fa82e65.json +42 -0
- package/docs/evidence/v02/jpeg-transport-offline.json +268 -0
- package/docs/evidence/v02/jpeg-transport-offline.md +7 -0
- package/docs/evidence/v02/local-archive-cleanup.json +59 -0
- package/docs/evidence/v02/native-base64-after.json +30 -0
- package/docs/evidence/v02/native-base64-before.json +32 -0
- package/docs/evidence/v02/native-checked-region-windows-46283fe.json +248 -0
- package/docs/evidence/v02/native-checked-region-windows-987ac32.json +141 -0
- package/docs/evidence/v02/native-grabcut-windows-4c494a3-run2.json +148 -0
- package/docs/evidence/v02/native-grabcut-windows-4c494a3-run3.json +148 -0
- package/docs/evidence/v02/native-grabcut-windows-4c494a3.json +56 -0
- package/docs/evidence/v02/native-proposal-windows-0c365cb.json +148 -0
- package/docs/evidence/v02/native-proposal-windows-450439c.json +156 -0
- package/docs/evidence/v02/native-proposal-windows-4c9c09f-retry1.json +147 -0
- package/docs/evidence/v02/native-proposal-windows-4c9c09f.json +52 -0
- package/docs/evidence/v02/native-region-windows-efc9318.json +163 -0
- package/docs/evidence/v02/native-windows-eea1790-baseline.json +198 -0
- package/docs/evidence/v02/native-windows-eea1790.json +228 -0
- package/docs/evidence/v02/ordinary-luna-axis/run-manifest.json +99 -0
- package/docs/evidence/v02/ordinary-luna-axis/summary.json +811 -0
- package/docs/evidence/v02/owned-temp-cleanup-20261020-v1.json +28 -0
- package/docs/evidence/v02/presentation-paired-20261020.json +1438 -0
- package/docs/evidence/v02/proposal-resource-soak-261dc23.json +201 -0
- package/docs/evidence/v02/proposal-resource-soak-450439c-receipt.md +13 -0
- package/docs/evidence/v02/reconstructed-c03-box.json +41 -0
- package/docs/evidence/v02/region-seeded-dev-v1/README.md +17 -0
- package/docs/evidence/v02/region-seeded-dev-v1/evaluation.json +260 -0
- package/docs/evidence/v02/region-seeded-dev-v2/README.md +15 -0
- package/docs/evidence/v02/region-seeded-dev-v2/evaluation.json +232 -0
- package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/README.md +9 -0
- package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/control-identity-failure.json +22 -0
- package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/evaluation.json +160 -0
- package/docs/evidence/v02/region-seeded-dev-v3-control-r2/README.md +9 -0
- package/docs/evidence/v02/region-seeded-dev-v3-control-r2/attempt-accounting.json +55 -0
- package/docs/evidence/v02/region-seeded-dev-v3-control-r2/evaluation.json +136 -0
- package/docs/evidence/v02/region-seeded-development-control-r2-freeze-20261021.json +132 -0
- package/docs/evidence/v02/region-seeded-development-freeze-20261021-v1.json +167 -0
- package/docs/evidence/v02/region-seeded-development-freeze-20261021-v2.json +186 -0
- package/docs/evidence/v02/region-seeded-development-freeze-20261021-v3.json +205 -0
- package/docs/evidence/v02/region-seeded-heldout-cancelled-before-dispatch-20261021-v2.json +20 -0
- package/docs/evidence/v02/region-seeded-heldout-dispatch-authorization-20261021-v3.json +47 -0
- package/docs/evidence/v02/region-seeded-heldout-readiness-audit-20261021-v3.json +125 -0
- package/docs/evidence/v02/region-seeded-heldout-run-freeze-20261021-v2.json +234 -0
- package/docs/evidence/v02/region-seeded-heldout-run-freeze-20261021-v3.json +357 -0
- package/docs/evidence/v02/region-seeded-heldout-v3/README.md +19 -0
- package/docs/evidence/v02/region-seeded-heldout-v3/evaluation-summary.json +445 -0
- package/docs/evidence/v02/region-seeded-method-selection-20261021-v2.json +66 -0
- package/docs/evidence/v02/region-seeded-method-selection-20261021-v3.json +120 -0
- package/docs/evidence/v02/region-segmentation-resource-0ba4c87-receipt.json +156 -0
- package/docs/evidence/v02/resource-soak-linux-8010aad.json +125 -0
- package/docs/evidence/v02/screen-v2-terminal-evaluation.md +22 -0
- package/docs/evidence/v02/seed-outline/run-manifest.json +59 -0
- package/docs/evidence/v02/seed-outline/summary.json +487 -0
- package/docs/evidence/v02/seed-unbounded/run-manifest.json +80 -0
- package/docs/evidence/v02/seed-unbounded/summary.json +730 -0
- package/docs/evidence/v02/segmentation/README.md +21 -0
- package/docs/evidence/v02/segmentation/component-comparison-summary.json +240 -0
- package/docs/evidence/v02/segmentation/provenance/MOBILE-SAM-LICENSE.txt +201 -0
- package/docs/evidence/v02/segmentation/provenance/OPENCV-LICENSE.txt +202 -0
- package/docs/evidence/v02/segmentation/provenance/mobile-sam-download-receipt.json +29 -0
- package/docs/evidence/v02/segmentation/provenance/mobile-sam-graph-audit.json +214 -0
- package/docs/evidence/v02/segmentation/provenance/mobile-sam-model-metadata.json +166 -0
- package/docs/evidence/v02/split-choice-noul-dev6.json +72 -0
- package/docs/evidence/v02/split-choice-noul-dev6.md +11 -0
- package/docs/evidence/v02/supported-vision-screen-20261020.md +65 -0
- package/docs/evidence/v02/wesnoth-1.16.11-minimap-projection-source-audit.md +56 -0
- package/docs/evidence/v02/wesnoth-proof-root-review-20261020-v1.json +76 -0
- package/docs/operations.md +8 -2
- package/docs/plan.md +2 -0
- package/docs/publishing.md +16 -1
- package/docs/research/text-transport-audit.md +66 -0
- package/docs/v02-usage.md +164 -0
- package/docs/vision-results.md +31 -2
- package/package.json +30 -5
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "independent-wesnoth-excluded-proof-review-v1",
|
|
3
|
+
"sourceMapSha256": "41d2b65d3098c77c68d560832938c9e38bf2a549496e338cb158835ebbdff417",
|
|
4
|
+
"imageSha256": {
|
|
5
|
+
"a": "560f6f6fa5b69e0ff30f5416457f537ede44c2d023cd9096785ad98865d19c86",
|
|
6
|
+
"b": "cc7763407c1084802c3ab5e78c538ce7da6c7c1186d396c4daae6304bfabd569",
|
|
7
|
+
"a2": "0a89337c48966476368131328402d056940da7fefc67071e6883b825a5b27917"
|
|
8
|
+
},
|
|
9
|
+
"roiRawSha256": {
|
|
10
|
+
"a": "49416ea53f982154205b2a0e6c04deea74c5a34db6d3eddfa6e706793e14927a",
|
|
11
|
+
"b": "440809bfeff0badb16815394f64ee40b62d1c3ee904c3670e97bf927d40546e1",
|
|
12
|
+
"a2": "49416ea53f982154205b2a0e6c04deea74c5a34db6d3eddfa6e706793e14927a"
|
|
13
|
+
},
|
|
14
|
+
"captureSize": {
|
|
15
|
+
"width": 1024,
|
|
16
|
+
"height": 768
|
|
17
|
+
},
|
|
18
|
+
"contentRect": {
|
|
19
|
+
"left": 856,
|
|
20
|
+
"top": 11,
|
|
21
|
+
"width": 160,
|
|
22
|
+
"height": 212
|
|
23
|
+
},
|
|
24
|
+
"bitmapRoi": {
|
|
25
|
+
"left": 856,
|
|
26
|
+
"top": 11,
|
|
27
|
+
"width": 159,
|
|
28
|
+
"height": 212
|
|
29
|
+
},
|
|
30
|
+
"sameStateRoiByteIdentical": true,
|
|
31
|
+
"markerCount": 51,
|
|
32
|
+
"changedPixels": 1297,
|
|
33
|
+
"float32RepeatedSampler": {
|
|
34
|
+
"projectedPixels": 1363,
|
|
35
|
+
"deltaInside": 1297,
|
|
36
|
+
"outside": [],
|
|
37
|
+
"projectedUnchanged": 66,
|
|
38
|
+
"allMarkerProjectionsIntersectDelta": true,
|
|
39
|
+
"sampledSourceYAtRow53": 215,
|
|
40
|
+
"cursorAtRow53": 215.9999237060547
|
|
41
|
+
},
|
|
42
|
+
"idealRationalSampler": {
|
|
43
|
+
"projectedPixels": 1363,
|
|
44
|
+
"deltaInside": 1294,
|
|
45
|
+
"outside": [
|
|
46
|
+
[923, 64],
|
|
47
|
+
[924, 64],
|
|
48
|
+
[925, 64]
|
|
49
|
+
],
|
|
50
|
+
"projectedUnchanged": 69,
|
|
51
|
+
"allMarkerProjectionsIntersectDelta": true,
|
|
52
|
+
"sampledSourceYAtRow53": 216
|
|
53
|
+
},
|
|
54
|
+
"providerCalls": 0,
|
|
55
|
+
"freshCohortImagesRead": false,
|
|
56
|
+
"freshCohortTruthRead": false,
|
|
57
|
+
"scope": "Excluded proof only. Projection is an upper bound, not an exact foreground mask; painter overdraw leaves projected pixels unchanged. Full-frame A/A2 stability is not claimed.",
|
|
58
|
+
"operatorSha256": "b37bfea4abeeb2b25c4fb630129bd1da483b798f5df8bba2846ca4e15c171a1f",
|
|
59
|
+
"rawReviewSha256": "c0e359dd2811ee90d1a356b7ac8357fd50d3bf2182f68380f249c40230c4928d",
|
|
60
|
+
"sourceTransform": {
|
|
61
|
+
"map": "Wesnoth 1.16.11 official 4p_Siege_Castles.map",
|
|
62
|
+
"rawGrid": [38, 38],
|
|
63
|
+
"defaultBorderSize": 1,
|
|
64
|
+
"unscaledBitmap": [648, 864],
|
|
65
|
+
"markerRect": "L=18*x-6; T=24*y+(odd(x)?0:-12); width=18; height=24; half-open",
|
|
66
|
+
"sampling": "float32(source/destination); float32 accumulator initialized0; truncation before each float32 addition",
|
|
67
|
+
"sourceAudit": "wesnoth-1.16.11-minimap-projection-source-audit.md"
|
|
68
|
+
},
|
|
69
|
+
"limits": [
|
|
70
|
+
"This proof is excluded from the new blind cohort.",
|
|
71
|
+
"Same-state stability is established only for the minimap bitmap ROI.",
|
|
72
|
+
"Whole-source projection covers markers, including pixels hidden by later terrain painting. It is not an exact foreground mask.",
|
|
73
|
+
"Controlled Wesnoth rendering is one source family; this is not a diverse natural-game accuracy benchmark.",
|
|
74
|
+
"No model request or localization accuracy was measured by this proof."
|
|
75
|
+
]
|
|
76
|
+
}
|
package/docs/operations.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Configure a trusted model endpoint or the optional OpenRouter route. SDK factories receive endpoint/model/key explicitly; the core knows only DecisionPort. Keep server-specific credentials separate from OpenRouter credentials. Store keys in ignored local files or a secret manager. No startup request is made.
|
|
4
4
|
|
|
5
|
-
CLI requires `ZORYA_MODEL` and defaults to `ZORYA_MODE=decisions`. For ordinary vision models/custom chat servers choose `ZORYA_MODE=chat`. OpenRouter mode requires `OPENROUTER_API_KEY` and `ZORYA_PROVIDER`; direct mode uses a full `ZORYA_ENDPOINT` with optional separate `ZORYA_API_KEY`, and never forwards the OpenRouter key. In chat mode, optional `ZORYA_REASONING_EFFORT` and `ZORYA_RESPONSE_FORMAT` must be supported by the chosen endpoint. Use `zorya-classifier --help`. Commands: classify-text
|
|
5
|
+
CLI requires `ZORYA_MODEL` and defaults to `ZORYA_MODE=decisions`. For ordinary vision models/custom chat servers choose `ZORYA_MODE=chat`. OpenRouter mode requires `OPENROUTER_API_KEY` and `ZORYA_PROVIDER`; direct mode uses a full `ZORYA_ENDPOINT` with optional separate `ZORYA_API_KEY`, and never forwards the OpenRouter key. In chat mode, optional `ZORYA_REASONING_EFFORT` and `ZORYA_RESPONSE_FORMAT` must be supported by the chosen endpoint. Use `zorya-classifier --help`. Commands: classify-text and classify-image are supported; locate and extract are experimental and unqualified (see README capability table). CLI calls real paid models. Native images are decoded locally through Sharp; external requests send prepared text/images to the configured route. The library neither writes nor logs media by default.
|
|
6
6
|
|
|
7
7
|
Choose a finite timeout based on your UI needs. Default 45s includes queue time; no latency SLA is asserted. Handle CAPACITY by applying upstream backpressure rather than creating more clients. Explicitly cancel superseded application requests and call dispose on shutdown. A cancelled native job may finish before its slot is released; this prevents unbounded physical concurrency.
|
|
8
8
|
|
|
@@ -10,6 +10,12 @@ Unknown cost remains unknown. Budget your own calls or use the benchmark's conse
|
|
|
10
10
|
|
|
11
11
|
Build release locally with npm run check and npm run pack:check. Produce npm pack only after those gates. Review LICENSE/NOTICE/acceptance and archive contents before publishing. Publication destinations are GitHub `zoomplus/zorya-classifier` and npm `zorya-classifier` under owner `zoomplus`. Authentication stays outside the repository. Check the remote release/registry and external receipt for actual publication state.
|
|
12
12
|
|
|
13
|
-
Owner handoff and authentication steps are in [publishing](publishing.md). Secret scanning commands and their limits are in [SECURITY](
|
|
13
|
+
Owner handoff and authentication steps are in [publishing](publishing.md). Secret scanning commands and their limits are in [SECURITY](https://github.com/zoomplus/zorya-classifier/blob/main/SECURITY.md); they run in Husky, source checks and the archive check. Release manifests live next to the prepared archives, outside Git/npm contents.
|
|
14
14
|
|
|
15
15
|
Compatibility with another image-capable model does not imply tested accuracy or support for all structured-output parameters. Choose prompt/JSON-object/JSON-schema mode according to server capabilities, inspect explicit failures and consult docs/vision-results.md. Never label generated ranks as calibrated probabilities.
|
|
16
|
+
|
|
17
|
+
# 0.2 additions
|
|
18
|
+
|
|
19
|
+
Whole-object location, explicit extraction backends, CLI artifacts and ownership are experimental and described in [the 0.2 guide](v02-usage.md). The core input reservation is bounded across active and queued work; native admission rejects before expensive snapshots/base64. Keep a shared segmenter or object-proposal adapter alive until all owning clients have disposed. The optional CPU proposal adapter rejects sources above 2,097,152 pixels and packs at most 36 masks into a 10 MiB batch; it does not silently resize. Proposal selection is currently an API composition; the CLI retains the explicit interval/segmenter path. Raw native scores are uncalibrated diagnostics, never probability thresholds. Native calls currently start a fresh owned child each time; session reuse is not implemented. Do not extrapolate cold synthetic smoke timings into production latency or photo quality.
|
|
20
|
+
|
|
21
|
+
The [native resource harness](https://github.com/zoomplus/zorya-classifier/blob/main/benchmarks/v02/NATIVE-SMOKE.md) records independent parent samples, short-child memory, idle/busy phases, cancellation and child ownership without forcing garbage collection. A short harness verification is separate from the required two-hour resource run. Use an explicit corpus/asset manifest and preserve unsuccessful results.
|
package/docs/plan.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Accepted open-source extraction plan
|
|
2
2
|
|
|
3
|
+
Current implementation: [accepted 0.2 plan](0.2.0-plan.md), whole-object bounds, extraction and comparative text-only image experiments. The first-release plan below is retained as history.
|
|
4
|
+
|
|
3
5
|
First deliver an independent MIT Node.js/TypeScript library with classify(text/image/both) and locate(image,target), powered by Jev 1.14/TypeSafe. Preserve three Choice stages for localization, stable maxima/ties and source coordinates; no implicit model/provider fallback or retries. Classification is one native Choice. Separate heavy optional refinement and game/application dependencies.
|
|
4
6
|
|
|
5
7
|
Prepare public contracts, strict schemas, source rules, architecture/API/operations documentation, examples/CLI, offline regressions and Windows/Linux CI. Package into a clean npm archive and test installation outside the repository. Scan release contents for secrets, private paths and unwanted assets. Prepare a clean source repository; public GitHub/npm publishing is a separate action.
|
package/docs/publishing.md
CHANGED
|
@@ -17,5 +17,20 @@ For later CI releases, configure [npm trusted publishing](https://docs.npmjs.com
|
|
|
17
17
|
3. Run `npm run check`, `npm run pack:check`, `npm run format:check` and a redacted independent secret scan. Inspect actual staged blobs and the produced archive, not only `.gitignore`.
|
|
18
18
|
4. Create/push only the clean standalone history, enable secret scanning/push protection and inspect the CI matrix. Raw runs, environment files, personal media and upstream history stay local. Public corpus downloads retain source licenses.
|
|
19
19
|
5. Pack the reviewed version, verify its SHA256, then publish with the authorized account. Require the owner's authentication confirmation when prompted. Record registry integrity, Git tag/commit and release evidence.
|
|
20
|
+
6. Verify the published version and `latest` dist-tag with the registry. Add the matching version tag and GitHub release notes. Keep the package's `repository`, `homepage` and `bugs` links correct, link npm prominently from GitHub, and update npm keywords plus GitHub Topics for the capabilities actually shipped. Examples include classification, object localization, whole-object bounding boxes, optional segmentation/cutouts, TypeScript and provider-independent model integration. Do not advertise an unqualified text-image research profile as supported.
|
|
20
21
|
|
|
21
|
-
GitHub
|
|
22
|
+
Both GitHub and npm publication are authorized for this project. A local archive remains useful for pre-release installation, but does not complete the requested release.
|
|
23
|
+
|
|
24
|
+
## 0.2 release evidence
|
|
25
|
+
|
|
26
|
+
Use the original-region/full-source-segmentation workflow in the current usage guide. Older interval/proposal experiments and their failed reports remain historical evidence; do not relabel them as measurements of the new flow. Record region hits separately from mask-derived object boxes and pixel-mask quality. The image-free control produces regions only.
|
|
27
|
+
|
|
28
|
+
Before release, match every runtime file in the final archive to the bytes covered by native/resource acceptance, and require green Windows/Linux × Node 22/24 CI for the release source. A later documentation-only archive can have a different package SHA while retaining the tested runtime; record both complete archive hashes and the explicit runtime-file parity proof. Keep a final independently installed consumer check for the actual release archive.
|
|
29
|
+
|
|
30
|
+
Keep the final release manifest outside its own archives to avoid self-reference. It records the clean source commit, archive hashes/integrities, model recipe and corpus seals, preserved failures, native/resource receipts, CI run and redacted secret scan. Publish those exact archive bytes, verify the registry response and dist-tag, then attach the matching source and npm artifact to the GitHub release. Do not replace failed accuracy or resource gates with an offline test count.
|
|
31
|
+
|
|
32
|
+
## 0.2.1 release-candidate handoff
|
|
33
|
+
|
|
34
|
+
This branch prepares a local **0.2.1 release candidate** from the published **0.2.0** package baseline. Only experimental status documentation, JSDoc, CLI help, the package description, and a test-only Git fixture isolation fix in `test/secrets.test.ts` changed. There are no model, default, or algorithm/runtime behavior changes relative to 0.2.0. At local 0.2.1 release-candidate preparation time, npm and GitHub publication for 0.2.1 had not yet been recorded in this handoff; check the repository releases, npm registry entry, and external release receipt for the current publication state.
|
|
35
|
+
|
|
36
|
+
A failed pre-commit attempt during local release preparation is preserved in the maintainer’s local release-preparation logs. That failure led to the narrow test-only isolation fix so hook-provided `GIT_*` variables cannot redirect fixture repositories or mutate unrelated sentinel indexes during secret scans.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Text-only transport audit for 0.2
|
|
2
|
+
|
|
3
|
+
Audited on 2026-10-20 against baseline `b6e562d`. This is a protocol audit, not a paid model evaluation or a claim that text-encoded photographs can be reliably recognized.
|
|
4
|
+
|
|
5
|
+
## Existing behavior to retain
|
|
6
|
+
|
|
7
|
+
`src/infrastructure/vision-chat.ts` already implements a generic non-streaming Chat Completions transport. Images are optional: strings become text content parts, the final `CLASSIFICATION_TASK` follows all data, and a single strict output parser handles categorical rankings and independent presence answers. It does not require a native classifier API.
|
|
8
|
+
|
|
9
|
+
The transport owns a bounded JSON snapshot before the first await. It forwards the caller's cancellation signal, disables redirects, reads a bounded response, and releases/cancels its reader through `readResponse`. There is one physical request and no transport retry or provider/model fallback. Model aliases in responses are accepted only through explicit identities or validated date snapshots. Missing `usage.cost` remains `null`; a response with ranking IDs never acquires invented probabilities.
|
|
10
|
+
|
|
11
|
+
`src/infrastructure/openrouter-vision.ts` pins the Chat Completions endpoint and requires an explicit provider. Its request contains `provider.only`, `allow_fallbacks: false`, and `require_parameters: true`. `src/openai-compatible.ts` accepts an explicit trusted HTTP(S) endpoint and optional credentials, with no OpenRouter dependency.
|
|
12
|
+
|
|
13
|
+
## Minimal additive implementation
|
|
14
|
+
|
|
15
|
+
1. Factor the existing implementation into an internal chat factory with an explicit modality argument, `vision` or `text`. Retain `createVisionChat` as a compatible wrapper. Add `createTextChat` with the same transport/parser/options. No caller-controlled or extra wire field is necessary.
|
|
16
|
+
2. In text mode, inspect the validated, owned request before fetch and reject every non-string state part with `UNSUPPORTED`. Do not silently strip images, stringify them, or accept their URLs as an alternative protocol. This check happens after plain-value snapshot validation, so accessors/proxies do not execute during modality validation.
|
|
17
|
+
3. Select an accurate system introduction for text mode: a closed-set classifier interpreting supplied text representations, rather than a visual evidence ranker. Keep the untrusted-data warning, final closed task schema, independent presence semantics, and exact rank cardinality unchanged.
|
|
18
|
+
4. Add `createOpenAICompatibleText` beside the existing direct vision wrapper and `createOpenRouterText` beside the OpenRouter vision wrapper. Public exports/types are coordinated by A0. Text and vision wrappers share schemas and transport implementation, rather than maintaining a second response parser.
|
|
19
|
+
5. Keep existing per-part validation intact. The representation layer, rather than this transport, owns normalization, view de-duplication, grid geometry, and the stricter aggregate representation budget. The transport should not infer an image codec or select models.
|
|
20
|
+
|
|
21
|
+
These changes do not depend on new whole-object or segmentation contracts and need no runtime dependency. The old vision code path must produce the same request body for the same input/options.
|
|
22
|
+
|
|
23
|
+
## Existing limits and integration implications
|
|
24
|
+
|
|
25
|
+
| Boundary | Current limit | Consequence |
|
|
26
|
+
| -------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
|
27
|
+
| State parts | 1–64 | Account for codec grammar, metadata, and all views together. |
|
|
28
|
+
| Each state string | 1–64,000 UTF-16 code units | A single 64 KiB ASCII payload may exceed this; split on meaningful complete view boundaries within this limit. |
|
|
29
|
+
| Prepared image parts | At most 9 | A library policy, not the provider's universal maximum. Text mode allows zero. |
|
|
30
|
+
| Decision questions | 1–16 | Four extent questions fit in one call. |
|
|
31
|
+
| Choice options | 2–255 | Closed interval IDs and `unknown` fit. |
|
|
32
|
+
| Request body | At most 32 MiB | Includes task schema, escaping, headers excluded; text representation has its own tighter 64 KiB budget. |
|
|
33
|
+
| Response body | At most 1 MiB | Bounded reading also applies to error responses. |
|
|
34
|
+
| Ranking size | Exactly 1 or 4, capped at option count | Whole-object sides need rank 1; spatial beam needs rank 4. |
|
|
35
|
+
|
|
36
|
+
The 64 KiB representation budget is a UTF-8 byte budget and includes all textual image views, not arbitrary task text. It must not be confused with the current 64,000-code-unit individual string schema. No byte truncation should attempt to repair an over-budget view: reduce and declare its resolution before serialization, or return a representation-limit result.
|
|
37
|
+
|
|
38
|
+
## Required offline regressions
|
|
39
|
+
|
|
40
|
+
- A real local HTTP server receives text parts only from the new direct adapter, without any key or OpenRouter route.
|
|
41
|
+
- Both new factories reject a valid prepared `image_url` part before fetch; test images appearing at the beginning, middle, and end of mixed state.
|
|
42
|
+
- Malformed, proxy, and accessor inputs remain rejected before transport. Raw image-like strings stay ordinary untrusted strings, not decoded images.
|
|
43
|
+
- Input mutation after invocation cannot change the emitted payload. A rejected image cannot be replaced with a text-only request through silent filtering.
|
|
44
|
+
- Text factory preserves explicit model/provider routing and all response-format options, body/response caps, cancellation, abort cleanup, route identity checks, closed ID/cardinality checks, and unknown cost semantics.
|
|
45
|
+
- Existing vision payload snapshots and behavior remain unchanged. Rank-only output still produces `probabilities: null` through the classifier.
|
|
46
|
+
- The textual codec grammar precedes its encoded views, and the final `CLASSIFICATION_TASK` stays last. No ground truth or model-specific expected answer enters either part.
|
|
47
|
+
- Experimental request preparation has a negative assertion over the serialized payload: no `image_url`, `input_image`, binary/base64 media, or media URL part. This assertion belongs to tests/benchmark capture, not a heuristic transport scan of all ordinary strings.
|
|
48
|
+
|
|
49
|
+
## Public metadata availability check
|
|
50
|
+
|
|
51
|
+
The following requests were unauthenticated metadata reads, with no inference dispatch and no key access. Retrieved at 2026-10-20 07:20 UTC:
|
|
52
|
+
|
|
53
|
+
- `GET https://openrouter.ai/api/v1/models?output_modalities=decisions&input_modalities=image` returned `openai/gpt-6-luna-decisions`, input text/image, output decisions, context 1,050,000. Catalog pricing was $0.10 per million prompt tokens and zero completion charge. This does not verify its current inference route or success rate.
|
|
54
|
+
- `GET https://openrouter.ai/api/v1/models` returned `deepseek/deepseek-v4.1-flash`, input text/image, output text. The benchmark may intentionally send text only even when the selected model also supports images; report payload modality separately from model capability.
|
|
55
|
+
- `GET https://openrouter.ai/api/v1/models/deepseek/deepseek-v4.1-flash/endpoints` contained the exact `together` tag, display name `Together`, status `0`, and supported parameters including `response_format`, `structured_outputs`, and `reasoning_effort`. That endpoint advertised $0.30 per million prompt tokens and $1.20 per million completion tokens. The cheaper model-level aggregate price belongs to other endpoints and must not be used to price the pinned Together route.
|
|
56
|
+
|
|
57
|
+
Default model catalog queries do not list all Decisions output models. An omitted Luna entry in the unfiltered text-output list is not evidence of removal. The guessed `/api/alpha/decisions/models` path returned 404 and must not be used as a catalog.
|
|
58
|
+
|
|
59
|
+
## Primary references
|
|
60
|
+
|
|
61
|
+
- [OpenRouter provider routing](https://openrouter.ai/docs/guides/routing/provider-selection): explicit provider allow-list, disabling fallback, and parameter support.
|
|
62
|
+
- [OpenRouter structured outputs](https://openrouter.ai/docs/guides/features/structured-outputs): strict JSON schema support is endpoint-specific; `require_parameters` is required when relying on it.
|
|
63
|
+
- [OpenRouter multimodal Decisions](https://openrouter.ai/docs/guides/community/multimodal-decisions): image parts go directly in `state`; text items are strings; filter the Models API by output modality.
|
|
64
|
+
- [OpenRouter API overview](https://openrouter.ai/docs/api_reference/overview): Chat Completions text content and response envelopes.
|
|
65
|
+
|
|
66
|
+
The official documentation allows considerably more images on Luna than this library's conservative nine-image bound. Raising that bound is unnecessary for this extension. Documentation also lists model-specific truncation behavior for other routes; do not add them as automatic text-encoding fallbacks.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Region-seeded masks and extraction (0.2)
|
|
2
|
+
|
|
3
|
+
Everything in this guide—default region `locate`, `locate({ mode: 'whole-object' })`, `extract`, optional `RefinementPort`, `SegmentationPort`, box-check composition, `objectProposals`, and exported native factories—is **experimental and unqualified** for general use. Passing structural or lifecycle checks does not establish semantic object accuracy or mask quality. Further accuracy experiments on these paths are stopped; no spatial or extraction strategy is promoted. Historical metrics in `docs/evidence/**` are unchanged.
|
|
4
|
+
|
|
5
|
+
The [accepted plan](0.2.0-plan.md) and [acceptance status](acceptance.md) distinguish implementation, offline checks, live quality and platform qualification. The frozen caller recipe passed admission with only 8/60 complete positive object boxes; 19/30 mask references had no prediction. Configure and test the model and segmenter for your own data. No text-image encoder qualified.
|
|
6
|
+
|
|
7
|
+
The library does not select or connect a model. Supply a `DecisionPort` to `createClassifier`, either by implementing the port or explicitly constructing a provider adapter. The Luna examples below are reproducible integration recipes, not defaults or a claim that one model is always more accurate; stronger model capability does not guarantee monotonic accuracy gains. Optional local segmenters and proposal generators are configured separately, and their runtime packages and model assets remain the caller's responsibility.
|
|
8
|
+
|
|
9
|
+
## Choose the operation
|
|
10
|
+
|
|
11
|
+
| Operation | Status | Result | Model requests |
|
|
12
|
+
| ------------------------------------------------------- | ------------ | ---------------------------------------------------------------------------- | ---------------------------------------------- |
|
|
13
|
+
| `classify` | Supported | One supplied class | One |
|
|
14
|
+
| `locate` (default / `mode: 'region'`) | Experimental | A grid cell that may contain an object fragment | Up to three |
|
|
15
|
+
| `locate` with `mode: 'whole-object'` and `segmentation` | Experimental | Visible bounds and center derived from a mask | Up to five, plus local segmentation/correction |
|
|
16
|
+
| `extract` with `segmentation` | Experimental | Mask-derived bounds, center, transparent PNG, cropped mask and source offset | Up to five, plus local segmentation/correction |
|
|
17
|
+
|
|
18
|
+
The primary object workflow is the unchanged region locator followed by an explicitly configured segmenter. Segmentation receives the locator's seed prompt on the full EXIF-oriented source image; it does not receive a seed crop or treat the seed as an object box. Bounds and center come from actual foreground mask pixels. After the initial mask, a closed decision checks the original image with the actual mask box and original seed anchor: `complete`, `needs-expansion`, or `unknown`. It reuses the caller-supplied `DecisionPort`. An incomplete box permits one actual enclosing-mask correction and one final check; there is no separate extent search or generated model geometry. Default `locate` behavior remains compatible.
|
|
19
|
+
|
|
20
|
+
## Primary workflow: region seed to mask-derived result
|
|
21
|
+
|
|
22
|
+
Configure the caller's `DecisionPort` and local segmenter, then call `extract`:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
const client = createClassifier({ decision, segmentation: segmenter })
|
|
26
|
+
try {
|
|
27
|
+
const result = await client.extract({ image, target: 'the backpack' })
|
|
28
|
+
if (result.status === 'extracted') {
|
|
29
|
+
console.log(result.region, result.center, result.offset)
|
|
30
|
+
// result.png is transparent; result.mask contains the matching cropped binary mask.
|
|
31
|
+
} else {
|
|
32
|
+
console.log(result.status, result.reason)
|
|
33
|
+
}
|
|
34
|
+
} finally {
|
|
35
|
+
try {
|
|
36
|
+
await client.dispose()
|
|
37
|
+
} finally {
|
|
38
|
+
await segmenter.dispose()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
`result.region` is the mask-derived half-open rectangle in source coordinates. `result.center` is its pixel center, and `result.offset` maps the cropped mask and PNG back to the source. Empty or seed-ungrounded masks return `unknown/segmentation-uncertain`; a locator rectangle is never substituted. The same unknown is returned when containment cannot be confirmed, expansion is unavailable, or the corrected mask still fails its check. Successful primary results use `method: 'region-checked-segmentation-v1'`. `verification.checks` retains the one or two closed decisions with raw scores/ranks and actual request metadata; `verification.expansion` reports `not-needed`, `unsupported`, `no-enclosing-mask`, `rejected-mask`, or `expanded`. Verification decision costs are included in `location.metadata`. A confirmed box is separate from pixel-perfect mask quality. Native and resource errors remain typed failures. `locate({ mode: 'whole-object' })` uses the same mask path when a segmenter is explicitly configured.
|
|
44
|
+
|
|
45
|
+
The decision port, optional custom `segmentationBoxCheck`, and segmenter remain caller-owned. The classifier cancels and joins its operations but does not dispose an injected segmenter. Dispose both resources when the application owns both. Model/provider selection is also explicit; examples below show one caller-configured route, not a library default or accuracy guarantee.
|
|
46
|
+
|
|
47
|
+
### Optional caller presence guard
|
|
48
|
+
|
|
49
|
+
The tested v3 caller composition first classifies the target as `present` or `absent`, then calls `extract` only for `present`. This is caller logic: direct `extract` uses up to three region requests plus one or two containment checks; the guard adds one classification request. The [complete heldout comparison](evidence/v02/region-seeded-heldout-v3/README.md) preserves all errors and unknown outputs. Earlier v2 results predate containment checks and remain historical. A classification error remains an error; it must not be converted to absence. Keep both calls under one caller-owned absolute deadline and abort signal.
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
// image, target and signal are owned by this application's operation.
|
|
53
|
+
const presence = await client.classify({
|
|
54
|
+
input: { image, text: target },
|
|
55
|
+
classes: [
|
|
56
|
+
{ id: 'present', description: 'The target is visible in this image.' },
|
|
57
|
+
{ id: 'absent', description: 'The target is not visible in this image.' },
|
|
58
|
+
],
|
|
59
|
+
signal,
|
|
60
|
+
})
|
|
61
|
+
if (presence.choice === 'present') {
|
|
62
|
+
const result = await client.extract({ image, target, signal })
|
|
63
|
+
// Handle the actual result; do not substitute the seed for a failed mask.
|
|
64
|
+
console.log(result.status)
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
This illustrates caller composition rather than a new package default. Exact benchmark tasks, prompts, timeouts, route and preserved failures are pinned in the historical [v2 development evidence](evidence/v02/region-seeded-dev-v2/README.md) and current [checked-flow v3 comparison](evidence/v02/region-seeded-dev-v3-control-r2/README.md). The latter records 6/30 positive whole-object box matches and 1/7 passing exact-canvas masks; it does not guarantee accurate cutouts for every object. Changing the caller's model, segmenter or prompt requires its own quality measurement.
|
|
69
|
+
|
|
70
|
+
A baseline Linux CPU wiring smoke with the pinned MobileSAM assets used a synthetic 192×128 image. A colored rectangle produced a 2,800-pixel mask with bounds `[70, 34, 120, 90]`; an all-transparent input produced a full-size empty mask. Three child starts matched three closes. This verifies adapter wiring only, not photo accuracy.
|
|
71
|
+
|
|
72
|
+
## Legacy interval and proposal strategies
|
|
73
|
+
|
|
74
|
+
The earlier boundary-interval `whole-object` strategy and `objectProposals` mask-choice strategy remain optional legacy/research paths. They are not required by the primary seed-region segmentation workflow and have their own model-confirmation steps and historical evidence. The interval strategy asks closed Choices over integer boundaries after the region seed. Each axis has at most sixteen intervals plus `unknown`; up to three passes refine the intervals. It returns interval-derived geometry, not a segmented mask.
|
|
75
|
+
|
|
76
|
+
The optional `objectProposals` adapter computes packed MobileSAM masks from nine seed points, then asks the configured model to select a supplied candidate and confirm its rectangle. Its box checks and mask quality are separate from direct seed-prompt segmentation. Default region and classification operations are unchanged.
|
|
77
|
+
|
|
78
|
+
## Extract with an explicit local backend
|
|
79
|
+
|
|
80
|
+
Core runtime dependencies remain Sharp and Zod. MobileSAM requires the optional peer:
|
|
81
|
+
|
|
82
|
+
```sh
|
|
83
|
+
npm install onnxruntime-node@1.23.2
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Obtain the exact licensed assets yourself; [pinned sizes, SHA256 and provenance](evidence/v02/segmentation/README.md) are recorded separately. Asset files, optional ONNX Runtime installation and backend availability are caller-owned prerequisites; importing or configuring the package does not fetch model weights. Imports never download models or start workers. CPU is the default provider within this explicitly constructed adapter; `executionProvider: 'dml'` is an opt-in Windows route and fails when unavailable. No CPU/model fallback is attempted.
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
import { readFile, writeFile } from 'node:fs/promises'
|
|
90
|
+
import { createClassifier } from 'zorya-classifier'
|
|
91
|
+
import { createOpenRouterDecisions } from 'zorya-classifier/openrouter'
|
|
92
|
+
import { createMobileSamSegmenter } from 'zorya-classifier/segmentation'
|
|
93
|
+
|
|
94
|
+
const apiKey = process.env.OPENROUTER_API_KEY
|
|
95
|
+
const encoderPath = process.env.MOBILE_SAM_ENCODER
|
|
96
|
+
const decoderPath = process.env.MOBILE_SAM_DECODER
|
|
97
|
+
if (!apiKey || !encoderPath || !decoderPath)
|
|
98
|
+
throw new Error('Configure credentials and asset paths')
|
|
99
|
+
const segmenter = await createMobileSamSegmenter({
|
|
100
|
+
encoderPath,
|
|
101
|
+
decoderPath,
|
|
102
|
+
executionProvider: 'cpu',
|
|
103
|
+
threads: 2,
|
|
104
|
+
})
|
|
105
|
+
const client = createClassifier({
|
|
106
|
+
decision: createOpenRouterDecisions({
|
|
107
|
+
apiKey,
|
|
108
|
+
model: 'openai/gpt-6-luna-decisions',
|
|
109
|
+
provider: 'openai',
|
|
110
|
+
}),
|
|
111
|
+
segmentation: segmenter,
|
|
112
|
+
})
|
|
113
|
+
try {
|
|
114
|
+
const result = await client.extract({
|
|
115
|
+
image: await readFile('photo.jpg'),
|
|
116
|
+
target: 'the backpack',
|
|
117
|
+
})
|
|
118
|
+
if (result.status === 'extracted') {
|
|
119
|
+
await writeFile('backpack.png', result.png, { flag: 'wx' })
|
|
120
|
+
await writeFile('backpack.mask.u8', result.mask.data, { flag: 'wx' })
|
|
121
|
+
console.log(result.region, result.offset, result.mask.width, result.mask.height)
|
|
122
|
+
} else console.log(result.status, result.reason)
|
|
123
|
+
} finally {
|
|
124
|
+
try {
|
|
125
|
+
await client.dispose()
|
|
126
|
+
} finally {
|
|
127
|
+
await segmenter.dispose()
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The mask is cropped to its visible bounds, row-major, one byte per pixel (`0` or `1`), with its own width/height and `format: 'binary-u8'`. `offset` maps its origin back to the source. PNG pixels inside the mask preserve source RGBA; pixels outside have zero RGBA. Transparent source pixels cannot substantiate an object. Invalid dimensions, nonbinary values, hard-ROI escape and masks missing the visible seed fail validation. Empty or ungrounded masks return `unknown/segmentation-uncertain`; a rectangle is never substituted for a mask. Protocol, native and resource errors remain typed failures.
|
|
133
|
+
|
|
134
|
+
`createGrabCutSegmenter({ assetPath })` selects the separately supplied pinned OpenCV 4.13.0 JS asset. It does not require ONNX Runtime. This is an explicit alternate algorithm. A custom `SegmentationPort` can integrate other backends with the same validation.
|
|
135
|
+
|
|
136
|
+
The caller owns a segmenter and may share it between clients. `client.dispose()` cancels and joins that client's operations without disposing the segmenter. Each `segment()` promise must remain pending until its own physical work settles, including cancellation. `segmenter.settle()` joins admitted work; `segmenter.dispose()` closes its own resources. Dispose both when the application owns both.
|
|
137
|
+
|
|
138
|
+
Built-in adapters probe the backend on explicit factory calls and run each admitted inference in a fresh owned child. They currently do not reuse sessions: measured inference includes cold child/model startup. One active task and two waiters bound native work. Cancellation retains the slot through child close, with 250 ms grace before owned-child termination; each task has a 10-second native limit inside the client's absolute deadline. Consult measured evidence for latency-sensitive deployment.
|
|
139
|
+
|
|
140
|
+
MobileSAM uses the seed region's center as a positive point on the full source and selects the mask with the greatest finite native quality score, using stable ties. It is a geometric point-prompt model; it does not interpret the target's text. Its raw quality score estimates a mask, not target identity or completeness. In the exposed development set it sometimes selected a part, such as a car's headlight, rather than the whole car. `status: 'extracted'` means that the returned mask and artifacts passed structural/source validation; it is not a semantic correctness guarantee. The [independent quality report](evidence/v02/region-seeded-dev-v2/README.md) measures that distinction. A caller-owned `SegmentationPort` can supply a different or text-guided backend without changing region search or connecting a model inside the library.
|
|
141
|
+
|
|
142
|
+
## CLI
|
|
143
|
+
|
|
144
|
+
Set explicit model/provider variables as in the [main guide](../README.md). Arguments are validated before native composition or model dispatch.
|
|
145
|
+
|
|
146
|
+
```sh
|
|
147
|
+
# Optional legacy interval-boundary location without an explicit segmenter.
|
|
148
|
+
zorya-classifier locate photo.jpg 'the backpack' --mode whole-object
|
|
149
|
+
# Primary region-seeded segmentation and cutout flow.
|
|
150
|
+
zorya-classifier extract photo.jpg 'the backpack' --output backpack \
|
|
151
|
+
--backend mobile-sam --encoder /models/encoder.onnx --decoder /models/decoder.onnx
|
|
152
|
+
zorya-classifier extract photo.jpg 'the backpack' --output backpack \
|
|
153
|
+
--backend grabcut --opencv /models/opencv.js
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Successful extraction writes `<prefix>.png`, `<prefix>.mask.u8` and `<prefix>.json`. Destinations are reserved exclusively before writing; existing files are preserved. JSON contains dimensions, source geometry, metadata and file paths rather than serialized binary arrays. Output failure removes only destinations created by that operation. Parent directories must exist. SIGINT/SIGTERM cancels work and disposes CLI-owned resources.
|
|
157
|
+
|
|
158
|
+
## Experimental text-only images
|
|
159
|
+
|
|
160
|
+
The reserved selector is `representation: { type: 'experimental-text', profile: 'text-image-v1' }`. Public composition currently rejects image operations with `UNSUPPORTED` before dispatch because no encoder is qualified. Ordinary text classification remains usable.
|
|
161
|
+
|
|
162
|
+
Research candidates compare normalized luma ASCII, color palette grids, SVG color runs, strict pixel RLE, binary/edge ASCII, and layered ASCII + SVG. No OCR, semantic helper or hidden vision call supplies object facts. Text adapters reject image parts rather than silently dropping them. Complete encoded views and metadata have a 64 KiB UTF-8 budget, allocated before encoding; output is never truncated to fit. Indistinguishable geometry returns a named unknown.
|
|
163
|
+
|
|
164
|
+
Only a candidate that passes development selection and frozen independent heldout qualification may be promoted. Other candidates, bulk images and model weights stay outside npm. A grammar roundtrip or syntactically valid LLM answer alone does not qualify photo localization.
|
package/docs/vision-results.md
CHANGED
|
@@ -1,6 +1,35 @@
|
|
|
1
1
|
# Tested models and results
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Current 0.2 region and extraction evidence
|
|
4
|
+
|
|
5
|
+
Region `locate`, whole-object location, `extract`, proposal/refinement strategies, and native segmentation adapters are **experimental and unqualified** for general use; figures below are historical evidence for one documented recipe, not a promotion or universal accuracy claim. Further spatial accuracy experiments are stopped. H8 DEV recorded 7/9 positives with 2/3 false outputs and did not qualify.
|
|
6
|
+
|
|
7
|
+
The final [frozen v3 heldout report](evidence/v02/region-seeded-heldout-v3/README.md) evaluates all 80 cases per profile. Classification is 65/80; positive seed hits 26/60; complete object boxes 8/60; false seeds and extractions 0/20 negatives. Of 30 exact-canvas mask references, eight pass IoU 0.8, three fail and 19 have no prediction. Both positive-photo paired seed intervals are [0.500, 0.833]. These are separate metrics; a successful seed or containment decision does not guarantee a tight mask. Candidate accounting includes 266 physical calls, two HTTP 502 failures and two unknown charges. The control made 80 image-free calls. This one controlled corpus admission and the resource/native checks qualify the documented recipe only; model choice stays with the caller. Development and failed historical evidence below is preserved.
|
|
8
|
+
|
|
9
|
+
The primary 0.2 flow retains the original three-Choice region search and uses its seed to segment the full oriented source. Only actual mask pixels determine the cutout, bounds and center. The caller's decision port then sees the full image with the actual box and seed anchor, choosing `complete`, `needs-expansion`, or `unknown`. One actual enclosing-mask correction and one final check are allowed. Unresolved results remain unknown. The caller chooses both ports; no model-generated coordinates or separate extent search are added.
|
|
10
|
+
|
|
11
|
+
The [checked-flow DEV v3 comparison](evidence/v02/region-seeded-dev-v3-control-r2/README.md) uses explicit Luna Decisions/OpenAI, CPU MobileSAM and a caller-side presence guard. The complete 40-case candidate and 40-case image-free control R2 use the same tasks. The first control's erroneous freeze identity is preserved separately and was not scored.
|
|
12
|
+
|
|
13
|
+
| Measure | Candidate | Image-free control R2 |
|
|
14
|
+
| ----------------------------------------------- | --------------------------------------- | ----------------------------------- |
|
|
15
|
+
| Classification | 35/40 | 10/40 |
|
|
16
|
+
| Coarse positive seed-box intersections | 18/30 | 0/30 |
|
|
17
|
+
| Whole-object box matches | 6/30 | Not produced |
|
|
18
|
+
| False seeds / extractions on verified negatives | 0/10 | 0/10 seeds; no segmentation |
|
|
19
|
+
| Exact-canvas mask IoU ≥ 0.8 | 1/7 references; 4 scored, 3 unavailable | Not produced |
|
|
20
|
+
| Physical requests / known cost | 162 / $0.0645113; six unknown charges | 40 / $0.0008353; no unknown charges |
|
|
21
|
+
|
|
22
|
+
The positive-photo seed comparison is +0.625 with a fixed-bootstrap 95% interval [0.375, 0.875]. The exact-foreground comparison is available on only five photo pairs, with interval [0.4, 1.0]. These are seed-search metrics, not whole-object or mask accuracy. All failures and unavailable predictions remain in their stated denominators. The 16 extracted results include only six correct whole-object boxes; a containment decision is not proof of a tight or pixel-perfect mask. Timings under concurrent resource stress are not ranked. The [conditional method selection](evidence/v02/region-seeded-method-selection-20261021-v3.json) freezes this recipe for a new blind evaluation, not release qualification.
|
|
23
|
+
|
|
24
|
+
The earlier [DEV v1](evidence/v02/region-seeded-dev-v1/README.md) failed its negative-case gate: 18/30 coarse seed-box intersections, 5/30 mask-derived box matches, one false seed/extraction on ten negatives and 1/7 exact-canvas masks reaching IoU 0.8. Its presence-first v2 successor passed development admission before the owner's containment-check revision. These earlier results remain distinct from v3.
|
|
25
|
+
|
|
26
|
+
The same-seed native component comparison favored MobileSAM over GrabCut on the exposed v1 set: 5 versus 0 box matches among the 22 positive cases with predicted seeds, and 1 versus 0 passing mask references. This supplies development evidence for an explicitly configured backend, not universal superiority or end-to-end qualification. Current blind, native/resource and publication gates are tracked in [acceptance](acceptance.md). The historical 0.1 classification results below remain unchanged.
|
|
27
|
+
|
|
28
|
+
## Historical 0.1 classification comparison
|
|
29
|
+
|
|
30
|
+
The routes in this report are explicit benchmark configurations, not library defaults. The caller selects and connects every model through an injected `DecisionPort` or an adapter they configure. **Luna Decisions was the selected 0.1 classification recipe:** it matched the historical photo/text counts on this corpus, while ordinary vision chat models remain configurable alternatives. This is an observed result on a small public corpus, not a statistical non-inferiority or universal-accuracy guarantee.
|
|
31
|
+
|
|
32
|
+
These classification results do not qualify the new 0.2 whole-object or extraction workflows. Their [current acceptance state](acceptance.md) records the failed first blind localization run and the remaining checks independently.
|
|
4
33
|
|
|
5
34
|
The fixed corpus has60 licensed photos (20 development/40 heldout) and30 authored text fixtures (10/20). Ground truth never enters model requests. Errors stay in the accuracy denominator; unstarted cases remain unverified. Public images may overlap model training. Exact [summaries/source pins](evidence/vision-model-summary.json) and individual run reports below retain failures.
|
|
6
35
|
|
|
@@ -36,7 +65,7 @@ Native Luna was evaluated in two disjoint sessions:40 heldout photos+10 developm
|
|
|
36
65
|
|
|
37
66
|
[Chat v1](evidence/vision-selection-v1-report.json) · [Chat v2](evidence/vision-selection-v2-report.json) · [Native first session](evidence/decisions-selection-v1-report.json) · [Native completion](evidence/decisions-completion-v1-report.json).
|
|
38
67
|
|
|
39
|
-
##
|
|
68
|
+
## Historical 0.1 localization smokes
|
|
40
69
|
|
|
41
70
|
The first native locator smoke reached its fine stage but received a provider error. An explicit diagnostic replay of that exact195-option/nine-image fine request returned HTTP502: `OpenAI refused to answer question "selection"`. The [diagnostic receipt](evidence/luna-decisions-fine-probe.json) is preserved. This does not establish a documented universal option/image limit or authorize silently changing geometry; model refusal stays an error. A subsequent fixed flower-image smoke completed all three native stages in4.75s and returned a region; its [report](evidence/luna-decisions-locator-smoke-report.json) includes the reference-box metric. This one success does not erase the failed request or qualify the whole locator corpus. A valid classification result does not guarantee locator compatibility.
|
|
42
71
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zorya-classifier",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "Provider-independent
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Provider-independent classification with experimental localization and object extraction for Node.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"engines": {
|
|
@@ -19,6 +19,10 @@
|
|
|
19
19
|
"./openai-compatible": {
|
|
20
20
|
"types": "./dist/openai-compatible.d.ts",
|
|
21
21
|
"import": "./dist/openai-compatible.js"
|
|
22
|
+
},
|
|
23
|
+
"./segmentation": {
|
|
24
|
+
"types": "./dist/segmentation.d.ts",
|
|
25
|
+
"import": "./dist/segmentation.js"
|
|
22
26
|
}
|
|
23
27
|
},
|
|
24
28
|
"bin": {
|
|
@@ -33,7 +37,7 @@
|
|
|
33
37
|
],
|
|
34
38
|
"sideEffects": false,
|
|
35
39
|
"scripts": {
|
|
36
|
-
"build": "tsc -p tsconfig.build.json",
|
|
40
|
+
"build": "node scripts/clean-dist.mjs && tsc -p tsconfig.build.json",
|
|
37
41
|
"typecheck": "tsc --noEmit",
|
|
38
42
|
"lint": "eslint . --max-warnings 0",
|
|
39
43
|
"format": "prettier --write .",
|
|
@@ -46,7 +50,7 @@
|
|
|
46
50
|
"prepare": "husky",
|
|
47
51
|
"secrets:check": "node scripts/secrets.mjs --worktree",
|
|
48
52
|
"secrets:staged": "node scripts/secrets.mjs --staged",
|
|
49
|
-
"prepublishOnly": "npm run check && npm run pack:check"
|
|
53
|
+
"prepublishOnly": "npm run check && npm run pack:check && npm run format:check"
|
|
50
54
|
},
|
|
51
55
|
"dependencies": {
|
|
52
56
|
"sharp": "0.34.5",
|
|
@@ -60,6 +64,7 @@
|
|
|
60
64
|
"eslint-plugin-unicorn": "59.0.1",
|
|
61
65
|
"husky": "9.1.7",
|
|
62
66
|
"knip": "5.62.0",
|
|
67
|
+
"onnxruntime-node": "1.23.2",
|
|
63
68
|
"prettier": "3.6.2",
|
|
64
69
|
"tsx": "4.20.5",
|
|
65
70
|
"typescript": "5.9.2",
|
|
@@ -78,14 +83,34 @@
|
|
|
78
83
|
"classification",
|
|
79
84
|
"image-classification",
|
|
80
85
|
"object-localization",
|
|
86
|
+
"image-localization",
|
|
87
|
+
"bounding-box",
|
|
88
|
+
"object-extraction",
|
|
89
|
+
"image-segmentation",
|
|
90
|
+
"background-removal",
|
|
91
|
+
"decision-models",
|
|
92
|
+
"computer-vision",
|
|
93
|
+
"nodejs",
|
|
94
|
+
"llm",
|
|
81
95
|
"openrouter",
|
|
82
96
|
"typescript",
|
|
83
97
|
"vision",
|
|
84
98
|
"openai-compatible",
|
|
85
|
-
"multimodal"
|
|
99
|
+
"multimodal",
|
|
100
|
+
"mobile-sam",
|
|
101
|
+
"segment-anything",
|
|
102
|
+
"binary-mask"
|
|
86
103
|
],
|
|
87
104
|
"publishConfig": {
|
|
88
105
|
"access": "public",
|
|
89
106
|
"registry": "https://registry.npmjs.org/"
|
|
107
|
+
},
|
|
108
|
+
"peerDependencies": {
|
|
109
|
+
"onnxruntime-node": "1.23.2"
|
|
110
|
+
},
|
|
111
|
+
"peerDependenciesMeta": {
|
|
112
|
+
"onnxruntime-node": {
|
|
113
|
+
"optional": true
|
|
114
|
+
}
|
|
90
115
|
}
|
|
91
116
|
}
|