Spaces:
Build error
Build error
| from typing import Any | |
| from openhands.core.logger import llm_prompt_logger, llm_response_logger | |
| from openhands.core.logger import openhands_logger as logger | |
| MESSAGE_SEPARATOR = '\n\n----------\n\n' | |
| class DebugMixin: | |
| def log_prompt(self, messages: list[dict[str, Any]] | dict[str, Any]) -> None: | |
| if not messages: | |
| logger.debug('No completion messages!') | |
| return | |
| messages = messages if isinstance(messages, list) else [messages] | |
| debug_message = MESSAGE_SEPARATOR.join( | |
| self._format_message_content(msg) | |
| for msg in messages | |
| if msg['content'] is not None | |
| ) | |
| if debug_message: | |
| llm_prompt_logger.debug(debug_message) | |
| else: | |
| logger.debug('No completion messages!') | |
| def log_response(self, message_back: str) -> None: | |
| if message_back: | |
| llm_response_logger.debug(message_back) | |
| def _format_message_content(self, message: dict[str, Any]) -> str: | |
| content = message['content'] | |
| if isinstance(content, list): | |
| return '\n'.join( | |
| self._format_content_element(element) for element in content | |
| ) | |
| return str(content) | |
| def _format_content_element(self, element: dict[str, Any] | Any) -> str: | |
| if isinstance(element, dict): | |
| if 'text' in element: | |
| return str(element['text']) | |
| if ( | |
| self.vision_is_active() | |
| and 'image_url' in element | |
| and 'url' in element['image_url'] | |
| ): | |
| return str(element['image_url']['url']) | |
| return str(element) | |
| # This method should be implemented in the class that uses DebugMixin | |
| def vision_is_active(self) -> bool: | |
| raise NotImplementedError | |