code: def __init__(
      self,
      title: str,
      ci_title: str,
      model_results: Dict,
      additional_results: Dict,
      selected_warnings: List = None,
      prev_ci_artifacts=None,
  ):
      self.title = title
      self.ci_title = ci_title
  
      # Failures and success of the modeling tests
      self.n_model_success = sum(
          r["success"] for r in model_results.values()
      )
      self.n_model_single_gpu_failures = sum(
          dicts_to_sum(r["failed"])["single"]
          for r in model_results.values()
      )
      self.n_model_multi_gpu_failures = sum(
          dicts_to_sum(r["failed"])["multi"]
          for r in model_results.values()
      )
  
      # Some suites do not have a distinction between single and multi GPU.
      self.n_model_unknown_failures = sum(
          dicts_to_sum(r["failed"])["unclassified"]
          for r in model_results.values()
      )
      self.n_model_failures = (
          self.n_model_single_gpu_failures
          + self.n_model_multi_gpu_failures
          + self.n_model_unknown_failures
      )
  
      # Failures and success of the additional tests
      self.n_additional_success = sum(
          r["success"] for r in additional_results.values()
      )
  
      if len(additional_results) > 0:
          # `dicts_to_sum` uses `dicts_to_sum` which requires a non empty dictionary. Let's just add an empty entry.
          all_additional_failures = dicts_to_sum(
              [r["failed"] for r in additional_results.values()]
          )
          self.n_additional_single_gpu_failures = (
              all_additional_failures["single"]
          )
          self.n_additional_multi_gpu_failures = (
              all_additional_failures["multi"]
          )
          self.n_additional_unknown_gpu_failures = (
              all_additional_failures["unclassified"]
          )
      else:
          self.n_additional_single_gpu_failures = 0
          self.n_additional_multi_gpu_failures = 0
          self.n_additional_unknown_gpu_failures = 0
  
      self.n_additional_failures = (
          self.n_additional_single_gpu_failures
          + self.n_additional_multi_gpu_failures
          + self.n_additional_unknown_gpu_failures
      )
  
      # Results
      self.n_failures = (
          self.n_model_failures + self.n_additional_failures
      )
      self.n_success = self.n_model_success + self.n_additional_success
      self.n_tests = self.n_failures + self.n_success
  
      self.model_results = model_results
      self.additional_results = additional_results
  
      self.thread_ts = None
  
      if selected_warnings is None:
          selected_warnings = []
      self.selected_warnings = selected_warnings
  
      self.prev_ci_artifacts = prev_ci_artifacts
  
imports: import ast
  import collections
  import functools
  import json
  import operator
  import os
  import re
  import sys
  import time
  from typing import Dict, List, Optional, Union
  import requests
  from get_ci_error_statistics import get_job_links
  from get_previous_daily_ci import get_last_daily_ci_reports
  from slack_sdk import WebClient
label_desc: Use image node_id 1 to create a new Message object  with example: obj = Message(title, ci_title, model_results, additional_results, selected_warnings, prev_ci_artifacts)