Just keep a widget counter that increments each time the button is pressed. Then create as many widgets as the counter says.
if "num_filters" not in st.session_state:
st.session_state["num_filters"] = 0
if st.button("Add filter"):
st.session_state["num_filters"] += 1
for num in range(1, st.session_state["num_filters"] + 1):
st.text_input(label=f"Filter #{num}")