Skip to content

Instantly share code, notes, and snippets.

@avimar
Created September 26, 2024 13:28
Show Gist options
  • Select an option

  • Save avimar/e8f39f59f345157482f73efaee529086 to your computer and use it in GitHub Desktop.

Select an option

Save avimar/e8f39f59f345157482f73efaee529086 to your computer and use it in GitHub Desktop.

Revisions

  1. avimar created this gist Sep 26, 2024.
    66 changes: 66 additions & 0 deletions FetchOpenRouterVision.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,66 @@
    const https = require('https');

    function fetchJSON(url) {
    return new Promise((resolve, reject) => {
    https.get(url, (response) => {
    if (response.statusCode !== 200) {
    reject(new Error(`HTTP error! status: ${response.statusCode}`));
    return;
    }
    let data = '';
    response.on('data', (chunk) => {
    data += chunk;
    });
    response.on('end', () => {
    try {
    const jsonResult = JSON.parse(data);
    resolve(jsonResult);
    } catch (error) {
    reject(new Error('Error parsing JSON: ' + error.message));
    }
    });
    }).on('error', (error) => {
    reject(new Error('Error fetching JSON: ' + error.message));
    });
    });
    }

    // Usage example:
    // fetchJSON('https://api.example.com/data')
    // .then(result => console.log(result))
    // .catch(error => console.error(error));


    async function listOpenRouterModels() {
    const response = await fetchJSON('https://openrouter.ai/api/v1/models');
    var allModels = response.data;

    const imageInput = allModels.filter(function(model){
    if(model.architecture.modality === 'text+image->text') return true; //current happy path, but to future proof:

    const input = model.architecture.modality.split('->')[0];
    if(input.includes('image')) return true;

    if(parseFloat(model.pricing.image)>0) return true;

    return false;
    });
    return imageInput.map(model => model.id)
    }

    async function run(){
    try{
    const results = await listOpenRouterModels();
    console.log('Models with image modality input or price for images:');
    console.log(results);
    }
    catch (error) {
    console.error(error);
    }
    }

    if(module === require.main) {
    run();
    }

    module.exports = listOpenRouterModels;