90 lines
2.4 KiB
TypeScript
90 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
defaultKnowledgeChunkingSettings,
|
|
defaultKnowledgeRetrievalSettings,
|
|
knowledgeChunkingSettingsSchema,
|
|
knowledgeChunkUpdateInputSchema,
|
|
knowledgeRetrievalSettingsSchema,
|
|
knowledgeRetrieveInputSchema
|
|
} from './knowledge-contracts'
|
|
|
|
describe('knowledge contracts', () => {
|
|
it('provides the approved strict retrieval defaults', () => {
|
|
expect(defaultKnowledgeRetrievalSettings).toEqual({
|
|
version: 1,
|
|
topK: 6,
|
|
minimumVectorSimilarity: 0,
|
|
ftsWeight: 1,
|
|
vectorWeight: 1,
|
|
graphWeight: 0.8,
|
|
candidateMultiplier: 4,
|
|
contextMaxCharacters: 16_000,
|
|
adjacentChunkCount: 0,
|
|
localRerankEnabled: false,
|
|
rerankMode: 'none'
|
|
})
|
|
expect(
|
|
knowledgeRetrievalSettingsSchema.safeParse({
|
|
...defaultKnowledgeRetrievalSettings,
|
|
ftsWeight: 0,
|
|
vectorWeight: 0,
|
|
graphWeight: 0
|
|
}).success
|
|
).toBe(false)
|
|
expect(
|
|
knowledgeRetrievalSettingsSchema.safeParse({
|
|
...defaultKnowledgeRetrievalSettings,
|
|
extra: true
|
|
}).success
|
|
).toBe(false)
|
|
expect(
|
|
knowledgeRetrievalSettingsSchema.parse({
|
|
...defaultKnowledgeRetrievalSettings,
|
|
minimumVectorSimilarity: -1
|
|
}).minimumVectorSimilarity
|
|
).toBe(0)
|
|
})
|
|
|
|
it('bounds chunking settings and validates dependent values', () => {
|
|
expect(defaultKnowledgeChunkingSettings).toEqual({
|
|
version: 1,
|
|
mode: 'structure',
|
|
targetCharacters: 1_600,
|
|
overlapCharacters: 160,
|
|
parentCharacters: 4_800,
|
|
childCharacters: 900,
|
|
contextualIndexingEnabled: false
|
|
})
|
|
expect(
|
|
knowledgeChunkingSettingsSchema.safeParse({
|
|
...defaultKnowledgeChunkingSettings,
|
|
targetCharacters: 400,
|
|
overlapCharacters: 161
|
|
}).success
|
|
).toBe(false)
|
|
expect(
|
|
knowledgeChunkingSettingsSchema.safeParse({
|
|
...defaultKnowledgeChunkingSettings,
|
|
parentCharacters: 1_600,
|
|
childCharacters: 1_601
|
|
}).success
|
|
).toBe(false)
|
|
})
|
|
|
|
it('bounds retrieval and chunk mutation inputs', () => {
|
|
expect(
|
|
knowledgeRetrieveInputSchema.safeParse({
|
|
knowledgeBaseId: 'library',
|
|
query: 'x'.repeat(4_001)
|
|
}).success
|
|
).toBe(false)
|
|
expect(
|
|
knowledgeChunkUpdateInputSchema.safeParse({
|
|
knowledgeBaseId: 'library',
|
|
documentId: 'document',
|
|
chunkId: 'chunk'
|
|
}).success
|
|
).toBe(false)
|
|
})
|
|
})
|