code: def precision_at_k(k) -> EvaluationMetric:
      """
      This function will create a metric for calculating ``precision_at_k`` for retriever models.
  
      This metric computes a score between 0 and 1 for each row representing the precision of the
      retriever model at the given ``k`` value. If no relevant documents are retrieved, the score is
      0, indicating that no relevant docs are retrieved. Let ``x = min(k, # of retrieved doc IDs)``.
      Then, in all other cases, the precision at k is calculated as follows:
  
          ``precision_at_k`` = (# of relevant retrieved doc IDs in top-``x`` ranked docs) / ``x``.
      """
      return make_metric(
          eval_fn=_precision_at_k_eval_fn(k),
          greater_is_better=True,
          name=f"precision_at_{k}",
      )
  
imports: from mlflow.metrics.base import MetricValue
  from mlflow.metrics.metric_definitions import _accuracy_eval_fn, _ari_eval_fn, _f1_score_eval_fn, _flesch_kincaid_eval_fn, _mae_eval_fn, _mape_eval_fn, _max_error_eval_fn, _mse_eval_fn, _ndcg_at_k_eval_fn, _precision_at_k_eval_fn, _precision_eval_fn, _r2_score_eval_fn, _recall_at_k_eval_fn, _recall_eval_fn, _rmse_eval_fn, _rouge1_eval_fn, _rouge2_eval_fn, _rougeL_eval_fn, _rougeLsum_eval_fn, _token_count_eval_fn, _toxicity_eval_fn
  from mlflow.models import EvaluationMetric, make_metric
  from mlflow.utils.annotations import experimental
label_desc: Use image node_id 11 for calling a global function with example usage: precision_at_k(k) and returns: make_metric