router/semantic: coarse-route contract, interface, and legacy mapping (slice 12)
Defines the six-class SemanticRoute type (conversation, knowledge, action, memory_write, system, uncertain), the SemanticRouteDecision output, the SemanticRouter interface, and the deterministic Intent→SemanticRoute mapping from the current seven-intent cascade.
This commit is contained in:
@@ -0,0 +1,60 @@
|
|||||||
|
// Package semantic defines the coarse-route contract for the learned-router
|
||||||
|
// experiment. The existing seven-intent router remains authoritative; this
|
||||||
|
// package provides a six-class semantic layer that runs only in eval/shadow
|
||||||
|
// mode until it earns promotion.
|
||||||
|
//
|
||||||
|
// The six coarse routes are:
|
||||||
|
//
|
||||||
|
// - conversation — social turns, greetings, mood, jokes, open-ended chat
|
||||||
|
// - knowledge — questions seeking an answer (world, recall, calendar)
|
||||||
|
// - action — executable commands and reminders (act, reminder)
|
||||||
|
// - memory_write — structured or unstructured writes (fact, note)
|
||||||
|
// - system — time, date, quiet mode, self-management
|
||||||
|
// - uncertain — too little signal to decide; the authoritative router clarifies
|
||||||
|
//
|
||||||
|
// No capability, function, slot, or source information lives in this artifact.
|
||||||
|
// That is a later stage. The contract here is purely coarse-route + confidence.
|
||||||
|
package semantic
|
||||||
|
|
||||||
|
// SemanticRoute — one of six coarse semantic classes.
|
||||||
|
type SemanticRoute string
|
||||||
|
|
||||||
|
const (
|
||||||
|
RouteConversation SemanticRoute = "conversation"
|
||||||
|
RouteKnowledge SemanticRoute = "knowledge"
|
||||||
|
RouteAction SemanticRoute = "action"
|
||||||
|
RouteMemoryWrite SemanticRoute = "memory_write"
|
||||||
|
RouteSystem SemanticRoute = "system"
|
||||||
|
RouteUncertain SemanticRoute = "uncertain"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AllRoutes is the ordered set of valid routes, for iteration and confusion
|
||||||
|
// matrix layout.
|
||||||
|
var AllRoutes = []SemanticRoute{
|
||||||
|
RouteConversation,
|
||||||
|
RouteKnowledge,
|
||||||
|
RouteAction,
|
||||||
|
RouteMemoryWrite,
|
||||||
|
RouteSystem,
|
||||||
|
RouteUncertain,
|
||||||
|
}
|
||||||
|
|
||||||
|
// SemanticRouteDecision — the output of a coarse router. No slots, no
|
||||||
|
// capability, no source — just the route, confidence, and whether the model
|
||||||
|
// chose to abstain.
|
||||||
|
type SemanticRouteDecision struct {
|
||||||
|
Route SemanticRoute
|
||||||
|
Confidence float64
|
||||||
|
Abstain bool
|
||||||
|
ModelID string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidRoute reports whether r is one of the six defined routes.
|
||||||
|
func ValidRoute(r SemanticRoute) bool {
|
||||||
|
switch r {
|
||||||
|
case RouteConversation, RouteKnowledge, RouteAction,
|
||||||
|
RouteMemoryWrite, RouteSystem, RouteUncertain:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package semantic
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
// SemanticRouter — the interface behind which experiment models run. The
|
||||||
|
// implementation decides whether to consume MatchText; the contract here is
|
||||||
|
// that Route returns a coarse decision without touching the authoritative
|
||||||
|
// router's Intent, slots, capability, or source.
|
||||||
|
//
|
||||||
|
// A nil implementation is a valid floor — the shadow harness records
|
||||||
|
// "no model" and continues.
|
||||||
|
type SemanticRouter interface {
|
||||||
|
Route(ctx context.Context, text string) (SemanticRouteDecision, error)
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package semantic
|
||||||
|
|
||||||
|
import "github.com/kami/maven/internal/router"
|
||||||
|
|
||||||
|
// IntentToRoute maps the current seven-intent Decision.Intent to a coarse
|
||||||
|
// semantic route. The mapping is deterministic and exists only for
|
||||||
|
// baseline/evaluation — it does not change current routing behaviour.
|
||||||
|
//
|
||||||
|
// Mapping:
|
||||||
|
//
|
||||||
|
// chat → conversation
|
||||||
|
// query → knowledge
|
||||||
|
// act → action
|
||||||
|
// reminder → action
|
||||||
|
// fact → memory_write
|
||||||
|
// note → memory_write
|
||||||
|
// system → system
|
||||||
|
// unknown → uncertain
|
||||||
|
func IntentToRoute(intent router.Intent) SemanticRoute {
|
||||||
|
switch intent {
|
||||||
|
case router.IntentChat:
|
||||||
|
return RouteConversation
|
||||||
|
case router.IntentQuery:
|
||||||
|
return RouteKnowledge
|
||||||
|
case router.IntentAct:
|
||||||
|
return RouteAction
|
||||||
|
case router.IntentReminder:
|
||||||
|
return RouteAction
|
||||||
|
case router.IntentFact:
|
||||||
|
return RouteMemoryWrite
|
||||||
|
case router.IntentNote:
|
||||||
|
return RouteMemoryWrite
|
||||||
|
case router.IntentSystem:
|
||||||
|
return RouteSystem
|
||||||
|
default:
|
||||||
|
return RouteUncertain
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user