class_docstr: Combo model.
  
  This model can handle contexts with and without retrieved documents.
class_docstr_tok: ["Combo","model",".","This","model","can","handle","contexts","with","and","without","retrieved","documents","."]
code: def __init__(
      self, opt: Opt, dictionary: DictionaryAgent, retriever_shared=None
  ):
      super().__init__(opt, dictionary, retriever_shared)
      if opt.get("filter_docs_with_label"):
          assert (
              RetrieverType(opt["rag_retriever_type"])
              == RetrieverType.SEARCH_ENGINE
          )
          self.retriever = FilterDocsForLabelSearchEngineRetrieverCombo(
              opt, dictionary, shared=retriever_shared
          )  # type: ignore
      else:
          self.retriever = combo_fid_retriever_factory(
              opt, dictionary, shared=retriever_shared
          )
      self.top_docs: List[List[Document]] = []
  
imports: from typing import Optional, Type, Tuple, List, Dict, Any
  import torch
  import torch.nn
  from parlai.agents.fid.fid import FidModel, concat_enc_outs
  from parlai.agents.hugging_face.gpt2 import GPT2Decoder, Gpt2Agent
  from parlai.agents.rag.args import RetrieverType
  from parlai.agents.rag.modules import RagModel
  from parlai.agents.rag.retrievers import Document, BLANK_DOC, SearchQuerySearchEngineRetriever, retriever_factory, RagRetriever
  from parlai.core.dict import DictionaryAgent
  from parlai.core.opt import Opt
  import parlai.utils.logging
  from projects.seeker.agents.seeker_modules import ComboFidSearchQuerySearchEngineRetriever
  from projects.seeker.agents.seeker_modules import combo_fid_retriever_factory, interleave_fid_combo_outputs, ComboFidModel
label_desc: Use image node_id 1 to create a new ComboGPT2Model object from inherited base classes: GPT2WithRetrieverModel, ComboFidModel with example: obj = ComboGPT2Model(opt, dictionary, retriever_shared)