omnius 1.0.641 → 1.0.643

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4473,7 +4473,7 @@
4473
4473
  "tags": [
4474
4474
  "Audio"
4475
4475
  ],
4476
- "description": "Managed inference contract: {session_id,file,asset_digest?,channel?,sample_rate_hz?,timeout_ms?}. It accepts only a retained mono PCM16/16 kHz WAV greater than 0 and at most 6 seconds. The persistent worker is limited to one active job plus one queued job; cancellation terminates it before clearing both. Output is omnius.speaker-diarization.v1 SpeakerTurnSpan[] with start_ms/end_ms/channel, explicit overlap, and labels scoped only to session_id; spans may populate audio_observation.diarizationClusterId but cannot create durable identities. Inference never installs, downloads, or starts an unready worker.",
4476
+ "description": "Managed inference contract: {session_id,file,asset_digest?,channel?,sample_rate_hz?,timeout_ms?}. It accepts only a retained mono PCM16/16 kHz WAV greater than 0 and at most 6 seconds. The controller is limited to one active job plus one queued job; cancellation terminates its process group before clearing both. Output is omnius.speaker-diarization.v1 SpeakerTurnSpan[] with explicit overlap and session-local labels. Inference may activate an already-provisioned runtime but never installs packages, builds code, or downloads model bytes.",
4477
4477
  "responses": {
4478
4478
  "200": {
4479
4479
  "description": "Typed managed diarization spans."
@@ -4631,7 +4631,7 @@
4631
4631
  "tags": [
4632
4632
  "Audio"
4633
4633
  ],
4634
- "description": "Non-mutating readiness for NVIDIA diar_streaming_sortformer_4spk-v2. It never downloads, installs, creates environments, or loads a model. 200 requires a persistent worker that has proved it loaded the operator-verified local .nemo snapshot with the validated Orin CUDA Python runtime; otherwise this returns typed 503. The output contract is typed speaker-turn spans with explicit overlap and session-local labels only; those labels are never durable identities.",
4634
+ "description": "Non-mutating readiness for NVIDIA diar_streaming_sortformer_4spk-v2. It never downloads, installs, creates environments, or loads a model. Managed JetPack setup pins NVIDIA's Q8 GGUF plus NeMo-Speech.cpp source revision and keeps one persistent worker/controller serialized; operator-provided .nemo/Python snapshots remain supported. 200 requires the verified runtime worker to be active. Session-local labels are never durable identities.",
4635
4635
  "responses": {
4636
4636
  "200": {
4637
4637
  "description": "Verified local snapshot and warm managed live worker."
@@ -4651,7 +4651,7 @@
4651
4651
  "id": "api.v1-audio-diarization-live-setup",
4652
4652
  "kind": "api",
4653
4653
  "title": "/v1/audio/diarization/live/setup",
4654
- "summary": "Verify and activate a local live-diarization runtime",
4654
+ "summary": "Provision and activate live Sortformer on JetPack",
4655
4655
  "aliases": [
4656
4656
  "/v1/audio/diarization/live/setup"
4657
4657
  ],
@@ -4703,32 +4703,28 @@
4703
4703
  ],
4704
4704
  "operations": {
4705
4705
  "post": {
4706
- "summary": "Verify and activate a local live-diarization runtime",
4706
+ "summary": "Provision and activate live Sortformer on JetPack",
4707
4707
  "tags": [
4708
4708
  "Audio"
4709
4709
  ],
4710
- "description": "Admin-only. Body requires absolute snapshot_path and an absolute python_path (or OMNIUS_DIAR_LIVE_PYTHON). The manifest must be omnius.audio-diarization-model-snapshot.v1 for nvidia/diar_streaming_sortformer_4spk-v2 with a full immutable 40- or 64-hex revision, relative artifact path, and sha256:<digest>. Setup streams those exact local bytes, validates the supplied Python imports plus Jetson Orin CUDA:0 CC 8.7, and warms the persistent worker. It never downloads NeMo, CUDA, model weights, or dependencies; exact runtime prerequisites are rejected rather than guessed.",
4710
+ "description": "Admin-only and asynchronous. An empty JSON object provisions the pinned public Q8 Sortformer artifact and builds an immutable-revision CUDA NeMo-Speech.cpp runtime under ~/.omnius without modifying JetPack Torch. Poll readiness after HTTP 202. Advanced operators may instead provide snapshot_path/manifest_path plus python_path for a checksum-pinned .nemo runtime. Setup may download/build; inference never does.",
4711
4711
  "requestBody": {
4712
4712
  "required": true,
4713
4713
  "content": {
4714
4714
  "application/json": {
4715
4715
  "schema": {
4716
4716
  "type": "object",
4717
- "required": [
4718
- "snapshot_path"
4719
- ],
4720
4717
  "properties": {
4721
4718
  "snapshot_path": {
4722
4719
  "type": "string",
4723
- "description": "Absolute local directory containing the operator-provided snapshot."
4720
+ "description": "Optional absolute operator snapshot; omit for managed Q8 setup."
4724
4721
  },
4725
4722
  "manifest_path": {
4726
- "type": "string",
4727
- "description": "Optional absolute manifest path; defaults to snapshot_path/omnius-model-manifest.json."
4723
+ "type": "string"
4728
4724
  },
4729
4725
  "python_path": {
4730
4726
  "type": "string",
4731
- "description": "Absolute pre-provisioned Python with NeMo and Jetson CUDA imports."
4727
+ "description": "Optional absolute external NeMo Python for an operator .nemo snapshot."
4732
4728
  }
4733
4729
  }
4734
4730
  }
@@ -4737,10 +4733,13 @@
4737
4733
  },
4738
4734
  "responses": {
4739
4735
  "200": {
4740
- "description": "Snapshot, runtime imports, and worker all verified/warm."
4736
+ "description": "Already ready."
4737
+ },
4738
+ "202": {
4739
+ "description": "Managed single-flight setup accepted; poll readiness."
4741
4740
  },
4742
4741
  "400": {
4743
- "description": "Snapshot, Python runtime, immutable manifest/digest validation, or worker warmup failed."
4742
+ "description": "Setup request or prerequisite validation failed before launch."
4744
4743
  },
4745
4744
  "403": {
4746
4745
  "description": "Admin scope required."
@@ -4812,7 +4811,7 @@
4812
4811
  "tags": [
4813
4812
  "Audio"
4814
4813
  ],
4815
- "description": "Managed offline/dream contract: {file,observation_ids,episode_id?,timeout_ms?}. file is a retained local asset and may be longer than the live six-second window. The supplied IDs refer to role-isolated AudioObservation records. The pyannote worker returns only OfflineReconciliationProposal records: a proposed diarization_cluster_id, review requirement, and durable_identity:forbidden. Inference never installs, downloads, or starts an unready worker.",
4814
+ "description": "Managed offline/dream contract: {file,observation_ids,episode_id?,timeout_ms?}. file is a retained uncompressed PCM16 WAV and may be longer than the live six-second window. The supplied IDs refer to role-isolated AudioObservation records. The pyannote worker returns only OfflineReconciliationProposal records with durable_identity:forbidden. Inference may activate the already-provisioned private CPU runtime but never installs, downloads, or modifies runtime dependencies or model bytes.",
4816
4815
  "responses": {
4817
4816
  "200": {
4818
4817
  "description": "Typed review-required reconciliation proposals and spans."
@@ -4970,7 +4969,7 @@
4970
4969
  "tags": [
4971
4970
  "Audio"
4972
4971
  ],
4973
- "description": "Non-mutating readiness for pyannote/speaker-diarization-community-1. It never downloads, installs, creates environments, or loads a model. 200 requires a persistent worker that proved it loaded the operator-supplied offline local snapshot. Community-1 snapshots must carry a deterministic files checksum map for every regular pipeline/model/config file; readiness checks that complete manifest metadata without rehashing. Reconciliation makes only reviewable cluster proposals, never durable identity claims.",
4972
+ "description": "Non-mutating readiness for pyannote/speaker-diarization-community-1. It never downloads, installs, creates environments, or loads a model. Managed setup creates a private CPU-only PyTorch/pyannote environment, leaving JetPack CUDA Torch untouched, and stores a complete checksummed offline model tree. Reconciliation makes reviewable cluster proposals, never durable identity claims.",
4974
4973
  "responses": {
4975
4974
  "200": {
4976
4975
  "description": "Verified complete local Community-1 snapshot and warm managed worker."
@@ -4990,7 +4989,7 @@
4990
4989
  "id": "api.v1-audio-diarization-reconcile-setup",
4991
4990
  "kind": "api",
4992
4991
  "title": "/v1/audio/diarization/reconcile/setup",
4993
- "summary": "Verify and activate a local reconciliation runtime",
4992
+ "summary": "Provision and activate offline Community-1 reconciliation",
4994
4993
  "aliases": [
4995
4994
  "/v1/audio/diarization/reconcile/setup"
4996
4995
  ],
@@ -5042,11 +5041,11 @@
5042
5041
  ],
5043
5042
  "operations": {
5044
5043
  "post": {
5045
- "summary": "Verify and activate a local reconciliation runtime",
5044
+ "summary": "Provision and activate offline Community-1 reconciliation",
5046
5045
  "tags": [
5047
5046
  "Audio"
5048
5047
  ],
5049
- "description": "Admin-only. Body requires absolute snapshot_path and an absolute python_path (or OMNIUS_DIAR_RECONCILE_PYTHON), plus pyannote_terms_accepted=true to attest the operator already accepted Community-1's gated terms. Omnius does not accept or persist a token: the snapshot must already be local. The manifest must pin a full immutable 40- or 64-hex revision, the primary artifact digest, and a complete files object mapping every regular pipeline/model/config file to sha256:<digest>. Setup streams/verifies those bytes, validates local pyannote imports, and warms the offline CPU worker. It never downloads pyannote, weights, or dependencies.",
5048
+ "description": "Admin-only and asynchronous. With pyannote_terms_accepted=true and OMNIUS_HF_TOKEN in the daemon environment, setup creates a private CPython 3.10 CPU runtime with pinned PyTorch/Torchaudio/pyannote versions, downloads the immutable Community-1 revision, removes setup credentials, checksums the complete offline model tree, and warms the worker. TorchCodec is deliberately omitted because it has no CPython 3.10/aarch64 wheel; the worker uses pyannote's supported in-memory waveform input for retained PCM16 WAV instead. It never modifies JetPack CUDA Torch. Operator-provided snapshot_path/python_path remains supported. Credentials are rejected in the HTTP body and are never persisted or passed to inference.",
5050
5049
  "requestBody": {
5051
5050
  "required": true,
5052
5051
  "content": {
@@ -5054,19 +5053,19 @@
5054
5053
  "schema": {
5055
5054
  "type": "object",
5056
5055
  "required": [
5057
- "snapshot_path",
5058
5056
  "pyannote_terms_accepted"
5059
5057
  ],
5060
5058
  "properties": {
5061
5059
  "snapshot_path": {
5062
- "type": "string"
5060
+ "type": "string",
5061
+ "description": "Optional operator snapshot; omit for managed gated download."
5063
5062
  },
5064
5063
  "manifest_path": {
5065
5064
  "type": "string"
5066
5065
  },
5067
5066
  "python_path": {
5068
5067
  "type": "string",
5069
- "description": "Absolute pre-provisioned Python with pyannote.audio."
5068
+ "description": "Optional pre-provisioned external pyannote Python."
5070
5069
  },
5071
5070
  "pyannote_terms_accepted": {
5072
5071
  "type": "boolean",
@@ -5081,10 +5080,13 @@
5081
5080
  },
5082
5081
  "responses": {
5083
5082
  "200": {
5084
- "description": "Complete snapshot, runtime imports, and worker all verified/warm."
5083
+ "description": "Already ready."
5084
+ },
5085
+ "202": {
5086
+ "description": "Managed single-flight setup accepted; poll readiness."
5085
5087
  },
5086
5088
  "400": {
5087
- "description": "Terms attestation, snapshot tree, Python runtime, immutable manifest validation, or worker warmup failed."
5089
+ "description": "Terms attestation, setup request, or prerequisite validation failed before launch."
5088
5090
  },
5089
5091
  "403": {
5090
5092
  "description": "Admin scope required."
@@ -5399,7 +5401,7 @@
5399
5401
  "tags": [
5400
5402
  "Audio"
5401
5403
  ],
5402
- "description": "Admin-only. Requires kind=acoustic|speaker|semantic in the query (canonical) or JSON body. acoustic reuses the pinned JetPack YAMNet/TensorRT setup; speaker creates a private CPython 3.10 CPU-only WeSpeaker CAM++ venv, installs only checksum-pinned NumPy, ONNX Runtime, and its locked CPU support wheels with --no-deps/--no-index, then downloads the pinned model. Its 80-bin Kaldi-compatible NumPy fbank is validated with a versioned cross-platform numeric-invariant probe before readiness. The speaker path never imports, links, replaces, or otherwise depends on JetPack Torch/Torchaudio, so an incompatible generic Torchaudio wheel cannot affect CUDA-enabled Egg Torch. semantic installs the isolated JetPack CUDA CLAP dependencies and pinned model. This is the only REST operation allowed to provision. It activates and warms only the requested role worker; no role is substituted for another.",
5404
+ "description": "Admin-only. Requires kind=acoustic|speaker|semantic in the query (canonical) or JSON body. acoustic reuses pinned JetPack YAMNet/TensorRT. speaker creates a private CPU-only WeSpeaker CAM++ venv with checksum-pinned NumPy/ONNX Runtime wheels and no Torch/Torchaudio dependency. semantic installs a checksum-locked CPython 3.10/aarch64 dependency closure plus the immutable CLAP revision while leaving vendor Torch untouched. Omnius never imports, links, replaces, or resolves a generic Torch package over JetPack Torch for either isolated runtime. JetPack daemon bootstrap provisions all three roles by default; OMNIUS_AUDIO_AUTO_SETUP=0 disables all and OMNIUS_SEMANTIC_AUDIO_AUTO_SETUP=0 disables CLAP. Semantic provisioning may finish under memory pressure, while activation/inference still requires the 8 GiB admission threshold and never evicts another workload. This is the only REST operation allowed to provision, and no role is substituted for another.",
5403
5405
  "parameters": [
5404
5406
  {
5405
5407
  "name": "kind",
@@ -6163,6 +6165,11 @@
6163
6165
  "default": 1,
6164
6166
  "description": "Maximum daemon-tool planning rounds. The default executes one tool round, then removes daemon schemas for lower-latency final synthesis."
6165
6167
  },
6168
+ "agent_prefetch_web_search": {
6169
+ "type": "boolean",
6170
+ "default": false,
6171
+ "description": "Explicitly execute authorized web_search with the latest user text before one backend synthesis. factual-first enables this automatically."
6172
+ },
6166
6173
  "max_turns": {
6167
6174
  "type": "integer",
6168
6175
  "description": "Q2 — agent_loop max iterations (default 8, max 64)."
@@ -6172,7 +6179,7 @@
6172
6179
  "enum": [
6173
6180
  "factual-first"
6174
6181
  ],
6175
- "description": "Q8 prepended system policy template. 'factual-first' instructs model to call web_search FIRST for any factual question."
6182
+ "description": "Factual-first prefetches authorized web_search from the latest user turn and performs one grounded synthesis generation."
6176
6183
  }
6177
6184
  }
6178
6185
  }
@@ -16814,7 +16821,7 @@
16814
16821
  "tags": [
16815
16822
  "Vision"
16816
16823
  ],
16817
- "description": "Non-mutating status for the isolated ~/.omnius/runtimes/vision/open-clip runtime. It never imports Python, installs dependencies, downloads weights, or loads a model. Returns 503 until the checksum-manifested CUDA runtime and model artifacts are ready.",
16824
+ "description": "Non-mutating status for the isolated ~/.omnius/runtimes/vision/open-clip runtime. It never imports Python, installs dependencies, downloads weights, or loads a model. It distinguishes installed/weightsReady from inferenceAvailable: a fully provisioned runtime remains HTTP 503 while Jetson unified-memory admission is temporarily blocked.",
16818
16825
  "responses": {
16819
16826
  "200": {
16820
16827
  "description": "Verified OpenCLIP runtime is ready"
@@ -16889,10 +16896,10 @@
16889
16896
  "tags": [
16890
16897
  "Vision"
16891
16898
  ],
16892
- "description": "Admin-only single-flight setup. It creates a --system-site-packages venv, requires pre-existing CUDA Torch, installs only pinned non-Torch packages with --no-deps, and fetches/verifies the OpenCLIP checkpoint. It never resolves Torch or torchvision from generic PyPI. torchvision must be inherited from the JetPack vendor stack or supplied as a checksum-pinned local wheel via OMNIUS_VISION_TORCHVISION_WHEEL and OMNIUS_VISION_TORCHVISION_WHEEL_SHA256. Poll readiness for completion or failure; the setup request never makes an embedding inference request provision dependencies.",
16899
+ "description": "Admin-only single-flight setup, also daemon-bootstrapped by default on JetPack (OMNIUS_VISION_AUTO_SETUP=0 disables). It creates a --system-site-packages venv, inherits existing CUDA Torch and vendor torchvision, installs a fully pinned non-Torch wheel closure with --no-deps, and then validates the managed runtime with user-site packages disabled. It downloads the OpenCLIP checkpoint from immutable revision 1a25a446712ba5ee05982a381eed697ef9b435cf with a fixed SHA-256. It never resolves Torch/torchvision from generic PyPI. A checksum-pinned local torchvision wheel override remains supported. Provisioning completes despite transient memory pressure; only model loading/inference applies the 8 GiB admission gate.",
16893
16900
  "responses": {
16894
16901
  "200": {
16895
- "description": "Already ready"
16902
+ "description": "Provisioned; readiness may still report memory-blocked until model loading is admitted"
16896
16903
  },
16897
16904
  "202": {
16898
16905
  "description": "Single-flight setup accepted; poll readiness"
package/docs/DISCOVERY.md CHANGED
@@ -104,11 +104,11 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
104
104
  | `api.v1-audio-diarization-live` | /v1/audio/diarization/live | Diarize live/session-local speaker turns |
105
105
  | `api.v1-audio-diarization-live-cancel` | /v1/audio/diarization/live/cancel | Cancel live diarization work |
106
106
  | `api.v1-audio-diarization-live-readiness` | /v1/audio/diarization/live/readiness | Read managed live speaker-turn diarization readiness |
107
- | `api.v1-audio-diarization-live-setup` | /v1/audio/diarization/live/setup | Verify and activate a local live-diarization runtime |
107
+ | `api.v1-audio-diarization-live-setup` | /v1/audio/diarization/live/setup | Provision and activate live Sortformer on JetPack |
108
108
  | `api.v1-audio-diarization-reconcile` | /v1/audio/diarization/reconcile | Reconcile offline/dream diarization observations |
109
109
  | `api.v1-audio-diarization-reconcile-cancel` | /v1/audio/diarization/reconcile/cancel | Cancel offline diarization reconciliation work |
110
110
  | `api.v1-audio-diarization-reconcile-readiness` | /v1/audio/diarization/reconcile/readiness | Read offline/dream speaker-reconciliation readiness |
111
- | `api.v1-audio-diarization-reconcile-setup` | /v1/audio/diarization/reconcile/setup | Verify and activate a local reconciliation runtime |
111
+ | `api.v1-audio-diarization-reconcile-setup` | /v1/audio/diarization/reconcile/setup | Provision and activate offline Community-1 reconciliation |
112
112
  | `api.v1-audio-embed` | /v1/audio/embed | Create a managed role-typed audio embedding |
113
113
  | `api.v1-audio-embed-health` | /v1/audio/embed/health | Read role-typed audio embedding readiness |
114
114
  | `api.v1-audio-embed-setup` | /v1/audio/embed/setup | Provision and activate one role-typed audio embedding runtime |
@@ -22,6 +22,15 @@ Configuration is layered from environment, global user settings, project setting
22
22
  | `OMNIUS_VIBEVOICE_PYTHON` | Host Python used to create the VibeVoice venv; its CUDA-enabled Torch is inherited with `--system-site-packages` |
23
23
  | `OMNIUS_VIBEVOICE_ATTN` | VibeVoice attention implementation (`sdpa` by default; use a host-supported implementation) |
24
24
  | `OMNIUS_VIBEVOICE_MAX_NEW_TOKENS` | Explicit VibeVoice structured-transcript generation ceiling (default `32768`) |
25
+ | `OMNIUS_AUDIO_PYTHON` | Preferred JetPack CPython 3.10 interpreter containing vendor CUDA Torch; bounded workspace discovery is used when unset |
26
+ | `OMNIUS_AUDIO_AUTO_SETUP` | Set to `0` to disable daemon-owned acoustic, speaker, and semantic audio setup |
27
+ | `OMNIUS_SEMANTIC_AUDIO_AUTO_SETUP` | Set to `0` to disable CLAP setup specifically; JetPack default is enabled |
28
+ | `OMNIUS_VISION_AUTO_SETUP` | Set to `0` to disable managed OpenCLIP provisioning on JetPack |
29
+ | `OMNIUS_VISION_PYTHON` | Explicit vendor CUDA Python for the isolated OpenCLIP runtime |
30
+ | `OMNIUS_NEMO_SPEECH_BIN` | Optional existing CUDA-enabled NeMo-Speech.cpp binary; otherwise live diarization builds the pinned source revision |
31
+ | `OMNIUS_DIARIZATION_AUTO_SETUP` | Set to `0` to disable managed diarizer provisioning; live Sortformer defaults on for JetPack |
32
+ | `OMNIUS_HF_TOKEN` | Setup-only Hugging Face token for gated Community-1 download; never persisted or passed to inference |
33
+ | `OMNIUS_PYANNOTE_TERMS_ACCEPTED` | Set to `1` only after accepting Community-1 terms; permits gated daemon bootstrap when a token is present |
25
34
 
26
35
  ## Provider Key Precedence
27
36
 
@@ -41,6 +50,13 @@ The first defined value wins. `OMNIUS_REST_API_KEY` and
41
50
  `OMNIUS_REST_API_KEYS` authenticate callers to the Omnius daemon; they are not
42
51
  upstream provider credentials.
43
52
 
53
+ Linux installations load optional daemon-only overrides from
54
+ `~/.config/omnius/daemon.env`. The postinstall creates this file with mode
55
+ `0600` and the systemd unit references it with an optional `EnvironmentFile`.
56
+ This is the appropriate place for `OMNIUS_AUDIO_PYTHON` or a setup-only gated
57
+ model token; credentials do not need to be embedded in the unit or sent in a
58
+ REST request.
59
+
44
60
  ## Provider Protocol
45
61
 
46
62
  Known provider presets select one of `ollama`, `openai-chat`, or
@@ -47,6 +47,7 @@ Important body fields:
47
47
  | `daemon_tool_names` | array | Exact daemon-tool allowlist; recommended for local models |
48
48
  | `agent_timeout_s` | number | Whole-loop deadline, default 45 seconds and maximum 600 |
49
49
  | `agent_max_tool_rounds` | integer | Daemon tool rounds before forced final synthesis; default 1 |
50
+ | `agent_prefetch_web_search` | boolean | Explicit one-generation web-search prefetch; factual-first enables it automatically |
50
51
  | `max_turns` | integer | Server-side agent loop turn cap |
51
52
  | `prompt_template` | string | Optional template such as `factual-first` |
52
53
 
@@ -130,4 +131,4 @@ For ASR/TTS systems that only need the text brain, use `/realtime` or `/v1/realt
130
131
 
131
132
  `/v1/chat/completions` can run an internal tool loop when `agent_loop: true`. This lets clients collapse multiple model/tool round trips into one daemon request. Daemon tool calls execute inline; client-owned tool calls can still be yielded in OpenAI-compatible shape.
132
133
 
133
- Ollama-backed loops use its native `/api/chat` tool protocol. `timeout_s` applies to each backend round, while `agent_timeout_s` bounds the complete loop and defaults to 45 seconds. The planning turn is capped at 96 output tokens. By default Omnius executes one daemon-tool round, then removes daemon schemas for the final synthesis; set `agent_max_tool_rounds` only when a workflow genuinely needs deeper tool chaining. Omnius returns a typed HTTP 504 when the total budget expires and HTTP 508 when a model repeats the same daemon tool with identical arguments. Tool results are capped at 6,000 characters before the next prompt. Without `daemon_tool_names`, Omnius offers only a compact core catalog permitted by `include_daemon_tools`; `prompt_template: "factual-first"` narrows it further to `web_search` and `web_fetch`.
134
+ Ollama-backed loops use its native `/api/chat` tool protocol. `timeout_s` applies to each backend round, while `agent_timeout_s` bounds the complete loop and defaults to 45 seconds. For a normal loop, the planning turn is capped at 96 output tokens; one daemon-tool round is the default, after which Omnius removes daemon schemas for final synthesis. `prompt_template: "factual-first"` skips that model-planning round entirely: Omnius executes the already-mandated, authorized `web_search` using the latest user turn, inserts the protocol-correct tool evidence, and performs one grounded synthesis generation. `agent_prefetch_web_search: true` opts into the same path directly. Generic/deeper tool workflows remain available through `agent_max_tool_rounds`. Omnius returns typed HTTP 504/508 failures, caps tool evidence at 6,000 characters, and limits the implicit catalog unless `daemon_tool_names` requests exact additions.
@@ -83,16 +83,25 @@ HTTP 503 until the isolated runtime and checksum-manifested weights are ready.
83
83
  Use the admin-scoped `POST /v1/vision/embed/setup` to create the
84
84
  `--system-site-packages` runtime under
85
85
  `~/.omnius/runtimes/vision/open-clip`, install pinned non-Torch dependencies,
86
- and fetch/verify the checkpoint. It is single-flight; poll readiness for an
87
- in-progress or failed setup. Inference never installs packages or downloads
88
- artifacts, and its Python worker is network-denied.
86
+ and fetch/verify the checkpoint from immutable revision
87
+ `1a25a446712ba5ee05982a381eed697ef9b435cf`. Setup is single-flight and
88
+ daemon-bootstrapped by default on JetPack; set `OMNIUS_VISION_AUTO_SETUP=0`
89
+ to disable it. Inference never installs packages or downloads artifacts, and
90
+ its Python worker is network-denied.
89
91
 
90
92
  JetPack Torch is inherited and never replaced. `torchvision` must either be
91
93
  present in the compatible vendor stack or be supplied explicitly with the local
92
94
  `OMNIUS_VISION_TORCHVISION_WHEEL` and immutable
93
95
  `OMNIUS_VISION_TORCHVISION_WHEEL_SHA256`; generic PyPI Torch/torchvision is
94
- blocked. On memory-constrained Jetson systems setup and embedding fail with a
95
- typed 503 rather than evicting a resident ASR/Ollama model.
96
+ blocked. Bootstrap discovery may inspect the selected vendor interpreter, but
97
+ the managed runtime installs its own pinned support closure and proves Torch,
98
+ torchvision, and OpenCLIP with user-site packages disabled. On memory-constrained
99
+ Jetson systems model loading and embedding fail with a typed 503 rather than
100
+ evicting a resident ASR/Ollama model. Dependency and
101
+ weight provisioning itself is allowed to finish under transient pressure;
102
+ readiness separately reports `installed`, `weightsReady`,
103
+ `inferenceAvailable`, and the current admission result. The model is loaded
104
+ only after at least 8 GiB is available.
96
105
 
97
106
  ## Advanced OCR
98
107
 
@@ -128,9 +137,12 @@ needs `run` scope because optional
128
137
 
129
138
  The managed pipeline is bounded: it starts with high-yield preprocessing and
130
139
  expands variants only for low-evidence or larger images. Small crops avoid the
131
- former all-variant/all-PSM explosion. The REST default is 90 seconds (maximum
132
- 180 seconds), while the worker has an 80-second internal deadline so it can
133
- return diagnostics. A timeout or cancellation returns
140
+ former all-variant/all-PSM explosion and use a six-second cap per Tesseract
141
+ attempt. If the first small-crop pass proves high-volume very-low-confidence or
142
+ distinctly symbol-heavy garbage, recovery stops immediately; blanks and
143
+ plausibly recoverable text still receive the second high-yield attempt. The
144
+ REST default is 90 seconds (maximum 180 seconds), while the worker has an
145
+ 80-second internal deadline so it can return diagnostics. A timeout or cancellation returns
134
146
  `result.data.schema=omnius.ocr-diagnostic.v1` with code `ocr_timeout` or
135
147
  `ocr_cancelled`; cancellation terminates the Python/Tesseract process group
136
148
  with TERM followed by KILL.
@@ -263,8 +275,15 @@ It is the only endpoint that installs dependencies or retrieves pinned weights:
263
275
  acoustic reuses the pinned JetPack YAMNet/TensorRT setup, speaker provisions
264
276
  the isolated CPU-only WeSpeaker runtime, and semantic provisions the isolated
265
277
  JetPack CUDA CLAP runtime. It activates only the selected role. Normal Jetson
266
- startup follows `OMNIUS_AUDIO_AUTO_SETUP` for acoustic and speaker; semantic
267
- startup additionally requires `OMNIUS_SEMANTIC_AUDIO_AUTO_SETUP=1`.
278
+ startup provisions acoustic, speaker, and semantic roles by default; set
279
+ `OMNIUS_AUDIO_AUTO_SETUP=0` to disable all audio setup or
280
+ `OMNIUS_SEMANTIC_AUDIO_AUTO_SETUP=0` to disable CLAP specifically.
281
+
282
+ CLAP provisioning installs a checksum-locked CPython 3.10/aarch64 wheel
283
+ closure and the immutable model revision without loading the model. It is
284
+ allowed to finish while unified memory is busy. Worker activation and
285
+ inference retain the 8 GiB admission gate and idle eviction, so setup cannot
286
+ silently evict ASR, Ollama, or another CUDA workload.
268
287
 
269
288
  On JetPack, speaker setup deliberately leaves `OMNIUS_AUDIO_PYTHON` (including
270
289
  an Egg project `.venv`) unchanged. It creates a private, non-system-site
@@ -313,9 +332,9 @@ provision themselves during inference.
313
332
  WAV windows of at most six seconds. It returns typed turn spans with explicit
314
333
  overlap and labels scoped only to the supplied `session_id`.
315
334
  - `POST /v1/audio/diarization/reconcile` uses
316
- `pyannote/speaker-diarization-community-1` over retained offline audio of any
317
- length. It requires persisted observation IDs and returns review-required
318
- cluster proposals, never an identity assertion.
335
+ `pyannote/speaker-diarization-community-1` over retained uncompressed PCM16
336
+ WAV audio of any length. It requires persisted observation IDs and returns
337
+ review-required cluster proposals, never an identity assertion.
319
338
 
320
339
  `GET /v1/audio/diarization/{live|reconcile}/readiness` is non-mutating: it
321
340
  does not download weights, install packages, create an environment, or load a
@@ -324,35 +343,60 @@ loaded the verified local model; otherwise it returns typed HTTP 503 with the
324
343
  exact remediation. Inference is likewise non-provisioning and returns typed
325
344
  `speaker_diarization_runtime_unavailable` until admin setup succeeds.
326
345
 
327
- Admin setup requires a retained local snapshot, an absolute pre-provisioned
328
- Python interpreter path (or the matching `OMNIUS_DIAR_*_PYTHON` setting), and
329
- the immutable manifest. It validates imports and warms the worker before
330
- returning HTTP 200; a snapshot registration that cannot warm a worker is a
331
- setup failure, not an accepted deployment.
346
+ Admin setup is asynchronous and single-flight. It returns HTTP 202 while it
347
+ provisions, and readiness exposes the exact phase or terminal error. Existing
348
+ ready workers return HTTP 200. Inference never performs these setup actions.
349
+
350
+ On JetPack, live setup with an empty object downloads the immutable,
351
+ checksum-pinned Q8 Sortformer artifact and builds NVIDIA NeMo-Speech.cpp at a
352
+ pinned source revision under `~/.omnius`. Build tooling is isolated and the
353
+ JetPack Torch installation is not imported or modified:
332
354
 
333
355
  ```json
334
356
  POST /v1/audio/diarization/live/setup
335
- {
336
- "snapshot_path": "/srv/omnius-models/diar-live-sortformer",
337
- "manifest_path": "/srv/omnius-models/diar-live-sortformer/omnius-model-manifest.json",
338
- "python_path": "/opt/omnius-diar-live/bin/python"
339
- }
357
+ {}
358
+ ```
359
+
360
+ The native build requires the JetPack CUDA compiler plus `git` and a C++17
361
+ compiler. Omnius installs pinned CMake/Ninja only in its private build-tools
362
+ venv and never invokes `sudo`; missing native prerequisites are reported by
363
+ readiness for operator installation outside inference. Set
364
+ `OMNIUS_NEMO_SPEECH_BIN` to reuse a prebuilt CUDA-enabled binary.
365
+
366
+ Managed Community-1 setup creates a separate CPU-only CPython environment, so
367
+ its PyTorch/Torchaudio packages cannot replace or conflict with JetPack CUDA
368
+ Torch. TorchCodec is deliberately omitted because it has no CPython
369
+ 3.10/aarch64 wheel; the worker decodes retained PCM16 WAV itself and passes
370
+ pyannote its supported in-memory waveform mapping. After accepting the gated
371
+ model conditions, expose `OMNIUS_HF_TOKEN` to the daemon and submit:
372
+
373
+ ```json
374
+ POST /v1/audio/diarization/reconcile/setup
375
+ { "pyannote_terms_accepted": true }
340
376
  ```
341
377
 
378
+ The token is used only for the pinned setup download, is rejected in HTTP
379
+ bodies, is never written to disk, and is removed from the offline worker
380
+ environment. `OMNIUS_PYANNOTE_TERMS_ACCEPTED=1` may persist only the terms
381
+ attestation, not the credential.
382
+
342
383
  Every manifest is `omnius.audio-diarization-model-snapshot.v1` and pins the
343
384
  exact role model, a full immutable 40- or 64-hex revision, a relative artifact, and its
344
385
  `sha256:<digest>`. Community-1 is a directory pipeline: its manifest also
345
386
  needs a complete `files` checksum object for every regular model/config file.
346
387
  Setup streams and verifies all declared bytes; later readiness and inference
347
388
  reject changed, missing, or added snapshot files by metadata before a worker
348
- can load them. No Hugging Face token is accepted or persisted by Omnius. For
349
- Community-1 the admin instead attests `pyannote_terms_accepted: true` after
350
- accepting the gated model terms and supplies an already-downloaded snapshot.
389
+ can load them. Advanced operators may still provide `snapshot_path`,
390
+ `manifest_path`, and a role-specific `python_path`; those paths retain the
391
+ same immutable manifest validation.
351
392
 
352
393
  Both roles allow one active request plus one queued request. A third request is
353
394
  typed busy. `POST /v1/audio/diarization/{live|reconcile}/cancel` terminates the
354
- worker before clearing both active and queued work. A daemon restart may warm
355
- only a previously verified binding; it never downloads or installs anything.
395
+ worker process group before clearing both active and queued work. Inference and
396
+ readiness may warm only a previously verified binding and never download or
397
+ install anything. The separate JetPack daemon bootstrap may provision the
398
+ public live model by default; gated Community-1 is provisioned only when both
399
+ the terms attestation and setup-only token are configured.
356
400
 
357
401
  Live responses are `omnius.speaker-diarization.v1` `SpeakerTurnSpan[]` with
358
402
  `start_ms`, `end_ms`, `channel`, explicit overlap, and session-local
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.641",
3
+ "version": "1.0.643",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.641",
9
+ "version": "1.0.643",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.641",
3
+ "version": "1.0.643",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/library.js",