async fn fetch_ratio(&self, _token_address: Address) -> anyhow::Result<BaseTokenApiRatio> {
        if let Some(fluctation) = self.fluctuation {
            let mut previous_numerator = self.previous_numerator.lock().await;
            let mut rng = rand::thread_rng();
            let numerator_range = (
                max(
                    (self.ratio.numerator.get() as f64 * (1.0 - (fluctation as f64 / 100.0)))
                        .round() as u64,
                    (previous_numerator.get() as f64
                        * (1.0 - (self.next_value_fluctuation as f64 / 100.0)))
                        .round() as u64,
                ),
                min(
                    (self.ratio.numerator.get() as f64 * (1.0 + (fluctation as f64 / 100.0)))
                        .round() as u64,
                    (previous_numerator.get() as f64
                        * (1.0 + (self.next_value_fluctuation as f64 / 100.0)))
                        .round() as u64,
                ),
            );

            let new_numerator =
                NonZeroU64::new(rng.gen_range(numerator_range.0..=numerator_range.1))
                    .unwrap_or(self.ratio.numerator);
            let adjusted_ratio = BaseTokenApiRatio {
                numerator: new_numerator,
                denominator: self.ratio.denominator,
                ratio_timestamp: chrono::Utc::now(),
            };
            *previous_numerator = new_numerator;
            Ok(adjusted_ratio)
        } else {
            Ok(self.ratio)
        }
    }
Returns the configured ratio with fluctuation applied if enabled
core/lib/external_price_api/src/forced_price_client.rs