mirror of
https://github.com/openai/codex.git
synced 2026-11-13 14:46:14 +00:00
Reduce response serialization and rollout scan overhead (#36006)
## What changed - Keep `ClientResponsePayload` typed through the app-server outgoing queue and serialize it at the transport boundary, avoiding an intermediate `serde_json::Value` while preserving the JSON-RPC wire shape. - Return a JSON-RPC internal error when a response cannot be serialized, including over remote control, and skip unserializable analytics responses. - Scan reverse JSONL input a chunk at a time with a larger buffer instead of processing each byte individually. ## Testing - Cover typed response serialization and serialization failures for direct and remote-control transports. - Cover filtering unserializable responses from analytics. GitOrigin-RevId: cc4fd7a43461a273315bb95261bd1ae3ff65fbf7
This commit is contained in:
1 parent
7579a2b413
commit
c41a38dd10
14 files changed
+293
-132
No files matched your search
@@ -5,18 +5,13 @@ use pretty_assertions::assert_eq;
|
||||
use serde_json::json;
|
||||
|
||||
#[test]
|
||||
fn client_response_payload_returns_jsonrpc_parts_and_client_response() -> Result<()> {
|
||||
let (request_id, result, payload) =
|
||||
ClientResponsePayload::ThreadArchive(v2::ThreadArchiveResponse {})
|
||||
.into_jsonrpc_parts_and_payload(RequestId::Integer(7))?;
|
||||
|
||||
assert_eq!(request_id, RequestId::Integer(7));
|
||||
assert_eq!(result, json!({}));
|
||||
|
||||
fn client_response_payload_serializes_without_an_intermediate_json_value() -> Result<()> {
|
||||
let payload = ClientResponsePayload::ThreadArchive(v2::ThreadArchiveResponse {});
|
||||
assert_eq!(serde_json::to_string(&payload)?, "{}");
|
||||
let Some(ClientResponse::ThreadArchive {
|
||||
request_id,
|
||||
response: _,
|
||||
}) = payload.and_then(|payload| payload.into_client_response(RequestId::Integer(7)))
|
||||
}) = payload.into_client_response(RequestId::Integer(7))
|
||||
else {
|
||||
panic!("expected thread/archive client response");
|
||||
};
|
||||
@@ -26,19 +21,19 @@ fn client_response_payload_returns_jsonrpc_parts_and_client_response() -> Result
|
||||
|
||||
#[test]
|
||||
fn interrupt_conversation_payload_stays_jsonrpc_only() -> Result<()> {
|
||||
let (request_id, result, payload) =
|
||||
ClientResponsePayload::InterruptConversation(v1::InterruptConversationResponse {
|
||||
abort_reason: TurnAbortReason::Interrupted,
|
||||
})
|
||||
.into_jsonrpc_parts_and_payload(RequestId::Integer(8))?;
|
||||
|
||||
assert_eq!(request_id, RequestId::Integer(8));
|
||||
let payload = ClientResponsePayload::InterruptConversation(v1::InterruptConversationResponse {
|
||||
abort_reason: TurnAbortReason::Interrupted,
|
||||
});
|
||||
assert_eq!(
|
||||
result,
|
||||
serde_json::to_value(&payload)?,
|
||||
json!({
|
||||
"abortReason": "interrupted",
|
||||
})
|
||||
);
|
||||
assert!(payload.is_none());
|
||||
assert!(
|
||||
payload
|
||||
.into_client_response(RequestId::Integer(8))
|
||||
.is_none()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
Reference in new issue
Block a user