diff options
Diffstat (limited to 'packages/cli/src/ui/hooks/useGeminiStream.ts')
| -rw-r--r-- | packages/cli/src/ui/hooks/useGeminiStream.ts | 56 |
1 files changed, 42 insertions, 14 deletions
diff --git a/packages/cli/src/ui/hooks/useGeminiStream.ts b/packages/cli/src/ui/hooks/useGeminiStream.ts index c50d4c43..64e39e68 100644 --- a/packages/cli/src/ui/hooks/useGeminiStream.ts +++ b/packages/cli/src/ui/hooks/useGeminiStream.ts @@ -356,6 +356,18 @@ export const useGeminiStream = ( [addItem, pendingHistoryItemRef, setPendingHistoryItem], ); + const handleChatCompressionEvent = useCallback( + () => + addItem( + { + type: 'info', + text: `IMPORTANT: this conversation approached the input token limit for ${config.getModel()}. We'll send a compressed context to the model for any future messages.`, + }, + Date.now(), + ), + [addItem, config], + ); + const processGeminiStreamEvents = useCallback( async ( stream: AsyncIterable<GeminiEvent>, @@ -364,20 +376,35 @@ export const useGeminiStream = ( let geminiMessageBuffer = ''; const toolCallRequests: ToolCallRequestInfo[] = []; for await (const event of stream) { - if (event.type === ServerGeminiEventType.Content) { - geminiMessageBuffer = handleContentEvent( - event.value, - geminiMessageBuffer, - userMessageTimestamp, - ); - } else if (event.type === ServerGeminiEventType.ToolCallRequest) { - toolCallRequests.push(event.value); - } else if (event.type === ServerGeminiEventType.UserCancelled) { - handleUserCancelledEvent(userMessageTimestamp); - return StreamProcessingStatus.UserCancelled; - } else if (event.type === ServerGeminiEventType.Error) { - handleErrorEvent(event.value, userMessageTimestamp); - return StreamProcessingStatus.Error; + switch (event.type) { + case ServerGeminiEventType.Content: + geminiMessageBuffer = handleContentEvent( + event.value, + geminiMessageBuffer, + userMessageTimestamp, + ); + break; + case ServerGeminiEventType.ToolCallRequest: + toolCallRequests.push(event.value); + break; + case ServerGeminiEventType.UserCancelled: + handleUserCancelledEvent(userMessageTimestamp); + break; + case ServerGeminiEventType.Error: + handleErrorEvent(event.value, userMessageTimestamp); + break; + case ServerGeminiEventType.ChatCompressed: + handleChatCompressionEvent(); + break; + case ServerGeminiEventType.ToolCallConfirmation: + case ServerGeminiEventType.ToolCallResponse: + // do nothing + break; + default: { + // enforces exhaustive switch-case + const unreachable: never = event; + return unreachable; + } } } if (toolCallRequests.length > 0) { @@ -390,6 +417,7 @@ export const useGeminiStream = ( handleUserCancelledEvent, handleErrorEvent, scheduleToolCalls, + handleChatCompressionEvent, ], ); |
