Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion apps/sim/tools/knowledge/create_document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ export const knowledgeCreateDocumentTool: InternalToolConfig<any, KnowledgeCreat
// Handle multiple documents response
const uploadCount = documentsCreated.length
const firstDocument = documentsCreated[0]
const documentId = firstDocument?.documentId || firstDocument?.id || ''

return {
success: true,
Expand All @@ -132,8 +133,9 @@ export const knowledgeCreateDocumentTool: InternalToolConfig<any, KnowledgeCreat
uploadCount > 1
? `Successfully created ${uploadCount} documents in knowledge base`
: `Successfully created document in knowledge base`,
documentId,
data: {
documentId: firstDocument?.documentId || firstDocument?.id || '',
documentId,
documentName:
uploadCount > 1 ? `${uploadCount} documents` : firstDocument?.filename || 'Unknown',
type: 'document',
Expand Down
39 changes: 39 additions & 0 deletions apps/sim/tools/knowledge/knowledge.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,45 @@ describe('Knowledge Tools', () => {
})
})

describe('knowledgeCreateDocumentTool', () => {
describe('transformResponse', () => {
it('exposes the created document ID at both the top level and nested data path', async () => {
const result = await knowledgeCreateDocumentTool.transformResponse!(
createMockResponse({
data: {
documentsCreated: [{ documentId: 'doc-123', filename: 'document.txt' }],
},
})
)

expect(result.success).toBe(true)
expect(result.output.documentId).toBe('doc-123')
expect(result.output.data.documentId).toBe('doc-123')
})

it('uses the legacy document ID fallback for both output paths', async () => {
const result = await knowledgeCreateDocumentTool.transformResponse!(
createMockResponse({
documentsCreated: [{ id: 'legacy-doc-123', filename: 'document.txt' }],
})
)

expect(result.output.documentId).toBe('legacy-doc-123')
expect(result.output.data.documentId).toBe('legacy-doc-123')
})

it('preserves empty IDs when no documents are created', async () => {
const result = await knowledgeCreateDocumentTool.transformResponse!(
createMockResponse({ data: { documentsCreated: [] } })
)

expect(result.success).toBe(true)
expect(result.output.documentId).toBe('')
expect(result.output.data.documentId).toBe('')
})
})
})

describe('knowledgeSearchTool', () => {
describe('transformResponse', () => {
it('should restructure cost information for logging', async () => {
Expand Down
1 change: 1 addition & 0 deletions apps/sim/tools/knowledge/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ export interface KnowledgeCreateDocumentResponse {
output: {
data: KnowledgeCreateDocumentResult
message: string
documentId: string
}
error?: string
}
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/tools/schema-enrichers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ describe('enrichKBTagsSchema', () => {
it('omits the executionId outside an active run', async () => {
mockListKnowledgeTagsAsExecutor.mockResolvedValue([])

await enrichKBTagsSchema('kb-1', {
const result = await enrichKBTagsSchema('kb-1', {
userId: 'user-1',
workspaceId: 'workspace-1',
workflowId: 'workflow-1',
Expand All @@ -148,6 +148,7 @@ describe('enrichKBTagsSchema', () => {
executorDelegationOrigin: EXECUTOR_ORIGIN,
},
})
expect(result).toBeNull()
})

it.each([
Expand Down
Loading