Skip to content

Commit 7bcee72

Browse files
committed
fix: guard Ollama SSRF check by provider and skip normalization for single-provider results
1 parent c527867 commit 7bcee72

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

apps/sim/app/api/knowledge/search/route.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,15 +425,16 @@ export async function POST(request: NextRequest) {
425425
// returned unchanged to preserve the original score semantics.
426426
const isMixedProviders = openaiKbIds.length > 0 && ollamaKbIds.length > 0
427427
const normalizeByProvider = (items: SearchResult[]): SearchResult[] => {
428+
const openaiGroup = items.filter((r) => openaiKbIds.includes(r.knowledgeBaseId))
429+
const ollamaGroup = items.filter((r) => ollamaKbIds.includes(r.knowledgeBaseId))
430+
if (openaiGroup.length === 0 || ollamaGroup.length === 0) return items
428431
const normalizeGroup = (group: SearchResult[]): SearchResult[] => {
429432
if (group.length <= 1) return group
430433
const min = Math.min(...group.map((r) => r.distance))
431434
const max = Math.max(...group.map((r) => r.distance))
432435
const range = max - min || 1
433436
return group.map((r) => ({ ...r, distance: (r.distance - min) / range }))
434437
}
435-
const openaiGroup = items.filter((r) => openaiKbIds.includes(r.knowledgeBaseId))
436-
const ollamaGroup = items.filter((r) => ollamaKbIds.includes(r.knowledgeBaseId))
437438
return [...normalizeGroup(openaiGroup), ...normalizeGroup(ollamaGroup)]
438439
}
439440

apps/sim/lib/knowledge/chunks/service.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -167,14 +167,16 @@ export async function createChunk(
167167
const rawKbCfg = kbRows[0].chunkingConfig as { ollamaBaseUrl?: string } | null
168168
const kbOllamaBaseUrl = rawKbCfg?.ollamaBaseUrl
169169

170-
const resolvedCreateUrl = getOllamaBaseUrl(kbOllamaBaseUrl)
171-
if (!isAllowedOllamaUrl(resolvedCreateUrl)) {
172-
throw new Error(`Knowledge base has a disallowed Ollama URL: ${resolvedCreateUrl}`)
173-
}
174-
175170
const { provider } = parseEmbeddingModel(kbEmbeddingModel)
176171
const isOllama = provider === 'ollama'
177172

173+
if (isOllama) {
174+
const resolvedCreateUrl = getOllamaBaseUrl(kbOllamaBaseUrl)
175+
if (!isAllowedOllamaUrl(resolvedCreateUrl)) {
176+
throw new Error(`Knowledge base has a disallowed Ollama URL: ${resolvedCreateUrl}`)
177+
}
178+
}
179+
178180
logger.info(`[${requestId}] Generating embedding for manual chunk`)
179181
const { embeddings, modelName: usedModel } = await generateEmbeddings(
180182
[chunkData.content],
@@ -478,15 +480,17 @@ export async function updateChunk(
478480
const rawCfg = kbRows[0].chunkingConfig as { ollamaBaseUrl?: string } | null
479481
const kbOllamaBaseUrl = rawCfg?.ollamaBaseUrl
480482

481-
const resolvedUpdateUrl = getOllamaBaseUrl(kbOllamaBaseUrl)
482-
if (!isAllowedOllamaUrl(resolvedUpdateUrl)) {
483-
throw new Error(`Knowledge base has a disallowed Ollama URL: ${resolvedUpdateUrl}`)
484-
}
485-
486483
const { provider } = parseEmbeddingModel(kbEmbeddingModel)
487484
const isOllama = provider === 'ollama'
488485
const tableName = isOllama ? kbTableName(knowledgeBaseId) : null
489486

487+
if (isOllama) {
488+
const resolvedUpdateUrl = getOllamaBaseUrl(kbOllamaBaseUrl)
489+
if (!isAllowedOllamaUrl(resolvedUpdateUrl)) {
490+
throw new Error(`Knowledge base has a disallowed Ollama URL: ${resolvedUpdateUrl}`)
491+
}
492+
}
493+
490494
// Content update path — needs a transaction for atomic stat updates
491495
if (updateData.content !== undefined && typeof updateData.content === 'string') {
492496
return await db.transaction(async (tx) => {

0 commit comments

Comments
 (0)