обрабатывать обычные запросы, потоковую передачу данных, вызов инструментов, сохранять структуру сообщений и метаданные. Для обработки нескольких экземпляров одного и того же типа данных фильтр использует таблицу соответствия, присваивая каждому уникальному значению уникальные плейсхолдеры, например <PHONE_1>. Поскольку крупные языковые модели (Large Language Models, LLMs) не имеют сохраненного состояния (stateless), фильтр должен повторно обрабатывать всю историю диалога при каждом запросе. В режиме потоковой передачи ответы поступают порциями, и плейсхолдеры могут разделяться между этими порциями; фильтр использует буфер для накопления достаточного объема данных, прежде чем попытаться выполнить демаскирование. Он также обрабатывает различные поля в ответах, включая контент, рассуждения и аргументы вызова инструментов, обеспечивая корректное восстановление данных в каждом из них. Реализация потоковой передачи только для Chat Completions выросла примерно до 1500 строк кода. Кроме того, поддержка Messages API потребовала отдельной реализации из-за его событийного формата, в результате чего общий объем тестового кода превысил 4000 строк.