Repository navigation
llm-deepseek: a missing attachment surfaces as TRANSPORT ("DeepSeek Messages transport failed"), is retried 5x, and blocks the session #10842
Environment
SymptomOnce a session's durable history contains an image block whose attachment blob is gone from the local content-addressed store, every subsequent request in that session fails immediately:
Root cause
const { messages, versions } = await prepareImages(
options.messages, connection, options.model, this.dependencies.resolveAttachments?.(), this.imageAccess, signal,
)
} catch (error) {
if (timeoutOf(watchdog.signal, 'MESSAGES_IDLE') !== undefined) throw new LlmError('DeepSeek Messages stream idle timeout', 'TIMEOUT', { cause: error })
if (options.signal?.aborted) throw new LlmError('DeepSeek Messages request aborted', 'ABORTED', { cause: error })
if (error instanceof LlmError) throw error
throw new LlmError('DeepSeek Messages transport failed', 'TRANSPORT', { cause: error })
}So a deterministic, purely local "attachment missing/corrupt" condition is classified as a transient transport failure and retried. Same shape exists one layer down for the Files API: Reproduction (self-contained, no user data)
Step 5 isolates the blob as the only variable: nothing about credentials, network, model or journal changed. Expected
Suggested fix (minimal)In if (isAttachmentError(error)) throw new LlmError(`Image attachment unavailable: ${error.message}`, error.code, { cause: error })and keep that code out of the retry policy (it is deterministic). Consider also surfacing ImpactAnyone who cleans, restores, syncs, or partially loses |
Replies: 1 comment
|
If there is a completed turn before the first missing image, you can recover the earlier context using the existing message-level branch action:
The cut matters: the sidebar's Fork session action uses the latest completed turn, which can still include the broken attachment reference. The message action sends an explicit event position. Its button is unavailable on intermediate replies within a turn. See the message-action check. I checked the published Only the selected prefix carries over. The original conversation remains available, but this cannot restore the missing bytes. If the image was in the first turn, there may be no usable earlier branch point. The error classification still needs fixing. AI-assisted; package behavior checked locally. |
If there is a completed turn before the first missing image, you can recover the earlier context using the existing message-level branch action:
The cut matters: the sidebar's Fork session action uses the latest completed turn, which can still include the broken attachment reference. The message action sends an explicit event position. Its button is unavailable on intermediate replies within a turn. See the message-actio…