Changeset 0.23.0 (#153)

This commit is contained in:
2026-03-05 22:40:26 +00:00
parent 40d9834f64
commit 2fc620e1ac
62 changed files with 6214 additions and 362 deletions

View File

@@ -131,7 +131,7 @@ function processModelsResponse(data, hiddenModels = new Set()) {
return (data.models || []).map(m => {
const isPersona = !!m.is_persona;
const baseModelId = m.model_id || m.id;
const cfgId = m.config_id || m.provider_config_id;
const cfgId = m.config_id || m.provider_config_id || '';
const id = isPersona
? (m.persona_id || m.id)
: (cfgId ? `${cfgId}:${baseModelId}` : baseModelId);
@@ -143,12 +143,13 @@ function processModelsResponse(data, hiddenModels = new Set()) {
configId: cfgId || null,
isPersona,
personaId: m.persona_id || null,
personaHandle: m.persona_handle || null,
personaScope: m.persona_scope || (isPersona ? m.scope : null) || null,
personaAvatar: m.persona_avatar || (isPersona ? m.avatar : null) || null,
personaTeamName: m.persona_team_name || (isPersona ? m.team_name : null) || null,
source: m.source || (isPersona ? 'persona' : 'global'),
teamName: m.persona_team_name || null,
hidden: !isPersona && hiddenModels.has(baseModelId),
hidden: !isPersona && hiddenModels.has((cfgId || '') + ':' + baseModelId),
};
});
}

View File

@@ -111,6 +111,7 @@ describe('processModelsResponse — personas', () => {
persona_id: 'preset-uuid',
persona_scope: 'global',
persona_avatar: '/avatars/code.png',
persona_handle: 'code-helper',
persona_team_name: null,
config_id: 'cfg-uuid',
provider_name: 'OpenAI',
@@ -147,6 +148,7 @@ describe('processModelsResponse — personas', () => {
const models = processModelsResponse(apiResponse);
assert.equal(models[0].personaScope, 'global');
assert.equal(models[0].personaAvatar, '/avatars/code.png');
assert.equal(models[0].personaHandle, 'code-helper');
assert.equal(models[0].personaId, 'preset-uuid');
});
@@ -208,8 +210,8 @@ describe('processModelsResponse — hidden models', () => {
],
};
it('marks models as hidden from user prefs', () => {
const hidden = new Set(['gpt-4o']);
it('marks models as hidden from user prefs (composite key)', () => {
const hidden = new Set(['c1:gpt-4o']);
const models = processModelsResponse(apiResponse, hidden);
assert.equal(models[0].hidden, true, 'gpt-4o should be hidden');
assert.equal(models[1].hidden, false, 'claude-3 should NOT be hidden');
@@ -221,7 +223,7 @@ describe('processModelsResponse — hidden models', () => {
{ model_id: 'gpt-4o', is_persona: true, persona_id: 'p1', display_name: 'Persona' },
],
};
const hidden = new Set(['gpt-4o']);
const hidden = new Set([':gpt-4o']);
const models = processModelsResponse(resp, hidden);
assert.equal(models[0].hidden, false,
'personas must NOT be hidden by base model hidden pref');

View File

@@ -314,7 +314,7 @@ describe('Edge: provider_config_id only (no config_id alias)', () => {
describe('Edge: Hidden model preferences', () => {
it('marks hidden models correctly', () => {
const hidden = new Set(['gpt-4o-mini']);
const hidden = new Set(['cfg-global-openai:gpt-4o-mini']);
const models = processModelsResponse({ models: GLOBAL_MODELS }, hidden);
const mini = models.find(m => m.baseModelId === 'gpt-4o-mini');
const main = models.find(m => m.baseModelId === 'gpt-4o');
@@ -324,7 +324,7 @@ describe('Edge: Hidden model preferences', () => {
it('personas are never hidden', () => {
const persona = personaModel('preset-1', 'gpt-4o', 'global');
const hidden = new Set(['gpt-4o']);
const hidden = new Set([':gpt-4o']);
const models = processModelsResponse({ models: [persona] }, hidden);
assert.equal(models[0].hidden, false, 'personas must never be hidden');
});