code: def prep_gemini_db(fnames, call_info, samples, extras):
      
      data = samples[0]
      name, caller, is_batch = call_info
      build_type = _get_build_type(fnames, samples, caller)
      out_dir = utils.safe_makedir(os.path.join(data["dirs"]["work"], "gemini"))
      gemini_vcf = get_multisample_vcf(fnames, name, caller, data)
      # If we're building a gemini database, normalize the inputs
      if build_type:
          passonly = all("gemini_allvariants" not in dd.get_tools_on(d) for d in samples)
          gemini_vcf = normalize.normalize(gemini_vcf, data, passonly=passonly)
          decomposed = True
      else:
          decomposed = False
      ann_vcf = run_vcfanno(gemini_vcf, data, decomposed)
      gemini_db = os.path.join(out_dir, "%s-%s.db" % (name, caller))
      if ann_vcf and build_type and not utils.file_exists(gemini_db):
          ped_file = create_ped_file(samples + extras, gemini_vcf)
          # Original approach for hg19/GRCh37
          if vcfanno.is_human(data, builds=["37"]) and "gemini_orig" in build_type:
              gemini_db = create_gemini_db_orig(gemini_vcf, data, gemini_db, ped_file)
          else:
              gemini_db = create_gemini_db(ann_vcf, data, gemini_db, ped_file)
      # only pass along gemini_vcf_downstream if uniquely created here
      if os.path.islink(gemini_vcf):
          gemini_vcf = None
      return [[(name, caller), {"db": gemini_db if utils.file_exists(gemini_db) else None,
                                "vcf": ann_vcf or gemini_vcf,
                                "decomposed": decomposed}]]
docs: Prepare a gemini database from VCF inputs prepared with snpEff.