docstr: Returns Q-values, 1 for each candidate document, given user and doc tensors.
  
  Args:
      user: [B x u] where u=embedding of user features.
      docs: List[[B x d]] where d=embedding of doc features. Each item in the
          list represents one document candidate.
  
  Returns:
      Tensor ([batch, num candidates) of Q-values.
      1 Q-value per document candidate.
docstr_tok: ["Returns","Q-values",",","1","for","each","candidate","document",",","given","user","and","doc","tensors",".","Args",":","user",":","[","B","x","u","]","where","u=embedding","of","user","features",".","docs",":","List","[","[","B","x","d","]","]","where","d=embedding","of","doc","features",".","Each","item","in","the","list","represents","one","document","candidate",".","Returns",":","Tensor","(","[","batch",",","num","candidates",")","of","Q-values",".","1","Q-value","per","document","candidate","."]
code: def get_q_values(
      self, user: TensorType, docs: List[TensorType]
  ) -> TensorType:
      """Returns Q-values, 1 for each candidate document, given user and doc tensors.
  
      Args:
          user: [B x u] where u=embedding of user features.
          docs: List[[B x d]] where d=embedding of doc features. Each item in the
              list represents one document candidate.
  
      Returns:
          Tensor ([batch, num candidates) of Q-values.
          1 Q-value per document candidate.
      """
      return self.q_value_head([user, tf.concat(docs, 1)])
  
file_path: ray/rllib_contrib/slate_q/src/rllib_slate_q/slate_q/slateq_tf_model.py
imports: from typing import List
  import gymnasium
  from ray.rllib.models.tf.tf_modelv2 import TFModelV2
  from ray.rllib.utils.framework import try_import_tf
  from ray.rllib.utils.typing import ModelConfigDict, TensorType
label_desc: Use image node_id 2 for calling the SlateQTFModel obj's underlying member method code with example usage: obj.get_q_values(user, docs) and returns: self