#!/usr/bin/env python3 """Test script for Jinja2-enhanced prompt management with list support""" from pathlib import Path from src.llmutils.prompt_manager import PromptManager, ManagedPrompt # Create a test prompts directory test_prompts_dir = Path("test_prompts") test_prompts_dir.mkdir(exist_ok=True) # Create test prompt with simple variable simple_prompt = test_prompts_dir / "simple.md" simple_prompt.write_text("""Hello {{name}}! Your age is {{age}}.""") # Create test prompt with list iteration list_prompt = test_prompts_dir / "list_example.md" list_prompt.write_text("""# Task List Here are your tasks: {% for task in tasks %} - {{ task }} {% endfor %} Total tasks: {{ tasks | length }}""") # Create test prompt with complex data structures complex_prompt = test_prompts_dir / "complex.md" complex_prompt.write_text("""# User Report Name: {{ user.name }} Email: {{ user.email }} ## Assigned Tasks: {% for task in user.tasks %} - [{{ task.status }}] {{ task.title }} Priority: {{ task.priority }} {% endfor %} ## Skills: {{ skills | join(', ') }} ## Recent Activity: {% for date, activity in activities.items() %} - {{ date }}: {{ activity }} {% endfor %}""") # Create prompt with conditionals conditional_prompt = test_prompts_dir / "conditional.md" conditional_prompt.write_text("""# Status Report {% if error %} ⚠️ ERROR: {{ error }} {% else %} ✅ All systems operational {% endif %} {% if items %} Items to process ({{ items | length }}): {% for item in items %} {{ loop.index }}. {{ item | upper }} {% endfor %} {% else %} No items to process. {% endif %} {% if debug %} Debug info: {{ debug_data | tojson }} {% endif %}""") # Configure PromptManager PromptManager.configure(path=test_prompts_dir) print("=" * 60) print("Testing Jinja2-Enhanced Prompt Management") print("=" * 60) # Test 1: Simple variable replacement print("\n1. Simple variable replacement:") print("-" * 40) prompt = PromptManager.get_prompt("simple") filled = prompt.fill(name="Alice", age=30) print(filled) # Test 2: List iteration print("\n2. List iteration:") print("-" * 40) prompt = PromptManager.get_prompt("list_example") filled = prompt.fill(tasks=["Write code", "Review PR", "Update documentation", "Deploy to staging"]) print(filled) # Test 3: Complex data structures print("\n3. Complex data structures:") print("-" * 40) prompt = PromptManager.get_prompt("complex") filled = prompt.fill( user={ "name": "Bob Smith", "email": "bob@example.com", "tasks": [ {"title": "Fix bug #123", "status": "✓", "priority": "High"}, {"title": "Implement feature X", "status": "○", "priority": "Medium"}, {"title": "Code review", "status": "→", "priority": "Low"} ] }, skills=["Python", "JavaScript", "Docker", "Kubernetes"], activities={ "2024-01-15": "Deployed v2.3.0", "2024-01-14": "Fixed critical security issue", "2024-01-13": "Merged 5 PRs" } ) print(filled) # Test 4: Conditionals print("\n4. Conditionals (with items):") print("-" * 40) prompt = PromptManager.get_prompt("conditional") filled = prompt.fill( error=None, # Provide None for optional conditional variables items=["apple", "banana", "cherry"], debug=True, debug_data={"version": "1.0", "env": "dev"} ) print(filled) print("\n5. Conditionals (with error):") print("-" * 40) prompt = PromptManager.get_prompt("conditional") filled = prompt.fill( error="Connection timeout", items=[], debug=False, debug_data={} ) print(filled) # Test 6: Pre-filled prompt print("\n6. Pre-filled prompt on retrieval:") print("-" * 40) prompt = PromptManager.get_prompt("simple", name="Charlie", age=25) print(prompt.prompt) # Should already be filled # Test 7: Variable extraction print("\n7. Variable extraction from complex template:") print("-" * 40) prompt = PromptManager.get_prompt("complex") print(f"Required variables: {prompt.variables}") print("\n" + "=" * 60) print("All tests completed successfully!") print("=" * 60) # Cleanup import shutil shutil.rmtree(test_prompts_dir)