| @@ -79,6 +79,7 @@ Edit `config.yaml` (autosave goes to `config.autosave.yaml`). | |||||
| - `wideband-aggressive`: min_span_hz=6000, max_span_hz=250000 | - `wideband-aggressive`: min_span_hz=6000, max_span_hz=250000 | ||||
| - `resources.max_refinement_jobs` — processing budget hint | - `resources.max_refinement_jobs` — processing budget hint | ||||
| - `resources.max_recording_streams` — recording/streaming budget hint | - `resources.max_recording_streams` — recording/streaming budget hint | ||||
| - `resources.max_decode_jobs` — decode budget hint | |||||
| - `profiles[]` — named operating profiles/intent metadata | - `profiles[]` — named operating profiles/intent metadata | ||||
| In phase 1, the engine stays backward compatible, but the config model now reflects the intended separation between: | In phase 1, the engine stays backward compatible, but the config model now reflects the intended separation between: | ||||
| @@ -361,7 +361,7 @@ func (rt *dspRuntime) refineSignals(art *spectrumArtifacts, input pipeline.Refin | |||||
| } | } | ||||
| } | } | ||||
| maxRecord := rt.cfg.Resources.MaxRecordingStreams | maxRecord := rt.cfg.Resources.MaxRecordingStreams | ||||
| maxDecode := rt.cfg.Resources.MaxRecordingStreams | |||||
| maxDecode := rt.cfg.Resources.MaxDecodeJobs | |||||
| enforceDecisionBudgets(decisions, maxRecord, maxDecode) | enforceDecisionBudgets(decisions, maxRecord, maxDecode) | ||||
| rt.det.UpdateClasses(signals) | rt.det.UpdateClasses(signals) | ||||
| return pipeline.RefinementResult{Signals: signals, Decisions: decisions, Candidates: selectedCandidates} | return pipeline.RefinementResult{Signals: signals, Decisions: decisions, Candidates: selectedCandidates} | ||||
| @@ -69,6 +69,7 @@ resources: | |||||
| prefer_gpu: true | prefer_gpu: true | ||||
| max_refinement_jobs: 8 | max_refinement_jobs: 8 | ||||
| max_recording_streams: 16 | max_recording_streams: 16 | ||||
| max_decode_jobs: 16 | |||||
| profiles: | profiles: | ||||
| - name: legacy | - name: legacy | ||||
| description: Current single-band legacy behavior | description: Current single-band legacy behavior | ||||
| @@ -106,6 +106,7 @@ type ResourceConfig struct { | |||||
| PreferGPU bool `yaml:"prefer_gpu" json:"prefer_gpu"` | PreferGPU bool `yaml:"prefer_gpu" json:"prefer_gpu"` | ||||
| MaxRefinementJobs int `yaml:"max_refinement_jobs" json:"max_refinement_jobs"` | MaxRefinementJobs int `yaml:"max_refinement_jobs" json:"max_refinement_jobs"` | ||||
| MaxRecordingStreams int `yaml:"max_recording_streams" json:"max_recording_streams"` | MaxRecordingStreams int `yaml:"max_recording_streams" json:"max_recording_streams"` | ||||
| MaxDecodeJobs int `yaml:"max_decode_jobs" json:"max_decode_jobs"` | |||||
| } | } | ||||
| type ProfileConfig struct { | type ProfileConfig struct { | ||||
| @@ -184,6 +185,7 @@ func Default() Config { | |||||
| PreferGPU: true, | PreferGPU: true, | ||||
| MaxRefinementJobs: 8, | MaxRefinementJobs: 8, | ||||
| MaxRecordingStreams: 16, | MaxRecordingStreams: 16, | ||||
| MaxDecodeJobs: 16, | |||||
| }, | }, | ||||
| Profiles: []ProfileConfig{ | Profiles: []ProfileConfig{ | ||||
| {Name: "legacy", Description: "Current single-band pipeline behavior", Pipeline: &PipelineConfig{Mode: "legacy", Goals: PipelineGoalConfig{Intent: "general-monitoring"}}}, | {Name: "legacy", Description: "Current single-band pipeline behavior", Pipeline: &PipelineConfig{Mode: "legacy", Goals: PipelineGoalConfig{Intent: "general-monitoring"}}}, | ||||
| @@ -23,6 +23,7 @@ type Policy struct { | |||||
| RefinementMaxSpanHz float64 `json:"refinement_max_span_hz"` | RefinementMaxSpanHz float64 `json:"refinement_max_span_hz"` | ||||
| RefinementAutoSpan bool `json:"refinement_auto_span"` | RefinementAutoSpan bool `json:"refinement_auto_span"` | ||||
| PreferGPU bool `json:"prefer_gpu"` | PreferGPU bool `json:"prefer_gpu"` | ||||
| MaxDecodeJobs int `json:"max_decode_jobs"` | |||||
| } | } | ||||
| func PolicyFromConfig(cfg config.Config) Policy { | func PolicyFromConfig(cfg config.Config) Policy { | ||||
| @@ -47,6 +48,7 @@ func PolicyFromConfig(cfg config.Config) Policy { | |||||
| RefinementMaxSpanHz: cfg.Refinement.MaxSpanHz, | RefinementMaxSpanHz: cfg.Refinement.MaxSpanHz, | ||||
| RefinementAutoSpan: config.BoolValue(cfg.Refinement.AutoSpan, true), | RefinementAutoSpan: config.BoolValue(cfg.Refinement.AutoSpan, true), | ||||
| PreferGPU: cfg.Resources.PreferGPU, | PreferGPU: cfg.Resources.PreferGPU, | ||||
| MaxDecodeJobs: cfg.Resources.MaxDecodeJobs, | |||||
| } | } | ||||
| } | } | ||||