@@ -368,3 +368,56 @@ def evaluate_before_model(self, **_: Any) -> None:
368368 logger .removeHandler (caplog .handler )
369369 logger .setLevel (prev )
370370 assert any ("governance check failed" in r .message for r in caplog .records )
371+
372+
373+ # --------------------------------------------------------------------------
374+ # coverage: swallow on after_model/tool_call + extraction edges
375+ # --------------------------------------------------------------------------
376+
377+
378+ class _Boom :
379+ """Evaluator whose every evaluate_* raises a non-block error."""
380+
381+ def __getattr__ (self , _name : str ) -> Any :
382+ def _raise (* _a : Any , ** _k : Any ) -> None :
383+ raise RuntimeError ("evaluator bug" )
384+
385+ return _raise
386+
387+
388+ def test_after_model_and_tool_call_swallow_non_block_errors (caplog ):
389+ cb = GovernanceCallbacks (evaluator = _Boom (), agent_name = "a" , session_id = "s" )
390+ logger = logging .getLogger ("uipath_llamaindex.governance.event_handler" )
391+ logger .addHandler (caplog .handler )
392+ prev = logger .level
393+ logger .setLevel (logging .WARNING )
394+ try :
395+ cb .after_model (SimpleNamespace (message = SimpleNamespace (content = "x" )))
396+ cb .tool_call (SimpleNamespace (name = "t" ), {})
397+ finally :
398+ logger .removeHandler (caplog .handler )
399+ logger .setLevel (prev )
400+ assert sum ("governance check failed" in r .message for r in caplog .records ) >= 2
401+
402+
403+ def test_extraction_edges ():
404+ from uipath_llamaindex .governance .event_handler import (
405+ _latest_message_text ,
406+ _message_text ,
407+ _response_text ,
408+ )
409+
410+ # _message_text: None / str / object with no content or blocks -> str()
411+ assert _message_text (None ) == ""
412+ assert _message_text ("plain" ) == "plain"
413+ assert isinstance (_message_text (SimpleNamespace (content = None , blocks = None )), str )
414+ # _latest_message_text: single (non-list) message
415+ assert _latest_message_text (SimpleNamespace (content = "solo" )) == "solo"
416+ # _response_text: None / .message / .text fallback / str() fallback
417+ assert _response_text (None ) == ""
418+ assert (
419+ _response_text (SimpleNamespace (message = SimpleNamespace (content = "viamsg" )))
420+ == "viamsg"
421+ )
422+ assert _response_text (SimpleNamespace (message = None , text = "viatext" )) == "viatext"
423+ assert isinstance (_response_text (SimpleNamespace (message = None , text = None )), str )
0 commit comments