Separate DSL from interaction model.

This allows for greater flexibility in the DSL and
avoids its structure from leaking into the model.