@@ -130,7 +130,6 @@ const AIConfigPopup = ({ isOpen, onClose }: AIConfigPopupProps) => {
130130
131131 useEffect ( ( ) => {
132132 setAvailableModels ( [ ] ) ;
133- setModel ( '' ) ;
134133 if ( ! provider || ! debouncedApiKey ) return ;
135134
136135 const controller = new AbortController ( ) ;
@@ -159,28 +158,36 @@ const AIConfigPopup = ({ isOpen, onClose }: AIConfigPopupProps) => {
159158 }
160159
161160 const data = await res . json ( ) ;
162- if ( ! signal . aborted ) setAvailableModels ( data . data ?. map ( ( m : any ) => m . id ) || [ ] ) ;
161+ if ( ! signal . aborted ) {
162+ let models = data . data ?. map ( ( m : any ) => m . id ) || [ ]
163+ setAvailableModels ( models ) ;
164+ setModel ( prev => models . includes ( prev ) ? prev : '' ) ;
165+ }
163166 break ;
164167
165168 case 'anthropic' :
166- if ( ! apiKey ) return ;
167- {
168- const res = await fetch ( 'https://api.anthropic.com/v1/models' , {
169- headers : {
170- 'x-api-key' : apiKey ,
171- 'anthropic-version' : '2023-06-01' ,
172- 'content-type ' : 'application/json ' ,
173- } ,
174- signal,
175- } ) ;
169+ if ( ! apiKey ) return ;
170+ {
171+ const res = await fetch ( 'https://api.anthropic.com/v1/models' , {
172+ headers : {
173+ 'x-api-key' : apiKey ,
174+ 'anthropic-version' : '2023-06-01' ,
175+ 'anthropic-dangerous-direct-browser-access ' : 'true ' ,
176+ } ,
177+ signal,
178+ } ) ;
176179 if ( ! res . ok ) {
177180 console . error ( `Fetch error (${ res . status } ): ${ res . statusText } ` ) ;
178181 return ;
179182 }
180- const data = await res . json ( ) ;
181- if ( ! signal . aborted ) setAvailableModels ( data . models ?. map ( ( m : any ) => m . name ) || [ ] ) ;
182- }
183- break ;
183+ const data = await res . json ( ) ;
184+ if ( ! signal . aborted ) {
185+ let models = data . data ?. map ( ( m : any ) => m . id ) || [ ] ;
186+ setAvailableModels ( models ) ;
187+ setModel ( prev => models . includes ( prev ) ? prev : '' ) ;
188+ }
189+ }
190+ break ;
184191
185192 case 'google' :
186193 if ( ! apiKey ) return ;
@@ -194,7 +201,11 @@ const AIConfigPopup = ({ isOpen, onClose }: AIConfigPopupProps) => {
194201 return ;
195202 }
196203 const data = await res . json ( ) ;
197- if ( ! signal . aborted ) setAvailableModels ( data . models ?. map ( ( m : any ) => m . name ) || [ ] ) ;
204+ if ( ! signal . aborted ) {
205+ let models = data . models ?. map ( ( m : any ) => m . name ) || [ ] ;
206+ setAvailableModels ( models ) ;
207+ setModel ( prev => models . includes ( prev ) ? prev : '' ) ;
208+ }
198209 }
199210 break ;
200211
@@ -210,7 +221,11 @@ const AIConfigPopup = ({ isOpen, onClose }: AIConfigPopupProps) => {
210221 return ;
211222 }
212223 const data = await res . json ( ) ;
213- if ( ! signal . aborted ) setAvailableModels ( data . models ?. map ( ( m : any ) => m . name ) || [ ] ) ;
224+ if ( ! signal . aborted ) {
225+ let models = data . models ?. map ( ( m : any ) => m . id ) || [ ] ;
226+ setAvailableModels ( models ) ;
227+ setModel ( prev => models . includes ( prev ) ? prev : '' ) ;
228+ }
214229 }
215230 break ;
216231
@@ -222,7 +237,11 @@ const AIConfigPopup = ({ isOpen, onClose }: AIConfigPopupProps) => {
222237 return ;
223238 }
224239 const data = await res . json ( ) ;
225- if ( ! signal . aborted ) setAvailableModels ( data . models ?. map ( ( m : any ) => m . name || m . model ) || [ ] ) ;
240+ if ( ! signal . aborted ) {
241+ let models = data . models ?. map ( ( m : any ) => m . name || m . model ) || [ ] ;
242+ setAvailableModels ( models ) ;
243+ setModel ( prev => models . includes ( prev ) ? prev : '' ) ;
244+ }
226245 }
227246 break ;
228247
@@ -238,7 +257,11 @@ const AIConfigPopup = ({ isOpen, onClose }: AIConfigPopupProps) => {
238257 return ;
239258 }
240259 const data = await res . json ( ) ;
241- if ( ! signal . aborted ) setAvailableModels ( data . models ?. map ( ( m : any ) => m . name ) || [ ] ) ;
260+ if ( ! signal . aborted ) {
261+ let models = data . data ?. map ( ( m : any ) => m . id ) || [ ] ;
262+ setAvailableModels ( models ) ;
263+ setModel ( prev => models . includes ( prev ) ? prev : '' ) ;
264+ }
242265 }
243266 break ;
244267
@@ -260,6 +283,12 @@ const AIConfigPopup = ({ isOpen, onClose }: AIConfigPopupProps) => {
260283 } ;
261284 } , [ provider , debouncedApiKey , customEndpoint ] ) ;
262285
286+ useEffect ( ( ) => {
287+ if ( availableModels . length > 0 && model && ! availableModels . includes ( model ) ) {
288+ setModel ( '' ) ;
289+ }
290+ } , [ model , availableModels ] ) ;
291+
263292 const handleSave = async ( ) => {
264293 localStorage . setItem ( 'aiProvider' , provider ) ;
265294 localStorage . setItem ( 'aiModel' , model ) ;
0 commit comments