125 lines
3.2 KiB
Python
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) |