116 lines
3.9 KiB
JavaScript
116 lines
3.9 KiB
JavaScript
const { buildIdentifyPrompt, normalizeIdentifyResult } = require('../../server/lib/openai');
|
|
const { applyCatalogGrounding, isLikelyGermanCommonName } = require('../../server/lib/scanGrounding');
|
|
|
|
describe('scan language guards', () => {
|
|
it('keeps the English AI common name when the catalog match is obviously German', () => {
|
|
const aiResult = {
|
|
name: 'Poinsettia',
|
|
botanicalName: 'Euphorbia pulcherrima',
|
|
confidence: 0.66,
|
|
description: 'Poinsettia was identified with AI. Care guidance is shown below.',
|
|
careInfo: {
|
|
waterIntervalDays: 6,
|
|
light: 'Bright indirect light',
|
|
temp: '18-24C',
|
|
},
|
|
};
|
|
|
|
const catalogEntries = [
|
|
{
|
|
name: 'Weihnachtsstern',
|
|
botanicalName: 'Euphorbia pulcherrima',
|
|
description: 'Deutscher Katalogeintrag',
|
|
careInfo: {
|
|
waterIntervalDays: 8,
|
|
light: 'Bright indirect light',
|
|
temp: '18-24C',
|
|
},
|
|
},
|
|
];
|
|
|
|
const grounded = applyCatalogGrounding(aiResult, catalogEntries, 'en');
|
|
|
|
expect(grounded.grounded).toBe(true);
|
|
expect(grounded.result.name).toBe('Poinsettia');
|
|
expect(grounded.result.botanicalName).toBe('Euphorbia pulcherrima');
|
|
expect(grounded.result.description).toContain('identified with AI');
|
|
expect(grounded.result.careInfo.light).toBe('Bright indirect light');
|
|
expect(grounded.result.confidence).toBeGreaterThanOrEqual(0.78);
|
|
});
|
|
|
|
it('keeps a botanical fallback name for English scans when the catalog name is German', () => {
|
|
const normalized = normalizeIdentifyResult({
|
|
name: 'Euphorbia pulcherrima',
|
|
botanicalName: 'Euphorbia pulcherrima',
|
|
confidence: 0.52,
|
|
description: 'Euphorbia pulcherrima was identified with AI. Care guidance is shown below.',
|
|
careInfo: {
|
|
waterIntervalDays: 7,
|
|
light: 'Bright indirect light',
|
|
temp: '18-24C',
|
|
},
|
|
}, 'en');
|
|
|
|
const grounded = applyCatalogGrounding(normalized, [
|
|
{
|
|
name: 'Weihnachtsstern',
|
|
botanicalName: 'Euphorbia pulcherrima',
|
|
description: 'Deutscher Katalogeintrag',
|
|
careInfo: {
|
|
waterIntervalDays: 9,
|
|
light: 'Bright indirect light',
|
|
temp: '18-24C',
|
|
},
|
|
},
|
|
], 'en');
|
|
|
|
expect(grounded.result.name).toBe('Euphorbia pulcherrima');
|
|
expect(grounded.result.botanicalName).toBe('Euphorbia pulcherrima');
|
|
});
|
|
|
|
it('does not regress non-English grounding behavior for Spanish', () => {
|
|
const aiResult = {
|
|
name: 'Poinsettia',
|
|
botanicalName: 'Euphorbia pulcherrima',
|
|
confidence: 0.64,
|
|
description: 'La planta fue identificada con IA.',
|
|
careInfo: {
|
|
waterIntervalDays: 6,
|
|
light: 'Luz indirecta brillante',
|
|
temp: '18-24C',
|
|
},
|
|
};
|
|
|
|
const grounded = applyCatalogGrounding(aiResult, [
|
|
{
|
|
name: 'Flor de Pascua',
|
|
botanicalName: 'Euphorbia pulcherrima',
|
|
description: 'Entrada de catalogo',
|
|
careInfo: {
|
|
waterIntervalDays: 7,
|
|
light: 'Luz indirecta brillante',
|
|
temp: '18-24C',
|
|
},
|
|
},
|
|
], 'es');
|
|
|
|
expect(grounded.result.name).toBe('Flor de Pascua');
|
|
expect(grounded.result.description).toBe('La planta fue identificada con IA.');
|
|
expect(grounded.result.careInfo.light).toBe('Luz indirecta brillante');
|
|
});
|
|
|
|
it('hardens the English identify prompt against non-English common names', () => {
|
|
const prompt = buildIdentifyPrompt('en', 'primary');
|
|
|
|
expect(prompt).toContain('English common name only');
|
|
expect(prompt).toContain('Never return a German or other non-English common name');
|
|
expect(prompt).toContain('use "botanicalName" as "name" instead');
|
|
});
|
|
|
|
it('detects obviously German common names for override protection', () => {
|
|
expect(isLikelyGermanCommonName('Weihnachtsstern')).toBe(true);
|
|
expect(isLikelyGermanCommonName('Weinachtsstern')).toBe(true);
|
|
expect(isLikelyGermanCommonName('Poinsettia')).toBe(false);
|
|
});
|
|
});
|