The code generated for an argument that is defined as string LabelColumn = "Label"; is: /// <summary> /// Column to use for labels /// </summary> public string LabelColumn { get; set; } = "Label"; but the code generate for an argument that is defined as public Optional<string> GroupColumn = Optional<string>.Implicit("GroupId"); is: /// <summary> /// Column to use for grouping /// </summary> public Microsoft.ML.Runtime.EntryPoints.Optional<string> GroupColumn { get; set; }