can1357/oh-my-pi · error

V2 compaction expected exactly one compaction output item, g

Error message

V2 compaction expected exactly one compaction output item, got ${state.compactionItems.length} from ${state.outputItemCount} output items

What it means

After the stream completes, finishCompactionV2Collection expects exactly one compaction-type output item among the response's output items; any other count means the server produced malformed or unexpected compaction output. The error reports how many compaction items were found and the total number of output items seen.

Source

Thrown at packages/agent/src/compaction/compaction-v2-streaming.ts:532

			}
		}
		dispatch();
	} finally {
		reader.releaseLock();
	}

	return finishCompactionV2Collection(state, request);
}

function finishCompactionV2Collection(
	state: CompactionV2CollectionState,
	request: CompactionV2Request,
): CompactionV2Response {
	if (!state.sawCompleted) {
		throw new Error("V2 compaction stream closed before response.completed");
	}
	if (state.compactionItems.length !== 1) {
		throw new Error(
			`V2 compaction expected exactly one compaction output item, got ${state.compactionItems.length} from ${state.outputItemCount} output items`,
		);
	}

	const compactionItem = state.compactionItems[0];
	const { replacementHistory, retainedImageCount } = buildCompactionV2ReplacementHistory(
		request.input,
		compactionItem,
		request.retainedMessageBudget,
	);
	return {
		compactionItem,
		replacementHistory,
		usedTokens: state.usage?.inputTokens ?? 0,
		usage: state.usage,
		retainedImageCount,
	};
}

View on GitHub (pinned to 9690622007)

Solutions

  1. Verify the endpoint is the dedicated compaction endpoint (correct base URL + compaction route/deployment), not a generic Responses endpoint
  2. Log state.outputItemCount and event types to see what the server actually returned; compare against the expected compaction event schema
  3. Pin/align the Azure OpenAI API version and deployment used for compaction after provider updates
  4. Retry once in case of a transient server anomaly, then fall back to local compaction if it reproduces

Example fix

// before
endpoint: "https://res.openai.azure.com/openai/v1/responses" // generic endpoint
// after
endpoint: getCompactionV2Endpoint(model) // compaction-specific endpoint/deployment
Defensive patterns

Strategy: validation

Validate before calling

// verify you target the compaction endpoint, not a generic Responses endpoint
const endpoint = getCompactionV2Endpoint(model);
if (!endpoint || !endpoint.includes("compaction")) {
  console.warn("unexpected compaction endpoint:", endpoint);
}

Try / catch

try {
  return await requestCompactionV2Streaming({ model, ... });
} catch (err) {
  if (err instanceof Error && err.message.includes("exactly one compaction output item")) {
    logServerEventsForDebugging(); // capture outputItemCount/types
    return compactLocally(session); // deterministic fallback
  }
  throw err;
}

Prevention

When it happens

Trigger: The V2 compaction endpoint returns a completed response whose output items contain zero or multiple compaction items — e.g. API behavior change, wrong endpoint/deployment returning normal model output instead of a compaction item, or event filtering dropping/duplicating compaction events.

Common situations: Pointing at a regular Responses endpoint instead of the compaction endpoint; provider API version drift changing output item types; proxy rewriting responses; bugs after upgrading the server-side compaction model/deployment.

Related errors


AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31). Data as JSON: /api/errors/e94c8e29731b5be3. Report an issue: GitHub.