Spaces:
Running
Running
| import test from 'node:test'; | |
| import assert from 'node:assert/strict'; | |
| import { parseDocumentRegions } from '../src/document-parsing.js'; | |
| test('parses document regions across multiple page images', () => { | |
| const text = `image_index=0 title [58, 78, 677, 100] | |
| Stellar engines and Dyson bubbles can be stable | |
| image_index=0 text [58, 116, 235, 131] | |
| Colin R. McInnes* | |
| image_index=1 equation [100, 200, 800, 300] | |
| E = mc^2`; | |
| assert.deepEqual(parseDocumentRegions(text, 2), [ | |
| { imageId: 0, label: 'title', type: 'box', coordinates: [58, 78, 677, 100], content: 'Stellar engines and Dyson bubbles can be stable' }, | |
| { imageId: 0, label: 'text', type: 'box', coordinates: [58, 116, 235, 131], content: 'Colin R. McInnes*' }, | |
| { imageId: 1, label: 'equation', type: 'box', coordinates: [100, 200, 800, 300], content: 'E = mc^2' }, | |
| ]); | |
| }); | |
| test('preserves multiline region content', () => { | |
| const [region] = parseDocumentRegions('image_index=0 code [0, 0, 500, 500]\nconst x = 1;\nreturn x;', 1); | |
| assert.equal(region.content, 'const x = 1;\nreturn x;'); | |
| }); | |
| test('accepts harmless header whitespace', () => { | |
| const parsed = parseDocumentRegions(`image_index = 0 title [ 58,78, 677 , 100 ] | |
| Liquid Foundation Model`, 1); | |
| assert.equal(parsed.length, 1); | |
| assert.deepEqual(parsed[0].coordinates, [58, 78, 677, 100]); | |
| }); | |
| test('accepts model-chosen labels and zero-to-one coordinates', () => { | |
| const parsed = parseDocumentRegions(`image_index=0 Quoted label / callout [0.318, 0.045, 0.707, 0.067] | |
| The second image shows the cows in their natural habitat. | |
| image_index=0 image [202, 78, 797, 486] | |
| Diagram of Liquid Foundation Model architecture.`, 1); | |
| assert.deepEqual(parsed, [ | |
| { imageId: 0, label: 'Quoted label / callout', type: 'box', coordinates: [318, 45, 707, 67], content: 'The second image shows the cows in their natural habitat.' }, | |
| { imageId: 0, label: 'image', type: 'box', coordinates: [202, 78, 797, 486], content: 'Diagram of Liquid Foundation Model architecture.' }, | |
| ]); | |
| }); | |
| test('keeps complete regions when the final generated region is truncated', () => { | |
| const parsed = parseDocumentRegions(`image_index=0 title [58, 78, 677, 100] | |
| Liquid Foundation Model | |
| image_index=0 text [58, 116, 530, 155] | |
| Model architecture description | |
| image_index=0 table [`, 1); | |
| assert.equal(parsed.length, 2); | |
| assert.equal(parsed[1].content, 'Model architecture description'); | |
| }); | |
| test('rejects malformed document layouts', () => { | |
| assert.equal(parseDocumentRegions('ordinary answer', 1), null); | |
| assert.equal(parseDocumentRegions('image_index=1 text [0, 0, 1, 1]\ncontent', 1), null); | |
| assert.equal(parseDocumentRegions('image_index=0 text [10, 10, 5, 20]\ncontent', 1), null); | |
| assert.equal(parseDocumentRegions('image_index=0 text [0, nope, 1, 1]\ncontent', 1), null); | |
| assert.equal(parseDocumentRegions('image_index=0 text [0, 0, 1, 1]', 1), null); | |
| }); | |