Ukraine's Anhelina Kalinina overcame Russia's Veronika Kudermetova to reach her first WTA 1,000 final, at the Italian Open in Rome.
The 26-year-old beat the 11th seed 7-5 5-7 6-2 in two hours 51 minutes.
Kalinina, seeded number 30, had served for the match at 5-3 in the second set but Kudermetova won 16 points in a row to force a deciding set.
Wimbledon champion Elena Rybakina faces Latvian 20th seed Jeļena Ostapenko in the second semi-final.
Kalinina, who is ranked 47 in the world and has never won a WTA Tour title, beat Beatriz Haddad Maia in a gruelling three hour 41 minute battle to reach the semi-final, only the second of her career.
The Ukrainian raced to a 4-0 lead in the third setto secure the win against Kudermetova, who missed out on the Madrid Open final to world number one Iga Swiatek.
Swiatek was forced to retire from her quarter-final match against Rybakina in Rome on Wednesday after picking up a thigh strain.
The Polish player has won the previous two Italian Opens and was on a 14-match winning streak in Rome.