75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
# 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"
|
|
|