code: def __init__(
      self,
      cot_options: Dict[str, Any] = {},
      cot_pre_template: str = DEFAULT_COT_PRE_TEMPLATE,
      cot_post_template: str = DEFAULT_COT_POST_TEMPLATE,
      extract_options: Dict[str, Any] = {},
      extract_template: str = DEFAULT_EXTRACT_ANSWER_TEMPLATE,
      valid_answers: Optional[list[str]] = None,
      **kwargs,
  ):
      super().__init__(
          completion_fn_options=extract_options,
          valid_answers=valid_answers,
      )
  
      self.cot_completion_fn = OpenAIChatCompletionFn(
          **cot_options,
      )
      self.cot_pre_template = cot_pre_template
      self.cot_post_template = cot_post_template
  
      self.extract_completion_fn = OpenAIChatCompletionFn(
          **self.completion_fn_options
      )
      self.extract_template = extract_template
  
file_path: evals/evals/elsuite/self_prompting/solvers/custom_cot_solver.py
imports: from typing import Any, Dict, Optional
  from evals.completion_fns.openai import OpenAIChatCompletionFn
  from evals.solvers.solver import OpenAISolver, SolverResult
  from evals.task_state import TaskState
label_desc: Use image node_id 1 to create a new CustomCoTSolver object from inherited base classes: OpenAISolver with example: obj = CustomCoTSolver(cot_options, cot_pre_template, cot_post_template, extract_options, extract_template, valid_answers)