llm_cost_ops/forecasting/
mod.rs

1// Forecasting engine for LLM cost prediction and analysis
2
3pub mod types;
4pub mod models;
5pub mod engine;
6pub mod metrics;
7pub mod anomaly;
8pub mod budget;
9
10pub use types::{
11    DataPoint, ForecastConfig, ForecastHorizon, TimeSeriesData,
12    TrendDirection, SeasonalityPattern,
13    ForecastResult as TypesForecastResult,
14};
15pub use models::{
16    ForecastModel, LinearTrendModel, ExponentialSmoothingModel, MovingAverageModel,
17};
18pub use engine::{ForecastEngine, ForecastRequest};
19pub use metrics::{ForecastMetrics, calculate_mape, calculate_rmse, calculate_mae};
20pub use anomaly::{AnomalyDetector, AnomalyResult, AnomalyMethod};
21pub use budget::{BudgetForecaster, BudgetForecast, BudgetAlert, AlertSeverity};
22
23/// Forecasting error types
24#[derive(Debug, thiserror::Error)]
25pub enum ForecastError {
26    #[error("Insufficient data: {0}")]
27    InsufficientData(String),
28
29    #[error("Invalid configuration: {0}")]
30    InvalidConfig(String),
31
32    #[error("Model error: {0}")]
33    ModelError(String),
34
35    #[error("Calculation error: {0}")]
36    CalculationError(String),
37
38    #[error("Internal error: {0}")]
39    InternalError(String),
40}
41
42impl From<ForecastError> for crate::domain::CostOpsError {
43    fn from(err: ForecastError) -> Self {
44        crate::domain::CostOpsError::internal(err.to_string())
45    }
46}
47
48pub type ForecastResult<T> = Result<T, ForecastError>;