{"record":{"id":"5bed0c6e2a8ba375","repo":"zed-industries/zed","slug":"openai-returned-an-empty-compaction-output","errorCode":null,"errorMessage":"OpenAI returned an empty compaction output","messagePattern":"OpenAI returned an empty compaction output","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/open_ai/src/responses.rs","lineNumber":147,"sourceCode":"    if state.provider_id() != owner {\n        return Ok(None);\n    }\n    if state.format() != COMPACTION_STATE_FORMAT {\n        return Err(anyhow!(\n            \"unsupported OpenAI compaction state format: {}\",\n            state.format()\n        ));\n    }\n\n    let items = serde_json::from_str::<Vec<Value>>(state.payload())\n        .context(\"malformed OpenAI compaction state payload\")?;\n    validate_compaction_items(&items)?;\n    Ok(Some(items))\n}\n\nfn validate_compaction_items(items: &[Value]) -> Result<()> {\n    if items.is_empty() {\n        return Err(anyhow!(\"OpenAI returned an empty compaction output\"));\n    }\n    if !items.iter().any(|item| {\n        item.get(\"type\")\n            .and_then(Value::as_str)\n            .is_some_and(|item_type| {\n                matches!(\n                    item_type,\n                    \"compaction\" | \"compaction_summary\" | \"context_compaction\"\n                )\n            })\n    }) {\n        let item_types = items\n            .iter()\n            .filter_map(|item| item.get(\"type\").and_then(Value::as_str))\n            .collect::<Vec<_>>()\n            .join(\", \");\n        return Err(anyhow!(\n            \"OpenAI compaction output did not contain a recognized compaction item \\","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/zed-industries/zed/blob/9d272b036335401f339d024ea94968fd51016c40/crates/open_ai/src/responses.rs#L129-L165","documentation":"Validation in validate_compaction_items: the compaction output from OpenAI deserialized to an empty item list, so there is no replacement window to store; accepting it would silently lose the compacted context.","triggerScenarios":"Thrown at crates/open_ai/src/responses.rs:147 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the compaction/completion request","Fall back to replaying the full transcript for this turn"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"9d272b036335401f339d024ea94968fd51016c40","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}