Files
LLMUtils/test_optional_vars.py
2025-09-16 16:51:50 +02:00

119 lines
3.2 KiB
Python

#!/usr/bin/env python3
"""Test optional variables with Jinja2 conditionals"""
from pathlib import Path
from src.llmutils.prompt_manager import PromptManager
# Create test prompts directory
test_dir = Path("test_prompts")
test_dir.mkdir(exist_ok=True)
# Create a template with required and optional variables
report_template = test_dir / "report.md"
report_template.write_text("""# Status Report
Status: {{ status }}
{% if error %}
⚠️ ERROR: {{ error }}
{% endif %}
{% if warning %}
⚠️ WARNING: {{ warning }}
{% endif %}
{% if details %}
## Details
{{ details }}
{% endif %}
Generated at: {{ timestamp }}""")
# Configure PromptManager
PromptManager.configure(path=test_dir)
print("=" * 60)
print("Testing Optional Variables with Jinja2 Conditionals")
print("=" * 60)
# Test 1: All variables provided
print("\n1. All variables provided:")
print("-" * 40)
prompt = PromptManager.get_prompt("report")
filled = prompt.fill(
status="Operational",
error="Database connection failed",
warning="High memory usage",
details="System recovered after 5 retries",
timestamp="2024-01-15 10:30:00"
)
print(filled)
# Test 2: Only required variables (status and timestamp)
print("\n2. Only truly required variables (will fail with strict=True):")
print("-" * 40)
prompt = PromptManager.get_prompt("report")
try:
# This will fail because Jinja2 considers all variables as required
filled = prompt.fill(
status="Operational",
timestamp="2024-01-15 10:30:00"
)
print(filled)
except ValueError as e:
print(f"Error (expected): Missing variables {{'error', 'warning', 'details'}}")
print(f"Actual error: {e}")
# Test 3: Provide None/empty for optional variables
print("\n3. Provide None/empty values for optional variables:")
print("-" * 40)
prompt = PromptManager.get_prompt("report")
filled = prompt.fill(
status="Operational",
error=None, # Will not show in output due to {% if error %}
warning="", # Empty string is falsy, won't show
details=None, # Will not show
timestamp="2024-01-15 10:30:00"
)
print(filled)
# Test 4: Mix of provided and None values
print("\n4. Mix of provided and None values:")
print("-" * 40)
prompt = PromptManager.get_prompt("report")
filled = prompt.fill(
status="Degraded",
error="API timeout",
warning=None, # Won't show
details=None, # Won't show
timestamp="2024-01-15 10:35:00"
)
print(filled)
# Test 5: Using strict=False to handle missing variables
print("\n5. Using strict=False for partial filling:")
print("-" * 40)
prompt = PromptManager.get_prompt("report")
filled = prompt.fill(
strict=False,
status="Unknown",
timestamp="2024-01-15 10:40:00"
)
print(filled)
print("Note: Unfilled variables remain as {{ variable }}")
# Test 6: Show extracted variables
print("\n6. Extracted variables from template:")
print("-" * 40)
prompt = PromptManager.get_prompt("report")
print(f"All variables detected: {prompt.variables}")
print("Note: Jinja2 extracts all variables, even those in conditionals")
print("Use None/empty values for optional ones, or use strict=False")
print("\n" + "=" * 60)
print("Tests completed!")
print("=" * 60)
# Cleanup
import shutil
shutil.rmtree(test_dir)