Format a log entry as HTML. Args: fields: ChatDocLoggerFields containing all log information Returns: HTML string for the entry
(self, fields: BaseModel)
| 514 | self.logger.error(f"Failed to log entry: {e}") |
| 515 | |
| 516 | def _format_entry(self, fields: BaseModel) -> str: |
| 517 | """Format a log entry as HTML. |
| 518 | |
| 519 | Args: |
| 520 | fields: ChatDocLoggerFields containing all log information |
| 521 | |
| 522 | Returns: |
| 523 | HTML string for the entry |
| 524 | """ |
| 525 | entry_id = f"entry_{self.entry_counter}" |
| 526 | |
| 527 | # Get all relevant fields |
| 528 | responder = str(getattr(fields, "responder", "UNKNOWN")) |
| 529 | task_name = getattr(fields, "task_name", "root") |
| 530 | # TODO (CLAUDE) display sender_entity in parens right after responder, |
| 531 | # other than LLM, e.g. AGENT (USER) |
| 532 | sender_entity = str(getattr(fields, "sender_entity", "")) |
| 533 | tool = getattr(fields, "tool", "") |
| 534 | tool_type = getattr(fields, "tool_type", "") |
| 535 | content = getattr(fields, "content", "") |
| 536 | recipient = getattr(fields, "recipient", "") |
| 537 | |
| 538 | # Determine CSS class based on responder |
| 539 | responder_upper = responder.upper() |
| 540 | if "USER" in responder_upper: |
| 541 | css_class = "user" |
| 542 | elif "LLM" in responder_upper: |
| 543 | css_class = "llm" |
| 544 | elif "AGENT" in responder_upper: |
| 545 | css_class = "agent" |
| 546 | elif "SYSTEM" in responder_upper: |
| 547 | css_class = "system" |
| 548 | else: |
| 549 | css_class = "other" |
| 550 | |
| 551 | # Determine opacity class based on mark |
| 552 | mark = getattr(fields, "mark", "") |
| 553 | opacity_class = "important" if mark == "*" else "faded" |
| 554 | |
| 555 | # Start building the entry |
| 556 | html_parts = [ |
| 557 | f'<div class="entry {css_class} {opacity_class}" id="{entry_id}">' |
| 558 | ] |
| 559 | |
| 560 | # Build smart header |
| 561 | entity_parts = [] # Main header line with entity info |
| 562 | content_preview = "" # Second line with content preview |
| 563 | |
| 564 | # Add task name if not root |
| 565 | if task_name and task_name != "root": |
| 566 | entity_parts.append(task_name) |
| 567 | |
| 568 | # Handle different responder types |
| 569 | if "USER" in responder_upper: |
| 570 | # Add responder with sender_entity in parens if different |
| 571 | if sender_entity and sender_entity != responder: |
| 572 | entity_parts.append(f"USER ({sender_entity})") |
| 573 | else: |
no test coverage detected