Skip to content

Commit 2823ad5

Browse files
committed
ack PR comments
1 parent e5e5f90 commit 2823ad5

File tree

2 files changed

+72
-10
lines changed

2 files changed

+72
-10
lines changed

apps/sim/providers/utils.test.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as environmentModule from '@/lib/core/config/feature-flags'
33
import {
44
calculateCost,
55
extractAndParseJSON,
6+
filterBlacklistedModels,
67
formatCost,
78
generateStructuredOutputInstructions,
89
getAllModelProviders,
@@ -17,6 +18,7 @@ import {
1718
getProviderConfigFromModel,
1819
getProviderFromModel,
1920
getProviderModels,
21+
isProviderBlacklisted,
2022
MODELS_TEMP_RANGE_0_1,
2123
MODELS_TEMP_RANGE_0_2,
2224
MODELS_WITH_REASONING_EFFORT,
@@ -976,3 +978,46 @@ describe('Tool Management', () => {
976978
})
977979
})
978980
})
981+
982+
describe('Provider/Model Blacklist', () => {
983+
describe('isProviderBlacklisted', () => {
984+
it.concurrent('should return false when no providers are blacklisted', () => {
985+
expect(isProviderBlacklisted('openai')).toBe(false)
986+
expect(isProviderBlacklisted('anthropic')).toBe(false)
987+
})
988+
})
989+
990+
describe('filterBlacklistedModels', () => {
991+
it.concurrent('should return all models when no blacklist is set', () => {
992+
const models = ['gpt-4o', 'claude-sonnet-4-5', 'gemini-2.5-pro']
993+
const result = filterBlacklistedModels(models)
994+
expect(result).toEqual(models)
995+
})
996+
997+
it.concurrent('should return empty array for empty input', () => {
998+
const result = filterBlacklistedModels([])
999+
expect(result).toEqual([])
1000+
})
1001+
})
1002+
1003+
describe('getBaseModelProviders blacklist filtering', () => {
1004+
it.concurrent('should return providers when no blacklist is set', () => {
1005+
const providers = getBaseModelProviders()
1006+
expect(Object.keys(providers).length).toBeGreaterThan(0)
1007+
expect(providers['gpt-4o']).toBe('openai')
1008+
expect(providers['claude-sonnet-4-5']).toBe('anthropic')
1009+
})
1010+
})
1011+
1012+
describe('getProviderFromModel execution-time enforcement', () => {
1013+
it.concurrent('should return provider for non-blacklisted models', () => {
1014+
expect(getProviderFromModel('gpt-4o')).toBe('openai')
1015+
expect(getProviderFromModel('claude-sonnet-4-5')).toBe('anthropic')
1016+
})
1017+
1018+
it.concurrent('should be case insensitive', () => {
1019+
expect(getProviderFromModel('GPT-4O')).toBe('openai')
1020+
expect(getProviderFromModel('CLAUDE-SONNET-4-5')).toBe('anthropic')
1021+
})
1022+
})
1023+
})

apps/sim/providers/utils.ts

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,22 +155,39 @@ export function getAllModelProviders(): Record<string, ProviderId> {
155155

156156
export function getProviderFromModel(model: string): ProviderId {
157157
const normalizedModel = model.toLowerCase()
158-
if (normalizedModel in getAllModelProviders()) {
159-
return getAllModelProviders()[normalizedModel]
160-
}
161158

162-
for (const [providerId, config] of Object.entries(providers)) {
163-
if (config.modelPatterns) {
164-
for (const pattern of config.modelPatterns) {
165-
if (pattern.test(normalizedModel)) {
166-
return providerId as ProviderId
159+
let providerId: ProviderId | null = null
160+
161+
if (normalizedModel in getAllModelProviders()) {
162+
providerId = getAllModelProviders()[normalizedModel]
163+
} else {
164+
for (const [id, config] of Object.entries(providers)) {
165+
if (config.modelPatterns) {
166+
for (const pattern of config.modelPatterns) {
167+
if (pattern.test(normalizedModel)) {
168+
providerId = id as ProviderId
169+
break
170+
}
167171
}
168172
}
173+
if (providerId) break
169174
}
170175
}
171176

172-
logger.warn(`No provider found for model: ${model}, defaulting to ollama`)
173-
return 'ollama'
177+
if (!providerId) {
178+
logger.warn(`No provider found for model: ${model}, defaulting to ollama`)
179+
providerId = 'ollama'
180+
}
181+
182+
if (isProviderBlacklisted(providerId)) {
183+
throw new Error(`Provider "${providerId}" is not available`)
184+
}
185+
186+
if (isModelBlacklisted(normalizedModel)) {
187+
throw new Error(`Model "${model}" is not available`)
188+
}
189+
190+
return providerId
174191
}
175192

176193
export function getProvider(id: string): ProviderMetadata | undefined {

0 commit comments

Comments
 (0)