File size: 2,306 Bytes
9bfb085
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Simulador de Agente LLM com Context Pruning
"""

import time

class AgentSimulator:
    """Simula o comportamento de um agente com e sem pruning"""
    
    def __init__(self):
        self.thoughts = []
        
    def run_pipeline(self, query, document, threshold):
        """Executa pipeline completo do agente"""
        
        from components.provence_wrapper import ProvencePruner
        pruner = ProvencePruner()
        
        # Fase 1: Retrieval (simulado)
        self.thoughts = []
        self.thoughts.append(f"🔍 <b>Retrieval:</b> Documento recuperado com {len(document.split())} palavras")
        
        # Fase 2: Pruning
        result = pruner.prune(query, document, threshold)
        
        self.thoughts.append(
            f"✂️ <b>Provence Pruning:</b> Analisando {len(result['sentences'])} sentenças..."
        )
        
        kept_count = sum(result['kept'])
        self.thoughts.append(
            f"📊 <b>Resultado:</b> {kept_count}/{len(result['sentences'])} sentenças mantidas "
            f"({result['compression_rate']}% compressão)"
        )
        
        # Fase 3: Análise de qualidade
        avg_score = sum(result['scores']) / len(result['scores']) if result['scores'] else 0
        self.thoughts.append(
            f"🎯 <b>Qualidade:</b> Score médio de relevância: {avg_score:.2f}"
        )
        
        # Tokens economizados (estimativa: ~1.3 tokens/palavra)
        words_removed = len(document.split()) - len(' '.join(result['pruned_sentences']).split())
        tokens_saved = int(words_removed * 1.3)
        
        self.thoughts.append(
            f"💰 <b>Eficiência:</b> ~{tokens_saved} tokens economizados na chamada LLM"
        )
        
        # Fase 4: Geração (simulada)
        self.thoughts.append(
            f"🤖 <b>Geração:</b> LLM processando contexto enxuto..."
        )
        
        return {
            'sentences': result['sentences'],
            'scores': result['scores'],
            'kept': result['kept'],
            'compression_rate': result['compression_rate'],
            'tokens_saved': tokens_saved,
            'relevance_score': avg_score,
            'agent_thoughts': self.thoughts,
            'pruned_document': ' '.join(result['pruned_sentences'])
        }