Differentiating between random variables and observations in DensityDist

I am a bit confused about exactly how DensityDist works. It seems from the examples I’ve found (including in the docs) that both random variables and observations are declared as observations. Is this correct? How does DensityDist know which is which? As an example, the following is the example from the intro tutorial:

def logp(failure, value):
return (failure * log(λ) - λ * value).sum()

exp_surv = pm.DensityDist(‘exp_surv’, logp, observed={‘failure’:failure, ‘value’:t})

What if ‘t’ was a random variable pulled from a prior? Would that change its declaration? Or maybe a better question is: if I have a logp function that takes (estimated mean, observations) as required arguments, are these both declared as ‘observations’ as in the example above?