factored out Model into deepobserve module