Greenlens/__tests__/server/scanLanguageGuards.test.js

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);
});
});