Russian Olga Puchkova upset top-seeded Venus Williams 4-6 6-4 7-5 to reach the final of the Brazil Tennis Cup in Florianopolis.