7.1 KiB
Rendering Issue Analysis
Why HTML Documents Are Being Rendered as Text
Date: 2025-12-22
Issue: Documents requested as HTML are being output as text/plain
Root Cause Analysis
Issue 1: resultType Not Extracted from Task Objective ❌ CRITICAL
Problem:
- Task objective clearly states: "Generate a complete, well-structured HTML document"
- Validation shows:
EXPECTED FORMATS: ['html'] - But action was called with:
ai.generateDocument {}(empty parameters) - So
resultTypedefaults to"docx"instead of"html"
Location:
generateDocument.pyline 44:resultType = parameters.get("resultType", "docx")- No parameter extraction from task objective/prompt
Impact: CRITICAL - Wrong format is used even though task clearly requests HTML
Fix Needed:
- Extract
resultTypefrom task objective/prompt before calling action - Or enhance
generateDocumentto detect format from prompt if not provided
Issue 2: HTML Not in Action Definition Options ❌ CRITICAL
Problem:
- Action definition in
methodAi.pyline 357 only lists:["docx", "pdf", "txt", "md"] "html"is NOT in the allowed options- But docstring says HTML is supported:
"resultType (str, optional): Output format (docx, pdf, txt, md, html, etc.)"
Location:
methodAi.pyline 357:frontendOptions=["docx", "pdf", "txt", "md"]
Impact: CRITICAL - Even if HTML is requested, it might be rejected or not recognized
Fix Needed:
- Add
"html"tofrontendOptionslist
Issue 3: Renderer Fallback to Text ❌ CRITICAL
Problem:
- When
resultType="docx"is used (default) - If docx renderer fails or is not found
- System falls back to text renderer (line 403-404 of
mainServiceGeneration.py) - This explains why output is
text/plaininstead of HTML
Location:
mainServiceGeneration.pylines 393-409:_getFormatRenderer()method- Line 403:
logger.warning(f"No renderer found for format {output_format}, falling back to text")
Impact: CRITICAL - Wrong format is rendered
Fix Needed:
- Fix docx renderer if it's failing
- Or better: Extract correct format from prompt
Issue 4: Missing Parameter Extraction ❌ HIGH PRIORITY
Problem:
- Task objective contains format information ("HTML document")
- But no parameter extraction step extracts
resultTypefrom prompt - Action is called with empty parameters
{}
Location:
- Workflow execution - parameter extraction phase
- Should extract
resultType: "html"from task objective
Impact: HIGH - System can't infer format from user intent
Fix Needed:
- Add parameter extraction that detects format from prompt
- Or enhance
generateDocumentto auto-detect format from prompt
Flow Analysis
Expected Flow:
1. Task Objective: "Generate HTML document..."
2. Parameter Extraction: Extract resultType="html" from objective
3. Action Call: ai.generateDocument({resultType: "html", prompt: "..."})
4. Content Generation: Generate sections with content
5. Integration: Merge sections into complete structure
6. Rendering: Call renderReport(outputFormat="html")
7. HTML Renderer: Render to HTML
8. Output: document.html (text/html)
Actual Flow (Broken):
1. Task Objective: "Generate HTML document..."
2. Parameter Extraction: ❌ MISSING - no extraction
3. Action Call: ai.generateDocument({}) ❌ Empty parameters
4. Content Generation: ✅ Generate sections with content
5. Integration: ✅ Merge sections into complete structure
6. Rendering: Call renderReport(outputFormat="docx") ❌ Wrong format
7. Docx Renderer: ❌ Fails or not found
8. Fallback: Text renderer ❌ Wrong renderer
9. Output: document.text (text/plain) ❌ Wrong format
Fixes Required
Fix 1: Add HTML to Action Definition Options ✅ EASY
File: gateway/modules/workflows/methods/methodAi/methodAi.py
Line: 357
Change:
frontendOptions=["docx", "pdf", "txt", "md", "html"], # Added "html"
Fix 2: Extract resultType from Prompt ✅ MEDIUM
Option A: Enhance generateDocument to detect format from prompt
File: gateway/modules/workflows/methods/methodAi/actions/generateDocument.py
After line 44:
resultType = parameters.get("resultType", "docx")
# Auto-detect format from prompt if not provided
if resultType == "docx" and prompt:
promptLower = prompt.lower()
if "html" in promptLower or "html5" in promptLower:
resultType = "html"
elif "pdf" in promptLower:
resultType = "pdf"
elif "markdown" in promptLower or "md" in promptLower:
resultType = "md"
elif "text" in promptLower or "txt" in promptLower:
resultType = "txt"
Option B: Extract in parameter planning phase (better, but requires workflow changes)
Fix 3: Improve Renderer Error Handling ✅ MEDIUM
File: gateway/modules/services/serviceGeneration/mainServiceGeneration.py
Lines: 393-409
Enhance: Better error messages and logging when renderer not found
def _getFormatRenderer(self, output_format: str):
"""Get the appropriate renderer for the specified format using auto-discovery."""
try:
from .renderers.registry import getRenderer
renderer = getRenderer(output_format, services=self.services)
if renderer:
return renderer
# Log available formats for debugging
from .renderers.registry import getSupportedFormats
availableFormats = getSupportedFormats()
logger.error(
f"No renderer found for format '{output_format}'. "
f"Available formats: {availableFormats}"
)
# Fallback to text renderer if no specific renderer found
logger.warning(f"Falling back to text renderer for format {output_format}")
fallbackRenderer = getRenderer('text', services=self.services)
if fallbackRenderer:
return fallbackRenderer
logger.error("Even text renderer fallback failed")
return None
except Exception as e:
logger.error(f"Error getting renderer for {output_format}: {str(e)}")
return None
Verification Steps
After fixes:
-
Test HTML Generation:
- Task: "Generate HTML document about AI"
- Expected:
resultType="html"extracted or detected - Expected: HTML renderer used
- Expected: Output is
document.htmlwithtext/htmlMIME type
-
Test Format Detection:
- Task: "Generate PDF report"
- Expected:
resultType="pdf"detected - Expected: PDF renderer used
-
Test Explicit Parameter:
- Action:
ai.generateDocument({resultType: "html", prompt: "..."}) - Expected: HTML renderer used (no fallback)
- Action:
Summary
Root Causes:
- ❌
resultTypenot extracted from task objective - ❌ HTML not in action definition options
- ❌ Renderer fallback to text when docx fails
- ❌ No format auto-detection from prompt
Priority: CRITICAL - System cannot produce HTML documents as requested
Estimated Fix Time:
- Fix 1: 5 minutes
- Fix 2: 30 minutes
- Fix 3: 15 minutes
- Total: ~1 hour
Analysis Complete: 2025-12-22