@@ -55,48 +55,53 @@ export class MainThreadLanguageModels implements MainThreadLanguageModelsShape {
5555 }
5656
5757 $registerLanguageModelProvider ( vendor : string ) : void {
58- const disposables = this . _store . add ( new DisposableStore ( ) ) ;
59- disposables . add ( this . _chatProviderService . registerLanguageModelProvider ( vendor , {
60- onDidChange : Event . filter ( this . _lmProviderChange . event , e => e . vendor === vendor , disposables ) as unknown as Event < void > ,
61- provideLanguageModelChatInfo : async ( options , token ) => {
62- const modelsAndIdentifiers = await this . _proxy . $provideLanguageModelChatInfo ( vendor , options , token ) ;
63- modelsAndIdentifiers . forEach ( m => {
64- if ( m . metadata . auth ) {
65- disposables . add ( this . _registerAuthenticationProvider ( m . metadata . extension , m . metadata . auth ) ) ;
58+ const disposables = new DisposableStore ( ) ;
59+ try {
60+ disposables . add ( this . _chatProviderService . registerLanguageModelProvider ( vendor , {
61+ onDidChange : Event . filter ( this . _lmProviderChange . event , e => e . vendor === vendor , disposables ) as unknown as Event < void > ,
62+ provideLanguageModelChatInfo : async ( options , token ) => {
63+ const modelsAndIdentifiers = await this . _proxy . $provideLanguageModelChatInfo ( vendor , options , token ) ;
64+ modelsAndIdentifiers . forEach ( m => {
65+ if ( m . metadata . auth ) {
66+ disposables . add ( this . _registerAuthenticationProvider ( m . metadata . extension , m . metadata . auth ) ) ;
67+ }
68+ } ) ;
69+ return modelsAndIdentifiers ;
70+ } ,
71+ sendChatRequest : async ( modelId , messages , from , options , token ) => {
72+ const requestId = ( Math . random ( ) * 1e6 ) | 0 ;
73+ const defer = new DeferredPromise < any > ( ) ;
74+ const stream = new AsyncIterableSource < IChatResponsePart | IChatResponsePart [ ] > ( ) ;
75+
76+ try {
77+ this . _pendingProgress . set ( requestId , { defer, stream } ) ;
78+ await Promise . all (
79+ messages . flatMap ( msg => msg . content )
80+ . filter ( part => part . type === 'image_url' )
81+ . map ( async part => {
82+ part . value . data = VSBuffer . wrap ( await resizeImage ( part . value . data . buffer ) ) ;
83+ } )
84+ ) ;
85+ await this . _proxy . $startChatRequest ( modelId , requestId , from , new SerializableObjectWithBuffers ( messages ) , options , token ) ;
86+ } catch ( err ) {
87+ this . _pendingProgress . delete ( requestId ) ;
88+ throw err ;
6689 }
67- } ) ;
68- return modelsAndIdentifiers ;
69- } ,
70- sendChatRequest : async ( modelId , messages , from , options , token ) => {
71- const requestId = ( Math . random ( ) * 1e6 ) | 0 ;
72- const defer = new DeferredPromise < any > ( ) ;
73- const stream = new AsyncIterableSource < IChatResponsePart | IChatResponsePart [ ] > ( ) ;
74-
75- try {
76- this . _pendingProgress . set ( requestId , { defer, stream } ) ;
77- await Promise . all (
78- messages . flatMap ( msg => msg . content )
79- . filter ( part => part . type === 'image_url' )
80- . map ( async part => {
81- part . value . data = VSBuffer . wrap ( await resizeImage ( part . value . data . buffer ) ) ;
82- } )
83- ) ;
84- await this . _proxy . $startChatRequest ( modelId , requestId , from , new SerializableObjectWithBuffers ( messages ) , options , token ) ;
85- } catch ( err ) {
86- this . _pendingProgress . delete ( requestId ) ;
87- throw err ;
88- }
8990
90- return {
91- result : defer . p ,
92- stream : stream . asyncIterable
93- } satisfies ILanguageModelChatResponse ;
94- } ,
95- provideTokenCount : ( modelId , str , token ) => {
96- return this . _proxy . $provideTokenLength ( modelId , str , token ) ;
97- } ,
98- } ) ) ;
99- this . _providerRegistrations . set ( vendor , disposables ) ;
91+ return {
92+ result : defer . p ,
93+ stream : stream . asyncIterable
94+ } satisfies ILanguageModelChatResponse ;
95+ } ,
96+ provideTokenCount : ( modelId , str , token ) => {
97+ return this . _proxy . $provideTokenLength ( modelId , str , token ) ;
98+ } ,
99+ } ) ) ;
100+ this . _providerRegistrations . set ( vendor , disposables ) ;
101+ } catch ( err ) {
102+ disposables . dispose ( ) ;
103+ throw err ;
104+ }
100105 }
101106
102107 $onLMProviderChange ( vendor : string ) : void {
0 commit comments