Skip to content

html_logger

langroid/utils/html_logger.py

HTML Logger for Langroid Task System.

This module provides an HTML logger that creates self-contained HTML files with collapsible log entries for better visualization of agent interactions.

HTMLLogger(filename, log_dir='logs', model_info='', append=False)

Logger that outputs task logs as interactive HTML files.

Parameters:

Name Type Description Default
filename str

Base name for the log file (without extension)

required
log_dir str

Directory to store log files

'logs'
model_info str

Information about the model being used

''
append bool

Whether to append to existing file

False
Source code in langroid/utils/html_logger.py
def __init__(
    self,
    filename: str,
    log_dir: str = "logs",
    model_info: str = "",
    append: bool = False,
):
    """Initialize the HTML logger.

    Args:
        filename: Base name for the log file (without extension)
        log_dir: Directory to store log files
        model_info: Information about the model being used
        append: Whether to append to existing file
    """
    self.filename = filename
    self.log_dir = Path(log_dir)
    self.log_dir.mkdir(parents=True, exist_ok=True)
    self.file_path = self.log_dir / f"{filename}.html"
    self.model_info = model_info
    self.entries: List[Dict[str, Any]] = []
    self.entry_counter = 0
    self.tool_counter = 0

    # Logger for errors
    self.logger = setup_logger(__name__)

    if not append or not self.file_path.exists():
        self._write_header()

log(fields)

Log a message entry.

Parameters:

Name Type Description Default
fields BaseModel

ChatDocLoggerFields containing all log information

required
Source code in langroid/utils/html_logger.py
def log(self, fields: BaseModel) -> None:
    """Log a message entry.

    Args:
        fields: ChatDocLoggerFields containing all log information
    """
    try:
        entry_html = self._format_entry(fields)
        self._append_to_file(entry_html)
        self.entry_counter += 1
    except Exception as e:
        self.logger.error(f"Failed to log entry: {e}")

close()

Close the HTML file with footer.

Source code in langroid/utils/html_logger.py
    def close(self) -> None:
        """Close the HTML file with footer."""
        footer = """
    </div>
    <script>
        // Update message count
        const header = document.querySelector('.header-line div:last-child');
        if (header) {
            const messageCount = document.querySelectorAll('.entry').length;
            header.textContent = header.textContent.replace(
                /\\d+ messages/, messageCount + ' messages'
            );
        }
    </script>
</body>
</html>"""
        try:
            with open(self.file_path, "a", encoding="utf-8") as f:
                f.write(footer)
        except Exception as e:
            self.logger.error(f"Failed to write HTML footer: {e}")