@vscode/chat-lib 0.0.1 → 0.0.3
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/inlineEdits/node/nextEditProvider.d.ts +2 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js +70 -28
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProvider.js.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts +4 -3
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.d.ts.map +1 -1
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js +85 -109
- package/dist/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.js.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.d.ts.map +1 -1
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js +14 -6
- package/dist/src/_internal/extension/prompt/node/chatMLFetcher.js.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js +6 -5
- package/dist/src/_internal/extension/xtab/common/promptCrafting.js.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts +1 -0
- package/dist/src/_internal/extension/xtab/node/xtabProvider.d.ts.map +1 -1
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js +44 -42
- package/dist/src/_internal/extension/xtab/node/xtabProvider.js.map +1 -1
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.d.ts.map +1 -1
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js +8 -4
- package/dist/src/_internal/platform/authentication/node/copilotTokenManager.js.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts +8 -0
- package/dist/src/_internal/platform/configuration/common/configurationService.d.ts.map +1 -1
- package/dist/src/_internal/platform/configuration/common/configurationService.js +11 -3
- package/dist/src/_internal/platform/configuration/common/configurationService.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/capiClient.d.ts +1 -1
- package/dist/src/_internal/platform/endpoint/common/capiClient.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/capiClient.js +2 -2
- package/dist/src/_internal/platform/endpoint/common/capiClient.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts +4 -0
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js +7 -0
- package/dist/src/_internal/platform/endpoint/common/chatModelCapabilities.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/capiClientImpl.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/capiClientImpl.js +1 -1
- package/dist/src/_internal/platform/endpoint/node/capiClientImpl.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.d.ts.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/chatEndpoint.js.map +1 -1
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js +10 -4
- package/dist/src/_internal/platform/endpoint/node/responsesApi.js.map +1 -1
- package/dist/src/_internal/platform/env/common/envService.d.ts +5 -0
- package/dist/src/_internal/platform/env/common/envService.d.ts.map +1 -1
- package/dist/src/_internal/platform/env/common/envService.js +2 -1
- package/dist/src/_internal/platform/env/common/envService.js.map +1 -1
- package/dist/src/_internal/platform/env/common/nullEnvService.d.ts +3 -0
- package/dist/src/_internal/platform/env/common/nullEnvService.d.ts.map +1 -1
- package/dist/src/_internal/platform/env/common/nullEnvService.js +8 -1
- package/dist/src/_internal/platform/env/common/nullEnvService.js.map +1 -1
- package/dist/src/_internal/platform/github/common/githubService.d.ts +3 -3
- 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/statelessNextEditProvider.d.ts +0 -3
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.d.ts.map +1 -1
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js +0 -5
- package/dist/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts +2 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/fetcherService.js.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.d.ts.map +1 -1
- package/dist/src/_internal/platform/networking/common/networking.js.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/nullExperimentationService.d.ts +7 -0
- package/dist/src/_internal/platform/telemetry/common/nullExperimentationService.d.ts.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/nullExperimentationService.js +1 -0
- package/dist/src/_internal/platform/telemetry/common/nullExperimentationService.js.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts +1 -0
- package/dist/src/_internal/platform/telemetry/common/telemetry.d.ts.map +1 -1
- package/dist/src/_internal/platform/telemetry/common/telemetry.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts +8 -0
- package/dist/src/_internal/util/common/test/shims/chatTypes.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.js +19 -1
- package/dist/src/_internal/util/common/test/shims/chatTypes.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/enums.d.ts +6 -0
- package/dist/src/_internal/util/common/test/shims/enums.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/enums.js +8 -1
- package/dist/src/_internal/util/common/test/shims/enums.js.map +1 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.d.ts.map +1 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js +9 -1
- package/dist/src/_internal/util/common/test/shims/vscodeTypesShim.js.map +1 -1
- package/dist/src/_internal/vscodeTypes.d.ts +5 -0
- package/dist/src/_internal/vscodeTypes.d.ts.map +1 -1
- package/dist/src/_internal/vscodeTypes.js +6 -1
- package/dist/src/_internal/vscodeTypes.js.map +1 -1
- package/dist/src/main.d.ts +15 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +73 -13
- package/dist/src/main.js.map +1 -1
- package/dist/src/package.json +70 -31
- package/package.json +7 -9
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/fragments.d.ts +0 -42
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/fragments.d.ts.map +0 -1
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/fragments.js +0 -125
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/fragments.js.map +0 -1
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/implementation.d.ts +0 -60
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/implementation.d.ts.map +0 -1
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/implementation.js +0 -416
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/implementation.js.map +0 -1
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/projectedText.d.ts +0 -30
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/projectedText.d.ts.map +0 -1
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/projectedText.js +0 -64
- package/dist/src/_internal/extension/prompts/node/inline/summarizedDocument/projectedText.js.map +0 -1
- package/dist/src/_internal/extension/prompts/node/inline/visualization.d.ts +0 -26
- package/dist/src/_internal/extension/prompts/node/inline/visualization.d.ts.map +0 -1
- package/dist/src/_internal/extension/prompts/node/inline/visualization.js +0 -41
- package/dist/src/_internal/extension/prompts/node/inline/visualization.js.map +0 -1
- package/dist/src/_internal/platform/editing/common/abstractText.d.ts +0 -58
- package/dist/src/_internal/platform/editing/common/abstractText.d.ts.map +0 -1
- package/dist/src/_internal/platform/editing/common/abstractText.js +0 -129
- package/dist/src/_internal/platform/editing/common/abstractText.js.map +0 -1
- package/dist/src/_internal/platform/parser/node/nodes.d.ts +0 -93
- package/dist/src/_internal/platform/parser/node/nodes.d.ts.map +0 -1
- package/dist/src/_internal/platform/parser/node/nodes.js +0 -133
- package/dist/src/_internal/platform/parser/node/nodes.js.map +0 -1
- package/dist/src/_internal/platform/telemetry/common/nullTelemetryService.d.ts +0 -18
- package/dist/src/_internal/platform/telemetry/common/nullTelemetryService.d.ts.map +0 -1
- package/dist/src/_internal/platform/telemetry/common/nullTelemetryService.js +0 -50
- package/dist/src/_internal/platform/telemetry/common/nullTelemetryService.js.map +0 -1
- package/dist/src/_internal/util/common/arrays.d.ts +0 -18
- package/dist/src/_internal/util/common/arrays.d.ts.map +0 -1
- package/dist/src/_internal/util/common/arrays.js +0 -80
- package/dist/src/_internal/util/common/arrays.js.map +0 -1
- package/src/_internal/extension/byok/node/openAIEndpoint.ts +0 -171
- package/src/_internal/extension/common/constants.ts +0 -90
- package/src/_internal/extension/inlineEdits/common/delayer.ts +0 -108
- package/src/_internal/extension/inlineEdits/common/editRebase.ts +0 -268
- package/src/_internal/extension/inlineEdits/common/ghNearbyNesProvider.tsx +0 -163
- package/src/_internal/extension/inlineEdits/common/nearbyCursorInlineEditProvider.ts +0 -225
- package/src/_internal/extension/inlineEdits/common/rejectionCollector.ts +0 -164
- package/src/_internal/extension/inlineEdits/node/debugRecorder.ts +0 -205
- package/src/_internal/extension/inlineEdits/node/importFiltering.ts +0 -25
- package/src/_internal/extension/inlineEdits/node/nesConfigs.ts +0 -12
- package/src/_internal/extension/inlineEdits/node/nextEditCache.ts +0 -278
- package/src/_internal/extension/inlineEdits/node/nextEditProvider.ts +0 -778
- package/src/_internal/extension/inlineEdits/node/nextEditProviderTelemetry.ts +0 -983
- package/src/_internal/extension/inlineEdits/node/nextEditResult.ts +0 -40
- package/src/_internal/extension/prompt/common/importStatement.ts +0 -25
- package/src/_internal/extension/prompt/node/chatMLFetcher.ts +0 -706
- package/src/_internal/extension/prompts/node/inline/summarizedDocument/fragments.ts +0 -146
- package/src/_internal/extension/prompts/node/inline/summarizedDocument/implementation.ts +0 -527
- package/src/_internal/extension/prompts/node/inline/summarizedDocument/projectedText.ts +0 -76
- package/src/_internal/extension/prompts/node/inline/visualization.ts +0 -65
- package/src/_internal/extension/vscode.proposed.activeComment.d.ts +0 -23
- package/src/_internal/extension/vscode.proposed.aiRelatedInformation.d.ts +0 -49
- package/src/_internal/extension/vscode.proposed.aiSettingsSearch.d.ts +0 -31
- package/src/_internal/extension/vscode.proposed.aiTextSearchProvider.d.ts +0 -41
- package/src/_internal/extension/vscode.proposed.authLearnMore.d.ts +0 -16
- package/src/_internal/extension/vscode.proposed.chatBinaryReferenceData.d.ts +0 -41
- package/src/_internal/extension/vscode.proposed.chatEditing.d.ts +0 -29
- package/src/_internal/extension/vscode.proposed.chatParticipantAdditions.d.ts +0 -636
- package/src/_internal/extension/vscode.proposed.chatParticipantPrivate.d.ts +0 -276
- package/src/_internal/extension/vscode.proposed.chatProvider.d.ts +0 -62
- package/src/_internal/extension/vscode.proposed.chatReadonlyPromptReference.d.ts +0 -17
- package/src/_internal/extension/vscode.proposed.chatReferenceDiagnostic.d.ts +0 -23
- package/src/_internal/extension/vscode.proposed.chatSessionsProvider.d.ts +0 -218
- package/src/_internal/extension/vscode.proposed.chatStatusItem.d.ts +0 -61
- package/src/_internal/extension/vscode.proposed.codeActionAI.d.ts +0 -16
- package/src/_internal/extension/vscode.proposed.commentReveal.d.ts +0 -32
- package/src/_internal/extension/vscode.proposed.contribCommentThreadAdditionalMenu.d.ts +0 -8
- package/src/_internal/extension/vscode.proposed.contribCommentsViewThreadMenus.d.ts +0 -6
- package/src/_internal/extension/vscode.proposed.contribSourceControlInputBoxMenu.d.ts +0 -7
- package/src/_internal/extension/vscode.proposed.dataChannels.d.ts +0 -19
- package/src/_internal/extension/vscode.proposed.defaultChatParticipant.d.ts +0 -52
- package/src/_internal/extension/vscode.proposed.documentFiltersExclusive.d.ts +0 -13
- package/src/_internal/extension/vscode.proposed.embeddings.d.ts +0 -33
- package/src/_internal/extension/vscode.proposed.extensionsAny.d.ts +0 -40
- package/src/_internal/extension/vscode.proposed.findFiles2.d.ts +0 -125
- package/src/_internal/extension/vscode.proposed.findTextInFiles.d.ts +0 -104
- package/src/_internal/extension/vscode.proposed.findTextInFiles2.d.ts +0 -144
- package/src/_internal/extension/vscode.proposed.inlineCompletionsAdditions.d.ts +0 -202
- package/src/_internal/extension/vscode.proposed.interactive.d.ts +0 -11
- package/src/_internal/extension/vscode.proposed.languageModelCapabilities.d.ts +0 -25
- package/src/_internal/extension/vscode.proposed.languageModelDataPart.d.ts +0 -163
- package/src/_internal/extension/vscode.proposed.languageModelSystem.d.ts +0 -17
- package/src/_internal/extension/vscode.proposed.languageModelThinkingPart.d.ts +0 -49
- package/src/_internal/extension/vscode.proposed.languageModelToolResultAudience.d.ts +0 -36
- package/src/_internal/extension/vscode.proposed.mappedEditsProvider.d.ts +0 -110
- package/src/_internal/extension/vscode.proposed.newSymbolNamesProvider.d.ts +0 -47
- package/src/_internal/extension/vscode.proposed.readonlyMessage.d.ts +0 -14
- package/src/_internal/extension/vscode.proposed.resolvers.d.ts +0 -475
- package/src/_internal/extension/vscode.proposed.scmInputBoxValueProvider.d.ts +0 -25
- package/src/_internal/extension/vscode.proposed.taskProblemMatcherStatus.d.ts +0 -42
- package/src/_internal/extension/vscode.proposed.terminalDataWriteEvent.d.ts +0 -32
- package/src/_internal/extension/vscode.proposed.terminalExecuteCommandEvent.d.ts +0 -48
- package/src/_internal/extension/vscode.proposed.terminalQuickFixProvider.d.ts +0 -87
- package/src/_internal/extension/vscode.proposed.terminalSelection.d.ts +0 -16
- package/src/_internal/extension/vscode.proposed.testObserver.d.ts +0 -199
- package/src/_internal/extension/vscode.proposed.textDocumentChangeReason.d.ts +0 -30
- package/src/_internal/extension/vscode.proposed.textSearchProvider.d.ts +0 -281
- package/src/_internal/extension/vscode.proposed.textSearchProvider2.d.ts +0 -297
- package/src/_internal/extension/xtab/common/promptCrafting.ts +0 -670
- package/src/_internal/extension/xtab/node/xtabEndpoint.ts +0 -102
- package/src/_internal/extension/xtab/node/xtabProvider.ts +0 -976
- package/src/_internal/extension/xtab/node/xtabUtils.ts +0 -62
- package/src/_internal/platform/authentication/common/authentication.ts +0 -309
- package/src/_internal/platform/authentication/common/copilotToken.ts +0 -300
- package/src/_internal/platform/authentication/common/copilotTokenManager.ts +0 -59
- package/src/_internal/platform/authentication/common/copilotTokenStore.ts +0 -40
- package/src/_internal/platform/authentication/common/staticGitHubAuthenticationService.ts +0 -96
- package/src/_internal/platform/authentication/node/copilotTokenManager.ts +0 -303
- package/src/_internal/platform/chat/common/chatMLFetcher.ts +0 -124
- package/src/_internal/platform/chat/common/chatQuotaService.ts +0 -63
- package/src/_internal/platform/chat/common/chatQuotaServiceImpl.ts +0 -96
- package/src/_internal/platform/chat/common/commonTypes.ts +0 -353
- package/src/_internal/platform/chat/common/conversationOptions.ts +0 -16
- package/src/_internal/platform/chat/common/globalStringUtils.ts +0 -54
- package/src/_internal/platform/chat/common/interactionService.ts +0 -35
- package/src/_internal/platform/configuration/common/configurationService.ts +0 -803
- package/src/_internal/platform/configuration/common/defaultsOnlyConfigurationService.ts +0 -39
- package/src/_internal/platform/configuration/common/jsonSchema.ts +0 -139
- package/src/_internal/platform/configuration/common/validator.ts +0 -242
- package/src/_internal/platform/diff/common/diffService.ts +0 -41
- package/src/_internal/platform/diff/common/diffWorker.ts +0 -83
- package/src/_internal/platform/diff/node/diffServiceImpl.ts +0 -85
- package/src/_internal/platform/editing/common/abstractText.ts +0 -177
- package/src/_internal/platform/editing/common/notebookDocumentSnapshot.ts +0 -122
- package/src/_internal/platform/editing/common/positionOffsetTransformer.ts +0 -202
- package/src/_internal/platform/editing/common/textDocumentSnapshot.ts +0 -274
- package/src/_internal/platform/endpoint/common/capiClient.ts +0 -37
- package/src/_internal/platform/endpoint/common/chatModelCapabilities.ts +0 -115
- package/src/_internal/platform/endpoint/common/domainService.ts +0 -27
- package/src/_internal/platform/endpoint/common/endpointProvider.ts +0 -104
- package/src/_internal/platform/endpoint/common/endpointTypes.ts +0 -12
- package/src/_internal/platform/endpoint/common/licenseAgreement.ts +0 -11
- package/src/_internal/platform/endpoint/common/statefulMarkerContainer.tsx +0 -85
- package/src/_internal/platform/endpoint/common/thinkingDataContainer.tsx +0 -44
- package/src/_internal/platform/endpoint/node/capiClientImpl.ts +0 -18
- package/src/_internal/platform/endpoint/node/chatEndpoint.ts +0 -435
- package/src/_internal/platform/endpoint/node/domainServiceImpl.ts +0 -80
- package/src/_internal/platform/endpoint/node/proxyXtabEndpoint.ts +0 -43
- package/src/_internal/platform/endpoint/node/responsesApi.ts +0 -326
- package/src/_internal/platform/env/common/envService.ts +0 -134
- package/src/_internal/platform/env/common/nullEnvService.ts +0 -68
- package/src/_internal/platform/env/common/packagejson.ts +0 -49
- package/src/_internal/platform/git/common/gitExtensionService.ts +0 -21
- package/src/_internal/platform/git/common/nullGitExtensionService.ts +0 -20
- package/src/_internal/platform/git/vscode/git.d.ts +0 -414
- package/src/_internal/platform/github/common/githubAPI.ts +0 -44
- package/src/_internal/platform/github/common/githubService.ts +0 -87
- package/src/_internal/platform/github/common/nullOctokitServiceImpl.ts +0 -21
- package/src/_internal/platform/ignore/common/ignoreService.ts +0 -72
- package/src/_internal/platform/inlineCompletions/common/api.ts +0 -198
- package/src/_internal/platform/inlineEdits/common/dataTypes/diagnosticData.ts +0 -32
- package/src/_internal/platform/inlineEdits/common/dataTypes/documentId.ts +0 -52
- package/src/_internal/platform/inlineEdits/common/dataTypes/edit.ts +0 -165
- package/src/_internal/platform/inlineEdits/common/dataTypes/editUtils.ts +0 -74
- package/src/_internal/platform/inlineEdits/common/dataTypes/fetchCancellationError.ts +0 -14
- package/src/_internal/platform/inlineEdits/common/dataTypes/languageContext.ts +0 -107
- package/src/_internal/platform/inlineEdits/common/dataTypes/languageId.ts +0 -14
- package/src/_internal/platform/inlineEdits/common/dataTypes/permutation.ts +0 -69
- package/src/_internal/platform/inlineEdits/common/dataTypes/rootedLineEdit.ts +0 -49
- package/src/_internal/platform/inlineEdits/common/dataTypes/textEditLength.ts +0 -74
- package/src/_internal/platform/inlineEdits/common/dataTypes/textEditLengthHelper/combineTextEditInfos.ts +0 -132
- package/src/_internal/platform/inlineEdits/common/dataTypes/textEditLengthHelper/length.ts +0 -184
- package/src/_internal/platform/inlineEdits/common/dataTypes/textEditLengthHelper/textEditInfo.ts +0 -32
- package/src/_internal/platform/inlineEdits/common/dataTypes/xtabPromptOptions.ts +0 -89
- package/src/_internal/platform/inlineEdits/common/debugRecorderBookmark.ts +0 -10
- package/src/_internal/platform/inlineEdits/common/editReason.ts +0 -134
- package/src/_internal/platform/inlineEdits/common/inlineEditLogContext.ts +0 -490
- package/src/_internal/platform/inlineEdits/common/observableGit.ts +0 -49
- package/src/_internal/platform/inlineEdits/common/observableWorkspace.ts +0 -239
- package/src/_internal/platform/inlineEdits/common/responseProcessor.ts +0 -249
- package/src/_internal/platform/inlineEdits/common/statelessNextEditProvider.ts +0 -468
- package/src/_internal/platform/inlineEdits/common/statelessNextEditProviders.ts +0 -59
- package/src/_internal/platform/inlineEdits/common/utils/observable.ts +0 -54
- package/src/_internal/platform/inlineEdits/common/utils/stringifyChatMessages.ts +0 -29
- package/src/_internal/platform/inlineEdits/common/utils/utils.ts +0 -56
- package/src/_internal/platform/inlineEdits/common/workspaceEditTracker/historyContextProvider.ts +0 -60
- package/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesHistoryContextProvider.ts +0 -353
- package/src/_internal/platform/inlineEdits/common/workspaceEditTracker/nesXtabHistoryTracker.ts +0 -176
- package/src/_internal/platform/languageContextProvider/common/languageContextProviderService.ts +0 -25
- package/src/_internal/platform/languageContextProvider/common/nullLanguageContextProviderService.ts +0 -38
- package/src/_internal/platform/languageServer/common/languageContextService.ts +0 -186
- package/src/_internal/platform/languages/common/languageDiagnosticsService.ts +0 -67
- package/src/_internal/platform/languages/common/testLanguageDiagnosticsService.ts +0 -28
- package/src/_internal/platform/log/common/logService.ts +0 -232
- package/src/_internal/platform/nesFetch/common/completionsAPI.ts +0 -78
- package/src/_internal/platform/nesFetch/common/completionsFetchService.ts +0 -118
- package/src/_internal/platform/nesFetch/common/responseStream.ts +0 -151
- package/src/_internal/platform/nesFetch/node/completionsFetchServiceImpl.ts +0 -236
- package/src/_internal/platform/nesFetch/node/streamTransformer.ts +0 -95
- package/src/_internal/platform/networking/common/fetch.ts +0 -349
- package/src/_internal/platform/networking/common/fetcherService.ts +0 -84
- package/src/_internal/platform/networking/common/networking.ts +0 -442
- package/src/_internal/platform/networking/common/openai.ts +0 -273
- package/src/_internal/platform/networking/node/chatStream.ts +0 -137
- package/src/_internal/platform/networking/node/stream.ts +0 -749
- package/src/_internal/platform/notebook/common/alternativeContent.ts +0 -89
- package/src/_internal/platform/notebook/common/alternativeContentFormat.ts +0 -10
- package/src/_internal/platform/notebook/common/alternativeContentProvider.json.ts +0 -262
- package/src/_internal/platform/notebook/common/alternativeContentProvider.text.ts +0 -243
- package/src/_internal/platform/notebook/common/alternativeContentProvider.ts +0 -41
- package/src/_internal/platform/notebook/common/alternativeContentProvider.xml.ts +0 -205
- package/src/_internal/platform/notebook/common/alternativeNotebookDocument.ts +0 -155
- package/src/_internal/platform/notebook/common/helpers.ts +0 -212
- package/src/_internal/platform/notebook/common/notebookService.ts +0 -43
- package/src/_internal/platform/openai/node/fetch.ts +0 -596
- package/src/_internal/platform/parser/node/nodes.ts +0 -190
- package/src/_internal/platform/requestLogger/node/nullRequestLogger.ts +0 -26
- package/src/_internal/platform/requestLogger/node/requestLogger.ts +0 -383
- package/src/_internal/platform/simulationTestContext/common/simulationTestContext.ts +0 -29
- package/src/_internal/platform/snippy/common/snippyService.ts +0 -25
- package/src/_internal/platform/telemetry/common/nullExperimentationService.ts +0 -64
- package/src/_internal/platform/telemetry/common/nullTelemetryService.ts +0 -53
- package/src/_internal/platform/telemetry/common/telemetry.ts +0 -215
- package/src/_internal/platform/telemetry/common/telemetryData.ts +0 -205
- package/src/_internal/platform/thinking/common/thinking.ts +0 -61
- package/src/_internal/platform/thinking/common/thinkingUtils.ts +0 -57
- package/src/_internal/platform/tokenizer/node/parseTikTokens.ts +0 -23
- package/src/_internal/platform/tokenizer/node/tikTokenizerImpl.ts +0 -74
- package/src/_internal/platform/tokenizer/node/tikTokenizerWorker.ts +0 -24
- package/src/_internal/platform/tokenizer/node/tokenizer.ts +0 -357
- package/src/_internal/platform/workspace/common/workspaceService.ts +0 -226
- package/src/_internal/platform/workspaceRecorder/common/workspaceLog.ts +0 -118
- package/src/_internal/util/common/anomalyDetection.ts +0 -112
- package/src/_internal/util/common/arrays.ts +0 -81
- package/src/_internal/util/common/async.ts +0 -155
- package/src/_internal/util/common/cache.ts +0 -183
- package/src/_internal/util/common/crypto.ts +0 -41
- package/src/_internal/util/common/errors.ts +0 -22
- package/src/_internal/util/common/globals.d.ts +0 -12
- package/src/_internal/util/common/imageUtils.ts +0 -154
- package/src/_internal/util/common/languages.ts +0 -940
- package/src/_internal/util/common/notebooks.ts +0 -286
- package/src/_internal/util/common/result.ts +0 -71
- package/src/_internal/util/common/services.ts +0 -43
- package/src/_internal/util/common/test/shims/chatTypes.ts +0 -448
- package/src/_internal/util/common/test/shims/editing.ts +0 -233
- package/src/_internal/util/common/test/shims/enums.ts +0 -61
- package/src/_internal/util/common/test/shims/l10n.ts +0 -37
- package/src/_internal/util/common/test/shims/newSymbolName.ts +0 -23
- package/src/_internal/util/common/test/shims/terminal.ts +0 -33
- package/src/_internal/util/common/test/shims/vscodeTypesShim.ts +0 -115
- package/src/_internal/util/common/time.ts +0 -31
- package/src/_internal/util/common/tokenizer.ts +0 -30
- package/src/_internal/util/common/tracing.ts +0 -52
- package/src/_internal/util/common/types.ts +0 -33
- package/src/_internal/util/common/variableLengthQuantity.ts +0 -40
- package/src/_internal/util/node/worker.ts +0 -130
- package/src/_internal/util/vs/base/common/arrays.ts +0 -926
- package/src/_internal/util/vs/base/common/arraysFind.ts +0 -206
- package/src/_internal/util/vs/base/common/assert.ts +0 -89
- package/src/_internal/util/vs/base/common/async.ts +0 -2582
- package/src/_internal/util/vs/base/common/buffer.ts +0 -501
- package/src/_internal/util/vs/base/common/cache.ts +0 -122
- package/src/_internal/util/vs/base/common/cancellation.ts +0 -150
- package/src/_internal/util/vs/base/common/charCode.ts +0 -452
- package/src/_internal/util/vs/base/common/codicons.ts +0 -66
- package/src/_internal/util/vs/base/common/codiconsLibrary.ts +0 -618
- package/src/_internal/util/vs/base/common/codiconsUtil.ts +0 -30
- package/src/_internal/util/vs/base/common/collections.ts +0 -156
- package/src/_internal/util/vs/base/common/diff/diff.ts +0 -1317
- package/src/_internal/util/vs/base/common/diff/diffChange.ts +0 -62
- package/src/_internal/util/vs/base/common/equals.ts +0 -148
- package/src/_internal/util/vs/base/common/errors.ts +0 -342
- package/src/_internal/util/vs/base/common/event.ts +0 -1782
- package/src/_internal/util/vs/base/common/extpath.ts +0 -425
- package/src/_internal/util/vs/base/common/filters.ts +0 -928
- package/src/_internal/util/vs/base/common/functional.ts +0 -34
- package/src/_internal/util/vs/base/common/glob.ts +0 -839
- package/src/_internal/util/vs/base/common/hash.ts +0 -326
- package/src/_internal/util/vs/base/common/htmlContent.ts +0 -212
- package/src/_internal/util/vs/base/common/iconLabels.ts +0 -118
- package/src/_internal/util/vs/base/common/iterator.ts +0 -196
- package/src/_internal/util/vs/base/common/lazy.ts +0 -59
- package/src/_internal/util/vs/base/common/lifecycle.ts +0 -845
- package/src/_internal/util/vs/base/common/linkedList.ts +0 -144
- package/src/_internal/util/vs/base/common/map.ts +0 -954
- package/src/_internal/util/vs/base/common/marshallingIds.ts +0 -35
- package/src/_internal/util/vs/base/common/mime.ts +0 -136
- package/src/_internal/util/vs/base/common/naturalLanguage/korean.ts +0 -425
- package/src/_internal/util/vs/base/common/network.ts +0 -429
- package/src/_internal/util/vs/base/common/numbers.ts +0 -166
- package/src/_internal/util/vs/base/common/objects.ts +0 -242
- package/src/_internal/util/vs/base/common/observable.ts +0 -10
- package/src/_internal/util/vs/base/common/observableInternal/base.ts +0 -208
- package/src/_internal/util/vs/base/common/observableInternal/changeTracker.ts +0 -96
- package/src/_internal/util/vs/base/common/observableInternal/commonFacade/cancellation.ts +0 -9
- package/src/_internal/util/vs/base/common/observableInternal/commonFacade/deps.ts +0 -12
- package/src/_internal/util/vs/base/common/observableInternal/debugLocation.ts +0 -88
- package/src/_internal/util/vs/base/common/observableInternal/debugName.ts +0 -150
- package/src/_internal/util/vs/base/common/observableInternal/experimental/utils.ts +0 -62
- package/src/_internal/util/vs/base/common/observableInternal/index.ts +0 -61
- package/src/_internal/util/vs/base/common/observableInternal/logging/consoleObservableLogger.ts +0 -388
- package/src/_internal/util/vs/base/common/observableInternal/logging/debugger/debuggerApi.d.ts +0 -154
- package/src/_internal/util/vs/base/common/observableInternal/logging/debugger/debuggerRpc.ts +0 -80
- package/src/_internal/util/vs/base/common/observableInternal/logging/debugger/devToolsLogger.ts +0 -485
- package/src/_internal/util/vs/base/common/observableInternal/logging/debugger/rpc.ts +0 -103
- package/src/_internal/util/vs/base/common/observableInternal/logging/debugger/utils.ts +0 -69
- package/src/_internal/util/vs/base/common/observableInternal/logging/logging.ts +0 -133
- package/src/_internal/util/vs/base/common/observableInternal/map.ts +0 -81
- package/src/_internal/util/vs/base/common/observableInternal/observables/baseObservable.ts +0 -172
- package/src/_internal/util/vs/base/common/observableInternal/observables/constObservable.ts +0 -44
- package/src/_internal/util/vs/base/common/observableInternal/observables/derived.ts +0 -190
- package/src/_internal/util/vs/base/common/observableInternal/observables/derivedImpl.ts +0 -445
- package/src/_internal/util/vs/base/common/observableInternal/observables/lazyObservableValue.ts +0 -154
- package/src/_internal/util/vs/base/common/observableInternal/observables/observableFromEvent.ts +0 -174
- package/src/_internal/util/vs/base/common/observableInternal/observables/observableSignal.ts +0 -67
- package/src/_internal/util/vs/base/common/observableInternal/observables/observableSignalFromEvent.ts +0 -62
- package/src/_internal/util/vs/base/common/observableInternal/observables/observableValue.ts +0 -131
- package/src/_internal/util/vs/base/common/observableInternal/observables/observableValueOpts.ts +0 -37
- package/src/_internal/util/vs/base/common/observableInternal/reactions/autorun.ts +0 -188
- package/src/_internal/util/vs/base/common/observableInternal/reactions/autorunImpl.ts +0 -256
- package/src/_internal/util/vs/base/common/observableInternal/set.ts +0 -78
- package/src/_internal/util/vs/base/common/observableInternal/transaction.ts +0 -115
- package/src/_internal/util/vs/base/common/observableInternal/utils/promise.ts +0 -129
- package/src/_internal/util/vs/base/common/observableInternal/utils/runOnChange.ts +0 -65
- package/src/_internal/util/vs/base/common/observableInternal/utils/utils.ts +0 -281
- package/src/_internal/util/vs/base/common/observableInternal/utils/utilsCancellation.ts +0 -101
- package/src/_internal/util/vs/base/common/observableInternal/utils/valueWithChangeEvent.ts +0 -31
- package/src/_internal/util/vs/base/common/path.ts +0 -1591
- package/src/_internal/util/vs/base/common/platform.ts +0 -282
- package/src/_internal/util/vs/base/common/process.ts +0 -78
- package/src/_internal/util/vs/base/common/resources.ts +0 -446
- package/src/_internal/util/vs/base/common/sequence.ts +0 -36
- package/src/_internal/util/vs/base/common/sseParser.ts +0 -247
- package/src/_internal/util/vs/base/common/stopwatch.ts +0 -43
- package/src/_internal/util/vs/base/common/stream.ts +0 -792
- package/src/_internal/util/vs/base/common/strings.ts +0 -1364
- package/src/_internal/util/vs/base/common/symbols.ts +0 -11
- package/src/_internal/util/vs/base/common/themables.ts +0 -106
- package/src/_internal/util/vs/base/common/types.ts +0 -345
- package/src/_internal/util/vs/base/common/uint.ts +0 -61
- package/src/_internal/util/vs/base/common/uri.ts +0 -752
- package/src/_internal/util/vs/base/common/uuid.ts +0 -72
- package/src/_internal/util/vs/base-common.d.ts +0 -42
- package/src/_internal/util/vs/editor/common/core/editOperation.ts +0 -62
- package/src/_internal/util/vs/editor/common/core/edits/edit.ts +0 -399
- package/src/_internal/util/vs/editor/common/core/edits/lineEdit.ts +0 -414
- package/src/_internal/util/vs/editor/common/core/edits/stringEdit.ts +0 -568
- package/src/_internal/util/vs/editor/common/core/edits/textEdit.ts +0 -411
- package/src/_internal/util/vs/editor/common/core/position.ts +0 -186
- package/src/_internal/util/vs/editor/common/core/range.ts +0 -519
- package/src/_internal/util/vs/editor/common/core/ranges/lineRange.ts +0 -416
- package/src/_internal/util/vs/editor/common/core/ranges/offsetRange.ts +0 -275
- package/src/_internal/util/vs/editor/common/core/text/abstractText.ts +0 -127
- package/src/_internal/util/vs/editor/common/core/text/positionToOffset.ts +0 -26
- package/src/_internal/util/vs/editor/common/core/text/positionToOffsetImpl.ts +0 -144
- package/src/_internal/util/vs/editor/common/core/text/textLength.ts +0 -150
- package/src/_internal/util/vs/editor/common/core/wordHelper.ts +0 -177
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.ts +0 -210
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.ts +0 -109
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.ts +0 -178
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.ts +0 -331
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts +0 -273
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts +0 -475
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/lineSequence.ts +0 -47
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts +0 -248
- package/src/_internal/util/vs/editor/common/diff/defaultLinesDiffComputer/utils.ts +0 -76
- package/src/_internal/util/vs/editor/common/diff/legacyLinesDiffComputer.ts +0 -693
- package/src/_internal/util/vs/editor/common/diff/linesDiffComputer.ts +0 -61
- package/src/_internal/util/vs/editor/common/diff/rangeMapping.ts +0 -418
- package/src/_internal/util/vs/editor/common/model/prefixSumComputer.ts +0 -304
- package/src/_internal/util/vs/nls.messages.ts +0 -21
- package/src/_internal/util/vs/nls.ts +0 -243
- package/src/_internal/util/vs/platform/instantiation/common/descriptors.ts +0 -23
- package/src/_internal/util/vs/platform/instantiation/common/graph.ts +0 -113
- package/src/_internal/util/vs/platform/instantiation/common/instantiation.ts +0 -127
- package/src/_internal/util/vs/platform/instantiation/common/instantiationService.ts +0 -483
- package/src/_internal/util/vs/platform/instantiation/common/serviceCollection.ts +0 -34
- package/src/_internal/util/vs/vscode-globals-nls.d.ts +0 -42
- package/src/_internal/util/vs/vscode-globals-product.d.ts +0 -35
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/diagnostic.ts +0 -109
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/es5ClassCompat.ts +0 -34
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/location.ts +0 -51
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/markdownString.ts +0 -83
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/notebooks.ts +0 -296
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/position.ts +0 -195
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/range.ts +0 -167
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/selection.ts +0 -94
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/snippetString.ts +0 -103
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/snippetTextEdit.ts +0 -44
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/symbolInformation.ts +0 -89
- package/src/_internal/util/vs/workbench/api/common/extHostTypes/textEdit.ts +0 -99
- package/src/_internal/vscodeTypes.ts +0 -100
- package/src/main.ts +0 -207
- package/src/package.json +0 -4063
|
@@ -1,749 +0,0 @@
|
|
|
1
|
-
/*---------------------------------------------------------------------------------------------
|
|
2
|
-
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
-
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
|
|
6
|
-
import { ClientHttp2Stream } from 'http2';
|
|
7
|
-
import type { CancellationToken } from 'vscode';
|
|
8
|
-
import { ILogService, LogLevel } from '../../log/common/logService';
|
|
9
|
-
import { ITelemetryService } from '../../telemetry/common/telemetry';
|
|
10
|
-
import { TelemetryData } from '../../telemetry/common/telemetryData';
|
|
11
|
-
import { RawThinkingDelta, ThinkingDelta } from '../../thinking/common/thinking';
|
|
12
|
-
import { extractThinkingDeltaFromChoice, } from '../../thinking/common/thinkingUtils';
|
|
13
|
-
import { FinishedCallback, getRequestId, ICodeVulnerabilityAnnotation, ICopilotBeginToolCall, ICopilotConfirmation, ICopilotError, ICopilotFunctionCall, ICopilotReference, ICopilotToolCall, IIPCodeCitation, isCodeCitationAnnotation, isCopilotAnnotation, RequestId } from '../common/fetch';
|
|
14
|
-
import { Response } from '../common/fetcherService';
|
|
15
|
-
import { APIErrorResponse, APIJsonData, APIUsage, ChoiceLogProbs, FilterReason, FinishedCompletionReason, isApiUsage, IToolCall } from '../common/openai';
|
|
16
|
-
|
|
17
|
-
/** Gathers together many chunks of a single completion choice. */
|
|
18
|
-
class APIJsonDataStreaming {
|
|
19
|
-
|
|
20
|
-
get text(): readonly string[] {
|
|
21
|
-
return this._text;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
private _text: string[] = [];
|
|
25
|
-
private _newText: string[] = [];
|
|
26
|
-
|
|
27
|
-
append(choice: ExtendedChoiceJSON) {
|
|
28
|
-
if (choice.text) {
|
|
29
|
-
const str = APIJsonDataStreaming._removeCR(choice.text);
|
|
30
|
-
this._text.push(str);
|
|
31
|
-
this._newText.push(str);
|
|
32
|
-
}
|
|
33
|
-
if (choice.delta?.content) {
|
|
34
|
-
const str = APIJsonDataStreaming._removeCR(choice.delta.content);
|
|
35
|
-
this._text.push(str);
|
|
36
|
-
this._newText.push(str);
|
|
37
|
-
}
|
|
38
|
-
if (choice.delta?.function_call && (choice.delta.function_call.name || choice.delta.function_call.arguments)) {
|
|
39
|
-
const str = APIJsonDataStreaming._removeCR(choice.delta.function_call.arguments);
|
|
40
|
-
this._text.push(str);
|
|
41
|
-
this._newText.push(str);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
flush(): string {
|
|
46
|
-
const delta = this._newText.join('');
|
|
47
|
-
this._newText = [];
|
|
48
|
-
return delta;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
private static _removeCR(text: string): string {
|
|
52
|
-
return text.replace(/\r$/g, '');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
toJSON() {
|
|
56
|
-
return {
|
|
57
|
-
text: this._text,
|
|
58
|
-
newText: this._newText
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
class StreamingToolCall {
|
|
64
|
-
public id: string | undefined;
|
|
65
|
-
public name: string | undefined;
|
|
66
|
-
public arguments: string = '';
|
|
67
|
-
|
|
68
|
-
constructor() { }
|
|
69
|
-
|
|
70
|
-
update(toolCall: IToolCall) {
|
|
71
|
-
if (toolCall.id) {
|
|
72
|
-
this.id = toolCall.id;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (toolCall.function?.name) {
|
|
76
|
-
this.name = toolCall.function.name;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
if (toolCall.function?.arguments) {
|
|
80
|
-
this.arguments += toolCall.function.arguments;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
class StreamingToolCalls {
|
|
86
|
-
private toolCalls: StreamingToolCall[] = [];
|
|
87
|
-
|
|
88
|
-
constructor() { }
|
|
89
|
-
|
|
90
|
-
getToolCalls(): ICopilotToolCall[] {
|
|
91
|
-
return this.toolCalls.map(call => {
|
|
92
|
-
return {
|
|
93
|
-
name: call.name!,
|
|
94
|
-
arguments: call.arguments,
|
|
95
|
-
id: call.id!,
|
|
96
|
-
};
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
hasToolCalls(): boolean {
|
|
101
|
-
return this.toolCalls.length > 0;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
update(choice: ExtendedChoiceJSON) {
|
|
105
|
-
choice.delta?.tool_calls?.forEach(toolCall => {
|
|
106
|
-
let currentCall = this.toolCalls.at(-1);
|
|
107
|
-
if (!currentCall || (toolCall.id && currentCall.id !== toolCall.id)) {
|
|
108
|
-
currentCall = new StreamingToolCall();
|
|
109
|
-
this.toolCalls.push(currentCall);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
currentCall.update(toolCall);
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Given a string of lines separated by one or more newlines, returns complete
|
|
118
|
-
// lines and any remaining partial line data. Exported for test only.
|
|
119
|
-
export function splitChunk(chunk: string): [string[], string] {
|
|
120
|
-
const dataLines = chunk.split('\n');
|
|
121
|
-
const newExtra = dataLines.pop(); // will be empty string if chunk ends with "\n"
|
|
122
|
-
return [dataLines.filter(line => line !== ''), newExtra!];
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* A single finished completion returned from the model or proxy, along with
|
|
127
|
-
* some metadata.
|
|
128
|
-
*/
|
|
129
|
-
export interface FinishedCompletion {
|
|
130
|
-
solution: APIJsonDataStreaming;
|
|
131
|
-
/** An optional offset into `solution.text.join('')` where the completion finishes. */
|
|
132
|
-
finishOffset: number | undefined;
|
|
133
|
-
/** A copilot-specific human-readable reason for the completion finishing. */
|
|
134
|
-
reason: FinishedCompletionReason;
|
|
135
|
-
/** A copilot-specific reason for filtering the response. Only returns when reason === FinishedCompletionReason.ContentFilter */
|
|
136
|
-
filterReason?: FilterReason;
|
|
137
|
-
error?: APIErrorResponse;
|
|
138
|
-
/** The token usage reported from CAPI */
|
|
139
|
-
usage?: APIUsage;
|
|
140
|
-
requestId: RequestId;
|
|
141
|
-
index: number;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/** What comes back from the OpenAI API for a single choice in an SSE chunk. */
|
|
145
|
-
interface ChoiceJSON {
|
|
146
|
-
index: number;
|
|
147
|
-
/**
|
|
148
|
-
* The text attribute as defined in completions streaming.
|
|
149
|
-
* See https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format
|
|
150
|
-
*/
|
|
151
|
-
text?: string;
|
|
152
|
-
/**
|
|
153
|
-
* The delta attribute as defined in chat streaming.
|
|
154
|
-
* See https://github.com/openai/openai-cookbook/blob/main/examples/How_to_stream_completions.ipynb
|
|
155
|
-
*/
|
|
156
|
-
delta?: { content: string | null };
|
|
157
|
-
finish_reason?: FinishedCompletionReason.Stop | FinishedCompletionReason.Length | FinishedCompletionReason.FunctionCall | FinishedCompletionReason.ContentFilter | FinishedCompletionReason.ServerError | FinishedCompletionReason.ToolCalls | null;
|
|
158
|
-
logprobs?: ChoiceLogProbs;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Extensions to the OpenAI stream format
|
|
163
|
-
*/
|
|
164
|
-
interface ExtendedChoiceJSON extends ChoiceJSON {
|
|
165
|
-
content_filter_results?: Record<Exclude<FilterReason, FilterReason.Copyright>, { filtered: boolean; severity: string }>;
|
|
166
|
-
message?: RawThinkingDelta;
|
|
167
|
-
delta?: {
|
|
168
|
-
content: string | null;
|
|
169
|
-
copilot_annotations?: {
|
|
170
|
-
CodeVulnerability: ICodeVulnerabilityAnnotation[];
|
|
171
|
-
IPCodeCitations: IIPCodeCitation[];
|
|
172
|
-
TextCopyright: boolean | undefined;
|
|
173
|
-
Sexual: boolean | undefined;
|
|
174
|
-
SexualPattern: boolean | undefined;
|
|
175
|
-
Violence: boolean | undefined;
|
|
176
|
-
HateSpeech: boolean | undefined;
|
|
177
|
-
HateSpeechPattern: boolean | undefined;
|
|
178
|
-
SelfHarm: boolean | undefined;
|
|
179
|
-
PromptPromBlockList: boolean | undefined;
|
|
180
|
-
};
|
|
181
|
-
function_call?: { name: string; arguments: string };
|
|
182
|
-
tool_calls?: IToolCall[];
|
|
183
|
-
role?: string;
|
|
184
|
-
name?: string;
|
|
185
|
-
} & RawThinkingDelta;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Processes an HTTP request containing what is assumed to be an SSE stream of
|
|
190
|
-
* OpenAI API data. Yields a stream of `FinishedCompletion` objects, each as
|
|
191
|
-
* soon as it's finished.
|
|
192
|
-
*/
|
|
193
|
-
export class SSEProcessor {
|
|
194
|
-
private requestId: RequestId = getRequestId(this.response);
|
|
195
|
-
/**
|
|
196
|
-
* A key & value being here means at least one chunk with that choice index
|
|
197
|
-
* has been received. A null value means we've already finished the given
|
|
198
|
-
* solution and should not process incoming tokens further.
|
|
199
|
-
*/
|
|
200
|
-
private readonly solutions: Record<number, APIJsonDataStreaming | null> = {};
|
|
201
|
-
|
|
202
|
-
private readonly completedFunctionCallIdxs: Map<number /* index */, 'function' | 'tool'> = new Map();
|
|
203
|
-
private readonly functionCalls: Record<string, APIJsonDataStreaming | null> = {};
|
|
204
|
-
private readonly toolCalls = new StreamingToolCalls();
|
|
205
|
-
private functionCallName: string | undefined = undefined;
|
|
206
|
-
|
|
207
|
-
private constructor(
|
|
208
|
-
private readonly logService: ILogService,
|
|
209
|
-
private readonly telemetryService: ITelemetryService,
|
|
210
|
-
private readonly expectedNumChoices: number,
|
|
211
|
-
private readonly response: Response,
|
|
212
|
-
private readonly body: NodeJS.ReadableStream,
|
|
213
|
-
private readonly cancellationToken?: CancellationToken
|
|
214
|
-
) { }
|
|
215
|
-
|
|
216
|
-
static async create(
|
|
217
|
-
logService: ILogService,
|
|
218
|
-
telemetryService: ITelemetryService,
|
|
219
|
-
expectedNumChoices: number,
|
|
220
|
-
response: Response,
|
|
221
|
-
cancellationToken?: CancellationToken
|
|
222
|
-
) {
|
|
223
|
-
const body = (await response.body()) as NodeJS.ReadableStream;
|
|
224
|
-
body.setEncoding('utf8');
|
|
225
|
-
return new SSEProcessor(
|
|
226
|
-
logService,
|
|
227
|
-
telemetryService,
|
|
228
|
-
expectedNumChoices,
|
|
229
|
-
response,
|
|
230
|
-
body,
|
|
231
|
-
cancellationToken
|
|
232
|
-
);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Yields finished completions as soon as they are available. The finishedCb
|
|
237
|
-
* is used to determine when a completion is done and should be truncated.
|
|
238
|
-
* It is called on the whole of the received solution text, once at the end
|
|
239
|
-
* of the completion (if it stops by itself) and also on any chunk that has
|
|
240
|
-
* a newline in it.
|
|
241
|
-
*
|
|
242
|
-
* Closes the server request stream when all choices are finished/truncated
|
|
243
|
-
* (as long as fastCancellation is true).
|
|
244
|
-
*
|
|
245
|
-
* Note that for this to work, the caller must consume the entire stream.
|
|
246
|
-
* This happens automatically when using a `for await` loop, but when
|
|
247
|
-
* iterating manually this needs to be done by calling `.next()` until it
|
|
248
|
-
* returns an item with done = true (or calling `.return()`).
|
|
249
|
-
*/
|
|
250
|
-
async *processSSE(finishedCb: FinishedCallback = async () => undefined): AsyncIterable<FinishedCompletion> {
|
|
251
|
-
try {
|
|
252
|
-
// If it's n > 1 we don't handle usage as the usage is global for the stream and all our code assumes per choice
|
|
253
|
-
// Therefore we will just skip over the usage and yield the completions
|
|
254
|
-
if (this.expectedNumChoices > 1) {
|
|
255
|
-
for await (const usageOrCompletions of this.processSSEInner(finishedCb)) {
|
|
256
|
-
if (!isApiUsage(usageOrCompletions)) {
|
|
257
|
-
yield usageOrCompletions;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
} else {
|
|
261
|
-
let completion: FinishedCompletion | undefined;
|
|
262
|
-
let usage: APIUsage | undefined;
|
|
263
|
-
|
|
264
|
-
// Process both the usage and the completions, then yield one combined completions
|
|
265
|
-
for await (const usageOrCompletions of this.processSSEInner(finishedCb)) {
|
|
266
|
-
if (isApiUsage(usageOrCompletions)) {
|
|
267
|
-
usage = usageOrCompletions;
|
|
268
|
-
} else {
|
|
269
|
-
completion = usageOrCompletions;
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
if (this.maybeCancel('after receiving the completion, but maybe before we got the usage')) {
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
if (completion) {
|
|
278
|
-
completion.usage = usage;
|
|
279
|
-
yield completion;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
} finally {
|
|
283
|
-
this.cancel();
|
|
284
|
-
this.logService.info(
|
|
285
|
-
`request done: requestId: [${this.requestId.headerRequestId}] model deployment ID: [${this.requestId.deploymentId}]`
|
|
286
|
-
);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
private async *processSSEInner(finishedCb: FinishedCallback): AsyncIterable<FinishedCompletion | APIUsage> {
|
|
291
|
-
// Collects pieces of the SSE stream that haven't been fully processed yet.
|
|
292
|
-
let extraData = '';
|
|
293
|
-
// This flag is set when at least for one solution we finished early (via `finishedCb`).
|
|
294
|
-
let hadEarlyFinishedSolution = false;
|
|
295
|
-
// Iterate over arbitrarily sized chunks coming in from the network.
|
|
296
|
-
for await (const chunk of this.body) {
|
|
297
|
-
if (this.maybeCancel('after awaiting body chunk')) {
|
|
298
|
-
return;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
// this.logService.public.debug(chunk.toString());
|
|
302
|
-
const [dataLines, remainder] = splitChunk(extraData + chunk.toString());
|
|
303
|
-
extraData = remainder;
|
|
304
|
-
|
|
305
|
-
// Each dataLine is complete since we've seen at least one \n after it
|
|
306
|
-
|
|
307
|
-
// The platform agent can return a 'function_call' finish_reason, which isn't a real function call
|
|
308
|
-
// but is echoing internal function call messages back to us. So don't treat them as real function calls
|
|
309
|
-
// if we received more data after that
|
|
310
|
-
let allowCompletingSolution = true;
|
|
311
|
-
let thinkingFound = false;
|
|
312
|
-
|
|
313
|
-
for (const dataLine of dataLines) {
|
|
314
|
-
// Lines which start with a `:` are SSE Comments per the spec and can be ignored
|
|
315
|
-
if (dataLine.startsWith(':')) {
|
|
316
|
-
continue;
|
|
317
|
-
}
|
|
318
|
-
const lineWithoutData = dataLine.slice('data:'.length).trim();
|
|
319
|
-
if (lineWithoutData === '[DONE]') {
|
|
320
|
-
thinkingFound = false;
|
|
321
|
-
yield* this.finishSolutions();
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// TODO @lramos15 - This should not be an ugly inlined type like this
|
|
326
|
-
let json: {
|
|
327
|
-
choices: ExtendedChoiceJSON[] | undefined | null;
|
|
328
|
-
error?: APIErrorResponse;
|
|
329
|
-
copilot_references?: any;
|
|
330
|
-
copilot_confirmation?: any;
|
|
331
|
-
copilot_errors: any;
|
|
332
|
-
usage: APIUsage | undefined;
|
|
333
|
-
};
|
|
334
|
-
try {
|
|
335
|
-
json = JSON.parse(lineWithoutData);
|
|
336
|
-
} catch (e) {
|
|
337
|
-
this.logService.error(`Error parsing JSON stream data for request id ${this.requestId.headerRequestId}:${dataLine}`);
|
|
338
|
-
sendCommunicationErrorTelemetry(this.telemetryService, `Error parsing JSON stream data for request id ${this.requestId.headerRequestId}:`, dataLine);
|
|
339
|
-
continue;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// Track usage data for this stream. Usage is global and not per choice. Therefore it's emitted as its own chunk
|
|
343
|
-
if (json.usage) {
|
|
344
|
-
yield json.usage;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// A message with a confirmation may or may not have 'choices'
|
|
348
|
-
if (json.copilot_confirmation && isCopilotConfirmation(json.copilot_confirmation)) {
|
|
349
|
-
await finishedCb('', 0, { text: '', copilotConfirmation: json.copilot_confirmation });
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
if (!json.choices) {
|
|
353
|
-
// Currently there are messages with a null 'choices' that include copilot_references- ignore these
|
|
354
|
-
if (!json.copilot_references && !json.copilot_confirmation) {
|
|
355
|
-
if (json.error !== undefined) {
|
|
356
|
-
this.logService.error(`Error in response for request id ${this.requestId.headerRequestId}:${json.error.message}`);
|
|
357
|
-
sendCommunicationErrorTelemetry(this.telemetryService, `Error in response for request id ${this.requestId.headerRequestId}:`, json.error.message);
|
|
358
|
-
// Encountered an error mid stream we immediately yield as the response is not usable.
|
|
359
|
-
yield {
|
|
360
|
-
index: 0,
|
|
361
|
-
finishOffset: undefined,
|
|
362
|
-
solution: new APIJsonDataStreaming(),
|
|
363
|
-
reason: FinishedCompletionReason.ServerError,
|
|
364
|
-
error: json.error,
|
|
365
|
-
requestId: this.requestId,
|
|
366
|
-
};
|
|
367
|
-
} else {
|
|
368
|
-
this.logService.error(`Unexpected response with no choices or error for request id ${this.requestId.headerRequestId}`);
|
|
369
|
-
sendCommunicationErrorTelemetry(this.telemetryService, `Unexpected response with no choices or error for request id ${this.requestId.headerRequestId}`);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
// There are also messages with a null 'choices' that include copilot_errors- report these
|
|
374
|
-
if (json.copilot_errors) {
|
|
375
|
-
await finishedCb('', 0, { text: '', copilotErrors: json.copilot_errors });
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
if (json.copilot_references) {
|
|
379
|
-
await finishedCb('', 0, { text: '', copilotReferences: json.copilot_references });
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
continue;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
if (this.requestId.created === 0) {
|
|
386
|
-
// Would only be 0 if we're the first actual response chunk
|
|
387
|
-
this.requestId = getRequestId(this.response, json);
|
|
388
|
-
if (this.requestId.created === 0 && json.choices?.length) { // An initial chunk is sent with an empty choices array and no id, to hold `prompt_filter_results`
|
|
389
|
-
this.logService.error(`Request id invalid, should have "completionId" and "created": ${JSON.stringify(this.requestId)} ${this.requestId}`);
|
|
390
|
-
sendCommunicationErrorTelemetry(this.telemetryService, `Request id invalid, should have "completionId" and "created": ${JSON.stringify(this.requestId)}`, this.requestId);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
for (let i = 0; i < json.choices.length; i++) {
|
|
395
|
-
const choice = json.choices[i];
|
|
396
|
-
|
|
397
|
-
this.logChoice(choice);
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
const thinkingDelta = extractThinkingDeltaFromChoice(choice);
|
|
401
|
-
|
|
402
|
-
// Once we observe any thinking text or an id in this batch, keep the flag true
|
|
403
|
-
thinkingFound ||= !!(thinkingDelta?.text || thinkingDelta?.id);
|
|
404
|
-
|
|
405
|
-
if (!(choice.index in this.solutions)) {
|
|
406
|
-
this.solutions[choice.index] = new APIJsonDataStreaming();
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
const solution = this.solutions[choice.index];
|
|
410
|
-
if (solution === null) {
|
|
411
|
-
if (thinkingDelta) {
|
|
412
|
-
await finishedCb('', choice.index, { text: '', thinking: thinkingDelta });
|
|
413
|
-
}
|
|
414
|
-
continue; // already finished
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
let finishOffset: number | undefined;
|
|
418
|
-
|
|
419
|
-
const emitSolution = async (delta?: { vulnAnnotations?: ICodeVulnerabilityAnnotation[]; ipCodeCitations?: IIPCodeCitation[]; references?: ICopilotReference[]; toolCalls?: ICopilotToolCall[]; functionCalls?: ICopilotFunctionCall[]; errors?: ICopilotError[]; beginToolCalls?: ICopilotBeginToolCall[]; thinking?: ThinkingDelta }) => {
|
|
420
|
-
if (delta?.vulnAnnotations && (!Array.isArray(delta.vulnAnnotations) || !delta.vulnAnnotations.every(a => isCopilotAnnotation(a)))) {
|
|
421
|
-
delta.vulnAnnotations = undefined;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
// Validate code citation annotations carefully, because the API is a work in progress
|
|
425
|
-
if (delta?.ipCodeCitations && (!Array.isArray(delta.ipCodeCitations) || !delta.ipCodeCitations.every(isCodeCitationAnnotation))) {
|
|
426
|
-
delta.ipCodeCitations = undefined;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
finishOffset = await finishedCb(solution.text.join(''), choice.index, {
|
|
430
|
-
text: solution.flush(),
|
|
431
|
-
logprobs: choice.logprobs,
|
|
432
|
-
codeVulnAnnotations: delta?.vulnAnnotations,
|
|
433
|
-
ipCitations: delta?.ipCodeCitations,
|
|
434
|
-
copilotReferences: delta?.references,
|
|
435
|
-
copilotToolCalls: delta?.toolCalls,
|
|
436
|
-
_deprecatedCopilotFunctionCalls: delta?.functionCalls,
|
|
437
|
-
beginToolCalls: delta?.beginToolCalls,
|
|
438
|
-
copilotErrors: delta?.errors,
|
|
439
|
-
thinking: thinkingDelta ?? delta?.thinking,
|
|
440
|
-
});
|
|
441
|
-
if (finishOffset !== undefined) {
|
|
442
|
-
hadEarlyFinishedSolution = true;
|
|
443
|
-
}
|
|
444
|
-
return this.maybeCancel('after awaiting finishedCb');
|
|
445
|
-
};
|
|
446
|
-
|
|
447
|
-
let handled = true;
|
|
448
|
-
if (choice.delta?.tool_calls) {
|
|
449
|
-
if (!this.toolCalls.hasToolCalls() && solution.text.length > 0) {
|
|
450
|
-
const firstToolName = choice.delta.tool_calls.at(0)?.function?.name;
|
|
451
|
-
if (firstToolName) {
|
|
452
|
-
// Flush the linkifier stream. See #16465
|
|
453
|
-
solution.append({ index: 0, delta: { content: ' ' } });
|
|
454
|
-
await emitSolution({ beginToolCalls: [{ name: firstToolName }] });
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
this.toolCalls.update(choice);
|
|
458
|
-
} else if (choice.delta?.copilot_annotations?.CodeVulnerability || choice.delta?.copilot_annotations?.IPCodeCitations) {
|
|
459
|
-
if (await emitSolution()) {
|
|
460
|
-
continue;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
if (!hadEarlyFinishedSolution) {
|
|
464
|
-
solution.append(choice);
|
|
465
|
-
if (await emitSolution({ vulnAnnotations: choice.delta?.copilot_annotations?.CodeVulnerability, ipCodeCitations: choice.delta?.copilot_annotations?.IPCodeCitations })) {
|
|
466
|
-
continue;
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
} else if (choice.delta?.role === 'function') {
|
|
470
|
-
if (choice.delta.content) {
|
|
471
|
-
try {
|
|
472
|
-
const references = JSON.parse(choice.delta.content);
|
|
473
|
-
if (Array.isArray(references)) {
|
|
474
|
-
if (await emitSolution({ references: references })) {
|
|
475
|
-
continue;
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
} catch (ex) {
|
|
479
|
-
this.logService.error(`Error parsing function references: ${JSON.stringify(ex)}`);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
} else if (choice.delta?.function_call && (choice.delta.function_call.name || choice.delta.function_call.arguments)) {
|
|
483
|
-
allowCompletingSolution = false;
|
|
484
|
-
this.functionCallName ??= choice.delta.function_call.name;
|
|
485
|
-
this.functionCalls[this.functionCallName] ??= new APIJsonDataStreaming();
|
|
486
|
-
const functionCall = this.functionCalls[this.functionCallName];
|
|
487
|
-
functionCall!.append(choice);
|
|
488
|
-
} else if ((choice.finish_reason === FinishedCompletionReason.FunctionCall || choice.finish_reason === FinishedCompletionReason.Stop) && this.functionCallName) {
|
|
489
|
-
// We don't want to yield the function call until we have all the data
|
|
490
|
-
const functionCallStreamObj = this.functionCalls[this.functionCallName];
|
|
491
|
-
const functionCall = { name: this.functionCallName, arguments: functionCallStreamObj!.flush() };
|
|
492
|
-
this.completedFunctionCallIdxs.set(choice.index, 'function');
|
|
493
|
-
try {
|
|
494
|
-
if (await emitSolution({ functionCalls: [functionCall] })) {
|
|
495
|
-
continue;
|
|
496
|
-
}
|
|
497
|
-
} catch (error) {
|
|
498
|
-
this.logService.error(error);
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
this.functionCalls[this.functionCallName] = null;
|
|
502
|
-
this.functionCallName = undefined;
|
|
503
|
-
if (choice.finish_reason === FinishedCompletionReason.FunctionCall) {
|
|
504
|
-
// See note about the 'function_call' finish_reason below
|
|
505
|
-
continue;
|
|
506
|
-
}
|
|
507
|
-
} else {
|
|
508
|
-
handled = false;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
if ((choice.finish_reason === FinishedCompletionReason.ToolCalls || choice.finish_reason === FinishedCompletionReason.Stop) && this.toolCalls.hasToolCalls()) {
|
|
512
|
-
handled = true;
|
|
513
|
-
const toolCalls = this.toolCalls.getToolCalls();
|
|
514
|
-
this.completedFunctionCallIdxs.set(choice.index, 'tool');
|
|
515
|
-
const toolId = toolCalls.length > 0 ? toolCalls[0].id : undefined;
|
|
516
|
-
try {
|
|
517
|
-
if (await emitSolution({ toolCalls: toolCalls, thinking: (toolId && thinkingFound) ? { metadata: { toolId } } : undefined })) {
|
|
518
|
-
continue;
|
|
519
|
-
}
|
|
520
|
-
} catch (error) {
|
|
521
|
-
this.logService.error(error);
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
if (!handled) {
|
|
526
|
-
solution.append(choice);
|
|
527
|
-
|
|
528
|
-
// Call finishedCb to determine if the solution is now complete.
|
|
529
|
-
if (await emitSolution()) {
|
|
530
|
-
continue;
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
const solutionDone = Boolean(choice.finish_reason) || finishOffset !== undefined;
|
|
535
|
-
if (!solutionDone) {
|
|
536
|
-
continue;
|
|
537
|
-
}
|
|
538
|
-
// NOTE: When there is a finish_reason the text of subsequent chunks is always '',
|
|
539
|
-
// (current chunk might still have useful text, that is why we add it above).
|
|
540
|
-
// So we know that we already got all the text to be displayed for the user.
|
|
541
|
-
// TODO: This might contain additional logprobs for excluded next tokens. We should
|
|
542
|
-
// filter out indices that correspond to excluded tokens. It will not affect the
|
|
543
|
-
// text though.
|
|
544
|
-
yield {
|
|
545
|
-
solution,
|
|
546
|
-
finishOffset,
|
|
547
|
-
reason: choice.finish_reason ?? FinishedCompletionReason.ClientTrimmed,
|
|
548
|
-
filterReason: choiceToFilterReason(choice),
|
|
549
|
-
requestId: this.requestId,
|
|
550
|
-
index: choice.index,
|
|
551
|
-
};
|
|
552
|
-
|
|
553
|
-
if (this.maybeCancel('after yielding finished choice')) {
|
|
554
|
-
return;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
if (allowCompletingSolution) {
|
|
558
|
-
this.solutions[choice.index] = null;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
// Yield whatever solutions remain incomplete in case no [DONE] was received.
|
|
565
|
-
// This shouldn't happen in practice unless there was an error somewhere.
|
|
566
|
-
for (const [index, solution] of Object.entries(this.solutions)) {
|
|
567
|
-
const solutionIndex = Number(index); // Convert `index` from string to number
|
|
568
|
-
if (solution === null) {
|
|
569
|
-
continue; // already finished
|
|
570
|
-
}
|
|
571
|
-
yield {
|
|
572
|
-
solution,
|
|
573
|
-
finishOffset: undefined,
|
|
574
|
-
reason: FinishedCompletionReason.ClientIterationDone,
|
|
575
|
-
requestId: this.requestId,
|
|
576
|
-
index: solutionIndex,
|
|
577
|
-
};
|
|
578
|
-
|
|
579
|
-
if (this.maybeCancel('after yielding after iteration done')) {
|
|
580
|
-
return;
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
// Error message can be present in `extraData`
|
|
585
|
-
//
|
|
586
|
-
// When `finishedCb` decides to finish a solution early, it is possible that
|
|
587
|
-
// we will have unfinished or partial JSON data in `extraData` because we
|
|
588
|
-
// break out of the above for loop as soon as all solutions are finished.
|
|
589
|
-
//
|
|
590
|
-
// We don't want to alarm ourselves with such partial JSON data.
|
|
591
|
-
if (extraData.length > 0 && !hadEarlyFinishedSolution) {
|
|
592
|
-
try {
|
|
593
|
-
const extraDataJson = JSON.parse(extraData);
|
|
594
|
-
if (extraDataJson.error !== undefined) {
|
|
595
|
-
this.logService.error(extraDataJson.error, `Error in response: ${extraDataJson.error.message}`);
|
|
596
|
-
sendCommunicationErrorTelemetry(this.telemetryService, `Error in response: ${extraDataJson.error.message}`, extraDataJson.error);
|
|
597
|
-
}
|
|
598
|
-
} catch (e) {
|
|
599
|
-
this.logService.error(`Error parsing extraData for request id ${this.requestId.headerRequestId}: ${extraData}`);
|
|
600
|
-
sendCommunicationErrorTelemetry(this.telemetryService, `Error parsing extraData for request id ${this.requestId.headerRequestId}: ${extraData}`);
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
/** Yields the solutions that weren't yet finished, with a 'DONE' reason. */
|
|
606
|
-
private async *finishSolutions(): AsyncIterable<FinishedCompletion> {
|
|
607
|
-
for (const [index, solution] of Object.entries(this.solutions)) {
|
|
608
|
-
const solutionIndex = Number(index); // Convert `index` from string to number
|
|
609
|
-
if (solution === null) {
|
|
610
|
-
continue; // already finished
|
|
611
|
-
}
|
|
612
|
-
if (this.completedFunctionCallIdxs.has(solutionIndex)) {
|
|
613
|
-
yield {
|
|
614
|
-
solution,
|
|
615
|
-
finishOffset: undefined,
|
|
616
|
-
reason: this.completedFunctionCallIdxs.get(solutionIndex) === 'function' ? FinishedCompletionReason.FunctionCall : FinishedCompletionReason.ToolCalls,
|
|
617
|
-
requestId: this.requestId,
|
|
618
|
-
index: solutionIndex,
|
|
619
|
-
};
|
|
620
|
-
continue;
|
|
621
|
-
}
|
|
622
|
-
yield {
|
|
623
|
-
solution,
|
|
624
|
-
finishOffset: undefined,
|
|
625
|
-
reason: FinishedCompletionReason.ClientDone,
|
|
626
|
-
requestId: this.requestId,
|
|
627
|
-
index: solutionIndex,
|
|
628
|
-
};
|
|
629
|
-
|
|
630
|
-
if (this.maybeCancel('after yielding on DONE')) {
|
|
631
|
-
return;
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
/**
|
|
637
|
-
* Returns whether the cancellation token was cancelled and closes the
|
|
638
|
-
* stream if it was.
|
|
639
|
-
*/
|
|
640
|
-
private maybeCancel(description: string) {
|
|
641
|
-
if (this.cancellationToken?.isCancellationRequested) {
|
|
642
|
-
this.logService.debug('Cancelled: ' + description);
|
|
643
|
-
this.cancel();
|
|
644
|
-
return true;
|
|
645
|
-
}
|
|
646
|
-
return false;
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
private cancel() {
|
|
650
|
-
(this.body as ClientHttp2Stream).destroy();
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
private logChoice(choice: ExtendedChoiceJSON) {
|
|
654
|
-
const choiceCopy: any = { ...choice };
|
|
655
|
-
delete choiceCopy.index;
|
|
656
|
-
delete choiceCopy.content_filter_results;
|
|
657
|
-
delete choiceCopy.content_filter_offsets;
|
|
658
|
-
this.logService.trace(`choice ${JSON.stringify(choiceCopy)}`);
|
|
659
|
-
}
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
// data: {"choices":null,"copilot_confirmation":{"type":"action","title":"Are you sure you want to proceed?","message":"This action is irreversible.","confirmation":{"id":"123"}},"id":null}
|
|
663
|
-
function isCopilotConfirmation(obj: unknown): obj is ICopilotConfirmation {
|
|
664
|
-
return typeof (obj as ICopilotConfirmation).title === 'string' &&
|
|
665
|
-
typeof (obj as ICopilotConfirmation).message === 'string' &&
|
|
666
|
-
!!(obj as ICopilotConfirmation).confirmation;
|
|
667
|
-
}
|
|
668
|
-
|
|
669
|
-
// Function to convert from APIJsonDataStreaming to APIJsonData format
|
|
670
|
-
export function convertToAPIJsonData(streamingData: APIJsonDataStreaming): APIJsonData {
|
|
671
|
-
const joinedText = streamingData.text.join('');
|
|
672
|
-
const out: APIJsonData = {
|
|
673
|
-
text: joinedText,
|
|
674
|
-
tokens: streamingData.text,
|
|
675
|
-
};
|
|
676
|
-
return out;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
/**
|
|
680
|
-
* Given a choice from the API call, returns the reason for filtering out the choice, or undefined if the choice should not be filtered out.
|
|
681
|
-
* @param choice The choice from the API call
|
|
682
|
-
* @returns The reason for filtering out the choice, or undefined if the choice should not be filtered out.
|
|
683
|
-
*/
|
|
684
|
-
function choiceToFilterReason(choice: ExtendedChoiceJSON): FilterReason | undefined {
|
|
685
|
-
if (choice.finish_reason !== FinishedCompletionReason.ContentFilter) {
|
|
686
|
-
return undefined;
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
if (choice.delta?.copilot_annotations?.TextCopyright) {
|
|
690
|
-
return FilterReason.Copyright;
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
if (choice.delta?.copilot_annotations?.Sexual || choice.delta?.copilot_annotations?.SexualPattern) {
|
|
694
|
-
return FilterReason.Sexual;
|
|
695
|
-
}
|
|
696
|
-
if (choice.delta?.copilot_annotations?.Violence) {
|
|
697
|
-
return FilterReason.Violence;
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
if (choice.delta?.copilot_annotations?.HateSpeech || choice.delta?.copilot_annotations?.HateSpeechPattern) {
|
|
701
|
-
return FilterReason.Hate;
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
if (choice.delta?.copilot_annotations?.SelfHarm) {
|
|
705
|
-
return FilterReason.SelfHarm;
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
if (choice.delta?.copilot_annotations?.PromptPromBlockList) {
|
|
709
|
-
return FilterReason.Prompt;
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
if (!choice.content_filter_results) {
|
|
713
|
-
return undefined;
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
for (const filter of Object.keys(choice.content_filter_results) as Exclude<FilterReason, FilterReason.Copyright>[]) {
|
|
717
|
-
if (choice.content_filter_results[filter]?.filtered) {
|
|
718
|
-
return filter;
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
return undefined;
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
export function sendCommunicationErrorTelemetry(telemetryService: ITelemetryService, message: string, extra?: any) {
|
|
725
|
-
const args = [message, extra];
|
|
726
|
-
const secureMessage = (args.length > 0 ? JSON.stringify(args) : 'no msg');
|
|
727
|
-
|
|
728
|
-
const enhancedData = TelemetryData.createAndMarkAsIssued({
|
|
729
|
-
context: 'fetch',
|
|
730
|
-
level: LogLevel[LogLevel.Error],
|
|
731
|
-
message: secureMessage,
|
|
732
|
-
});
|
|
733
|
-
|
|
734
|
-
// send full content to secure telemetry
|
|
735
|
-
telemetryService.sendEnhancedGHTelemetryErrorEvent('log', enhancedData.properties, enhancedData.measurements);
|
|
736
|
-
|
|
737
|
-
const data = TelemetryData.createAndMarkAsIssued({
|
|
738
|
-
context: 'fetch',
|
|
739
|
-
level: LogLevel[LogLevel.Error],
|
|
740
|
-
message: '[redacted]',
|
|
741
|
-
});
|
|
742
|
-
|
|
743
|
-
// send content that excludes customer data to standard telemetry
|
|
744
|
-
telemetryService.sendGHTelemetryErrorEvent(
|
|
745
|
-
'log',
|
|
746
|
-
data.properties,
|
|
747
|
-
data.measurements
|
|
748
|
-
);
|
|
749
|
-
}
|