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

125 lines
3.2 KiB
Python

#!/usr/bin/env python3
"""Test the smart variable detection that distinguishes required from optional"""
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)
# Test 1: Simple required variable
simple = test_dir / "simple.md"
simple.write_text("Hello {{ name }}!")
# Test 2: Optional variable in conditional
conditional = test_dir / "conditional.md"
conditional.write_text("""Status: OK
{% if error %}
Error: {{ error }}
{% endif %}""")
# Test 3: Variable with default filter
default_filter = test_dir / "default.md"
default_filter.write_text("""Hello {{ name | default('Guest') }}!
Age: {{ age }}""")
# Test 4: Complex mix
complex_template = test_dir / "complex.md"
complex_template.write_text("""# Report for {{ title }}
Status: {{ status }}
{% if error %}
⚠️ ERROR: {{ error }}
{% endif %}
{% if warning %}
⚠️ WARNING: {{ warning }}
{% endif %}
Debug Level: {{ debug_level | default(0) }}
{% for item in items %}
- {{ item }}
{% endfor %}
Generated by: {{ author | default('System') }}""")
# Configure PromptManager
PromptManager.configure(path=test_dir)
print("=" * 70)
print("Testing Smart Variable Detection (Required vs Optional)")
print("=" * 70)
# Test each template
test_cases = [
("simple", {"name": "Alice"}),
("conditional", {"error": "Timeout"}),
("default", {"age": 25}),
("complex", {"title": "Daily Report", "status": "OK", "items": ["task1", "task2"]})
]
for prompt_name, test_data in test_cases:
print(f"\n{'='*50}")
print(f"TESTING: {prompt_name}")
print("=" * 50)
prompt = PromptManager.get_prompt(prompt_name)
print(f"\nAll variables: {prompt.variables}")
print(f"Required variables: {prompt.required_variables}")
print(f"Optional variables: {prompt.optional_variables}")
print(f"\nProviding: {test_data}")
# Test validation
is_valid = prompt.validate(**test_data)
missing = prompt.get_missing_variables(**test_data)
print(f"Valid: {is_valid}")
if missing:
print(f"Missing required: {missing}")
# Try to fill
try:
filled = prompt.fill(**test_data)
print("\nFilled successfully (showing first 200 chars):")
print(filled[:200])
except ValueError as e:
print(f"\nError filling: {e}")
# Test 5: Demonstrate that optional variables don't need to be provided
print("\n" + "=" * 70)
print("DEMONSTRATING OPTIONAL VARIABLES")
print("=" * 70)
prompt = PromptManager.get_prompt("complex")
print(f"\nRequired: {prompt.required_variables}")
print(f"Optional: {prompt.optional_variables}")
# Provide only required variables
minimal_data = {
"title": "Test Report",
"status": "Running",
"items": ["item1", "item2", "item3"]
}
print(f"\nProviding only required variables: {minimal_data}")
try:
filled = prompt.fill(**minimal_data)
print("\n✓ Filled successfully with only required variables!")
print("\nOutput:")
print("-" * 40)
print(filled)
except ValueError as e:
print(f"\n✗ Error: {e}")
print("\n" + "=" * 70)
print("Tests completed!")
print("=" * 70)
# Cleanup
import shutil
shutil.rmtree(test_dir)