Skip to content

Commit c1a3626

Browse files
committed
feat: Add OpenRouter free models fetching
1 parent 1ee8980 commit c1a3626

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/vs/workbench/contrib/void/common/voidSettingsService.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
246246
) {
247247
super()
248248

249+
this._fetchOpenRouterFreeModels()
249250
// at the start, we haven't read the partial config yet, but we need to set state to something
250251
this.state = defaultState()
251252
let resolver: () => void = () => { }
@@ -289,7 +290,7 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
289290
}
290291
// add disableSystemMessage feature
291292
if (readS.globalSettings.disableSystemMessage === undefined) readS.globalSettings.disableSystemMessage = false;
292-
293+
293294
// add autoAcceptLLMChanges feature
294295
if (readS.globalSettings.autoAcceptLLMChanges === undefined) readS.globalSettings.autoAcceptLLMChanges = false;
295296
}
@@ -365,6 +366,28 @@ class VoidSettingsService extends Disposable implements IVoidSettingsService {
365366
this._storageService.store(VOID_SETTINGS_STORAGE_KEY, encryptedState, StorageScope.APPLICATION, StorageTarget.USER);
366367
}
367368

369+
private async _fetchOpenRouterFreeModels() {
370+
const res = await fetch('https://openrouter.ai/api/v1/models');
371+
372+
if (res.status !== 200) {
373+
throw new Error(`[${res.status}] Error fetching OpenRouter models: ${res.statusText}`);
374+
}
375+
interface OpenRouterModel {
376+
id: string
377+
name: string
378+
}
379+
const { data: models } = await res.json() as { data: [OpenRouterModel] };
380+
const freeModels = models.filter(m => m.id.includes(':free'));
381+
const providerName = 'openRouter';
382+
for (const model of freeModels) {
383+
this.addModel(providerName, model.id);
384+
}
385+
const modelsToDelete = this.state.settingsOfProvider[providerName].models.filter(m => freeModels.some(f => f.id === m.modelName) === false && m.modelName.includes(':free'));
386+
for (const m of modelsToDelete) {
387+
this.deleteModel(providerName, m.modelName);
388+
}
389+
}
390+
368391
setSettingOfProvider: SetSettingOfProviderFn = async (providerName, settingName, newVal) => {
369392

370393
const newModelSelectionOfFeature = this.state.modelSelectionOfFeature

0 commit comments

Comments
 (0)