TORONTO -- Josh Towers thinks he's on the best run of his career.
"It shows consistency, so I'm happy with that," said Towers, who has been plagued by inconsistency throughout his career.
Towers (12-11) allowed four runs -- one earned -- and eight hits in six-plus innings, lowering his ERA to 3.78. He has reached career highs in wins, innings (192 2-3) and strikeouts 103.
Towers foundered in the Orioles organization in 2002, going a combined 0-12 with an ERA just under 8.00 with Baltimore and Triple-A Rochester. He was 0-3 with a 7.90 ERA for the Orioles.
The 28-year-old right-hander went 8-1 with a 4.48 ERA with Toronto in 2003, but finished 9-9 with a 5.11 ERA last season.
"I feel like I've definitely improved each year," said Towers, who has stepped up since ace Roy Halladay broke his left leg on July 8.
The three unearned runs came in the first inning after first baseman Eric Hinske's fielding error allowed Jeremy Reed to reach. Richie Sexson had an RBI single and Adrian Beltre followed with his two-run homer -- his first since Aug. 20.
"Josh had a rough first, but settled down and gave us a chance to win the game," said Vernon Wells, who hit his 27th homer. "Josh has been huge for us. Every time out he gives us a chance to win a game. Hopefully, next year he can do the same thing for us."
Jason Frasor pitched the ninth for his first save since Aug. 29, 2004, against the New York Yankees. Manager John Gibbons said struggling closer Miguel Batista wasn't available because he pitched in the three previous three games.
Gibbons thinks Towers keeps improving.
"Any time he goes out there you know you can count on him," Gibbons said. "If you look at the last couple of years he's always won for us but he's been kind of the odd man out, but he forces his way in there and knows how to win."
Beltre hit his 19th homer for the Mariners, who have lost five of six. Beltre hit 48 homers for the Los Angeles Dodgers last season.
Wells went 2-for-3 with a walk, a stolen base and two runs scored. He hit a two-run homer off Jeff Harris (2-5) in the first, cutting Seattle's lead to 3-2.
Corey Koskie hit an RBI double in the fourth, and Russ Adams chased Harris in the fifth with a run-scoring double.
Harris dropped to 0-4 in September. The 31-year-old right-hander allowed four runs and six hits in 4 2-3 innings.
"I was falling behind a little and then when I had to come over the plate it was getting hit pretty hard," said Harris, who is in danger of losing his spot in the rotation when the injured Gil Meche returns to it. "That pitch to Wells I left over the plate and he hammered it."
Meche pitched two scoreless innings in a relief appearance. He was activated off the 15-day DL on Friday after being out since Aug. 20 because of knee tendinitis. He is expected to rejoin the rotation soon.
Gregg Zaun hit a two-run shot off Scott Atchison in the sixth to give Toronto a 6-3 lead.
Yorvit Torrealba chased Towers with a homer to lead off the seventh.
Manager Mike Hargrove made Sexson, usually the 1B, the DH so he could rest a sore knee. Hargrove didn't want him playing on the artificial turf. Greg Dobbs replaced him at 1B. ... Gibbons said Batista is still the closer despite being tied for the AL lead with eight blown saves. Batista blew a 4-3 lead in Monday's 7-4 loss when Sexson hit a grand slam in the ninth.