""" 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']) }