omnius 1.0.633 → 1.0.636

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.
@@ -4414,22 +4414,949 @@
4414
4414
  "packages/cli/src/api/openapi.ts"
4415
4415
  ]
4416
4416
  },
4417
+ {
4418
+ "id": "api.v1-audio-diarization-live",
4419
+ "kind": "api",
4420
+ "title": "/v1/audio/diarization/live",
4421
+ "summary": "Diarize live/session-local speaker turns",
4422
+ "aliases": [
4423
+ "/v1/audio/diarization/live"
4424
+ ],
4425
+ "keywords": [
4426
+ "rest",
4427
+ "openapi",
4428
+ "POST",
4429
+ "Audio",
4430
+ "v1",
4431
+ "audio",
4432
+ "diarization",
4433
+ "live"
4434
+ ],
4435
+ "maturity": "stable",
4436
+ "layer": "interface",
4437
+ "audiences": [
4438
+ "integrator",
4439
+ "service-agent",
4440
+ "coding-agent"
4441
+ ],
4442
+ "interfaces": [
4443
+ {
4444
+ "type": "rest",
4445
+ "target": "POST /v1/audio/diarization/live"
4446
+ },
4447
+ {
4448
+ "type": "openapi",
4449
+ "target": "/openapi.json"
4450
+ }
4451
+ ],
4452
+ "references": [
4453
+ {
4454
+ "type": "source",
4455
+ "target": "packages/cli/src/api/openapi.ts",
4456
+ "relation": "openapi-source"
4457
+ },
4458
+ {
4459
+ "type": "documentation",
4460
+ "target": "docs/reference/rest-api.md",
4461
+ "relation": "endpoint-inventory"
4462
+ }
4463
+ ],
4464
+ "methods": [
4465
+ "POST"
4466
+ ],
4467
+ "tags": [
4468
+ "Audio"
4469
+ ],
4470
+ "operations": {
4471
+ "post": {
4472
+ "summary": "Diarize live/session-local speaker turns",
4473
+ "tags": [
4474
+ "Audio"
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.",
4477
+ "responses": {
4478
+ "200": {
4479
+ "description": "Typed managed diarization spans."
4480
+ },
4481
+ "400": {
4482
+ "description": "Invalid retained live window or request."
4483
+ },
4484
+ "403": {
4485
+ "description": "Run scope required."
4486
+ },
4487
+ "503": {
4488
+ "description": "Managed live diarization worker not provisioned or warm."
4489
+ }
4490
+ }
4491
+ }
4492
+ },
4493
+ "source_of_truth": [
4494
+ "GET /openapi.json",
4495
+ "packages/cli/src/api/openapi.ts"
4496
+ ]
4497
+ },
4498
+ {
4499
+ "id": "api.v1-audio-diarization-live-cancel",
4500
+ "kind": "api",
4501
+ "title": "/v1/audio/diarization/live/cancel",
4502
+ "summary": "Cancel live diarization work",
4503
+ "aliases": [
4504
+ "/v1/audio/diarization/live/cancel"
4505
+ ],
4506
+ "keywords": [
4507
+ "rest",
4508
+ "openapi",
4509
+ "POST",
4510
+ "Audio",
4511
+ "v1",
4512
+ "audio",
4513
+ "diarization",
4514
+ "live",
4515
+ "cancel"
4516
+ ],
4517
+ "maturity": "stable",
4518
+ "layer": "interface",
4519
+ "audiences": [
4520
+ "integrator",
4521
+ "service-agent",
4522
+ "coding-agent"
4523
+ ],
4524
+ "interfaces": [
4525
+ {
4526
+ "type": "rest",
4527
+ "target": "POST /v1/audio/diarization/live/cancel"
4528
+ },
4529
+ {
4530
+ "type": "openapi",
4531
+ "target": "/openapi.json"
4532
+ }
4533
+ ],
4534
+ "references": [
4535
+ {
4536
+ "type": "source",
4537
+ "target": "packages/cli/src/api/openapi.ts",
4538
+ "relation": "openapi-source"
4539
+ },
4540
+ {
4541
+ "type": "documentation",
4542
+ "target": "docs/reference/rest-api.md",
4543
+ "relation": "endpoint-inventory"
4544
+ }
4545
+ ],
4546
+ "methods": [
4547
+ "POST"
4548
+ ],
4549
+ "tags": [
4550
+ "Audio"
4551
+ ],
4552
+ "operations": {
4553
+ "post": {
4554
+ "summary": "Cancel live diarization work",
4555
+ "tags": [
4556
+ "Audio"
4557
+ ],
4558
+ "description": "Run scope required. Cancellation terminates the worker and clears its one active plus one queued request.",
4559
+ "responses": {
4560
+ "200": {
4561
+ "description": "Cancellation state."
4562
+ },
4563
+ "403": {
4564
+ "description": "Run scope required."
4565
+ }
4566
+ }
4567
+ }
4568
+ },
4569
+ "source_of_truth": [
4570
+ "GET /openapi.json",
4571
+ "packages/cli/src/api/openapi.ts"
4572
+ ]
4573
+ },
4574
+ {
4575
+ "id": "api.v1-audio-diarization-live-readiness",
4576
+ "kind": "api",
4577
+ "title": "/v1/audio/diarization/live/readiness",
4578
+ "summary": "Read managed live speaker-turn diarization readiness",
4579
+ "aliases": [
4580
+ "/v1/audio/diarization/live/readiness"
4581
+ ],
4582
+ "keywords": [
4583
+ "rest",
4584
+ "openapi",
4585
+ "GET",
4586
+ "Audio",
4587
+ "v1",
4588
+ "audio",
4589
+ "diarization",
4590
+ "live",
4591
+ "readiness"
4592
+ ],
4593
+ "maturity": "stable",
4594
+ "layer": "interface",
4595
+ "audiences": [
4596
+ "integrator",
4597
+ "service-agent",
4598
+ "coding-agent"
4599
+ ],
4600
+ "interfaces": [
4601
+ {
4602
+ "type": "rest",
4603
+ "target": "GET /v1/audio/diarization/live/readiness"
4604
+ },
4605
+ {
4606
+ "type": "openapi",
4607
+ "target": "/openapi.json"
4608
+ }
4609
+ ],
4610
+ "references": [
4611
+ {
4612
+ "type": "source",
4613
+ "target": "packages/cli/src/api/openapi.ts",
4614
+ "relation": "openapi-source"
4615
+ },
4616
+ {
4617
+ "type": "documentation",
4618
+ "target": "docs/reference/rest-api.md",
4619
+ "relation": "endpoint-inventory"
4620
+ }
4621
+ ],
4622
+ "methods": [
4623
+ "GET"
4624
+ ],
4625
+ "tags": [
4626
+ "Audio"
4627
+ ],
4628
+ "operations": {
4629
+ "get": {
4630
+ "summary": "Read managed live speaker-turn diarization readiness",
4631
+ "tags": [
4632
+ "Audio"
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.",
4635
+ "responses": {
4636
+ "200": {
4637
+ "description": "Verified local snapshot and warm managed live worker."
4638
+ },
4639
+ "503": {
4640
+ "description": "Snapshot/runtime/worker is unprovisioned or unready; body describes the exact model and span/observation contract."
4641
+ }
4642
+ }
4643
+ }
4644
+ },
4645
+ "source_of_truth": [
4646
+ "GET /openapi.json",
4647
+ "packages/cli/src/api/openapi.ts"
4648
+ ]
4649
+ },
4650
+ {
4651
+ "id": "api.v1-audio-diarization-live-setup",
4652
+ "kind": "api",
4653
+ "title": "/v1/audio/diarization/live/setup",
4654
+ "summary": "Verify and activate a local live-diarization runtime",
4655
+ "aliases": [
4656
+ "/v1/audio/diarization/live/setup"
4657
+ ],
4658
+ "keywords": [
4659
+ "rest",
4660
+ "openapi",
4661
+ "POST",
4662
+ "Audio",
4663
+ "v1",
4664
+ "audio",
4665
+ "diarization",
4666
+ "live",
4667
+ "setup"
4668
+ ],
4669
+ "maturity": "stable",
4670
+ "layer": "interface",
4671
+ "audiences": [
4672
+ "integrator",
4673
+ "service-agent",
4674
+ "coding-agent"
4675
+ ],
4676
+ "interfaces": [
4677
+ {
4678
+ "type": "rest",
4679
+ "target": "POST /v1/audio/diarization/live/setup"
4680
+ },
4681
+ {
4682
+ "type": "openapi",
4683
+ "target": "/openapi.json"
4684
+ }
4685
+ ],
4686
+ "references": [
4687
+ {
4688
+ "type": "source",
4689
+ "target": "packages/cli/src/api/openapi.ts",
4690
+ "relation": "openapi-source"
4691
+ },
4692
+ {
4693
+ "type": "documentation",
4694
+ "target": "docs/reference/rest-api.md",
4695
+ "relation": "endpoint-inventory"
4696
+ }
4697
+ ],
4698
+ "methods": [
4699
+ "POST"
4700
+ ],
4701
+ "tags": [
4702
+ "Audio"
4703
+ ],
4704
+ "operations": {
4705
+ "post": {
4706
+ "summary": "Verify and activate a local live-diarization runtime",
4707
+ "tags": [
4708
+ "Audio"
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.",
4711
+ "requestBody": {
4712
+ "required": true,
4713
+ "content": {
4714
+ "application/json": {
4715
+ "schema": {
4716
+ "type": "object",
4717
+ "required": [
4718
+ "snapshot_path"
4719
+ ],
4720
+ "properties": {
4721
+ "snapshot_path": {
4722
+ "type": "string",
4723
+ "description": "Absolute local directory containing the operator-provided snapshot."
4724
+ },
4725
+ "manifest_path": {
4726
+ "type": "string",
4727
+ "description": "Optional absolute manifest path; defaults to snapshot_path/omnius-model-manifest.json."
4728
+ },
4729
+ "python_path": {
4730
+ "type": "string",
4731
+ "description": "Absolute pre-provisioned Python with NeMo and Jetson CUDA imports."
4732
+ }
4733
+ }
4734
+ }
4735
+ }
4736
+ }
4737
+ },
4738
+ "responses": {
4739
+ "200": {
4740
+ "description": "Snapshot, runtime imports, and worker all verified/warm."
4741
+ },
4742
+ "400": {
4743
+ "description": "Snapshot, Python runtime, immutable manifest/digest validation, or worker warmup failed."
4744
+ },
4745
+ "403": {
4746
+ "description": "Admin scope required."
4747
+ }
4748
+ }
4749
+ }
4750
+ },
4751
+ "source_of_truth": [
4752
+ "GET /openapi.json",
4753
+ "packages/cli/src/api/openapi.ts"
4754
+ ]
4755
+ },
4756
+ {
4757
+ "id": "api.v1-audio-diarization-reconcile",
4758
+ "kind": "api",
4759
+ "title": "/v1/audio/diarization/reconcile",
4760
+ "summary": "Reconcile offline/dream diarization observations",
4761
+ "aliases": [
4762
+ "/v1/audio/diarization/reconcile"
4763
+ ],
4764
+ "keywords": [
4765
+ "rest",
4766
+ "openapi",
4767
+ "POST",
4768
+ "Audio",
4769
+ "v1",
4770
+ "audio",
4771
+ "diarization",
4772
+ "reconcile"
4773
+ ],
4774
+ "maturity": "stable",
4775
+ "layer": "interface",
4776
+ "audiences": [
4777
+ "integrator",
4778
+ "service-agent",
4779
+ "coding-agent"
4780
+ ],
4781
+ "interfaces": [
4782
+ {
4783
+ "type": "rest",
4784
+ "target": "POST /v1/audio/diarization/reconcile"
4785
+ },
4786
+ {
4787
+ "type": "openapi",
4788
+ "target": "/openapi.json"
4789
+ }
4790
+ ],
4791
+ "references": [
4792
+ {
4793
+ "type": "source",
4794
+ "target": "packages/cli/src/api/openapi.ts",
4795
+ "relation": "openapi-source"
4796
+ },
4797
+ {
4798
+ "type": "documentation",
4799
+ "target": "docs/reference/rest-api.md",
4800
+ "relation": "endpoint-inventory"
4801
+ }
4802
+ ],
4803
+ "methods": [
4804
+ "POST"
4805
+ ],
4806
+ "tags": [
4807
+ "Audio"
4808
+ ],
4809
+ "operations": {
4810
+ "post": {
4811
+ "summary": "Reconcile offline/dream diarization observations",
4812
+ "tags": [
4813
+ "Audio"
4814
+ ],
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.",
4816
+ "responses": {
4817
+ "200": {
4818
+ "description": "Typed review-required reconciliation proposals and spans."
4819
+ },
4820
+ "400": {
4821
+ "description": "Invalid retained asset or observation IDs."
4822
+ },
4823
+ "403": {
4824
+ "description": "Run scope required."
4825
+ },
4826
+ "503": {
4827
+ "description": "Managed reconciliation worker not provisioned or warm."
4828
+ }
4829
+ }
4830
+ }
4831
+ },
4832
+ "source_of_truth": [
4833
+ "GET /openapi.json",
4834
+ "packages/cli/src/api/openapi.ts"
4835
+ ]
4836
+ },
4837
+ {
4838
+ "id": "api.v1-audio-diarization-reconcile-cancel",
4839
+ "kind": "api",
4840
+ "title": "/v1/audio/diarization/reconcile/cancel",
4841
+ "summary": "Cancel offline diarization reconciliation work",
4842
+ "aliases": [
4843
+ "/v1/audio/diarization/reconcile/cancel"
4844
+ ],
4845
+ "keywords": [
4846
+ "rest",
4847
+ "openapi",
4848
+ "POST",
4849
+ "Audio",
4850
+ "v1",
4851
+ "audio",
4852
+ "diarization",
4853
+ "reconcile",
4854
+ "cancel"
4855
+ ],
4856
+ "maturity": "stable",
4857
+ "layer": "interface",
4858
+ "audiences": [
4859
+ "integrator",
4860
+ "service-agent",
4861
+ "coding-agent"
4862
+ ],
4863
+ "interfaces": [
4864
+ {
4865
+ "type": "rest",
4866
+ "target": "POST /v1/audio/diarization/reconcile/cancel"
4867
+ },
4868
+ {
4869
+ "type": "openapi",
4870
+ "target": "/openapi.json"
4871
+ }
4872
+ ],
4873
+ "references": [
4874
+ {
4875
+ "type": "source",
4876
+ "target": "packages/cli/src/api/openapi.ts",
4877
+ "relation": "openapi-source"
4878
+ },
4879
+ {
4880
+ "type": "documentation",
4881
+ "target": "docs/reference/rest-api.md",
4882
+ "relation": "endpoint-inventory"
4883
+ }
4884
+ ],
4885
+ "methods": [
4886
+ "POST"
4887
+ ],
4888
+ "tags": [
4889
+ "Audio"
4890
+ ],
4891
+ "operations": {
4892
+ "post": {
4893
+ "summary": "Cancel offline diarization reconciliation work",
4894
+ "tags": [
4895
+ "Audio"
4896
+ ],
4897
+ "description": "Run scope required. The persistent worker is limited to one active job plus one queued job; cancellation terminates it before clearing both.",
4898
+ "responses": {
4899
+ "200": {
4900
+ "description": "Cancellation state."
4901
+ },
4902
+ "403": {
4903
+ "description": "Run scope required."
4904
+ }
4905
+ }
4906
+ }
4907
+ },
4908
+ "source_of_truth": [
4909
+ "GET /openapi.json",
4910
+ "packages/cli/src/api/openapi.ts"
4911
+ ]
4912
+ },
4913
+ {
4914
+ "id": "api.v1-audio-diarization-reconcile-readiness",
4915
+ "kind": "api",
4916
+ "title": "/v1/audio/diarization/reconcile/readiness",
4917
+ "summary": "Read offline/dream speaker-reconciliation readiness",
4918
+ "aliases": [
4919
+ "/v1/audio/diarization/reconcile/readiness"
4920
+ ],
4921
+ "keywords": [
4922
+ "rest",
4923
+ "openapi",
4924
+ "GET",
4925
+ "Audio",
4926
+ "v1",
4927
+ "audio",
4928
+ "diarization",
4929
+ "reconcile",
4930
+ "readiness"
4931
+ ],
4932
+ "maturity": "stable",
4933
+ "layer": "interface",
4934
+ "audiences": [
4935
+ "integrator",
4936
+ "service-agent",
4937
+ "coding-agent"
4938
+ ],
4939
+ "interfaces": [
4940
+ {
4941
+ "type": "rest",
4942
+ "target": "GET /v1/audio/diarization/reconcile/readiness"
4943
+ },
4944
+ {
4945
+ "type": "openapi",
4946
+ "target": "/openapi.json"
4947
+ }
4948
+ ],
4949
+ "references": [
4950
+ {
4951
+ "type": "source",
4952
+ "target": "packages/cli/src/api/openapi.ts",
4953
+ "relation": "openapi-source"
4954
+ },
4955
+ {
4956
+ "type": "documentation",
4957
+ "target": "docs/reference/rest-api.md",
4958
+ "relation": "endpoint-inventory"
4959
+ }
4960
+ ],
4961
+ "methods": [
4962
+ "GET"
4963
+ ],
4964
+ "tags": [
4965
+ "Audio"
4966
+ ],
4967
+ "operations": {
4968
+ "get": {
4969
+ "summary": "Read offline/dream speaker-reconciliation readiness",
4970
+ "tags": [
4971
+ "Audio"
4972
+ ],
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.",
4974
+ "responses": {
4975
+ "200": {
4976
+ "description": "Verified complete local Community-1 snapshot and warm managed worker."
4977
+ },
4978
+ "503": {
4979
+ "description": "Snapshot/runtime/worker is unprovisioned or unready; body describes the exact model and proposal/observation contract."
4980
+ }
4981
+ }
4982
+ }
4983
+ },
4984
+ "source_of_truth": [
4985
+ "GET /openapi.json",
4986
+ "packages/cli/src/api/openapi.ts"
4987
+ ]
4988
+ },
4989
+ {
4990
+ "id": "api.v1-audio-diarization-reconcile-setup",
4991
+ "kind": "api",
4992
+ "title": "/v1/audio/diarization/reconcile/setup",
4993
+ "summary": "Verify and activate a local reconciliation runtime",
4994
+ "aliases": [
4995
+ "/v1/audio/diarization/reconcile/setup"
4996
+ ],
4997
+ "keywords": [
4998
+ "rest",
4999
+ "openapi",
5000
+ "POST",
5001
+ "Audio",
5002
+ "v1",
5003
+ "audio",
5004
+ "diarization",
5005
+ "reconcile",
5006
+ "setup"
5007
+ ],
5008
+ "maturity": "stable",
5009
+ "layer": "interface",
5010
+ "audiences": [
5011
+ "integrator",
5012
+ "service-agent",
5013
+ "coding-agent"
5014
+ ],
5015
+ "interfaces": [
5016
+ {
5017
+ "type": "rest",
5018
+ "target": "POST /v1/audio/diarization/reconcile/setup"
5019
+ },
5020
+ {
5021
+ "type": "openapi",
5022
+ "target": "/openapi.json"
5023
+ }
5024
+ ],
5025
+ "references": [
5026
+ {
5027
+ "type": "source",
5028
+ "target": "packages/cli/src/api/openapi.ts",
5029
+ "relation": "openapi-source"
5030
+ },
5031
+ {
5032
+ "type": "documentation",
5033
+ "target": "docs/reference/rest-api.md",
5034
+ "relation": "endpoint-inventory"
5035
+ }
5036
+ ],
5037
+ "methods": [
5038
+ "POST"
5039
+ ],
5040
+ "tags": [
5041
+ "Audio"
5042
+ ],
5043
+ "operations": {
5044
+ "post": {
5045
+ "summary": "Verify and activate a local reconciliation runtime",
5046
+ "tags": [
5047
+ "Audio"
5048
+ ],
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.",
5050
+ "requestBody": {
5051
+ "required": true,
5052
+ "content": {
5053
+ "application/json": {
5054
+ "schema": {
5055
+ "type": "object",
5056
+ "required": [
5057
+ "snapshot_path",
5058
+ "pyannote_terms_accepted"
5059
+ ],
5060
+ "properties": {
5061
+ "snapshot_path": {
5062
+ "type": "string"
5063
+ },
5064
+ "manifest_path": {
5065
+ "type": "string"
5066
+ },
5067
+ "python_path": {
5068
+ "type": "string",
5069
+ "description": "Absolute pre-provisioned Python with pyannote.audio."
5070
+ },
5071
+ "pyannote_terms_accepted": {
5072
+ "type": "boolean",
5073
+ "enum": [
5074
+ true
5075
+ ]
5076
+ }
5077
+ }
5078
+ }
5079
+ }
5080
+ }
5081
+ },
5082
+ "responses": {
5083
+ "200": {
5084
+ "description": "Complete snapshot, runtime imports, and worker all verified/warm."
5085
+ },
5086
+ "400": {
5087
+ "description": "Terms attestation, snapshot tree, Python runtime, immutable manifest validation, or worker warmup failed."
5088
+ },
5089
+ "403": {
5090
+ "description": "Admin scope required."
5091
+ }
5092
+ }
5093
+ }
5094
+ },
5095
+ "source_of_truth": [
5096
+ "GET /openapi.json",
5097
+ "packages/cli/src/api/openapi.ts"
5098
+ ]
5099
+ },
4417
5100
  {
4418
5101
  "id": "api.v1-audio-embed",
4419
5102
  "kind": "api",
4420
- "title": "/v1/audio/embed",
4421
- "summary": "Create an audio embedding for uploaded or referenced audio",
5103
+ "title": "/v1/audio/embed",
5104
+ "summary": "Create a managed role-typed audio embedding",
5105
+ "aliases": [
5106
+ "/v1/audio/embed"
5107
+ ],
5108
+ "keywords": [
5109
+ "rest",
5110
+ "openapi",
5111
+ "POST",
5112
+ "Audio",
5113
+ "v1",
5114
+ "audio",
5115
+ "embed"
5116
+ ],
5117
+ "maturity": "stable",
5118
+ "layer": "interface",
5119
+ "audiences": [
5120
+ "integrator",
5121
+ "service-agent",
5122
+ "coding-agent"
5123
+ ],
5124
+ "interfaces": [
5125
+ {
5126
+ "type": "rest",
5127
+ "target": "POST /v1/audio/embed"
5128
+ },
5129
+ {
5130
+ "type": "openapi",
5131
+ "target": "/openapi.json"
5132
+ }
5133
+ ],
5134
+ "references": [
5135
+ {
5136
+ "type": "source",
5137
+ "target": "packages/cli/src/api/openapi.ts",
5138
+ "relation": "openapi-source"
5139
+ },
5140
+ {
5141
+ "type": "documentation",
5142
+ "target": "docs/reference/rest-api.md",
5143
+ "relation": "endpoint-inventory"
5144
+ }
5145
+ ],
5146
+ "methods": [
5147
+ "POST"
5148
+ ],
5149
+ "tags": [
5150
+ "Audio"
5151
+ ],
5152
+ "operations": {
5153
+ "post": {
5154
+ "summary": "Create a managed role-typed audio embedding",
5155
+ "tags": [
5156
+ "Audio"
5157
+ ],
5158
+ "description": "Alias of POST /v1/tools/audio_analyze/call with args.action forced to embed. Canonical form: POST /v1/audio/embed?kind=acoustic|speaker|semantic with {args:{file|path,...},timeout_ms?,profile?,working_dir?}; body.kind and args.kind are compatibility aliases. Legacy top-level path/file is normalized into args. bytesBase64 is rejected because every managed runtime accepts a retained caller-supplied WAV path only. It preserves the exact direct-tool auth, profile, origin, output-cap, timeout, and cancellation contract. The route passes the requested role through exactly and never substitutes vector spaces. Poll /v1/audio/embed/health?kind=<role> first; inference never installs dependencies or downloads weights. A runtime that is not ready returns HTTP 503 with its role-specific code: audio_classifier_not_ready, speaker_embedding_not_ready, or audio_semantic_embedding_not_ready. Speaker busy and timeout remain typed direct-tool result codes. The generic /v1/tools/audio_analyze/call route retains HTTP 200 for all tool failures. Semantic local-memory admission pressure is likewise an adapter HTTP 503 with code audio_semantic_memory_pressure.",
5159
+ "parameters": [
5160
+ {
5161
+ "name": "kind",
5162
+ "in": "query",
5163
+ "required": false,
5164
+ "schema": {
5165
+ "type": "string",
5166
+ "enum": [
5167
+ "acoustic",
5168
+ "speaker",
5169
+ "semantic"
5170
+ ]
5171
+ },
5172
+ "description": "Canonical location for the required role kind; body.kind is accepted for compatibility."
5173
+ }
5174
+ ],
5175
+ "requestBody": {
5176
+ "required": true,
5177
+ "content": {
5178
+ "application/json": {
5179
+ "schema": {
5180
+ "type": "object",
5181
+ "properties": {
5182
+ "kind": {
5183
+ "type": "string",
5184
+ "enum": [
5185
+ "acoustic",
5186
+ "speaker",
5187
+ "semantic"
5188
+ ]
5189
+ },
5190
+ "path": {
5191
+ "type": "string",
5192
+ "description": "Compatibility input; normalized into args.path."
5193
+ },
5194
+ "file": {
5195
+ "type": "string",
5196
+ "description": "Compatibility input; normalized into args.file."
5197
+ },
5198
+ "args": {
5199
+ "type": "object",
5200
+ "properties": {
5201
+ "file": {
5202
+ "type": "string"
5203
+ },
5204
+ "path": {
5205
+ "type": "string"
5206
+ }
5207
+ }
5208
+ },
5209
+ "timeout_ms": {
5210
+ "type": "integer",
5211
+ "minimum": 1000,
5212
+ "maximum": 120000
5213
+ },
5214
+ "max_output_chars": {
5215
+ "type": "integer"
5216
+ },
5217
+ "profile": {
5218
+ "type": "string"
5219
+ },
5220
+ "working_dir": {
5221
+ "type": "string",
5222
+ "description": "Admin scope only."
5223
+ }
5224
+ }
5225
+ }
5226
+ }
5227
+ }
5228
+ },
5229
+ "responses": {
5230
+ "200": {
5231
+ "description": "Direct audio_analyze result envelope; consume result.data for the role-typed embedding."
5232
+ },
5233
+ "400": {
5234
+ "description": "Invalid body or embedding kind"
5235
+ },
5236
+ "403": {
5237
+ "description": "Direct-tool scope/profile/origin policy denied the call"
5238
+ },
5239
+ "503": {
5240
+ "description": "Requested role runtime is unavailable: audio_classifier_not_ready, speaker_embedding_not_ready, or audio_semantic_embedding_not_ready. Semantic memory admission uses audio_semantic_memory_pressure."
5241
+ }
5242
+ }
5243
+ }
5244
+ },
5245
+ "source_of_truth": [
5246
+ "GET /openapi.json",
5247
+ "packages/cli/src/api/openapi.ts"
5248
+ ]
5249
+ },
5250
+ {
5251
+ "id": "api.v1-audio-embed-health",
5252
+ "kind": "api",
5253
+ "title": "/v1/audio/embed/health",
5254
+ "summary": "Read role-typed audio embedding readiness",
5255
+ "aliases": [
5256
+ "/v1/audio/embed/health"
5257
+ ],
5258
+ "keywords": [
5259
+ "rest",
5260
+ "openapi",
5261
+ "GET",
5262
+ "Audio",
5263
+ "v1",
5264
+ "audio",
5265
+ "embed",
5266
+ "health"
5267
+ ],
5268
+ "maturity": "stable",
5269
+ "layer": "interface",
5270
+ "audiences": [
5271
+ "integrator",
5272
+ "service-agent",
5273
+ "coding-agent"
5274
+ ],
5275
+ "interfaces": [
5276
+ {
5277
+ "type": "rest",
5278
+ "target": "GET /v1/audio/embed/health"
5279
+ },
5280
+ {
5281
+ "type": "openapi",
5282
+ "target": "/openapi.json"
5283
+ }
5284
+ ],
5285
+ "references": [
5286
+ {
5287
+ "type": "source",
5288
+ "target": "packages/cli/src/api/openapi.ts",
5289
+ "relation": "openapi-source"
5290
+ },
5291
+ {
5292
+ "type": "documentation",
5293
+ "target": "docs/reference/rest-api.md",
5294
+ "relation": "endpoint-inventory"
5295
+ }
5296
+ ],
5297
+ "methods": [
5298
+ "GET"
5299
+ ],
5300
+ "tags": [
5301
+ "Audio"
5302
+ ],
5303
+ "operations": {
5304
+ "get": {
5305
+ "summary": "Read role-typed audio embedding readiness",
5306
+ "tags": [
5307
+ "Audio"
5308
+ ],
5309
+ "description": "Requires kind=acoustic|speaker|semantic. Each kind dispatches only to its role-correct managed runtime: acoustic is Jetson TensorRT YAMNet (1024d), speaker is CPU-only WeSpeaker CAM++ (512d), and semantic is Jetson CUDA CLAP (512d). A 503 means that requested role is unprovisioned or its worker is unready; Omnius never substitutes another vector space. This endpoint is non-provisioning: it never installs dependencies, downloads weights, or runs embedding inference.",
5310
+ "parameters": [
5311
+ {
5312
+ "name": "kind",
5313
+ "in": "query",
5314
+ "required": true,
5315
+ "schema": {
5316
+ "type": "string",
5317
+ "enum": [
5318
+ "acoustic",
5319
+ "speaker",
5320
+ "semantic"
5321
+ ]
5322
+ }
5323
+ }
5324
+ ],
5325
+ "responses": {
5326
+ "200": {
5327
+ "description": "The requested role-specific embedding runtime is warm and ready."
5328
+ },
5329
+ "400": {
5330
+ "description": "kind is missing or invalid"
5331
+ },
5332
+ "503": {
5333
+ "description": "The requested role runtime is unprovisioned or unready; response retains that role's exact vector-space metadata."
5334
+ }
5335
+ }
5336
+ }
5337
+ },
5338
+ "source_of_truth": [
5339
+ "GET /openapi.json",
5340
+ "packages/cli/src/api/openapi.ts"
5341
+ ]
5342
+ },
5343
+ {
5344
+ "id": "api.v1-audio-embed-setup",
5345
+ "kind": "api",
5346
+ "title": "/v1/audio/embed/setup",
5347
+ "summary": "Provision and activate one role-typed audio embedding runtime",
4422
5348
  "aliases": [
4423
- "/v1/audio/embed"
5349
+ "/v1/audio/embed/setup"
4424
5350
  ],
4425
5351
  "keywords": [
4426
5352
  "rest",
4427
5353
  "openapi",
4428
5354
  "POST",
4429
- "Voice",
5355
+ "Audio",
4430
5356
  "v1",
4431
5357
  "audio",
4432
- "embed"
5358
+ "embed",
5359
+ "setup"
4433
5360
  ],
4434
5361
  "maturity": "stable",
4435
5362
  "layer": "interface",
@@ -4441,7 +5368,7 @@
4441
5368
  "interfaces": [
4442
5369
  {
4443
5370
  "type": "rest",
4444
- "target": "POST /v1/audio/embed"
5371
+ "target": "POST /v1/audio/embed/setup"
4445
5372
  },
4446
5373
  {
4447
5374
  "type": "openapi",
@@ -4464,20 +5391,66 @@
4464
5391
  "POST"
4465
5392
  ],
4466
5393
  "tags": [
4467
- "Voice"
5394
+ "Audio"
4468
5395
  ],
4469
5396
  "operations": {
4470
5397
  "post": {
4471
- "summary": "Create an audio embedding for uploaded or referenced audio",
5398
+ "summary": "Provision and activate one role-typed audio embedding runtime",
4472
5399
  "tags": [
4473
- "Voice"
5400
+ "Audio"
5401
+ ],
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 installs the isolated CPU-only WeSpeaker CAM++ ONNX Runtime and pinned model, then installs only the checksummed CPython 3.10/aarch64 Torchaudio 2.2.0 wheel into ~/.omnius/runtimes/audio/speaker/venv with --no-deps/--no-index. It retains --system-site-packages and links the selected OMNIUS_AUDIO_PYTHON JetPack Torch 2.2/CUDA 12.2 provider without writing to it; setup proves the Torch/Torchaudio ABI and CPU kaldi.fbank before readiness. An operator may replace that wheel only by supplying both OMNIUS_SPEAKER_TORCHAUDIO_WHEEL and OMNIUS_SPEAKER_TORCHAUDIO_WHEEL_SHA256. 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.",
5403
+ "parameters": [
5404
+ {
5405
+ "name": "kind",
5406
+ "in": "query",
5407
+ "required": false,
5408
+ "schema": {
5409
+ "type": "string",
5410
+ "enum": [
5411
+ "acoustic",
5412
+ "speaker",
5413
+ "semantic"
5414
+ ]
5415
+ },
5416
+ "description": "Canonical required role selector; JSON body.kind is accepted for compatibility."
5417
+ }
4474
5418
  ],
5419
+ "requestBody": {
5420
+ "required": false,
5421
+ "content": {
5422
+ "application/json": {
5423
+ "schema": {
5424
+ "type": "object",
5425
+ "properties": {
5426
+ "kind": {
5427
+ "type": "string",
5428
+ "enum": [
5429
+ "acoustic",
5430
+ "speaker",
5431
+ "semantic"
5432
+ ]
5433
+ }
5434
+ }
5435
+ }
5436
+ }
5437
+ }
5438
+ },
4475
5439
  "responses": {
4476
5440
  "200": {
4477
- "description": "Audio embedding result"
5441
+ "description": "Requested role runtime provisioned and warm."
5442
+ },
5443
+ "202": {
5444
+ "description": "Provisioning finished but requested role did not prove warm; poll its health URL."
4478
5445
  },
4479
5446
  "400": {
4480
- "description": "Invalid audio input"
5447
+ "description": "kind is missing or invalid."
5448
+ },
5449
+ "403": {
5450
+ "description": "Admin scope required."
5451
+ },
5452
+ "500": {
5453
+ "description": "Role-specific setup/preflight failed."
4481
5454
  }
4482
5455
  }
4483
5456
  }
@@ -6377,7 +7350,7 @@
6377
7350
  "id": "api.v1-config-model-check",
6378
7351
  "kind": "api",
6379
7352
  "title": "/v1/config/model/check",
6380
- "summary": "Probe configured model readiness",
7353
+ "summary": "Run a bounded real-generation cognition readiness probe",
6381
7354
  "aliases": [
6382
7355
  "/v1/config/model/check"
6383
7356
  ],
@@ -6428,16 +7401,59 @@
6428
7401
  ],
6429
7402
  "operations": {
6430
7403
  "post": {
6431
- "summary": "Probe configured model readiness",
7404
+ "summary": "Run a bounded real-generation cognition readiness probe",
6432
7405
  "tags": [
6433
7406
  "Config"
6434
7407
  ],
7408
+ "description": "Sends a short non-streaming generation to the configured or requested model and succeeds only when non-empty visible text is returned. Defaults: 10,000ms and 8 tokens; timeout_ms is bounded to 1,000–30,000ms and max_tokens to 1–32. This is deliberately independent of the general 120-second backend timeout.",
7409
+ "requestBody": {
7410
+ "required": false,
7411
+ "content": {
7412
+ "application/json": {
7413
+ "schema": {
7414
+ "type": "object",
7415
+ "properties": {
7416
+ "model": {
7417
+ "type": "string"
7418
+ },
7419
+ "prompt": {
7420
+ "type": "string",
7421
+ "maxLength": 280
7422
+ },
7423
+ "max_tokens": {
7424
+ "type": "integer",
7425
+ "minimum": 1,
7426
+ "maximum": 32,
7427
+ "default": 8
7428
+ },
7429
+ "timeout_ms": {
7430
+ "type": "integer",
7431
+ "minimum": 1000,
7432
+ "maximum": 30000,
7433
+ "default": 10000
7434
+ },
7435
+ "timeout_s": {
7436
+ "type": "number",
7437
+ "deprecated": true,
7438
+ "description": "Compatibility alias, bounded to the same 1–30 second range."
7439
+ }
7440
+ }
7441
+ }
7442
+ }
7443
+ }
7444
+ },
6435
7445
  "responses": {
6436
7446
  "200": {
6437
- "description": "Model produced non-empty text"
7447
+ "description": "Model produced non-empty visible text"
7448
+ },
7449
+ "400": {
7450
+ "description": "Invalid bounded probe input"
6438
7451
  },
6439
7452
  "502": {
6440
- "description": "Model probe failed"
7453
+ "description": "Provider error, invalid response, or empty visible response"
7454
+ },
7455
+ "504": {
7456
+ "description": "Typed model_check_timeout"
6441
7457
  }
6442
7458
  }
6443
7459
  }
@@ -10266,11 +11282,271 @@
10266
11282
  "Memory"
10267
11283
  ],
10268
11284
  "responses": {
10269
- "200": {
10270
- "description": "Maintenance job result"
11285
+ "200": {
11286
+ "description": "Maintenance job result"
11287
+ },
11288
+ "400": {
11289
+ "description": "Invalid job request"
11290
+ }
11291
+ }
11292
+ }
11293
+ },
11294
+ "source_of_truth": [
11295
+ "GET /openapi.json",
11296
+ "packages/cli/src/api/openapi.ts"
11297
+ ]
11298
+ },
11299
+ {
11300
+ "id": "api.v1-memory-search",
11301
+ "kind": "api",
11302
+ "title": "/v1/memory/search",
11303
+ "summary": "Search memory stores (PT-04)",
11304
+ "aliases": [
11305
+ "/v1/memory/search"
11306
+ ],
11307
+ "keywords": [
11308
+ "rest",
11309
+ "openapi",
11310
+ "POST",
11311
+ "Memory",
11312
+ "v1",
11313
+ "memory",
11314
+ "search"
11315
+ ],
11316
+ "maturity": "stable",
11317
+ "layer": "interface",
11318
+ "audiences": [
11319
+ "integrator",
11320
+ "service-agent",
11321
+ "coding-agent"
11322
+ ],
11323
+ "interfaces": [
11324
+ {
11325
+ "type": "rest",
11326
+ "target": "POST /v1/memory/search"
11327
+ },
11328
+ {
11329
+ "type": "openapi",
11330
+ "target": "/openapi.json"
11331
+ }
11332
+ ],
11333
+ "references": [
11334
+ {
11335
+ "type": "source",
11336
+ "target": "packages/cli/src/api/openapi.ts",
11337
+ "relation": "openapi-source"
11338
+ },
11339
+ {
11340
+ "type": "documentation",
11341
+ "target": "docs/reference/rest-api.md",
11342
+ "relation": "endpoint-inventory"
11343
+ }
11344
+ ],
11345
+ "methods": [
11346
+ "POST"
11347
+ ],
11348
+ "tags": [
11349
+ "Memory"
11350
+ ],
11351
+ "operations": {
11352
+ "post": {
11353
+ "summary": "Search memory stores (PT-04)",
11354
+ "tags": [
11355
+ "Memory"
11356
+ ],
11357
+ "requestBody": {
11358
+ "required": true,
11359
+ "content": {
11360
+ "application/json": {
11361
+ "schema": {
11362
+ "type": "object",
11363
+ "required": [
11364
+ "query"
11365
+ ],
11366
+ "properties": {
11367
+ "query": {
11368
+ "type": "string"
11369
+ },
11370
+ "limit": {
11371
+ "type": "integer"
11372
+ }
11373
+ }
11374
+ }
11375
+ }
11376
+ }
11377
+ },
11378
+ "responses": {
11379
+ "200": {
11380
+ "description": "Search results"
11381
+ }
11382
+ }
11383
+ }
11384
+ },
11385
+ "source_of_truth": [
11386
+ "GET /openapi.json",
11387
+ "packages/cli/src/api/openapi.ts"
11388
+ ]
11389
+ },
11390
+ {
11391
+ "id": "api.v1-memory-speaker-identities-enroll",
11392
+ "kind": "api",
11393
+ "title": "/v1/memory/speaker-identities/enroll",
11394
+ "summary": "Enroll an explicitly self-identified speaker exemplar",
11395
+ "aliases": [
11396
+ "/v1/memory/speaker-identities/enroll"
11397
+ ],
11398
+ "keywords": [
11399
+ "rest",
11400
+ "openapi",
11401
+ "POST",
11402
+ "Memory",
11403
+ "Audio",
11404
+ "v1",
11405
+ "memory",
11406
+ "speaker-identities",
11407
+ "enroll"
11408
+ ],
11409
+ "maturity": "stable",
11410
+ "layer": "interface",
11411
+ "audiences": [
11412
+ "integrator",
11413
+ "service-agent",
11414
+ "coding-agent"
11415
+ ],
11416
+ "interfaces": [
11417
+ {
11418
+ "type": "rest",
11419
+ "target": "POST /v1/memory/speaker-identities/enroll"
11420
+ },
11421
+ {
11422
+ "type": "openapi",
11423
+ "target": "/openapi.json"
11424
+ }
11425
+ ],
11426
+ "references": [
11427
+ {
11428
+ "type": "source",
11429
+ "target": "packages/cli/src/api/openapi.ts",
11430
+ "relation": "openapi-source"
11431
+ },
11432
+ {
11433
+ "type": "documentation",
11434
+ "target": "docs/reference/rest-api.md",
11435
+ "relation": "endpoint-inventory"
11436
+ }
11437
+ ],
11438
+ "methods": [
11439
+ "POST"
11440
+ ],
11441
+ "tags": [
11442
+ "Memory",
11443
+ "Audio"
11444
+ ],
11445
+ "operations": {
11446
+ "post": {
11447
+ "summary": "Enroll an explicitly self-identified speaker exemplar",
11448
+ "tags": [
11449
+ "Memory",
11450
+ "Audio"
11451
+ ],
11452
+ "description": "Admin-only durable biometric enrollment. Body requires {scope_id, identity, observation_id, consent:{basis:'explicit_self_identification', asserted_by,...}, space:{embedding_set_slug,model,model_revision,model_digest,dimensions,normalization:'l2'}}. observation_id must already hold exactly one role-isolated speaker_identity_embedding in that exact model/revision/digest/set/dimension. Sender metadata and diarization labels are never identity proof; this endpoint creates no voice_sample_of or other identity graph edges and never returns a centroid/vector.",
11453
+ "requestBody": {
11454
+ "required": true,
11455
+ "content": {
11456
+ "application/json": {
11457
+ "schema": {
11458
+ "type": "object",
11459
+ "required": [
11460
+ "scope_id",
11461
+ "identity",
11462
+ "observation_id",
11463
+ "consent",
11464
+ "space"
11465
+ ],
11466
+ "properties": {
11467
+ "scope_id": {
11468
+ "type": "string"
11469
+ },
11470
+ "identity": {
11471
+ "type": "string"
11472
+ },
11473
+ "observation_id": {
11474
+ "type": "string"
11475
+ },
11476
+ "consent": {
11477
+ "type": "object",
11478
+ "required": [
11479
+ "basis",
11480
+ "asserted_by"
11481
+ ],
11482
+ "properties": {
11483
+ "basis": {
11484
+ "type": "string",
11485
+ "enum": [
11486
+ "explicit_self_identification"
11487
+ ]
11488
+ },
11489
+ "asserted_by": {
11490
+ "type": "string"
11491
+ },
11492
+ "asserted_at": {
11493
+ "type": "string",
11494
+ "format": "date-time"
11495
+ },
11496
+ "note": {
11497
+ "type": "string"
11498
+ }
11499
+ }
11500
+ },
11501
+ "space": {
11502
+ "type": "object",
11503
+ "required": [
11504
+ "embedding_set_slug",
11505
+ "model",
11506
+ "model_revision",
11507
+ "model_digest",
11508
+ "dimensions",
11509
+ "normalization"
11510
+ ],
11511
+ "properties": {
11512
+ "embedding_set_slug": {
11513
+ "type": "string"
11514
+ },
11515
+ "model": {
11516
+ "type": "string"
11517
+ },
11518
+ "model_revision": {
11519
+ "type": "string"
11520
+ },
11521
+ "model_digest": {
11522
+ "type": "string"
11523
+ },
11524
+ "dimensions": {
11525
+ "type": "integer",
11526
+ "minimum": 1
11527
+ },
11528
+ "normalization": {
11529
+ "type": "string",
11530
+ "enum": [
11531
+ "l2"
11532
+ ]
11533
+ }
11534
+ }
11535
+ }
11536
+ }
11537
+ }
11538
+ }
11539
+ }
11540
+ },
11541
+ "responses": {
11542
+ "201": {
11543
+ "description": "Consent-gated profile updated; only exemplar IDs and metadata are returned."
10271
11544
  },
10272
11545
  "400": {
10273
- "description": "Invalid job request"
11546
+ "description": "Consent, observation role, or exact vector-space contract invalid."
11547
+ },
11548
+ "403": {
11549
+ "description": "Admin scope required."
10274
11550
  }
10275
11551
  }
10276
11552
  }
@@ -10281,21 +11557,23 @@
10281
11557
  ]
10282
11558
  },
10283
11559
  {
10284
- "id": "api.v1-memory-search",
11560
+ "id": "api.v1-memory-speaker-identities-match",
10285
11561
  "kind": "api",
10286
- "title": "/v1/memory/search",
10287
- "summary": "Search memory stores (PT-04)",
11562
+ "title": "/v1/memory/speaker-identities/match",
11563
+ "summary": "Query durable speaker candidates in one exact vector space",
10288
11564
  "aliases": [
10289
- "/v1/memory/search"
11565
+ "/v1/memory/speaker-identities/match"
10290
11566
  ],
10291
11567
  "keywords": [
10292
11568
  "rest",
10293
11569
  "openapi",
10294
11570
  "POST",
10295
11571
  "Memory",
11572
+ "Audio",
10296
11573
  "v1",
10297
11574
  "memory",
10298
- "search"
11575
+ "speaker-identities",
11576
+ "match"
10299
11577
  ],
10300
11578
  "maturity": "stable",
10301
11579
  "layer": "interface",
@@ -10307,7 +11585,7 @@
10307
11585
  "interfaces": [
10308
11586
  {
10309
11587
  "type": "rest",
10310
- "target": "POST /v1/memory/search"
11588
+ "target": "POST /v1/memory/speaker-identities/match"
10311
11589
  },
10312
11590
  {
10313
11591
  "type": "openapi",
@@ -10330,14 +11608,17 @@
10330
11608
  "POST"
10331
11609
  ],
10332
11610
  "tags": [
10333
- "Memory"
11611
+ "Memory",
11612
+ "Audio"
10334
11613
  ],
10335
11614
  "operations": {
10336
11615
  "post": {
10337
- "summary": "Search memory stores (PT-04)",
11616
+ "summary": "Query durable speaker candidates in one exact vector space",
10338
11617
  "tags": [
10339
- "Memory"
11618
+ "Memory",
11619
+ "Audio"
10340
11620
  ],
11621
+ "description": "Admin-only exact-space biometric candidate query. Body requires {scope_id, vector, dimensions, space:{embedding_set_slug,model,model_revision,model_digest,normalization:'l2'}} and optional thresholds. It searches only consented speaker_identity_embedding centroids in the same scope and exact set/model/revision/digest/dimension—never generic memory vectors, acoustic vectors, semantic vectors, sender data, or diarization labels. Outcomes are provisional, ambiguous, or no_match and never assign a durable identity.",
10341
11622
  "requestBody": {
10342
11623
  "required": true,
10343
11624
  "content": {
@@ -10345,14 +11626,69 @@
10345
11626
  "schema": {
10346
11627
  "type": "object",
10347
11628
  "required": [
10348
- "query"
11629
+ "scope_id",
11630
+ "vector",
11631
+ "dimensions",
11632
+ "space"
10349
11633
  ],
10350
11634
  "properties": {
10351
- "query": {
11635
+ "scope_id": {
10352
11636
  "type": "string"
10353
11637
  },
10354
- "limit": {
10355
- "type": "integer"
11638
+ "vector": {
11639
+ "type": "array",
11640
+ "items": {
11641
+ "type": "number"
11642
+ }
11643
+ },
11644
+ "dimensions": {
11645
+ "type": "integer",
11646
+ "minimum": 1
11647
+ },
11648
+ "space": {
11649
+ "type": "object",
11650
+ "required": [
11651
+ "embedding_set_slug",
11652
+ "model",
11653
+ "model_revision",
11654
+ "model_digest",
11655
+ "normalization"
11656
+ ],
11657
+ "properties": {
11658
+ "embedding_set_slug": {
11659
+ "type": "string"
11660
+ },
11661
+ "model": {
11662
+ "type": "string"
11663
+ },
11664
+ "model_revision": {
11665
+ "type": "string"
11666
+ },
11667
+ "model_digest": {
11668
+ "type": "string"
11669
+ },
11670
+ "normalization": {
11671
+ "type": "string",
11672
+ "enum": [
11673
+ "l2"
11674
+ ]
11675
+ }
11676
+ }
11677
+ },
11678
+ "thresholds": {
11679
+ "type": "object",
11680
+ "properties": {
11681
+ "provisional": {
11682
+ "type": "number",
11683
+ "minimum": 0,
11684
+ "maximum": 1
11685
+ },
11686
+ "ambiguity_margin": {
11687
+ "type": "number",
11688
+ "minimum": 0,
11689
+ "maximum": 1
11690
+ }
11691
+ }
10356
11692
  }
10357
11693
  }
10358
11694
  }
@@ -10361,7 +11697,13 @@
10361
11697
  },
10362
11698
  "responses": {
10363
11699
  "200": {
10364
- "description": "Search results"
11700
+ "description": "Typed provisional/ambiguous/no_match outcome with candidates but no stored vectors."
11701
+ },
11702
+ "400": {
11703
+ "description": "Query vector or exact-space contract invalid."
11704
+ },
11705
+ "403": {
11706
+ "description": "Admin scope required."
10365
11707
  }
10366
11708
  }
10367
11709
  }
@@ -15288,7 +16630,7 @@
15288
16630
  "id": "api.v1-vision-embed",
15289
16631
  "kind": "api",
15290
16632
  "title": "/v1/vision/embed",
15291
- "summary": "Create a vision embedding for uploaded or referenced media",
16633
+ "summary": "Create an offline-only OpenCLIP image embedding",
15292
16634
  "aliases": [
15293
16635
  "/v1/vision/embed"
15294
16636
  ],
@@ -15338,16 +16680,201 @@
15338
16680
  ],
15339
16681
  "operations": {
15340
16682
  "post": {
15341
- "summary": "Create a vision embedding for uploaded or referenced media",
16683
+ "summary": "Create an offline-only OpenCLIP image embedding",
15342
16684
  "tags": [
15343
16685
  "Vision"
15344
16686
  ],
16687
+ "description": "Uses only the verified OpenCLIP ViT-B-32/laion2b_s34b_b79k runtime. Inference never installs dependencies or downloads model artifacts; it checks the setup artifact digest and denies worker network access. Provides path or bytesBase64.",
16688
+ "requestBody": {
16689
+ "required": true,
16690
+ "content": {
16691
+ "application/json": {
16692
+ "schema": {
16693
+ "type": "object",
16694
+ "properties": {
16695
+ "path": {
16696
+ "type": "string"
16697
+ },
16698
+ "bytesBase64": {
16699
+ "type": "string",
16700
+ "description": "Base64-encoded image bytes"
16701
+ }
16702
+ }
16703
+ }
16704
+ }
16705
+ }
16706
+ },
15345
16707
  "responses": {
15346
16708
  "200": {
15347
- "description": "Vision embedding result"
16709
+ "description": "512-dimensional L2-normalized embedding with model digest"
15348
16710
  },
15349
16711
  "400": {
15350
16712
  "description": "Invalid media input"
16713
+ },
16714
+ "502": {
16715
+ "description": "Typed vision_embedding_failed"
16716
+ },
16717
+ "503": {
16718
+ "description": "Typed vision_runtime_not_ready or Jetson memory admission failure"
16719
+ },
16720
+ "504": {
16721
+ "description": "Typed vision_embedding_timeout"
16722
+ }
16723
+ }
16724
+ }
16725
+ },
16726
+ "source_of_truth": [
16727
+ "GET /openapi.json",
16728
+ "packages/cli/src/api/openapi.ts"
16729
+ ]
16730
+ },
16731
+ {
16732
+ "id": "api.v1-vision-embed-readiness",
16733
+ "kind": "api",
16734
+ "title": "/v1/vision/embed/readiness",
16735
+ "summary": "Read OpenCLIP vision embedding readiness",
16736
+ "aliases": [
16737
+ "/v1/vision/embed/readiness"
16738
+ ],
16739
+ "keywords": [
16740
+ "rest",
16741
+ "openapi",
16742
+ "GET",
16743
+ "Vision",
16744
+ "v1",
16745
+ "vision",
16746
+ "embed",
16747
+ "readiness"
16748
+ ],
16749
+ "maturity": "stable",
16750
+ "layer": "interface",
16751
+ "audiences": [
16752
+ "integrator",
16753
+ "service-agent",
16754
+ "coding-agent"
16755
+ ],
16756
+ "interfaces": [
16757
+ {
16758
+ "type": "rest",
16759
+ "target": "GET /v1/vision/embed/readiness"
16760
+ },
16761
+ {
16762
+ "type": "openapi",
16763
+ "target": "/openapi.json"
16764
+ }
16765
+ ],
16766
+ "references": [
16767
+ {
16768
+ "type": "source",
16769
+ "target": "packages/cli/src/api/openapi.ts",
16770
+ "relation": "openapi-source"
16771
+ },
16772
+ {
16773
+ "type": "documentation",
16774
+ "target": "docs/reference/rest-api.md",
16775
+ "relation": "endpoint-inventory"
16776
+ }
16777
+ ],
16778
+ "methods": [
16779
+ "GET"
16780
+ ],
16781
+ "tags": [
16782
+ "Vision"
16783
+ ],
16784
+ "operations": {
16785
+ "get": {
16786
+ "summary": "Read OpenCLIP vision embedding readiness",
16787
+ "tags": [
16788
+ "Vision"
16789
+ ],
16790
+ "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.",
16791
+ "responses": {
16792
+ "200": {
16793
+ "description": "Verified OpenCLIP runtime is ready"
16794
+ },
16795
+ "503": {
16796
+ "description": "Not ready; includes setup_in_progress, lastError, and Jetson memory admission"
16797
+ }
16798
+ }
16799
+ }
16800
+ },
16801
+ "source_of_truth": [
16802
+ "GET /openapi.json",
16803
+ "packages/cli/src/api/openapi.ts"
16804
+ ]
16805
+ },
16806
+ {
16807
+ "id": "api.v1-vision-embed-setup",
16808
+ "kind": "api",
16809
+ "title": "/v1/vision/embed/setup",
16810
+ "summary": "Explicitly set up the isolated OpenCLIP vision runtime",
16811
+ "aliases": [
16812
+ "/v1/vision/embed/setup"
16813
+ ],
16814
+ "keywords": [
16815
+ "rest",
16816
+ "openapi",
16817
+ "POST",
16818
+ "Vision",
16819
+ "v1",
16820
+ "vision",
16821
+ "embed",
16822
+ "setup"
16823
+ ],
16824
+ "maturity": "stable",
16825
+ "layer": "interface",
16826
+ "audiences": [
16827
+ "integrator",
16828
+ "service-agent",
16829
+ "coding-agent"
16830
+ ],
16831
+ "interfaces": [
16832
+ {
16833
+ "type": "rest",
16834
+ "target": "POST /v1/vision/embed/setup"
16835
+ },
16836
+ {
16837
+ "type": "openapi",
16838
+ "target": "/openapi.json"
16839
+ }
16840
+ ],
16841
+ "references": [
16842
+ {
16843
+ "type": "source",
16844
+ "target": "packages/cli/src/api/openapi.ts",
16845
+ "relation": "openapi-source"
16846
+ },
16847
+ {
16848
+ "type": "documentation",
16849
+ "target": "docs/reference/rest-api.md",
16850
+ "relation": "endpoint-inventory"
16851
+ }
16852
+ ],
16853
+ "methods": [
16854
+ "POST"
16855
+ ],
16856
+ "tags": [
16857
+ "Vision"
16858
+ ],
16859
+ "operations": {
16860
+ "post": {
16861
+ "summary": "Explicitly set up the isolated OpenCLIP vision runtime",
16862
+ "tags": [
16863
+ "Vision"
16864
+ ],
16865
+ "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.",
16866
+ "responses": {
16867
+ "200": {
16868
+ "description": "Already ready"
16869
+ },
16870
+ "202": {
16871
+ "description": "Single-flight setup accepted; poll readiness"
16872
+ },
16873
+ "403": {
16874
+ "description": "Admin scope required"
16875
+ },
16876
+ "500": {
16877
+ "description": "Setup could not be started"
15351
16878
  }
15352
16879
  }
15353
16880
  }
@@ -29108,7 +30635,7 @@
29108
30635
  "id": "guide.rest-endpoints-voice-vision",
29109
30636
  "kind": "guide",
29110
30637
  "title": "Voice, Audio, Vision, And Voicechat",
29111
- "summary": "First poll GET /v1/ocr/readiness?language=eng. On Jetson, a privileged or interactive npm installation/bootstrap provisions tesseract-ocr, python3-venv, an import-verified system OpenCV provider (including NVIDIA libopencv-python), python3-numpy, python3-pil, and python3-reportlab. Daemon startup then creates (or repairs) ~/.omnius/runtimes/vision/ocr-advanc",
30638
+ "summary": "POST /v1/vision/embed uses an isolated, CUDA-enabled OpenCLIP ViT-B-32 / laion2bs34bb79k backend and returns a 512-dimensional, L2-normalized image vector plus the verified artifact digest. It does not make descriptive claims or invoke an LLM.",
29112
30639
  "keywords": [
29113
30640
  "rest",
29114
30641
  "endpoints",