Agent-Pruning-Lab / components /agent_simulator.py
Danielfonseca1212's picture
Create components/agent_simulator.py
9bfb085 verified
"""
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'])
}