91³Ô¹ÏÍø

Watch CBS News

Man convicted in 2021 killing of "Grandpa Vicha" in San Francisco to be released on probation

The man convicted in the 2021 killing in San Francisco of an elderly Asian man known as "Grandpa Vicha" was set to be released on probation.

In January, Antoine Watson was convicted of involuntary manslaughter for the 2021 attack on Vicha Ratanapakdee, and acquitted of murder. captured Watson, who was 19-years-old at the time, running into and violently shoving the 84-year-old to the ground while he was on a walk near his home in the city's Anza Vista neighborhood.

Ratanapakdee lost consciousness and died days later.

On Thursday, a judge sentenced Watson to eight years in jail, giving him credit for five years already served. Judge Linda Colfax also allowed the remainder to be suspended if he follows the terms of probation.

Granpa Vicha's family told reporters outside the courtroom they were disappointed in the outcome.

"Yeah, it's a long time for me, and we are very disappointed to be waiting for the trial, and I didn't get justice for my father, or justice for me or my family," said his daughter Monthanus Ratanapakdee.

"The bottom line is that he's out in, like, five years on probation for killing our father-in-law, and it's unacceptable," said his son-in-law Eric Lawson.

Former San Francisco District Attorney Chesa Boudin did not charge Watson with a hate crime after saying he did not believe the attack was racially motivated. His successor, Brooke Jenkins, said Thursday's sentencing was hard to digest.

"I understand their frustration with the process. Like I said, I started off with saying the delay in getting this case to trial, and now feeling like justice was not served by this sentence," Jenkins said. "All we can do is stand by [the Ratanapakdee family] and continue to support them because we, too, are frustrated."

Watson's defense argued the assault stemmed from a mental health breakdown and a stressful encounter with police earlier that morning. His public defender told reporters on Thursday that her client was remorseful.

"As a grandson, it is really hard for him to accept the conduct that he did and that he took two children's grandfather away from them," said attorney Anita Nabha.

Legal expert Shannan Dugan noted that Watson's conviction on involuntary manslaughter meant the sentence was not going to be lengthy.

"For involuntary manslaughter, the sentence is two years, three years, four years in the state prison. And my understanding is that the defendant had already served five years," said Dugan. "So on that count, the judge had effectively sentenced him on the max and added another year on enhancement and then five years of probation." 

Video of the attack helped bring wider attention to the surge of anti-Asian violence during the COVID-19 pandemic and fueled a national "Stop Asian Hate" movement.

The trial was delayed for years due to motions, disputes over evidence, and calendar conflicts. 

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=50747257b890e014813016b79ece0fb2'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });