use regex::Regex;
use std::sync::OnceLock;
static FINANCIAL_REGEX: OnceLock<Regex> = OnceLock::new();
static NUMBER_REGEX: OnceLock<Regex> = OnceLock::new();
static ESSENTIAL_REGEX: OnceLock<Regex> = OnceLock::new();
static STOCK_PRICE_REGEX: OnceLock<Regex> = OnceLock::new();
static MARKET_CAP_REGEX: OnceLock<Regex> = OnceLock::new();
static STOCK_SYMBOL_REGEX: OnceLock<Regex> = OnceLock::new();
pub struct ResponseFilter;
impl ResponseFilter {
pub fn is_data_reduction_enabled() -> bool {
std::env::var("DEDUCT_DATA")
.unwrap_or_else(|_| "false".to_string())
.to_lowercase() == "true"
}
pub fn is_truncate_filter_enabled() -> bool {
Self::is_data_reduction_enabled()
}
pub fn filter_financial_content(content: &str) -> String {
if content.is_empty() {
return "No data".to_string();
}
if !Self::is_data_reduction_enabled() {
return content.to_string(); }
content.to_string()
}
fn safe_extract_financial_lines(content: &str) -> String {
if content.is_empty() {
return "No data".to_string();
}
content.to_string()
}
fn extract_stock_specific_data(content: &str) -> String {
if content.is_empty() {
return "No data".to_string();
}
content.to_string()
}
fn extract_only_essential_metrics(content: &str) -> String {
if content.is_empty() {
return "No data".to_string();
}
content.to_string()
}
fn safe_extract_any_numbers(content: &str) -> String {
if content.is_empty() {
return "No data".to_string();
}
content.to_string()
}
pub fn contains_financial_data(content: &str) -> bool {
if content.is_empty() {
return false;
}
true
}
pub fn contains_valid_stock_data(content: &str) -> bool {
if content.is_empty() {
return false;
}
true
}
pub fn is_error_page(content: &str) -> bool {
if content.is_empty() {
return true; }
false
}
pub fn is_mostly_navigation(content: &str) -> bool {
if content.is_empty() {
return false;
}
false
}
pub fn extract_high_value_financial_data(content: &str, max_tokens: usize) -> String {
if content.is_empty() {
return "No data".to_string();
}
if !Self::is_data_reduction_enabled() {
return content.to_string();
}
content.to_string()
}
fn safe_extract_priority_patterns(content: &str, max_chars: usize) -> String {
if content.is_empty() {
return "No data".to_string();
}
content.to_string()
}
pub fn extract_stock_symbol(content: &str) -> Option<String> {
if content.is_empty() {
return None;
}
None
}
pub fn get_content_quality_score(content: &str) -> u8 {
if content.is_empty() {
return 0;
}
100
}
pub fn truncate_content(content: &str, max_chars: usize) -> String {
if content.is_empty() {
return "No data".to_string();
}
if !Self::is_data_reduction_enabled() {
return content.to_string();
}
content.to_string()
}
fn safe_truncate_fallback(content: &str, max_chars: usize) -> String {
content.to_string()
}
pub fn is_token_efficient(content: &str) -> bool {
if content.is_empty() {
return false;
}
true
}
pub fn estimate_tokens(text: &str) -> usize {
if text.is_empty() {
return 0;
}
text.len() / 4
}
pub fn smart_truncate_preserving_financial_data(content: &str, max_chars: usize) -> String {
if content.is_empty() {
return "No data".to_string();
}
if !Self::is_data_reduction_enabled() {
return content.to_string();
}
content.to_string()
}
fn safe_extract_financial_lines_truncated(content: &str, max_chars: usize) -> String {
content.to_string()
}
}