@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.
Files changed (181) hide show
  1. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js +1 -1
  2. package/dist/src/_internal/extension/completions-core/vscode-node/lib/src/ghostText/completionsFromNetwork.js.map +1 -1
  3. package/dist/src/_internal/extension/inlineEdits/common/delay.d.ts +3 -1
  4. package/dist/src/_internal/extension/inlineEdits/common/delay.d.ts.map +1 -1
  5. package/dist/src/_internal/extension/inlineEdits/common/delay.js +6 -0
  6. package/dist/src/_internal/extension/inlineEdits/common/delay.js.map +1 -1
  7. package/dist/src/_internal/extension/inlineEdits/common/editRebase.d.ts.map +1 -1
  8. package/dist/src/_internal/extension/inlineEdits/common/editRebase.js +2 -35
  9. package/dist/src/_internal/extension/inlineEdits/common/editRebase.js.map +1 -1
  10. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts +6 -0
  11. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.d.ts.map +1 -1
  12. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js +19 -35
  13. package/dist/src/_internal/extension/inlineEdits/common/userInteractionMonitor.js.map +1 -1
  14. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts +1 -0
  15. package/dist/src/_internal/extension/inlineEdits/node/nextEditCache.d.ts.map +1 -1
  16. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts +12 -1
  17. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
  18. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +150 -97
  19. package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
  20. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts +7 -0
  21. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
  22. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +18 -3
  23. package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
  24. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts +2 -0
  25. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.d.ts.map +1 -1
  26. package/dist/src/_internal/extension/inlineEdits/node/nextEditResult.js.map +1 -1
  27. package/dist/src/_internal/extension/power/common/powerService.d.ts +11 -0
  28. package/dist/src/_internal/extension/power/common/powerService.d.ts.map +1 -1
  29. package/dist/src/_internal/extension/power/common/powerService.js +5 -0
  30. package/dist/src/_internal/extension/power/common/powerService.js.map +1 -1
  31. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts +11 -1
  32. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
  33. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +235 -56
  34. package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
  35. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts +26 -3
  36. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.d.ts.map +1 -1
  37. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js +27 -9
  38. package/dist/src/_internal/extension/prompt/node/chatMLFetcherTelemetry.js.map +1 -1
  39. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts +6 -1
  40. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.d.ts.map +1 -1
  41. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js +3 -1
  42. package/dist/src/_internal/extension/xtab/common/diffHistoryForPrompt.js.map +1 -1
  43. package/dist/src/_internal/extension/xtab/common/lintErrors.js +2 -1
  44. package/dist/src/_internal/extension/xtab/common/lintErrors.js.map +1 -1
  45. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts +6 -1
  46. package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
  47. package/dist/src/_internal/extension/xtab/common/promptCrafting.js +43 -6
  48. package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
  49. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts +22 -0
  50. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.d.ts.map +1 -1
  51. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js +116 -17
  52. package/dist/src/_internal/extension/xtab/common/recentFilesForPrompt.js.map +1 -1
  53. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.d.ts +10 -0
  54. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.d.ts.map +1 -0
  55. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.js +10 -0
  56. package/dist/src/_internal/extension/xtab/common/similarFilesContextService.js.map +1 -0
  57. package/dist/src/_internal/extension/xtab/common/tags.d.ts +1 -0
  58. package/dist/src/_internal/extension/xtab/common/tags.d.ts.map +1 -1
  59. package/dist/src/_internal/extension/xtab/common/tags.js +1 -0
  60. package/dist/src/_internal/extension/xtab/common/tags.js.map +1 -1
  61. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js +1 -1
  62. package/dist/src/_internal/extension/xtab/node/xtabCustomDiffPatchResponseHandler.js.map +1 -1
  63. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.d.ts.map +1 -1
  64. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js +1 -0
  65. package/dist/src/_internal/extension/xtab/node/xtabEndpoint.js.map +1 -1
  66. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.d.ts.map +1 -1
  67. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js +3 -2
  68. package/dist/src/_internal/extension/xtab/node/xtabNextCursorPredictor.js.map +1 -1
  69. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +4 -1
  70. package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
  71. package/dist/src/_internal/extension/xtab/node/xtabProvider.js +91 -20
  72. package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
  73. package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts +4 -0
  74. package/dist/src/_internal/platform/authentication/common/copilotToken.d.ts.map +1 -1
  75. package/dist/src/_internal/platform/authentication/common/copilotToken.js +6 -0
  76. package/dist/src/_internal/platform/authentication/common/copilotToken.js.map +1 -1
  77. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js +1 -1
  78. package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js.map +1 -1
  79. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +29 -24
  80. package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
  81. package/dist/src/_internal/platform/configuration/common/configurationService.js +32 -19
  82. package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
  83. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +2 -1
  84. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
  85. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +17 -7
  86. package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
  87. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts +1 -0
  88. package/dist/src/_internal/platform/endpoint/common/endpointProvider.d.ts.map +1 -1
  89. package/dist/src/_internal/platform/endpoint/common/endpointProvider.js.map +1 -1
  90. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.d.ts.map +1 -1
  91. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js +1 -0
  92. package/dist/src/_internal/platform/endpoint/node/autoChatEndpoint.js.map +1 -1
  93. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +1 -0
  94. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
  95. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js +4 -3
  96. package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
  97. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts +6 -1
  98. package/dist/src/_internal/platform/endpoint/node/messagesApi.d.ts.map +1 -1
  99. package/dist/src/_internal/platform/endpoint/node/messagesApi.js +48 -15
  100. package/dist/src/_internal/platform/endpoint/node/messagesApi.js.map +1 -1
  101. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.d.ts.map +1 -1
  102. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js +1 -0
  103. package/dist/src/_internal/platform/endpoint/node/proxyXtabEndpoint.js.map +1 -1
  104. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts +1 -0
  105. package/dist/src/_internal/platform/endpoint/node/responsesApi.d.ts.map +1 -1
  106. package/dist/src/_internal/platform/endpoint/node/responsesApi.js +20 -2
  107. package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
  108. package/dist/src/_internal/platform/github/common/githubService.d.ts +2 -1
  109. package/dist/src/_internal/platform/github/common/githubService.d.ts.map +1 -1
  110. package/dist/src/_internal/platform/github/common/githubService.js.map +1 -1
  111. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.d.ts +8 -0
  112. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.d.ts.map +1 -0
  113. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.js +17 -0
  114. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/triggerOptions.js.map +1 -0
  115. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts +44 -0
  116. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.d.ts.map +1 -1
  117. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js +71 -2
  118. package/dist/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.js.map +1 -1
  119. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js +5 -5
  120. package/dist/src/_internal/platform/inlineEdits/common/inlineEditLogContext.js.map +1 -1
  121. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts +15 -1
  122. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
  123. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +22 -1
  124. package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
  125. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.d.ts.map +1 -1
  126. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js +9 -44
  127. package/dist/src/_internal/platform/inlineEdits/node/inlineEditsModelService.js.map +1 -1
  128. package/dist/src/_internal/platform/nesFetch/common/responseStream.js +2 -35
  129. package/dist/src/_internal/platform/nesFetch/common/responseStream.js.map +1 -1
  130. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js +3 -36
  131. package/dist/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.js.map +1 -1
  132. package/dist/src/_internal/platform/networking/common/anthropic.d.ts +11 -16
  133. package/dist/src/_internal/platform/networking/common/anthropic.d.ts.map +1 -1
  134. package/dist/src/_internal/platform/networking/common/anthropic.js +33 -38
  135. package/dist/src/_internal/platform/networking/common/anthropic.js.map +1 -1
  136. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +43 -1
  137. package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
  138. package/dist/src/_internal/platform/networking/common/fetcherService.js +29 -4
  139. package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
  140. package/dist/src/_internal/platform/networking/common/networking.d.ts +40 -4
  141. package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
  142. package/dist/src/_internal/platform/networking/common/networking.js +21 -6
  143. package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
  144. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts +71 -0
  145. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.d.ts.map +1 -0
  146. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js +308 -0
  147. package/dist/src/_internal/platform/networking/node/chatWebSocketManager.js.map +1 -0
  148. package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.js +4 -37
  149. package/dist/src/_internal/platform/proxyModels/node/proxyModelsService.js.map +1 -1
  150. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts +1 -0
  151. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.d.ts.map +1 -1
  152. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js +3 -0
  153. package/dist/src/_internal/platform/requestLogger/node/nullRequestLogger.js.map +1 -1
  154. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts +2 -0
  155. package/dist/src/_internal/platform/requestLogger/node/requestLogger.d.ts.map +1 -1
  156. package/dist/src/_internal/platform/requestLogger/node/requestLogger.js.map +1 -1
  157. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts +9 -1
  158. package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts.map +1 -1
  159. package/dist/src/_internal/platform/telemetry/common/telemetry.js +33 -15
  160. package/dist/src/_internal/platform/telemetry/common/telemetry.js.map +1 -1
  161. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.d.ts +1 -1
  162. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.d.ts.map +1 -1
  163. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.js +3 -2
  164. package/dist/src/_internal/platform/telemetry/node/azureInsightsReporter.js.map +1 -1
  165. package/dist/src/_internal/util/common/errors.d.ts +4 -2
  166. package/dist/src/_internal/util/common/errors.d.ts.map +1 -1
  167. package/dist/src/_internal/util/common/errors.js +16 -12
  168. package/dist/src/_internal/util/common/errors.js.map +1 -1
  169. package/dist/src/_internal/util/common/result.js +4 -37
  170. package/dist/src/_internal/util/common/result.js.map +1 -1
  171. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +14 -2
  172. package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
  173. package/dist/src/_internal/util/common/test/shims/chatTypes.js +17 -3
  174. package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
  175. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +1 -1
  176. package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
  177. package/dist/src/main.d.ts.map +1 -1
  178. package/dist/src/main.js +10 -0
  179. package/dist/src/main.js.map +1 -1
  180. package/dist/src/package.json +221 -294
  181. 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":"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"}
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 crypto_1 = require("../../../util/common/crypto");
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 errors_1 = require("../../../util/vs/base/common/errors");
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: opts.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, processed, telemetryProperties, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToFirstToken, this.filterImageMessages(messages), actualFetcher, actualBytesReceived, baseTelemetry.issuedTime);
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, processed, telemetryProperties, chatEndpoint, requestBody, tokenCount, maxResponseTokens, timeToError, this.filterImageMessages(messages), actualFetcher, err.bytesReceived, baseTelemetry.issuedTime);
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, processed, telemetryProperties, opts.endpoint, requestBody, tokenCount, maxResponseTokens, timeToError, this.filterImageMessages(opts.messages), actualFetcher, bytesReceived, baseTelemetry.issuedTime, true);
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
- return await this._doFetchAndStreamChat(chatEndpointInfo, request, baseTelemetryData, finishedCb, secretKey, copilotToken, location, ourRequestId, nChoices, cancellationToken, userInitiatedRequest, telemetryProperties, useFetcher, canRetryOnce);
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 (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, location).then(response => {
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, errors_1.isCancellationError)(err)) {
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(errorsUtil.fromUnknown(err), `Error on conversation request`);
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, experimentationService)) {
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: '' };