Skip to content

Commit 28f8186

Browse files
waleedlatif1claude
andcommitted
refactor: remove getProviderFromModel regex fallback from API key validation
The fallback was the last piece of regex-based matching in the function and only ran for self-hosted without OLLAMA_URL on the server — a path where Ollama models cannot appear in the dropdown anyway. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3f855a1 commit 28f8186

File tree

2 files changed

+11
-64
lines changed

2 files changed

+11
-64
lines changed

apps/sim/blocks/utils.test.ts

Lines changed: 11 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,13 @@ const { mockIsHosted, mockIsAzureConfigured, mockIsOllamaConfigured } = vi.hoist
99
mockIsOllamaConfigured: { value: false },
1010
}))
1111

12-
const {
13-
mockGetHostedModels,
14-
mockGetProviderModels,
15-
mockGetProviderIcon,
16-
mockGetProviderFromModel,
17-
mockGetBaseModelProviders,
18-
} = vi.hoisted(() => ({
19-
mockGetHostedModels: vi.fn(() => []),
20-
mockGetProviderModels: vi.fn(() => []),
21-
mockGetProviderIcon: vi.fn(() => null),
22-
mockGetProviderFromModel: vi.fn(() => 'ollama'),
23-
mockGetBaseModelProviders: vi.fn(() => ({})),
24-
}))
12+
const { mockGetHostedModels, mockGetProviderModels, mockGetProviderIcon, mockGetBaseModelProviders } =
13+
vi.hoisted(() => ({
14+
mockGetHostedModels: vi.fn(() => []),
15+
mockGetProviderModels: vi.fn(() => []),
16+
mockGetProviderIcon: vi.fn(() => null),
17+
mockGetBaseModelProviders: vi.fn(() => ({})),
18+
}))
2519

2620
const { mockProviders } = vi.hoisted(() => ({
2721
mockProviders: {
@@ -51,7 +45,6 @@ vi.mock('@/providers/models', () => ({
5145
getHostedModels: mockGetHostedModels,
5246
getProviderModels: mockGetProviderModels,
5347
getProviderIcon: mockGetProviderIcon,
54-
getProviderFromModel: mockGetProviderFromModel,
5548
getBaseModelProviders: mockGetBaseModelProviders,
5649
}))
5750

@@ -71,30 +64,6 @@ vi.mock('@/lib/oauth/utils', () => ({
7164

7265
import { getApiKeyCondition } from '@/blocks/utils'
7366

74-
/**
75-
* Simulates getProviderFromModel behavior: checks known prefix patterns,
76-
* defaults to 'ollama' for unrecognized models (matching real implementation).
77-
*/
78-
function simulateGetProviderFromModel(model: string): string {
79-
const m = model.toLowerCase()
80-
if (m.startsWith('fireworks/')) return 'fireworks'
81-
if (m.startsWith('openrouter/')) return 'openrouter'
82-
if (m.startsWith('vllm/')) return 'vllm'
83-
if (m.startsWith('vertex/')) return 'vertex'
84-
if (m.startsWith('bedrock/')) return 'bedrock'
85-
if (m.startsWith('azure/')) return 'azure-openai'
86-
if (m.startsWith('azure-openai/')) return 'azure-openai'
87-
if (m.startsWith('azure-anthropic/')) return 'azure-anthropic'
88-
if (m.startsWith('groq/')) return 'groq'
89-
if (m.startsWith('cerebras/')) return 'cerebras'
90-
if (/^gpt/.test(m) || /^o\d/.test(m)) return 'openai'
91-
if (/^claude/.test(m)) return 'anthropic'
92-
if (/^gemini/.test(m)) return 'google'
93-
if (/^grok/.test(m)) return 'xai'
94-
if (/^mistral/.test(m) || /^magistral/.test(m)) return 'mistral'
95-
return 'ollama'
96-
}
97-
9867
const BASE_CLOUD_MODELS: Record<string, string> = {
9968
'gpt-4o': 'openai',
10069
'claude-sonnet-4-5': 'anthropic',
@@ -125,7 +94,6 @@ describe('getApiKeyCondition / shouldRequireApiKeyForModel', () => {
12594
}
12695
mockGetHostedModels.mockReturnValue([])
12796
mockGetProviderModels.mockReturnValue([])
128-
mockGetProviderFromModel.mockImplementation(simulateGetProviderFromModel)
12997
mockGetBaseModelProviders.mockReturnValue({})
13098
})
13199

@@ -278,26 +246,13 @@ describe('getApiKeyCondition / shouldRequireApiKeyForModel', () => {
278246
})
279247
})
280248

281-
describe('self-hosted getProviderFromModel fallback', () => {
282-
it('does not require API key when getProviderFromModel defaults to ollama', () => {
283-
mockIsHosted.value = false
284-
mockIsOllamaConfigured.value = false
285-
expect(evaluateCondition('llama3:latest')).toBe(false)
286-
expect(evaluateCondition('phi3:latest')).toBe(false)
287-
})
288-
289-
it('requires API key when getProviderFromModel returns a cloud provider', () => {
249+
describe('self-hosted without OLLAMA_URL', () => {
250+
it('requires API key for any model (Ollama models cannot appear without OLLAMA_URL)', () => {
290251
mockIsHosted.value = false
291252
mockIsOllamaConfigured.value = false
292-
expect(evaluateCondition('mistral:latest')).toBe(true)
293-
expect(evaluateCondition('gpt2')).toBe(true)
294-
})
295-
296-
it('does not run getProviderFromModel fallback on hosted platform', () => {
297-
mockIsHosted.value = true
298-
mockGetHostedModels.mockReturnValue([])
299253
expect(evaluateCondition('llama3:latest')).toBe(true)
300-
expect(mockGetProviderFromModel).not.toHaveBeenCalled()
254+
expect(evaluateCondition('mistral:latest')).toBe(true)
255+
expect(evaluateCondition('gpt-4o')).toBe(true)
301256
})
302257
})
303258
})

apps/sim/blocks/utils.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type { BlockOutput, OutputFieldDefinition, SubBlockConfig } from '@/block
44
import {
55
getBaseModelProviders,
66
getHostedModels,
7-
getProviderFromModel,
87
getProviderIcon,
98
getProviderModels,
109
} from '@/providers/models'
@@ -155,13 +154,6 @@ function shouldRequireApiKeyForModel(model: string): boolean {
155154
return false
156155
}
157156

158-
if (!isHosted) {
159-
try {
160-
const providerId = getProviderFromModel(model)
161-
if (['ollama', 'vllm', 'vertex', 'bedrock'].includes(providerId)) return false
162-
} catch {}
163-
}
164-
165157
return true
166158
}
167159

0 commit comments

Comments
 (0)