diff --git a/backend/crates/providers/openai/src/provider.rs b/backend/crates/providers/openai/src/provider.rs index 3cb482492..b2f9e8aef 100644 --- a/backend/crates/providers/openai/src/provider.rs +++ b/backend/crates/providers/openai/src/provider.rs @@ -1127,6 +1127,8 @@ impl OpenAiResponseObservationState { fn provider_metadata(&self) -> Option { let mut metadata = Map::new(); + // 观测对象版本信封:读取端按 schemaVersion 解码,缺失视为 v0(见 DB-03)。 + metadata.insert("schemaVersion".to_owned(), json!(1)); let effective_model = self .response_metadata .effective_model diff --git a/backend/crates/providers/xai/src/provider.rs b/backend/crates/providers/xai/src/provider.rs index 2b69369f8..86768438d 100644 --- a/backend/crates/providers/xai/src/provider.rs +++ b/backend/crates/providers/xai/src/provider.rs @@ -1543,6 +1543,8 @@ fn xai_transport_metadata( if metadata.is_empty() { return None; } + // 观测对象版本信封:读取端按 schemaVersion 解码,缺失视为 v0(见 DB-03)。 + metadata.insert("schemaVersion".to_owned(), Value::from(1)); ProviderResponseMetadata::new(serde_json::to_string(&Value::Object(metadata)).ok()?) } diff --git a/backend/crates/providers/xai/tests/provider/contract.rs b/backend/crates/providers/xai/tests/provider/contract.rs index 03ee2c366..4e3b3dc3e 100644 --- a/backend/crates/providers/xai/tests/provider/contract.rs +++ b/backend/crates/providers/xai/tests/provider/contract.rs @@ -1012,6 +1012,7 @@ async fn execute_returns_cold_stream_and_records_selected_account() { assert_eq!( metadata, json!({ + "schemaVersion": 1, "clientCache": "miss", "dnsSource": "system", "dnsMs": 7,