AbteeXAILabs commited on
Commit
d6c8459
·
verified ·
1 Parent(s): 5f870d5

Publish hardened LumynaX product package

Browse files
.gitattributes CHANGED
@@ -1,5 +1,2 @@
1
  * text=auto
2
- *.py text eol=lf
3
- *.md text eol=lf
4
- *.yaml text eol=lf
5
- *.json text eol=lf
 
1
  * text=auto
2
+ *.json linguist-generated=false
 
 
 
LICENSE CHANGED
@@ -1,17 +1,6 @@
1
- Apache License
2
- Version 2.0, January 2004
3
- http://www.apache.org/licenses/
4
 
5
- Copyright 2026 AbteeX AI Labs
6
-
7
- Licensed under the Apache License, Version 2.0 (the "License");
8
- you may not use this file except in compliance with the License.
9
- You may obtain a copy of the License at
10
-
11
- http://www.apache.org/licenses/LICENSE-2.0
12
-
13
- Unless required by applicable law or agreed to in writing, software
14
- distributed under the License is distributed on an "AS IS" BASIS,
15
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- See the License for the specific language governing permissions and
17
- limitations under the License.
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
 
5
+ This repository is published as a product scaffold by AbteeX AI Labs. See the
6
+ Apache License 2.0 text at https://www.apache.org/licenses/LICENSE-2.0.
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -12,193 +12,210 @@ tags:
12
  - aotearoa
13
  - sovereign-ai
14
  - local-first
 
15
  language:
16
  - en
17
  - mi
18
  ---
19
 
20
  # AbteeX SovereignCode
 
21
 
22
- <!-- abteex-sovereigncode-card:v1 -->
23
 
24
- <p align="center"><em>Sovereign intelligence, held in the light.</em></p>
25
- <p align="center"><em>Ko te mārama te tūāpapa &mdash; the light is the foundation.</em></p>
26
 
27
- <p align="center">
28
- <strong>A local-first coding agent with Data Capsule sovereignty controls.</strong><br/>
29
- AbteeX AI Labs &mdash; Aotearoa New Zealand.
30
- </p>
 
 
31
 
32
- <p align="center">
33
- <a href="#what-it-is">What it is</a> &middot;
34
- <a href="#quickstart">Quickstart</a> &middot;
35
- <a href="#data-capsule">Data Capsule</a> &middot;
36
- <a href="#policy-decision-point">Policy decision point</a> &middot;
37
- <a href="#audit-ledger">Audit ledger</a> &middot;
38
- <a href="#roadmap">Roadmap</a> &middot;
39
- <a href="#companion-products">Companions</a>
40
- </p>
41
 
