fix: harden provider recommendation safety

This commit is contained in:
Vasanthdev2004
2026-04-01 11:55:24 +05:30
parent 174eb8ad3b
commit 8fe03cba57
10 changed files with 434 additions and 141 deletions

View File

@@ -83,6 +83,19 @@ test('non-chat embedding models are heavily demoted', () => {
assert.equal(ranked[0]?.name, 'mistral:7b-instruct')
})
test('auto-pick ignores non-chat ollama models', () => {
const recommended = recommendOllamaModel(
[
model('nomic-embed-text', { parameterSize: '0.5B' }),
model('bge-reranker-v2', { parameterSize: '1.5B' }),
model('whisper-large-v3', { parameterSize: '1.6B' }),
],
'balanced',
)
assert.equal(recommended, null)
})
test('benchmark latency can reorder close recommendations', () => {
const ranked = rankOllamaModels(
[
@@ -111,6 +124,69 @@ test('benchmark latency can reorder close recommendations', () => {
assert.equal(benchmarked[0]?.benchmarkMs, 350)
})
test('unbenchmarked models stay behind benchmarked candidates', () => {
const ranked = rankOllamaModels(
[
model('phi4-mini:4b', {
parameterSize: '4B',
quantizationLevel: 'Q4_K_M',
}),
model('mistral:7b-instruct', {
parameterSize: '7B',
quantizationLevel: 'Q4_K_M',
}),
model('llama3.1:8b', {
parameterSize: '8B',
quantizationLevel: 'Q4_K_M',
}),
model('qwen2.5:14b', {
parameterSize: '14B',
quantizationLevel: 'Q4_K_M',
}),
],
'latency',
)
const benchmarked = applyBenchmarkLatency(
ranked,
{
'phi4-mini:4b': 2400,
'mistral:7b-instruct': 2200,
'llama3.1:8b': 2100,
},
'latency',
)
assert.ok(benchmarked.slice(0, 3).every(item => item.benchmarkMs !== null))
assert.equal(benchmarked[3]?.name, 'qwen2.5:14b')
assert.equal(benchmarked[3]?.benchmarkMs, null)
})
test('coding goal recognizes codestral and devstral families', () => {
const ranked = rankOllamaModels(
[
model('mistral:7b-instruct', {
parameterSize: '7B',
quantizationLevel: 'Q4_K_M',
}),
model('codestral:22b', {
parameterSize: '22B',
quantizationLevel: 'Q4_K_M',
}),
model('devstral:24b', {
parameterSize: '24B',
quantizationLevel: 'Q4_K_M',
}),
],
'coding',
)
assert.deepEqual(ranked.slice(0, 2).map(item => item.name), [
'devstral:24b',
'codestral:22b',
])
})
test('goal defaults choose sensible openai models', () => {
assert.equal(getGoalDefaultOpenAIModel('latency'), 'gpt-4o-mini')
assert.equal(getGoalDefaultOpenAIModel('balanced'), 'gpt-4o')