@ -524,6 +524,23 @@ pub async fn run_generation_inner(
}
} ;
// Check LLM-extracted date as fallback for articles without a scraper date
if let Some ( date_str ) = class_response . get ( "date" ) . and_then ( | d | d . as_str ( ) ) {
if ! date_str . is_empty ( ) {
if let Some ( parsed ) = scraper ::parse_date_string ( date_str ) {
if scraper ::is_article_too_old ( Some ( parsed ) , settings . max_age_days as i64 ) {
tracing ::info ! ( url = % final_url , date = date_str , "Article filtered by LLM-extracted date (too old)" ) ;
pending_traces . push ( build_trace_entry ( user_id , job_id , & ArticleTrace {
url : & final_url , title : & page_title , source_type : "personalized_source" ,
source_url : Some ( & source_url ) , category : None , synthesis_id : None ,
status : "filtered_too_old" , scraped_ok : true ,
} ) ) ;
continue ;
}
}
}
}
let Some ( ( final_cat_key , final_cat_name , llm_title , llm_summary ) ) = assign_category (
& class_response , & page_title , & user_categories , & classification_categories ,
& filled_counts , settings . max_items_per_category as usize ,
@ -705,6 +722,23 @@ pub async fn run_generation_inner(
}
} ;
// Check LLM-extracted date as fallback
if let Some ( date_str ) = class_response . get ( "date" ) . and_then ( | d | d . as_str ( ) ) {
if ! date_str . is_empty ( ) {
if let Some ( parsed ) = scraper ::parse_date_string ( date_str ) {
if scraper ::is_article_too_old ( Some ( parsed ) , settings . max_age_days as i64 ) {
tracing ::info ! ( url = % final_url , date = date_str , "Article filtered by LLM-extracted date (too old)" ) ;
pending_traces . push ( build_trace_entry ( user_id , job_id , & ArticleTrace {
url : & final_url , title : & page_title , source_type : "brave_search" ,
source_url : None , category : None , synthesis_id : None ,
status : "filtered_too_old" , scraped_ok : true ,
} ) ) ;
continue ;
}
}
}
}
let Some ( ( final_cat_key , final_cat_name , llm_title , llm_summary ) ) = assign_category (
& class_response , & page_title , & user_categories , & classification_categories ,
& filled_counts , settings . max_items_per_category as usize ,