briefcase.routing
pip install briefcase-ai[routing]The legacy BaseRouter interface and a newer policy-versioned routing layer.
Legacy BaseRouter
from briefcase.routing import BaseRouter, RoutingDecision
class StaticRouter(BaseRouter): def route(self, decision_context) -> RoutingDecision: return RoutingDecision( action="senior-agent", source="static", eval_time_ms=0.1, reason="default route", )
router = StaticRouter()decision = router.route({"priority": "high"})print(decision.action, decision.source)Policy layer: PolicyRegistry, PolicyVersion, PolicyRule, AgentRouter
from datetime import datetime, timezone
from briefcase.routing import ( PolicyRegistry, PolicyVersion, PolicyRule, AgentRouter,)
registry = PolicyRegistry()
policy = PolicyVersion( policy_id="ticket-routing", version="1", rules=[ PolicyRule( rule_id="high-priority", condition={"priority": "high"}, choice="senior-agent", rationale="High priority tickets go to senior agents.", ), ], default_choice="general-agent",)
registry.publish(policy, valid_from=datetime.now(timezone.utc))
router = AgentRouter(registry, use_case="ticket-routing", policy_id="ticket-routing")decision = router.route({"priority": "high"})print(decision.selected, decision.matched_rule_id, decision.policy_version)PolicyRegistry(store=None) .publish(policy, *, valid_from, transaction_time=None, source="policy_registry") .get(policy_id, *, as_of_transaction_time=None, as_of_valid_time=None) .history(policy_id)
PolicyVersion(policy_id, version, rules, default_choice=None, description=None) .select(context) -> PolicyEvaluationResult
PolicyRule(rule_id, condition, choice, rationale=None) .matches(context) -> bool
AgentRouter(registry, *, use_case, policy_id, candidates_provider=None) .route(context, *, evidence_refs=None, as_of_transaction_time=None) -> AgentRoutingDecisionAgentRoutingDecision attributes: decision_id, use_case, context,
candidates, selected, policy_id, policy_version, matched_rule_id,
evidence_refs, rationale, decided_at, plus to_dict().
InternalRouter, OPARouter
from briefcase.routing.internal import InternalRouterfrom briefcase.routing.opa import OPARouter
InternalRouter(confidence_threshold=0.85)OPARouter(endpoint, timeout_ms=50, cache_ttl_seconds=60, fallback_threshold=0.85)OPARouter.route() posts confidence, context version, model name, and tags to
OPA, caches successful decisions, and falls back to InternalRouter on errors.