class_docstr: Compile and save results of human+model chats.
  
  Results will be saved on the level of specific conversations, as well as aggregated
  up the level of each worker as a whole.
code: def __init__(self, opt: Dict[str, Any]):
      # TODO: deduplicate init from ModelChatResultsCompiler
  
      super().__init__(opt)
  
      # Input args
      os.makedirs(self.output_folder, exist_ok=True)
      self.worker_block_list = opt["worker_block_list"].split(",")
  
      # Save paths
      self.worker_results_path = os.path.join(
          self.output_folder, "worker_results.csv"
      )
      self.unacceptable_worker_ids_path = os.path.join(
          self.output_folder, "unacceptable_worker_ids.txt"
      )
      self.win_rate_by_date_path = os.path.join(
          self.output_folder, "win_rates_by_date.csv"
      )
      self.stat_mean_length_by_date_path = os.path.join(
          self.output_folder, "stat_mean_length_by_date.csv"
      )
      self.completion_time_by_model_pair_path = os.path.join(
          self.output_folder, "mean_completion_times.csv"
      )
  
      self.acceptability_checker = AcceptabilityChecker()
  
      # Set fields that should be empty strings if the relevant information is not
      # present
      blank_field_columns = [
          "human_text",
          "human_choice",
          "human_justification",
          "accepted_bot_text",
          "not_accepted_bot_text",
      ]
      self.blank_fields = {field: "" for field in blank_field_columns}
  
      # Results attributes
      self.stat_counts = {}
      self.mean_completion_time = None
  
file_path: ParlAI/parlai/crowdsourcing/tasks/pairwise_per_turn_eval/analysis/compile_results.py
imports: import os
  import re
  from collections import defaultdict
  from datetime import datetime
  from typing import Any, Dict
  import pandas
  import parlai.utils.logging
  from parlai.crowdsourcing.utils.acceptability import AcceptabilityChecker
  from parlai.crowdsourcing.utils.analysis import AbstractResultsCompiler
  from parlai.crowdsourcing.tasks.pairwise_per_turn_eval.per_turn_eval_blueprint import BLUEPRINT_TYPE
label_desc: Use image node_id 2 to create a new PerTurnEvalResultsCompiler object from inherited base classes: AbstractResultsCompiler with example: obj = PerTurnEvalResultsCompiler(opt)