def render_final_params(runner_parameters, action_parameters, params, action_context):
    """
    Renders missing parameters required for action to execute. Treats parameters from the dict as
    plain values instead of trying to render them again. Returns dicts for action and runner
    parameters.
    """
    config = get_config(action_context.get("pack"), action_context.get("user"))

    G = _create_graph(action_context, config)

    # by that point, all params should already be resolved so any template should be treated value
    [G.add_node(name, value=value) for name, value in six.iteritems(params)]
    _process_defaults(G, [action_parameters, runner_parameters])
    _validate(G)

    context = _resolve_dependencies(G)
    context = _cast_params_from(
        context, context, [action_parameters, runner_parameters]
    )

    return _split_params(runner_parameters, action_parameters, context)

    Renders missing parameters required for action to execute. Treats parameters from the dict as
    plain values instead of trying to render them again. Returns dicts for action and runner
    parameters.
    
st2common/st2common/util/param.py