def METHOD_NAME(ctx: Context, actor: Actor, *args, **kwargs) -> Any:
    curr_responses, curr_confidences, curr_human_attrs, curr_bot_attrs, curr_attrs = (
        [],
        [],
        [],
        [],
        [],
    )
    def gathering_responses(reply, confidence, human_attr, bot_attr, attr):
        nonlocal curr_responses, curr_confidences, curr_human_attrs, curr_bot_attrs, curr_attrs
        if reply and confidence:
            curr_responses += [reply]
            curr_confidences += [confidence]
            curr_human_attrs += [human_attr]
            curr_bot_attrs += [bot_attr]
            curr_attrs += [attr]
    dialog_context = compose_data_for_model(ctx, actor)
    # get variables which names are in `ENVVARS_TO_SEND` (splitted by comma if many)
    # from user_utterance attributes or from environment
    human_uttr_attributes = int_ctx.get_last_human_utterance(ctx, actor).get("attributes", {})
    lm_service_kwargs = human_uttr_attributes.pop("lm_service_kwargs", None)
    lm_service_kwargs = {} if lm_service_kwargs is None else lm_service_kwargs
    envvars_to_send = ENVVARS_TO_SEND if len(ENVVARS_TO_SEND) else human_uttr_attributes.get("envvars_to_send", [])
    sending_variables = compose_sending_variables(
        lm_service_kwargs,
        envvars_to_send,
        **human_uttr_attributes,
    )
    shared_memory = int_ctx.get_shared_memory(ctx, actor)
    prompt = shared_memory.get("prompt", "")
    prompt = prompt if len(prompt) > 0 and ALLOW_PROMPT_RESET else PROMPT
    logger.info(f"prompt: {prompt}")
    logger.info(f"dialog_context: {dialog_context}")
    if len(dialog_context) > 0:
        try:
            hypotheses = send_request_to_prompted_generative_service(
                dialog_context,
                prompt,
                GENERATIVE_SERVICE_URL,
                GENERATIVE_SERVICE_CONFIG,
                GENERATIVE_TIMEOUT,
                sending_variables,
            )
        except Exception as e:
            sentry_sdk.capture_exception(e)
            logger.exception(e)
            hypotheses = []
    else:
        hypotheses = []
    logger.info(f"generated hypotheses: {hypotheses}")
    # if we do not have a goals from prompt, extract them using generative model (at most once in a dialog)
    goals_from_prompt = ""
    prompt_name = Path(PROMPT_FILE).stem
    if not GOALS_FROM_PROMPT:
        # get already collected goals from prompts from human attributes
        prev_prompts_goals = int_ctx.get_prompts_goals(ctx, actor)
        goals_from_prompt = prev_prompts_goals.get(prompt_name, "")
        if not goals_from_prompt:
            # if current prompt's goals are empty in human attributes, generate them!
            goals_from_prompt = get_goals_from_prompt(
                prompt=PROMPT,
                url=GENERATIVE_SERVICE_URL,
                generative_timeout=GENERATIVE_TIMEOUT,
                sending_variables=sending_variables,
            )
            logger.info(f"Generated goals for prompt using generative service:\n{goals_from_prompt}")
        else:
            logger.info("Found goals for prompt from the human attributes")
    for hyp in hypotheses:
        confidence = DEFAULT_CONFIDENCE
        if len(hyp) and hyp[-1] not in [".", "?", "!"]:
            hyp += "."
            confidence = LOW_CONFIDENCE
        _curr_attrs = {"can_continue": CAN_NOT_CONTINUE}
        if goals_from_prompt:
            _curr_attrs["prompts_goals"] = {prompt_name: goals_from_prompt}
        gathering_responses(hyp, confidence, {}, {}, _curr_attrs)
    if len(curr_responses) == 0:
        return ""
    return int_rsp.multi_response(
        replies=curr_responses,
        confidences=curr_confidences,
        human_attr=curr_human_attrs,
        bot_attr=curr_bot_attrs,
        hype_attr=curr_attrs,
    )(ctx, actor, *args, **kwargs)