AI_Personas / examples /phase1_multiple_perspectives.py
Claude
Fix example scripts and add API testing utilities
76c6f71 unverified
"""
Phase 1 Example: Multiple Persona Perspectives
This example demonstrates querying multiple personas about the same
urban planning issue to see diverse stakeholder perspectives.
"""
import sys
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))
from src.pipeline.query_engine import QueryEngine
from rich.console import Console
from rich.panel import Panel
from rich.markdown import Markdown
console = Console()
def main():
console.print("\n[bold cyan]Phase 1 Example: Multiple Stakeholder Perspectives[/bold cyan]\n")
# Initialize the query engine
console.print("Initializing system...", style="dim")
engine = QueryEngine()
# Test system
if not engine.test_system():
console.print("[red]System test failed. Please check your configuration.[/red]")
return
console.print()
# Define a planning scenario
question = "What's your opinion on the proposed bike lane on Main Street?"
scenario = """
The city is proposing to convert one car lane on Main Street into a
protected bike lane. This would reduce car lanes from 4 to 3, add
bike infrastructure, and potentially remove some on-street parking.
"""
console.print(Panel(
f"[bold]Question:[/bold] {question}\n\n"
f"[bold]Scenario:[/bold]{scenario}",
title="Planning Issue",
border_style="cyan"
))
# Query multiple personas
personas_to_query = [
"sarah_chen", # Progressive urban planner
"marcus_thompson", # Business owner
"elena_rodriguez", # Transportation engineer
"james_obrien", # Long-time resident
"priya_patel", # Housing advocate
"david_kim", # Developer
]
console.print(f"\n[bold]Querying {len(personas_to_query)} stakeholders...[/bold]\n")
responses = engine.query_multiple(
persona_ids=personas_to_query,
question=question,
context_id="downtown_district",
scenario_description=scenario.strip(),
)
# Display all responses
for i, response in enumerate(responses, 1):
console.print(f"\n[bold cyan]{i}. {response.persona_name}[/bold cyan] [dim]({response.persona_role})[/dim]")
console.print("-" * 70)
console.print(response.response)
console.print()
# Summary
console.print("\n" + "=" * 70)
console.print(f"\n[bold green]✓ Received {len(responses)} diverse perspectives[/bold green]")
console.print("\n[dim]This demonstrates how different stakeholders view the same ")
console.print("urban planning issue through their unique lenses of values, ")
console.print("experience, and priorities.[/dim]\n")
if __name__ == "__main__":
main()