def METHOD_NAME(spec: specs.EnvironmentSpec) -> bc.BCNetworks:
  """Creates networks used by the agent."""
  num_actions = spec.actions.num_values
  def actor_fn(obs, is_training=True, key=None):
    # is_training and key allows to utilize train/test dependant modules
    # like dropout.
    del is_training
    del key
    mlp = hk.Sequential(
        [hk.Flatten(),
         hk.nets.MLP([64, 64, num_actions])])
    return mlp(obs)
  policy = hk.without_apply_rng(hk.transform(actor_fn))
  # Create dummy observations to create network parameters.
  dummy_obs = utils.zeros_like(spec.observations)
  dummy_obs = utils.add_batch_dim(dummy_obs)
  policy_network = bc.BCPolicyNetwork(lambda key: policy.init(key, dummy_obs),
                                      policy.apply)
  def sample_fn(logits: networks_lib.NetworkOutput,
                key: jax_types.PRNGKey) -> networks_lib.Action:
    return rlax.epsilon_greedy(epsilon=0.0).sample(key, logits)
  def log_prob(logits: networks_lib.Params,
               actions: networks_lib.Action) -> networks_lib.LogProb:
    logits_actions = jnp.sum(
        jax.nn.one_hot(actions, logits.shape[-1]) * logits, axis=-1)
    logits_actions = logits_actions - special.logsumexp(logits, axis=-1)
    return logits_actions
  return bc.BCNetworks(policy_network, sample_fn, log_prob)