Skip to content

router

router

Heuristic model router — selects the best model based on query characteristics.

Classes

HeuristicRouter

HeuristicRouter(available_models: List[str] | None = None, *, default_model: str = '', fallback_model: str = '')

Bases: RouterPolicy

Rule-based model router.

Rules (applied in order): 1. Code detected → prefer model with "code"/"coder" in name 2. Math detected → prefer larger model 3. Short query (<50 chars, no code/math) → prefer smaller/faster model 4. Long/complex query (>500 chars OR reasoning keywords) → prefer larger model 5. High urgency (>0.8) → override to smaller model 6. Default fallback → default_model → fallback_model → first available

Source code in src/openjarvis/learning/router.py
def __init__(
    self,
    available_models: List[str] | None = None,
    *,
    default_model: str = "",
    fallback_model: str = "",
) -> None:
    self._available = available_models or []
    self._default = default_model
    self._fallback = fallback_model

DefaultQueryAnalyzer

Bases: QueryAnalyzer

Default query analyzer wrapping the heuristic build_routing_context function.

Functions

build_routing_context

build_routing_context(query: str, *, urgency: float = 0.5) -> RoutingContext

Populate a RoutingContext from a raw query string.

Source code in src/openjarvis/learning/router.py
def build_routing_context(query: str, *, urgency: float = 0.5) -> RoutingContext:
    """Populate a ``RoutingContext`` from a raw query string."""
    return RoutingContext(
        query=query,
        query_length=len(query),
        has_code=bool(_CODE_PATTERNS.search(query)),
        has_math=bool(_MATH_PATTERNS.search(query)),
        urgency=urgency,
    )