42
- ![SovereignCode](https://img.shields.io/badge/AbteeX-SovereignCode-e08a2c?style=for-the-badge) ![Stage scaffold](https://img.shields.io/badge/stage-product%20scaffold-0a0a0b?style=for-the-badge) ![Runtime python](https://img.shields.io/badge/runtime-python%203.11%2B-726b62?style=for-the-badge) ![License Apache 2.0](https://img.shields.io/badge/license-Apache--2.0-9a5416?style=for-the-badge) ![Card v1](https://img.shields.io/badge/card-v1-111827?style=for-the-badge)
 
 
 
 
 
43
 
44
- ## What It Is
45
 
46
- **AbteeX SovereignCode** is the AbteeX AI Labs coding-agent product built on the LumynaX release family. It is conceptually close to an OpenCode-style terminal coding assistant, but the centre of gravity is *AI sovereignty*: every model call, tool call, file edit, and outbound action is evaluated against a **Data Capsule** policy before execution.
47
 
48
- It is for organisations that want local-first coding assistance without losing control over source code, regulated records, Iwi or community-held data, health data, procurement records, or other sensitive operational context.
49
 
50
- ## Five Commitments
51
 
52
  | Commitment | Product Meaning |
53
  | --- | --- |
54
  | Data capsules | Every workspace, dataset, or customer context can carry machine-readable purpose, residency, retention, export, and training controls. |
55
- | Policy before tools | Shell commands, file writes, network calls, commits, and model calls are checked **before** execution. |
56
  | Local-first inference | High-impact or restricted data routes to local or LumynaX-governed models by default. |
57
  | Human review | External effects require explicit approval, visible diffs, and audit records. |
58
  | Provenance | Model identity, source files, policy decisions, prompts, outputs, and release metadata remain traceable. |
59
 
60
  ## Why This Is Different
61
 
62
- Most coding agents optimise for speed. SovereignCode optimises for **controlled autonomy**: it can still plan, edit, test, and explain code, but it treats data rights, residency, consent, provenance, and human approval as *runtime primitives* &mdash; not policy text on a wiki.
 
 
 
 
 
 
 
 
 
 
 
63
 
64
  ## Quickstart
65
 
66
- Clone and install:
67
 
68
  ```bash
69
- hf download AbteeXAILab/sovereigncode --local-dir sovereigncode --repo-type model
70
- cd sovereigncode
71
- pip install -r requirements.txt
72
  ```
73
 
74
- Evaluate an **allowed** local-edit request against the example capsule:
 
 
75
 
76
  ```bash
77
- python -m sovereigncode.cli evaluate \
78
- --capsule examples/capsule.restricted-nz-code.json \
79
- --request examples/request.allowed-local-edit.json
 
 
80
  ```
81
 
82
- Expected: `allowed: true` with obligations including `write_immutable_audit_record`, `preserve_capsule_id_in_agent_trace`, and `show_diff_before_write_or_commit`.
83
-
84
- Evaluate a **denied** training request:
85
 
86
  ```bash
87
- python -m sovereigncode.cli evaluate \
88
- --capsule examples/capsule.restricted-nz-code.json \
89
- --request examples/request.denied-training.json \
90
  --allow-denied-exit-zero
91
  ```
92
 
93
- Expected: `allowed: false` with reason `capsule.training_allowed = false`.
94
-
95
- ## Data Capsule
96
-
97
- A Data Capsule is the policy envelope attached to a workspace, dataset, tenant, case, source-file set, or prompt context.
98
-
99
- ```json
100
- {
101
- "capsule_id": "cap-nz-code-001",
102
- "subject_id": "abx-workspace",
103
- "jurisdiction": "NZ",
104
- "sensitivity": "restricted",
105
- "allowed_purposes": ["coding_assistance", "inference", "test_generation"],
106
- "denied_purposes": ["ad_training", "third_party_resale"],
107
- "resident_regions": ["NZ"],
108
- "data_classes": ["source_code", "policy", "runtime_logs"],
109
- "retention_days": 14,
110
- "export_allowed": false,
111
- "training_allowed": false
112
- }
113
- ```
114
 
115
- Capsules carry:
116
-
117
- - `allowed_purposes` / `denied_purposes`
118
- - `resident_regions`
119
- - `retention_days`
120
- - `training_allowed` / `export_allowed`
121
- - `data_classes`
122
- - `schema_context`
123
- - `consent_record`
124
-
125
- ## Policy Decision Point
126
-
127
- The PDP answers one question before every sensitive action:
128
-
129
- > *Can this actor, for this purpose, in this region, using this model/tool, touch this capsule?*
130
 
131
- Decisions are one of: `allow`, `deny`, or `allow_with_obligations`. Every decision produces a structured record:
132
 
133
- | Field | Meaning |
134
  | --- | --- |
135
- | `capsule_id` | The capsule the action touches. |
136
- | `actor` | Who initiated the action. |
137
- | `purpose` | Declared purpose (e.g. `coding_assistance`). |
138
- | `action` | The tool action requested. |
139
- | `model_id` | Resolved model identity (often via [MaramaRoute](https://huggingface.co/AbteeXAILab/marama-route)). |
140
- | `decision` | `allow` / `deny` / `allow_with_obligations`. |
141
- | `reasons` | Ordered list of policy reasons. |
142
- | `obligations` | Required follow-up actions. |
143
- | `request_hash` | Stable SHA-256 of the canonical request. |
144
- | `timestamp` | ISO 8601 UTC. |
145
-
146
- ## Tool Broker
147
 
148
- The broker is the enforcement layer for shell commands, file writes, git commits, network calls, package installs, model calls, retrieval queries, and training jobs. Every tool call passes through the PDP first.
149
 
150
- ## Audit Ledger
 
 
 
 
 
 
 
 
151
 
152
- Every decision creates an immutable audit record. Records are append-only and hash-chained &mdash; usable as evidence for regulators, customers, and internal review.
153
 
154
- ## Sovereignty & Run Contract
155
 
156
- | Field | Value |
157
- | --- | --- |
158
- | Publisher | AbteeX AI Labs |
159
- | Family | LumynaX sovereign products |
160
- | Sovereign intent | Local-first coding assistance with policy-before-tools enforcement. |
161
- | Runtime residency | Operator's environment; restricted data routes to local or LumynaX-governed models. |
162
- | License | Apache-2.0 |
163
- | Stage | Product scaffold &mdash; PDP and audit engine executable; full terminal loop in P1. |
164
- | Router integration | First-class with [LumynaX MaramaRoute](https://huggingface.co/AbteeXAILab/marama-route). |
165
 
166
- ## Roadmap
167
 
168
- | Milestone | Outcome |
169
- | --- | --- |
170
- | **P0 scaffold** *(now)* | Policy engine, audit records, CLI, examples, docs. |
171
- | **P1 terminal loop** | Local terminal agent with plan / edit / test workflow. |
172
- | **P2 tool broker** | Policy wrappers for shell, git, file writes, package installs, HTTP. |
173
- | **P3 MaramaRoute integration** | Sovereign model routing for every model call. |
174
- | **P4 workspace UI** | Browser console showing plan, policy, diffs, tests, approvals. |
175
- | **P5 enterprise controls** | Tenant policies, SSO hooks, signed audit exports, policy packs. |
176
 
177
- ## Source Grounding
178
 
179
- The sovereignty model is inspired by the Data Capsule pattern described in the ScienceDirect article identified by PII `S2543925125000166` &mdash; especially its emphasis on semantic metadata, ontology-based federation, and dynamic usage-control policies. This repository uses that idea as product architecture inspiration; it does not copy the paper text or implementation.
180
 
181
- ## Companion Products
 
 
182
 
183
- | Product | Purpose |
184
- | --- | --- |
185
- | [LumynaX MaramaRoute](https://huggingface.co/AbteeXAILab/marama-route) | Sovereign model router across the LumynaX release family. SovereignCode delegates model selection to MaramaRoute. |
186
- | [LumynaX Live Demo](https://huggingface.co/spaces/AbteeXAILab/lumynax-live-demo) | Public browser demo of a LumynaX-infused GGUF release. |
187
- | [SovereignCode Live](https://huggingface.co/spaces/AbteeXAILab/sovereigncode-demo) | Interactive policy evaluator &mdash; paste a capsule and request, see the decision. |
188
- | [AbteeXAILab on Hugging Face](https://huggingface.co/AbteeXAILab) | The full LumynaX release family. |
189
 
190
- ## Aotearoa Kaupapa
 
 
 
 
 
 
191
 
192
- SovereignCode is built in and for Aotearoa New Zealand. Iwi data sovereignty, health-information governance, and procurement transparency are not retro-fits &mdash; they are the runtime contract. The product treats data rights, residency, consent, provenance, and human approval as primitives.
193
 
194
- ## Limitations & Responsible Use
 
 
 
 
 
 
 
 
 
195
 
196
- - The PDP enforces declared policy. It does not detect every possible deceptive prompt or covert exfiltration channel.
197
- - The current release is a *product scaffold*. Full terminal loop, tool broker, and workspace UI ship in P1–P4.
198
- - For high-impact decisions, use human review and domain-specific evaluation.
199
- - Audit records help, but auditability is a process &mdash; not a guarantee.
200
 
201
- ---
 
 
 
 
 
 
 
 
 
 
 
202
 
203
- <p align="center"><em>Local roots, global work. &middot; Sovereignty is a design property, not a deployment option.</em></p>
204
- <p align="center"><sub>AbteeX AI Labs &middot; <a href="https://abteex.com">abteex.com</a> &middot; <a href="https://lumynax.com">lumynax.com</a> &middot; <a href="https://huggingface.co/AbteeXAILab">huggingface.co/AbteeXAILab</a></sub></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  - aotearoa
13
  - sovereign-ai
14
  - local-first
15
+ - opencode
16
  language:
17
  - en
18
  - mi
19
  ---
20
 
21
  # AbteeX SovereignCode
22
+ <!-- abteex-sovereigncode-card:v2 -->
23
 
24
+ Standalone release package for `AbteeXAILab/sovereigncode`.
25
 
26
+ ## Install
 
27
 
28
+ ```bash
29
+ hf download AbteeXAILab/sovereigncode --local-dir sovereigncode --repo-type model
30
+ cd sovereigncode
31
+ pip install -e .
32
+ python quickstart.py
33
+ ```
34
 
35
+ ## Included Runtime Commands
 
 
 
 
 
 
 
 
36
 
37
+ ```bash
38
+ python -m sovereigncode.cli evaluate --capsule examples/capsule.restricted-nz-code.json --request examples/request.allowed-local-edit.json
39
+ python -m sovereigncode.cli plan-turn --capsule examples/capsule.restricted-nz-code.json --request examples/request.allowed-local-edit.json --route-request examples/request.code-restricted.json --registry configs/lumynax_model_registry.json
40
+ ```
41
+
42
+ # AbteeX SovereignCode
43
 
44
+ AbteeX SovereignCode is the proposed AbteeX AI Labs coding-agent product built on LumynaX. It is conceptually close to an OpenCode-style terminal coding assistant, but the centre of gravity is AI sovereignty: every model call, tool call, file edit, and outbound action is evaluated against a Data Capsule policy before execution.
45
 
46
+ ## Product Position
47
 
48
+ SovereignCode is for organisations that want local-first coding assistance without losing control over source code, regulated records, Iwi or community-held data, health data, procurement records, or other sensitive operational context.
49
 
50
+ The product is designed around five commitments:
51
 
52
  | Commitment | Product Meaning |
53
  | --- | --- |
54
  | Data capsules | Every workspace, dataset, or customer context can carry machine-readable purpose, residency, retention, export, and training controls. |
55
+ | Policy before tools | Shell commands, file writes, network calls, commits, and model calls are checked before execution. |
56
  | Local-first inference | High-impact or restricted data routes to local or LumynaX-governed models by default. |
57
  | Human review | External effects require explicit approval, visible diffs, and audit records. |
58
  | Provenance | Model identity, source files, policy decisions, prompts, outputs, and release metadata remain traceable. |
59
 
60
  ## Why This Is Different
61
 
62
+ Most coding agents optimise for speed. SovereignCode optimises for controlled autonomy: it can still plan, edit, test, and explain code, but it treats data rights, residency, consent, provenance, and human approval as runtime primitives instead of policy text on a wiki.
63
+
64
+ The initial product scaffold includes:
65
+
66
+ - A deterministic Data Capsule policy decision point.
67
+ - Personal-detail consent checks for anonymous, pseudonymous, identifiable, and sensitive identifiable contexts.
68
+ - A CLI evaluator for governed code/data requests.
69
+ - A governed coding-turn planner that combines policy, audit, tool grants, and MaramaRoute model selection.
70
+ - Audit-record generation with stable request hashes.
71
+ - Product architecture and launch roadmap.
72
+ - Example capsules for restricted New Zealand source-code work.
73
+ - A path to integrate with LumynaX MaramaRoute for sovereign model selection.
74
 
75
  ## Quickstart
76
 
77
+ From the repo root:
78
 
79
  ```bash
80
+ py -3 -m tinyluminax.products.sovereigncode.cli evaluate \
81
+ --capsule products/abx-sovereigncode/examples/capsule.restricted-nz-code.json \
82
+ --request products/abx-sovereigncode/examples/request.allowed-local-edit.json
83
  ```
84
 
85
+ Expected result: `allowed: true` with obligations such as audit logging, local runtime routing, and visible diff review.
86
+
87
+ Plan a complete governed coding-agent turn:
88
 
89
  ```bash
90
+ py -3 -m tinyluminax.products.sovereigncode.cli plan-turn \
91
+ --capsule products/abx-sovereigncode/examples/capsule.restricted-nz-code.json \
92
+ --request products/abx-sovereigncode/examples/request.allowed-local-edit.json \
93
+ --route-request products/lumynax-marama-route/examples/request.code-restricted.json \
94
+ --registry products/lumynax-marama-route/configs/lumynax_model_registry.json
95
  ```
96
 
97
+ Denied training example:
 
 
98
 
99
  ```bash
100
+ py -3 -m tinyluminax.products.sovereigncode.cli evaluate \
101
+ --capsule products/abx-sovereigncode/examples/capsule.restricted-nz-code.json \
102
+ --request products/abx-sovereigncode/examples/request.denied-training.json \
103
  --allow-denied-exit-zero
104
  ```
105
 
106
+ ## Product Modules
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
 
108
+ | Module | Purpose |
109
+ | --- | --- |
110
+ | Workspace Indexer | Builds a local map of files, policies, secrets, data classes, and repository ownership. |
111
+ | Data Capsule PDP | Decides whether a request is allowed, denied, or allowed with obligations. |
112
+ | Tool Broker | Wraps shell, file, git, network, package, and model actions with policy checks. |
113
+ | LumynaX Runtime Adapter | Routes model calls to local GGUF, local API, or approved LumynaX model endpoints. |
114
+ | Audit Ledger | Stores decision records, prompt/output hashes, file diffs, and approval metadata. |
115
+ | Operator Console | Shows the plan, policy decision, diff, tests, and approval gate before external effects. |
 
 
 
 
 
 
 
116
 
117
+ ## New Zealand Launch Shape
118
 
119
+ | Layer | Product Decision |
120
  | --- | --- |
121
+ | Default region | `NZ` residency, with explicit opt-in for `AU` or global routes. |
122
+ | Default data posture | Local-first for restricted, health, personal, Iwi, taonga, and regulated operational context. |
123
+ | Buyer control | Tenant policy packs define purpose, retention, model allowlists, exports, and approval rules. |
124
+ | Personal sovereignty | Personal data is tagged by detail level and consent scope before it enters prompts or traces. |
125
+ | OpenCode compatibility | Configure SovereignCode through MaramaRoute as an OpenAI-compatible provider. |
126
+ | Commercial wedge | Start with governed code assistance for New Zealand teams that cannot send private workspaces to a generic cloud coding agent. |
 
 
 
 
 
 
127
 
128
+ ## Real Product Surfaces
129
 
130
+ | Surface | File |
131
+ | --- | --- |
132
+ | Data Capsule JSON Schema | `schemas/data_capsule.schema.json` |
133
+ | NZ personal sovereignty policy pack | `policy-packs/nz-personal-sovereignty.yaml` |
134
+ | OpenCode-compatible integration guide | `integrations/opencode-compatible-provider.md` |
135
+ | OpenCode provider example | `examples/opencode.marama-route.json` |
136
+ | Personal profile capsule | `examples/capsule.personal-sovereignty-profile.json` |
137
+ | Personal-memory request | `examples/request.personal-memory-read.json` |
138
+ | Product blueprint | `product_blueprint.md` |
139
 
140
+ ## Source Grounding
141
 
142
+ The sovereignty model is inspired by the Data Capsule pattern described in the ScienceDirect article identified by PII `S2543925125000166`, especially its emphasis on semantic metadata, ontology-based federation, and dynamic usage-control policies. This repository uses that idea as product architecture inspiration; it does not copy the paper text or implementation.
143
 
144
+ ## Stage
 
 
 
 
 
 
 
 
145
 
146
+ This is a product scaffold, not the final commercial application. The policy engine and router integration are executable now; the terminal UI, tool broker, and full agent loop are the next implementation stage.
147
 
 
 
 
 
 
 
 
 
148
 
149
+ # AbteeX SovereignCode Product Blueprint
150
 
151
+ ## One-Sentence Product
152
 
153
+ SovereignCode is a local-first coding agent for New Zealand teams that need code
154
+ assistance, model routing, personal-data controls, and audit-ready tool use in
155
+ one governed workflow.
156
 
157
+ ## Core User Jobs
 
 
 
 
 
158
 
159
+ | User | Job | SovereignCode Response |
160
+ | --- | --- | --- |
161
+ | Individual developer | Use an AI coding assistant without exposing private files or personal preferences. | Local capsule, pseudonymous personal profile, resident model route, no training by default. |
162
+ | Startup or SME | Refactor and test private code while keeping customer data out of generic SaaS logs. | Workspace capsule, local route, diff review, audit hash. |
163
+ | Council or public-sector team | Use AI on operational code and documents with retention and residency controls. | Tenant policy pack, NZ residency, approval gates, signed audit export. |
164
+ | Iwi or community data steward | Keep community-held context under explicit purpose and consent boundaries. | High-impact sensitivity, local/LumynaX-only model rule, export denial by default. |
165
+ | Internal platform owner | Give developers one coding assistant with central policy. | OpenAI-compatible provider, CLI planner, future SSO and policy server. |
166
 
167
+ ## Product Pillars
168
 
169
+ 1. Capsule-first context: every workspace, profile, dataset, and prompt context
170
+ resolves to a Data Capsule before agent work starts.
171
+ 2. Personal sovereignty: personal detail is classified before prompt assembly,
172
+ and consent scopes gate how profile context can be used.
173
+ 3. Governed autonomy: read, plan, patch, test, shell, network, commit, and
174
+ publish actions are separate tool grants.
175
+ 4. Open integration: OpenCode and similar clients connect through MaramaRoute's
176
+ OpenAI-compatible gateway.
177
+ 5. Audit without hoarding: records retain decision hashes, obligations, model
178
+ identity, and reasons while prompt retention stays constrained.
179
 
180
+ ## Minimum Product Loop
 
 
 
181
 
182
+ ```text
183
+ developer asks for a coding task
184
+ -> resolve `.sovereigncode/capsule.json`
185
+ -> evaluate SovereignRequest
186
+ -> build MaramaRoute request
187
+ -> select resident LumynaX model
188
+ -> produce plan
189
+ -> request approval for writes or shell
190
+ -> apply patch
191
+ -> run tests
192
+ -> store audit record
193
+ ```
194
 
195
+ ## Product Modules To Build Next
196
+
197
+ | Module | MVP Definition | Implementation Notes |
198
+ | --- | --- | --- |
199
+ | Workspace indexer | Reads repo files, ignores secrets/build outputs, tags data classes. | Start with `rg --files`, `.gitignore`, and capsule include/exclude rules. |
200
+ | Tool broker | Wraps file write, shell, git, package install, HTTP, and model calls. | Reuse policy decisions and emit one audit record per effectful tool call. |
201
+ | Terminal UI | Shows plan, selected model, obligations, diff, and test output. | Keep compatible with OpenCode-style terminal use. |
202
+ | Personal profile store | Keeps user preferences and memory under a personal capsule. | Local encrypted file first, tenant vault later. |
203
+ | Audit ledger | Append-only local JSONL with hash chain. | Export signed bundles for enterprise customers. |
204
+ | Tenant policy server | Central policy packs, model allowlists, API keys, quotas. | Only needed after local MVP works. |
205
+
206
+ ## Default Plans
207
+
208
+ | Plan | Buyer | Included |
209
+ | --- | --- | --- |
210
+ | Local Developer | individual NZ developer | local capsule, local audit, MaramaRoute provider config |
211
+ | Team Sovereign | startup or SME | shared policy pack, route registry, team audit export |
212
+ | Regulated Workspace | council, health-adjacent, community data project | stronger approval gates, retention controls, signed audit, SSO-ready policy server |
213
+
214
+ ## First Non-Negotiables
215
+
216
+ - Never train on a capsule unless `training_allowed` is explicitly true.
217
+ - Never export restricted or personal context unless `export_allowed` is true
218
+ and the request carries human approval.
219
+ - Never route high-impact data to a non-local or non-LumynaX-governed model.
220
+ - Never apply file writes without a visible diff obligation.
221
+ - Never hide selected model identity from the audit record.
SMOKE_TESTS.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SovereignCode Smoke Tests
2
+
3
+ Run from the package root:
4
+
5
+ ```bash
6
+ pip install -e .
7
+ python quickstart.py
8
+ python -m sovereigncode.cli evaluate --capsule examples/capsule.personal-sovereignty-profile.json --request examples/request.personal-memory-read.json
9
+ ```
10
+
11
+ Expected: all commands exit 0 and emit JSON decisions with audit records.
configs/lumynax_model_registry.json ADDED
@@ -0,0 +1,2931 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "registry_id": "lumynax-marama-route-registry-v0",
3
+ "publisher": "AbteeX AI Labs",
4
+ "source_report": "docs/releases/hf-model-card-v4-refresh-2026-05-11.json",
5
+ "model_count": 74,
6
+ "models": [
7
+ {
8
+ "model_id": "lumynax-coder-qwen25-05b-instruct-gguf",
9
+ "repo_id": "AbteeXAILab/lumynax-coder-qwen25-05b-instruct-gguf",
10
+ "title": "LumynaX Coder Qwen2.5 0.5B Instruct GGUF",
11
+ "family": "qwen",
12
+ "runtime": "llama_cpp",
13
+ "modalities": [
14
+ "text"
15
+ ],
16
+ "context_tokens": 32768,
17
+ "jurisdiction": "NZ",
18
+ "residency": [
19
+ "NZ"
20
+ ],
21
+ "license_id": "see_model_card",
22
+ "quantization": "see_release_manifest",
23
+ "primary_artifact": "qwen2.5-coder-0.5b-instruct-q4_k_m.gguf",
24
+ "active_params_b": null,
25
+ "total_params_b": 0.5,
26
+ "quality_rank": 5,
27
+ "cost_rank": 2,
28
+ "sovereignty_tier": 3,
29
+ "supports_tools": true,
30
+ "supports_json": true,
31
+ "tags": [
32
+ "coder",
33
+ "gguf",
34
+ "lumynax",
35
+ "qwen",
36
+ "text"
37
+ ],
38
+ "metadata": {
39
+ "hub_sha": "81c904af42045aeac88fa843b8f653d79afa0422",
40
+ "package_state": "prebuilt_gguf_release",
41
+ "public_status": "public and non-gated",
42
+ "validation_status": "pass",
43
+ "total_weight_size": 491400064
44
+ }
45
+ },
46
+ {
47
+ "model_id": "lumynax-coder-qwen25-14b-instruct-gguf",
48
+ "repo_id": "AbteeXAILab/lumynax-coder-qwen25-14b-instruct-gguf",
49
+ "title": "LumynaX Coder Qwen2.5 14B Instruct GGUF",
50
+ "family": "qwen",
51
+ "runtime": "llama_cpp",
52
+ "modalities": [
53
+ "text"
54
+ ],
55
+ "context_tokens": 32768,
56
+ "jurisdiction": "NZ",
57
+ "residency": [
58
+ "NZ"
59
+ ],
60
+ "license_id": "see_model_card",
61
+ "quantization": "see_release_manifest",
62
+ "primary_artifact": "qwen2.5-coder-14b-instruct-q4_k_m.gguf",
63
+ "active_params_b": null,
64
+ "total_params_b": 14.0,
65
+ "quality_rank": 2,
66
+ "cost_rank": 6,
67
+ "sovereignty_tier": 3,
68
+ "supports_tools": true,
69
+ "supports_json": true,
70
+ "tags": [
71
+ "coder",
72
+ "gguf",
73
+ "lumynax",
74
+ "qwen",
75
+ "text"
76
+ ],
77
+ "metadata": {
78
+ "hub_sha": "e408c607528af8457900e4237b26184612f16e49",
79
+ "package_state": "prebuilt_gguf_release",
80
+ "public_status": "public and non-gated",
81
+ "validation_status": "pass",
82
+ "total_weight_size": 8988110272
83
+ }
84
+ },
85
+ {
86
+ "model_id": "lumynax-coder-qwen25-15b-instruct-gguf",
87
+ "repo_id": "AbteeXAILab/lumynax-coder-qwen25-15b-instruct-gguf",
88
+ "title": "LumynaX Coder Qwen2.5 1.5B Instruct GGUF",
89
+ "family": "qwen",
90
+ "runtime": "llama_cpp",
91
+ "modalities": [
92
+ "text"
93
+ ],
94
+ "context_tokens": 32768,
95
+ "jurisdiction": "NZ",
96
+ "residency": [
97
+ "NZ"
98
+ ],
99
+ "license_id": "see_model_card",
100
+ "quantization": "see_release_manifest",
101
+ "primary_artifact": "qwen2.5-coder-1.5b-instruct-q4_k_m.gguf",
102
+ "active_params_b": null,
103
+ "total_params_b": 1.5,
104
+ "quality_rank": 5,
105
+ "cost_rank": 4,
106
+ "sovereignty_tier": 3,
107
+ "supports_tools": true,
108
+ "supports_json": true,
109
+ "tags": [
110
+ "coder",
111
+ "gguf",
112
+ "lumynax",
113
+ "qwen",
114
+ "text"
115
+ ],
116
+ "metadata": {
117
+ "hub_sha": "cbe84212ed061b79297683f6d6247fd22f1fde7c",
118
+ "package_state": "prebuilt_gguf_release",
119
+ "public_status": "public and non-gated",
120
+ "validation_status": "pass",
121
+ "total_weight_size": 1117320768
122
+ }
123
+ },
124
+ {
125
+ "model_id": "lumynax-coder-qwen25-7b-instruct-gguf",
126
+ "repo_id": "AbteeXAILab/lumynax-coder-qwen25-7b-instruct-gguf",
127
+ "title": "LumynaX Coder Qwen2.5 7B Instruct GGUF",
128
+ "family": "qwen",
129
+ "runtime": "llama_cpp",
130
+ "modalities": [
131
+ "text"
132
+ ],
133
+ "context_tokens": 32768,
134
+ "jurisdiction": "NZ",
135
+ "residency": [
136
+ "NZ"
137
+ ],
138
+ "license_id": "see_model_card",
139
+ "quantization": "see_release_manifest",
140
+ "primary_artifact": "qwen2.5-coder-7b-instruct-q4_k_m.gguf",
141
+ "active_params_b": null,
142
+ "total_params_b": 7.0,
143
+ "quality_rank": 3,
144
+ "cost_rank": 6,
145
+ "sovereignty_tier": 3,
146
+ "supports_tools": true,
147
+ "supports_json": true,
148
+ "tags": [
149
+ "coder",
150
+ "gguf",
151
+ "lumynax",
152
+ "qwen",
153
+ "text"
154
+ ],
155
+ "metadata": {
156
+ "hub_sha": "fe5491063e09af13dbdb7fa6cef7f57d5cecc14d",
157
+ "package_state": "prebuilt_gguf_release",
158
+ "public_status": "public and non-gated",
159
+ "validation_status": "pass",
160
+ "total_weight_size": 4683073536
161
+ }
162
+ },
163
+ {
164
+ "model_id": "lumynax-embed-bge-m3",
165
+ "repo_id": "AbteeXAILab/lumynax-embed-bge-m3",
166
+ "title": "LumynaX Embed BGE M3",
167
+ "family": "embedding",
168
+ "runtime": "python_embedding",
169
+ "modalities": [
170
+ "text",
171
+ "embedding"
172
+ ],
173
+ "context_tokens": 8192,
174
+ "jurisdiction": "NZ",
175
+ "residency": [
176
+ "NZ"
177
+ ],
178
+ "license_id": "see_model_card",
179
+ "quantization": "see_release_manifest",
180
+ "primary_artifact": "merged_model/pytorch_model.bin",
181
+ "active_params_b": null,
182
+ "total_params_b": null,
183
+ "quality_rank": 4,
184
+ "cost_rank": 4,
185
+ "sovereignty_tier": 2,
186
+ "supports_tools": false,
187
+ "supports_json": false,
188
+ "tags": [
189
+ "embedding",
190
+ "lumynax",
191
+ "text"
192
+ ],
193
+ "metadata": {
194
+ "hub_sha": "05011e1f7ea9cbd714c8fef86695a498685750a8",
195
+ "package_state": "upstream_weights_hydrated_embedding",
196
+ "public_status": "public and non-gated",
197
+ "validation_status": "pass",
198
+ "total_weight_size": 2273250020
199
+ }
200
+ },
201
+ {
202
+ "model_id": "lumynax-embed-e5-mistral-7b",
203
+ "repo_id": "AbteeXAILab/lumynax-embed-e5-mistral-7b",
204
+ "title": "LumynaX Embed E5 Mistral 7B",
205
+ "family": "mistral",
206
+ "runtime": "python_embedding",
207
+ "modalities": [
208
+ "text",
209
+ "embedding"
210
+ ],
211
+ "context_tokens": 8192,
212
+ "jurisdiction": "NZ",
213
+ "residency": [
214
+ "NZ"
215
+ ],
216
+ "license_id": "see_model_card",
217
+ "quantization": "see_release_manifest",
218
+ "primary_artifact": "merged_model/model-00001-of-00002.safetensors",
219
+ "active_params_b": null,
220
+ "total_params_b": 7.0,
221
+ "quality_rank": 3,
222
+ "cost_rank": 8,
223
+ "sovereignty_tier": 2,
224
+ "supports_tools": false,
225
+ "supports_json": false,
226
+ "tags": [
227
+ "embedding",
228
+ "lumynax",
229
+ "mistral",
230
+ "text"
231
+ ],
232
+ "metadata": {
233
+ "hub_sha": "0c8fc35c248b9bbc951df8904c97f41c51a883c2",
234
+ "package_state": "upstream_weights_hydrated_embedding",
235
+ "public_status": "public and non-gated",
236
+ "validation_status": "pass",
237
+ "total_weight_size": 14221351904
238
+ }
239
+ },
240
+ {
241
+ "model_id": "lumynax-frontier-minimax-m25-unsloth",
242
+ "repo_id": "AbteeXAILab/lumynax-frontier-minimax-m25-unsloth",
243
+ "title": "LumynaX Frontier MiniMax M2.5 Unsloth",
244
+ "family": "minimax",
245
+ "runtime": "llama_cpp",
246
+ "modalities": [
247
+ "text"
248
+ ],
249
+ "context_tokens": 8192,
250
+ "jurisdiction": "NZ",
251
+ "residency": [
252
+ "NZ"
253
+ ],
254
+ "license_id": "see_model_card",
255
+ "quantization": "see_release_manifest",
256
+ "primary_artifact": "MiniMax-M2.5-UD-TQ1_0.gguf",
257
+ "active_params_b": null,
258
+ "total_params_b": null,
259
+ "quality_rank": 1,
260
+ "cost_rank": 10,
261
+ "sovereignty_tier": 3,
262
+ "supports_tools": false,
263
+ "supports_json": true,
264
+ "tags": [
265
+ "frontier",
266
+ "general",
267
+ "lumynax",
268
+ "text"
269
+ ],
270
+ "metadata": {
271
+ "hub_sha": "ff328be463825aedd9cec5b8f5fe3fce47f7547f",
272
+ "package_state": "prebuilt_gguf_release",
273
+ "public_status": "public and non-gated",
274
+ "validation_status": "pass",
275
+ "total_weight_size": 55765943424
276
+ }
277
+ },
278
+ {
279
+ "model_id": "lumynax-infused-gemma-e4b",
280
+ "repo_id": "AbteeXAILab/lumynax-infused-gemma-e4b",
281
+ "title": "LumynaX Infused Gemma E4B Model",
282
+ "family": "gemma",
283
+ "runtime": "transformers_multimodal",
284
+ "modalities": [
285
+ "text",
286
+ "image",
287
+ "audio"
288
+ ],
289
+ "context_tokens": 4096,
290
+ "jurisdiction": "NZ",
291
+ "residency": [
292
+ "NZ"
293
+ ],
294
+ "license_id": "see_model_card",
295
+ "quantization": "see_release_manifest",
296
+ "primary_artifact": "merged_model/model.safetensors",
297
+ "active_params_b": null,
298
+ "total_params_b": 4.0,
299
+ "quality_rank": 3,
300
+ "cost_rank": 8,
301
+ "sovereignty_tier": 2,
302
+ "supports_tools": false,
303
+ "supports_json": true,
304
+ "tags": [
305
+ "audio",
306
+ "gemma",
307
+ "general",
308
+ "image",
309
+ "lumynax",
310
+ "text"
311
+ ],
312
+ "metadata": {
313
+ "hub_sha": "71c0d98bc3ac1b90d3d59dbc5505910e6edef6a6",
314
+ "package_state": "base_weights_hydrated",
315
+ "public_status": "public and non-gated",
316
+ "validation_status": "pass",
317
+ "total_weight_size": 15992595884
318
+ }
319
+ },
320
+ {
321
+ "model_id": "lumynax-infused-gemma-e4b-text-gguf",
322
+ "repo_id": "AbteeXAILab/lumynax-infused-gemma-e4b-text-gguf",
323
+ "title": "LumynaX Infused Gemma E4B Text GGUF",
324
+ "family": "gemma",
325
+ "runtime": "llama_cpp",
326
+ "modalities": [
327
+ "text"
328
+ ],
329
+ "context_tokens": 8192,
330
+ "jurisdiction": "NZ",
331
+ "residency": [
332
+ "NZ"
333
+ ],
334
+ "license_id": "see_model_card",
335
+ "quantization": "see_release_manifest",
336
+ "primary_artifact": "lumynax-infused-gemma-e4b-text-gguf-q4_k_m.gguf",
337
+ "active_params_b": null,
338
+ "total_params_b": 4.0,
339
+ "quality_rank": 3,
340
+ "cost_rank": 6,
341
+ "sovereignty_tier": 3,
342
+ "supports_tools": false,
343
+ "supports_json": true,
344
+ "tags": [
345
+ "gemma",
346
+ "general",
347
+ "gguf",
348
+ "lumynax",
349
+ "text"
350
+ ],
351
+ "metadata": {
352
+ "hub_sha": "da670d4d4c080f93e37171d69f2e49cbe0740f4c",
353
+ "package_state": "hf_q4_runtime_bundle",
354
+ "public_status": "public and non-gated",
355
+ "validation_status": "pass",
356
+ "total_weight_size": 5335290080
357
+ }
358
+ },
359
+ {
360
+ "model_id": "lumynax-infused-gemma4-26b-a4b-gguf",
361
+ "repo_id": "AbteeXAILab/lumynax-infused-gemma4-26b-a4b-gguf",
362
+ "title": "LumynaX Infused Gemma4 26B A4B GGUF",
363
+ "family": "gemma",
364
+ "runtime": "llama_cpp",
365
+ "modalities": [
366
+ "text"
367
+ ],
368
+ "context_tokens": 8192,
369
+ "jurisdiction": "NZ",
370
+ "residency": [
371
+ "NZ"
372
+ ],
373
+ "license_id": "see_model_card",
374
+ "quantization": "see_release_manifest",
375
+ "primary_artifact": "lumynax-infused-gemma4-26b-a4b-ud-q4_k_m.gguf",
376
+ "active_params_b": 4.0,
377
+ "total_params_b": 26.0,
378
+ "quality_rank": 1,
379
+ "cost_rank": 8,
380
+ "sovereignty_tier": 3,
381
+ "supports_tools": false,
382
+ "supports_json": true,
383
+ "tags": [
384
+ "gemma",
385
+ "general",
386
+ "gguf",
387
+ "lumynax",
388
+ "text"
389
+ ],
390
+ "metadata": {
391
+ "hub_sha": "9ac3619aaa892edf714fad37d566dcc75e3c63e6",
392
+ "package_state": "prebuilt_gguf_release",
393
+ "public_status": "public and non-gated",
394
+ "validation_status": "pass",
395
+ "total_weight_size": 16947539744
396
+ }
397
+ },
398
+ {
399
+ "model_id": "lumynax-infused-granite31-1b-a400m-gguf",
400
+ "repo_id": "AbteeXAILab/lumynax-infused-granite31-1b-a400m-gguf",
401
+ "title": "LumynaX Infused Granite 3.1 1B A400M Instruct GGUF",
402
+ "family": "granite",
403
+ "runtime": "llama_cpp",
404
+ "modalities": [
405
+ "text"
406
+ ],
407
+ "context_tokens": 8192,
408
+ "jurisdiction": "NZ",
409
+ "residency": [
410
+ "NZ"
411
+ ],
412
+ "license_id": "see_model_card",
413
+ "quantization": "see_release_manifest",
414
+ "primary_artifact": "granite-3.1-1b-a400m-instruct-Q4_K_M.gguf",
415
+ "active_params_b": null,
416
+ "total_params_b": 1.0,
417
+ "quality_rank": 5,
418
+ "cost_rank": 2,
419
+ "sovereignty_tier": 3,
420
+ "supports_tools": false,
421
+ "supports_json": true,
422
+ "tags": [
423
+ "general",
424
+ "gguf",
425
+ "granite",
426
+ "lumynax",
427
+ "text"
428
+ ],
429
+ "metadata": {
430
+ "hub_sha": "4962677e55c151eb9540257318fd640ce1f002e7",
431
+ "package_state": "prebuilt_gguf_release",
432
+ "public_status": "public and non-gated",
433
+ "validation_status": "pass",
434
+ "total_weight_size": 821847360
435
+ }
436
+ },
437
+ {
438
+ "model_id": "lumynax-infused-granite33-2b-gguf",
439
+ "repo_id": "AbteeXAILab/lumynax-infused-granite33-2b-gguf",
440
+ "title": "LumynaX Infused Granite 3.3 2B Instruct GGUF",
441
+ "family": "granite",
442
+ "runtime": "llama_cpp",
443
+ "modalities": [
444
+ "text"
445
+ ],
446
+ "context_tokens": 8192,
447
+ "jurisdiction": "NZ",
448
+ "residency": [
449
+ "NZ"
450
+ ],
451
+ "license_id": "see_model_card",
452
+ "quantization": "see_release_manifest",
453
+ "primary_artifact": "granite-3.3-2b-instruct-Q4_K_M.gguf",
454
+ "active_params_b": null,
455
+ "total_params_b": 2.0,
456
+ "quality_rank": 4,
457
+ "cost_rank": 4,
458
+ "sovereignty_tier": 3,
459
+ "supports_tools": false,
460
+ "supports_json": true,
461
+ "tags": [
462
+ "general",
463
+ "gguf",
464
+ "granite",
465
+ "lumynax",
466
+ "text"
467
+ ],
468
+ "metadata": {
469
+ "hub_sha": "008f69d6d7ed46cfa4a26e14f1a36ed7840ca86e",
470
+ "package_state": "prebuilt_gguf_release",
471
+ "public_status": "public and non-gated",
472
+ "validation_status": "pass",
473
+ "total_weight_size": 1545303328
474
+ }
475
+ },
476
+ {
477
+ "model_id": "lumynax-infused-granite33-8b-gguf",
478
+ "repo_id": "AbteeXAILab/lumynax-infused-granite33-8b-gguf",
479
+ "title": "LumynaX Infused Granite 3.3 8B Instruct GGUF",
480
+ "family": "granite",
481
+ "runtime": "llama_cpp",
482
+ "modalities": [
483
+ "text"
484
+ ],
485
+ "context_tokens": 8192,
486
+ "jurisdiction": "NZ",
487
+ "residency": [
488
+ "NZ"
489
+ ],
490
+ "license_id": "see_model_card",
491
+ "quantization": "see_release_manifest",
492
+ "primary_artifact": "granite-3.3-8b-instruct-Q4_K_M.gguf",
493
+ "active_params_b": null,
494
+ "total_params_b": 8.0,
495
+ "quality_rank": 3,
496
+ "cost_rank": 6,
497
+ "sovereignty_tier": 3,
498
+ "supports_tools": false,
499
+ "supports_json": true,
500
+ "tags": [
501
+ "general",
502
+ "gguf",
503
+ "granite",
504
+ "lumynax",
505
+ "text"
506
+ ],
507
+ "metadata": {
508
+ "hub_sha": "9a73a865e7121274789cee80e6543444e034bb01",
509
+ "package_state": "prebuilt_gguf_release",
510
+ "public_status": "public and non-gated",
511
+ "validation_status": "pass",
512
+ "total_weight_size": 4942873344
513
+ }
514
+ },
515
+ {
516
+ "model_id": "lumynax-infused-mistral-7b-v03-gguf",
517
+ "repo_id": "AbteeXAILab/lumynax-infused-mistral-7b-v03-gguf",
518
+ "title": "LumynaX Infused Mistral 7B Instruct v0.3 GGUF",
519
+ "family": "mistral",
520
+ "runtime": "llama_cpp",
521
+ "modalities": [
522
+ "text"
523
+ ],
524
+ "context_tokens": 8192,
525
+ "jurisdiction": "NZ",
526
+ "residency": [
527
+ "NZ"
528
+ ],
529
+ "license_id": "see_model_card",
530
+ "quantization": "see_release_manifest",
531
+ "primary_artifact": "Mistral-7B-Instruct-v0.3-Q4_K_M.gguf",
532
+ "active_params_b": null,
533
+ "total_params_b": 7.0,
534
+ "quality_rank": 3,
535
+ "cost_rank": 6,
536
+ "sovereignty_tier": 3,
537
+ "supports_tools": false,
538
+ "supports_json": true,
539
+ "tags": [
540
+ "general",
541
+ "gguf",
542
+ "lumynax",
543
+ "mistral",
544
+ "text"
545
+ ],
546
+ "metadata": {
547
+ "hub_sha": "b27abdbb78659b9577c68040838a4811bb2a4fc4",
548
+ "package_state": "prebuilt_gguf_release",
549
+ "public_status": "public and non-gated",
550
+ "validation_status": "pass",
551
+ "total_weight_size": 4372812000
552
+ }
553
+ },
554
+ {
555
+ "model_id": "lumynax-infused-mistral-small-text-gguf",
556
+ "repo_id": "AbteeXAILab/lumynax-infused-mistral-small-text-gguf",
557
+ "title": "LumynaX Infused Mistral Small Text GGUF",
558
+ "family": "mistral",
559
+ "runtime": "llama_cpp",
560
+ "modalities": [
561
+ "text"
562
+ ],
563
+ "context_tokens": 8192,
564
+ "jurisdiction": "NZ",
565
+ "residency": [
566
+ "NZ"
567
+ ],
568
+ "license_id": "see_model_card",
569
+ "quantization": "see_release_manifest",
570
+ "primary_artifact": "lumynax-infused-mistral-small-text-gguf-f16.gguf",
571
+ "active_params_b": null,
572
+ "total_params_b": null,
573
+ "quality_rank": 3,
574
+ "cost_rank": 10,
575
+ "sovereignty_tier": 3,
576
+ "supports_tools": false,
577
+ "supports_json": true,
578
+ "tags": [
579
+ "general",
580
+ "gguf",
581
+ "lumynax",
582
+ "mistral",
583
+ "text"
584
+ ],
585
+ "metadata": {
586
+ "hub_sha": "f0dcbb1666de6f53212277f225ca5eb0901d9627",
587
+ "package_state": "base_weights_hydrated_text_gguf",
588
+ "public_status": "public and non-gated",
589
+ "validation_status": "pass",
590
+ "total_weight_size": 61488486400
591
+ }
592
+ },
593
+ {
594
+ "model_id": "lumynax-infused-olmo2-1b-0425-gguf",
595
+ "repo_id": "AbteeXAILab/lumynax-infused-olmo2-1b-0425-gguf",
596
+ "title": "LumynaX Infused OLMo 2 0425 1B Instruct GGUF",
597
+ "family": "olmo",
598
+ "runtime": "llama_cpp",
599
+ "modalities": [
600
+ "text"
601
+ ],
602
+ "context_tokens": 8192,
603
+ "jurisdiction": "NZ",
604
+ "residency": [
605
+ "NZ"
606
+ ],
607
+ "license_id": "see_model_card",
608
+ "quantization": "see_release_manifest",
609
+ "primary_artifact": "OLMo-2-0425-1B-Instruct-Q4_K_M.gguf",
610
+ "active_params_b": null,
611
+ "total_params_b": 1.0,
612
+ "quality_rank": 5,
613
+ "cost_rank": 2,
614
+ "sovereignty_tier": 3,
615
+ "supports_tools": false,
616
+ "supports_json": true,
617
+ "tags": [
618
+ "general",
619
+ "gguf",
620
+ "lumynax",
621
+ "text"
622
+ ],
623
+ "metadata": {
624
+ "hub_sha": "6bbec139651766aaf4310e2affe44504a0bb3a02",
625
+ "package_state": "prebuilt_gguf_release",
626
+ "public_status": "public and non-gated",
627
+ "validation_status": "pass",
628
+ "total_weight_size": 935515296
629
+ }
630
+ },
631
+ {
632
+ "model_id": "lumynax-infused-olmo2-7b-1124-gguf",
633
+ "repo_id": "AbteeXAILab/lumynax-infused-olmo2-7b-1124-gguf",
634
+ "title": "LumynaX Infused OLMo 2 1124 7B Instruct GGUF",
635
+ "family": "olmo",
636
+ "runtime": "llama_cpp",
637
+ "modalities": [
638
+ "text"
639
+ ],
640
+ "context_tokens": 8192,
641
+ "jurisdiction": "NZ",
642
+ "residency": [
643
+ "NZ"
644
+ ],
645
+ "license_id": "see_model_card",
646
+ "quantization": "see_release_manifest",
647
+ "primary_artifact": "olmo-2-1124-7B-instruct-Q4_K_M.gguf",
648
+ "active_params_b": null,
649
+ "total_params_b": 7.0,
650
+ "quality_rank": 3,
651
+ "cost_rank": 6,
652
+ "sovereignty_tier": 3,
653
+ "supports_tools": false,
654
+ "supports_json": true,
655
+ "tags": [
656
+ "general",
657
+ "gguf",
658
+ "lumynax",
659
+ "text"
660
+ ],
661
+ "metadata": {
662
+ "hub_sha": "c37a2b4ccca91a97d57058b33037a0ce2d32dd91",
663
+ "package_state": "prebuilt_gguf_release",
664
+ "public_status": "public and non-gated",
665
+ "validation_status": "pass",
666
+ "total_weight_size": 4472020256
667
+ }
668
+ },
669
+ {
670
+ "model_id": "lumynax-infused-phi-4-text-gguf",
671
+ "repo_id": "AbteeXAILab/lumynax-infused-phi-4-text-gguf",
672
+ "title": "LumynaX Infused Phi-4 Text GGUF",
673
+ "family": "phi",
674
+ "runtime": "llama_cpp",
675
+ "modalities": [
676
+ "text"
677
+ ],
678
+ "context_tokens": 8192,
679
+ "jurisdiction": "NZ",
680
+ "residency": [
681
+ "NZ"
682
+ ],
683
+ "license_id": "see_model_card",
684
+ "quantization": "see_release_manifest",
685
+ "primary_artifact": "lumynax-infused-phi-4-text-gguf-f16.gguf",
686
+ "active_params_b": null,
687
+ "total_params_b": null,
688
+ "quality_rank": 3,
689
+ "cost_rank": 10,
690
+ "sovereignty_tier": 3,
691
+ "supports_tools": false,
692
+ "supports_json": true,
693
+ "tags": [
694
+ "general",
695
+ "gguf",
696
+ "lumynax",
697
+ "phi",
698
+ "text"
699
+ ],
700
+ "metadata": {
701
+ "hub_sha": "d1ea33475c83c3ce97e63789ab9699e5f534a639",
702
+ "package_state": "base_weights_hydrated_text_gguf",
703
+ "public_status": "public and non-gated",
704
+ "validation_status": "pass",
705
+ "total_weight_size": 38382657280
706
+ }
707
+ },
708
+ {
709
+ "model_id": "lumynax-infused-phi3-mini-4k-gguf",
710
+ "repo_id": "AbteeXAILab/lumynax-infused-phi3-mini-4k-gguf",
711
+ "title": "LumynaX Infused Phi-3 Mini 4K Instruct GGUF",
712
+ "family": "phi",
713
+ "runtime": "llama_cpp",
714
+ "modalities": [
715
+ "text"
716
+ ],
717
+ "context_tokens": 8192,
718
+ "jurisdiction": "NZ",
719
+ "residency": [
720
+ "NZ"
721
+ ],
722
+ "license_id": "see_model_card",
723
+ "quantization": "see_release_manifest",
724
+ "primary_artifact": "Phi-3-mini-4k-instruct-q4.gguf",
725
+ "active_params_b": null,
726
+ "total_params_b": null,
727
+ "quality_rank": 4,
728
+ "cost_rank": 4,
729
+ "sovereignty_tier": 3,
730
+ "supports_tools": false,
731
+ "supports_json": true,
732
+ "tags": [
733
+ "general",
734
+ "gguf",
735
+ "lumynax",
736
+ "phi",
737
+ "text"
738
+ ],
739
+ "metadata": {
740
+ "hub_sha": "726f4baf5b38e0ea150aaac0c893735f5af8b5d3",
741
+ "package_state": "prebuilt_gguf_release",
742
+ "public_status": "public and non-gated",
743
+ "validation_status": "pass",
744
+ "total_weight_size": 2393231072
745
+ }
746
+ },
747
+ {
748
+ "model_id": "lumynax-infused-phi4-mini-instruct-gguf",
749
+ "repo_id": "AbteeXAILab/lumynax-infused-phi4-mini-instruct-gguf",
750
+ "title": "LumynaX Infused Phi-4 Mini Instruct GGUF",
751
+ "family": "phi",
752
+ "runtime": "llama_cpp",
753
+ "modalities": [
754
+ "text"
755
+ ],
756
+ "context_tokens": 8192,
757
+ "jurisdiction": "NZ",
758
+ "residency": [
759
+ "NZ"
760
+ ],
761
+ "license_id": "see_model_card",
762
+ "quantization": "see_release_manifest",
763
+ "primary_artifact": "Phi-4-mini-instruct-Q4_K_M.gguf",
764
+ "active_params_b": null,
765
+ "total_params_b": null,
766
+ "quality_rank": 4,
767
+ "cost_rank": 4,
768
+ "sovereignty_tier": 3,
769
+ "supports_tools": false,
770
+ "supports_json": true,
771
+ "tags": [
772
+ "general",
773
+ "gguf",
774
+ "lumynax",
775
+ "phi",
776
+ "text"
777
+ ],
778
+ "metadata": {
779
+ "hub_sha": "0159c99af7f773fed806a9c298752698ebecfb74",
780
+ "package_state": "prebuilt_gguf_release",
781
+ "public_status": "public and non-gated",
782
+ "validation_status": "pass",
783
+ "total_weight_size": 2491874272
784
+ }
785
+ },
786
+ {
787
+ "model_id": "lumynax-infused-qwen2-audio-7b",
788
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen2-audio-7b",
789
+ "title": "LumynaX Infused Qwen2 Audio 7B",
790
+ "family": "qwen",
791
+ "runtime": "transformers",
792
+ "modalities": [
793
+ "audio",
794
+ "text"
795
+ ],
796
+ "context_tokens": 32768,
797
+ "jurisdiction": "NZ",
798
+ "residency": [
799
+ "NZ"
800
+ ],
801
+ "license_id": "see_model_card",
802
+ "quantization": "see_release_manifest",
803
+ "primary_artifact": "merged_model/model-00003-of-00005.safetensors",
804
+ "active_params_b": null,
805
+ "total_params_b": 7.0,
806
+ "quality_rank": 3,
807
+ "cost_rank": 8,
808
+ "sovereignty_tier": 2,
809
+ "supports_tools": false,
810
+ "supports_json": true,
811
+ "tags": [
812
+ "audio",
813
+ "general",
814
+ "lumynax",
815
+ "qwen",
816
+ "text"
817
+ ],
818
+ "metadata": {
819
+ "hub_sha": "e743d9eede8807f4a0ecff7d6d81a48c6bfd0aa9",
820
+ "package_state": "upstream_weights_hydrated_audio",
821
+ "public_status": "public and non-gated",
822
+ "validation_status": "pass",
823
+ "total_weight_size": 16794296368
824
+ }
825
+ },
826
+ {
827
+ "model_id": "lumynax-infused-qwen25-15b-instruct-gguf",
828
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen25-15b-instruct-gguf",
829
+ "title": "LumynaX Infused Qwen2.5 1.5B Instruct GGUF",
830
+ "family": "qwen",
831
+ "runtime": "llama_cpp",
832
+ "modalities": [
833
+ "text"
834
+ ],
835
+ "context_tokens": 32768,
836
+ "jurisdiction": "NZ",
837
+ "residency": [
838
+ "NZ"
839
+ ],
840
+ "license_id": "see_model_card",
841
+ "quantization": "see_release_manifest",
842
+ "primary_artifact": "qwen2.5-1.5b-instruct-q4_k_m.gguf",
843
+ "active_params_b": null,
844
+ "total_params_b": 1.5,
845
+ "quality_rank": 4,
846
+ "cost_rank": 4,
847
+ "sovereignty_tier": 3,
848
+ "supports_tools": false,
849
+ "supports_json": true,
850
+ "tags": [
851
+ "general",
852
+ "gguf",
853
+ "lumynax",
854
+ "qwen",
855
+ "text"
856
+ ],
857
+ "metadata": {
858
+ "hub_sha": "56236805876d7cde2954862e1dd3588a55a6912e",
859
+ "package_state": "prebuilt_gguf_release",
860
+ "public_status": "public and non-gated",
861
+ "validation_status": "pass",
862
+ "total_weight_size": 1117320736
863
+ }
864
+ },
865
+ {
866
+ "model_id": "lumynax-infused-qwen25-3b-instruct-gguf",
867
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen25-3b-instruct-gguf",
868
+ "title": "LumynaX Infused Qwen2.5 3B Instruct GGUF",
869
+ "family": "qwen",
870
+ "runtime": "llama_cpp",
871
+ "modalities": [
872
+ "text"
873
+ ],
874
+ "context_tokens": 32768,
875
+ "jurisdiction": "NZ",
876
+ "residency": [
877
+ "NZ"
878
+ ],
879
+ "license_id": "see_model_card",
880
+ "quantization": "see_release_manifest",
881
+ "primary_artifact": "qwen2.5-3b-instruct-q4_k_m.gguf",
882
+ "active_params_b": null,
883
+ "total_params_b": 3.0,
884
+ "quality_rank": 4,
885
+ "cost_rank": 4,
886
+ "sovereignty_tier": 3,
887
+ "supports_tools": false,
888
+ "supports_json": true,
889
+ "tags": [
890
+ "general",
891
+ "gguf",
892
+ "lumynax",
893
+ "qwen",
894
+ "text"
895
+ ],
896
+ "metadata": {
897
+ "hub_sha": "03272f747319be4d718c9feef64d5078bb8a0c07",
898
+ "package_state": "prebuilt_gguf_release",
899
+ "public_status": "public and non-gated",
900
+ "validation_status": "pass",
901
+ "total_weight_size": 2104932768
902
+ }
903
+ },
904
+ {
905
+ "model_id": "lumynax-infused-qwen25-7b-instruct-gguf",
906
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen25-7b-instruct-gguf",
907
+ "title": "LumynaX Infused Qwen2.5 7B Instruct GGUF",
908
+ "family": "qwen",
909
+ "runtime": "llama_cpp",
910
+ "modalities": [
911
+ "text"
912
+ ],
913
+ "context_tokens": 32768,
914
+ "jurisdiction": "NZ",
915
+ "residency": [
916
+ "NZ"
917
+ ],
918
+ "license_id": "see_model_card",
919
+ "quantization": "see_release_manifest",
920
+ "primary_artifact": "qwen2.5-7b-instruct-q3_k_m.gguf",
921
+ "active_params_b": null,
922
+ "total_params_b": 7.0,
923
+ "quality_rank": 3,
924
+ "cost_rank": 4,
925
+ "sovereignty_tier": 3,
926
+ "supports_tools": false,
927
+ "supports_json": true,
928
+ "tags": [
929
+ "general",
930
+ "gguf",
931
+ "lumynax",
932
+ "qwen",
933
+ "text"
934
+ ],
935
+ "metadata": {
936
+ "hub_sha": "a499dae1ce806b58f9727ca417615fd03958d115",
937
+ "package_state": "prebuilt_gguf_release",
938
+ "public_status": "public and non-gated",
939
+ "validation_status": "pass",
940
+ "total_weight_size": 3808391072
941
+ }
942
+ },
943
+ {
944
+ "model_id": "lumynax-infused-qwen25-omni-7b-voice",
945
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen25-omni-7b-voice",
946
+ "title": "LumynaX Infused Qwen2.5 Omni 7B Voice",
947
+ "family": "qwen",
948
+ "runtime": "transformers",
949
+ "modalities": [
950
+ "audio",
951
+ "text"
952
+ ],
953
+ "context_tokens": 32768,
954
+ "jurisdiction": "NZ",
955
+ "residency": [
956
+ "NZ"
957
+ ],
958
+ "license_id": "see_model_card",
959
+ "quantization": "see_release_manifest",
960
+ "primary_artifact": "merged_model/model-00003-of-00005.safetensors",
961
+ "active_params_b": null,
962
+ "total_params_b": 7.0,
963
+ "quality_rank": 3,
964
+ "cost_rank": 10,
965
+ "sovereignty_tier": 2,
966
+ "supports_tools": false,
967
+ "supports_json": true,
968
+ "tags": [
969
+ "audio",
970
+ "general",
971
+ "lumynax",
972
+ "qwen",
973
+ "text",
974
+ "voice"
975
+ ],
976
+ "metadata": {
977
+ "hub_sha": "8f2e5068851d87406998a678b3f69990fccb4ee3",
978
+ "package_state": "upstream_weights_hydrated_audio",
979
+ "public_status": "public and non-gated",
980
+ "validation_status": "pass",
981
+ "total_weight_size": 22362861192
982
+ }
983
+ },
984
+ {
985
+ "model_id": "lumynax-infused-qwen3-06b-gguf",
986
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen3-06b-gguf",
987
+ "title": "LumynaX Infused Qwen3 0.6B GGUF",
988
+ "family": "qwen",
989
+ "runtime": "llama_cpp",
990
+ "modalities": [
991
+ "text"
992
+ ],
993
+ "context_tokens": 32768,
994
+ "jurisdiction": "NZ",
995
+ "residency": [
996
+ "NZ"
997
+ ],
998
+ "license_id": "see_model_card",
999
+ "quantization": "see_release_manifest",
1000
+ "primary_artifact": "Qwen3-0.6B-Q8_0.gguf",
1001
+ "active_params_b": null,
1002
+ "total_params_b": 0.6,
1003
+ "quality_rank": 5,
1004
+ "cost_rank": 2,
1005
+ "sovereignty_tier": 3,
1006
+ "supports_tools": false,
1007
+ "supports_json": true,
1008
+ "tags": [
1009
+ "general",
1010
+ "gguf",
1011
+ "lumynax",
1012
+ "qwen",
1013
+ "text"
1014
+ ],
1015
+ "metadata": {
1016
+ "hub_sha": "1b61730d710869c3789fffcc422a4f15539cffcf",
1017
+ "package_state": "prebuilt_gguf_release",
1018
+ "public_status": "public and non-gated",
1019
+ "validation_status": "pass",
1020
+ "total_weight_size": 639446688
1021
+ }
1022
+ },
1023
+ {
1024
+ "model_id": "lumynax-infused-qwen3-14b-gguf",
1025
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen3-14b-gguf",
1026
+ "title": "LumynaX Infused Qwen3 14B GGUF",
1027
+ "family": "qwen",
1028
+ "runtime": "llama_cpp",
1029
+ "modalities": [
1030
+ "text"
1031
+ ],
1032
+ "context_tokens": 32768,
1033
+ "jurisdiction": "NZ",
1034
+ "residency": [
1035
+ "NZ"
1036
+ ],
1037
+ "license_id": "see_model_card",
1038
+ "quantization": "see_release_manifest",
1039
+ "primary_artifact": "Qwen3-14B-Q4_K_M.gguf",
1040
+ "active_params_b": null,
1041
+ "total_params_b": 14.0,
1042
+ "quality_rank": 2,
1043
+ "cost_rank": 8,
1044
+ "sovereignty_tier": 3,
1045
+ "supports_tools": false,
1046
+ "supports_json": true,
1047
+ "tags": [
1048
+ "general",
1049
+ "gguf",
1050
+ "lumynax",
1051
+ "qwen",
1052
+ "text"
1053
+ ],
1054
+ "metadata": {
1055
+ "hub_sha": "3fae690abff170d811eb5934efe6155621528d25",
1056
+ "package_state": "prebuilt_gguf_release",
1057
+ "public_status": "public and non-gated",
1058
+ "validation_status": "pass",
1059
+ "total_weight_size": 9001752960
1060
+ }
1061
+ },
1062
+ {
1063
+ "model_id": "lumynax-infused-qwen3-17b-gguf",
1064
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen3-17b-gguf",
1065
+ "title": "LumynaX Infused Qwen3 1.7B GGUF",
1066
+ "family": "qwen",
1067
+ "runtime": "llama_cpp",
1068
+ "modalities": [
1069
+ "text"
1070
+ ],
1071
+ "context_tokens": 32768,
1072
+ "jurisdiction": "NZ",
1073
+ "residency": [
1074
+ "NZ"
1075
+ ],
1076
+ "license_id": "see_model_card",
1077
+ "quantization": "see_release_manifest",
1078
+ "primary_artifact": "Qwen3-1.7B-Q8_0.gguf",
1079
+ "active_params_b": null,
1080
+ "total_params_b": 1.7,
1081
+ "quality_rank": 5,
1082
+ "cost_rank": 4,
1083
+ "sovereignty_tier": 3,
1084
+ "supports_tools": false,
1085
+ "supports_json": true,
1086
+ "tags": [
1087
+ "general",
1088
+ "gguf",
1089
+ "lumynax",
1090
+ "qwen",
1091
+ "text"
1092
+ ],
1093
+ "metadata": {
1094
+ "hub_sha": "5eb95b799e57e502872c9ed47e63580ee81558ff",
1095
+ "package_state": "prebuilt_gguf_release",
1096
+ "public_status": "public and non-gated",
1097
+ "validation_status": "pass",
1098
+ "total_weight_size": 1834426016
1099
+ }
1100
+ },
1101
+ {
1102
+ "model_id": "lumynax-infused-qwen3-30b-a3b-gguf",
1103
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen3-30b-a3b-gguf",
1104
+ "title": "LumynaX Infused Qwen3 30B A3B GGUF",
1105
+ "family": "qwen",
1106
+ "runtime": "llama_cpp",
1107
+ "modalities": [
1108
+ "text"
1109
+ ],
1110
+ "context_tokens": 32768,
1111
+ "jurisdiction": "NZ",
1112
+ "residency": [
1113
+ "NZ"
1114
+ ],
1115
+ "license_id": "see_model_card",
1116
+ "quantization": "see_release_manifest",
1117
+ "primary_artifact": "lumynax-infused-qwen3-30b-a3b-q4_k_m.gguf",
1118
+ "active_params_b": 3.0,
1119
+ "total_params_b": 30.0,
1120
+ "quality_rank": 1,
1121
+ "cost_rank": 8,
1122
+ "sovereignty_tier": 3,
1123
+ "supports_tools": false,
1124
+ "supports_json": true,
1125
+ "tags": [
1126
+ "general",
1127
+ "gguf",
1128
+ "lumynax",
1129
+ "qwen",
1130
+ "text"
1131
+ ],
1132
+ "metadata": {
1133
+ "hub_sha": "acfc6b800fc3979e419d4abfd51554b4d6e78abd",
1134
+ "package_state": "prebuilt_gguf_release",
1135
+ "public_status": "public and non-gated",
1136
+ "validation_status": "pass",
1137
+ "total_weight_size": 18556686912
1138
+ }
1139
+ },
1140
+ {
1141
+ "model_id": "lumynax-infused-qwen3-8b-gguf",
1142
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen3-8b-gguf",
1143
+ "title": "LumynaX Infused Qwen3 8B GGUF",
1144
+ "family": "qwen",
1145
+ "runtime": "llama_cpp",
1146
+ "modalities": [
1147
+ "text"
1148
+ ],
1149
+ "context_tokens": 32768,
1150
+ "jurisdiction": "NZ",
1151
+ "residency": [
1152
+ "NZ"
1153
+ ],
1154
+ "license_id": "see_model_card",
1155
+ "quantization": "see_release_manifest",
1156
+ "primary_artifact": "lumynax-infused-qwen3-8b-q4_k_m.gguf",
1157
+ "active_params_b": null,
1158
+ "total_params_b": 8.0,
1159
+ "quality_rank": 3,
1160
+ "cost_rank": 6,
1161
+ "sovereignty_tier": 3,
1162
+ "supports_tools": false,
1163
+ "supports_json": true,
1164
+ "tags": [
1165
+ "general",
1166
+ "gguf",
1167
+ "lumynax",
1168
+ "qwen",
1169
+ "text"
1170
+ ],
1171
+ "metadata": {
1172
+ "hub_sha": "c61c9a6fa0b95ec8a3da1912b897ca1fcc19d48a",
1173
+ "package_state": "prebuilt_gguf_release",
1174
+ "public_status": "public and non-gated",
1175
+ "validation_status": "pass",
1176
+ "total_weight_size": 5027783488
1177
+ }
1178
+ },
1179
+ {
1180
+ "model_id": "lumynax-infused-qwen3-coder-30b-a3b-gguf",
1181
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen3-coder-30b-a3b-gguf",
1182
+ "title": "LumynaX Infused Qwen3 Coder 30B A3B GGUF",
1183
+ "family": "qwen",
1184
+ "runtime": "llama_cpp",
1185
+ "modalities": [
1186
+ "text"
1187
+ ],
1188
+ "context_tokens": 32768,
1189
+ "jurisdiction": "NZ",
1190
+ "residency": [
1191
+ "NZ"
1192
+ ],
1193
+ "license_id": "see_model_card",
1194
+ "quantization": "see_release_manifest",
1195
+ "primary_artifact": "lumynax-infused-qwen3-coder-30b-a3b-q4_k_m.gguf",
1196
+ "active_params_b": 3.0,
1197
+ "total_params_b": 30.0,
1198
+ "quality_rank": 1,
1199
+ "cost_rank": 8,
1200
+ "sovereignty_tier": 3,
1201
+ "supports_tools": true,
1202
+ "supports_json": true,
1203
+ "tags": [
1204
+ "coder",
1205
+ "gguf",
1206
+ "lumynax",
1207
+ "qwen",
1208
+ "text"
1209
+ ],
1210
+ "metadata": {
1211
+ "hub_sha": "243f8578284934be06d3cb3d055de1b4a28059cc",
1212
+ "package_state": "prebuilt_gguf_release",
1213
+ "public_status": "public and non-gated",
1214
+ "validation_status": "pass",
1215
+ "total_weight_size": 18556689568
1216
+ }
1217
+ },
1218
+ {
1219
+ "model_id": "lumynax-infused-qwen3-text-gguf",
1220
+ "repo_id": "AbteeXAILab/lumynax-infused-qwen3-text-gguf",
1221
+ "title": "LumynaX Infused Qwen3 Text GGUF",
1222
+ "family": "qwen",
1223
+ "runtime": "llama_cpp",
1224
+ "modalities": [
1225
+ "text"
1226
+ ],
1227
+ "context_tokens": 32768,
1228
+ "jurisdiction": "NZ",
1229
+ "residency": [
1230
+ "NZ"
1231
+ ],
1232
+ "license_id": "see_model_card",
1233
+ "quantization": "see_release_manifest",
1234
+ "primary_artifact": "lumynax-infused-qwen3-text-gguf-f16.gguf",
1235
+ "active_params_b": null,
1236
+ "total_params_b": null,
1237
+ "quality_rank": 3,
1238
+ "cost_rank": 10,
1239
+ "sovereignty_tier": 3,
1240
+ "supports_tools": false,
1241
+ "supports_json": true,
1242
+ "tags": [
1243
+ "general",
1244
+ "gguf",
1245
+ "lumynax",
1246
+ "qwen",
1247
+ "text"
1248
+ ],
1249
+ "metadata": {
1250
+ "hub_sha": "405002e7153a01f4fcc96d610f6af761de8c0574",
1251
+ "package_state": "base_weights_hydrated_text_gguf",
1252
+ "public_status": "public and non-gated",
1253
+ "validation_status": "pass",
1254
+ "total_weight_size": 37797343976
1255
+ }
1256
+ },
1257
+ {
1258
+ "model_id": "lumynax-infused-smollm-135m-gguf",
1259
+ "repo_id": "AbteeXAILab/lumynax-infused-smollm-135m-gguf",
1260
+ "title": "LumynaX Infused SmolLM 135M Instruct GGUF",
1261
+ "family": "smollm",
1262
+ "runtime": "llama_cpp",
1263
+ "modalities": [
1264
+ "text"
1265
+ ],
1266
+ "context_tokens": 8192,
1267
+ "jurisdiction": "NZ",
1268
+ "residency": [
1269
+ "NZ"
1270
+ ],
1271
+ "license_id": "see_model_card",
1272
+ "quantization": "see_release_manifest",
1273
+ "primary_artifact": "SmolLM-135M-Instruct.Q4_K_M.gguf",
1274
+ "active_params_b": null,
1275
+ "total_params_b": null,
1276
+ "quality_rank": 5,
1277
+ "cost_rank": 2,
1278
+ "sovereignty_tier": 3,
1279
+ "supports_tools": false,
1280
+ "supports_json": true,
1281
+ "tags": [
1282
+ "general",
1283
+ "gguf",
1284
+ "lumynax",
1285
+ "smollm",
1286
+ "text"
1287
+ ],
1288
+ "metadata": {
1289
+ "hub_sha": "192518901ec475229151f3ce654a866a47a2a6f3",
1290
+ "package_state": "prebuilt_gguf_release",
1291
+ "public_status": "public and non-gated",
1292
+ "validation_status": "pass",
1293
+ "total_weight_size": 105454208
1294
+ }
1295
+ },
1296
+ {
1297
+ "model_id": "lumynax-infused-smollm2-17b-gguf",
1298
+ "repo_id": "AbteeXAILab/lumynax-infused-smollm2-17b-gguf",
1299
+ "title": "LumynaX Infused SmolLM2 1.7B Instruct GGUF",
1300
+ "family": "smollm",
1301
+ "runtime": "llama_cpp",
1302
+ "modalities": [
1303
+ "text"
1304
+ ],
1305
+ "context_tokens": 8192,
1306
+ "jurisdiction": "NZ",
1307
+ "residency": [
1308
+ "NZ"
1309
+ ],
1310
+ "license_id": "see_model_card",
1311
+ "quantization": "see_release_manifest",
1312
+ "primary_artifact": "smollm2-1.7b-instruct-q4_k_m.gguf",
1313
+ "active_params_b": null,
1314
+ "total_params_b": 1.7,
1315
+ "quality_rank": 5,
1316
+ "cost_rank": 4,
1317
+ "sovereignty_tier": 3,
1318
+ "supports_tools": false,
1319
+ "supports_json": true,
1320
+ "tags": [
1321
+ "general",
1322
+ "gguf",
1323
+ "lumynax",
1324
+ "smollm",
1325
+ "text"
1326
+ ],
1327
+ "metadata": {
1328
+ "hub_sha": "b71d0ad33a3e8f2f1582ceba7520e086a665bf46",
1329
+ "package_state": "prebuilt_gguf_release",
1330
+ "public_status": "public and non-gated",
1331
+ "validation_status": "pass",
1332
+ "total_weight_size": 1055609536
1333
+ }
1334
+ },
1335
+ {
1336
+ "model_id": "lumynax-infused-smollm2-360m-gguf",
1337
+ "repo_id": "AbteeXAILab/lumynax-infused-smollm2-360m-gguf",
1338
+ "title": "LumynaX Infused SmolLM2 360M Instruct GGUF",
1339
+ "family": "smollm",
1340
+ "runtime": "llama_cpp",
1341
+ "modalities": [
1342
+ "text"
1343
+ ],
1344
+ "context_tokens": 8192,
1345
+ "jurisdiction": "NZ",
1346
+ "residency": [
1347
+ "NZ"
1348
+ ],
1349
+ "license_id": "see_model_card",
1350
+ "quantization": "see_release_manifest",
1351
+ "primary_artifact": "smollm2-360m-instruct-q8_0.gguf",
1352
+ "active_params_b": null,
1353
+ "total_params_b": null,
1354
+ "quality_rank": 5,
1355
+ "cost_rank": 2,
1356
+ "sovereignty_tier": 3,
1357
+ "supports_tools": false,
1358
+ "supports_json": true,
1359
+ "tags": [
1360
+ "general",
1361
+ "gguf",
1362
+ "lumynax",
1363
+ "smollm",
1364
+ "text"
1365
+ ],
1366
+ "metadata": {
1367
+ "hub_sha": "a808313b05ac18b70e2b4de03a0ddb238d545c74",
1368
+ "package_state": "prebuilt_gguf_release",
1369
+ "public_status": "public and non-gated",
1370
+ "validation_status": "pass",
1371
+ "total_weight_size": 386404992
1372
+ }
1373
+ },
1374
+ {
1375
+ "model_id": "lumynax-infused-smollm3-3b-gguf",
1376
+ "repo_id": "AbteeXAILab/lumynax-infused-smollm3-3b-gguf",
1377
+ "title": "LumynaX Infused SmolLM3 3B GGUF",
1378
+ "family": "smollm",
1379
+ "runtime": "llama_cpp",
1380
+ "modalities": [
1381
+ "text"
1382
+ ],
1383
+ "context_tokens": 8192,
1384
+ "jurisdiction": "NZ",
1385
+ "residency": [
1386
+ "NZ"
1387
+ ],
1388
+ "license_id": "see_model_card",
1389
+ "quantization": "see_release_manifest",
1390
+ "primary_artifact": "SmolLM3-Q4_K_M.gguf",
1391
+ "active_params_b": null,
1392
+ "total_params_b": 3.0,
1393
+ "quality_rank": 4,
1394
+ "cost_rank": 4,
1395
+ "sovereignty_tier": 3,
1396
+ "supports_tools": false,
1397
+ "supports_json": true,
1398
+ "tags": [
1399
+ "general",
1400
+ "gguf",
1401
+ "lumynax",
1402
+ "smollm",
1403
+ "text"
1404
+ ],
1405
+ "metadata": {
1406
+ "hub_sha": "3cbfc3ed26da900885f8135bfcbd4331a6c5b5b9",
1407
+ "package_state": "prebuilt_gguf_release",
1408
+ "public_status": "public and non-gated",
1409
+ "validation_status": "pass",
1410
+ "total_weight_size": 1915305312
1411
+ }
1412
+ },
1413
+ {
1414
+ "model_id": "lumynax-infused-zephyr-7b-beta-gguf",
1415
+ "repo_id": "AbteeXAILab/lumynax-infused-zephyr-7b-beta-gguf",
1416
+ "title": "LumynaX Infused Zephyr 7B Beta GGUF",
1417
+ "family": "lumynax",
1418
+ "runtime": "llama_cpp",
1419
+ "modalities": [
1420
+ "text"
1421
+ ],
1422
+ "context_tokens": 8192,
1423
+ "jurisdiction": "NZ",
1424
+ "residency": [
1425
+ "NZ"
1426
+ ],
1427
+ "license_id": "see_model_card",
1428
+ "quantization": "see_release_manifest",
1429
+ "primary_artifact": "zephyr-7b-beta.Q4_K_M.gguf",
1430
+ "active_params_b": null,
1431
+ "total_params_b": 7.0,
1432
+ "quality_rank": 3,
1433
+ "cost_rank": 6,
1434
+ "sovereignty_tier": 3,
1435
+ "supports_tools": false,
1436
+ "supports_json": true,
1437
+ "tags": [
1438
+ "general",
1439
+ "gguf",
1440
+ "lumynax",
1441
+ "text"
1442
+ ],
1443
+ "metadata": {
1444
+ "hub_sha": "790aa3f7411fbd5b6ae8af3eedbefaf5c23c5a60",
1445
+ "package_state": "prebuilt_gguf_release",
1446
+ "public_status": "public and non-gated",
1447
+ "validation_status": "pass",
1448
+ "total_weight_size": 4368438976
1449
+ }
1450
+ },
1451
+ {
1452
+ "model_id": "lumynax-moe-moonlight-16b-a3b-gguf",
1453
+ "repo_id": "AbteeXAILab/lumynax-moe-moonlight-16b-a3b-gguf",
1454
+ "title": "LumynaX MoE Moonlight 16B A3B GGUF",
1455
+ "family": "lumynax",
1456
+ "runtime": "llama_cpp",
1457
+ "modalities": [
1458
+ "text"
1459
+ ],
1460
+ "context_tokens": 8192,
1461
+ "jurisdiction": "NZ",
1462
+ "residency": [
1463
+ "NZ"
1464
+ ],
1465
+ "license_id": "see_model_card",
1466
+ "quantization": "see_release_manifest",
1467
+ "primary_artifact": "lumynax-moe-moonlight-16b-a3b-iq4_xs.gguf",
1468
+ "active_params_b": 3.0,
1469
+ "total_params_b": 16.0,
1470
+ "quality_rank": 3,
1471
+ "cost_rank": 6,
1472
+ "sovereignty_tier": 3,
1473
+ "supports_tools": false,
1474
+ "supports_json": true,
1475
+ "tags": [
1476
+ "general",
1477
+ "gguf",
1478
+ "lumynax",
1479
+ "moe",
1480
+ "text"
1481
+ ],
1482
+ "metadata": {
1483
+ "hub_sha": "88926e39e3730c2d2bfe00088404fce8217c1c74",
1484
+ "package_state": "prebuilt_gguf_release",
1485
+ "public_status": "public and non-gated",
1486
+ "validation_status": "pass",
1487
+ "total_weight_size": 8744947840
1488
+ }
1489
+ },
1490
+ {
1491
+ "model_id": "lumynax-moe-olmoe-1b-7b-gguf",
1492
+ "repo_id": "AbteeXAILab/lumynax-moe-olmoe-1b-7b-gguf",
1493
+ "title": "LumynaX MoE OLMoE 1B-7B Instruct GGUF",
1494
+ "family": "olmo",
1495
+ "runtime": "llama_cpp",
1496
+ "modalities": [
1497
+ "text"
1498
+ ],
1499
+ "context_tokens": 8192,
1500
+ "jurisdiction": "NZ",
1501
+ "residency": [
1502
+ "NZ"
1503
+ ],
1504
+ "license_id": "see_model_card",
1505
+ "quantization": "see_release_manifest",
1506
+ "primary_artifact": "olmoe-1b-7b-0924-instruct-q4_k_m.gguf",
1507
+ "active_params_b": null,
1508
+ "total_params_b": 1.0,
1509
+ "quality_rank": 3,
1510
+ "cost_rank": 6,
1511
+ "sovereignty_tier": 3,
1512
+ "supports_tools": false,
1513
+ "supports_json": true,
1514
+ "tags": [
1515
+ "general",
1516
+ "gguf",
1517
+ "lumynax",
1518
+ "moe",
1519
+ "text"
1520
+ ],
1521
+ "metadata": {
1522
+ "hub_sha": "4515dabcc14be52616348757c7195a8bb2e490f8",
1523
+ "package_state": "prebuilt_gguf_release",
1524
+ "public_status": "public and non-gated",
1525
+ "validation_status": "pass",
1526
+ "total_weight_size": 4213512672
1527
+ }
1528
+ },
1529
+ {
1530
+ "model_id": "lumynax-multimodal-glm46v-flash",
1531
+ "repo_id": "AbteeXAILab/lumynax-multimodal-glm46v-flash",
1532
+ "title": "LumynaX Multimodal GLM 4.6V Flash",
1533
+ "family": "lumynax",
1534
+ "runtime": "llama_cpp_multimodal",
1535
+ "modalities": [
1536
+ "text",
1537
+ "image"
1538
+ ],
1539
+ "context_tokens": 4096,
1540
+ "jurisdiction": "NZ",
1541
+ "residency": [
1542
+ "NZ"
1543
+ ],
1544
+ "license_id": "see_model_card",
1545
+ "quantization": "see_release_manifest",
1546
+ "primary_artifact": "lumynax-multimodal-glm46v-flash-ud-iq2_m.gguf",
1547
+ "active_params_b": null,
1548
+ "total_params_b": null,
1549
+ "quality_rank": 3,
1550
+ "cost_rank": 6,
1551
+ "sovereignty_tier": 2,
1552
+ "supports_tools": false,
1553
+ "supports_json": true,
1554
+ "tags": [
1555
+ "image",
1556
+ "lumynax",
1557
+ "multimodal",
1558
+ "text"
1559
+ ],
1560
+ "metadata": {
1561
+ "hub_sha": "3f0a751fedde7cd6a3b8a083b7bdf128c8ca3ccd",
1562
+ "package_state": "prebuilt_gguf_release",
1563
+ "public_status": "public and non-gated",
1564
+ "validation_status": "pass",
1565
+ "total_weight_size": 5778988768
1566
+ }
1567
+ },
1568
+ {
1569
+ "model_id": "lumynax-multimodal-kimi-vl-a3b-thinking",
1570
+ "repo_id": "AbteeXAILab/lumynax-multimodal-kimi-vl-a3b-thinking",
1571
+ "title": "LumynaX Multimodal Kimi VL A3B Thinking",
1572
+ "family": "kimi",
1573
+ "runtime": "llama_cpp_multimodal",
1574
+ "modalities": [
1575
+ "text",
1576
+ "image"
1577
+ ],
1578
+ "context_tokens": 4096,
1579
+ "jurisdiction": "NZ",
1580
+ "residency": [
1581
+ "NZ"
1582
+ ],
1583
+ "license_id": "see_model_card",
1584
+ "quantization": "see_release_manifest",
1585
+ "primary_artifact": "lumynax-multimodal-kimi-vl-a3b-thinking-q4_k_m.gguf",
1586
+ "active_params_b": 3.0,
1587
+ "total_params_b": 3.0,
1588
+ "quality_rank": 3,
1589
+ "cost_rank": 8,
1590
+ "sovereignty_tier": 2,
1591
+ "supports_tools": false,
1592
+ "supports_json": true,
1593
+ "tags": [
1594
+ "image",
1595
+ "kimi",
1596
+ "lumynax",
1597
+ "multimodal",
1598
+ "text"
1599
+ ],
1600
+ "metadata": {
1601
+ "hub_sha": "460182aeb56feb94262a59e274be38f3b9638188",
1602
+ "package_state": "prebuilt_gguf_release",
1603
+ "public_status": "public and non-gated",
1604
+ "validation_status": "pass",
1605
+ "total_weight_size": 11158846304
1606
+ }
1607
+ },
1608
+ {
1609
+ "model_id": "lumynax-nz-3b",
1610
+ "repo_id": "AbteeXAILab/lumynax-nz-3b",
1611
+ "title": "LumynaX NZ 3B V1",
1612
+ "family": "lumynax",
1613
+ "runtime": "transformers",
1614
+ "modalities": [
1615
+ "text"
1616
+ ],
1617
+ "context_tokens": 4096,
1618
+ "jurisdiction": "NZ",
1619
+ "residency": [
1620
+ "NZ"
1621
+ ],
1622
+ "license_id": "see_model_card",
1623
+ "quantization": "see_release_manifest",
1624
+ "primary_artifact": "merged_model/model-00001-of-00055.safetensors",
1625
+ "active_params_b": null,
1626
+ "total_params_b": 3.0,
1627
+ "quality_rank": 3,
1628
+ "cost_rank": 8,
1629
+ "sovereignty_tier": 2,
1630
+ "supports_tools": false,
1631
+ "supports_json": true,
1632
+ "tags": [
1633
+ "general",
1634
+ "lumynax",
1635
+ "text"
1636
+ ],
1637
+ "metadata": {
1638
+ "hub_sha": "190ba7e1a81e9e980a8cf44d4a9d53dedca6322c",
1639
+ "package_state": "standalone_dense_model",
1640
+ "public_status": "public and non-gated",
1641
+ "validation_status": "pass",
1642
+ "total_weight_size": 12343804840
1643
+ }
1644
+ },
1645
+ {
1646
+ "model_id": "lumynax-nz-qwen25-coder-3b-gguf",
1647
+ "repo_id": "AbteeXAILab/lumynax-nz-qwen25-coder-3b-gguf",
1648
+ "title": "LumynaX NZ Qwen2.5 Coder 3B GGUF",
1649
+ "family": "qwen",
1650
+ "runtime": "llama_cpp",
1651
+ "modalities": [
1652
+ "text"
1653
+ ],
1654
+ "context_tokens": 32768,
1655
+ "jurisdiction": "NZ",
1656
+ "residency": [
1657
+ "NZ"
1658
+ ],
1659
+ "license_id": "see_model_card",
1660
+ "quantization": "see_release_manifest",
1661
+ "primary_artifact": "lumynax-nz-qwen25-coder-3b-q4_k_m.gguf",
1662
+ "active_params_b": null,
1663
+ "total_params_b": 3.0,
1664
+ "quality_rank": 4,
1665
+ "cost_rank": 4,
1666
+ "sovereignty_tier": 3,
1667
+ "supports_tools": true,
1668
+ "supports_json": true,
1669
+ "tags": [
1670
+ "coder",
1671
+ "gguf",
1672
+ "lumynax",
1673
+ "qwen",
1674
+ "text"
1675
+ ],
1676
+ "metadata": {
1677
+ "hub_sha": "b6603695131d11f937f8bd06b77985f1affd8398",
1678
+ "package_state": "prebuilt_gguf_release",
1679
+ "public_status": "public and non-gated",
1680
+ "validation_status": "pass",
1681
+ "total_weight_size": 2104932800
1682
+ }
1683
+ },
1684
+ {
1685
+ "model_id": "lumynax-reasoning-deepseek-distill-text-gguf",
1686
+ "repo_id": "AbteeXAILab/lumynax-reasoning-deepseek-distill-text-gguf",
1687
+ "title": "LumynaX Reasoning DeepSeek Distill Text GGUF",
1688
+ "family": "deepseek",
1689
+ "runtime": "llama_cpp",
1690
+ "modalities": [
1691
+ "text"
1692
+ ],
1693
+ "context_tokens": 8192,
1694
+ "jurisdiction": "NZ",
1695
+ "residency": [
1696
+ "NZ"
1697
+ ],
1698
+ "license_id": "see_model_card",
1699
+ "quantization": "see_release_manifest",
1700
+ "primary_artifact": "lumynax-reasoning-deepseek-distill-text-gguf-f16.gguf",
1701
+ "active_params_b": null,
1702
+ "total_params_b": null,
1703
+ "quality_rank": 2,
1704
+ "cost_rank": 10,
1705
+ "sovereignty_tier": 3,
1706
+ "supports_tools": true,
1707
+ "supports_json": true,
1708
+ "tags": [
1709
+ "deepseek",
1710
+ "gguf",
1711
+ "lumynax",
1712
+ "reasoning",
1713
+ "text"
1714
+ ],
1715
+ "metadata": {
1716
+ "hub_sha": "ff5915ca508ffd3b6d12121a2682f8d5ff8cb7be",
1717
+ "package_state": "base_weights_hydrated_text_gguf",
1718
+ "public_status": "public and non-gated",
1719
+ "validation_status": "pass",
1720
+ "total_weight_size": 38535825664
1721
+ }
1722
+ },
1723
+ {
1724
+ "model_id": "lumynax-reasoning-deepseek-r1-qwen-15b-gguf",
1725
+ "repo_id": "AbteeXAILab/lumynax-reasoning-deepseek-r1-qwen-15b-gguf",
1726
+ "title": "LumynaX Reasoning DeepSeek R1 Distill Qwen 1.5B GGUF",
1727
+ "family": "qwen",
1728
+ "runtime": "llama_cpp",
1729
+ "modalities": [
1730
+ "text"
1731
+ ],
1732
+ "context_tokens": 8192,
1733
+ "jurisdiction": "NZ",
1734
+ "residency": [
1735
+ "NZ"
1736
+ ],
1737
+ "license_id": "see_model_card",
1738
+ "quantization": "see_release_manifest",
1739
+ "primary_artifact": "DeepSeek-R1-Distill-Qwen-1.5B-Q4_K_M.gguf",
1740
+ "active_params_b": null,
1741
+ "total_params_b": 1.5,
1742
+ "quality_rank": 5,
1743
+ "cost_rank": 4,
1744
+ "sovereignty_tier": 3,
1745
+ "supports_tools": true,
1746
+ "supports_json": true,
1747
+ "tags": [
1748
+ "deepseek",
1749
+ "gguf",
1750
+ "lumynax",
1751
+ "qwen",
1752
+ "reasoning",
1753
+ "text"
1754
+ ],
1755
+ "metadata": {
1756
+ "hub_sha": "cb2a747d711fb83c6197855046e59c56828dbbaa",
1757
+ "package_state": "prebuilt_gguf_release",
1758
+ "public_status": "public and non-gated",
1759
+ "validation_status": "pass",
1760
+ "total_weight_size": 1117321312
1761
+ }
1762
+ },
1763
+ {
1764
+ "model_id": "lumynax-reasoning-deepseek-r1-qwen-7b-gguf",
1765
+ "repo_id": "AbteeXAILab/lumynax-reasoning-deepseek-r1-qwen-7b-gguf",
1766
+ "title": "LumynaX Reasoning DeepSeek R1 Distill Qwen 7B GGUF",
1767
+ "family": "qwen",
1768
+ "runtime": "llama_cpp",
1769
+ "modalities": [
1770
+ "text"
1771
+ ],
1772
+ "context_tokens": 8192,
1773
+ "jurisdiction": "NZ",
1774
+ "residency": [
1775
+ "NZ"
1776
+ ],
1777
+ "license_id": "see_model_card",
1778
+ "quantization": "see_release_manifest",
1779
+ "primary_artifact": "DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf",
1780
+ "active_params_b": null,
1781
+ "total_params_b": 7.0,
1782
+ "quality_rank": 3,
1783
+ "cost_rank": 6,
1784
+ "sovereignty_tier": 3,
1785
+ "supports_tools": true,
1786
+ "supports_json": true,
1787
+ "tags": [
1788
+ "deepseek",
1789
+ "gguf",
1790
+ "lumynax",
1791
+ "qwen",
1792
+ "reasoning",
1793
+ "text"
1794
+ ],
1795
+ "metadata": {
1796
+ "hub_sha": "02dbc4451a0a26e9760f740418cf4b9796ef2aa4",
1797
+ "package_state": "prebuilt_gguf_release",
1798
+ "public_status": "public and non-gated",
1799
+ "validation_status": "pass",
1800
+ "total_weight_size": 4683073248
1801
+ }
1802
+ },
1803
+ {
1804
+ "model_id": "lumynax-reasoning-gpt-oss-20b-gguf",
1805
+ "repo_id": "AbteeXAILab/lumynax-reasoning-gpt-oss-20b-gguf",
1806
+ "title": "LumynaX Reasoning GPT-OSS 20B GGUF",
1807
+ "family": "lumynax",
1808
+ "runtime": "llama_cpp",
1809
+ "modalities": [
1810
+ "text"
1811
+ ],
1812
+ "context_tokens": 8192,
1813
+ "jurisdiction": "NZ",
1814
+ "residency": [
1815
+ "NZ"
1816
+ ],
1817
+ "license_id": "see_model_card",
1818
+ "quantization": "see_release_manifest",
1819
+ "primary_artifact": "lumynax-reasoning-gpt-oss-20b-mxfp4.gguf",
1820
+ "active_params_b": null,
1821
+ "total_params_b": 20.0,
1822
+ "quality_rank": 1,
1823
+ "cost_rank": 8,
1824
+ "sovereignty_tier": 3,
1825
+ "supports_tools": true,
1826
+ "supports_json": true,
1827
+ "tags": [
1828
+ "gguf",
1829
+ "lumynax",
1830
+ "reasoning",
1831
+ "text"
1832
+ ],
1833
+ "metadata": {
1834
+ "hub_sha": "3f07992371177a312240df950d91ae1b2ff57714",
1835
+ "package_state": "prebuilt_gguf_release",
1836
+ "public_status": "public and non-gated",
1837
+ "validation_status": "pass",
1838
+ "total_weight_size": 12109566560
1839
+ }
1840
+ },
1841
+ {
1842
+ "model_id": "lumynax-reasoning-phi4-mini-gguf",
1843
+ "repo_id": "AbteeXAILab/lumynax-reasoning-phi4-mini-gguf",
1844
+ "title": "LumynaX Reasoning Phi-4 Mini GGUF",
1845
+ "family": "phi",
1846
+ "runtime": "llama_cpp",
1847
+ "modalities": [
1848
+ "text"
1849
+ ],
1850
+ "context_tokens": 8192,
1851
+ "jurisdiction": "NZ",
1852
+ "residency": [
1853
+ "NZ"
1854
+ ],
1855
+ "license_id": "see_model_card",
1856
+ "quantization": "see_release_manifest",
1857
+ "primary_artifact": "Phi-4-mini-reasoning-Q4_K_M.gguf",
1858
+ "active_params_b": null,
1859
+ "total_params_b": null,
1860
+ "quality_rank": 2,
1861
+ "cost_rank": 4,
1862
+ "sovereignty_tier": 3,
1863
+ "supports_tools": true,
1864
+ "supports_json": true,
1865
+ "tags": [
1866
+ "gguf",
1867
+ "lumynax",
1868
+ "phi",
1869
+ "reasoning",
1870
+ "text"
1871
+ ],
1872
+ "metadata": {
1873
+ "hub_sha": "ef04425cd19f96de197b2418a16aca6e5c868f45",
1874
+ "package_state": "prebuilt_gguf_release",
1875
+ "public_status": "public and non-gated",
1876
+ "validation_status": "pass",
1877
+ "total_weight_size": 2491875232
1878
+ }
1879
+ },
1880
+ {
1881
+ "model_id": "lumynax-tiny",
1882
+ "repo_id": "AbteeXAILab/lumynax-tiny",
1883
+ "title": "LumynaX Tiny Seed V1",
1884
+ "family": "lumynax",
1885
+ "runtime": "transformers",
1886
+ "modalities": [
1887
+ "text"
1888
+ ],
1889
+ "context_tokens": 4096,
1890
+ "jurisdiction": "NZ",
1891
+ "residency": [
1892
+ "NZ"
1893
+ ],
1894
+ "license_id": "see_model_card",
1895
+ "quantization": "see_release_manifest",
1896
+ "primary_artifact": "merged_model/model.safetensors",
1897
+ "active_params_b": null,
1898
+ "total_params_b": null,
1899
+ "quality_rank": 5,
1900
+ "cost_rank": 2,
1901
+ "sovereignty_tier": 2,
1902
+ "supports_tools": false,
1903
+ "supports_json": true,
1904
+ "tags": [
1905
+ "general",
1906
+ "lumynax",
1907
+ "text"
1908
+ ],
1909
+ "metadata": {
1910
+ "hub_sha": "c4ccf84ef0b646fbc61c83f24117aaea95225dd6",
1911
+ "package_state": "standalone_dense_model",
1912
+ "public_status": "public and non-gated",
1913
+ "validation_status": "pass",
1914
+ "total_weight_size": 4292528
1915
+ }
1916
+ },
1917
+ {
1918
+ "model_id": "lumynax-tiny-qwen25-05b-gguf",
1919
+ "repo_id": "AbteeXAILab/lumynax-tiny-qwen25-05b-gguf",
1920
+ "title": "LumynaX Tiny Qwen2.5 0.5B GGUF",
1921
+ "family": "qwen",
1922
+ "runtime": "llama_cpp",
1923
+ "modalities": [
1924
+ "text"
1925
+ ],
1926
+ "context_tokens": 32768,
1927
+ "jurisdiction": "NZ",
1928
+ "residency": [
1929
+ "NZ"
1930
+ ],
1931
+ "license_id": "see_model_card",
1932
+ "quantization": "see_release_manifest",
1933
+ "primary_artifact": "lumynax-tiny-qwen25-05b-q4_k_m.gguf",
1934
+ "active_params_b": null,
1935
+ "total_params_b": 0.5,
1936
+ "quality_rank": 5,
1937
+ "cost_rank": 2,
1938
+ "sovereignty_tier": 3,
1939
+ "supports_tools": false,
1940
+ "supports_json": true,
1941
+ "tags": [
1942
+ "general",
1943
+ "gguf",
1944
+ "lumynax",
1945
+ "qwen",
1946
+ "text"
1947
+ ],
1948
+ "metadata": {
1949
+ "hub_sha": "01266863890302b1d1f42bddfda1ff7146386359",
1950
+ "package_state": "prebuilt_gguf_release",
1951
+ "public_status": "public and non-gated",
1952
+ "validation_status": "pass",
1953
+ "total_weight_size": 491400032
1954
+ }
1955
+ },
1956
+ {
1957
+ "model_id": "lumynax-frontier-qwen3-235b-a22b-instruct",
1958
+ "repo_id": "AbteeXAILab/lumynax-frontier-qwen3-235b-a22b-instruct",
1959
+ "title": "LumynaX Frontier Qwen3 235B A22B Instruct",
1960
+ "family": "qwen",
1961
+ "runtime": "transformers",
1962
+ "modalities": [
1963
+ "text"
1964
+ ],
1965
+ "context_tokens": 262144,
1966
+ "jurisdiction": "NZ",
1967
+ "residency": [
1968
+ "NZ",
1969
+ "AU",
1970
+ "global"
1971
+ ],
1972
+ "license_id": "apache-2.0",
1973
+ "quantization": "bf16 / fp8 / Q4_K_M (community GGUF)",
1974
+ "primary_artifact": "model.safetensors (sharded)",
1975
+ "active_params_b": 22,
1976
+ "total_params_b": 235,
1977
+ "quality_rank": 1,
1978
+ "cost_rank": 5,
1979
+ "sovereignty_tier": 2,
1980
+ "supports_tools": true,
1981
+ "supports_json": true,
1982
+ "tags": [
1983
+ "frontier",
1984
+ "moe",
1985
+ "reasoning",
1986
+ "qwen3",
1987
+ "tools",
1988
+ "json",
1989
+ "long-context"
1990
+ ],
1991
+ "metadata": {
1992
+ "upstream_repo": "Qwen/Qwen3-235B-A22B-Instruct-2507",
1993
+ "release_version": "v0.1.0",
1994
+ "package_state": "scaffold_pulls_upstream",
1995
+ "public_status": "public and non-gated",
1996
+ "validation_status": "scaffold_verified"
1997
+ }
1998
+ },
1999
+ {
2000
+ "model_id": "lumynax-frontier-minimax-m2-230b",
2001
+ "repo_id": "AbteeXAILab/lumynax-frontier-minimax-m2-230b",
2002
+ "title": "LumynaX Frontier MiniMax M2 230B Agentic",
2003
+ "family": "minimax",
2004
+ "runtime": "transformers",
2005
+ "modalities": [
2006
+ "text"
2007
+ ],
2008
+ "context_tokens": 204800,
2009
+ "jurisdiction": "NZ",
2010
+ "residency": [
2011
+ "NZ",
2012
+ "AU",
2013
+ "global"
2014
+ ],
2015
+ "license_id": "other",
2016
+ "quantization": "bf16 / Q4_K_M (community GGUF)",
2017
+ "primary_artifact": "model.safetensors (sharded)",
2018
+ "active_params_b": 10,
2019
+ "total_params_b": 230,
2020
+ "quality_rank": 1,
2021
+ "cost_rank": 5,
2022
+ "sovereignty_tier": 2,
2023
+ "supports_tools": true,
2024
+ "supports_json": true,
2025
+ "tags": [
2026
+ "frontier",
2027
+ "moe",
2028
+ "agentic",
2029
+ "minimax",
2030
+ "tools",
2031
+ "json"
2032
+ ],
2033
+ "metadata": {
2034
+ "upstream_repo": "MiniMaxAI/MiniMax-M2",
2035
+ "release_version": "v0.1.0",
2036
+ "package_state": "scaffold_pulls_upstream",
2037
+ "public_status": "public and non-gated",
2038
+ "validation_status": "scaffold_verified"
2039
+ }
2040
+ },
2041
+ {
2042
+ "model_id": "lumynax-frontier-mixtral-8x22b-instruct-gguf",
2043
+ "repo_id": "AbteeXAILab/lumynax-frontier-mixtral-8x22b-instruct-gguf",
2044
+ "title": "LumynaX Frontier Mixtral 8x22B Instruct GGUF",
2045
+ "family": "mistral",
2046
+ "runtime": "llama_cpp",
2047
+ "modalities": [
2048
+ "text"
2049
+ ],
2050
+ "context_tokens": 65536,
2051
+ "jurisdiction": "NZ",
2052
+ "residency": [
2053
+ "NZ"
2054
+ ],
2055
+ "license_id": "apache-2.0",
2056
+ "quantization": "Q4_K_M (default) \u00b7 Q5_K_M \u00b7 Q8_0",
2057
+ "primary_artifact": "Mixtral-8x22B-Instruct-v0.1.Q4_K_M.gguf",
2058
+ "active_params_b": 39,
2059
+ "total_params_b": 141,
2060
+ "quality_rank": 2,
2061
+ "cost_rank": 4,
2062
+ "sovereignty_tier": 3,
2063
+ "supports_tools": true,
2064
+ "supports_json": true,
2065
+ "tags": [
2066
+ "frontier",
2067
+ "moe",
2068
+ "mixtral",
2069
+ "gguf",
2070
+ "llama-cpp",
2071
+ "tools"
2072
+ ],
2073
+ "metadata": {
2074
+ "upstream_repo": "mistralai/Mixtral-8x22B-Instruct-v0.1",
2075
+ "release_version": "v0.1.0",
2076
+ "package_state": "scaffold_pulls_upstream_gguf",
2077
+ "public_status": "public and non-gated",
2078
+ "validation_status": "scaffold_verified"
2079
+ }
2080
+ },
2081
+ {
2082
+ "model_id": "lumynax-frontier-dbrx-instruct-132b-gguf",
2083
+ "repo_id": "AbteeXAILab/lumynax-frontier-dbrx-instruct-132b-gguf",
2084
+ "title": "LumynaX Frontier DBRX Instruct 132B GGUF",
2085
+ "family": "dbrx",
2086
+ "runtime": "llama_cpp",
2087
+ "modalities": [
2088
+ "text"
2089
+ ],
2090
+ "context_tokens": 32768,
2091
+ "jurisdiction": "NZ",
2092
+ "residency": [
2093
+ "NZ"
2094
+ ],
2095
+ "license_id": "other",
2096
+ "quantization": "Q4_K_M (default) \u00b7 Q5_K_M \u00b7 Q8_0",
2097
+ "primary_artifact": "dbrx-instruct.Q4_K_M.gguf",
2098
+ "active_params_b": 36,
2099
+ "total_params_b": 132,
2100
+ "quality_rank": 2,
2101
+ "cost_rank": 4,
2102
+ "sovereignty_tier": 3,
2103
+ "supports_tools": true,
2104
+ "supports_json": true,
2105
+ "tags": [
2106
+ "frontier",
2107
+ "moe",
2108
+ "dbrx",
2109
+ "databricks",
2110
+ "gguf",
2111
+ "llama-cpp"
2112
+ ],
2113
+ "metadata": {
2114
+ "upstream_repo": "databricks/dbrx-instruct",
2115
+ "release_version": "v0.1.0",
2116
+ "package_state": "scaffold_pulls_upstream_gguf",
2117
+ "public_status": "public and non-gated",
2118
+ "validation_status": "scaffold_verified"
2119
+ }
2120
+ },
2121
+ {
2122
+ "model_id": "lumynax-multimodal-qwen25-vl-72b-instruct-gguf",
2123
+ "repo_id": "AbteeXAILab/lumynax-multimodal-qwen25-vl-72b-instruct-gguf",
2124
+ "title": "LumynaX Multimodal Qwen2.5 VL 72B Instruct GGUF",
2125
+ "family": "qwen",
2126
+ "runtime": "llama_cpp_multimodal",
2127
+ "modalities": [
2128
+ "text",
2129
+ "vision"
2130
+ ],
2131
+ "context_tokens": 131072,
2132
+ "jurisdiction": "NZ",
2133
+ "residency": [
2134
+ "NZ"
2135
+ ],
2136
+ "license_id": "other",
2137
+ "quantization": "Q4_K_M (default) \u00b7 Q5_K_M \u00b7 Q8_0",
2138
+ "primary_artifact": "Qwen2.5-VL-72B-Instruct-Q4_K_M.gguf",
2139
+ "active_params_b": null,
2140
+ "total_params_b": 72,
2141
+ "quality_rank": 2,
2142
+ "cost_rank": 4,
2143
+ "sovereignty_tier": 3,
2144
+ "supports_tools": true,
2145
+ "supports_json": true,
2146
+ "tags": [
2147
+ "multimodal",
2148
+ "vision",
2149
+ "qwen",
2150
+ "gguf",
2151
+ "llama-cpp",
2152
+ "image-text-to-text"
2153
+ ],
2154
+ "metadata": {
2155
+ "upstream_repo": "Qwen/Qwen2.5-VL-72B-Instruct",
2156
+ "release_version": "v0.1.0",
2157
+ "package_state": "scaffold_pulls_upstream_gguf",
2158
+ "public_status": "public and non-gated",
2159
+ "validation_status": "scaffold_verified"
2160
+ }
2161
+ },
2162
+ {
2163
+ "model_id": "lumynax-multimodal-pixtral-large-124b",
2164
+ "repo_id": "AbteeXAILab/lumynax-multimodal-pixtral-large-124b",
2165
+ "title": "LumynaX Multimodal Pixtral Large 124B",
2166
+ "family": "mistral",
2167
+ "runtime": "transformers_multimodal",
2168
+ "modalities": [
2169
+ "text",
2170
+ "vision"
2171
+ ],
2172
+ "context_tokens": 131072,
2173
+ "jurisdiction": "NZ",
2174
+ "residency": [
2175
+ "NZ",
2176
+ "AU"
2177
+ ],
2178
+ "license_id": "other",
2179
+ "quantization": "bf16 / fp8",
2180
+ "primary_artifact": "model.safetensors (sharded)",
2181
+ "active_params_b": null,
2182
+ "total_params_b": 124,
2183
+ "quality_rank": 2,
2184
+ "cost_rank": 5,
2185
+ "sovereignty_tier": 2,
2186
+ "supports_tools": true,
2187
+ "supports_json": true,
2188
+ "tags": [
2189
+ "multimodal",
2190
+ "vision",
2191
+ "pixtral",
2192
+ "mistral",
2193
+ "image-text-to-text"
2194
+ ],
2195
+ "metadata": {
2196
+ "upstream_repo": "mistralai/Pixtral-Large-Instruct-2411",
2197
+ "release_version": "v0.1.0",
2198
+ "package_state": "scaffold_pulls_upstream",
2199
+ "public_status": "public (Mistral research licence \u2014 non-commercial use)",
2200
+ "validation_status": "scaffold_verified"
2201
+ }
2202
+ },
2203
+ {
2204
+ "model_id": "lumynax-reasoning-glm46-355b-moe",
2205
+ "repo_id": "AbteeXAILab/lumynax-reasoning-glm46-355b-moe",
2206
+ "title": "LumynaX Reasoning GLM-4.6 355B MoE",
2207
+ "family": "glm",
2208
+ "runtime": "transformers",
2209
+ "modalities": [
2210
+ "text"
2211
+ ],
2212
+ "context_tokens": 204800,
2213
+ "jurisdiction": "NZ",
2214
+ "residency": [
2215
+ "NZ",
2216
+ "AU",
2217
+ "global"
2218
+ ],
2219
+ "license_id": "mit",
2220
+ "quantization": "bf16 / fp8 / Q4_K_M (community)",
2221
+ "primary_artifact": "model.safetensors (sharded)",
2222
+ "active_params_b": 32,
2223
+ "total_params_b": 355,
2224
+ "quality_rank": 1,
2225
+ "cost_rank": 5,
2226
+ "sovereignty_tier": 2,
2227
+ "supports_tools": true,
2228
+ "supports_json": true,
2229
+ "tags": [
2230
+ "frontier",
2231
+ "reasoning",
2232
+ "moe",
2233
+ "glm",
2234
+ "tools",
2235
+ "long-context"
2236
+ ],
2237
+ "metadata": {
2238
+ "upstream_repo": "zai-org/GLM-4.6",
2239
+ "release_version": "v0.1.0",
2240
+ "package_state": "scaffold_pulls_upstream",
2241
+ "public_status": "public and non-gated",
2242
+ "validation_status": "scaffold_verified"
2243
+ }
2244
+ },
2245
+ {
2246
+ "model_id": "lumynax-multimodal-internvl3-78b-instruct",
2247
+ "repo_id": "AbteeXAILab/lumynax-multimodal-internvl3-78b-instruct",
2248
+ "title": "LumynaX Multimodal InternVL3 78B Instruct",
2249
+ "family": "internvl",
2250
+ "runtime": "transformers_multimodal",
2251
+ "modalities": [
2252
+ "text",
2253
+ "vision"
2254
+ ],
2255
+ "context_tokens": 32768,
2256
+ "jurisdiction": "NZ",
2257
+ "residency": [
2258
+ "NZ",
2259
+ "AU",
2260
+ "global"
2261
+ ],
2262
+ "license_id": "mit",
2263
+ "quantization": "bf16 (safetensors mirror) \u2014 community GGUF when available",
2264
+ "primary_artifact": "model.safetensors (33 shards)",
2265
+ "active_params_b": null,
2266
+ "total_params_b": 78,
2267
+ "quality_rank": 2,
2268
+ "cost_rank": 4,
2269
+ "sovereignty_tier": 2,
2270
+ "supports_tools": true,
2271
+ "supports_json": true,
2272
+ "tags": [
2273
+ "multimodal",
2274
+ "vision",
2275
+ "internvl",
2276
+ "opengvlab",
2277
+ "image-text-to-text"
2278
+ ],
2279
+ "metadata": {
2280
+ "upstream_repo": "OpenGVLab/InternVL3-78B-Instruct",
2281
+ "release_version": "v0.1.0",
2282
+ "package_state": "weights_mirrored_safetensors",
2283
+ "public_status": "public and non-gated",
2284
+ "validation_status": "scaffold_verified"
2285
+ }
2286
+ },
2287
+ {
2288
+ "model_id": "lumynax-speech-whisper-large-v3-turbo",
2289
+ "repo_id": "AbteeXAILab/lumynax-speech-whisper-large-v3-turbo",
2290
+ "title": "LumynaX Speech Whisper Large v3 Turbo",
2291
+ "family": "whisper",
2292
+ "runtime": "transformers",
2293
+ "modalities": [
2294
+ "audio"
2295
+ ],
2296
+ "context_tokens": 30,
2297
+ "jurisdiction": "NZ",
2298
+ "residency": [
2299
+ "NZ",
2300
+ "AU",
2301
+ "global"
2302
+ ],
2303
+ "license_id": "mit",
2304
+ "quantization": "fp16 safetensors",
2305
+ "primary_artifact": "model.safetensors",
2306
+ "active_params_b": null,
2307
+ "total_params_b": 0.8,
2308
+ "quality_rank": 1,
2309
+ "cost_rank": 2,
2310
+ "sovereignty_tier": 3,
2311
+ "supports_tools": false,
2312
+ "supports_json": false,
2313
+ "tags": [
2314
+ "asr",
2315
+ "speech",
2316
+ "whisper",
2317
+ "audio"
2318
+ ],
2319
+ "metadata": {
2320
+ "upstream_repo": "openai/whisper-large-v3-turbo",
2321
+ "release_version": "v0.1.0",
2322
+ "package_state": "weights_mirrored",
2323
+ "public_status": "public and non-gated",
2324
+ "validation_status": "scaffold_verified"
2325
+ }
2326
+ },
2327
+ {
2328
+ "model_id": "lumynax-speech-kokoro-82m-tts",
2329
+ "repo_id": "AbteeXAILab/lumynax-speech-kokoro-82m-tts",
2330
+ "title": "LumynaX Speech Kokoro 82M TTS",
2331
+ "family": "kokoro",
2332
+ "runtime": "transformers",
2333
+ "modalities": [
2334
+ "text",
2335
+ "audio"
2336
+ ],
2337
+ "context_tokens": 510,
2338
+ "jurisdiction": "NZ",
2339
+ "residency": [
2340
+ "NZ",
2341
+ "AU",
2342
+ "global"
2343
+ ],
2344
+ "license_id": "apache-2.0",
2345
+ "quantization": "fp32 (small)",
2346
+ "primary_artifact": "kokoro-v1_0.pth",
2347
+ "active_params_b": null,
2348
+ "total_params_b": 0.082,
2349
+ "quality_rank": 1,
2350
+ "cost_rank": 1,
2351
+ "sovereignty_tier": 3,
2352
+ "supports_tools": false,
2353
+ "supports_json": false,
2354
+ "tags": [
2355
+ "tts",
2356
+ "speech",
2357
+ "kokoro",
2358
+ "audio"
2359
+ ],
2360
+ "metadata": {
2361
+ "upstream_repo": "hexgrad/Kokoro-82M",
2362
+ "release_version": "v0.1.0",
2363
+ "package_state": "weights_mirrored",
2364
+ "public_status": "public and non-gated",
2365
+ "validation_status": "scaffold_verified"
2366
+ }
2367
+ },
2368
+ {
2369
+ "model_id": "lumynax-reranker-bge-v2-m3",
2370
+ "repo_id": "AbteeXAILab/lumynax-reranker-bge-v2-m3",
2371
+ "title": "LumynaX Reranker BGE v2 M3",
2372
+ "family": "bge",
2373
+ "runtime": "transformers",
2374
+ "modalities": [
2375
+ "text"
2376
+ ],
2377
+ "context_tokens": 8192,
2378
+ "jurisdiction": "NZ",
2379
+ "residency": [
2380
+ "NZ",
2381
+ "AU",
2382
+ "global"
2383
+ ],
2384
+ "license_id": "mit",
2385
+ "quantization": "fp32 safetensors",
2386
+ "primary_artifact": "model.safetensors",
2387
+ "active_params_b": null,
2388
+ "total_params_b": 0.568,
2389
+ "quality_rank": 1,
2390
+ "cost_rank": 1,
2391
+ "sovereignty_tier": 3,
2392
+ "supports_tools": false,
2393
+ "supports_json": true,
2394
+ "tags": [
2395
+ "reranker",
2396
+ "retrieval",
2397
+ "bge",
2398
+ "embedding-companion"
2399
+ ],
2400
+ "metadata": {
2401
+ "upstream_repo": "BAAI/bge-reranker-v2-m3",
2402
+ "release_version": "v0.1.0",
2403
+ "package_state": "weights_mirrored",
2404
+ "public_status": "public and non-gated",
2405
+ "validation_status": "scaffold_verified"
2406
+ }
2407
+ },
2408
+ {
2409
+ "model_id": "lumynax-guard-text-moderation",
2410
+ "repo_id": "AbteeXAILab/lumynax-guard-text-moderation",
2411
+ "title": "LumynaX Guard Text Moderation",
2412
+ "family": "roberta",
2413
+ "runtime": "transformers",
2414
+ "modalities": [
2415
+ "text"
2416
+ ],
2417
+ "context_tokens": 512,
2418
+ "jurisdiction": "NZ",
2419
+ "residency": [
2420
+ "NZ",
2421
+ "AU",
2422
+ "global"
2423
+ ],
2424
+ "license_id": "mit",
2425
+ "quantization": "fp32 safetensors",
2426
+ "primary_artifact": "model.safetensors",
2427
+ "active_params_b": null,
2428
+ "total_params_b": 0.279,
2429
+ "quality_rank": 2,
2430
+ "cost_rank": 1,
2431
+ "sovereignty_tier": 3,
2432
+ "supports_tools": false,
2433
+ "supports_json": true,
2434
+ "tags": [
2435
+ "safety",
2436
+ "moderation",
2437
+ "classifier",
2438
+ "guardrail"
2439
+ ],
2440
+ "metadata": {
2441
+ "upstream_repo": "KoalaAI/Text-Moderation",
2442
+ "release_version": "v0.1.0",
2443
+ "package_state": "weights_mirrored",
2444
+ "public_status": "public and non-gated",
2445
+ "validation_status": "scaffold_verified"
2446
+ }
2447
+ },
2448
+ {
2449
+ "model_id": "lumynax-math-qwen25-math-7b-gguf",
2450
+ "repo_id": "AbteeXAILab/lumynax-math-qwen25-math-7b-gguf",
2451
+ "title": "LumynaX Math Qwen2.5 Math 7B GGUF",
2452
+ "family": "qwen",
2453
+ "runtime": "llama_cpp",
2454
+ "modalities": [
2455
+ "text"
2456
+ ],
2457
+ "context_tokens": 4096,
2458
+ "jurisdiction": "NZ",
2459
+ "residency": [
2460
+ "NZ"
2461
+ ],
2462
+ "license_id": "apache-2.0",
2463
+ "quantization": "Q4_K_M GGUF",
2464
+ "primary_artifact": "Qwen2.5-Math-7B-Instruct-Q4_K_M.gguf",
2465
+ "active_params_b": null,
2466
+ "total_params_b": 7,
2467
+ "quality_rank": 2,
2468
+ "cost_rank": 2,
2469
+ "sovereignty_tier": 3,
2470
+ "supports_tools": false,
2471
+ "supports_json": true,
2472
+ "tags": [
2473
+ "math",
2474
+ "reasoning",
2475
+ "qwen",
2476
+ "gguf"
2477
+ ],
2478
+ "metadata": {
2479
+ "upstream_repo": "Qwen/Qwen2.5-Math-7B-Instruct",
2480
+ "release_version": "v0.1.0",
2481
+ "package_state": "weights_mirrored",
2482
+ "public_status": "public and non-gated",
2483
+ "validation_status": "scaffold_verified"
2484
+ }
2485
+ },
2486
+ {
2487
+ "model_id": "lumynax-translate-nllb-200-3b",
2488
+ "repo_id": "AbteeXAILab/lumynax-translate-nllb-200-3b",
2489
+ "title": "LumynaX Translate NLLB-200 3.3B",
2490
+ "family": "nllb",
2491
+ "runtime": "transformers",
2492
+ "modalities": [
2493
+ "text"
2494
+ ],
2495
+ "context_tokens": 1024,
2496
+ "jurisdiction": "NZ",
2497
+ "residency": [
2498
+ "NZ",
2499
+ "AU",
2500
+ "global"
2501
+ ],
2502
+ "license_id": "cc-by-nc-4.0",
2503
+ "quantization": "fp32 safetensors",
2504
+ "primary_artifact": "model.safetensors",
2505
+ "active_params_b": null,
2506
+ "total_params_b": 3.3,
2507
+ "quality_rank": 2,
2508
+ "cost_rank": 3,
2509
+ "sovereignty_tier": 3,
2510
+ "supports_tools": false,
2511
+ "supports_json": false,
2512
+ "tags": [
2513
+ "translation",
2514
+ "nllb",
2515
+ "te-reo",
2516
+ "aotearoa",
2517
+ "languages"
2518
+ ],
2519
+ "metadata": {
2520
+ "upstream_repo": "facebook/nllb-200-3.3B",
2521
+ "release_version": "v0.1.0",
2522
+ "package_state": "weights_mirrored",
2523
+ "public_status": "public and non-gated",
2524
+ "validation_status": "scaffold_verified"
2525
+ }
2526
+ },
2527
+ {
2528
+ "model_id": "lumynax-coder-deepseek-v2-lite-16b-gguf",
2529
+ "repo_id": "AbteeXAILab/lumynax-coder-deepseek-v2-lite-16b-gguf",
2530
+ "title": "LumynaX Coder DeepSeek-Coder V2 Lite 16B GGUF",
2531
+ "family": "deepseek",
2532
+ "runtime": "llama_cpp",
2533
+ "modalities": [
2534
+ "text"
2535
+ ],
2536
+ "context_tokens": 163840,
2537
+ "jurisdiction": "NZ",
2538
+ "residency": [
2539
+ "NZ"
2540
+ ],
2541
+ "license_id": "other",
2542
+ "quantization": "Q4_K_M GGUF",
2543
+ "primary_artifact": "DeepSeek-Coder-V2-Lite-Instruct-Q4_K_M.gguf",
2544
+ "active_params_b": 2.4,
2545
+ "total_params_b": 16,
2546
+ "quality_rank": 2,
2547
+ "cost_rank": 2,
2548
+ "sovereignty_tier": 3,
2549
+ "supports_tools": true,
2550
+ "supports_json": true,
2551
+ "tags": [
2552
+ "coder",
2553
+ "moe",
2554
+ "deepseek",
2555
+ "gguf",
2556
+ "long-context"
2557
+ ],
2558
+ "metadata": {
2559
+ "upstream_repo": "deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct",
2560
+ "release_version": "v0.1.0",
2561
+ "package_state": "weights_mirrored",
2562
+ "public_status": "public and non-gated",
2563
+ "validation_status": "scaffold_verified"
2564
+ }
2565
+ },
2566
+ {
2567
+ "model_id": "lumynax-chat-hermes-3-llama31-8b-gguf",
2568
+ "repo_id": "AbteeXAILab/lumynax-chat-hermes-3-llama31-8b-gguf",
2569
+ "title": "LumynaX Chat Hermes-3 Llama-3.1 8B GGUF",
2570
+ "family": "llama",
2571
+ "runtime": "llama_cpp",
2572
+ "modalities": [
2573
+ "text"
2574
+ ],
2575
+ "context_tokens": 131072,
2576
+ "jurisdiction": "NZ",
2577
+ "residency": [
2578
+ "NZ"
2579
+ ],
2580
+ "license_id": "llama3.1",
2581
+ "quantization": "Q4_K_M GGUF",
2582
+ "primary_artifact": "Hermes-3-Llama-3.1-8B-Q4_K_M.gguf",
2583
+ "active_params_b": null,
2584
+ "total_params_b": 8,
2585
+ "quality_rank": 2,
2586
+ "cost_rank": 2,
2587
+ "sovereignty_tier": 3,
2588
+ "supports_tools": true,
2589
+ "supports_json": true,
2590
+ "tags": [
2591
+ "chat",
2592
+ "hermes",
2593
+ "llama",
2594
+ "gguf",
2595
+ "tools",
2596
+ "function-calling"
2597
+ ],
2598
+ "metadata": {
2599
+ "upstream_repo": "NousResearch/Hermes-3-Llama-3.1-8B",
2600
+ "release_version": "v0.1.0",
2601
+ "package_state": "weights_mirrored",
2602
+ "public_status": "public and non-gated",
2603
+ "validation_status": "scaffold_verified"
2604
+ }
2605
+ },
2606
+ {
2607
+ "model_id": "lumynax-doc-nougat-base",
2608
+ "repo_id": "AbteeXAILab/lumynax-doc-nougat-base",
2609
+ "title": "LumynaX Doc Nougat Base (academic PDF -> markdown)",
2610
+ "family": "nougat",
2611
+ "runtime": "transformers",
2612
+ "modalities": [
2613
+ "text",
2614
+ "vision"
2615
+ ],
2616
+ "context_tokens": 4096,
2617
+ "jurisdiction": "NZ",
2618
+ "residency": [
2619
+ "NZ",
2620
+ "AU",
2621
+ "global"
2622
+ ],
2623
+ "license_id": "cc-by-4.0",
2624
+ "quantization": "fp32 safetensors",
2625
+ "primary_artifact": "model.safetensors",
2626
+ "active_params_b": null,
2627
+ "total_params_b": 0.35,
2628
+ "quality_rank": 2,
2629
+ "cost_rank": 1,
2630
+ "sovereignty_tier": 3,
2631
+ "supports_tools": false,
2632
+ "supports_json": true,
2633
+ "tags": [
2634
+ "doc-ai",
2635
+ "ocr",
2636
+ "nougat",
2637
+ "pdf",
2638
+ "markdown"
2639
+ ],
2640
+ "metadata": {
2641
+ "upstream_repo": "facebook/nougat-base",
2642
+ "release_version": "v0.1.0",
2643
+ "package_state": "weights_mirrored",
2644
+ "public_status": "public and non-gated",
2645
+ "validation_status": "scaffold_verified"
2646
+ }
2647
+ },
2648
+ {
2649
+ "model_id": "lumynax-doc-donut-base",
2650
+ "repo_id": "AbteeXAILab/lumynax-doc-donut-base",
2651
+ "title": "LumynaX Doc Donut Base (document understanding)",
2652
+ "family": "donut",
2653
+ "runtime": "transformers",
2654
+ "modalities": [
2655
+ "text",
2656
+ "vision"
2657
+ ],
2658
+ "context_tokens": 1536,
2659
+ "jurisdiction": "NZ",
2660
+ "residency": [
2661
+ "NZ",
2662
+ "AU",
2663
+ "global"
2664
+ ],
2665
+ "license_id": "mit",
2666
+ "quantization": "fp32 safetensors",
2667
+ "primary_artifact": "model.safetensors",
2668
+ "active_params_b": null,
2669
+ "total_params_b": 0.2,
2670
+ "quality_rank": 2,
2671
+ "cost_rank": 1,
2672
+ "sovereignty_tier": 3,
2673
+ "supports_tools": false,
2674
+ "supports_json": true,
2675
+ "tags": [
2676
+ "doc-ai",
2677
+ "donut",
2678
+ "document-vqa"
2679
+ ],
2680
+ "metadata": {
2681
+ "upstream_repo": "naver-clova-ix/donut-base",
2682
+ "release_version": "v0.1.0",
2683
+ "package_state": "weights_mirrored",
2684
+ "public_status": "public and non-gated",
2685
+ "validation_status": "scaffold_verified"
2686
+ }
2687
+ },
2688
+ {
2689
+ "model_id": "lumynax-ocr-trocr-large-printed",
2690
+ "repo_id": "AbteeXAILab/lumynax-ocr-trocr-large-printed",
2691
+ "title": "LumynaX OCR TrOCR Large Printed",
2692
+ "family": "trocr",
2693
+ "runtime": "transformers",
2694
+ "modalities": [
2695
+ "text",
2696
+ "vision"
2697
+ ],
2698
+ "context_tokens": 512,
2699
+ "jurisdiction": "NZ",
2700
+ "residency": [
2701
+ "NZ",
2702
+ "AU",
2703
+ "global"
2704
+ ],
2705
+ "license_id": "mit",
2706
+ "quantization": "fp32 safetensors",
2707
+ "primary_artifact": "model.safetensors",
2708
+ "active_params_b": null,
2709
+ "total_params_b": 0.55,
2710
+ "quality_rank": 2,
2711
+ "cost_rank": 2,
2712
+ "sovereignty_tier": 3,
2713
+ "supports_tools": false,
2714
+ "supports_json": false,
2715
+ "tags": [
2716
+ "ocr",
2717
+ "printed",
2718
+ "trocr"
2719
+ ],
2720
+ "metadata": {
2721
+ "upstream_repo": "microsoft/trocr-large-printed",
2722
+ "release_version": "v0.1.0",
2723
+ "package_state": "weights_mirrored",
2724
+ "public_status": "public and non-gated",
2725
+ "validation_status": "scaffold_verified"
2726
+ }
2727
+ },
2728
+ {
2729
+ "model_id": "lumynax-ocr-trocr-large-handwritten",
2730
+ "repo_id": "AbteeXAILab/lumynax-ocr-trocr-large-handwritten",
2731
+ "title": "LumynaX OCR TrOCR Large Handwritten",
2732
+ "family": "trocr",
2733
+ "runtime": "transformers",
2734
+ "modalities": [
2735
+ "text",
2736
+ "vision"
2737
+ ],
2738
+ "context_tokens": 512,
2739
+ "jurisdiction": "NZ",
2740
+ "residency": [
2741
+ "NZ",
2742
+ "AU",
2743
+ "global"
2744
+ ],
2745
+ "license_id": "mit",
2746
+ "quantization": "fp32 safetensors",
2747
+ "primary_artifact": "model.safetensors",
2748
+ "active_params_b": null,
2749
+ "total_params_b": 0.55,
2750
+ "quality_rank": 2,
2751
+ "cost_rank": 2,
2752
+ "sovereignty_tier": 3,
2753
+ "supports_tools": false,
2754
+ "supports_json": false,
2755
+ "tags": [
2756
+ "ocr",
2757
+ "handwritten",
2758
+ "trocr"
2759
+ ],
2760
+ "metadata": {
2761
+ "upstream_repo": "microsoft/trocr-large-handwritten",
2762
+ "release_version": "v0.1.0",
2763
+ "package_state": "weights_mirrored",
2764
+ "public_status": "public and non-gated",
2765
+ "validation_status": "scaffold_verified"
2766
+ }
2767
+ },
2768
+ {
2769
+ "model_id": "lumynax-doc-layoutlmv3-base",
2770
+ "repo_id": "AbteeXAILab/lumynax-doc-layoutlmv3-base",
2771
+ "title": "LumynaX Doc LayoutLMv3 Base (document layout+text)",
2772
+ "family": "layoutlm",
2773
+ "runtime": "transformers",
2774
+ "modalities": [
2775
+ "text",
2776
+ "vision"
2777
+ ],
2778
+ "context_tokens": 512,
2779
+ "jurisdiction": "NZ",
2780
+ "residency": [
2781
+ "NZ",
2782
+ "AU",
2783
+ "global"
2784
+ ],
2785
+ "license_id": "cc-by-nc-4.0",
2786
+ "quantization": "fp32 safetensors",
2787
+ "primary_artifact": "model.safetensors",
2788
+ "active_params_b": null,
2789
+ "total_params_b": 0.13,
2790
+ "quality_rank": 2,
2791
+ "cost_rank": 1,
2792
+ "sovereignty_tier": 3,
2793
+ "supports_tools": false,
2794
+ "supports_json": true,
2795
+ "tags": [
2796
+ "doc-ai",
2797
+ "layout",
2798
+ "layoutlm"
2799
+ ],
2800
+ "metadata": {
2801
+ "upstream_repo": "microsoft/layoutlmv3-base",
2802
+ "release_version": "v0.1.0",
2803
+ "package_state": "weights_mirrored",
2804
+ "public_status": "public and non-gated",
2805
+ "validation_status": "scaffold_verified"
2806
+ }
2807
+ },
2808
+ {
2809
+ "model_id": "lumynax-doc-table-transformer-detection",
2810
+ "repo_id": "AbteeXAILab/lumynax-doc-table-transformer-detection",
2811
+ "title": "LumynaX Doc Table Transformer (detection)",
2812
+ "family": "table-transformer",
2813
+ "runtime": "transformers",
2814
+ "modalities": [
2815
+ "vision"
2816
+ ],
2817
+ "context_tokens": 0,
2818
+ "jurisdiction": "NZ",
2819
+ "residency": [
2820
+ "NZ",
2821
+ "AU",
2822
+ "global"
2823
+ ],
2824
+ "license_id": "mit",
2825
+ "quantization": "fp32 safetensors",
2826
+ "primary_artifact": "model.safetensors",
2827
+ "active_params_b": null,
2828
+ "total_params_b": 0.029,
2829
+ "quality_rank": 2,
2830
+ "cost_rank": 1,
2831
+ "sovereignty_tier": 3,
2832
+ "supports_tools": false,
2833
+ "supports_json": true,
2834
+ "tags": [
2835
+ "doc-ai",
2836
+ "tables",
2837
+ "detection",
2838
+ "detr"
2839
+ ],
2840
+ "metadata": {
2841
+ "upstream_repo": "microsoft/table-transformer-detection",
2842
+ "release_version": "v0.1.0",
2843
+ "package_state": "weights_mirrored",
2844
+ "public_status": "public and non-gated",
2845
+ "validation_status": "scaffold_verified"
2846
+ }
2847
+ },
2848
+ {
2849
+ "model_id": "lumynax-embed-nomic-v2-moe",
2850
+ "repo_id": "AbteeXAILab/lumynax-embed-nomic-v2-moe",
2851
+ "title": "LumynaX Embed Nomic v2 MoE (modern retrieval)",
2852
+ "family": "nomic",
2853
+ "runtime": "python_embedding",
2854
+ "modalities": [
2855
+ "text"
2856
+ ],
2857
+ "context_tokens": 512,
2858
+ "jurisdiction": "NZ",
2859
+ "residency": [
2860
+ "NZ",
2861
+ "AU",
2862
+ "global"
2863
+ ],
2864
+ "license_id": "apache-2.0",
2865
+ "quantization": "fp32 safetensors",
2866
+ "primary_artifact": "model.safetensors",
2867
+ "active_params_b": 0.305,
2868
+ "total_params_b": 0.475,
2869
+ "quality_rank": 1,
2870
+ "cost_rank": 1,
2871
+ "sovereignty_tier": 3,
2872
+ "supports_tools": false,
2873
+ "supports_json": true,
2874
+ "tags": [
2875
+ "embedding",
2876
+ "retrieval",
2877
+ "nomic",
2878
+ "moe",
2879
+ "modern"
2880
+ ],
2881
+ "metadata": {
2882
+ "upstream_repo": "nomic-ai/nomic-embed-text-v2-moe",
2883
+ "release_version": "v0.1.0",
2884
+ "package_state": "weights_mirrored",
2885
+ "public_status": "public and non-gated",
2886
+ "validation_status": "scaffold_verified"
2887
+ }
2888
+ },
2889
+ {
2890
+ "model_id": "lumynax-embed-granite-278m-multilingual",
2891
+ "repo_id": "AbteeXAILab/lumynax-embed-granite-278m-multilingual",
2892
+ "title": "LumynaX Embed IBM Granite 278M Multilingual",
2893
+ "family": "granite",
2894
+ "runtime": "python_embedding",
2895
+ "modalities": [
2896
+ "text"
2897
+ ],
2898
+ "context_tokens": 512,
2899
+ "jurisdiction": "NZ",
2900
+ "residency": [
2901
+ "NZ",
2902
+ "AU",
2903
+ "global"
2904
+ ],
2905
+ "license_id": "apache-2.0",
2906
+ "quantization": "fp32 safetensors",
2907
+ "primary_artifact": "model.safetensors",
2908
+ "active_params_b": null,
2909
+ "total_params_b": 0.278,
2910
+ "quality_rank": 2,
2911
+ "cost_rank": 1,
2912
+ "sovereignty_tier": 3,
2913
+ "supports_tools": false,
2914
+ "supports_json": true,
2915
+ "tags": [
2916
+ "embedding",
2917
+ "retrieval",
2918
+ "granite",
2919
+ "multilingual",
2920
+ "ibm"
2921
+ ],
2922
+ "metadata": {
2923
+ "upstream_repo": "ibm-granite/granite-embedding-278m-multilingual",
2924
+ "release_version": "v0.1.0",
2925
+ "package_state": "weights_mirrored",
2926
+ "public_status": "public and non-gated",
2927
+ "validation_status": "scaffold_verified"
2928
+ }
2929
+ }
2930
+ ]
2931
+ }
configs/provider_aliases.yaml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ provider_id: abteex-marama
2
+ base_path: /v1
3
+ default_model_alias: lumynax/auto
4
+ aliases:
5
+ lumynax/auto:
6
+ task_type: general
7
+ requires_local: true
8
+ description: Select the best resident LumynaX model for the request.
9
+ lumynax/code:
10
+ task_type: code
11
+ requires_local: true
12
+ requires_json: true
13
+ description: Prefer coder-tagged LumynaX models with tool and JSON support.
14
+ lumynax/reasoning:
15
+ task_type: reasoning
16
+ requires_local: true
17
+ description: Prefer reasoning-tagged models inside residency constraints.
18
+ lumynax/multimodal:
19
+ task_type: multimodal
20
+ requires_local: false
21
+ description: Prefer text-plus-image LumynaX models when policy allows.
22
+ default_route:
23
+ jurisdiction: NZ
24
+ data_sensitivity: internal
25
+ min_context_tokens: 4096
26
+ max_fallbacks: 3
27
+ telemetry:
28
+ retain_prompt_by_default: false
29
+ retain_route_decision_days: 365
30
+ hash_request_payload: true
configs/routing_policy.yaml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ policy_id: lumynax-marama-route-default-v0
2
+ default_jurisdiction: NZ
3
+ default_requires_local: true
4
+ high_sensitivity:
5
+ - personal
6
+ - restricted
7
+ - health
8
+ - iwi
9
+ - taonga
10
+ required_for_high_sensitivity:
11
+ min_sovereignty_tier: 2
12
+ residency_must_match_request_jurisdiction: true
13
+ retain_prompt_by_default: false
14
+ preferred_runtimes:
15
+ - llama_cpp
16
+ - transformers_multimodal
17
+ - python_embedding
18
+ fallbacks:
19
+ max_default_fallbacks: 3
20
+ include_rejection_reasons: true
examples/capsule.personal-sovereignty-profile.json ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "capsule_id": "cap-personal-profile-001",
3
+ "subject_id": "operator-local-profile",
4
+ "jurisdiction": "NZ",
5
+ "sensitivity": "personal",
6
+ "allowed_purposes": [
7
+ "personal_memory",
8
+ "coding_assistance",
9
+ "inference"
10
+ ],
11
+ "denied_purposes": [
12
+ "ad_training",
13
+ "third_party_resale",
14
+ "public_leaderboard"
15
+ ],
16
+ "resident_regions": [
17
+ "NZ"
18
+ ],
19
+ "data_classes": [
20
+ "personal",
21
+ "preferences",
22
+ "source_code",
23
+ "runtime_logs"
24
+ ],
25
+ "retention_days": 7,
26
+ "export_allowed": false,
27
+ "training_allowed": false,
28
+ "personal_detail_level": "pseudonymous",
29
+ "consent_scopes": [
30
+ "personal_memory",
31
+ "coding_assistance"
32
+ ],
33
+ "data_subject_rights": [
34
+ "access",
35
+ "correction",
36
+ "deletion_request",
37
+ "processing_objection"
38
+ ],
39
+ "schema_context": "https://schema.org",
40
+ "consent_record": "local-profile-consent-v0",
41
+ "metadata": {
42
+ "storage": "local_encrypted_profile_store",
43
+ "prompt_rule": "summarise preferences without exposing raw personal notes"
44
+ }
45
+ }
examples/opencode.marama-route.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "$schema": "https://opencode.ai/config.json",
3
+ "provider": {
4
+ "abteex-marama": {
5
+ "npm": "@ai-sdk/openai-compatible",
6
+ "name": "AbteeX MaramaRoute",
7
+ "options": {
8
+ "baseURL": "http://127.0.0.1:8787/v1",
9
+ "apiKey": "{env:ABTEEX_MARAMA_API_KEY}",
10
+ "headers": {
11
+ "X-AbteeX-Tenant": "{env:ABTEEX_TENANT_ID}",
12
+ "X-AbteeX-Workspace-Capsule": "{env:SOVEREIGNCODE_CAPSULE_ID}"
13
+ }
14
+ },
15
+ "models": {
16
+ "lumynax/auto": {
17
+ "name": "LumynaX Auto Sovereign Route"
18
+ },
19
+ "lumynax/code": {
20
+ "name": "LumynaX Code Route"
21
+ },
22
+ "lumynax/reasoning": {
23
+ "name": "LumynaX Reasoning Route"
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
examples/request.code-restricted.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "prompt": "Refactor this private Python service and explain the diff.",
3
+ "task_type": "code",
4
+ "modalities": [
5
+ "text"
6
+ ],
7
+ "jurisdiction": "NZ",
8
+ "data_sensitivity": "restricted",
9
+ "min_context_tokens": 4096,
10
+ "requires_local": true,
11
+ "requires_tools": false,
12
+ "requires_json": true,
13
+ "max_fallbacks": 3
14
+ }
examples/request.openai-chat-code.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": "lumynax/code",
3
+ "messages": [
4
+ {
5
+ "role": "system",
6
+ "content": "You are a governed coding assistant for a New Zealand workspace."
7
+ },
8
+ {
9
+ "role": "user",
10
+ "content": "Refactor this private Python repository function and return a JSON diff plan."
11
+ }
12
+ ],
13
+ "response_format": {
14
+ "type": "json_object"
15
+ },
16
+ "tools": [
17
+ {
18
+ "type": "function",
19
+ "function": {
20
+ "name": "propose_patch",
21
+ "description": "Propose a patch without writing it.",
22
+ "parameters": {
23
+ "type": "object",
24
+ "properties": {
25
+ "files": {
26
+ "type": "array",
27
+ "items": { "type": "string" }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ ],
34
+ "route": {
35
+ "jurisdiction": "NZ",
36
+ "data_sensitivity": "restricted",
37
+ "task_type": "code",
38
+ "requires_local": true,
39
+ "requires_tools": true,
40
+ "requires_json": true,
41
+ "min_context_tokens": 4096,
42
+ "max_fallbacks": 3
43
+ }
44
+ }
examples/request.personal-memory-read.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "actor": "developer",
3
+ "purpose": "personal_memory",
4
+ "action": "read_context",
5
+ "region": "NZ",
6
+ "model_id": "local/lumynax",
7
+ "data_classes": [
8
+ "personal",
9
+ "preferences"
10
+ ],
11
+ "tool_name": "personal_profile_reader",
12
+ "writes_files": false,
13
+ "exports_data": false,
14
+ "trains_model": false,
15
+ "human_approved": false,
16
+ "personal_detail_level": "pseudonymous",
17
+ "consent_scope": "personal_memory",
18
+ "requested_retention_days": 7
19
+ }
integrations/opencode-compatible-provider.md ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # OpenCode-Compatible Provider Integration
2
+
3
+ ## Goal
4
+
5
+ Make AbteeX SovereignCode usable from OpenCode and similar coding agents without
6
+ requiring those tools to understand Data Capsules directly.
7
+
8
+ The integration shape is:
9
+
10
+ ```text
11
+ OpenCode
12
+ -> OpenAI-compatible provider config
13
+ -> MaramaRoute gateway `/v1`
14
+ -> SovereignCode policy and tool broker
15
+ -> LumynaX model runtime
16
+ ```
17
+
18
+ ## Current Compatibility Target
19
+
20
+ OpenCode supports custom OpenAI-compatible providers through
21
+ `@ai-sdk/openai-compatible` and a provider `baseURL`. OpenRouter exposes an
22
+ OpenAI-like chat endpoint at `/api/v1/chat/completions`, with normalized request
23
+ and response payloads. MaramaRoute should therefore expose:
24
+
25
+ - `GET /v1/models`
26
+ - `POST /v1/chat/completions`
27
+ - `POST /v1/route`
28
+ - `GET /v1/route/{decision_id}`
29
+
30
+ References checked on 2026-05-17:
31
+
32
+ - https://opencode.ai/docs/providers
33
+ - https://openrouter.ai/docs/api-reference/overview/
34
+ - https://openrouter.ai/docs/api-reference/chat-completion
35
+
36
+ ## OpenCode Provider Config
37
+
38
+ Use `examples/opencode.marama-route.json` as the project-local provider file.
39
+
40
+ The important fields are:
41
+
42
+ | Field | Value |
43
+ | --- | --- |
44
+ | `provider.abteex-marama.npm` | `@ai-sdk/openai-compatible` |
45
+ | `provider.abteex-marama.options.baseURL` | Local or hosted MaramaRoute `/v1` URL |
46
+ | `provider.abteex-marama.options.apiKey` | Environment backed key |
47
+ | `provider.abteex-marama.models` | LumynaX model aliases exposed by MaramaRoute |
48
+
49
+ ## SovereignCode Responsibilities
50
+
51
+ OpenCode sends a normal chat request. SovereignCode and MaramaRoute add:
52
+
53
+ - capsule resolution from workspace policy files
54
+ - purpose and personal-detail checks before prompt assembly
55
+ - model routing based on residency, modality, task, and sensitivity
56
+ - visible approval gates before file writes, shell commands, network export, or commit
57
+ - audit records for policy decisions and route decisions
58
+
59
+ ## Workspace Files
60
+
61
+ A governed workspace should carry:
62
+
63
+ ```text
64
+ .sovereigncode/
65
+ capsule.json
66
+ tenant-policy.yaml
67
+ approvals/
68
+ audit/
69
+ opencode.json
70
+ ```
71
+
72
+ The agent can start with `capsule.json` and `opencode.json`. The full tool
73
+ broker can add approvals and audit persistence in the next build stage.
74
+
75
+ ## Minimum Viable Flow
76
+
77
+ 1. User opens a project in OpenCode.
78
+ 2. OpenCode uses the `abteex-marama` provider.
79
+ 3. MaramaRoute dry-runs the chat payload and selects a LumynaX model.
80
+ 4. SovereignCode checks the workspace Data Capsule before exposing context.
81
+ 5. The coding agent proposes a plan.
82
+ 6. File writes require a visible diff and an audit record.
83
+ 7. Shell, network, commit, and publish actions require explicit approval.
84
+
85
+ ## Similar Clients
86
+
87
+ Any client that can point at an OpenAI-compatible endpoint should use the same
88
+ gateway:
89
+
90
+ | Client type | Expected integration |
91
+ | --- | --- |
92
+ | OpenCode | `opencode.json` custom provider |
93
+ | Continue-style IDE assistant | OpenAI-compatible base URL and model ids |
94
+ | Aider-style terminal assistant | OpenAI-compatible base URL and key |
95
+ | Internal agent runner | Direct `/v1/route` and `/v1/chat/completions` calls |
96
+ | Browser console | Same API behind tenant auth |
marama_route/__init__.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from .gateway import (
4
+ build_chat_route_response,
5
+ build_models_response,
6
+ route_chat_payload,
7
+ routing_request_from_chat_payload,
8
+ )
9
+ from .registry import ModelEndpoint, RoutingRequest, load_model_registry
10
+ from .router import RouteDecision, SovereignModelRouter
11
+
12
+ __all__ = [
13
+ "ModelEndpoint",
14
+ "RouteDecision",
15
+ "RoutingRequest",
16
+ "SovereignModelRouter",
17
+ "build_chat_route_response",
18
+ "build_models_response",
19
+ "load_model_registry",
20
+ "route_chat_payload",
21
+ "routing_request_from_chat_payload",
22
+ ]
marama_route/cli.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import json
5
+ from collections.abc import Sequence
6
+ from pathlib import Path
7
+ from typing import Any
8
+
9
+ from .gateway import build_models_response, route_chat_payload
10
+ from .registry import RoutingRequest, load_model_registry
11
+ from .router import SovereignModelRouter
12
+
13
+
14
+ def _load_json_mapping(path: Path) -> dict[str, Any]:
15
+ payload = json.loads(path.read_text(encoding="utf-8-sig"))
16
+ if not isinstance(payload, dict):
17
+ raise ValueError(f"Expected mapping in {path}")
18
+ return payload
19
+
20
+
21
+ def _route(args: argparse.Namespace) -> int:
22
+ models = load_model_registry(args.registry)
23
+ payload = _load_json_mapping(args.request)
24
+ decision = SovereignModelRouter(models).route(RoutingRequest.from_payload(payload))
25
+ print(json.dumps(decision.to_dict(), indent=2, sort_keys=True))
26
+ return 0 if decision.selected_model is not None else 2
27
+
28
+
29
+ def _models(args: argparse.Namespace) -> int:
30
+ models = load_model_registry(args.registry)
31
+ print(json.dumps(build_models_response(models), indent=2, sort_keys=True))
32
+ return 0
33
+
34
+
35
+ def _chat_dry_run(args: argparse.Namespace) -> int:
36
+ models = load_model_registry(args.registry)
37
+ payload = _load_json_mapping(args.request)
38
+ result = route_chat_payload(payload, models)
39
+ print(json.dumps(result, indent=2, sort_keys=True))
40
+ selected = result["route_decision"]["selected_model"]
41
+ return 0 if selected is not None else 2
42
+
43
+
44
+ def build_parser() -> argparse.ArgumentParser:
45
+ parser = argparse.ArgumentParser(
46
+ prog="lumynax-marama-route",
47
+ description="Route requests across LumynaX sovereign model releases.",
48
+ )
49
+ subparsers = parser.add_subparsers(dest="command")
50
+ route = subparsers.add_parser("route", help="Select a LumynaX model for a request.")
51
+ route.add_argument("--registry", type=Path, required=True, help="MaramaRoute model registry JSON.")
52
+ route.add_argument("--request", type=Path, required=True, help="Routing request JSON.")
53
+ route.set_defaults(handler=_route)
54
+
55
+ models = subparsers.add_parser(
56
+ "models",
57
+ help="Emit an OpenAI-compatible /v1/models response.",
58
+ )
59
+ models.add_argument("--registry", type=Path, required=True, help="MaramaRoute model registry JSON.")
60
+ models.set_defaults(handler=_models)
61
+
62
+ chat = subparsers.add_parser(
63
+ "chat-dry-run",
64
+ help="Route an OpenAI-compatible chat request without invoking a backend.",
65
+ )
66
+ chat.add_argument("--registry", type=Path, required=True, help="MaramaRoute model registry JSON.")
67
+ chat.add_argument("--request", type=Path, required=True, help="OpenAI chat request JSON.")
68
+ chat.set_defaults(handler=_chat_dry_run)
69
+ return parser
70
+
71
+
72
+ def main(argv: Sequence[str] | None = None) -> int:
73
+ parser = build_parser()
74
+ args = parser.parse_args(argv)
75
+ handler = getattr(args, "handler", None)
76
+ if handler is None:
77
+ parser.print_help()
78
+ return 0
79
+ return int(handler(args))
80
+
81
+
82
+ if __name__ == "__main__":
83
+ raise SystemExit(main())
marama_route/gateway.py ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import hashlib
4
+ import json
5
+ import time
6
+ from typing import Any
7
+
8
+ from .registry import ModelEndpoint, RoutingRequest
9
+ from .router import RouteDecision, SovereignModelRouter
10
+
11
+
12
+ def routing_request_from_chat_payload(payload: dict[str, Any]) -> RoutingRequest:
13
+ """Translate an OpenAI-compatible chat request into a routing request."""
14
+
15
+ route_options = _mapping(
16
+ payload.get("route")
17
+ or payload.get("routing")
18
+ or _mapping(payload.get("metadata")).get("marama_route"),
19
+ )
20
+ prompt, modalities = _prompt_and_modalities(payload)
21
+ tools = payload.get("tools")
22
+ response_format = _mapping(payload.get("response_format"))
23
+ task_type = str(route_options.get("task_type") or _infer_task_type(prompt, modalities))
24
+
25
+ return RoutingRequest.from_payload(
26
+ {
27
+ "prompt": prompt,
28
+ "task_type": task_type,
29
+ "modalities": sorted(modalities),
30
+ "jurisdiction": route_options.get("jurisdiction", "NZ"),
31
+ "data_sensitivity": route_options.get("data_sensitivity", "internal"),
32
+ "min_context_tokens": route_options.get("min_context_tokens", 4096),
33
+ "requires_local": route_options.get("requires_local", True),
34
+ "requires_tools": bool(tools) or bool(route_options.get("requires_tools")),
35
+ "requires_json": _requires_json(response_format, route_options),
36
+ "license_allowlist": route_options.get("license_allowlist", ()),
37
+ "max_fallbacks": route_options.get("max_fallbacks", 3),
38
+ "metadata": {
39
+ "requested_model": payload.get("model", "auto"),
40
+ "source_protocol": "openai_chat_completions",
41
+ },
42
+ },
43
+ )
44
+
45
+
46
+ def build_models_response(models: tuple[ModelEndpoint, ...]) -> dict[str, Any]:
47
+ """Return an OpenAI-compatible `/v1/models` listing."""
48
+
49
+ return {
50
+ "object": "list",
51
+ "data": [
52
+ {
53
+ "id": model.model_id,
54
+ "object": "model",
55
+ "created": 0,
56
+ "owned_by": model.repo_id.split("/", maxsplit=1)[0],
57
+ "metadata": {
58
+ "repo_id": model.repo_id,
59
+ "runtime": model.runtime,
60
+ "modalities": list(model.modalities),
61
+ "context_tokens": model.context_tokens,
62
+ "residency": list(model.residency),
63
+ "sovereignty_tier": model.sovereignty_tier,
64
+ "supports_tools": model.supports_tools,
65
+ "supports_json": model.supports_json,
66
+ "tags": list(model.tags),
67
+ },
68
+ }
69
+ for model in models
70
+ ],
71
+ }
72
+
73
+
74
+ def build_chat_route_response(
75
+ payload: dict[str, Any],
76
+ decision: RouteDecision,
77
+ ) -> dict[str, Any]:
78
+ """Return a dry-run chat response with route metadata and no generated text."""
79
+
80
+ selected = decision.selected_model
81
+ created = int(time.time())
82
+ request_hash = hashlib.sha256(
83
+ json.dumps(payload, sort_keys=True, default=str).encode("utf-8"),
84
+ ).hexdigest()
85
+ model_id = selected.model_id if selected is not None else str(payload.get("model", ""))
86
+
87
+ return {
88
+ "id": f"marama-route-{request_hash[:16]}",
89
+ "object": "chat.completion",
90
+ "created": created,
91
+ "model": model_id,
92
+ "choices": [
93
+ {
94
+ "index": 0,
95
+ "finish_reason": "route_only",
96
+ "message": {
97
+ "role": "assistant",
98
+ "content": "",
99
+ },
100
+ },
101
+ ],
102
+ "usage": {
103
+ "prompt_tokens": 0,
104
+ "completion_tokens": 0,
105
+ "total_tokens": 0,
106
+ },
107
+ "marama_route": {
108
+ "dry_run": True,
109
+ "selected_model": selected.to_dict() if selected is not None else None,
110
+ "fallback_models": [model.to_dict() for model in decision.fallback_models],
111
+ "rejected_count": len(decision.rejected),
112
+ "reasons": list(decision.reasons),
113
+ "scores": dict(decision.scores),
114
+ "request_hash": request_hash,
115
+ },
116
+ }
117
+
118
+
119
+ def route_chat_payload(
120
+ payload: dict[str, Any],
121
+ models: tuple[ModelEndpoint, ...],
122
+ ) -> dict[str, Any]:
123
+ request = routing_request_from_chat_payload(payload)
124
+ decision = SovereignModelRouter(models).route(request)
125
+ return {
126
+ "routing_request": request.to_dict(),
127
+ "route_decision": decision.to_dict(),
128
+ "chat_completion_response": build_chat_route_response(payload, decision),
129
+ }
130
+
131
+
132
+ def _mapping(value: object) -> dict[str, Any]:
133
+ return dict(value) if isinstance(value, dict) else {}
134
+
135
+
136
+ def _requires_json(
137
+ response_format: dict[str, Any],
138
+ route_options: dict[str, Any],
139
+ ) -> bool:
140
+ if bool(route_options.get("requires_json")):
141
+ return True
142
+ response_type = str(response_format.get("type", "")).lower()
143
+ return response_type in {"json_object", "json_schema"}
144
+
145
+
146
+ def _prompt_and_modalities(payload: dict[str, Any]) -> tuple[str, set[str]]:
147
+ modalities = {"text"}
148
+ pieces: list[str] = []
149
+ messages = payload.get("messages")
150
+ if isinstance(messages, list):
151
+ for message in messages:
152
+ if not isinstance(message, dict):
153
+ continue
154
+ content = message.get("content")
155
+ text, content_modalities = _content_text_and_modalities(content)
156
+ pieces.append(text)
157
+ modalities.update(content_modalities)
158
+ elif isinstance(payload.get("prompt"), str):
159
+ pieces.append(str(payload["prompt"]))
160
+ return "\n".join(piece for piece in pieces if piece), modalities
161
+
162
+
163
+ def _content_text_and_modalities(content: object) -> tuple[str, set[str]]:
164
+ if isinstance(content, str):
165
+ return content, {"text"}
166
+ if not isinstance(content, list):
167
+ return "", {"text"}
168
+
169
+ pieces: list[str] = []
170
+ modalities = {"text"}
171
+ for part in content:
172
+ if not isinstance(part, dict):
173
+ continue
174
+ part_type = str(part.get("type", "")).lower()
175
+ if part_type in {"text", "input_text"}:
176
+ pieces.append(str(part.get("text", "")))
177
+ elif part_type in {"image", "image_url", "input_image"}:
178
+ modalities.add("image")
179
+ elif part_type in {"audio", "input_audio"}:
180
+ modalities.add("audio")
181
+ return "\n".join(piece for piece in pieces if piece), modalities
182
+
183
+
184
+ def _infer_task_type(prompt: str, modalities: set[str]) -> str:
185
+ prompt_lower = prompt.lower()
186
+ if "image" in modalities or "vision" in modalities:
187
+ return "multimodal"
188
+ code_markers = (
189
+ "refactor",
190
+ "diff",
191
+ "unit test",
192
+ "python",
193
+ "typescript",
194
+ "javascript",
195
+ "repository",
196
+ "function",
197
+ "class ",
198
+ "stack trace",
199
+ )
200
+ if any(marker in prompt_lower for marker in code_markers):
201
+ return "code"
202
+ if "reason" in prompt_lower or "prove" in prompt_lower:
203
+ return "reasoning"
204
+ return "general"
marama_route/registry.py ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ from dataclasses import dataclass, field
5
+ from pathlib import Path
6
+ from typing import Any
7
+
8
+
9
+ def _text_tuple(value: object, *, default: tuple[str, ...] = ()) -> tuple[str, ...]:
10
+ if value in (None, ""):
11
+ return default
12
+ if isinstance(value, str):
13
+ return (value,)
14
+ if isinstance(value, (list, tuple, set)):
15
+ return tuple(str(item).strip() for item in value if str(item).strip())
16
+ return (str(value).strip(),)
17
+
18
+
19
+ @dataclass(frozen=True, slots=True)
20
+ class ModelEndpoint:
21
+ model_id: str
22
+ repo_id: str
23
+ family: str
24
+ runtime: str
25
+ modalities: tuple[str, ...] = ("text",)
26
+ context_tokens: int = 4096
27
+ jurisdiction: str = "NZ"
28
+ residency: tuple[str, ...] = ("NZ",)
29
+ license_id: str = "see_model_card"
30
+ quantization: str = "see_manifest"
31
+ primary_artifact: str = ""
32
+ active_params_b: float | None = None
33
+ total_params_b: float | None = None
34
+ quality_rank: int = 5
35
+ cost_rank: int = 5
36
+ sovereignty_tier: int = 2
37
+ supports_tools: bool = False
38
+ supports_json: bool = False
39
+ tags: tuple[str, ...] = ()
40
+ metadata: dict[str, Any] = field(default_factory=dict)
41
+
42
+ @classmethod
43
+ def from_payload(cls, payload: dict[str, Any]) -> ModelEndpoint:
44
+ return cls(
45
+ model_id=str(payload.get("model_id") or payload.get("repo_id") or ""),
46
+ repo_id=str(payload.get("repo_id") or payload.get("model_id") or ""),
47
+ family=str(payload.get("family") or "lumynax"),
48
+ runtime=str(payload.get("runtime") or "llama_cpp"),
49
+ modalities=_text_tuple(payload.get("modalities"), default=("text",)),
50
+ context_tokens=int(payload.get("context_tokens") or 4096),
51
+ jurisdiction=str(payload.get("jurisdiction") or "NZ").upper(),
52
+ residency=tuple(str(item).upper() for item in _text_tuple(payload.get("residency"), default=("NZ",))),
53
+ license_id=str(payload.get("license_id") or "see_model_card"),
54
+ quantization=str(payload.get("quantization") or "see_manifest"),
55
+ primary_artifact=str(payload.get("primary_artifact") or ""),
56
+ active_params_b=(
57
+ float(payload["active_params_b"]) if payload.get("active_params_b") is not None else None
58
+ ),
59
+ total_params_b=(
60
+ float(payload["total_params_b"]) if payload.get("total_params_b") is not None else None
61
+ ),
62
+ quality_rank=int(payload.get("quality_rank") or 5),
63
+ cost_rank=int(payload.get("cost_rank") or 5),
64
+ sovereignty_tier=int(payload.get("sovereignty_tier") or 2),
65
+ supports_tools=bool(payload.get("supports_tools", False)),
66
+ supports_json=bool(payload.get("supports_json", False)),
67
+ tags=tuple(item.lower() for item in _text_tuple(payload.get("tags"))),
68
+ metadata=dict(payload.get("metadata") or {}),
69
+ )
70
+
71
+ def to_dict(self) -> dict[str, Any]:
72
+ return {
73
+ "model_id": self.model_id,
74
+ "repo_id": self.repo_id,
75
+ "family": self.family,
76
+ "runtime": self.runtime,
77
+ "modalities": list(self.modalities),
78
+ "context_tokens": self.context_tokens,
79
+ "jurisdiction": self.jurisdiction,
80
+ "residency": list(self.residency),
81
+ "license_id": self.license_id,
82
+ "quantization": self.quantization,
83
+ "primary_artifact": self.primary_artifact,
84
+ "active_params_b": self.active_params_b,
85
+ "total_params_b": self.total_params_b,
86
+ "quality_rank": self.quality_rank,
87
+ "cost_rank": self.cost_rank,
88
+ "sovereignty_tier": self.sovereignty_tier,
89
+ "supports_tools": self.supports_tools,
90
+ "supports_json": self.supports_json,
91
+ "tags": list(self.tags),
92
+ "metadata": dict(self.metadata),
93
+ }
94
+
95
+
96
+ @dataclass(frozen=True, slots=True)
97
+ class RoutingRequest:
98
+ prompt: str
99
+ task_type: str = "general"
100
+ modalities: tuple[str, ...] = ("text",)
101
+ jurisdiction: str = "NZ"
102
+ data_sensitivity: str = "internal"
103
+ min_context_tokens: int = 4096
104
+ requires_local: bool = True
105
+ requires_tools: bool = False
106
+ requires_json: bool = False
107
+ license_allowlist: tuple[str, ...] = ()
108
+ max_fallbacks: int = 3
109
+ metadata: dict[str, Any] = field(default_factory=dict)
110
+
111
+ @classmethod
112
+ def from_payload(cls, payload: dict[str, Any]) -> RoutingRequest:
113
+ return cls(
114
+ prompt=str(payload.get("prompt") or ""),
115
+ task_type=str(payload.get("task_type") or "general").lower(),
116
+ modalities=tuple(item.lower() for item in _text_tuple(payload.get("modalities"), default=("text",))),
117
+ jurisdiction=str(payload.get("jurisdiction") or "NZ").upper(),
118
+ data_sensitivity=str(payload.get("data_sensitivity") or "internal").lower(),
119
+ min_context_tokens=int(payload.get("min_context_tokens") or 4096),
120
+ requires_local=bool(payload.get("requires_local", True)),
121
+ requires_tools=bool(payload.get("requires_tools", False)),
122
+ requires_json=bool(payload.get("requires_json", False)),
123
+ license_allowlist=tuple(item.lower() for item in _text_tuple(payload.get("license_allowlist"))),
124
+ max_fallbacks=int(payload.get("max_fallbacks") or 3),
125
+ metadata=dict(payload.get("metadata") or {}),
126
+ )
127
+
128
+ def to_dict(self) -> dict[str, Any]:
129
+ return {
130
+ "prompt": self.prompt,
131
+ "task_type": self.task_type,
132
+ "modalities": list(self.modalities),
133
+ "jurisdiction": self.jurisdiction,
134
+ "data_sensitivity": self.data_sensitivity,
135
+ "min_context_tokens": self.min_context_tokens,
136
+ "requires_local": self.requires_local,
137
+ "requires_tools": self.requires_tools,
138
+ "requires_json": self.requires_json,
139
+ "license_allowlist": list(self.license_allowlist),
140
+ "max_fallbacks": self.max_fallbacks,
141
+ "metadata": dict(self.metadata),
142
+ }
143
+
144
+
145
+ def load_model_registry(path: Path) -> tuple[ModelEndpoint, ...]:
146
+ payload = json.loads(path.read_text(encoding="utf-8-sig"))
147
+ raw_models = payload.get("models") if isinstance(payload, dict) else payload
148
+ if not isinstance(raw_models, list):
149
+ raise ValueError(f"Expected model list in {path}")
150
+ return tuple(ModelEndpoint.from_payload(item) for item in raw_models if isinstance(item, dict))
marama_route/router.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any
5
+
6
+ from .registry import ModelEndpoint, RoutingRequest
7
+
8
+ HIGH_SENSITIVITY = frozenset({"personal", "restricted", "health", "iwi", "taonga"})
9
+
10
+
11
+ @dataclass(frozen=True, slots=True)
12
+ class RouteDecision:
13
+ selected_model: ModelEndpoint | None
14
+ fallback_models: tuple[ModelEndpoint, ...]
15
+ rejected: tuple[dict[str, str], ...]
16
+ reasons: tuple[str, ...]
17
+ scores: dict[str, float]
18
+
19
+ def to_dict(self) -> dict[str, Any]:
20
+ return {
21
+ "selected_model": self.selected_model.to_dict() if self.selected_model else None,
22
+ "fallback_models": [model.to_dict() for model in self.fallback_models],
23
+ "rejected": list(self.rejected),
24
+ "reasons": list(self.reasons),
25
+ "scores": dict(self.scores),
26
+ }
27
+
28
+
29
+ class SovereignModelRouter:
30
+ def __init__(self, models: tuple[ModelEndpoint, ...]) -> None:
31
+ self.models = models
32
+
33
+ def route(self, request: RoutingRequest) -> RouteDecision:
34
+ accepted: list[ModelEndpoint] = []
35
+ rejected: list[dict[str, str]] = []
36
+ requested_modalities = set(request.modalities)
37
+ license_allowlist = set(request.license_allowlist)
38
+
39
+ for model in self.models:
40
+ model_modalities = set(item.lower() for item in model.modalities)
41
+ if not requested_modalities.issubset(model_modalities):
42
+ rejected.append({"model_id": model.model_id, "reason": "modality_mismatch"})
43
+ continue
44
+ if model.context_tokens < request.min_context_tokens:
45
+ rejected.append({"model_id": model.model_id, "reason": "context_too_small"})
46
+ continue
47
+ if request.requires_tools and not model.supports_tools:
48
+ rejected.append({"model_id": model.model_id, "reason": "tools_required"})
49
+ continue
50
+ if request.requires_json and not model.supports_json:
51
+ rejected.append({"model_id": model.model_id, "reason": "json_required"})
52
+ continue
53
+ if license_allowlist and model.license_id.lower() not in license_allowlist:
54
+ rejected.append({"model_id": model.model_id, "reason": "license_not_allowed"})
55
+ continue
56
+ if request.requires_local and request.jurisdiction not in model.residency:
57
+ rejected.append({"model_id": model.model_id, "reason": "residency_mismatch"})
58
+ continue
59
+ if request.data_sensitivity in HIGH_SENSITIVITY and model.sovereignty_tier < 2:
60
+ rejected.append({"model_id": model.model_id, "reason": "sovereignty_tier_too_low"})
61
+ continue
62
+ accepted.append(model)
63
+
64
+ scores = {model.model_id: self._score(model, request) for model in accepted}
65
+ ranked = tuple(sorted(accepted, key=lambda model: (scores[model.model_id], model.model_id), reverse=True))
66
+ selected = ranked[0] if ranked else None
67
+ fallbacks = ranked[1 : 1 + request.max_fallbacks]
68
+ reasons = self._reasons(selected, request)
69
+ return RouteDecision(
70
+ selected_model=selected,
71
+ fallback_models=fallbacks,
72
+ rejected=tuple(rejected),
73
+ reasons=reasons,
74
+ scores=scores,
75
+ )
76
+
77
+ def _score(self, model: ModelEndpoint, request: RoutingRequest) -> float:
78
+ score = 0.0
79
+ tags = set(model.tags)
80
+ prompt_lower = request.prompt.lower()
81
+ if request.jurisdiction in model.residency:
82
+ score += 8.0
83
+ if request.task_type in tags or request.task_type in model.family.lower():
84
+ score += 7.0
85
+ if request.task_type == "code" and ("coder" in model.model_id or "coder" in tags):
86
+ score += 10.0
87
+ if request.task_type == "reasoning" and ("reasoning" in model.model_id or "reasoning" in tags):
88
+ score += 9.0
89
+ if "iwi" in prompt_lower or "data sovereignty" in prompt_lower:
90
+ score += 3.0 * model.sovereignty_tier
91
+ if "gguf" in model.runtime.lower() or model.runtime == "llama_cpp":
92
+ score += 2.5
93
+ if model.supports_json and request.requires_json:
94
+ score += 3.0
95
+ if model.supports_tools and request.requires_tools:
96
+ score += 3.0
97
+ score += max(0, 10 - model.quality_rank) * 1.7
98
+ score -= model.cost_rank * 0.25
99
+ if model.active_params_b is not None and model.active_params_b <= 8:
100
+ score += 0.5
101
+ return round(score, 4)
102
+
103
+ def _reasons(self, selected: ModelEndpoint | None, request: RoutingRequest) -> tuple[str, ...]:
104
+ if selected is None:
105
+ return ("no model satisfied sovereignty and capability constraints",)
106
+ reasons = [
107
+ f"selected `{selected.model_id}` for task_type `{request.task_type}`",
108
+ f"residency `{request.jurisdiction}` satisfied",
109
+ f"runtime `{selected.runtime}`",
110
+ ]
111
+ if request.data_sensitivity in HIGH_SENSITIVITY:
112
+ reasons.append("high-sensitivity routing kept inside sovereign tier constraints")
113
+ return tuple(reasons)
policy-packs/nz-personal-sovereignty.yaml ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ policy_id: abx-sovereigncode-nz-personal-sovereignty-v0
2
+ jurisdiction: NZ
3
+ purpose: governed personal, workspace, and community-context coding assistance
4
+ default_residency:
5
+ - NZ
6
+ allowed_personal_detail_levels:
7
+ - none
8
+ - anonymous
9
+ - pseudonymous
10
+ - identifiable
11
+ - sensitive_identifiable
12
+ default_personal_detail_level: pseudonymous
13
+ consent_scopes:
14
+ coding_assistance:
15
+ allowed_actions:
16
+ - read_context
17
+ - propose_patch
18
+ - generate_tests
19
+ blocked_actions_without_approval:
20
+ - write_file
21
+ - execute_shell
22
+ - commit
23
+ - publish
24
+ - network_export
25
+ personal_memory:
26
+ allowed_actions:
27
+ - read_preference
28
+ - summarise_profile
29
+ blocked_actions_without_approval:
30
+ - export_profile
31
+ - train_adapter
32
+ - share_with_third_party
33
+ retention_defaults:
34
+ restricted_code_days: 14
35
+ personal_trace_days: 7
36
+ audit_record_days: 365
37
+ data_subject_rights:
38
+ - access
39
+ - correction
40
+ - deletion_request
41
+ - processing_objection
42
+ obligations:
43
+ - write_immutable_audit_record
44
+ - minimise_personal_detail_in_prompt
45
+ - keep_personal_trace_inside_capsule_retention
46
+ - show_diff_before_write_or_commit
47
+ - route_only_to_resident_runtime
48
+ - require_human_review_for_external_effects
49
+ model_rules:
50
+ high_impact_requires_lumynax_or_local: true
51
+ restricted_requires_nz_residency: true
52
+ public_may_route_to_approved_global: true
53
+ export_rules:
54
+ default_export_allowed: false
55
+ require_export_manifest: true
56
+ require_named_recipient: true
57
+ training_rules:
58
+ default_training_allowed: false
59
+ require_explicit_capsule_training_allowed: true
product_blueprint.md ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AbteeX SovereignCode Product Blueprint
2
+
3
+ ## One-Sentence Product
4
+
5
+ SovereignCode is a local-first coding agent for New Zealand teams that need code
6
+ assistance, model routing, personal-data controls, and audit-ready tool use in
7
+ one governed workflow.
8
+
9
+ ## Core User Jobs
10
+
11
+ | User | Job | SovereignCode Response |
12
+ | --- | --- | --- |
13
+ | Individual developer | Use an AI coding assistant without exposing private files or personal preferences. | Local capsule, pseudonymous personal profile, resident model route, no training by default. |
14
+ | Startup or SME | Refactor and test private code while keeping customer data out of generic SaaS logs. | Workspace capsule, local route, diff review, audit hash. |
15
+ | Council or public-sector team | Use AI on operational code and documents with retention and residency controls. | Tenant policy pack, NZ residency, approval gates, signed audit export. |
16
+ | Iwi or community data steward | Keep community-held context under explicit purpose and consent boundaries. | High-impact sensitivity, local/LumynaX-only model rule, export denial by default. |
17
+ | Internal platform owner | Give developers one coding assistant with central policy. | OpenAI-compatible provider, CLI planner, future SSO and policy server. |
18
+
19
+ ## Product Pillars
20
+
21
+ 1. Capsule-first context: every workspace, profile, dataset, and prompt context
22
+ resolves to a Data Capsule before agent work starts.
23
+ 2. Personal sovereignty: personal detail is classified before prompt assembly,
24
+ and consent scopes gate how profile context can be used.
25
+ 3. Governed autonomy: read, plan, patch, test, shell, network, commit, and
26
+ publish actions are separate tool grants.
27
+ 4. Open integration: OpenCode and similar clients connect through MaramaRoute's
28
+ OpenAI-compatible gateway.
29
+ 5. Audit without hoarding: records retain decision hashes, obligations, model
30
+ identity, and reasons while prompt retention stays constrained.
31
+
32
+ ## Minimum Product Loop
33
+
34
+ ```text
35
+ developer asks for a coding task
36
+ -> resolve `.sovereigncode/capsule.json`
37
+ -> evaluate SovereignRequest
38
+ -> build MaramaRoute request
39
+ -> select resident LumynaX model
40
+ -> produce plan
41
+ -> request approval for writes or shell
42
+ -> apply patch
43
+ -> run tests
44
+ -> store audit record
45
+ ```
46
+
47
+ ## Product Modules To Build Next
48
+
49
+ | Module | MVP Definition | Implementation Notes |
50
+ | --- | --- | --- |
51
+ | Workspace indexer | Reads repo files, ignores secrets/build outputs, tags data classes. | Start with `rg --files`, `.gitignore`, and capsule include/exclude rules. |
52
+ | Tool broker | Wraps file write, shell, git, package install, HTTP, and model calls. | Reuse policy decisions and emit one audit record per effectful tool call. |
53
+ | Terminal UI | Shows plan, selected model, obligations, diff, and test output. | Keep compatible with OpenCode-style terminal use. |
54
+ | Personal profile store | Keeps user preferences and memory under a personal capsule. | Local encrypted file first, tenant vault later. |
55
+ | Audit ledger | Append-only local JSONL with hash chain. | Export signed bundles for enterprise customers. |
56
+ | Tenant policy server | Central policy packs, model allowlists, API keys, quotas. | Only needed after local MVP works. |
57
+
58
+ ## Default Plans
59
+
60
+ | Plan | Buyer | Included |
61
+ | --- | --- | --- |
62
+ | Local Developer | individual NZ developer | local capsule, local audit, MaramaRoute provider config |
63
+ | Team Sovereign | startup or SME | shared policy pack, route registry, team audit export |
64
+ | Regulated Workspace | council, health-adjacent, community data project | stronger approval gates, retention controls, signed audit, SSO-ready policy server |
65
+
66
+ ## First Non-Negotiables
67
+
68
+ - Never train on a capsule unless `training_allowed` is explicitly true.
69
+ - Never export restricted or personal context unless `export_allowed` is true
70
+ and the request carries human approval.
71
+ - Never route high-impact data to a non-local or non-LumynaX-governed model.
72
+ - Never apply file writes without a visible diff obligation.
73
+ - Never hide selected model identity from the audit record.
product_manifest.json CHANGED
@@ -5,15 +5,34 @@
5
  "family": "LumynaX sovereign products",
6
  "stage": "product_scaffold",
7
  "positioning": "OpenCode-style local coding agent with Data Capsule sovereignty controls",
 
 
 
 
 
 
 
 
 
8
  "primary_modules": [
9
  "data_capsule_policy",
 
10
  "tool_broker",
11
  "lumynax_runtime_adapter",
12
  "audit_ledger",
13
- "human_review_gate"
 
14
  ],
15
  "runtime_entrypoints": [
16
- "python -m tinyluminax.products.sovereigncode.cli"
 
 
 
 
 
 
 
 
17
  ],
18
  "brand_system": {
19
  "paper": "#fffefa",
 
5
  "family": "LumynaX sovereign products",
6
  "stage": "product_scaffold",
7
  "positioning": "OpenCode-style local coding agent with Data Capsule sovereignty controls",
8
+ "target_region": "NZ",
9
+ "target_users": [
10
+ "New Zealand developers",
11
+ "regulated SMEs",
12
+ "local government teams",
13
+ "health-adjacent operators",
14
+ "Iwi and community data stewards",
15
+ "privacy-conscious individual developers"
16
+ ],
17
  "primary_modules": [
18
  "data_capsule_policy",
19
+ "personal_detail_consent",
20
  "tool_broker",
21
  "lumynax_runtime_adapter",
22
  "audit_ledger",
23
+ "human_review_gate",
24
+ "opencode_compatible_provider"
25
  ],
26
  "runtime_entrypoints": [
27
+ "python -m tinyluminax.products.sovereigncode.cli evaluate",
28
+ "python -m tinyluminax.products.sovereigncode.cli plan-turn"
29
+ ],
30
+ "integration_surfaces": [
31
+ "OpenAI-compatible /v1/chat/completions via MaramaRoute",
32
+ "OpenAI-compatible /v1/models via MaramaRoute",
33
+ "OpenCode custom provider config",
34
+ "local CLI policy evaluator",
35
+ "governed coding-turn planner"
36
  ],
37
  "brand_system": {
38
  "paper": "#fffefa",
pyproject.toml CHANGED
@@ -4,22 +4,14 @@ build-backend = "setuptools.build_meta"
4
 
5
  [project]
6
  name = "abteex-sovereigncode"
7
- version = "0.1.0"
8
- description = "AbteeX SovereignCode local-first coding agent with Data Capsule sovereignty controls."
9
  readme = "README.md"
10
- requires-python = ">=3.10"
11
  license = { text = "Apache-2.0" }
12
  authors = [{ name = "AbteeX AI Labs" }]
13
- keywords = ["lumynax", "sovereignty", "data-capsule", "coding-agent", "aotearoa", "new-zealand"]
14
- classifiers = [
15
- "License :: OSI Approved :: Apache Software License",
16
- "Programming Language :: Python :: 3.10",
17
- "Programming Language :: Python :: 3.11",
18
- "Programming Language :: Python :: 3.12",
19
- "Intended Audience :: Developers",
20
- "Topic :: Software Development :: Libraries",
21
- ]
22
- dependencies = ["pyyaml>=6.0"]
23
 
24
  [project.urls]
25
  Homepage = "https://abteex.com"
 
4
 
5
  [project]
6
  name = "abteex-sovereigncode"
7
+ version = "0.2.0"
8
+ description = "AbteeX SovereignCode: local-first coding agent with Data Capsule sovereignty controls."
9
  readme = "README.md"
10
+ requires-python = ">=3.11"
11
  license = { text = "Apache-2.0" }
12
  authors = [{ name = "AbteeX AI Labs" }]
13
+ keywords = ["lumynax", "sovereignty", "data-capsule", "coding-agent", "opencode", "new-zealand"]
14
+ dependencies = ["PyYAML>=6.0"]
 
 
 
 
 
 
 
 
15
 
16
  [project.urls]
17
  Homepage = "https://abteex.com"
quickstart.py CHANGED
@@ -1,30 +1,41 @@
1
- """Quickstart for AbteeX SovereignCode.
2
-
3
- Runs the two example policy evaluations and prints structured decisions and audit records.
4
- """
5
  from __future__ import annotations
6
 
7
  import json
8
  from pathlib import Path
9
 
10
- from sovereigncode import build_audit_record, evaluate, load_capsule, load_policy, load_request
11
 
12
 
13
- ROOT = Path(__file__).parent
14
- EXAMPLES = ROOT / "examples"
15
- CONFIGS = ROOT / "configs"
16
 
17
 
18
- def run(label: str, capsule_path: Path, request_path: Path) -> None:
19
- capsule = load_capsule(capsule_path)
20
- request = load_request(request_path)
21
- policy = load_policy(CONFIGS / "default_policy.yaml")
22
- decision = evaluate(capsule, request, policy)
23
- audit = build_audit_record(capsule, request, decision.to_dict())
24
- print(f"\n=== {label} ===")
25
- print(json.dumps({"decision": decision.to_dict(), "audit": audit.to_dict()}, indent=2, ensure_ascii=False))
26
 
27
 
28
  if __name__ == "__main__":
29
- run("ALLOWED local edit", EXAMPLES / "capsule.restricted-nz-code.json", EXAMPLES / "request.allowed-local-edit.json")
30
- run("DENIED training", EXAMPLES / "capsule.restricted-nz-code.json", EXAMPLES / "request.denied-training.json")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Quickstart smoke for AbteeX SovereignCode."""
 
 
 
2
  from __future__ import annotations
3
 
4
  import json
5
  from pathlib import Path
6
 
7
+ from sovereigncode.cli import main
8
 
9
 
10
+ ROOT = Path(__file__).resolve().parent
 
 
11
 
12
 
13
+ def run(args: list[str]) -> int:
14
+ print("\n$ python -m sovereigncode.cli " + " ".join(args))
15
+ return main(args)
 
 
 
 
 
16
 
17
 
18
  if __name__ == "__main__":
19
+ checks = [
20
+ [
21
+ "evaluate",
22
+ "--capsule",
23
+ str(ROOT / "examples" / "capsule.restricted-nz-code.json"),
24
+ "--request",
25
+ str(ROOT / "examples" / "request.allowed-local-edit.json"),
26
+ ],
27
+ [
28
+ "plan-turn",
29
+ "--capsule",
30
+ str(ROOT / "examples" / "capsule.restricted-nz-code.json"),
31
+ "--request",
32
+ str(ROOT / "examples" / "request.allowed-local-edit.json"),
33
+ "--route-request",
34
+ str(ROOT / "examples" / "request.code-restricted.json"),
35
+ "--registry",
36
+ str(ROOT / "configs" / "lumynax_model_registry.json"),
37
+ ],
38
+ ]
39
+ exits = [run(item) for item in checks]
40
+ print(json.dumps({"checks": len(exits), "passed": all(code == 0 for code in exits)}, indent=2))
41
+ raise SystemExit(0 if all(code == 0 for code in exits) else 1)
requirements.txt CHANGED
@@ -1 +1 @@
1
- pyyaml>=6.0
 
1
+ PyYAML>=6.0
schemas/data_capsule.schema.json ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://abteex.com/schemas/sovereigncode/data-capsule.schema.json",
4
+ "title": "AbteeX SovereignCode Data Capsule",
5
+ "type": "object",
6
+ "required": ["capsule_id", "subject_id", "jurisdiction", "sensitivity"],
7
+ "additionalProperties": true,
8
+ "properties": {
9
+ "capsule_id": {
10
+ "type": "string",
11
+ "minLength": 1
12
+ },
13
+ "subject_id": {
14
+ "type": "string",
15
+ "minLength": 1
16
+ },
17
+ "jurisdiction": {
18
+ "type": "string",
19
+ "default": "NZ"
20
+ },
21
+ "sensitivity": {
22
+ "type": "string",
23
+ "enum": ["public", "internal", "restricted", "personal", "health", "iwi", "taonga"]
24
+ },
25
+ "allowed_purposes": {
26
+ "type": "array",
27
+ "items": { "type": "string" },
28
+ "default": ["inference", "coding_assistance"]
29
+ },
30
+ "denied_purposes": {
31
+ "type": "array",
32
+ "items": { "type": "string" },
33
+ "default": []
34
+ },
35
+ "resident_regions": {
36
+ "type": "array",
37
+ "items": { "type": "string" },
38
+ "default": ["NZ"]
39
+ },
40
+ "data_classes": {
41
+ "type": "array",
42
+ "items": { "type": "string" },
43
+ "default": ["source_code"]
44
+ },
45
+ "retention_days": {
46
+ "type": "integer",
47
+ "minimum": 0,
48
+ "default": 30
49
+ },
50
+ "export_allowed": {
51
+ "type": "boolean",
52
+ "default": false
53
+ },
54
+ "training_allowed": {
55
+ "type": "boolean",
56
+ "default": false
57
+ },
58
+ "personal_detail_level": {
59
+ "type": "string",
60
+ "enum": ["none", "anonymous", "pseudonymous", "identifiable", "sensitive_identifiable"],
61
+ "default": "none"
62
+ },
63
+ "consent_scopes": {
64
+ "type": "array",
65
+ "items": { "type": "string" },
66
+ "default": []
67
+ },
68
+ "data_subject_rights": {
69
+ "type": "array",
70
+ "items": { "type": "string" },
71
+ "default": ["access", "correction", "deletion_request", "processing_objection"]
72
+ },
73
+ "revoked": {
74
+ "type": "boolean",
75
+ "default": false
76
+ },
77
+ "schema_context": {
78
+ "type": "string",
79
+ "default": "https://schema.org"
80
+ },
81
+ "consent_record": {
82
+ "type": "string"
83
+ },
84
+ "metadata": {
85
+ "type": "object"
86
+ }
87
+ }
88
+ }
sovereigncode/__init__.py CHANGED
@@ -1,15 +1,22 @@
1
- """AbteeX SovereignCode local-first coding agent with Data Capsule sovereignty controls."""
2
- from .policy import Decision, evaluate, load_capsule, load_policy, load_request
3
- from .audit import AuditRecord, build_audit_record, request_hash
 
 
 
 
 
 
 
4
 
5
  __all__ = [
6
- "Decision",
7
- "evaluate",
8
- "load_capsule",
9
- "load_policy",
10
- "load_request",
11
  "AuditRecord",
 
 
 
 
 
 
12
  "build_audit_record",
13
- "request_hash",
14
  ]
15
- __version__ = "0.1.0"
 
1
+ from __future__ import annotations
2
+
3
+ from .audit import AuditRecord, build_audit_record
4
+ from .planner import SovereignCodingTurnPlan, ToolGrant, plan_coding_turn
5
+ from .policy import (
6
+ DataCapsule,
7
+ PolicyDecision,
8
+ SovereignRequest,
9
+ SovereigntyPolicyEngine,
10
+ )
11
 
12
  __all__ = [
 
 
 
 
 
13
  "AuditRecord",
14
+ "DataCapsule",
15
+ "PolicyDecision",
16
+ "SovereignRequest",
17
+ "SovereignCodingTurnPlan",
18
+ "SovereigntyPolicyEngine",
19
+ "ToolGrant",
20
  "build_audit_record",
21
+ "plan_coding_turn",
22
  ]
 
sovereigncode/audit.py CHANGED
@@ -1,51 +1,61 @@
1
- """Audit ledger primitives.
2
-
3
- Every policy decision creates a record. Records are hash-stable, append-only,
4
- and chainable for tamper-evident exports.
5
- """
6
  from __future__ import annotations
7
 
8
  import hashlib
9
- import json
10
- from dataclasses import asdict, dataclass, field
11
- from datetime import datetime, timezone
12
- from typing import Any, Dict, List
13
-
14
-
15
- def _canonical(obj: Any) -> str:
16
- return json.dumps(obj, sort_keys=True, separators=(",", ":"), ensure_ascii=False)
17
 
 
18
 
19
- def request_hash(request: Dict[str, Any]) -> str:
20
- return hashlib.sha256(_canonical(request).encode("utf-8")).hexdigest()
21
 
22
-
23
- @dataclass
24
  class AuditRecord:
 
25
  capsule_id: str
26
  actor: str
27
  purpose: str
28
  action: str
29
  model_id: str
30
- decision: str
31
- reasons: List[str]
32
- obligations: List[str]
 
33
  request_hash: str
34
- timestamp: str = field(default_factory=lambda: datetime.now(timezone.utc).isoformat(timespec="seconds"))
35
-
36
- def to_dict(self) -> Dict[str, Any]:
37
- return asdict(self)
38
-
39
 
40
- def build_audit_record(capsule: Dict[str, Any], request: Dict[str, Any], decision_dict: Dict[str, Any]) -> AuditRecord:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  return AuditRecord(
42
- capsule_id=str(capsule.get("capsule_id", "")),
43
- actor=str(request.get("actor", "")),
44
- purpose=str(request.get("purpose", "")),
45
- action=str(request.get("action", "")),
46
- model_id=str(request.get("model_id", "")),
47
- decision=str(decision_dict.get("decision", "")),
48
- reasons=list(decision_dict.get("reasons", [])),
49
- obligations=list(decision_dict.get("obligations", [])),
50
- request_hash=request_hash(request),
 
 
51
  )
 
 
 
 
 
 
1
  from __future__ import annotations
2
 
3
  import hashlib
4
+ from dataclasses import dataclass
5
+ from datetime import UTC, datetime
6
+ from typing import Any
 
 
 
 
 
7
 
8
+ from .policy import DataCapsule, PolicyDecision, SovereignRequest
9
 
 
 
10
 
11
+ @dataclass(frozen=True, slots=True)
 
12
  class AuditRecord:
13
+ timestamp: str
14
  capsule_id: str
15
  actor: str
16
  purpose: str
17
  action: str
18
  model_id: str
19
+ allowed: bool
20
+ reasons: tuple[str, ...]
21
+ obligations: tuple[str, ...]
22
+ audit_tags: tuple[str, ...]
23
  request_hash: str
 
 
 
 
 
24
 
25
+ def to_dict(self) -> dict[str, Any]:
26
+ return {
27
+ "timestamp": self.timestamp,
28
+ "capsule_id": self.capsule_id,
29
+ "actor": self.actor,
30
+ "purpose": self.purpose,
31
+ "action": self.action,
32
+ "model_id": self.model_id,
33
+ "allowed": self.allowed,
34
+ "reasons": list(self.reasons),
35
+ "obligations": list(self.obligations),
36
+ "audit_tags": list(self.audit_tags),
37
+ "request_hash": self.request_hash,
38
+ }
39
+
40
+
41
+ def build_audit_record(
42
+ capsule: DataCapsule,
43
+ request: SovereignRequest,
44
+ decision: PolicyDecision,
45
+ ) -> AuditRecord:
46
+ digest = hashlib.sha256(
47
+ repr((capsule.to_dict(), request.to_dict(), decision.to_dict())).encode("utf-8"),
48
+ ).hexdigest()
49
  return AuditRecord(
50
+ timestamp=datetime.now(UTC).isoformat(),
51
+ capsule_id=capsule.capsule_id,
52
+ actor=request.actor,
53
+ purpose=request.purpose,
54
+ action=request.action,
55
+ model_id=request.model_id,
56
+ allowed=decision.allowed,
57
+ reasons=decision.reasons,
58
+ obligations=decision.obligations,
59
+ audit_tags=decision.audit_tags,
60
+ request_hash=digest,
61
  )
sovereigncode/cli.py CHANGED
@@ -1,47 +1,107 @@
1
- """SovereignCode CLI: evaluate a request against a capsule and policy."""
2
  from __future__ import annotations
3
 
4
  import argparse
5
  import json
6
- import sys
7
  from pathlib import Path
 
 
 
 
 
8
 
9
  from .audit import build_audit_record
10
- from .policy import evaluate, load_capsule, load_policy, load_request
 
11
 
12
 
13
- DEFAULT_POLICY = Path(__file__).parent.parent / "configs" / "default_policy.yaml"
 
 
 
 
 
 
 
 
14
 
15
 
16
- def main() -> int:
17
- parser = argparse.ArgumentParser(prog="sovereigncode", description="AbteeX SovereignCode — Data Capsule policy evaluator.")
18
- sub = parser.add_subparsers(dest="cmd", required=True)
 
 
 
 
 
 
19
 
20
- ev = sub.add_parser("evaluate", help="Evaluate a request against a capsule.")
21
- ev.add_argument("--capsule", required=True, help="Path to capsule JSON.")
22
- ev.add_argument("--request", required=True, help="Path to request JSON.")
23
- ev.add_argument("--policy", default=str(DEFAULT_POLICY), help="Path to policy YAML (default: configs/default_policy.yaml).")
24
- ev.add_argument("--allow-denied-exit-zero", action="store_true", help="Exit 0 even when the decision is deny (useful for examples).")
25
 
26
- args = parser.parse_args()
 
 
 
 
 
 
 
27
 
28
- if args.cmd == "evaluate":
29
- capsule = load_capsule(args.capsule)
30
- request = load_request(args.request)
31
- policy = load_policy(args.policy)
32
- decision = evaluate(capsule, request, policy)
33
- audit = build_audit_record(capsule, request, decision.to_dict())
34
- out = {
35
- "decision": decision.to_dict(),
36
- "audit": audit.to_dict(),
37
- }
38
- print(json.dumps(out, indent=2, ensure_ascii=False))
39
- if not decision.allowed and not args.allow_denied_exit_zero:
40
- return 2
41
- return 0
42
 
43
- return 1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
 
46
  if __name__ == "__main__":
47
- sys.exit(main())
 
 
1
  from __future__ import annotations
2
 
3
  import argparse
4
  import json
5
+ from collections.abc import Sequence
6
  from pathlib import Path
7
+ from typing import Any
8
+
9
+ import yaml
10
+
11
+ from marama_route import RoutingRequest, load_model_registry
12
 
13
  from .audit import build_audit_record
14
+ from .planner import plan_coding_turn
15
+ from .policy import DataCapsule, SovereignRequest, SovereigntyPolicyEngine
16
 
17
 
18
+ def _load_mapping(path: Path) -> dict[str, Any]:
19
+ text = path.read_text(encoding="utf-8-sig")
20
+ if path.suffix.lower() == ".json":
21
+ payload = json.loads(text)
22
+ else:
23
+ payload = yaml.safe_load(text)
24
+ if not isinstance(payload, dict):
25
+ raise ValueError(f"Expected mapping in {path}")
26
+ return payload
27
 
28
 
29
+ def _evaluate(args: argparse.Namespace) -> int:
30
+ capsule = DataCapsule.from_payload(_load_mapping(args.capsule))
31
+ request = SovereignRequest.from_payload(_load_mapping(args.request))
32
+ decision = SovereigntyPolicyEngine().evaluate(capsule, request)
33
+ payload: dict[str, Any] = {"decision": decision.to_dict()}
34
+ if args.audit:
35
+ payload["audit_record"] = build_audit_record(capsule, request, decision).to_dict()
36
+ print(json.dumps(payload, indent=2, sort_keys=True))
37
+ return 0 if decision.allowed or args.allow_denied_exit_zero else 2
38
 
 
 
 
 
 
39
 
40
+ def _plan_turn(args: argparse.Namespace) -> int:
41
+ capsule = DataCapsule.from_payload(_load_mapping(args.capsule))
42
+ request = SovereignRequest.from_payload(_load_mapping(args.request))
43
+ routing_request = RoutingRequest.from_payload(_load_mapping(args.route_request))
44
+ models = load_model_registry(args.registry)
45
+ plan = plan_coding_turn(capsule, request, routing_request, models)
46
+ print(json.dumps(plan.to_dict(), indent=2, sort_keys=True))
47
+ return 0 if plan.allowed or args.allow_blocked_exit_zero else 2
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
+ def build_parser() -> argparse.ArgumentParser:
51
+ parser = argparse.ArgumentParser(
52
+ prog="abteex-sovereigncode",
53
+ description="Evaluate AbteeX SovereignCode Data Capsule policies.",
54
+ )
55
+ subparsers = parser.add_subparsers(dest="command")
56
+ evaluate = subparsers.add_parser("evaluate", help="Evaluate a governed code/data request.")
57
+ evaluate.add_argument("--capsule", type=Path, required=True, help="Data Capsule JSON/YAML file.")
58
+ evaluate.add_argument("--request", type=Path, required=True, help="Sovereign request JSON/YAML file.")
59
+ evaluate.add_argument("--audit", action=argparse.BooleanOptionalAction, default=True)
60
+ evaluate.add_argument(
61
+ "--allow-denied-exit-zero",
62
+ action=argparse.BooleanOptionalAction,
63
+ default=False,
64
+ help="Return exit code 0 even when policy denies the request.",
65
+ )
66
+ evaluate.set_defaults(handler=_evaluate)
67
+
68
+ plan_turn = subparsers.add_parser(
69
+ "plan-turn",
70
+ help="Plan a governed coding-agent turn with model routing.",
71
+ )
72
+ plan_turn.add_argument("--capsule", type=Path, required=True, help="Data Capsule JSON/YAML file.")
73
+ plan_turn.add_argument("--request", type=Path, required=True, help="Sovereign request JSON/YAML file.")
74
+ plan_turn.add_argument(
75
+ "--route-request",
76
+ type=Path,
77
+ required=True,
78
+ help="MaramaRoute routing request JSON/YAML file.",
79
+ )
80
+ plan_turn.add_argument(
81
+ "--registry",
82
+ type=Path,
83
+ required=True,
84
+ help="MaramaRoute model registry JSON.",
85
+ )
86
+ plan_turn.add_argument(
87
+ "--allow-blocked-exit-zero",
88
+ action=argparse.BooleanOptionalAction,
89
+ default=False,
90
+ help="Return exit code 0 even when the planned turn is blocked.",
91
+ )
92
+ plan_turn.set_defaults(handler=_plan_turn)
93
+ return parser
94
+
95
+
96
+ def main(argv: Sequence[str] | None = None) -> int:
97
+ parser = build_parser()
98
+ args = parser.parse_args(argv)
99
+ handler = getattr(args, "handler", None)
100
+ if handler is None:
101
+ parser.print_help()
102
+ return 0
103
+ return int(handler(args))
104
 
105
 
106
  if __name__ == "__main__":
107
+ raise SystemExit(main())
sovereigncode/planner.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any
5
+
6
+ from marama_route import (
7
+ ModelEndpoint,
8
+ RouteDecision,
9
+ RoutingRequest,
10
+ SovereignModelRouter,
11
+ )
12
+
13
+ from .audit import AuditRecord, build_audit_record
14
+ from .policy import (
15
+ DataCapsule,
16
+ PolicyDecision,
17
+ SovereignRequest,
18
+ SovereigntyPolicyEngine,
19
+ )
20
+
21
+
22
+ @dataclass(frozen=True, slots=True)
23
+ class ToolGrant:
24
+ tool: str
25
+ allowed: bool
26
+ reason: str
27
+
28
+ def to_dict(self) -> dict[str, Any]:
29
+ return {
30
+ "tool": self.tool,
31
+ "allowed": self.allowed,
32
+ "reason": self.reason,
33
+ }
34
+
35
+
36
+ @dataclass(frozen=True, slots=True)
37
+ class SovereignCodingTurnPlan:
38
+ allowed: bool
39
+ policy_decision: PolicyDecision
40
+ audit_record: AuditRecord
41
+ route_decision: RouteDecision | None
42
+ tool_grants: tuple[ToolGrant, ...]
43
+ obligations: tuple[str, ...]
44
+ blocked_reasons: tuple[str, ...]
45
+ integration_targets: tuple[str, ...]
46
+
47
+ def to_dict(self) -> dict[str, Any]:
48
+ return {
49
+ "allowed": self.allowed,
50
+ "policy_decision": self.policy_decision.to_dict(),
51
+ "audit_record": self.audit_record.to_dict(),
52
+ "route_decision": (
53
+ self.route_decision.to_dict() if self.route_decision is not None else None
54
+ ),
55
+ "tool_grants": [grant.to_dict() for grant in self.tool_grants],
56
+ "obligations": list(self.obligations),
57
+ "blocked_reasons": list(self.blocked_reasons),
58
+ "integration_targets": list(self.integration_targets),
59
+ }
60
+
61
+
62
+ def plan_coding_turn(
63
+ capsule: DataCapsule,
64
+ request: SovereignRequest,
65
+ routing_request: RoutingRequest,
66
+ models: tuple[ModelEndpoint, ...],
67
+ ) -> SovereignCodingTurnPlan:
68
+ """Plan one governed coding-agent turn against policy and model routing."""
69
+
70
+ policy_decision = SovereigntyPolicyEngine().evaluate(capsule, request)
71
+ audit_record = build_audit_record(capsule, request, policy_decision)
72
+ route_decision: RouteDecision | None = None
73
+ blocked_reasons = list(policy_decision.reasons)
74
+
75
+ if policy_decision.allowed:
76
+ route_decision = SovereignModelRouter(models).route(routing_request)
77
+ if route_decision.selected_model is None:
78
+ blocked_reasons.extend(route_decision.reasons)
79
+
80
+ tool_grants = _build_tool_grants(request, policy_decision)
81
+ allowed = policy_decision.allowed and route_decision is not None
82
+ allowed = allowed and route_decision.selected_model is not None
83
+
84
+ return SovereignCodingTurnPlan(
85
+ allowed=allowed,
86
+ policy_decision=policy_decision,
87
+ audit_record=audit_record,
88
+ route_decision=route_decision,
89
+ tool_grants=tool_grants,
90
+ obligations=policy_decision.obligations,
91
+ blocked_reasons=tuple(dict.fromkeys(blocked_reasons)),
92
+ integration_targets=(
93
+ "opencode_openai_compatible_provider",
94
+ "openrouter_style_gateway",
95
+ "local_cli_agent",
96
+ ),
97
+ )
98
+
99
+
100
+ def _build_tool_grants(
101
+ request: SovereignRequest,
102
+ decision: PolicyDecision,
103
+ ) -> tuple[ToolGrant, ...]:
104
+ if not decision.allowed:
105
+ return (
106
+ ToolGrant("read_workspace", False, "blocked by policy decision"),
107
+ ToolGrant("write_files", False, "blocked by policy decision"),
108
+ ToolGrant("execute_shell", False, "blocked by policy decision"),
109
+ ToolGrant("network_export", False, "blocked by policy decision"),
110
+ )
111
+
112
+ return (
113
+ ToolGrant("read_workspace", True, "policy allows governed context read"),
114
+ ToolGrant(
115
+ "write_files",
116
+ request.writes_files,
117
+ "allowed only with visible diff and audit obligation",
118
+ ),
119
+ ToolGrant(
120
+ "execute_shell",
121
+ request.action == "execute_shell" and request.human_approved,
122
+ "requires explicit human approval",
123
+ ),
124
+ ToolGrant(
125
+ "network_export",
126
+ request.exports_data and request.human_approved,
127
+ "requires export permission, manifest, and approval",
128
+ ),
129
+ )
sovereigncode/policy.py CHANGED
@@ -1,115 +1,290 @@
1
- """Deterministic Data Capsule policy decision point (PDP).
2
-
3
- Answers, for every sensitive action: can this actor, for this purpose, in this
4
- region, using this model/tool, touch this capsule?
5
-
6
- Returns one of three outcomes: allow, deny, or allow_with_obligations.
7
- """
8
  from __future__ import annotations
9
 
10
- import json
11
  from dataclasses import dataclass, field
12
- from pathlib import Path
13
- from typing import Any, Dict, List
14
 
15
- try:
16
- import yaml # type: ignore
17
- except ImportError: # pragma: no cover
18
- yaml = None
 
 
 
 
 
19
 
20
 
21
- @dataclass
22
- class Decision:
23
- allowed: bool
24
- decision: str # "allow" | "deny" | "allow_with_obligations"
25
- reasons: List[str] = field(default_factory=list)
26
- obligations: List[str] = field(default_factory=list)
 
 
 
 
 
 
 
 
 
 
27
 
28
- def to_dict(self) -> Dict[str, Any]:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  return {
30
- "allowed": self.allowed,
31
- "decision": self.decision,
32
- "reasons": list(self.reasons),
33
- "obligations": list(self.obligations),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
 
36
 
37
- def _load_yaml_or_json(path: Path) -> Dict[str, Any]:
38
- text = path.read_text(encoding="utf-8")
39
- if path.suffix.lower() in (".yaml", ".yml"):
40
- if yaml is None:
41
- raise RuntimeError("pyyaml is required to load YAML policies. `pip install pyyaml`.")
42
- return yaml.safe_load(text)
43
- return json.loads(text)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
- def load_capsule(path: str | Path) -> Dict[str, Any]:
47
- return _load_yaml_or_json(Path(path))
48
 
 
 
 
 
 
 
49
 
50
- def load_request(path: str | Path) -> Dict[str, Any]:
51
- return _load_yaml_or_json(Path(path))
 
 
 
 
 
52
 
53
 
54
- def load_policy(path: str | Path) -> Dict[str, Any]:
55
- return _load_yaml_or_json(Path(path))
56
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
- def evaluate(capsule: Dict[str, Any], request: Dict[str, Any], policy: Dict[str, Any]) -> Decision:
59
- reasons: List[str] = []
60
- obligations: List[str] = list(policy.get("default_obligations", []))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
- purpose = request.get("purpose")
63
- if purpose in capsule.get("denied_purposes", []):
64
- reasons.append(f"purpose `{purpose}` is in capsule.denied_purposes")
65
- return Decision(False, "deny", reasons, obligations)
 
 
66
 
67
- allowed_purposes = capsule.get("allowed_purposes", [])
68
- if allowed_purposes and purpose not in allowed_purposes:
69
- reasons.append(f"purpose `{purpose}` is not in capsule.allowed_purposes")
70
- return Decision(False, "deny", reasons, obligations)
71
 
72
- region = request.get("region")
73
- resident_regions = capsule.get("resident_regions", [])
74
- if region and resident_regions and region not in resident_regions:
75
- reasons.append(f"region `{region}` is not in capsule.resident_regions `{resident_regions}`")
76
- return Decision(False, "deny", reasons, obligations)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
- sensitivity = str(capsule.get("sensitivity", "")).lower()
79
- high_sensitivity = set(map(str.lower, policy.get("high_impact_sensitivity", [])))
80
- is_high = sensitivity in high_sensitivity
81
- requires_local = (
82
- policy.get("remote_model_rule", {}).get("restricted_data_requires_local_or_lumynax")
83
- and is_high
84
- )
85
- model_id = str(request.get("model_id", "")).lower()
86
- if requires_local and not (model_id.startswith("local/") or "lumynax" in model_id):
87
- reasons.append("restricted data requires a local or LumynaX-governed model")
88
- return Decision(False, "deny", reasons, obligations)
89
-
90
- if request.get("trains_model"):
91
- rule = policy.get("training_rule", {})
92
- if rule.get("requires_capsule_training_allowed") and not capsule.get("training_allowed", False):
93
- reasons.append("training_rule requires capsule.training_allowed = true")
94
- return Decision(False, "deny", reasons, obligations)
95
-
96
- if request.get("exports_data"):
97
- rule = policy.get("export_rule", {})
98
- if rule.get("requires_capsule_export_allowed") and not capsule.get("export_allowed", False):
99
- reasons.append("export_rule requires capsule.export_allowed = true")
100
- return Decision(False, "deny", reasons, obligations)
101
-
102
- denied_without_approval = set(policy.get("denied_without_human_approval", []))
103
- action = request.get("action")
104
- if action in denied_without_approval and not request.get("human_approved", False):
105
- reasons.append(f"action `{action}` requires human approval")
106
- return Decision(False, "deny", reasons, obligations)
107
-
108
- if request.get("writes_files"):
109
- obligations.append("show_diff_before_write_or_commit")
110
- if is_high:
111
- obligations.append("route_to_local_or_lumynax_model")
112
-
113
- obligations = sorted(set(obligations))
114
- reasons.append(f"capsule {capsule.get('capsule_id')} permits purpose `{purpose}` in region `{region}`")
115
- return Decision(True, "allow_with_obligations" if obligations else "allow", reasons, obligations)
 
 
 
 
 
 
 
 
1
  from __future__ import annotations
2
 
 
3
  from dataclasses import dataclass, field
4
+ from typing import Any
 
5
 
6
+ HIGH_IMPACT_SENSITIVITY = frozenset({"personal", "restricted", "health", "iwi", "taonga"})
7
+ DESTRUCTIVE_ACTIONS = frozenset({"delete_file", "execute_shell", "network_export", "publish", "commit"})
8
+ PERSONAL_DETAIL_LEVELS = {
9
+ "none": 0,
10
+ "anonymous": 1,
11
+ "pseudonymous": 2,
12
+ "identifiable": 3,
13
+ "sensitive_identifiable": 4,
14
+ }
15
 
16
 
17
+ def _tuple_of_text(value: object, *, default: tuple[str, ...] = ()) -> tuple[str, ...]:
18
+ if value in (None, ""):
19
+ return default
20
+ if isinstance(value, str):
21
+ return (value,)
22
+ if isinstance(value, (list, tuple, set)):
23
+ return tuple(str(item).strip() for item in value if str(item).strip())
24
+ return (str(value).strip(),)
25
+
26
+
27
+ def _normal(value: str) -> str:
28
+ return value.strip().lower().replace(" ", "_").replace("-", "_")
29
+
30
+
31
+ def _personal_detail_rank(value: str) -> int:
32
+ return PERSONAL_DETAIL_LEVELS.get(_normal(value), 0)
33
 
34
+
35
+ @dataclass(frozen=True, slots=True)
36
+ class DataCapsule:
37
+ """Policy wrapper for a governed data subject, dataset, or workspace."""
38
+
39
+ capsule_id: str
40
+ subject_id: str
41
+ jurisdiction: str = "NZ"
42
+ sensitivity: str = "internal"
43
+ allowed_purposes: tuple[str, ...] = ("inference", "coding_assistance")
44
+ denied_purposes: tuple[str, ...] = ()
45
+ resident_regions: tuple[str, ...] = ("NZ",)
46
+ data_classes: tuple[str, ...] = ("source_code",)
47
+ retention_days: int = 30
48
+ export_allowed: bool = False
49
+ training_allowed: bool = False
50
+ personal_detail_level: str = "none"
51
+ consent_scopes: tuple[str, ...] = ()
52
+ data_subject_rights: tuple[str, ...] = (
53
+ "access",
54
+ "correction",
55
+ "deletion_request",
56
+ "processing_objection",
57
+ )
58
+ revoked: bool = False
59
+ schema_context: str = "https://schema.org"
60
+ consent_record: str = ""
61
+ metadata: dict[str, Any] = field(default_factory=dict)
62
+
63
+ @classmethod
64
+ def from_payload(cls, payload: dict[str, Any]) -> DataCapsule:
65
+ return cls(
66
+ capsule_id=str(payload.get("capsule_id") or payload.get("id") or ""),
67
+ subject_id=str(payload.get("subject_id") or payload.get("subject") or ""),
68
+ jurisdiction=str(payload.get("jurisdiction") or "NZ"),
69
+ sensitivity=_normal(str(payload.get("sensitivity") or "internal")),
70
+ allowed_purposes=tuple(_normal(item) for item in _tuple_of_text(payload.get("allowed_purposes"), default=("inference",))),
71
+ denied_purposes=tuple(_normal(item) for item in _tuple_of_text(payload.get("denied_purposes"))),
72
+ resident_regions=tuple(str(item).upper() for item in _tuple_of_text(payload.get("resident_regions"), default=("NZ",))),
73
+ data_classes=tuple(_normal(item) for item in _tuple_of_text(payload.get("data_classes"), default=("source_code",))),
74
+ retention_days=int(payload.get("retention_days") or 30),
75
+ export_allowed=bool(payload.get("export_allowed", False)),
76
+ training_allowed=bool(payload.get("training_allowed", False)),
77
+ personal_detail_level=_normal(
78
+ str(payload.get("personal_detail_level") or "none"),
79
+ ),
80
+ consent_scopes=tuple(
81
+ _normal(item) for item in _tuple_of_text(payload.get("consent_scopes"))
82
+ ),
83
+ data_subject_rights=tuple(
84
+ _normal(item)
85
+ for item in _tuple_of_text(
86
+ payload.get("data_subject_rights"),
87
+ default=(
88
+ "access",
89
+ "correction",
90
+ "deletion_request",
91
+ "processing_objection",
92
+ ),
93
+ )
94
+ ),
95
+ revoked=bool(payload.get("revoked", False)),
96
+ schema_context=str(payload.get("schema_context") or "https://schema.org"),
97
+ consent_record=str(payload.get("consent_record") or ""),
98
+ metadata=dict(payload.get("metadata") or {}),
99
+ )
100
+
101
+ def to_dict(self) -> dict[str, Any]:
102
  return {
103
+ "capsule_id": self.capsule_id,
104
+ "subject_id": self.subject_id,
105
+ "jurisdiction": self.jurisdiction,
106
+ "sensitivity": self.sensitivity,
107
+ "allowed_purposes": list(self.allowed_purposes),
108
+ "denied_purposes": list(self.denied_purposes),
109
+ "resident_regions": list(self.resident_regions),
110
+ "data_classes": list(self.data_classes),
111
+ "retention_days": self.retention_days,
112
+ "export_allowed": self.export_allowed,
113
+ "training_allowed": self.training_allowed,
114
+ "personal_detail_level": self.personal_detail_level,
115
+ "consent_scopes": list(self.consent_scopes),
116
+ "data_subject_rights": list(self.data_subject_rights),
117
+ "revoked": self.revoked,
118
+ "schema_context": self.schema_context,
119
+ "consent_record": self.consent_record,
120
+ "metadata": dict(self.metadata),
121
  }
122
 
123
 
124
+ @dataclass(frozen=True, slots=True)
125
+ class SovereignRequest:
126
+ actor: str
127
+ purpose: str
128
+ action: str
129
+ region: str = "NZ"
130
+ model_id: str = "local/lumynax"
131
+ data_classes: tuple[str, ...] = ("source_code",)
132
+ tool_name: str = ""
133
+ writes_files: bool = False
134
+ exports_data: bool = False
135
+ trains_model: bool = False
136
+ human_approved: bool = False
137
+ personal_detail_level: str = "none"
138
+ consent_scope: str = ""
139
+ requested_retention_days: int | None = None
140
+ metadata: dict[str, Any] = field(default_factory=dict)
141
+
142
+ @classmethod
143
+ def from_payload(cls, payload: dict[str, Any]) -> SovereignRequest:
144
+ return cls(
145
+ actor=str(payload.get("actor") or "unknown"),
146
+ purpose=_normal(str(payload.get("purpose") or "inference")),
147
+ action=_normal(str(payload.get("action") or "read_context")),
148
+ region=str(payload.get("region") or "NZ").upper(),
149
+ model_id=str(payload.get("model_id") or "local/lumynax"),
150
+ data_classes=tuple(_normal(item) for item in _tuple_of_text(payload.get("data_classes"), default=("source_code",))),
151
+ tool_name=str(payload.get("tool_name") or ""),
152
+ writes_files=bool(payload.get("writes_files", False)),
153
+ exports_data=bool(payload.get("exports_data", False)),
154
+ trains_model=bool(payload.get("trains_model", False)),
155
+ human_approved=bool(payload.get("human_approved", False)),
156
+ personal_detail_level=_normal(
157
+ str(payload.get("personal_detail_level") or "none"),
158
+ ),
159
+ consent_scope=_normal(str(payload.get("consent_scope") or "")),
160
+ requested_retention_days=(
161
+ int(payload["requested_retention_days"])
162
+ if payload.get("requested_retention_days") is not None
163
+ else None
164
+ ),
165
+ metadata=dict(payload.get("metadata") or {}),
166
+ )
167
 
168
+ def to_dict(self) -> dict[str, Any]:
169
+ return {
170
+ "actor": self.actor,
171
+ "purpose": self.purpose,
172
+ "action": self.action,
173
+ "region": self.region,
174
+ "model_id": self.model_id,
175
+ "data_classes": list(self.data_classes),
176
+ "tool_name": self.tool_name,
177
+ "writes_files": self.writes_files,
178
+ "exports_data": self.exports_data,
179
+ "trains_model": self.trains_model,
180
+ "human_approved": self.human_approved,
181
+ "personal_detail_level": self.personal_detail_level,
182
+ "consent_scope": self.consent_scope,
183
+ "requested_retention_days": self.requested_retention_days,
184
+ "metadata": dict(self.metadata),
185
+ }
186
 
 
 
187
 
188
+ @dataclass(frozen=True, slots=True)
189
+ class PolicyDecision:
190
+ allowed: bool
191
+ reasons: tuple[str, ...]
192
+ obligations: tuple[str, ...]
193
+ audit_tags: tuple[str, ...]
194
 
195
+ def to_dict(self) -> dict[str, Any]:
196
+ return {
197
+ "allowed": self.allowed,
198
+ "reasons": list(self.reasons),
199
+ "obligations": list(self.obligations),
200
+ "audit_tags": list(self.audit_tags),
201
+ }
202
 
203
 
204
+ class SovereigntyPolicyEngine:
205
+ """Deterministic policy decision point for AbteeX SovereignCode."""
206
 
207
+ def evaluate(self, capsule: DataCapsule, request: SovereignRequest) -> PolicyDecision:
208
+ reasons: list[str] = []
209
+ obligations: list[str] = [
210
+ "write_immutable_audit_record",
211
+ f"retain_trace_no_more_than_{capsule.retention_days}_days",
212
+ "preserve_capsule_id_in_agent_trace",
213
+ ]
214
+ audit_tags: list[str] = [
215
+ f"jurisdiction:{capsule.jurisdiction.upper()}",
216
+ f"sensitivity:{capsule.sensitivity}",
217
+ f"purpose:{request.purpose}",
218
+ ]
219
 
220
+ if capsule.revoked:
221
+ reasons.append("capsule consent has been revoked")
222
+ if request.purpose in capsule.denied_purposes:
223
+ reasons.append(f"purpose `{request.purpose}` is explicitly denied")
224
+ if request.purpose not in capsule.allowed_purposes:
225
+ reasons.append(f"purpose `{request.purpose}` is not in allowed_purposes")
226
+ if request.region.upper() not in capsule.resident_regions:
227
+ reasons.append(f"request region `{request.region}` is outside resident_regions")
228
+ if request.trains_model and not capsule.training_allowed:
229
+ reasons.append("model training is not allowed for this capsule")
230
+ if request.exports_data and not capsule.export_allowed:
231
+ reasons.append("data export is not allowed for this capsule")
232
+ if request.requested_retention_days and request.requested_retention_days > capsule.retention_days:
233
+ reasons.append("requested retention exceeds capsule retention_days")
234
+ if not set(request.data_classes).issubset(set(capsule.data_classes)):
235
+ reasons.append("request data_classes exceed capsule data_classes")
236
+ if _personal_detail_rank(request.personal_detail_level) > _personal_detail_rank(
237
+ capsule.personal_detail_level,
238
+ ):
239
+ reasons.append("requested personal_detail_level exceeds capsule consent")
240
+ if (
241
+ request.consent_scope
242
+ and capsule.consent_scopes
243
+ and request.consent_scope not in capsule.consent_scopes
244
+ ):
245
+ reasons.append("request consent_scope is not covered by the capsule")
246
 
247
+ model_is_lumynax_or_local = any(
248
+ marker in request.model_id.lower()
249
+ for marker in ("lumynax", "local", "llama.cpp", "gguf")
250
+ )
251
+ if capsule.sensitivity in HIGH_IMPACT_SENSITIVITY and not model_is_lumynax_or_local:
252
+ reasons.append("high-impact data requires a local or LumynaX-governed model")
253
 
254
+ if request.action in DESTRUCTIVE_ACTIONS and not request.human_approved:
255
+ reasons.append(f"action `{request.action}` requires human approval")
 
 
256
 
257
+ if request.writes_files:
258
+ obligations.append("show_diff_before_write_or_commit")
259
+ if request.exports_data:
260
+ obligations.append("attach_export_manifest_and_recipient")
261
+ if request.trains_model:
262
+ obligations.append("attach_training_consent_record")
263
+ if capsule.sensitivity in HIGH_IMPACT_SENSITIVITY:
264
+ obligations.extend(
265
+ (
266
+ "redact_unneeded_personal_data",
267
+ "route_only_to_resident_runtime",
268
+ "require_human_review_for_external_effects",
269
+ ),
270
+ )
271
+ if "personal" in capsule.data_classes or capsule.sensitivity == "personal":
272
+ obligations.extend(
273
+ (
274
+ "honour_data_subject_access_and_correction",
275
+ "minimise_personal_detail_in_prompt",
276
+ "keep_personal_trace_inside_capsule_retention",
277
+ ),
278
+ )
279
 
280
+ allowed = not reasons
281
+ if not allowed:
282
+ audit_tags.append("decision:deny")
283
+ else:
284
+ audit_tags.append("decision:allow")
285
+ return PolicyDecision(
286
+ allowed=allowed,
287
+ reasons=tuple(reasons),
288
+ obligations=tuple(dict.fromkeys(obligations)),
289
+ audit_tags=tuple(dict.fromkeys(audit_tags)),
290
+ )