# Copyright (c) 2025 Patrick Motsch # All rights reserved. """ Formatting helper for Context operations. Handles formatting of document indexes in different formats. """ import logging from typing import Dict, Any logger = logging.getLogger(__name__) class FormattingHelper: """Helper for formatting operations""" def __init__(self, methodInstance): """ Initialize formatting helper. Args: methodInstance: Instance of MethodContext (for access to services) """ self.method = methodInstance self.services = methodInstance.services def formatAsMarkdown(self, indexData: Dict[str, Any]) -> str: """Format document index as Markdown.""" try: md = f"# Document Index\n\n" md += f"**Workflow ID:** {indexData.get('workflowId', 'unknown')}\n\n" md += f"**Generated At:** {indexData.get('generatedAt', 'unknown')}\n\n" md += f"**Total Documents:** {indexData.get('totalDocuments', 0)}\n\n" if indexData.get('rounds'): md += "## Documents by Round\n\n" for roundInfo in indexData['rounds']: roundLabel = roundInfo.get('round', 'unknown').title() md += f"### {roundLabel} Round\n\n" md += f"**Document List:** `{roundInfo.get('reference', 'unknown')}`\n\n" if roundInfo.get('documents'): md += "**Documents:**\n\n" for docRef in roundInfo['documents']: md += f"- `{docRef}`\n" md += "\n" if indexData.get('documentReferences'): md += "## All Document References\n\n" for docRef in indexData['documentReferences']: md += f"- `{docRef.get('reference', 'unknown')}`\n" return md except Exception as e: logger.error(f"Error formatting as Markdown: {str(e)}") return f"# Document Index\n\nError formatting index: {str(e)}\n" def formatAsText(self, indexData: Dict[str, Any], rawIndex: str) -> str: """Format document index as plain text.""" try: text = "Document Index\n" text += "=" * 50 + "\n\n" text += f"Workflow ID: {indexData.get('workflowId', 'unknown')}\n" text += f"Generated At: {indexData.get('generatedAt', 'unknown')}\n" text += f"Total Documents: {indexData.get('totalDocuments', 0)}\n\n" # Include the raw formatted index for readability text += rawIndex return text except Exception as e: logger.error(f"Error formatting as text: {str(e)}") return f"Document Index\n\nError formatting index: {str(e)}\n\nRaw index:\n{rawIndex}\n"