Skip to content

Commit 838a59f

Browse files
authored
send onLanguageModelAccess activation event (microsoft#205995)
microsoft#205726
1 parent 0b82c6e commit 838a59f

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/vs/workbench/api/browser/mainThreadChatProvider.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { timeout } from 'vs/base/common/async';
76
import { CancellationToken } from 'vs/base/common/cancellation';
87
import { Emitter, Event } from 'vs/base/common/event';
98
import { Disposable, DisposableMap, DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
@@ -82,15 +81,20 @@ export class MainThreadChatProvider implements MainThreadChatProviderShape {
8281
}
8382

8483
async $prepareChatAccess(extension: ExtensionIdentifier, providerId: string, justification?: string): Promise<IChatResponseProviderMetadata | undefined> {
84+
85+
const activate = this._extensionService.activateByEvent(`onLanguageModelAccess:${providerId}`);
8586
const metadata = this._chatProviderService.lookupChatResponseProvider(providerId);
86-
// TODO: This should use a real activation event. Perhaps following what authentication does.
87-
for (let i = 0; i < 3; i++) {
88-
if (metadata) {
89-
return metadata;
90-
}
91-
await timeout(2000);
87+
88+
if (metadata) {
89+
return metadata;
9290
}
93-
return undefined;
91+
92+
await Promise.race([
93+
activate,
94+
Event.toPromise(Event.filter(this._chatProviderService.onDidChangeProviders, e => Boolean(e.added?.includes(providerId))))
95+
]);
96+
97+
return this._chatProviderService.lookupChatResponseProvider(providerId);
9498
}
9599

96100
async $fetchResponse(extension: ExtensionIdentifier, providerId: string, requestId: number, messages: IChatMessage[], options: {}, token: CancellationToken): Promise<any> {

0 commit comments

Comments
 (0)