openvibers/openvibe.ai Commits
Match market routing to exact provider endpoints (#413)
Changes
@@@ -28,7 +28,8 @@ function buildOffers({ providers = [], rows = [], changes = [], catalogue = {},if (publicKeys.has(row.provider_key) && (ownUrls.has(row.cost?.source) || ownUrls.has(row.metadata?.price_book?.source))) records.set(recordKey(row.provider_key, row.model_key), row);}for (const observed of observations) {-- const key = [...records.keys()].find(k => {++ const exactKey = recordKey(observed.provider_key, observed.model_key);++ const key = records.has(exactKey) ? exactKey : [...records.keys()].find(k => {const r = records.get(k);return r.provider_key === observed.provider_key && bare(r.model_key) === bare(observed.model_key);}) || recordKey(observed.provider_key, observed.model_key);@@@ -54,7 +55,7 @@ function buildOffers({ providers = [], rows = [], changes = [], catalogue = {},provider_model: row.model_key, name: row.display_name || row.model_key, kind: kindOf(row),price: { in: num(row.cost?.in_per_mtok), out: num(row.cost?.out_per_mtok), cached: num(row.cost?.cached_per_mtok), currency: 'USD', per: '1M tokens' },price_source: webUrl(row.cost?.source), price_checked_at: row.cost?.verified_at || facts.checked || null,-- routed: routed.some(o => o.provider === p.key && bare(o.model) === bare(row.model_key)),++ routed: routed.some(o => o.provider === p.key && String(o.model).toLowerCase() === String(row.model_key).toLowerCase()),uncensored: seed?.m.uncensored === true || presets.find(preset => preset.key === p.key)?.uncensored === true,provider_access: p.provider_access || 'UNVERIFIED', field_sources: {},};@@@ -12,7 +12,7 @@ const dev = require('./fixtures/market/models-dev.json');const files = { deepseek:'deepseek.md', qwen:'qwen.html', kimi:'kimi.html', glm:'glm.md', minimax:'minimax.md', deepinfra:'deepinfra.json', novita:'novita.json', featherless:'featherless.json', refuseless:'refuseless.md', abliteration:'abliteration.md' };const observations = [];for (const s of SOURCES.filter(s => s.role === 'own')) {-- const raw = fs.readFileSync(path.join(__dirname, 'fixtures/pricebook', files[s.key]), 'utf8');++ const raw = fs.readFileSync(path.join(__dirname, 'fixtures/pricebook', files[s.key] || `${s.key}.json`), 'utf8');for (const [model_key, price] of Object.entries(s.parse(s.kind === 'json' ? JSON.parse(raw) : raw))) observations.push({ provider_key: s.provider, model_key, price, source: s.url, checked_at: '2026-11-09' });}const t = suite('exchange-market'); let h;@@@ -20,7 +20,7 @@ t.test('production presets and recorded pages include disabled and unregisteredconst offers = buildOffers({ observations, metadata: { entries: indexMetadata(dev) } });const snapshot = { generated_at: '2026-11-09T00:00:00Z', metadata: { source: 'https://models.dev/api.json', checked_at: null, stale: true }, offers };const page = pageMarket(snapshot, { limit: 500 });-- assert.strictEqual(page.total_models, 52); assert.strictEqual(page.total_offers, 61); assert(offers.every(o => !o.routed));++ assert(observations.every(row => offers.some(o => o.provider === row.provider_key && bare(o.provider_model) === bare(row.model_key))), 'every recorded own-page model is listed'); assert(offers.every(o => !o.routed));assert(offers.some(o => o.price.in === null)); assert(offers.some(o => o.uncensored));const providerFlag = buildOffers({ observations: [{ provider_key: 'refuseless', model_key: 'new-fixture-model', price: { in: null, out: null, cached: null }, source: 'https://refuseless.com', checked_at: '2026-11-09' }] });assert.strictEqual(providerFlag.find(o => o.provider_model === 'new-fixture-model').uncensored, true, 'new models retain their provider preset flag');@@@ -36,6 +36,8 @@ t.test('routing belongs to a provider offer; metadata joins dated names, pricesconst offers = buildOffers({ metadata: { entries }, catalogue: { models: [{ offers:[{provider:p.key, model:m.model_key}] }] },providers: [{ ...p, status:'disabled', secret_ref:'must-not-be-exported', metadata:{account_id:'private-account'} }] });const offer = offers.find(o => o.provider === p.key && o.provider_model === m.model_key);++ const aliasOnly = buildOffers({ catalogue: { models: [{ offers: [{ provider: p.key, model: m.model_key + '-latest' }] }] } });++ assert.strictEqual(aliasOnly.find(o => o.provider === p.key && o.provider_model === m.model_key).routed, false, 'metadata aliases must not mark an unrouted endpoint as routed');assert(offer.routed); assert.strictEqual(offer.context,m.context_window); assert.strictEqual(offer.max_output,42);assert.strictEqual(offer.licence,'Apache-2.0'); assert.strictEqual(offer.field_sources.licence,'https://models.dev/api.json');assert.strictEqual(offer.field_sources.context,m.source); assert.strictEqual(offer.price.in,m.cost.in_per_mtok);
@@ -28,7 +28,8 @@ function buildOffers({ providers = [], rows = [], changes = [], catalogue = {},
@@ -28,7 +28,8 @@ function buildOffers({ providers = [], rows = [], changes = [], catalogue = {},
if (publicKeys.has(row.provider_key) && (ownUrls.has(row.cost?.source) || ownUrls.has(row.metadata?.price_book?.source))) records.set(recordKey(row.provider_key, row.model_key), row);
if (publicKeys.has(row.provider_key) && (ownUrls.has(row.cost?.source) || ownUrls.has(row.metadata?.price_book?.source))) records.set(recordKey(row.provider_key, row.model_key), row);
}
}
for (const observed of observations) {
for (const observed of observations) {
- const key = [...records.keys()].find(k => {
+ const exactKey = recordKey(observed.provider_key, observed.model_key);
+ const key = records.has(exactKey) ? exactKey : [...records.keys()].find(k => {
const r = records.get(k);
const r = records.get(k);
return r.provider_key === observed.provider_key && bare(r.model_key) === bare(observed.model_key);
return r.provider_key === observed.provider_key && bare(r.model_key) === bare(observed.model_key);
}) || recordKey(observed.provider_key, observed.model_key);
}) || recordKey(observed.provider_key, observed.model_key);
@@ -54,7 +55,7 @@ function buildOffers({ providers = [], rows = [], changes = [], catalogue = {},
@@ -54,7 +55,7 @@ function buildOffers({ providers = [], rows = [], changes = [], catalogue = {},
provider_model: row.model_key, name: row.display_name || row.model_key, kind: kindOf(row),
provider_model: row.model_key, name: row.display_name || row.model_key, kind: kindOf(row),
price: { in: num(row.cost?.in_per_mtok), out: num(row.cost?.out_per_mtok), cached: num(row.cost?.cached_per_mtok), currency: 'USD', per: '1M tokens' },
price: { in: num(row.cost?.in_per_mtok), out: num(row.cost?.out_per_mtok), cached: num(row.cost?.cached_per_mtok), currency: 'USD', per: '1M tokens' },
price_source: webUrl(row.cost?.source), price_checked_at: row.cost?.verified_at || facts.checked || null,
price_source: webUrl(row.cost?.source), price_checked_at: row.cost?.verified_at || facts.checked || null,
- routed: routed.some(o => o.provider === p.key && bare(o.model) === bare(row.model_key)),
+ routed: routed.some(o => o.provider === p.key && String(o.model).toLowerCase() === String(row.model_key).toLowerCase()),
uncensored: seed?.m.uncensored === true || presets.find(preset => preset.key === p.key)?.uncensored === true,
uncensored: seed?.m.uncensored === true || presets.find(preset => preset.key === p.key)?.uncensored === true,
provider_access: p.provider_access || 'UNVERIFIED', field_sources: {},
provider_access: p.provider_access || 'UNVERIFIED', field_sources: {},
};
};
@@ -12,7 +12,7 @@ const dev = require('./fixtures/market/models-dev.json');
@@ -12,7 +12,7 @@ const dev = require('./fixtures/market/models-dev.json');
const files = { deepseek:'deepseek.md', qwen:'qwen.html', kimi:'kimi.html', glm:'glm.md', minimax:'minimax.md', deepinfra:'deepinfra.json', novita:'novita.json', featherless:'featherless.json', refuseless:'refuseless.md', abliteration:'abliteration.md' };
const files = { deepseek:'deepseek.md', qwen:'qwen.html', kimi:'kimi.html', glm:'glm.md', minimax:'minimax.md', deepinfra:'deepinfra.json', novita:'novita.json', featherless:'featherless.json', refuseless:'refuseless.md', abliteration:'abliteration.md' };
const observations = [];
const observations = [];
for (const s of SOURCES.filter(s => s.role === 'own')) {
for (const s of SOURCES.filter(s => s.role === 'own')) {
- const raw = fs.readFileSync(path.join(__dirname, 'fixtures/pricebook', files[s.key]), 'utf8');
+ const raw = fs.readFileSync(path.join(__dirname, 'fixtures/pricebook', files[s.key] || `${s.key}.json`), 'utf8');
for (const [model_key, price] of Object.entries(s.parse(s.kind === 'json' ? JSON.parse(raw) : raw))) observations.push({ provider_key: s.provider, model_key, price, source: s.url, checked_at: '2026-11-09' });
for (const [model_key, price] of Object.entries(s.parse(s.kind === 'json' ? JSON.parse(raw) : raw))) observations.push({ provider_key: s.provider, model_key, price, source: s.url, checked_at: '2026-11-09' });
}
}
const t = suite('exchange-market'); let h;
const t = suite('exchange-market'); let h;
@@ -20,7 +20,7 @@ t.test('production presets and recorded pages include disabled and unregistered
@@ -20,7 +20,7 @@ t.test('production presets and recorded pages include disabled and unregistered
const offers = buildOffers({ observations, metadata: { entries: indexMetadata(dev) } });
const offers = buildOffers({ observations, metadata: { entries: indexMetadata(dev) } });
const snapshot = { generated_at: '2026-11-09T00:00:00Z', metadata: { source: 'https://models.dev/api.json', checked_at: null, stale: true }, offers };
const snapshot = { generated_at: '2026-11-09T00:00:00Z', metadata: { source: 'https://models.dev/api.json', checked_at: null, stale: true }, offers };
const page = pageMarket(snapshot, { limit: 500 });
const page = pageMarket(snapshot, { limit: 500 });
- assert.strictEqual(page.total_models, 52); assert.strictEqual(page.total_offers, 61); assert(offers.every(o => !o.routed));
+ assert(observations.every(row => offers.some(o => o.provider === row.provider_key && bare(o.provider_model) === bare(row.model_key))), 'every recorded own-page model is listed'); assert(offers.every(o => !o.routed));
assert(offers.some(o => o.price.in === null)); assert(offers.some(o => o.uncensored));
assert(offers.some(o => o.price.in === null)); assert(offers.some(o => o.uncensored));
const providerFlag = buildOffers({ observations: [{ provider_key: 'refuseless', model_key: 'new-fixture-model', price: { in: null, out: null, cached: null }, source: 'https://refuseless.com', checked_at: '2026-11-09' }] });
const providerFlag = buildOffers({ observations: [{ provider_key: 'refuseless', model_key: 'new-fixture-model', price: { in: null, out: null, cached: null }, source: 'https://refuseless.com', checked_at: '2026-11-09' }] });
assert.strictEqual(providerFlag.find(o => o.provider_model === 'new-fixture-model').uncensored, true, 'new models retain their provider preset flag');
assert.strictEqual(providerFlag.find(o => o.provider_model === 'new-fixture-model').uncensored, true, 'new models retain their provider preset flag');
@@ -36,6 +36,8 @@ t.test('routing belongs to a provider offer; metadata joins dated names, prices
@@ -36,6 +36,8 @@ t.test('routing belongs to a provider offer; metadata joins dated names, prices
const offers = buildOffers({ metadata: { entries }, catalogue: { models: [{ offers:[{provider:p.key, model:m.model_key}] }] },
const offers = buildOffers({ metadata: { entries }, catalogue: { models: [{ offers:[{provider:p.key, model:m.model_key}] }] },
providers: [{ ...p, status:'disabled', secret_ref:'must-not-be-exported', metadata:{account_id:'private-account'} }] });
providers: [{ ...p, status:'disabled', secret_ref:'must-not-be-exported', metadata:{account_id:'private-account'} }] });
const offer = offers.find(o => o.provider === p.key && o.provider_model === m.model_key);
const offer = offers.find(o => o.provider === p.key && o.provider_model === m.model_key);
+ const aliasOnly = buildOffers({ catalogue: { models: [{ offers: [{ provider: p.key, model: m.model_key + '-latest' }] }] } });
+ assert.strictEqual(aliasOnly.find(o => o.provider === p.key && o.provider_model === m.model_key).routed, false, 'metadata aliases must not mark an unrouted endpoint as routed');
assert(offer.routed); assert.strictEqual(offer.context,m.context_window); assert.strictEqual(offer.max_output,42);
assert(offer.routed); assert.strictEqual(offer.context,m.context_window); assert.strictEqual(offer.max_output,42);
assert.strictEqual(offer.licence,'Apache-2.0'); assert.strictEqual(offer.field_sources.licence,'https://models.dev/api.json');
assert.strictEqual(offer.licence,'Apache-2.0'); assert.strictEqual(offer.field_sources.licence,'https://models.dev/api.json');
assert.strictEqual(offer.field_sources.context,m.source); assert.strictEqual(offer.price.in,m.cost.in_per_mtok);
assert.strictEqual(offer.field_sources.context,m.source); assert.strictEqual(offer.price.in,m.cost.in_per_mtok);