Source code for klea_utils.nodes.guard_router
#!/usr/bin/env python3
"""
Guard router node for routing based on guard decision
File: klea_utils/nodes/guard_router.py
Copyright 2026 Ankur Sinha
Author: Ankur Sinha <sanjay DOT ankur AT gmail DOT com>
"""
import logging
from typing import override
from pydantic import BaseModel
from .abstract import AbstractRouterNode
[docs]
class GuardRouterNode(AbstractRouterNode):
"""Router node that routes based on guard decision.
Reads the guard_decision from state and returns routing label:
- "safe" -> continue to next node
- "unsafe" -> decline to respond node
"""
def __init__(self, logger: logging.Logger, label: str):
"""Initialise the guard router.
:param logger: Logger instance
:param label: Human-readable label for UI progress display
"""
super().__init__(logger, label)
[docs]
@override
async def execute(self, state: BaseModel) -> str:
"""Route based on guard_decision in state.
:param state: Current graph state
:returns: Routing label ("safe" or "unsafe")
"""
self.write_custom_stream({"type": "progress", "node": self.label})
self.logger.debug(f"{state = }")
guard_decision = getattr(state, "guard_decision", "safe")
self.logger.debug(f"{guard_decision = }")
return guard_decision