style: format quota and response changes

This commit is contained in:
zhefox
2026-09-02 15:40:40 +08:00
parent 77229943d1
commit b1bf7837cf
10 changed files with 73 additions and 67 deletions
+9 -21
View File
@@ -34,8 +34,8 @@ pub use providers::{
WINDSURF_MODEL_CONFIGS_PATH, WINDSURF_RATE_LIMIT_PATH, WINDSURF_USER_STATUS_PATH,
};
pub use quota::{
provider_pool_key_account_quota_exhausted, provider_pool_key_quota_hard_blocked,
provider_pool_key_model_quota_exhausted, provider_pool_key_model_quota_hard_blocked,
provider_pool_key_account_quota_exhausted, provider_pool_key_model_quota_exhausted,
provider_pool_key_model_quota_hard_blocked, provider_pool_key_quota_hard_blocked,
provider_pool_key_scheduling_label, provider_pool_member_quota_snapshot,
provider_pool_quota_metadata_provider_type, provider_pool_quota_metadata_updated_at,
provider_pool_quota_snapshot_updated_at,
@@ -1005,14 +1005,12 @@ mod tests {
}
}));
let alpha = service.member_signals(
"codex",
&key,
None,
Some("vendor-alpha-model"),
);
let alpha = service.member_signals("codex", &key, None, Some("vendor-alpha-model"));
let beta = service.member_signals("codex", &key, None, Some("vendor-beta-model"));
assert!(!alpha.quota_exhausted, "one available alpha window must keep it usable");
assert!(
!alpha.quota_exhausted,
"one available alpha window must keep it usable"
);
assert!(beta.quota_exhausted);
assert!(!beta.quota_hard_blocked);
}
@@ -1062,12 +1060,7 @@ mod tests {
}
}));
let signals = service.member_signals(
"codex",
&key,
None,
Some("gpt-5.3-codex-spark"),
);
let signals = service.member_signals("codex", &key, None, Some("gpt-5.3-codex-spark"));
assert!(
!signals.quota_exhausted,
"a compact bucket name should match a token in the selected model"
@@ -1093,12 +1086,7 @@ mod tests {
}
}));
let signals = service.member_signals(
"codex",
&key,
None,
Some("gpt-5.4-codex-spark"),
);
let signals = service.member_signals("codex", &key, None, Some("gpt-5.4-codex-spark"));
assert!(signals.quota_exhausted);
}
+2 -2
View File
@@ -7,8 +7,8 @@ use serde_json::{Map, Value};
use crate::capability::{ProviderPoolCapabilities, ProviderPoolCapability};
use crate::plan::{derive_plan_tier, normalize_provider_plan_tier};
use crate::quota::{
provider_pool_account_blocked, provider_pool_quota_reset_seconds,
provider_pool_model_quota_exhausted, provider_pool_quota_snapshot_exhausted_decision,
provider_pool_account_blocked, provider_pool_model_quota_exhausted,
provider_pool_quota_reset_seconds, provider_pool_quota_snapshot_exhausted_decision,
provider_pool_quota_usage_ratio,
};
@@ -11,8 +11,8 @@ use crate::provider::{
};
use crate::quota::{
provider_pool_current_unix_secs, provider_pool_json_bool, provider_pool_json_f64,
provider_pool_metadata_bucket, provider_pool_quota_snapshot_exhausted_decision,
provider_pool_model_quota_exhausted, provider_pool_reset_deadline_elapsed,
provider_pool_metadata_bucket, provider_pool_model_quota_exhausted,
provider_pool_quota_snapshot_exhausted_decision, provider_pool_reset_deadline_elapsed,
provider_pool_timestamp_unix_secs,
};
use crate::quota_refresh::ProviderPoolQuotaRequestSpec;
@@ -8,8 +8,8 @@ use crate::provider::{
};
use crate::quota::{
provider_pool_current_unix_secs, provider_pool_json_bool, provider_pool_json_f64,
provider_pool_metadata_bucket, provider_pool_quota_snapshot_exhausted_decision,
provider_pool_model_quota_exhausted, provider_pool_reset_deadline_elapsed,
provider_pool_metadata_bucket, provider_pool_model_quota_exhausted,
provider_pool_quota_snapshot_exhausted_decision, provider_pool_reset_deadline_elapsed,
provider_pool_timestamp_unix_secs,
};
+49 -23
View File
@@ -106,10 +106,8 @@ pub(crate) fn provider_pool_model_quota_exhausted(
})
.collect::<Vec<_>>();
if !model_matches.is_empty() {
let exhausted = provider_pool_explicit_model_windows_exhausted(
model_matches,
observed_at,
);
let exhausted =
provider_pool_explicit_model_windows_exhausted(model_matches, observed_at);
if resolved.is_none()
|| provider_pool_should_replace_model_quota_resolution(
resolved.as_ref().and_then(|(observed_at, _)| *observed_at),
@@ -130,10 +128,7 @@ pub(crate) fn provider_pool_model_quota_exhausted(
.filter(|window| provider_pool_window_family_matches_model(window, &requested))
.collect::<Vec<_>>();
if !family_matches.is_empty() {
let exhausted = provider_pool_any_window_exhausted(
family_matches,
observed_at,
);
let exhausted = provider_pool_any_window_exhausted(family_matches, observed_at);
if resolved.is_none()
|| provider_pool_should_replace_model_quota_resolution(
resolved.as_ref().and_then(|(observed_at, _)| *observed_at),
@@ -234,7 +229,10 @@ fn provider_pool_window_is_generic(window: &Map<String, Value>) -> bool {
return false;
}
let code = window.get("code").and_then(Value::as_str).unwrap_or_default();
let code = window
.get("code")
.and_then(Value::as_str)
.unwrap_or_default();
let family = code
.split_once(['_', ':', '/'])
.map(|(prefix, _)| prefix)
@@ -248,8 +246,17 @@ fn provider_pool_window_is_generic(window: &Map<String, Value>) -> bool {
.is_some_and(|scope| scope.trim().eq_ignore_ascii_case("account"));
}
[
"weekly", "5h", "daily", "monthly", "primary", "secondary", "account", "quota",
"window", "rate", "reset",
"weekly",
"5h",
"daily",
"monthly",
"primary",
"secondary",
"account",
"quota",
"window",
"rate",
"reset",
]
.contains(&family.as_str())
}
@@ -301,8 +308,7 @@ fn provider_pool_window_family_matches_model(
.map(|scope| scope.trim().to_ascii_lowercase());
// A model-scoped window without an explicit model must not accidentally
// match a token from its opaque code.
if explicit_scope.as_deref() == Some("model")
|| provider_pool_window_has_explicit_model(window)
if explicit_scope.as_deref() == Some("model") || provider_pool_window_has_explicit_model(window)
{
return false;
}
@@ -373,9 +379,26 @@ fn provider_pool_is_specific_model_token(token: &str) -> bool {
token.len() >= 4
&& !token.chars().all(|character| character.is_ascii_digit())
&& ![
"auto", "base", "claude", "codex", "default", "fast", "flash", "free",
"gemini", "gpt", "latest", "mini", "model", "plus", "pro", "reasoning",
"team", "think", "thinking", "vendor",
"auto",
"base",
"claude",
"codex",
"default",
"fast",
"flash",
"free",
"gemini",
"gpt",
"latest",
"mini",
"model",
"plus",
"pro",
"reasoning",
"team",
"think",
"thinking",
"vendor",
]
.contains(&token)
}
@@ -394,9 +417,9 @@ fn provider_pool_window_has_explicit_model(window: &Map<String, Value>) -> bool
.iter()
.any(|key| match window.get(*key) {
Some(Value::String(value)) => !value.trim().is_empty(),
Some(Value::Array(values)) => values.iter().any(|value| {
value.as_str().is_some_and(|value| !value.trim().is_empty())
}),
Some(Value::Array(values)) => values
.iter()
.any(|value| value.as_str().is_some_and(|value| !value.trim().is_empty())),
_ => false,
})
}
@@ -610,8 +633,12 @@ fn provider_pool_quota_window_is_exhausted(window: &Map<String, Value>) -> bool
provider_pool_json_bool(window.get("is_exhausted"))
.or_else(|| provider_pool_json_bool(window.get("exhausted")))
.or_else(|| {
provider_pool_json_f64(window.get("used_ratio").or_else(|| window.get("usage_ratio")))
.map(|value| value >= 1.0 - 1e-6)
provider_pool_json_f64(
window
.get("used_ratio")
.or_else(|| window.get("usage_ratio")),
)
.map(|value| value >= 1.0 - 1e-6)
})
.or_else(|| {
provider_pool_json_f64(window.get("used_percent")).map(|value| value >= 100.0 - 1e-6)
@@ -625,8 +652,7 @@ fn provider_pool_quota_window_is_exhausted(window: &Map<String, Value>) -> bool
.map(|value| value <= 1e-6)
})
.or_else(|| {
provider_pool_json_f64(window.get("remaining_percent"))
.map(|value| value <= 1e-6)
provider_pool_json_f64(window.get("remaining_percent")).map(|value| value <= 1e-6)
})
.or_else(|| {
let remaining = provider_pool_json_f64(