Label OpenAI JS SDK in user usage

This commit is contained in:
RWDai
2026-05-18 19:29:59 +08:00
parent ae9d4038b1
commit 37abfe66f0

View File

@@ -354,10 +354,18 @@ fn infer_client_family_from_user_agent(user_agent: &str) -> Option<&'static str>
if normalized.contains("geminicli") || normalized.contains("gemini-cli") { if normalized.contains("geminicli") || normalized.contains("gemini-cli") {
return Some("gemini_cli"); return Some("gemini_cli");
} }
if normalized.starts_with("openai/js") {
return Some("openai_js_sdk");
}
None None
} }
fn users_me_usage_client_family(item: &StoredRequestUsageAudit) -> Option<&str> { fn users_me_usage_client_family(item: &StoredRequestUsageAudit) -> Option<&str> {
item.client_family
.as_deref()
.map(str::trim)
.filter(|value| !value.is_empty())
.or_else(|| {
item.request_metadata item.request_metadata
.as_ref() .as_ref()
.and_then(serde_json::Value::as_object) .and_then(serde_json::Value::as_object)
@@ -375,6 +383,7 @@ fn users_me_usage_client_family(item: &StoredRequestUsageAudit) -> Option<&str>
}) })
.map(str::trim) .map(str::trim)
.filter(|value| !value.is_empty()) .filter(|value| !value.is_empty())
})
.or_else(|| { .or_else(|| {
users_me_usage_metadata_string(item, "user_agent") users_me_usage_metadata_string(item, "user_agent")
.and_then(infer_client_family_from_user_agent) .and_then(infer_client_family_from_user_agent)
@@ -1456,6 +1465,21 @@ mod tests {
assert_eq!(active_payload["client_ip"], "192.168.0.28"); assert_eq!(active_payload["client_ip"], "192.168.0.28");
} }
#[test]
fn user_usage_payload_labels_openai_js_user_agent_as_sdk() {
let item = StoredRequestUsageAudit {
request_metadata: Some(json!({
"user_agent": "OpenAI/JS 6.34.0"
})),
..sample_usage("completed")
};
let record_payload =
build_users_me_usage_record_payload(&item, false, &BTreeMap::new(), false);
assert_eq!(record_payload["client_family"], "openai_js_sdk");
}
#[test] #[test]
fn user_usage_stream_inference_falls_back_to_request_body_stream_flag() { fn user_usage_stream_inference_falls_back_to_request_body_stream_flag() {
let item = StoredRequestUsageAudit { let item = StoredRequestUsageAudit {