The pattern vendorModel_Function constrains the definition to require that the first argument has Head Function. You passed in f1, but that doesn’t have Head Function. You can either change your definition for f2 or you can pass in an actual Function. So, here’s an alternate that I’ll call f3:
f3[vendorModel_, models_] := vendorModel /@ models;
f3[f1, {3, 4}]
(* {10, 17} *)
By leaving vendorModel unconstrained, the function is more flexible.
Or, using your original f2, you could do this:
f2[f1[#] &, {3, 4}]
(* {10, 17} *)
Eric, unbelievable. you solve my problem, i have think about it for 6 hours. the original function is quite complicated and i try hard to identify the issue. it is really happy that you share it , thank you!