Ver código fonte

Use candidate hints for auto actions

master
Jan Svabenik 5 horas atrás
pai
commit
be18c08756
2 arquivos alterados com 32 adições e 3 exclusões
  1. +18
    -3
      internal/pipeline/decisions.go
  2. +14
    -0
      internal/pipeline/decisions_test.go

+ 18
- 3
internal/pipeline/decisions.go Ver arquivo

@@ -1,6 +1,10 @@
package pipeline

import "sdr-wideband-suite/internal/classifier"
import (
"strings"

"sdr-wideband-suite/internal/classifier"
)

type SignalDecision struct {
Candidate Candidate `json:"candidate"`
@@ -12,18 +16,29 @@ type SignalDecision struct {

func DecideSignalAction(policy Policy, candidate Candidate, cls *classifier.Classification) SignalDecision {
decision := SignalDecision{Candidate: candidate}
classTag := ""
hintTag := strings.TrimSpace(candidate.Hint)
if cls != nil {
decision.Class = string(cls.ModType)
classTag = decision.Class
}
if cls != nil && WantsClass(policy.AutoRecordClasses, string(cls.ModType)) {
if classTag != "" && WantsClass(policy.AutoRecordClasses, classTag) {
decision.ShouldRecord = true
decision.Reason = "matched auto_record_classes"
} else if classTag == "" && hintTag != "" && WantsClass(policy.AutoRecordClasses, hintTag) {
decision.ShouldRecord = true
decision.Reason = "matched auto_record_classes (hint)"
}
if cls != nil && WantsClass(policy.AutoDecodeClasses, string(cls.ModType)) {
if classTag != "" && WantsClass(policy.AutoDecodeClasses, classTag) {
decision.ShouldAutoDecode = true
if decision.Reason == "" {
decision.Reason = "matched auto_decode_classes"
}
} else if classTag == "" && hintTag != "" && WantsClass(policy.AutoDecodeClasses, hintTag) {
decision.ShouldAutoDecode = true
if decision.Reason == "" {
decision.Reason = "matched auto_decode_classes (hint)"
}
}
if decision.Reason == "" && candidate.Hint != "" {
decision.Reason = "policy evaluated candidate hint"


+ 14
- 0
internal/pipeline/decisions_test.go Ver arquivo

@@ -17,3 +17,17 @@ func TestDecideSignalAction(t *testing.T) {
t.Fatalf("expected auto decode decision")
}
}

func TestDecideSignalActionUsesHintWithoutClass(t *testing.T) {
policy := Policy{AutoRecordClasses: []string{"WFM"}, AutoDecodeClasses: []string{"FT8"}}
decision := DecideSignalAction(policy, Candidate{ID: 2, Hint: "WFM"}, nil)
if !decision.ShouldRecord {
t.Fatalf("expected record decision from hint")
}
if decision.ShouldAutoDecode {
t.Fatalf("unexpected auto decode decision from hint")
}
if decision.Reason == "" {
t.Fatalf("expected reason for hint-based decision")
}
}

Carregando…
Cancelar
Salvar