File size: 4,950 Bytes
eeb0f9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
"""
Conversation Summarization Example
Demonstrates automatic summarization of long conversations
"""

from agents.core.coordinator import AgentCoordinator


def simulate_long_conversation():
    """Simulate a long conversation to trigger summarization"""
    print("=" * 60)
    print("CONVERSATION SUMMARIZATION DEMO")
    print("=" * 60)
    
    coordinator = AgentCoordinator(user_id="demo_user")
    
    # Simulate 20 conversation turns
    conversations = [
        ("Tôi 25 tuổi, nam, 70kg, 175cm", "Cảm ơn thông tin..."),
        ("Tôi muốn giảm cân", "Để giảm cân hiệu quả..."),
        ("Nên ăn bao nhiêu calo?", "Với thông tin của bạn..."),
        ("Tôi nên tập gì?", "Bạn nên tập cardio..."),
        ("Bao lâu thì thấy kết quả?", "Thường sau 2-4 tuần..."),
        ("Tôi có thể ăn gì?", "Bạn nên ăn nhiều rau xanh..."),
        ("Sáng nên ăn gì?", "Bữa sáng nên có protein..."),
        ("Tối nên ăn gì?", "Bữa tối nên nhẹ..."),
        ("Tôi có thể ăn trái cây không?", "Có, nhưng hạn chế..."),
        ("Nên tập mấy lần 1 tuần?", "Nên tập 3-4 lần..."),
        ("Mỗi lần tập bao lâu?", "Mỗi lần 30-45 phút..."),
        ("Tôi nên uống bao nhiêu nước?", "Nên uống 2-3 lít..."),
        ("Có nên nhịn ăn không?", "Không nên nhịn ăn..."),
        ("Tôi có thể ăn đêm không?", "Nên tránh ăn đêm..."),
        ("Làm sao để không đói?", "Ăn nhiều protein..."),
        ("Tôi bị đau đầu khi tập", "Có thể do thiếu nước..."),
        ("Nên bổ sung gì?", "Có thể bổ sung vitamin..."),
        ("Tôi có cần whey protein không?", "Không bắt buộc..."),
        ("Khi nào nên nghỉ?", "Nên nghỉ 1-2 ngày..."),
        ("Làm sao biết đang giảm cân đúng?", "Theo dõi cân nặng..."),
    ]
    
    chat_history = []
    
    for i, (user_msg, bot_msg) in enumerate(conversations, 1):
        chat_history.append((user_msg, bot_msg))
        
        # Show progress
        if i % 5 == 0:
            print(f"\n📊 After {i} turns:")
            stats = coordinator.get_conversation_stats(chat_history)
            print(f"   Total turns: {stats['total_turns']}")
            print(f"   Estimated tokens: {stats['estimated_tokens']}")
            print(f"   Should summarize: {stats['should_summarize']}")
    
    print(f"\n" + "=" * 60)
    print("BEFORE SUMMARIZATION")
    print("=" * 60)
    print(f"Total conversation turns: {len(chat_history)}")
    
    # Trigger summarization
    print(f"\n" + "=" * 60)
    print("APPLYING SUMMARIZATION")
    print("=" * 60)
    
    # This happens automatically in coordinator.handle_query()
    # But we can also do it manually:
    from utils.conversation_summarizer import get_summarizer
    
    summarizer = get_summarizer()
    result = summarizer.summarize_conversation(
        chat_history,
        user_profile=coordinator.memory.get_full_profile(),
        keep_recent=5
    )
    
    print(f"\n📝 SUMMARY:")
    print(result['summary'])
    
    print(f"\n💬 RECENT HISTORY ({len(result['recent_history'])} turns):")
    for user_msg, bot_msg in result['recent_history']:
        print(f"   User: {user_msg}")
        print(f"   Bot: {bot_msg[:50]}...")
    
    print(f"\n" + "=" * 60)
    print("AFTER SUMMARIZATION")
    print("=" * 60)
    print(f"Summarized turns: {result['summarized_turns']}")
    print(f"Kept recent turns: {len(result['recent_history'])}")
    print(f"Total context size: {result['summarized_turns'] + len(result['recent_history'])}{len(result['recent_history']) + 1} (summary + recent)")
    
    # Show compressed history
    compressed = summarizer.compress_history(chat_history, target_turns=10)
    print(f"\n📦 Compressed history: {len(chat_history)}{len(compressed)} turns")
    print(f"   Token reduction: ~{((len(chat_history) - len(compressed)) / len(chat_history) * 100):.0f}%")


def test_automatic_summarization():
    """Test automatic summarization in coordinator"""
    print("\n\n" + "=" * 60)
    print("AUTOMATIC SUMMARIZATION TEST")
    print("=" * 60)
    
    coordinator = AgentCoordinator(user_id="test_user")
    
    # Create long history
    chat_history = [
        (f"Câu hỏi {i}", f"Câu trả lời {i}")
        for i in range(1, 21)
    ]
    
    print(f"Initial history: {len(chat_history)} turns")
    
    # This will trigger automatic summarization
    response = coordinator.handle_query(
        "Tôi muốn tóm tắt cuộc trò chuyện",
        chat_history
    )
    
    print(f"\n✅ Automatic summarization triggered!")
    print(f"   Response: {response[:100]}...")


if __name__ == '__main__':
    simulate_long_conversation()
    test_automatic_summarization()
    
    print("\n" + "=" * 60)
    print("✅ Summarization Demo Complete!")
    print("=" * 60)