oxios_kernel/kernel_handle/
token_maxing_api.rs1use std::sync::Arc;
10
11use crate::token_maxing::{
12 Availability, CooldownRecord, MaxerStatus, MaxingStart, ProviderSnapshot, QuotaTracker,
13 QuotaTrackerSnapshot, RecalibrationRecord, TokenMaxer, TokenMaxingConfig, TokenMaxingSession,
14};
15
16pub struct TokenMaxingApi {
22 tracker: Arc<QuotaTracker>,
23 maxer: Arc<TokenMaxer>,
24}
25
26impl TokenMaxingApi {
27 pub fn new(tracker: Arc<QuotaTracker>, maxer: Arc<TokenMaxer>) -> Self {
29 Self { tracker, maxer }
30 }
31
32 pub fn tracker(&self) -> &Arc<QuotaTracker> {
34 &self.tracker
35 }
36
37 pub fn maxer(&self) -> &Arc<TokenMaxer> {
39 &self.maxer
40 }
41
42 pub fn launch(&self, start: MaxingStart) -> anyhow::Result<String> {
46 self.maxer.launch(start)
47 }
48
49 pub fn stop(&self) {
51 self.maxer.stop();
52 }
53
54 pub fn status(&self) -> MaxerStatus {
56 self.maxer.status()
57 }
58
59 pub fn sessions(&self) -> Vec<TokenMaxingSession> {
61 self.maxer.sessions()
62 }
63
64 pub fn session(&self, id: &str) -> Option<TokenMaxingSession> {
66 self.maxer.session(id)
67 }
68
69 pub fn enabled(&self) -> bool {
73 let cfg = self.tracker.config();
74 cfg.enabled && cfg.providers.iter().any(|p| cfg.is_eligible(&p.provider))
75 }
76
77 pub fn config(&self) -> TokenMaxingConfig {
79 self.tracker.config()
80 }
81
82 pub fn reload(&self, config: TokenMaxingConfig) {
84 self.tracker.reload(config);
85 }
86
87 pub fn availability(&self, provider: &str) -> Availability {
89 self.tracker.availability(provider)
90 }
91
92 pub fn snapshots(&self) -> Vec<QuotaTrackerSnapshot> {
94 self.tracker.snapshots()
95 }
96
97 pub fn snapshot(&self, provider: &str) -> Option<ProviderSnapshot> {
99 self.tracker.snapshot(provider)
100 }
101
102 pub fn recalibration_history(&self) -> Vec<RecalibrationRecord> {
104 self.tracker.recalibration_history()
105 }
106
107 pub fn cooldown_history(&self) -> Vec<CooldownRecord> {
109 self.tracker.cooldown_history()
110 }
111}