feat: allow wallet fallback after plan quota exhaustion

This commit is contained in:
elky
2026-10-09 21:21:53 +08:00
parent bad13237d2
commit 63520c8c27
39 changed files with 1474 additions and 190 deletions
@@ -103,6 +103,7 @@ pub(crate) fn retain_first_byte_request_metadata(value: Option<Value>) -> Option
| "client_requested_stream"
| "upstream_is_stream"
| "api_key_is_standalone"
| "plan_wallet_fallback"
| "plan_usage_reservation_token"
| "request_path"
| "request_query_string"
@@ -286,6 +286,15 @@ fn usage_api_key_is_standalone(usage: &StoredRequestUsageAudit) -> bool {
}
fn usage_policy_reservation_token(usage: &StoredRequestUsageAudit) -> Option<&str> {
if usage
.request_metadata
.as_ref()
.and_then(|metadata| metadata.get("plan_wallet_fallback"))
.and_then(serde_json::Value::as_bool)
== Some(true)
{
return None;
}
usage
.request_metadata
.as_ref()
@@ -296,6 +305,16 @@ fn usage_policy_reservation_token(usage: &StoredRequestUsageAudit) -> Option<&st
}
fn event_usage_policy_reservation_token(event: &UsageEvent) -> Option<&str> {
if event
.data
.request_metadata
.as_ref()
.and_then(|metadata| metadata.get("plan_wallet_fallback"))
.and_then(serde_json::Value::as_bool)
== Some(true)
{
return None;
}
event
.data
.request_metadata
+6
View File
@@ -2246,6 +2246,12 @@ fn build_runtime_request_metadata_seed_from_parts(
Value::Bool(api_key_is_standalone),
);
}
if let Some(wallet_fallback) = context_bool(context, "plan_wallet_fallback") {
metadata.insert(
"plan_wallet_fallback".to_string(),
Value::Bool(wallet_fallback),
);
}
if let Some(websocket_mode) = context_bool(context, WEBSOCKET_MODE_METADATA_KEY) {
metadata.insert(
WEBSOCKET_MODE_METADATA_KEY.to_string(),