log_callback_handler.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. def on_chain_start(
  13. self, serialized: Dict[str, Any], inputs: Dict[str, Any], **kwargs: Any
  14. ) -> None:
  15. """Print out that we are entering a chain."""
  16. self.print_text(
  17. f"\n\n> Entering new {serialized['id'][-1]} chain...",
  18. )
  19. def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> None:
  20. """Print out that we finished a chain."""
  21. self.print_text("\n> Finished chain.")
  22. self.print_text(f"\nOutputs: {outputs}")
  23. def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any:
  24. """Run on agent action."""
  25. self.print_text(action.log)
  26. def on_tool_end(
  27. self,
  28. output: str,
  29. observation_prefix: Optional[str] = None,
  30. llm_prefix: Optional[str] = None,
  31. **kwargs: Any,
  32. ) -> None:
  33. """If not the final action, print out observation."""
  34. if observation_prefix is not None:
  35. self.print_text(f"\n{observation_prefix}")
  36. self.print_text(output)
  37. if llm_prefix is not None:
  38. self.print_text(f"\n{llm_prefix}")
  39. def on_text(self, text: str, **kwargs: Any) -> None:
  40. """Run when agent ends."""
  41. self.print_text(text)
  42. def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> None:
  43. """Run on agent end."""
  44. self.print_text(finish.log)