how does llm context compaction work