@vscode/chat-lib 0.4.1-0 → 0.4.1-10
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/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js +1 -1
- package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/delay.d.ts +3 -1
- package/dist/src/_internal/extension/inlineEdits/common/delay.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/delay.js +6 -0
- package/dist/src/_internal/extension/inlineEdits/common/delay.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/editRebase.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/editRebase.js +2 -35
- package/dist/src/_internal/extension/inlineEdits/common/editRebase.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +6 -0
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +19 -35
- package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts +1 -0
- package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +12 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +150 -97
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts +7 -0
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +18 -3
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts +2 -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/power/common/powerService.d.ts +11 -0
- package/dist/src/_internal/extension/power/common/powerService.d.ts.map +1 -1
- package/dist/src/_internal/extension/power/common/powerService.js +5 -0
- package/dist/src/_internal/extension/power/common/powerService.js.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +11 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +235 -56
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts +26 -3
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js +27 -9
- package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts +6 -1
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js +3 -1
- package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/lintErrors.js +2 -1
- package/dist/src/_internal/extension/xtab/common/lintErrors.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts +6 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js +43 -6
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts +22 -0
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js +116 -17
- package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/similarFilesContextService.d.ts +10 -0
- package/dist/src/_internal/extension/xtab/common/similarFilesContextService.d.ts.map +1 -0
- package/dist/src/_internal/extension/xtab/common/similarFilesContextService.js +10 -0
- package/dist/src/_internal/extension/xtab/common/similarFilesContextService.js.map +1 -0
- package/dist/src/_internal/extension/xtab/common/tags.d.ts +1 -0
- package/dist/src/_internal/extension/xtab/common/tags.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/tags.js +1 -0
- package/dist/src/_internal/extension/xtab/common/tags.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js +1 -0
- package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +3 -2
- package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +4 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js +91 -20
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
- package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts +4 -0
- package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts.map +1 -1
- package/dist/src/_internal/platform/authentication/common/copilotToken.js +6 -0
- package/dist/src/_internal/platform/authentication/common/copilotToken.js.map +1 -1
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js +1 -1
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +29 -24
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.js +32 -19
- package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +2 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +17 -7
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +1 -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/node/autoChatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js +1 -0
- package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +1 -0
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +4 -3
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts +6 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js +48 -15
- package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js +1 -0
- package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts +1 -0
- package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js +20 -2
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.d.ts +2 -1
- package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.d.ts +8 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.d.ts.map +1 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.js +17 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.js.map +1 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +44 -0
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +71 -2
- package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js +5 -5
- package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +15 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +22 -1
- 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 +9 -44
- package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js.map +1 -1
- package/dist/src/_internal/platform/nesFetch/common/responseStream.js +2 -35
- package/dist/src/_internal/platform/nesFetch/common/responseStream.js.map +1 -1
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +3 -36
- package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts +11 -16
- package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/anthropic.js +33 -38
- package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +43 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.js +29 -4
- package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.d.ts +40 -4
- package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.js +21 -6
- package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts +71 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts.map +1 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js +308 -0
- package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js.map +1 -0
- package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.js +4 -37
- package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.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 +3 -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/platform/telemetry/common/telemetry.d.ts +9 -1
- package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/telemetry.js +33 -15
- package/dist/src/_internal/platform/telemetry/common/telemetry.js.map +1 -1
- package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.d.ts +1 -1
- package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.d.ts.map +1 -1
- package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.js +3 -2
- package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.js.map +1 -1
- package/dist/src/_internal/util/common/errors.d.ts +4 -2
- package/dist/src/_internal/util/common/errors.d.ts.map +1 -1
- package/dist/src/_internal/util/common/errors.js +16 -12
- package/dist/src/_internal/util/common/errors.js.map +1 -1
- package/dist/src/_internal/util/common/result.js +4 -37
- package/dist/src/_internal/util/common/result.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +14 -2
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.js +17 -3
- package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +1 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +10 -0
- package/dist/src/main.js.map +1 -1
- package/dist/src/package.json +221 -294
- package/package.json +2 -2
|
@@ -12,12 +12,14 @@ import { ILogService } from '../../../platform/log/common/logService';
|
|
|
12
12
|
import { OptionalChatRequestParams } from '../../../platform/networking/common/fetch';
|
|
13
13
|
import { IFetcherService } from '../../../platform/networking/common/fetcherService';
|
|
14
14
|
import { IChatEndpoint } from '../../../platform/networking/common/networking';
|
|
15
|
+
import { IChatWebSocketManager } from '../../../platform/networking/node/chatWebSocketManager';
|
|
15
16
|
import { IRequestLogger } from '../../../platform/requestLogger/node/requestLogger';
|
|
16
17
|
import { IExperimentationService } from '../../../platform/telemetry/common/nullExperimentationService';
|
|
17
18
|
import { ITelemetryService } from '../../../platform/telemetry/common/telemetry';
|
|
18
19
|
import { TelemetryData } from '../../../platform/telemetry/common/telemetryData';
|
|
19
20
|
import { Emitter } from '../../../util/vs/base/common/event';
|
|
20
21
|
import { Disposable } from '../../../util/vs/base/common/lifecycle';
|
|
22
|
+
import { IInstantiationService } from '../../../util/vs/platform/instantiation/common/instantiation';
|
|
21
23
|
import { IPowerService } from '../../power/common/powerService';
|
|
22
24
|
export interface IMadeChatRequestEvent {
|
|
23
25
|
readonly messages: Raw.ChatMessage[];
|
|
@@ -50,12 +52,14 @@ export declare class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
50
52
|
private readonly _configurationService;
|
|
51
53
|
private readonly _experimentationService;
|
|
52
54
|
private readonly _powerService;
|
|
55
|
+
private readonly _instantiationService;
|
|
56
|
+
private readonly _webSocketManager;
|
|
53
57
|
/**
|
|
54
58
|
* Delays (in ms) between connectivity check attempts before retrying a failed request.
|
|
55
59
|
* Configurable for testing purposes.
|
|
56
60
|
*/
|
|
57
61
|
connectivityCheckDelays: number[];
|
|
58
|
-
constructor(_fetcherService: IFetcherService, _telemetryService: ITelemetryService, _requestLogger: IRequestLogger, _logService: ILogService, _authenticationService: IAuthenticationService, _interactionService: IInteractionService, _chatQuotaService: IChatQuotaService, _capiClientService: ICAPIClientService, options: IConversationOptions, _configurationService: IConfigurationService, _experimentationService: IExperimentationService, _powerService: IPowerService);
|
|
62
|
+
constructor(_fetcherService: IFetcherService, _telemetryService: ITelemetryService, _requestLogger: IRequestLogger, _logService: ILogService, _authenticationService: IAuthenticationService, _interactionService: IInteractionService, _chatQuotaService: IChatQuotaService, _capiClientService: ICAPIClientService, options: IConversationOptions, _configurationService: IConfigurationService, _experimentationService: IExperimentationService, _powerService: IPowerService, _instantiationService: IInstantiationService, _webSocketManager: IChatWebSocketManager);
|
|
59
63
|
/**
|
|
60
64
|
* Note: the returned array of strings may be less than `n` (e.g., in case there were errors during streaming)
|
|
61
65
|
*/
|
|
@@ -65,6 +69,12 @@ export declare class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
65
69
|
private _retryAfterError;
|
|
66
70
|
private _fetchAndStreamChat;
|
|
67
71
|
private _doFetchAndStreamChat;
|
|
72
|
+
/**
|
|
73
|
+
* Sends a chat request via a persistent WebSocket connection instead of HTTP POST.
|
|
74
|
+
* Events are the same Responses API streaming events, processed by OpenAIResponsesProcessor.
|
|
75
|
+
*/
|
|
76
|
+
private _doFetchViaWebSocket;
|
|
77
|
+
private _doFetchViaHttp;
|
|
68
78
|
private _fetchWithInstrumentation;
|
|
69
79
|
private _handleError;
|
|
70
80
|
private processSuccessfulResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chatMLFetcher.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/extension/prompt/node/chatMLFetcher.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wDAAwD,CAAC;AAEhG,OAAO,EAAuB,cAAc,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,6CAA6C,CAAC;AAC3H,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAkE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AACtK,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AAEzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AACvF,OAAO,EAA8B,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AAChI,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAGlF,OAAO,EAAiC,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAErG,OAAO,EAAkD,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtI,OAAO,EAAa,eAAe,EAAY,MAAM,oDAAoD,CAAC;AAC1G,OAAO,
|
|
1
|
+
{"version":3,"file":"chatMLFetcher.d.ts","sourceRoot":"","sources":["../../../../../../src/_internal/extension/prompt/node/chatMLFetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,45 +3,12 @@
|
|
|
3
3
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
4
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
-
if (k2 === undefined) k2 = k;
|
|
8
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
-
}
|
|
12
|
-
Object.defineProperty(o, k2, desc);
|
|
13
|
-
}) : (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
o[k2] = m[k];
|
|
16
|
-
}));
|
|
17
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
-
}) : function(o, v) {
|
|
20
|
-
o["default"] = v;
|
|
21
|
-
});
|
|
22
6
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
23
7
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
24
8
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
25
9
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
26
10
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
27
11
|
};
|
|
28
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
-
var ownKeys = function(o) {
|
|
30
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
-
var ar = [];
|
|
32
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
-
return ar;
|
|
34
|
-
};
|
|
35
|
-
return ownKeys(o);
|
|
36
|
-
};
|
|
37
|
-
return function (mod) {
|
|
38
|
-
if (mod && mod.__esModule) return mod;
|
|
39
|
-
var result = {};
|
|
40
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
-
__setModuleDefault(result, mod);
|
|
42
|
-
return result;
|
|
43
|
-
};
|
|
44
|
-
})();
|
|
45
12
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
46
13
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
47
14
|
};
|
|
@@ -68,6 +35,7 @@ const fetcherService_1 = require("../../../platform/networking/common/fetcherSer
|
|
|
68
35
|
const networking_1 = require("../../../platform/networking/common/networking");
|
|
69
36
|
const openai_1 = require("../../../platform/networking/common/openai");
|
|
70
37
|
const chatStream_1 = require("../../../platform/networking/node/chatStream");
|
|
38
|
+
const chatWebSocketManager_1 = require("../../../platform/networking/node/chatWebSocketManager");
|
|
71
39
|
const stream_1 = require("../../../platform/networking/node/stream");
|
|
72
40
|
const fetch_2 = require("../../../platform/openai/node/fetch");
|
|
73
41
|
const requestLogger_1 = require("../../../platform/requestLogger/node/requestLogger");
|
|
@@ -75,14 +43,14 @@ const nullExperimentationService_1 = require("../../../platform/telemetry/common
|
|
|
75
43
|
const telemetry_1 = require("../../../platform/telemetry/common/telemetry");
|
|
76
44
|
const telemetryData_1 = require("../../../platform/telemetry/common/telemetryData");
|
|
77
45
|
const anomalyDetection_1 = require("../../../util/common/anomalyDetection");
|
|
78
|
-
const
|
|
79
|
-
const errorsUtil = __importStar(require("../../../util/common/errors"));
|
|
46
|
+
const errors_1 = require("../../../util/common/errors");
|
|
80
47
|
const async_1 = require("../../../util/vs/base/common/async");
|
|
81
|
-
const
|
|
48
|
+
const errors_2 = require("../../../util/vs/base/common/errors");
|
|
82
49
|
const event_1 = require("../../../util/vs/base/common/event");
|
|
83
50
|
const lifecycle_1 = require("../../../util/vs/base/common/lifecycle");
|
|
84
51
|
const strings_1 = require("../../../util/vs/base/common/strings");
|
|
85
52
|
const uuid_1 = require("../../../util/vs/base/common/uuid");
|
|
53
|
+
const instantiation_1 = require("../../../util/vs/platform/instantiation/common/instantiation");
|
|
86
54
|
const openAIEndpoint_1 = require("../../byok/node/openAIEndpoint");
|
|
87
55
|
const constants_1 = require("../../common/constants");
|
|
88
56
|
const powerService_1 = require("../../power/common/powerService");
|
|
@@ -116,7 +84,7 @@ class AbstractChatMLFetcher extends lifecycle_1.Disposable {
|
|
|
116
84
|
}
|
|
117
85
|
exports.AbstractChatMLFetcher = AbstractChatMLFetcher;
|
|
118
86
|
let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
119
|
-
constructor(_fetcherService, _telemetryService, _requestLogger, _logService, _authenticationService, _interactionService, _chatQuotaService, _capiClientService, options, _configurationService, _experimentationService, _powerService) {
|
|
87
|
+
constructor(_fetcherService, _telemetryService, _requestLogger, _logService, _authenticationService, _interactionService, _chatQuotaService, _capiClientService, options, _configurationService, _experimentationService, _powerService, _instantiationService, _webSocketManager) {
|
|
120
88
|
super(options);
|
|
121
89
|
this._fetcherService = _fetcherService;
|
|
122
90
|
this._telemetryService = _telemetryService;
|
|
@@ -129,6 +97,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
129
97
|
this._configurationService = _configurationService;
|
|
130
98
|
this._experimentationService = _experimentationService;
|
|
131
99
|
this._powerService = _powerService;
|
|
100
|
+
this._instantiationService = _instantiationService;
|
|
101
|
+
this._webSocketManager = _webSocketManager;
|
|
132
102
|
/**
|
|
133
103
|
* Delays (in ms) between connectivity check attempts before retrying a failed request.
|
|
134
104
|
* Configurable for testing purposes.
|
|
@@ -139,13 +109,20 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
139
109
|
* Note: the returned array of strings may be less than `n` (e.g., in case there were errors during streaming)
|
|
140
110
|
*/
|
|
141
111
|
async fetchMany(opts, token) {
|
|
142
|
-
let { debugName, endpoint: chatEndpoint, finishedCb, location, messages, requestOptions, source, telemetryProperties, userInitiatedRequest } = opts;
|
|
112
|
+
let { debugName, endpoint: chatEndpoint, finishedCb, location, messages, requestOptions, source, telemetryProperties, userInitiatedRequest, requestKindOptions, conversationId, turnId } = opts;
|
|
143
113
|
if (!telemetryProperties) {
|
|
144
114
|
telemetryProperties = {};
|
|
145
115
|
}
|
|
146
116
|
if (!telemetryProperties.messageSource) {
|
|
147
117
|
telemetryProperties.messageSource = debugName;
|
|
148
118
|
}
|
|
119
|
+
// When WebSocket is enabled, default to using the stateful marker so
|
|
120
|
+
// only delta history is sent once the server has context from this turn.
|
|
121
|
+
const useWebSocket = !!(turnId && conversationId
|
|
122
|
+
&& chatEndpoint.apiType === 'responses'
|
|
123
|
+
&& this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.ResponsesApiWebSocketEnabled, this._experimentationService));
|
|
124
|
+
const transport = useWebSocket ? 'websocket' : 'http';
|
|
125
|
+
const ignoreStatefulMarker = useWebSocket ? (opts.ignoreStatefulMarker ?? false) : opts.ignoreStatefulMarker;
|
|
149
126
|
// TODO @lramos15 telemetry should not drive request ids
|
|
150
127
|
const ourRequestId = telemetryProperties.requestId ?? telemetryProperties.messageId ?? (0, uuid_1.generateUuid)();
|
|
151
128
|
const maxResponseTokens = chatEndpoint.maxOutputTokens;
|
|
@@ -159,6 +136,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
159
136
|
const postOptions = this.preparePostOptions(requestOptions);
|
|
160
137
|
const requestBody = chatEndpoint.createRequestBody({
|
|
161
138
|
...opts,
|
|
139
|
+
ignoreStatefulMarker,
|
|
162
140
|
requestId: ourRequestId,
|
|
163
141
|
postOptions
|
|
164
142
|
});
|
|
@@ -173,7 +151,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
173
151
|
ourRequestId,
|
|
174
152
|
location: opts.location,
|
|
175
153
|
body: requestBody,
|
|
176
|
-
ignoreStatefulMarker
|
|
154
|
+
ignoreStatefulMarker,
|
|
177
155
|
isConversationRequest: opts.isConversationRequest,
|
|
178
156
|
customMetadata: opts.customMetadata
|
|
179
157
|
});
|
|
@@ -185,6 +163,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
185
163
|
let actualFetcher;
|
|
186
164
|
let actualBytesReceived;
|
|
187
165
|
let actualStatusCode;
|
|
166
|
+
let suspendEventSeen;
|
|
167
|
+
let resumeEventSeen;
|
|
188
168
|
try {
|
|
189
169
|
let response;
|
|
190
170
|
const payloadValidationResult = isValidChatPayload(opts.messages, postOptions, chatEndpoint, this._configurationService, this._experimentationService);
|
|
@@ -199,11 +179,13 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
199
179
|
else {
|
|
200
180
|
const copilotToken = await this._authenticationService.getCopilotToken();
|
|
201
181
|
usernameToScrub = copilotToken.username;
|
|
202
|
-
const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, telemetryProperties, opts.useFetcher, canRetryOnce);
|
|
182
|
+
const fetchResult = await this._fetchAndStreamChat(chatEndpoint, requestBody, baseTelemetry, streamRecorder.callback, requestOptions.secretKey, copilotToken, opts.location, ourRequestId, postOptions.n, token, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, opts.useFetcher, canRetryOnce, requestKindOptions);
|
|
203
183
|
response = fetchResult.result;
|
|
204
184
|
actualFetcher = fetchResult.fetcher;
|
|
205
185
|
actualBytesReceived = fetchResult.bytesReceived;
|
|
206
186
|
actualStatusCode = fetchResult.statusCode;
|
|
187
|
+
suspendEventSeen = fetchResult.suspendEventSeen;
|
|
188
|
+
resumeEventSeen = fetchResult.resumeEventSeen;
|
|
207
189
|
tokenCount = await chatEndpoint.acquireTokenizer().countMessagesTokens(messages);
|
|
208
190
|
const extensionId = source?.extensionId ?? constants_1.EXTENSION_ID;
|
|
209
191
|
this._onDidMakeChatMLRequest.fire({
|
|
@@ -217,7 +199,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
217
199
|
pendingLoggedChatRequest?.markTimeToFirstToken(timeToFirstToken);
|
|
218
200
|
switch (response.type) {
|
|
219
201
|
case fetch_2.FetchResponseKind.Success: {
|
|
220
|
-
const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, actualFetcher, actualBytesReceived);
|
|
202
|
+
const result = await this.processSuccessfulResponse(response, messages, requestBody, ourRequestId, maxResponseTokens, tokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpoint, userInitiatedRequest, transport, actualFetcher, actualBytesReceived, suspendEventSeen, resumeEventSeen);
|
|
221
203
|
// Handle FilteredRetry case with augmented messages
|
|
222
204
|
if (result.type === commonTypes_1.ChatFetchResponseType.FilteredRetry) {
|
|
223
205
|
if (opts.enableRetryOnFilter) {
|
|
@@ -273,6 +255,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
273
255
|
requestId: ourRequestId,
|
|
274
256
|
model: chatEndpoint.model,
|
|
275
257
|
apiType: chatEndpoint.apiType,
|
|
258
|
+
transport,
|
|
276
259
|
associatedRequestId: telemetryProperties.associatedRequestId,
|
|
277
260
|
retryAfterError: telemetryProperties.retryAfterError,
|
|
278
261
|
retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
|
|
@@ -280,6 +263,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
280
263
|
connectivityTestErrorGitHubRequestId: telemetryProperties.connectivityTestErrorGitHubRequestId,
|
|
281
264
|
retryAfterFilterCategory: telemetryProperties.retryAfterFilterCategory,
|
|
282
265
|
fetcher: actualFetcher,
|
|
266
|
+
suspendEventSeen,
|
|
267
|
+
resumeEventSeen,
|
|
283
268
|
}, {
|
|
284
269
|
totalTokenMax: chatEndpoint.modelMaxPromptTokens ?? -1,
|
|
285
270
|
promptTokenCount: tokenCount,
|
|
@@ -311,6 +296,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
311
296
|
tokenCount,
|
|
312
297
|
maxResponseTokens,
|
|
313
298
|
timeToError: timeToFirstToken,
|
|
299
|
+
transport,
|
|
314
300
|
actualFetcher,
|
|
315
301
|
bytesReceived: actualBytesReceived,
|
|
316
302
|
baseTelemetry,
|
|
@@ -320,12 +306,30 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
320
306
|
pendingLoggedChatRequest,
|
|
321
307
|
token,
|
|
322
308
|
usernameToScrub,
|
|
309
|
+
suspendEventSeen,
|
|
310
|
+
resumeEventSeen,
|
|
323
311
|
});
|
|
324
312
|
if (retryResult) {
|
|
325
313
|
return retryResult;
|
|
326
314
|
}
|
|
327
315
|
}
|
|
328
|
-
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService,
|
|
316
|
+
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, {
|
|
317
|
+
processed,
|
|
318
|
+
telemetryProperties,
|
|
319
|
+
chatEndpointInfo: chatEndpoint,
|
|
320
|
+
requestBody,
|
|
321
|
+
tokenCount,
|
|
322
|
+
maxResponseTokens,
|
|
323
|
+
timeToFirstToken,
|
|
324
|
+
isVisionRequest: this.filterImageMessages(messages),
|
|
325
|
+
transport,
|
|
326
|
+
fetcher: actualFetcher,
|
|
327
|
+
bytesReceived: actualBytesReceived,
|
|
328
|
+
issuedTime: baseTelemetry.issuedTime,
|
|
329
|
+
wasRetried: false,
|
|
330
|
+
suspendEventSeen,
|
|
331
|
+
resumeEventSeen,
|
|
332
|
+
});
|
|
329
333
|
pendingLoggedChatRequest?.resolve(processed);
|
|
330
334
|
return processed;
|
|
331
335
|
}
|
|
@@ -336,6 +340,12 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
336
340
|
if (err.fetcherId) {
|
|
337
341
|
actualFetcher = err.fetcherId;
|
|
338
342
|
}
|
|
343
|
+
if (err.suspendEventSeen) {
|
|
344
|
+
suspendEventSeen = true;
|
|
345
|
+
}
|
|
346
|
+
if (err.resumeEventSeen) {
|
|
347
|
+
resumeEventSeen = true;
|
|
348
|
+
}
|
|
339
349
|
const processed = this.processError(err, ourRequestId, err.gitHubRequestId, usernameToScrub);
|
|
340
350
|
if (processed.type === commonTypes_1.ChatFetchResponseType.NetworkError && enableRetryOnError) {
|
|
341
351
|
const isRetryNetworkErrorEnabled = this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.RetryNetworkErrors, this._experimentationService);
|
|
@@ -348,6 +358,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
348
358
|
tokenCount,
|
|
349
359
|
maxResponseTokens,
|
|
350
360
|
timeToError,
|
|
361
|
+
transport,
|
|
351
362
|
actualFetcher,
|
|
352
363
|
bytesReceived: err.bytesReceived,
|
|
353
364
|
baseTelemetry,
|
|
@@ -357,6 +368,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
357
368
|
pendingLoggedChatRequest,
|
|
358
369
|
token,
|
|
359
370
|
usernameToScrub,
|
|
371
|
+
suspendEventSeen,
|
|
372
|
+
resumeEventSeen,
|
|
360
373
|
});
|
|
361
374
|
if (retryResult) {
|
|
362
375
|
return retryResult;
|
|
@@ -370,6 +383,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
370
383
|
requestId: ourRequestId,
|
|
371
384
|
model: chatEndpoint.model,
|
|
372
385
|
apiType: chatEndpoint.apiType,
|
|
386
|
+
transport,
|
|
373
387
|
associatedRequestId: telemetryProperties.associatedRequestId,
|
|
374
388
|
retryAfterError: telemetryProperties.retryAfterError,
|
|
375
389
|
retryAfterErrorGitHubRequestId: telemetryProperties.retryAfterErrorGitHubRequestId,
|
|
@@ -377,6 +391,8 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
377
391
|
connectivityTestErrorGitHubRequestId: telemetryProperties.connectivityTestErrorGitHubRequestId,
|
|
378
392
|
retryAfterFilterCategory: telemetryProperties.retryAfterFilterCategory,
|
|
379
393
|
fetcher: actualFetcher,
|
|
394
|
+
suspendEventSeen,
|
|
395
|
+
resumeEventSeen,
|
|
380
396
|
}, {
|
|
381
397
|
totalTokenMax: chatEndpoint.modelMaxPromptTokens ?? -1,
|
|
382
398
|
promptTokenCount: tokenCount,
|
|
@@ -391,7 +407,23 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
391
407
|
});
|
|
392
408
|
}
|
|
393
409
|
else {
|
|
394
|
-
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService,
|
|
410
|
+
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, {
|
|
411
|
+
processed,
|
|
412
|
+
telemetryProperties,
|
|
413
|
+
chatEndpointInfo: chatEndpoint,
|
|
414
|
+
requestBody,
|
|
415
|
+
tokenCount,
|
|
416
|
+
maxResponseTokens,
|
|
417
|
+
timeToFirstToken: timeToError,
|
|
418
|
+
isVisionRequest: this.filterImageMessages(messages),
|
|
419
|
+
transport,
|
|
420
|
+
fetcher: actualFetcher,
|
|
421
|
+
bytesReceived: err.bytesReceived,
|
|
422
|
+
issuedTime: baseTelemetry.issuedTime,
|
|
423
|
+
wasRetried: false,
|
|
424
|
+
suspendEventSeen,
|
|
425
|
+
resumeEventSeen,
|
|
426
|
+
});
|
|
395
427
|
}
|
|
396
428
|
pendingLoggedChatRequest?.resolve(processed);
|
|
397
429
|
return processed;
|
|
@@ -452,7 +484,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
452
484
|
return authHeaders;
|
|
453
485
|
}
|
|
454
486
|
async _retryAfterError(params) {
|
|
455
|
-
const { opts, processed, telemetryProperties, requestBody, tokenCount, maxResponseTokens, timeToError, actualFetcher, bytesReceived, baseTelemetry, streamRecorder, retryReason, debugNamePrefix, pendingLoggedChatRequest, token, usernameToScrub, } = params;
|
|
487
|
+
const { opts, processed, telemetryProperties, requestBody, tokenCount, maxResponseTokens, timeToError, transport, actualFetcher, bytesReceived, baseTelemetry, streamRecorder, retryReason, debugNamePrefix, pendingLoggedChatRequest, token, usernameToScrub, suspendEventSeen, resumeEventSeen, } = params;
|
|
456
488
|
// net::ERR_NETWORK_CHANGED: https://github.com/microsoft/vscode/issues/260297
|
|
457
489
|
const isNetworkChangedError = ['darwin', 'linux'].includes(process.platform) && processed.reason.indexOf('net::ERR_NETWORK_CHANGED') !== -1;
|
|
458
490
|
// When Electron's network process crashes, all requests through it fail permanently.
|
|
@@ -470,7 +502,23 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
470
502
|
this._logService.info(`Not retrying chat request as network connectivity could not be re-established.`);
|
|
471
503
|
return { connectivityTestError, connectivityTestErrorGitHubRequestId };
|
|
472
504
|
}
|
|
473
|
-
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService,
|
|
505
|
+
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendResponseErrorTelemetry(this._telemetryService, {
|
|
506
|
+
processed,
|
|
507
|
+
telemetryProperties,
|
|
508
|
+
chatEndpointInfo: opts.endpoint,
|
|
509
|
+
requestBody,
|
|
510
|
+
tokenCount,
|
|
511
|
+
maxResponseTokens,
|
|
512
|
+
timeToFirstToken: timeToError,
|
|
513
|
+
isVisionRequest: this.filterImageMessages(opts.messages),
|
|
514
|
+
transport,
|
|
515
|
+
fetcher: actualFetcher,
|
|
516
|
+
bytesReceived,
|
|
517
|
+
issuedTime: baseTelemetry.issuedTime,
|
|
518
|
+
wasRetried: true,
|
|
519
|
+
suspendEventSeen,
|
|
520
|
+
resumeEventSeen,
|
|
521
|
+
});
|
|
474
522
|
streamRecorder.callback('', 0, { text: '', retryReason });
|
|
475
523
|
const retryResult = await this.fetchMany({
|
|
476
524
|
...opts,
|
|
@@ -489,17 +537,39 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
489
537
|
pendingLoggedChatRequest?.resolve(retryResult, streamRecorder.deltas);
|
|
490
538
|
return { retryResult, connectivityTestError, connectivityTestErrorGitHubRequestId };
|
|
491
539
|
}
|
|
492
|
-
async _fetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
|
|
540
|
+
async _fetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
|
|
493
541
|
const isPowerSaveBlockerEnabled = this._configurationService.getExperimentBasedConfig(configurationService_1.ConfigKey.TeamInternal.ChatRequestPowerSaveBlocker, this._experimentationService);
|
|
494
542
|
const blockerHandle = isPowerSaveBlockerEnabled && location !== commonTypes_1.ChatLocation.Other ? this._powerService.acquirePowerSaveBlocker() : undefined;
|
|
543
|
+
let suspendEventSeen = false;
|
|
544
|
+
let resumeEventSeen = false;
|
|
545
|
+
const suspendListener = this._powerService.onDidSuspend(() => {
|
|
546
|
+
suspendEventSeen = true;
|
|
547
|
+
this._logService.info(`System suspended during streaming request ${ourRequestId} (${commonTypes_1.ChatLocation.toString(location)})`);
|
|
548
|
+
});
|
|
549
|
+
const resumeListener = this._powerService.onDidResume(() => {
|
|
550
|
+
resumeEventSeen = true;
|
|
551
|
+
this._logService.info(`System resumed during streaming request ${ourRequestId} (${commonTypes_1.ChatLocation.toString(location)})`);
|
|
552
|
+
});
|
|
495
553
|
try {
|
|
496
|
-
|
|
554
|
+
const fetchResult = await this._doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions);
|
|
555
|
+
return { ...fetchResult, suspendEventSeen: suspendEventSeen || undefined, resumeEventSeen: resumeEventSeen || undefined };
|
|
556
|
+
}
|
|
557
|
+
catch (err) {
|
|
558
|
+
if (suspendEventSeen) {
|
|
559
|
+
err.suspendEventSeen = true;
|
|
560
|
+
}
|
|
561
|
+
if (resumeEventSeen) {
|
|
562
|
+
err.resumeEventSeen = true;
|
|
563
|
+
}
|
|
564
|
+
throw err;
|
|
497
565
|
}
|
|
498
566
|
finally {
|
|
567
|
+
suspendListener.dispose();
|
|
568
|
+
resumeListener.dispose();
|
|
499
569
|
blockerHandle?.dispose();
|
|
500
570
|
}
|
|
501
571
|
}
|
|
502
|
-
async _doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
|
|
572
|
+
async _doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, useWebSocket, turnId, conversationId, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
|
|
503
573
|
if (cancellationToken.isCancellationRequested) {
|
|
504
574
|
return { result: { type: fetch_2.FetchResponseKind.Canceled, reason: 'before fetch request' } };
|
|
505
575
|
}
|
|
@@ -521,9 +591,100 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
521
591
|
}
|
|
522
592
|
};
|
|
523
593
|
}
|
|
594
|
+
// WebSocket path: use persistent WebSocket connection for Responses API endpoints
|
|
595
|
+
if (useWebSocket && turnId && conversationId) {
|
|
596
|
+
return this._doFetchViaWebSocket(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, turnId, conversationId, cancellationToken, telemetryProperties);
|
|
597
|
+
}
|
|
598
|
+
return this._doFetchViaHttp(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions);
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Sends a chat request via a persistent WebSocket connection instead of HTTP POST.
|
|
602
|
+
* Events are the same Responses API streaming events, processed by OpenAIResponsesProcessor.
|
|
603
|
+
*/
|
|
604
|
+
async _doFetchViaWebSocket(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, turnId, conversationId, cancellationToken, telemetryProperties) {
|
|
605
|
+
const connection = await this._webSocketManager.getOrCreateConnection(conversationId, turnId, secretKey);
|
|
606
|
+
// Generate unique ID to link input and output messages
|
|
607
|
+
const modelCallId = (0, uuid_1.generateUuid)();
|
|
608
|
+
const telemetryData = telemetryData_1.TelemetryData.createAndMarkAsIssued({
|
|
609
|
+
endpoint: 'completions',
|
|
610
|
+
engineName: 'chat',
|
|
611
|
+
uiKind: commonTypes_1.ChatLocation.toString(location),
|
|
612
|
+
transport: 'websocket',
|
|
613
|
+
...{ ...telemetryProperties, modelCallId },
|
|
614
|
+
}, {
|
|
615
|
+
maxTokenWindow: chatEndpointInfo.modelMaxPromptTokens
|
|
616
|
+
});
|
|
617
|
+
for (const [key, value] of Object.entries(request)) {
|
|
618
|
+
if (key === 'messages' || key === 'input') {
|
|
619
|
+
continue;
|
|
620
|
+
} // Skip messages (PII)
|
|
621
|
+
telemetryData.properties[`request.option.${key}`] = JSON.stringify(value) ?? 'undefined';
|
|
622
|
+
}
|
|
623
|
+
telemetryData.properties['headerRequestId'] = ourRequestId;
|
|
624
|
+
this._telemetryService.sendGHTelemetryEvent('request.sent', telemetryData.properties, telemetryData.measurements);
|
|
625
|
+
const requestStart = Date.now();
|
|
626
|
+
const handle = connection.sendRequest(request, cancellationToken);
|
|
627
|
+
const extendedBaseTelemetryData = baseTelemetryData.extendedBy({ modelCallId });
|
|
628
|
+
const processor = this._instantiationService.createInstance(responsesApi_1.OpenAIResponsesProcessor, extendedBaseTelemetryData, ourRequestId, '');
|
|
629
|
+
const chatCompletions = new async_1.AsyncIterableObject(async (emitter) => {
|
|
630
|
+
try {
|
|
631
|
+
await new Promise((resolve, reject) => {
|
|
632
|
+
handle.onEvent(event => {
|
|
633
|
+
const completion = processor.push(event, finishedCb);
|
|
634
|
+
if (completion) {
|
|
635
|
+
(0, responsesApi_1.sendCompletionOutputTelemetry)(this._telemetryService, this._logService, completion, extendedBaseTelemetryData);
|
|
636
|
+
emitter.emitOne(completion);
|
|
637
|
+
}
|
|
638
|
+
});
|
|
639
|
+
handle.onError(error => {
|
|
640
|
+
if ((0, errors_2.isCancellationError)(error)) {
|
|
641
|
+
reject(error);
|
|
642
|
+
return;
|
|
643
|
+
}
|
|
644
|
+
const warningTelemetry = telemetryData.extendedBy({ error: error.message });
|
|
645
|
+
this._telemetryService.sendGHTelemetryEvent('request.shownWarning', warningTelemetry.properties, warningTelemetry.measurements);
|
|
646
|
+
const totalTimeMs = Date.now() - requestStart;
|
|
647
|
+
telemetryData.measurements.totalTimeMs = totalTimeMs;
|
|
648
|
+
telemetryData.properties.error = error.message;
|
|
649
|
+
this._logService.debug(`request.error: [websocket], took ${totalTimeMs} ms`);
|
|
650
|
+
this._telemetryService.sendGHTelemetryEvent('request.error', telemetryData.properties, telemetryData.measurements);
|
|
651
|
+
reject(error);
|
|
652
|
+
});
|
|
653
|
+
handle.onComplete(() => {
|
|
654
|
+
const totalTimeMs = Date.now() - requestStart;
|
|
655
|
+
telemetryData.measurements.totalTimeMs = totalTimeMs;
|
|
656
|
+
this._logService.debug(`request.response: [websocket], took ${totalTimeMs} ms`);
|
|
657
|
+
this._telemetryService.sendGHTelemetryEvent('request.response', telemetryData.properties, telemetryData.measurements);
|
|
658
|
+
resolve();
|
|
659
|
+
});
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
finally {
|
|
663
|
+
let messagesToLog = request.messages;
|
|
664
|
+
if ((!messagesToLog || messagesToLog.length === 0) && request.input) {
|
|
665
|
+
try {
|
|
666
|
+
const rawMessages = (0, responsesApi_1.responseApiInputToRawMessagesForLogging)(request);
|
|
667
|
+
messagesToLog = (0, openai_1.rawMessageToCAPI)(rawMessages);
|
|
668
|
+
}
|
|
669
|
+
catch (e) {
|
|
670
|
+
this._logService.error(`Failed to convert Response API input to messages for telemetry:`, e);
|
|
671
|
+
messagesToLog = [];
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
(0, chatStream_1.sendEngineMessagesTelemetry)(this._telemetryService, messagesToLog ?? [], telemetryData, false, this._logService);
|
|
675
|
+
}
|
|
676
|
+
});
|
|
677
|
+
return {
|
|
678
|
+
result: {
|
|
679
|
+
type: fetch_2.FetchResponseKind.Success,
|
|
680
|
+
chatCompletions,
|
|
681
|
+
}
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
async _doFetchViaHttp(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
|
|
524
685
|
// Generate unique ID to link input and output messages
|
|
525
686
|
const modelCallId = (0, uuid_1.generateUuid)();
|
|
526
|
-
const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher, canRetryOnce);
|
|
687
|
+
const response = await this._fetchWithInstrumentation(chatEndpointInfo, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, { ...telemetryProperties, modelCallId }, useFetcher, canRetryOnce, requestKindOptions);
|
|
527
688
|
if (cancellationToken.isCancellationRequested) {
|
|
528
689
|
try {
|
|
529
690
|
// Destroy the stream so that the server is hopefully notified we don't want any more data
|
|
@@ -594,7 +755,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
594
755
|
bytesReceived: response.bytesReceived
|
|
595
756
|
};
|
|
596
757
|
}
|
|
597
|
-
async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce) {
|
|
758
|
+
async _fetchWithInstrumentation(chatEndpoint, ourRequestId, request, secretKey, location, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce, requestKindOptions) {
|
|
598
759
|
// If request contains an image, we include this header.
|
|
599
760
|
const additionalHeaders = {
|
|
600
761
|
'X-Interaction-Id': this._interactionService.interactionId,
|
|
@@ -607,6 +768,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
607
768
|
endpoint: 'completions',
|
|
608
769
|
engineName: 'chat',
|
|
609
770
|
uiKind: commonTypes_1.ChatLocation.toString(location),
|
|
771
|
+
transport: 'http',
|
|
610
772
|
...telemetryProperties // This includes the modelCallId from fetchAndStreamChat
|
|
611
773
|
}, {
|
|
612
774
|
maxTokenWindow: chatEndpoint.modelMaxPromptTokens
|
|
@@ -625,7 +787,19 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
625
787
|
const requestStart = Date.now();
|
|
626
788
|
const intent = locationToIntent(location);
|
|
627
789
|
// Wrap the Promise with success/error callbacks so we can log/measure it
|
|
628
|
-
return
|
|
790
|
+
return this._instantiationService.invokeFunction(networking_1.postRequest, {
|
|
791
|
+
endpointOrUrl: chatEndpoint,
|
|
792
|
+
secretKey,
|
|
793
|
+
intent,
|
|
794
|
+
requestId: ourRequestId,
|
|
795
|
+
body: request,
|
|
796
|
+
additionalHeaders,
|
|
797
|
+
cancelToken: cancellationToken,
|
|
798
|
+
useFetcher,
|
|
799
|
+
canRetryOnce,
|
|
800
|
+
location,
|
|
801
|
+
requestKindOptions,
|
|
802
|
+
}).then(response => {
|
|
629
803
|
const apim = response.headers.get('apim-request-id');
|
|
630
804
|
if (apim) {
|
|
631
805
|
this._logService.debug(`APIM request id: ${apim}`);
|
|
@@ -881,7 +1055,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
881
1055
|
reason: `Request Failed: ${response.status} ${text}`
|
|
882
1056
|
};
|
|
883
1057
|
}
|
|
884
|
-
async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, fetcher, bytesReceived) {
|
|
1058
|
+
async processSuccessfulResponse(response, messages, requestBody, requestId, maxResponseTokens, promptTokenCount, timeToFirstToken, streamRecorder, baseTelemetry, chatEndpointInfo, userInitiatedRequest, transport, fetcher, bytesReceived, suspendEventSeen, resumeEventSeen) {
|
|
885
1059
|
const completions = [];
|
|
886
1060
|
for await (const chatCompletion of response.chatCompletions) {
|
|
887
1061
|
chatMLFetcherTelemetry_1.ChatMLFetcherTelemetrySender.sendSuccessTelemetry(this._telemetryService, {
|
|
@@ -895,8 +1069,11 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
895
1069
|
timeToFirstToken,
|
|
896
1070
|
timeToFirstTokenEmitted: (baseTelemetry && streamRecorder.firstTokenEmittedTime) ? streamRecorder.firstTokenEmittedTime - baseTelemetry.issuedTime : -1,
|
|
897
1071
|
hasImageMessages: this.filterImageMessages(messages),
|
|
1072
|
+
transport,
|
|
898
1073
|
fetcher,
|
|
899
1074
|
bytesReceived,
|
|
1075
|
+
suspendEventSeen,
|
|
1076
|
+
resumeEventSeen,
|
|
900
1077
|
});
|
|
901
1078
|
if (!this.isRepetitive(chatCompletion, baseTelemetry?.properties)) {
|
|
902
1079
|
completions.push(chatCompletion);
|
|
@@ -1097,7 +1274,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
1097
1274
|
serverRequestId: gitHubRequestId,
|
|
1098
1275
|
};
|
|
1099
1276
|
}
|
|
1100
|
-
if ((0,
|
|
1277
|
+
if ((0, errors_2.isCancellationError)(err)) {
|
|
1101
1278
|
return {
|
|
1102
1279
|
type: commonTypes_1.ChatFetchResponseType.Canceled,
|
|
1103
1280
|
reason: 'Got a cancellation error',
|
|
@@ -1114,7 +1291,7 @@ let ChatMLFetcherImpl = class ChatMLFetcherImpl extends AbstractChatMLFetcher {
|
|
|
1114
1291
|
serverRequestId: gitHubRequestId,
|
|
1115
1292
|
};
|
|
1116
1293
|
}
|
|
1117
|
-
this._logService.error(
|
|
1294
|
+
this._logService.error(errors_1.ErrorUtils.fromUnknown(err), `Error on conversation request`);
|
|
1118
1295
|
this._telemetryService.sendGHTelemetryException(err, 'Error on conversation request');
|
|
1119
1296
|
const userMessage = fetcher.getUserMessageForFetcherError(err);
|
|
1120
1297
|
const errorDetail = (0, logService_1.collectSingleLineErrorMessage)(err, true);
|
|
@@ -1170,7 +1347,9 @@ exports.ChatMLFetcherImpl = ChatMLFetcherImpl = __decorate([
|
|
|
1170
1347
|
__param(8, conversationOptions_1.IConversationOptions),
|
|
1171
1348
|
__param(9, configurationService_1.IConfigurationService),
|
|
1172
1349
|
__param(10, nullExperimentationService_1.IExperimentationService),
|
|
1173
|
-
__param(11, powerService_1.IPowerService)
|
|
1350
|
+
__param(11, powerService_1.IPowerService),
|
|
1351
|
+
__param(12, instantiation_1.IInstantiationService),
|
|
1352
|
+
__param(13, chatWebSocketManager_1.IChatWebSocketManager)
|
|
1174
1353
|
], ChatMLFetcherImpl);
|
|
1175
1354
|
/**
|
|
1176
1355
|
* Validates a chat request payload to ensure it is valid
|
|
@@ -1189,7 +1368,7 @@ function isValidChatPayload(messages, postOptions, endpoint, configurationServic
|
|
|
1189
1368
|
postOptions?.function_call?.name && !postOptions.function_call.name.match(functionNamePattern)) {
|
|
1190
1369
|
return { isValid: false, reason: asUnexpected('Function names must match ^[a-zA-Z0-9_-]+$') };
|
|
1191
1370
|
}
|
|
1192
|
-
if (postOptions?.tools && postOptions.tools.length > configurationService_1.HARD_TOOL_LIMIT && !(0, anthropic_1.isAnthropicToolSearchEnabled)(endpoint, configurationService
|
|
1371
|
+
if (postOptions?.tools && postOptions.tools.length > configurationService_1.HARD_TOOL_LIMIT && !(0, anthropic_1.isAnthropicToolSearchEnabled)(endpoint, configurationService)) {
|
|
1193
1372
|
return { isValid: false, reason: `Tool limit exceeded (${postOptions.tools.length}/${configurationService_1.HARD_TOOL_LIMIT}). Click "Configure Tools" in the chat input to disable ${postOptions.tools.length - configurationService_1.HARD_TOOL_LIMIT} tools and retry.` };
|
|
1194
1373
|
}
|
|
1195
1374
|
return { isValid: true, reason: '' };
|