"""
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"🔍 Retrieval: Documento recuperado com {len(document.split())} palavras")
# Fase 2: Pruning
result = pruner.prune(query, document, threshold)
self.thoughts.append(
f"✂️ Provence Pruning: Analisando {len(result['sentences'])} sentenças..."
)
kept_count = sum(result['kept'])
self.thoughts.append(
f"📊 Resultado: {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"🎯 Qualidade: 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"💰 Eficiência: ~{tokens_saved} tokens economizados na chamada LLM"
)
# Fase 4: Geração (simulada)
self.thoughts.append(
f"🤖 Geração: 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'])
}