ken-jo commited on
Commit
0d2d13f
·
verified ·
1 Parent(s): f9d0103

Release Qwen3.5 Classification 0.1.0: Qwen3.5-2B typed decisions

Browse files

Audited English release with exact runtime/weight provenance, source-specific data licenses and published limitations.

NOTICE CHANGED
@@ -1,8 +1,8 @@
1
- Vision QEV (formerly Veyra)
2
- Copyright 2026 Vision QEV contributors
3
  Copyright 2026 Veyra contributors
4
 
5
- Vision QEV is an independent open-source research project for dynamic typed
6
  decisions over images and text.
7
 
8
  The backbone is Qwen/Qwen3.5-2B, published by the Qwen team under Apache-2.0.
 
1
+ Qwen3.5 Classification (formerly Veyra)
2
+ Copyright 2026 Qwen3.5 Classification contributors
3
  Copyright 2026 Veyra contributors
4
 
5
+ Qwen3.5 Classification is an independent open-source research project for dynamic typed
6
  decisions over images and text.
7
 
8
  The backbone is Qwen/Qwen3.5-2B, published by the Qwen team under Apache-2.0.
README.md CHANGED
@@ -13,7 +13,7 @@ tags:
13
  - calibrated-decisions
14
  - custom-runtime
15
  datasets:
16
- - ken-jo/vision-qev-data
17
  - LocalLLaMA/typed-decisions
18
  - stanfordnlp/snli
19
  - PolyAI/banking77
@@ -22,10 +22,10 @@ datasets:
22
  inference: false
23
  ---
24
 
25
- # Vision QEV — Qwen3.5-2B typed decisions
26
 
