@vscode/chat-lib 0.3.0 → 0.3.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.js +1 -1
- package/dist/src/_internal/extension/byok/node/openAIEndpoint.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.d.ts +3 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.js +9 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/extension/src/modelPickerUserSelection.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/asyncCompletions.d.ts +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/asyncCompletions.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.d.ts +19 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.js +12 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/cacheUtils.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts +49 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js +331 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.d.ts +3 -2
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.js +2 -6
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/copilotCompletion.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.d.ts +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.js +2 -2
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/current.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts +31 -12
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js +367 -806
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostText.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.d.ts +16 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.js +196 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/ghostTextStrategy.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.d.ts +3 -5
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.js +8 -8
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/last.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.d.ts +37 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.js +7 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/requestContext.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.d.ts +8 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.js +16 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/resultType.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/streamedCompletionSplitter.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/streamedCompletionSplitter.js +3 -5
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/streamedCompletionSplitter.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.d.ts +3 -2
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.js +10 -9
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/telemetry.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/inlineCompletion.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/inlineCompletion.js +2 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/inlineCompletion.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networkConfiguration.d.ts +1 -6
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networkConfiguration.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.d.ts +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.js +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/networking.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts +25 -7
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js +316 -23
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/fetch.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.d.ts +3 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.js +28 -3
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/model.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.d.ts +5 -9
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.js +0 -3
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/openai.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.d.ts +3 -27
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.js +17 -62
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/openai/stream.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.d.ts +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.js +0 -4
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/postInsertion.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.d.ts +7 -5
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.js +75 -13
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/completionsPromptFactory/componentsCompletionsPromptFactory.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.d.ts +10 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.js +92 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/diagnostics.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/splitContextPrompt.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/splitContextPrompt.js +2 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/components/splitContextPrompt.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.d.ts +9 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.js +50 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviderRegistry.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.d.ts +6 -2
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.js +106 -43
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/contextItemSchemas.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.d.ts +5 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.d.ts.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.js +59 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/contextProviders/diagnostics.js.map +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.d.ts +1 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.js +2 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/prompt/prompt.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/anomalyDetection.d.ts +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/anomalyDetection.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/anomalyDetection.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.d.ts +2 -2
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.js +2 -4
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/suggestions/suggestions.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/telemetry.d.ts +2 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/telemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/telemetry.js.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.d.ts +10 -2
- package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.d.ts.map +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.js +8 -0
- package/dist/src/_internal/extension/completions-core/vscode-node/types/src/contextProviderApiV1.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.d.ts +16 -0
- package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.d.ts.map +1 -0
- package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.js +27 -0
- package/dist/src/_internal/extension/inlineEdits/common/nesTriggerHint.js.map +1 -0
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +8 -1
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +10 -4
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts +6 -2
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js +5 -5
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +2 -0
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +11 -7
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +9 -3
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts +3 -0
- package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.js.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +22 -0
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +187 -66
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts +7 -5
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js +26 -14
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts +2 -0
- package/dist/src/_internal/extension/xtab/common/lintErrors.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/lintErrors.js +31 -7
- package/dist/src/_internal/extension/xtab/common/lintErrors.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js +11 -6
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts +2 -2
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js +15 -12
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts +3 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +9 -3
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +5 -23
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js +222 -195
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
- package/dist/src/_internal/platform/authentication/common/authentication.d.ts +2 -1
- package/dist/src/_internal/platform/authentication/common/authentication.d.ts.map +1 -1
- package/dist/src/_internal/platform/authentication/common/authentication.js +7 -2
- package/dist/src/_internal/platform/authentication/common/authentication.js.map +1 -1
- package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts +146 -49
- package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts.map +1 -1
- package/dist/src/_internal/platform/authentication/common/copilotToken.js +152 -18
- package/dist/src/_internal/platform/authentication/common/copilotToken.js.map +1 -1
- package/dist/src/_internal/platform/authentication/common/staticGitHubAuthenticationService.js +1 -1
- package/dist/src/_internal/platform/authentication/common/staticGitHubAuthenticationService.js.map +1 -1
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.d.ts +10 -0
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.d.ts.map +1 -1
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js +110 -40
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js.map +1 -1
- package/dist/src/_internal/platform/chat/common/chatMLFetcher.js +1 -1
- package/dist/src/_internal/platform/chat/common/chatMLFetcher.js.map +1 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.d.ts +5 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.d.ts.map +1 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.js +5 -1
- package/dist/src/_internal/platform/chat/common/commonTypes.js.map +1 -1
- package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.d.ts +27 -0
- package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.d.ts.map +1 -0
- package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.js +35 -0
- package/dist/src/_internal/platform/completions-core/common/openai/copilotAnnotations.js.map +1 -0
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +64 -33
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.js +46 -22
- package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
- package/dist/src/_internal/platform/configuration/common/validator.d.ts +2 -0
- package/dist/src/_internal/platform/configuration/common/validator.d.ts.map +1 -1
- package/dist/src/_internal/platform/configuration/common/validator.js +18 -0
- package/dist/src/_internal/platform/configuration/common/validator.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +2 -0
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +10 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +3 -0
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.d.ts +1 -0
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.js +1 -0
- package/dist/src/_internal/platform/endpoint/common/endpointTypes.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +2 -0
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +83 -3
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts +19 -4
- package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js +247 -36
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts +2 -0
- package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js +23 -5
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
- package/dist/src/_internal/platform/git/common/gitService.d.ts +2 -1
- package/dist/src/_internal/platform/git/common/gitService.d.ts.map +1 -1
- package/dist/src/_internal/platform/git/common/gitService.js.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.d.ts +36 -0
- package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.js +60 -0
- package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
- package/dist/src/_internal/platform/inlineCompletions/common/api.d.ts +5 -1
- package/dist/src/_internal/platform/inlineCompletions/common/api.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.d.ts +10 -2
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.js +23 -4
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +2 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +1 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts +5 -0
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js +123 -0
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +15 -3
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +20 -0
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js +5 -0
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js.map +1 -1
- package/dist/src/_internal/platform/languageServer/common/languageContextService.d.ts +27 -2
- package/dist/src/_internal/platform/languageServer/common/languageContextService.d.ts.map +1 -1
- package/dist/src/_internal/platform/languageServer/common/languageContextService.js +1 -0
- package/dist/src/_internal/platform/languageServer/common/languageContextService.js.map +1 -1
- package/dist/src/_internal/platform/log/common/logService.d.ts +12 -0
- package/dist/src/_internal/platform/log/common/logService.d.ts.map +1 -1
- package/dist/src/_internal/platform/log/common/logService.js +39 -0
- package/dist/src/_internal/platform/log/common/logService.js.map +1 -1
- package/dist/src/_internal/platform/nesFetch/common/completionsAPI.d.ts +74 -0
- package/dist/src/_internal/platform/nesFetch/common/completionsAPI.d.ts.map +1 -0
- package/dist/src/_internal/platform/nesFetch/common/completionsAPI.js +23 -0
- package/dist/src/_internal/platform/nesFetch/common/completionsAPI.js.map +1 -0
- package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.d.ts +72 -0
- package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.d.ts.map +1 -0
- package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.js +44 -0
- package/dist/src/_internal/platform/nesFetch/common/completionsFetchService.js.map +1 -0
- package/dist/src/_internal/platform/nesFetch/common/responseStream.d.ts +36 -0
- package/dist/src/_internal/platform/nesFetch/common/responseStream.d.ts.map +1 -0
- package/dist/src/_internal/platform/nesFetch/common/responseStream.js +167 -0
- package/dist/src/_internal/platform/nesFetch/common/responseStream.js.map +1 -0
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts +28 -0
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.d.ts.map +1 -0
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +184 -0
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -0
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts +9 -0
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.d.ts.map +1 -0
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js +71 -0
- package/dist/src/_internal/platform/nesFetch/node/streamTransformer.js.map +1 -0
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts +166 -0
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -0
- package/dist/src/_internal/platform/networking/common/anthropic.js +177 -0
- package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -0
- package/dist/src/_internal/platform/networking/common/fetch.d.ts +19 -12
- package/dist/src/_internal/platform/networking/common/fetch.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetch.js +5 -5
- package/dist/src/_internal/platform/networking/common/fetch.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +35 -6
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.js +96 -11
- package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.d.ts +7 -3
- package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.js +4 -4
- package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
- package/dist/src/_internal/platform/networking/node/stream.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/node/stream.js +55 -29
- package/dist/src/_internal/platform/networking/node/stream.js.map +1 -1
- package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts +1 -0
- package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts.map +1 -1
- package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js +2 -0
- package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js.map +1 -1
- package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts +2 -0
- package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts.map +1 -1
- package/dist/src/_internal/platform/requestLogger/node/requestLogger.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +95 -8
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.js +65 -11
- package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +5 -2
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
- package/dist/src/_internal/util/common/tracing.d.ts +13 -0
- package/dist/src/_internal/util/common/tracing.d.ts.map +1 -1
- package/dist/src/_internal/util/common/tracing.js +7 -0
- package/dist/src/_internal/util/common/tracing.js.map +1 -1
- package/dist/src/_internal/vscodeTypes.d.ts +5 -1
- package/dist/src/_internal/vscodeTypes.d.ts.map +1 -1
- package/dist/src/_internal/vscodeTypes.js +6 -3
- package/dist/src/_internal/vscodeTypes.js.map +1 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +5 -0
- package/dist/src/main.js.map +1 -1
- package/dist/src/package.json +606 -328
- package/package.json +3 -3
|
@@ -123,6 +123,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
123
123
|
this._capiClientService = _capiClientService;
|
|
124
124
|
this._configurationService = _configurationService;
|
|
125
125
|
this._experimentationService = _experimentationService;
|
|
126
|
+
/**
|
|
127
|
+
* Delays (in ms) between connectivity check attempts before retrying a failed request.
|
|
128
|
+
* Configurable for testing purposes.
|
|
129
|
+
*/
|
|
130
|
+
this.connectivityCheckDelays = [1000, 10000, 10000];
|
|
126
131
|
}
|
|
127
132
|
/**
|
|
128
133
|
* Note: the returned array of strings may be less than `n` (e.g., in case there were errors during streaming)
|
|
@@ -168,8 +173,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
168
173
|
let tokenCount = -1;
|
|
169
174
|
const streamRecorder = new chatMLFetcher_1.FetchStreamRecorder(finishedCb);
|
|
170
175
|
const enableRetryOnError = opts.enableRetryOnError ?? opts.enableRetryOnFilter;
|
|
176
|
+
const canRetryOnce = opts.canRetryOnceWithoutRollback ?? !(opts.enableRetryOnFilter || opts.enableRetryOnError);
|
|
171
177
|
let usernameToScrub;
|
|
172
178
|
let actualFetcher;
|
|
179
|
+
let actualBytesReceived;
|
|
180
|
+
let actualStatusCode;
|
|
173
181
|
try {
|
|
174
182
|
let response;
|
|
175
183
|
const payloadValidationResult = isValidChatPayload(opts.messages, postOptions);
|
|
@@ -184,9 +192,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
184
192
|
else {
|
|
185
193
|
const copilotToken = await this._authenticationService.getCopilotToken();
|
|
186
194
|
usernameToScrub = copilotToken.username;
|
|
187
|
-
const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, telemetryProperties, opts.useFetcher);
|
|
195
|
+
const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, telemetryProperties, opts.useFetcher, canRetryOnce);
|
|
188
196
|
response = fetchResult.result;
|
|
189
197
|
actualFetcher = fetchResult.fetcher;
|
|
198
|
+
actualBytesReceived = fetchResult.bytesReceived;
|
|
199
|
+
actualStatusCode = fetchResult.statusCode;
|
|
190
200
|
tokenCount = await chatEndpoint.acquireTokenizer().countMessagesTokens(messages);
|
|
191
201
|
const extensionId = source?.extensionId ?? constants_1.EXTENSION_ID;
|
|
192
202
|
this._onDidMakeChatMLRequest.fire({
|
|
@@ -200,7 +210,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
200
210
|
pendingLoggedChatRequest?.markTimeToFirstToken(timeToFirstToken);
|
|
201
211
|
switch (response.type) {
|
|
202
212
|
case fetch_2.FetchResponseKind.Success: {
|
|
203
|
-
const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, actualFetcher);
|
|
213
|
+
const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, actualFetcher, actualBytesReceived);
|
|
204
214
|
// Handle FilteredRetry case with augmented messages
|
|
205
215
|
if (result.type === commonTypes_1.ChatFetchResponseType.FilteredRetry) {
|
|
206
216
|
if (opts.enableRetryOnFilter) {
|
|
@@ -230,6 +240,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
230
240
|
userInitiatedRequest: false, // do not mark the retry as user initiated
|
|
231
241
|
telemetryProperties: { ...telemetryProperties, retryAfterFilterCategory: result.category ?? 'uncategorized' },
|
|
232
242
|
enableRetryOnFilter: false,
|
|
243
|
+
canRetryOnceWithoutRollback: false,
|
|
233
244
|
enableRetryOnError,
|
|
234
245
|
}, token);
|
|
235
246
|
pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
|
|
@@ -256,7 +267,6 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
256
267
|
model: chatEndpoint.model,
|
|
257
268
|
apiType: chatEndpoint.apiType,
|
|
258
269
|
associatedRequestId: telemetryProperties.associatedRequestId,
|
|
259
|
-
retryAfterErrorCategory: telemetryProperties.retryAfterErrorCategory,
|
|
260
270
|
retryAfterError: telemetryProperties.retryAfterError,
|
|
261
271
|
retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
|
|
262
272
|
connectivityTestError: telemetryProperties.connectivityTestError,
|
|
@@ -269,16 +279,46 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
269
279
|
tokenCountMax: maxResponseTokens,
|
|
270
280
|
timeToFirstToken,
|
|
271
281
|
timeToFirstTokenEmitted: (baseTelemetry && streamRecorder.firstTokenEmittedTime) ? streamRecorder.firstTokenEmittedTime - baseTelemetry.issuedTime : -1,
|
|
272
|
-
timeToCancelled:
|
|
282
|
+
timeToCancelled: Date.now() - baseTelemetry.issuedTime,
|
|
273
283
|
isVisionRequest: this.filterImageMessages(messages) ? 1 : -1,
|
|
274
284
|
isBYOK: (0, openAIEndpoint_1.isBYOKModel)(chatEndpoint),
|
|
275
|
-
isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint)
|
|
285
|
+
isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint),
|
|
286
|
+
bytesReceived: actualBytesReceived,
|
|
287
|
+
issuedTime: baseTelemetry.issuedTime,
|
|
276
288
|
});
|
|
277
289
|
pendingLoggedChatRequest?.resolveWithCancelation();
|
|
278
|
-
return this.processCanceledResponse(response, ourRequestId);
|
|
290
|
+
return this.processCanceledResponse(response, ourRequestId, streamRecorder, telemetryProperties);
|
|
279
291
|
case fetch_2.FetchResponseKind.Failed: {
|
|
280
292
|
const processed = this.processFailedResponse(response, ourRequestId);
|
|
281
|
-
|
|
293
|
+
// Retry on server errors based on configured status codes
|
|
294
|
+
const retryServerErrorStatusCodes = this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.RetryServerErrorStatusCodes, this._experimentationService);
|
|
295
|
+
const statusCodesToRetry = retryServerErrorStatusCodes
|
|
296
|
+
.split(',')
|
|
297
|
+
.map(s => parseInt(s.trim(), 10));
|
|
298
|
+
if (enableRetryOnError && actualStatusCode !== undefined && statusCodesToRetry.includes(actualStatusCode)) {
|
|
299
|
+
const { retryResult } = await this._retryAfterError({
|
|
300
|
+
opts,
|
|
301
|
+
processed,
|
|
302
|
+
telemetryProperties,
|
|
303
|
+
requestBody,
|
|
304
|
+
tokenCount,
|
|
305
|
+
maxResponseTokens,
|
|
306
|
+
timeToError: timeToFirstToken,
|
|
307
|
+
actualFetcher,
|
|
308
|
+
bytesReceived: actualBytesReceived,
|
|
309
|
+
baseTelemetry,
|
|
310
|
+
streamRecorder,
|
|
311
|
+
retryReason: 'server_error',
|
|
312
|
+
debugNamePrefix: 'retry-server-error-',
|
|
313
|
+
pendingLoggedChatRequest,
|
|
314
|
+
token,
|
|
315
|
+
usernameToScrub,
|
|
316
|
+
});
|
|
317
|
+
if (retryResult) {
|
|
318
|
+
return retryResult;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, telemetryProperties, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToFirstToken, this.filterImageMessages(messages), actualFetcher, actualBytesReceived, baseTelemetry.issuedTime);
|
|
282
322
|
pendingLoggedChatRequest?.resolve(processed);
|
|
283
323
|
return processed;
|
|
284
324
|
}
|
|
@@ -290,49 +330,31 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
290
330
|
actualFetcher = err.fetcherId;
|
|
291
331
|
}
|
|
292
332
|
const processed = this.processError(err, ourRequestId, err.gitHubRequestId, usernameToScrub);
|
|
293
|
-
let connectivityTestError = telemetryProperties.connectivityTestError;
|
|
294
|
-
let connectivityTestErrorGitHubRequestId = telemetryProperties.connectivityTestErrorGitHubRequestId;
|
|
295
333
|
if (processed.type === commonTypes_1.ChatFetchResponseType.NetworkError && enableRetryOnError) {
|
|
296
|
-
// Keep existing handling of net::ERR_NETWORK_CHANGED: https://github.com/microsoft/vscode/issues/260297
|
|
297
|
-
const isNetworkChangedError = ['darwin', 'linux'].includes(process.platform) && processed.reason.indexOf('net::ERR_NETWORK_CHANGED') !== -1;
|
|
298
334
|
const isRetryNetworkErrorEnabled = this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.RetryNetworkErrors, this._experimentationService);
|
|
299
|
-
if (
|
|
300
|
-
const
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
...telemetryProperties,
|
|
320
|
-
retryAfterErrorCategory: processed.reasonDetail || processed.reason,
|
|
321
|
-
retryAfterError: processed.reasonDetail || processed.reason,
|
|
322
|
-
retryAfterErrorGitHubRequestId: processed.serverRequestId,
|
|
323
|
-
connectivityTestError,
|
|
324
|
-
connectivityTestErrorGitHubRequestId,
|
|
325
|
-
},
|
|
326
|
-
enableRetryOnFilter: opts.enableRetryOnFilter,
|
|
327
|
-
enableRetryOnError: false,
|
|
328
|
-
useFetcher,
|
|
329
|
-
}, token);
|
|
330
|
-
pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
|
|
335
|
+
if (isRetryNetworkErrorEnabled) {
|
|
336
|
+
const { retryResult, connectivityTestError, connectivityTestErrorGitHubRequestId } = await this._retryAfterError({
|
|
337
|
+
opts,
|
|
338
|
+
processed,
|
|
339
|
+
telemetryProperties,
|
|
340
|
+
requestBody,
|
|
341
|
+
tokenCount,
|
|
342
|
+
maxResponseTokens,
|
|
343
|
+
timeToError,
|
|
344
|
+
actualFetcher,
|
|
345
|
+
bytesReceived: err.bytesReceived,
|
|
346
|
+
baseTelemetry,
|
|
347
|
+
streamRecorder,
|
|
348
|
+
retryReason: 'network_error',
|
|
349
|
+
debugNamePrefix: 'retry-error-',
|
|
350
|
+
pendingLoggedChatRequest,
|
|
351
|
+
token,
|
|
352
|
+
usernameToScrub,
|
|
353
|
+
});
|
|
354
|
+
if (retryResult) {
|
|
331
355
|
return retryResult;
|
|
332
356
|
}
|
|
333
|
-
|
|
334
|
-
this._logService.info(`Not retrying chat request as network connectivity could not be re-established.`);
|
|
335
|
-
}
|
|
357
|
+
telemetryProperties = { ...telemetryProperties, connectivityTestError, connectivityTestErrorGitHubRequestId };
|
|
336
358
|
}
|
|
337
359
|
}
|
|
338
360
|
if (processed.type === commonTypes_1.ChatFetchResponseType.Canceled) {
|
|
@@ -342,11 +364,10 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
342
364
|
model: chatEndpoint.model,
|
|
343
365
|
apiType: chatEndpoint.apiType,
|
|
344
366
|
associatedRequestId: telemetryProperties.associatedRequestId,
|
|
345
|
-
retryAfterErrorCategory: telemetryProperties.retryAfterErrorCategory,
|
|
346
367
|
retryAfterError: telemetryProperties.retryAfterError,
|
|
347
368
|
retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
|
|
348
|
-
connectivityTestError,
|
|
349
|
-
connectivityTestErrorGitHubRequestId,
|
|
369
|
+
connectivityTestError: telemetryProperties.connectivityTestError,
|
|
370
|
+
connectivityTestErrorGitHubRequestId: telemetryProperties.connectivityTestErrorGitHubRequestId,
|
|
350
371
|
retryAfterFilterCategory: telemetryProperties.retryAfterFilterCategory,
|
|
351
372
|
fetcher: actualFetcher,
|
|
352
373
|
}, {
|
|
@@ -357,11 +378,13 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
357
378
|
timeToCancelled: timeToError,
|
|
358
379
|
isVisionRequest: this.filterImageMessages(messages) ? 1 : -1,
|
|
359
380
|
isBYOK: (0, openAIEndpoint_1.isBYOKModel)(chatEndpoint),
|
|
360
|
-
isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint)
|
|
381
|
+
isAuto: (0, autoChatEndpoint_1.isAutoModel)(chatEndpoint),
|
|
382
|
+
bytesReceived: err.bytesReceived,
|
|
383
|
+
issuedTime: baseTelemetry.issuedTime,
|
|
361
384
|
});
|
|
362
385
|
}
|
|
363
386
|
else {
|
|
364
|
-
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed,
|
|
387
|
+
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, telemetryProperties, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToError, this.filterImageMessages(messages), actualFetcher, err.bytesReceived, baseTelemetry.issuedTime);
|
|
365
388
|
}
|
|
366
389
|
pendingLoggedChatRequest?.resolve(processed);
|
|
367
390
|
return processed;
|
|
@@ -369,7 +392,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
369
392
|
}
|
|
370
393
|
async _checkNetworkConnectivity(useFetcher) {
|
|
371
394
|
// Ping CAPI to check network connectivity before retrying
|
|
372
|
-
const delays =
|
|
395
|
+
const delays = this.connectivityCheckDelays;
|
|
373
396
|
let connectivityTestError = undefined;
|
|
374
397
|
let connectivityTestErrorGitHubRequestId = undefined;
|
|
375
398
|
for (const delay of delays) {
|
|
@@ -421,7 +444,39 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
421
444
|
}
|
|
422
445
|
return authHeaders;
|
|
423
446
|
}
|
|
424
|
-
async
|
|
447
|
+
async _retryAfterError(params) {
|
|
448
|
+
const { opts, processed, telemetryProperties, requestBody, tokenCount, maxResponseTokens, timeToError, actualFetcher, bytesReceived, baseTelemetry, streamRecorder, retryReason, debugNamePrefix, pendingLoggedChatRequest, token, usernameToScrub, } = params;
|
|
449
|
+
// net::ERR_NETWORK_CHANGED: https://github.com/microsoft/vscode/issues/260297
|
|
450
|
+
const isNetworkChangedError = ['darwin', 'linux'].includes(process.platform) && processed.reason.indexOf('net::ERR_NETWORK_CHANGED') !== -1;
|
|
451
|
+
const useFetcher = isNetworkChangedError ? 'node-fetch' : opts.useFetcher;
|
|
452
|
+
this._logService.info(`Retrying chat request with ${useFetcher || 'default'} fetcher after: ${processed.reasonDetail || processed.reason}`);
|
|
453
|
+
const connectivity = await this._checkNetworkConnectivity(useFetcher);
|
|
454
|
+
const connectivityTestError = connectivity.connectivityTestError ? this.scrubErrorDetail(connectivity.connectivityTestError, usernameToScrub) : undefined;
|
|
455
|
+
const connectivityTestErrorGitHubRequestId = connectivity.connectivityTestErrorGitHubRequestId;
|
|
456
|
+
if (!connectivity.retryRequest) {
|
|
457
|
+
this._logService.info(`Not retrying chat request as network connectivity could not be re-established.`);
|
|
458
|
+
return { connectivityTestError, connectivityTestErrorGitHubRequestId };
|
|
459
|
+
}
|
|
460
|
+
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, processed, telemetryProperties, opts.endpoint, requestBody, tokenCount, maxResponseTokens, timeToError, this.filterImageMessages(opts.messages), actualFetcher, bytesReceived, baseTelemetry.issuedTime, true);
|
|
461
|
+
streamRecorder.callback('', 0, { text: '', retryReason });
|
|
462
|
+
const retryResult = await this.fetchMany({
|
|
463
|
+
...opts,
|
|
464
|
+
debugName: debugNamePrefix + opts.debugName,
|
|
465
|
+
userInitiatedRequest: false, // do not mark the retry as user initiated
|
|
466
|
+
telemetryProperties: {
|
|
467
|
+
...telemetryProperties,
|
|
468
|
+
retryAfterError: processed.reasonDetail || processed.reason,
|
|
469
|
+
retryAfterErrorGitHubRequestId: processed.serverRequestId,
|
|
470
|
+
connectivityTestError,
|
|
471
|
+
connectivityTestErrorGitHubRequestId,
|
|
472
|
+
},
|
|
473
|
+
enableRetryOnError: false,
|
|
474
|
+
useFetcher,
|
|
475
|
+
}, token);
|
|
476
|
+
pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
|
|
477
|
+
return { retryResult, connectivityTestError, connectivityTestErrorGitHubRequestId };
|
|
478
|
+
}
|
|
479
|
+
async _fetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
|
|
425
480
|
if (cancellationToken.isCancellationRequested) {
|
|
426
481
|
return { result: { type: fetch_2.FetchResponseKind.Canceled, reason: 'before fetch request' } };
|
|
427
482
|
}
|
|
@@ -445,13 +500,12 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
445
500
|
}
|
|
446
501
|
// Generate unique ID to link input and output messages
|
|
447
502
|
const modelCallId = (0, uuid_1.generateUuid)();
|
|
448
|
-
const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher);
|
|
503
|
+
const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher, canRetryOnce);
|
|
449
504
|
if (cancellationToken.isCancellationRequested) {
|
|
450
|
-
const body = await response.body();
|
|
451
505
|
try {
|
|
452
506
|
// Destroy the stream so that the server is hopefully notified we don't want any more data
|
|
453
507
|
// and can cancel/forget about the request itself.
|
|
454
|
-
body.destroy();
|
|
508
|
+
await response.body.destroy();
|
|
455
509
|
}
|
|
456
510
|
catch (e) {
|
|
457
511
|
this._logService.error(e, `Error destroying stream`);
|
|
@@ -459,7 +513,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
459
513
|
}
|
|
460
514
|
return {
|
|
461
515
|
result: { type: fetch_2.FetchResponseKind.Canceled, reason: 'after fetch request' },
|
|
462
|
-
fetcher: response.fetcher
|
|
516
|
+
fetcher: response.fetcher,
|
|
517
|
+
bytesReceived: response.bytesReceived
|
|
463
518
|
};
|
|
464
519
|
}
|
|
465
520
|
if (response.status === 200 && this._authenticationService.copilotToken?.isFreeUser && this._authenticationService.copilotToken?.isChatQuotaExceeded) {
|
|
@@ -470,7 +525,9 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
470
525
|
this._logService.info('Request ID for failed request: ' + ourRequestId);
|
|
471
526
|
return {
|
|
472
527
|
result: await this._handleError(telemetryData, response, ourRequestId),
|
|
473
|
-
fetcher: response.fetcher
|
|
528
|
+
fetcher: response.fetcher,
|
|
529
|
+
bytesReceived: response.bytesReceived,
|
|
530
|
+
statusCode: response.status
|
|
474
531
|
};
|
|
475
532
|
}
|
|
476
533
|
// Extend baseTelemetryData with modelCallId for output messages
|
|
@@ -488,6 +545,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
488
545
|
catch (err) {
|
|
489
546
|
err.fetcherId = response.fetcher;
|
|
490
547
|
err.gitHubRequestId = gitHubRequestId;
|
|
548
|
+
err.bytesReceived = response.bytesReceived;
|
|
491
549
|
throw err;
|
|
492
550
|
}
|
|
493
551
|
});
|
|
@@ -495,6 +553,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
495
553
|
catch (err) {
|
|
496
554
|
err.fetcherId = response.fetcher;
|
|
497
555
|
err.gitHubRequestId = gitHubRequestId;
|
|
556
|
+
err.bytesReceived = response.bytesReceived;
|
|
498
557
|
throw err;
|
|
499
558
|
}
|
|
500
559
|
// CAPI will return us a Copilot Edits Session Header which is our token to using the speculative decoding endpoint
|
|
@@ -508,10 +567,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
508
567
|
type: fetch_2.FetchResponseKind.Success,
|
|
509
568
|
chatCompletions,
|
|
510
569
|
},
|
|
511
|
-
fetcher: response.fetcher
|
|
570
|
+
fetcher: response.fetcher,
|
|
571
|
+
bytesReceived: response.bytesReceived
|
|
512
572
|
};
|
|
513
573
|
}
|
|
514
|
-
async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher) {
|
|
574
|
+
async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
|
|
515
575
|
// If request contains an image, we include this header.
|
|
516
576
|
const additionalHeaders = {
|
|
517
577
|
'X-Interaction-Id': this._interactionService.interactionId,
|
|
@@ -542,7 +602,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
542
602
|
const requestStart = Date.now();
|
|
543
603
|
const intent = locationToIntent(location);
|
|
544
604
|
// Wrap the Promise with success/error callbacks so we can log/measure it
|
|
545
|
-
return (0, networking_1.postRequest)(this._fetcherService, this._telemetryService, this._capiClientService, chatEndpoint, secretKey, await (0, crypto_1.createRequestHMAC)(process.env.HMAC_SECRET), intent, ourRequestId, request, additionalHeaders, cancellationToken, useFetcher).then(response => {
|
|
605
|
+
return (0, networking_1.postRequest)(this._fetcherService, this._telemetryService, this._capiClientService, chatEndpoint, secretKey, await (0, crypto_1.createRequestHMAC)(process.env.HMAC_SECRET), intent, ourRequestId, request, additionalHeaders, cancellationToken, useFetcher, canRetryOnce).then(response => {
|
|
546
606
|
const apim = response.headers.get('apim-request-id');
|
|
547
607
|
if (apim) {
|
|
548
608
|
this._logService.debug(`APIM request id: ${apim}`);
|
|
@@ -553,7 +613,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
553
613
|
}
|
|
554
614
|
// This ID is hopefully the one the same as ourRequestId, but it is not guaranteed.
|
|
555
615
|
// If they are different then we will override the original one we set in telemetryData above.
|
|
556
|
-
const modelRequestId = (0, fetch_1.getRequestId)(response
|
|
616
|
+
const modelRequestId = (0, fetch_1.getRequestId)(response.headers);
|
|
557
617
|
telemetryData.extendWithRequestId(modelRequestId);
|
|
558
618
|
// TODO: Add response length (requires parsing)
|
|
559
619
|
const totalTimeMs = Date.now() - requestStart;
|
|
@@ -584,7 +644,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
584
644
|
});
|
|
585
645
|
}
|
|
586
646
|
async _handleError(telemetryData, response, requestId) {
|
|
587
|
-
const modelRequestIdObj = (0, fetch_1.getRequestId)(response
|
|
647
|
+
const modelRequestIdObj = (0, fetch_1.getRequestId)(response.headers);
|
|
588
648
|
requestId = modelRequestIdObj.headerRequestId || requestId;
|
|
589
649
|
modelRequestIdObj.headerRequestId = requestId;
|
|
590
650
|
telemetryData.properties.error = `Response status was ${response.status}`;
|
|
@@ -643,7 +703,10 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
643
703
|
if (response.status === 402) {
|
|
644
704
|
// When we receive a 402, we have exceed a quota
|
|
645
705
|
// This is stored on the token so let's refresh it
|
|
646
|
-
this._authenticationService.
|
|
706
|
+
if (!this._authenticationService.copilotToken?.isChatQuotaExceeded) {
|
|
707
|
+
this._authenticationService.resetCopilotToken(response.status);
|
|
708
|
+
await this._authenticationService.getCopilotToken();
|
|
709
|
+
}
|
|
647
710
|
const retryAfter = response.headers.get('retry-after');
|
|
648
711
|
const convertToDate = (retryAfterString) => {
|
|
649
712
|
if (!retryAfterString) {
|
|
@@ -783,7 +846,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
783
846
|
reason: `Request Failed: ${response.status} ${text}`
|
|
784
847
|
};
|
|
785
848
|
}
|
|
786
|
-
async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, fetcher) {
|
|
849
|
+
async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, fetcher, bytesReceived) {
|
|
787
850
|
const completions = [];
|
|
788
851
|
for await (const chatCompletion of response.chatCompletions) {
|
|
789
852
|
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendSuccessTelemetry(this._telemetryService, {
|
|
@@ -798,6 +861,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
798
861
|
timeToFirstTokenEmitted: (baseTelemetry && streamRecorder.firstTokenEmittedTime) ? streamRecorder.firstTokenEmittedTime - baseTelemetry.issuedTime : -1,
|
|
799
862
|
hasImageMessages: this.filterImageMessages(messages),
|
|
800
863
|
fetcher,
|
|
864
|
+
bytesReceived,
|
|
801
865
|
});
|
|
802
866
|
if (!this.isRepetitive(chatCompletion, baseTelemetry?.properties)) {
|
|
803
867
|
completions.push(chatCompletion);
|
|
@@ -885,7 +949,62 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
885
949
|
}
|
|
886
950
|
return hasRepetition;
|
|
887
951
|
}
|
|
888
|
-
|
|
952
|
+
/**
|
|
953
|
+
* Check for repetition in partial response deltas from a cancelled request.
|
|
954
|
+
*
|
|
955
|
+
* This method performs the same repetition detection as the `isRepetitive` method,
|
|
956
|
+
* but operates on partial response data collected before the request was cancelled.
|
|
957
|
+
*
|
|
958
|
+
* Key differences from completed requests:
|
|
959
|
+
* - Text is reconstructed from delta.text values instead of message.content
|
|
960
|
+
* - Tokens are approximated by splitting text on whitespace instead of using
|
|
961
|
+
* the actual token array (which is only available in completed responses)
|
|
962
|
+
* - Enhanced telemetry won't include RequestId fields since we only have the
|
|
963
|
+
* headerRequestId string, not the full RequestId object
|
|
964
|
+
* - The finishReason is marked as 'canceled' to distinguish from server-generated
|
|
965
|
+
* finish reasons
|
|
966
|
+
*/
|
|
967
|
+
checkRepetitionInDeltas(deltas, requestId, telemetryProperties) {
|
|
968
|
+
// Reconstruct the text content from deltas (filter out null, undefined, and empty text values)
|
|
969
|
+
const textContent = deltas.filter(delta => delta.text?.length > 0).map(delta => delta.text).join('');
|
|
970
|
+
// Early exit if no content
|
|
971
|
+
if (!textContent || textContent.trim().length === 0) {
|
|
972
|
+
return;
|
|
973
|
+
}
|
|
974
|
+
// For cancelled requests, we don't have the actual token array (only available in ChatCompletion),
|
|
975
|
+
// so we approximate by splitting text content on whitespace. This is less precise than actual
|
|
976
|
+
// tokenization but sufficient for detecting obvious repetition patterns.
|
|
977
|
+
const tokens = textContent.split(/\s+/).filter(t => t.length > 0);
|
|
978
|
+
// Check for line repetition
|
|
979
|
+
const lineRepetitionStats = (0, anomalyDetection_1.calculateLineRepetitionStats)(textContent);
|
|
980
|
+
// Check for token-level repetition
|
|
981
|
+
const hasRepetition = (0, anomalyDetection_1.isRepetitive)(tokens);
|
|
982
|
+
// Send telemetry if repetition is detected
|
|
983
|
+
if (hasRepetition) {
|
|
984
|
+
const telemetryData = telemetryData_1.TelemetryData.createAndMarkAsIssued();
|
|
985
|
+
const extended = telemetryData.extendedBy(telemetryProperties);
|
|
986
|
+
// Note: For cancelled requests, we don't have a full RequestId object,
|
|
987
|
+
// so we can't use extendWithRequestId like the non-cancelled path does.
|
|
988
|
+
// This means enhanced telemetry for cancelled requests won't include
|
|
989
|
+
// completionId, created, deploymentId, or serverExperiments fields.
|
|
990
|
+
this._telemetryService.sendEnhancedGHTelemetryEvent('conversation.repetition.detected', extended.properties, extended.measurements);
|
|
991
|
+
}
|
|
992
|
+
if (lineRepetitionStats.numberOfRepetitions >= 10) {
|
|
993
|
+
this._telemetryService.sendMSFTTelemetryEvent('conversation.repetition.detected', {
|
|
994
|
+
requestId: requestId,
|
|
995
|
+
finishReason: 'canceled', // Client-side finish reason to distinguish from server-generated reasons
|
|
996
|
+
}, {
|
|
997
|
+
numberOfRepetitions: lineRepetitionStats.numberOfRepetitions,
|
|
998
|
+
lengthOfLine: lineRepetitionStats.mostRepeatedLine.length,
|
|
999
|
+
totalLines: lineRepetitionStats.totalLines
|
|
1000
|
+
});
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
processCanceledResponse(response, requestId, streamRecorder, telemetryProperties) {
|
|
1004
|
+
// Check for repetition in the partial response before cancellation
|
|
1005
|
+
if (streamRecorder && streamRecorder.deltas.length > 0) {
|
|
1006
|
+
this.checkRepetitionInDeltas(streamRecorder.deltas, requestId, telemetryProperties);
|
|
1007
|
+
}
|
|
889
1008
|
return {
|
|
890
1009
|
type: commonTypes_1.ChatFetchResponseType.Canceled,
|
|
891
1010
|
reason: response.reason,
|
|
@@ -1071,6 +1190,8 @@ function locationToIntent(location) {
|
|
|
1071
1190
|
return 'conversation-agent';
|
|
1072
1191
|
case commonTypes_1.ChatLocation.ResponsesProxy:
|
|
1073
1192
|
return 'responses-proxy';
|
|
1193
|
+
case commonTypes_1.ChatLocation.MessagesProxy:
|
|
1194
|
+
return 'messages-proxy';
|
|
1074
1195
|
}
|
|
1075
1196
|
}
|
|
1076
1197
|
//# sourceMappingURL=chatMLFetcher.js.map
|