#!/usr/bin/env python3
"""
Test script per il Prompt System di IRIS
Testa il caricamento e rendering dei template Jinja2
"""
import sys
import os
from pathlib import Path
from datetime import datetime, timezone
# Aggiungi il path src per gli import
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
from llm_core.prompts import (
PromptManager, ContextBuilder, PromptType,
create_general_chat_context, create_business_assistant_context,
create_email_analysis_context, create_document_analysis_context
)
def test_prompt_manager_initialization():
"""Test inizializzazione PromptManager"""
print("π§ Testing PromptManager initialization...")
try:
manager = PromptManager()
print(f"β
PromptManager initialized")
print(f" Templates directory: {manager.templates_dir}")
# Lista template disponibili
templates = manager.list_available_templates()
print(f" Available templates: {templates}")
return manager
except Exception as e:
print(f"β PromptManager initialization failed: {e}")
return None
def test_template_validation(manager):
"""Test validazione template"""
print("\nπ Testing template validation...")
templates = manager.list_available_templates()
for template_name in templates:
try:
is_valid = manager.validate_template(template_name)
status = "β
" if is_valid else "β"
print(f" {status} {template_name}")
except Exception as e:
print(f" β {template_name}: {e}")
def test_general_chat_context():
"""Test contesto chat generale"""
print("\n㪠Testing General Chat Context...")
try:
context = create_general_chat_context(
user_id="test_user_123",
name="Marco Rossi",
session_id="session_456",
company="TechCorp",
role="CEO",
communication_style="professional",
preferred_response_length="medium"
)
manager = PromptManager()
prompt = manager.render_prompt(context)
print("β
General chat prompt generated")
print("π Prompt preview:")
print("-" * 50)
print(prompt[:500] + "..." if len(prompt) > 500 else prompt)
print("-" * 50)
return True
except Exception as e:
print(f"β General chat context failed: {e}")
return False
def test_business_assistant_context():
"""Test contesto assistente business"""
print("\nπ’ Testing Business Assistant Context...")
try:
company_info = {
"name": "InnovateTech SRL",
"industry": "Software Development",
"size": "50-100 employees",
"description": "Sviluppiamo soluzioni AI per il business"
}
context = (ContextBuilder()
.with_user("business_user_789", "Laura Bianchi",
role="CTO", company="InnovateTech SRL",
communication_style="casual",
expertise_level="expert")
.for_prompt_type(PromptType.BUSINESS_ASSISTANT)
.with_session("business_session_101")
.with_business_context(
company_info=company_info,
current_projects=[
{"name": "AI Assistant", "status": "in_progress", "priority": "high"},
{"name": "Mobile App", "status": "planning", "priority": "medium"}
],
kpis={"MRR": "β¬50,000", "Customer Satisfaction": "4.8/5"},
goals=["Aumentare MRR del 30%", "Lanciare nuovo prodotto Q2"]
)
.build())
manager = PromptManager()
prompt = manager.render_prompt(context)
print("β
Business assistant prompt generated")
print("π Prompt preview:")
print("-" * 50)
print(prompt[:800] + "..." if len(prompt) > 800 else prompt)
print("-" * 50)
return True
except Exception as e:
print(f"β Business assistant context failed: {e}")
return False
def test_email_analysis_context():
"""Test contesto analisi email"""
print("\nπ§ Testing Email Analysis Context...")
try:
email_data = {
"sender": "cliente@example.com",
"recipient": "marco.rossi@techcorp.com",
"subject": "Proposta di collaborazione strategica",
"content": """Gentile Dott. Rossi,
Siamo interessati a una partnership strategica con TechCorp per sviluppare
soluzioni AI innovative nel settore retail.
La nostra azienda, RetailPlus, gestisce oltre 200 punti vendita e cerchiamo
un partner tecnologico per implementare sistemi di raccomandazione personalizzati.
Budget disponibile: β¬500,000
Timeline: 6 mesi
Inizio progetto: Gennaio 2024
Sarebbe possibile organizzare un incontro la prossima settimana?
Cordiali saluti,
Giuseppe Verdi
CEO RetailPlus""",
"date": datetime.now(timezone.utc),
"priority": "high"
}
context = create_email_analysis_context(
user_id="email_user_456",
name="Marco Rossi",
session_id="email_session_789",
email_data=email_data,
role="CEO",
company="TechCorp"
)
manager = PromptManager()
prompt = manager.render_prompt(context)
print("β
Email analysis prompt generated")
print("π Prompt preview:")
print("-" * 50)
print(prompt[:1000] + "..." if len(prompt) > 1000 else prompt)
print("-" * 50)
return True
except Exception as e:
print(f"β Email analysis context failed: {e}")
return False
def test_document_analysis_context():
"""Test contesto analisi documenti"""
print("\nπ Testing Document Analysis Context...")
try:
documents = [
{
"name": "Business Plan 2024.pdf",
"type": "PDF",
"size": "2.5 MB",
"date": "2024-01-15",
"description": "Piano strategico per l'anno 2024"
},
{
"name": "Financial Report Q4.xlsx",
"type": "Excel",
"size": "1.8 MB",
"date": "2024-01-10",
"description": "Report finanziario Q4 2023"
}
]
context = create_document_analysis_context(
user_id="doc_user_123",
name="Laura Bianchi",
session_id="doc_session_456",
documents=documents,
task_type="comparison",
role="CFO",
expertise_level="expert"
)
manager = PromptManager()
prompt = manager.render_prompt(context)
print("β
Document analysis prompt generated")
print("π Prompt preview:")
print("-" * 50)
print(prompt[:1000] + "..." if len(prompt) > 1000 else prompt)
print("-" * 50)
return True
except Exception as e:
print(f"β Document analysis context failed: {e}")
return False
def test_context_builder_validation():
"""Test validazione ContextBuilder"""
print("\nπ§ Testing ContextBuilder validation...")
try:
# Test: tentativo di creare contesto senza user profile
try:
builder = ContextBuilder()
builder.for_prompt_type(PromptType.GENERAL_CHAT)
print("β Should have failed without user profile")
return False
except ValueError:
print("β
Correctly validates missing user profile")
# Test: tentativo di creare email context senza email data
try:
context = (ContextBuilder()
.with_user("test", "Test User")
.for_prompt_type(PromptType.EMAIL_ANALYSIS)
.with_session("test")
.build())
print("β Should have failed without email context")
return False
except ValueError:
print("β
Correctly validates missing email context")
return True
except Exception as e:
print(f"β Context builder validation failed: {e}")
return False
def main():
"""Esegue tutti i test del prompt system"""
print("π IRIS PROMPT SYSTEM TEST")
print("=" * 50)
# Test inizializzazione
manager = test_prompt_manager_initialization()
if not manager:
return False
# Test validazione template
test_template_validation(manager)
# Test contesti
tests = [
test_general_chat_context,
test_business_assistant_context,
test_email_analysis_context,
test_document_analysis_context,
test_context_builder_validation
]
passed = 0
total = len(tests)
for test_func in tests:
if test_func():
passed += 1
print(f"\nπ― TEST RESULTS: {passed}/{total} passed")
if passed == total:
print("π All prompt system tests passed!")
return True
else:
print("β Some tests failed")
return False
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)