27
- [Source code](https://github.com/ken-jo/vision-qev) ·
28
- [Training data](https://huggingface.co/datasets/ken-jo/vision-qev-data)
29
 
30
  Maintainer: [GitHub](https://github.com/ken-jo) ·
31
  [LinkedIn](https://www.linkedin.com/in/ik-chan-jo).
@@ -126,8 +126,8 @@ redistribution rights. Read the repository's data and training documentation.
126
 
127
  The package contains a calibrated manifest, adaptation weights and a custom runtime wheel.
128
  Qwen backbone weights must be downloaded separately at the pinned revision. Install the
129
- wheel from `runtime/`, run `vision-qev download`, then use `load_vision_qev.py` or the Python
130
- API in the [repository](https://github.com/ken-jo/vision-qev). A standard Transformers
131
  auto-model loader cannot directly load this custom adapter/head layout.
132
 
133
  Historical stage flags in the unchanged manifest record when those stages were run.
 
13
  - calibrated-decisions
14
  - custom-runtime
15
  datasets:
16
+ - ken-jo/qwen3.5-classification-data
17
  - LocalLLaMA/typed-decisions
18
  - stanfordnlp/snli
19
  - PolyAI/banking77
 
22
  inference: false
23
  ---
24
 
25
+ # Qwen3.5 Classification — Qwen3.5-2B typed decisions
26
 
27
+ [Source code](https://github.com/ken-jo/qwen3.5-classification) ·
28
+ [Training data](https://huggingface.co/datasets/ken-jo/qwen3.5-classification-data)
29
 
30
  Maintainer: [GitHub](https://github.com/ken-jo) ·
31
  [LinkedIn](https://www.linkedin.com/in/ik-chan-jo).
 
126
 
127
  The package contains a calibrated manifest, adaptation weights and a custom runtime wheel.
128
  Qwen backbone weights must be downloaded separately at the pinned revision. Install the
129
+ wheel from `runtime/`, run `qwen3.5-classification download`, then use `load_qwen3_5_classification.py` or the Python
130
+ API in the [repository](https://github.com/ken-jo/qwen3.5-classification). A standard Transformers
131
  auto-model loader cannot directly load this custom adapter/head layout.
132
 
133
  Historical stage flags in the unchanged manifest record when those stages were run.
ROADMAP.md CHANGED
@@ -1,6 +1,6 @@
1
  # Research roadmap
2
 
3
- ## Closed Qwen-based line: Vision QEV 0.1.0
4
 
5
  Freeze the evaluated Qwen3.5-2B adaptation, publish the custom runtime, licensed dataset
6
  snapshots, exact evidence and known failures. Future bug fixes must preserve or explicitly
@@ -16,7 +16,7 @@ decision network. Its name and results will be separate from this checkpoint.
16
  2. Prototype image tokens retaining spatial coordinates, text/criterion encoders, candidate-
17
  conditioned evidence attention and one shared candidate scorer. Include typed ordinal and
18
  binary outputs; test candidate permutation and paraphrase invariance.
19
- 3. Compare against the frozen Vision QEV baseline at equal data and hardware budgets. Use Qwen
20
  representations or teachers only where a measured benefit justifies them; backbone choice
21
  is open. Separate perception, evidence binding, decision logic and probability errors.
22
  4. Study supervised proper scoring, distillation and RL only after perception works. Select
 
1
  # Research roadmap
2
 
3
+ ## Closed Qwen-based line: Qwen3.5 Classification 0.1.0
4
 
5
  Freeze the evaluated Qwen3.5-2B adaptation, publish the custom runtime, licensed dataset
6
  snapshots, exact evidence and known failures. Future bug fixes must preserve or explicitly
 
16
  2. Prototype image tokens retaining spatial coordinates, text/criterion encoders, candidate-
17
  conditioned evidence attention and one shared candidate scorer. Include typed ordinal and
18
  binary outputs; test candidate permutation and paraphrase invariance.
19
+ 3. Compare against the frozen Qwen3.5 Classification baseline at equal data and hardware budgets. Use Qwen
20
  representations or teachers only where a measured benefit justifies them; backbone choice
21
  is open. Separate perception, evidence binding, decision logic and probability errors.
22
  4. Study supervised proper scoring, distillation and RL only after perception works. Select
checksums.json CHANGED
@@ -174,16 +174,16 @@
174
  "evidence/src/veyra/workflow_release_gate.py": "15f35e7da02e68f4e1b4c82a3974ea95ea53603b9a49e09727d1151f8a71ad5d",
175
  "head.safetensors": "84b57aeeb987f73416ac0f796150957d1c5beb1ed373733053e46438f77a8fee",
176
  "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
177
- "load_vision_qev.py": "a82db0bbd6a88775e29bc1ff17370c7d2c224f9a93185bcad364c5378c70561f",
178
  "manifest.json": "d83f9910196c6e801658ca3816c3d2bd4a849ba3da6ff059a0edf7c6028e898d",
179
- "NOTICE": "f2e0bb2c6883f7fa2ce8fc7c53ab681a6692020c1be5c90965df8cab29872222",
180
- "publication.json": "c6dab52d57b0ca997d4762793ae28ad1fc1a790748351b00f4dc706bfe842aa6",
181
- "README.md": "0daea4d5c89ca29762339f355578673d506af0ef0154877b74a874a3840cb794",
182
  "release-protocol.json": "d0e6c454fc10cfa080523cfcc66706dfe73cb32524f4ce74bf87a5d4edde6776",
183
  "release-readiness.json": "5e2ed88d29b13229affb8487217f16e611f13201371f41d3604b0eb77f46edc8",
184
- "reproducibility/pyproject.toml": "4a49b0658d43f21f88e59e473e485a3eb6085d96b1e63aa3819abc8ad31ac9e5",
185
- "reproducibility/uv.lock": "51009150e64516fe34a991174d03f17b76c60c941f89c8866605cd9d1849b1c8",
186
- "ROADMAP.md": "106f50d84ef78d2c771942c7edee3f9bac28a53825f6d34f5cf6f4dca9744668",
187
- "runtime/vision_qev-0.1.0-py3-none-any.whl": "e3ae5a591e055b4ff88d42bb44365f6e5ab71859fc60029ab365bddc22650c5f",
188
  "sample_request.json": "db4c34b18ec8b1d0bcd2af48fd2b8be5636b67d2194d26492fc2f647f52b7cb1"
189
  }
 
174
  "evidence/src/veyra/workflow_release_gate.py": "15f35e7da02e68f4e1b4c82a3974ea95ea53603b9a49e09727d1151f8a71ad5d",
175
  "head.safetensors": "84b57aeeb987f73416ac0f796150957d1c5beb1ed373733053e46438f77a8fee",
176
  "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
177
+ "load_qwen3_5_classification.py": "b44e8510bc64a6db4bd4def3ff6c794c827ff5462e54d24251f99216b89c2c05",
178
  "manifest.json": "d83f9910196c6e801658ca3816c3d2bd4a849ba3da6ff059a0edf7c6028e898d",
179
+ "NOTICE": "b4a542b54fb016fce38a8a187c5cbad6acb9fb9ea0b46b77f3e5ad367dd280fb",
180
+ "publication.json": "d29b6c9ec0705afdd9a49419068ab4bfd0da00c65d20a71ebc0d7467c66744d8",
181
+ "README.md": "a8278677faf83335f88d475335d2f028c6c244f9f1b8cdb67df7f80c75de9ca5",
182
  "release-protocol.json": "d0e6c454fc10cfa080523cfcc66706dfe73cb32524f4ce74bf87a5d4edde6776",
183
  "release-readiness.json": "5e2ed88d29b13229affb8487217f16e611f13201371f41d3604b0eb77f46edc8",
184
+ "reproducibility/pyproject.toml": "388e63bd6105c6970b92b4683feb2b6620040227ef6e8092b676b6347f2dd9d8",
185
+ "reproducibility/uv.lock": "3871b05f61254f3d4b88450ca05d08606e69bcc24ca5f352b57d917562ec72d7",
186
+ "ROADMAP.md": "eaa2297fb876ff82bde730218bfe0254d10c9f0ac26d360d6f4144fe06f7367e",
187
+ "runtime/qwen3_5_classification-0.1.0-py3-none-any.whl": "d5ea3840d8618563e78bbb88fa6dde27369bd203b41dd4c6c3b22b8f4021a6f8",
188
  "sample_request.json": "db4c34b18ec8b1d0bcd2af48fd2b8be5636b67d2194d26492fc2f647f52b7cb1"
189
  }
load_vision_qev.py → load_qwen3_5_classification.py RENAMED
@@ -2,10 +2,10 @@
2
  import json
3
  from pathlib import Path
4
  import torch
5
- from vision_qev import VisionQEV, DecisionRequest
6
 
7
  root = Path(__file__).resolve().parent
8
  torch.set_num_threads(4)
9
- model = VisionQEV.load(root, local_files_only=True, merge=True)
10
  request = DecisionRequest.from_json((root / "sample_request.json").read_text("utf-8"))
11
  print(json.dumps(model.predict(request, root), indent=2))
 
2
  import json
3
  from pathlib import Path
4
  import torch
5
+ from qwen3_5_classification import QwenClassification, DecisionRequest
6
 
7
  root = Path(__file__).resolve().parent
8
  torch.set_num_threads(4)
9
+ model = QwenClassification.load(root, local_files_only=True, merge=True)
10
  request = DecisionRequest.from_json((root / "sample_request.json").read_text("utf-8"))
11
  print(json.dumps(model.predict(request, root), indent=2))
publication.json CHANGED
@@ -1,12 +1,12 @@
1
  {
2
- "project": "vision-qev",
3
  "version": "0.1.0",
4
- "source_repository": "https://github.com/ken-jo/vision-qev",
5
  "backbone": "Qwen/Qwen3.5-2B",
6
  "base_revision": "15852e8c16360a2fea060d615a32b45270f8a8fc",
7
  "weights_sha256": "84b57aeeb987f73416ac0f796150957d1c5beb1ed373733053e46438f77a8fee",
8
  "manifest_sha256": "d83f9910196c6e801658ca3816c3d2bd4a849ba3da6ff059a0edf7c6028e898d",
9
- "runtime_wheel_sha256": "e3ae5a591e055b4ff88d42bb44365f6e5ab71859fc60029ab365bddc22650c5f",
10
  "preserved_runtime_modules": 38,
11
  "original_prepared_checksums_sha256": "9fe5b289c5a6e1673779961752e2a8c87d093e4e14f9d936b8876a55df3e902d",
12
  "original_acceptance_preserved": true,
 
1
  {
2
+ "project": "qwen3.5-classification",
3
  "version": "0.1.0",
4
+ "source_repository": "https://github.com/ken-jo/qwen3.5-classification",
5
  "backbone": "Qwen/Qwen3.5-2B",
6
  "base_revision": "15852e8c16360a2fea060d615a32b45270f8a8fc",
7
  "weights_sha256": "84b57aeeb987f73416ac0f796150957d1c5beb1ed373733053e46438f77a8fee",
8
  "manifest_sha256": "d83f9910196c6e801658ca3816c3d2bd4a849ba3da6ff059a0edf7c6028e898d",
9
+ "runtime_wheel_sha256": "d5ea3840d8618563e78bbb88fa6dde27369bd203b41dd4c6c3b22b8f4021a6f8",
10
  "preserved_runtime_modules": 38,
11
  "original_prepared_checksums_sha256": "9fe5b289c5a6e1673779961752e2a8c87d093e4e14f9d936b8876a55df3e902d",
12
  "original_acceptance_preserved": true,
reproducibility/pyproject.toml CHANGED
@@ -3,7 +3,7 @@ requires = ["hatchling>=1.27"]
3
  build-backend = "hatchling.build"
4
 
5
  [project]
6
- name = "vision-qev"
7
  version = "0.1.0"
8
  description = "Dynamic typed decisions over images and text with Qwen3.5-2B"
9
  readme = "README.md"
@@ -23,14 +23,14 @@ dependencies = [
23
  ]
24
 
25
  [project.scripts]
26
- vision-qev = "vision_qev.cli:main"
27
  veyra = "veyra.cli:main"
28
 
29
  [dependency-groups]
30
  dev = ["pytest==9.1.1", "httpx>=0.28,<1", "ruff>=0.15,<1"]
31
 
32
  [tool.hatch.build.targets.wheel]
33
- packages = ["src/veyra", "src/vision_qev"]
34
 
35
  [[tool.uv.index]]
36
  name = "pytorch-cu128"
 
3
  build-backend = "hatchling.build"
4
 
5
  [project]
6
+ name = "qwen3.5-classification"
7
  version = "0.1.0"
8
  description = "Dynamic typed decisions over images and text with Qwen3.5-2B"
9
  readme = "README.md"
 
23
  ]
24
 
25
  [project.scripts]
26
+ "qwen3.5-classification" = "qwen3_5_classification.cli:main"
27
  veyra = "veyra.cli:main"
28
 
29
  [dependency-groups]
30
  dev = ["pytest==9.1.1", "httpx>=0.28,<1", "ruff>=0.15,<1"]
31
 
32
  [tool.hatch.build.targets.wheel]
33
+ packages = ["src/veyra", "src/qwen3_5_classification"]
34
 
35
  [[tool.uv.index]]
36
  name = "pytorch-cu128"
reproducibility/uv.lock CHANGED
@@ -600,6 +600,51 @@ wheels = [
600
  { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
601
  ]
602
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603
  [[package]]
604
  name = "regex"
605
  version = "2026.9.29"
@@ -896,48 +941,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/da/34/30e9280707135d2cf
896
  wheels = [
897
  { url = "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", hash = "sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", size = 87427, upload-time = "2026-09-25T06:52:35.829Z" },
898
  ]
899
-
900
- [[package]]
901
- name = "vision-qev"
902
- version = "0.1.0"
903
- source = { editable = "." }
904
- dependencies = [
905
- { name = "accelerate" },
906
- { name = "fastapi" },
907
- { name = "numpy" },
908
- { name = "pillow" },
909
- { name = "pydantic" },
910
- { name = "safetensors" },
911
- { name = "torch" },
912
- { name = "torchvision" },
913
- { name = "transformers" },
914
- { name = "uvicorn" },
915
- ]
916
-
917
- [package.dev-dependencies]
918
- dev = [
919
- { name = "httpx" },
920
- { name = "pytest" },
921
- { name = "ruff" },
922
- ]
923
-
924
- [package.metadata]
925
- requires-dist = [
926
- { name = "accelerate", specifier = "==1.15.0" },
927
- { name = "fastapi", specifier = "==0.141.1" },
928
- { name = "numpy", specifier = "==2.5.3" },
929
- { name = "pillow", specifier = "==12.3.0" },
930
- { name = "pydantic", specifier = "==2.13.5" },
931
- { name = "safetensors", specifier = "==0.8.0" },
932
- { name = "torch", specifier = "==2.10.0", index = "https://download.pytorch.org/whl/cu128" },
933
- { name = "torchvision", specifier = "==0.25.0", index = "https://download.pytorch.org/whl/cu128" },
934
- { name = "transformers", specifier = "==5.17.0" },
935
- { name = "uvicorn", specifier = "==0.54.0" },
936
- ]
937
-
938
- [package.metadata.requires-dev]
939
- dev = [
940
- { name = "httpx", specifier = ">=0.28,<1" },
941
- { name = "pytest", specifier = "==9.1.1" },
942
- { name = "ruff", specifier = ">=0.15,<1" },
943
- ]
 
600
  { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
601
  ]
602
 
603
+ [[package]]
604
+ name = "qwen3-5-classification"
605
+ version = "0.1.0"
606
+ source = { editable = "." }
607
+ dependencies = [
608
+ { name = "accelerate" },
609
+ { name = "fastapi" },
610
+ { name = "numpy" },
611
+ { name = "pillow" },
612
+ { name = "pydantic" },
613
+ { name = "safetensors" },
614
+ { name = "torch" },
615
+ { name = "torchvision" },
616
+ { name = "transformers" },
617
+ { name = "uvicorn" },
618
+ ]
619
+
620
+ [package.dev-dependencies]
621
+ dev = [
622
+ { name = "httpx" },
623
+ { name = "pytest" },
624
+ { name = "ruff" },
625
+ ]
626
+
627
+ [package.metadata]
628
+ requires-dist = [
629
+ { name = "accelerate", specifier = "==1.15.0" },
630
+ { name = "fastapi", specifier = "==0.141.1" },
631
+ { name = "numpy", specifier = "==2.5.3" },
632
+ { name = "pillow", specifier = "==12.3.0" },
633
+ { name = "pydantic", specifier = "==2.13.5" },
634
+ { name = "safetensors", specifier = "==0.8.0" },
635
+ { name = "torch", specifier = "==2.10.0", index = "https://download.pytorch.org/whl/cu128" },
636
+ { name = "torchvision", specifier = "==0.25.0", index = "https://download.pytorch.org/whl/cu128" },
637
+ { name = "transformers", specifier = "==5.17.0" },
638
+ { name = "uvicorn", specifier = "==0.54.0" },
639
+ ]
640
+
641
+ [package.metadata.requires-dev]
642
+ dev = [
643
+ { name = "httpx", specifier = ">=0.28,<1" },
644
+ { name = "pytest", specifier = "==9.1.1" },
645
+ { name = "ruff", specifier = ">=0.15,<1" },
646
+ ]
647
+
648
  [[package]]
649
  name = "regex"
650
  version = "2026.9.29"
 
941
  wheels = [
942
  { url = "https://files.pythonhosted.org/packages/38/0c/b54a4fdd7f90a3af8b02ebc9ce6712c2c208b7926a2f7bad95c33ebbe943/uvicorn-0.54.0-py3-none-any.whl", hash = "sha256:505bdb0f318731d45f1f712071fc781a8981f6847a31c902c9f5e652d4f67faf", size = 87427, upload-time = "2026-09-25T06:52:35.829Z" },
943
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
runtime/{vision_qev-0.1.0-py3-none-any.whl → qwen3_5_classification-0.1.0-py3-none-any.whl} RENAMED
Binary files a/runtime/vision_qev-0.1.0-py3-none-any.whl and b/runtime/qwen3_5_classification-0.1.0-py3-none-any.whl differ