{"record":{"id":"398ac5076e8c312f","repo":"zed-industries/zed","slug":"chatgpt-subscription-compaction-returned-no-replac","errorCode":null,"errorMessage":"ChatGPT subscription compaction returned no replacement context","messagePattern":"ChatGPT subscription compaction returned no replacement context","errorType":"exception","errorClass":"LanguageModelCompletionError","httpStatus":null,"severity":"error","filePath":"crates/openai_subscribed/src/openai_subscribed.rs","lineNumber":855,"sourceCode":"            let mut usage = language_model::TokenUsage::default();\n\n            while let Some(event) = event_stream.next().await {\n                match event? {\n                    LanguageModelCompletionEvent::Compaction(\n                        language_model::CompactionUpdate::Finished(context),\n                    ) => {\n                        if compacted_context.replace(context).is_some() {\n                            return Err(LanguageModelCompletionError::Other(anyhow!(\n                                \"ChatGPT subscription compaction returned multiple replacement contexts\"\n                            )));\n                        }\n                    }\n                    LanguageModelCompletionEvent::UsageUpdate(updated_usage) => {\n                        usage = updated_usage;\n                    }\n                    _ => {}\n                }\n            }\n\n            let context = compacted_context.ok_or_else(|| {\n                LanguageModelCompletionError::Other(anyhow!(\n                    \"ChatGPT subscription compaction returned no replacement context\"\n                ))\n            })?;\n            Ok(CompactionResult { context, usage })\n        })\n        .boxed()\n    }\n\n    fn supported_effort_levels(&self) -> Vec<LanguageModelEffortLevel> {\n        let default_effort = self.model.default_reasoning_effort();\n        self.model\n            .supported_reasoning_efforts()\n            .iter()\n            .copied()\n            .filter_map(|effort| {","sourceCodeStart":837,"sourceCodeEnd":873,"githubUrl":"https://github.com/zed-industries/zed/blob/5a9b9558db01a6b906cec2fb70a797affdc58cdd/crates/openai_subscribed/src/openai_subscribed.rs#L837-L873","documentation":"The compaction event stream completed without ever emitting a CompactionUpdate::Finished event, so there is no replacement context to swap in. The upstream ended the stream early (error, empty response, or only usage/intermediate events).","triggerScenarios":"Thrown at crates/openai_subscribed/src/openai_subscribed.rs:823 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Retry the compaction request — truncated streams are often transient network failures","Check that the conversation context is not empty or already below the compaction threshold","If persistent, inspect the upstream response for errors surfaced before the stream ended"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5a9b9558db01a6b906cec2fb70a797affdc58cdd","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}