code: def interpolate(
      response: Union[List[Any], Dict[Text, Any], Text],
      values: Dict[Text, Text],
  ) -> Union[List[Any], Dict[Text, Any], Text]:
      """Recursively process response and interpolate any text keys.
  
      Args:
          response: The response that should be interpolated.
          values: A dictionary of keys and the values that those
              keys should be replaced with.
  
      Returns:
          The response with any replacements made.
      """
      if isinstance(response, str):
          return interpolate_text(response, values)
      elif isinstance(response, dict):
          for k, v in response.items():
              if isinstance(v, dict):
                  interpolate(v, values)
              elif isinstance(v, list):
                  response[k] = [interpolate(i, values) for i in v]
              elif isinstance(v, str):
                  response[k] = interpolate_text(v, values)
          return response
      elif isinstance(response, list):
          return [interpolate(i, values) for i in response]
      return response
  
imports: import copy
  import re
  import logging
  import structlog
  from typing import Text, Dict, Union, Any, List
label_desc: Use image node_id 2 for calling a global function with example usage: interpolate(response, values) and returns: response, interpolate_text, response, unknown