llm_cost_ops/forecasting/
mod.rs1pub 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#[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>;