1
0

log_callback_handler.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from langchain.callbacks.base import BaseCallbackHandler
  2. from langchain.schema import AgentAction, AgentFinish
  3. from typing import Dict, Any, Optional
  4. from nicegui.element import Element
  5. class NiceGuiLogElementCallbackHandler(BaseCallbackHandler):
  6. """Callback Handler that writes to the log element of NicGui."""
  7. def __init__(self, element: Element) -> None:
  8. """Initialize callback handler."""
  9. self.element = element
  10. def print_text(self, message: str) -> None:
  11. self.element.push(message)
  12. self.element.update()
  13. def on_chain_start(
  14. self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any
  15. ) -> None:
  16. """Print out that we are entering a chain."""
  17. self.print_text(
  18. f"\n\n> Entering new {serialized['id'][-1]} chain...",
  19. )
  20. def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> None:
  21. """Print out that we finished a chain."""
  22. self.print_text("\n> Finished chain.")
  23. self.print_text(f"\nOutputs: {outputs}")
  24. def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any:
  25. """Run on agent action."""
  26. self.print_text(action.log)
  27. def on_tool_end(
  28. self,
  29. output: str,
  30. observation_prefix: Optional[str] = None,
  31. llm_prefix: Optional[str] = None,
  32. **kwargs: Any,
  33. ) -> None:
  34. """If not the final action, print out observation."""
  35. if observation_prefix is not None:
  36. self.print_text(f"\n{observation_prefix}")
  37. self.print_text(output)
  38. if llm_prefix is not None:
  39. self.print_text(f"\n{llm_prefix}")
  40. def on_text(self, text: str, **kwargs: Any) -> None:
  41. """Run when agent ends."""
  42. self.print_text(text)
  43. def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> None:
  44. """Run on agent end."""
  45. self.print_text(finish.log)