Spaces:
Running
Running
File size: 2,674 Bytes
6c30253 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import test from 'node:test';
import assert from 'node:assert/strict';
import { parseGroundingResponse } from '../src/grounding.js';
test('parses normalized boxes and points', () => {
assert.deepEqual(parseGroundingResponse(JSON.stringify([
{ image_id: 0, bbox_2d: [10, 20, 500, 600], label: 'cat' },
{ image_id: 1, point_2d: [750, 125], label: 'nose' },
]), 2), [
{ imageId: 0, label: 'cat', type: 'box', coordinates: [10, 20, 500, 600] },
{ imageId: 1, label: 'nose', type: 'point', coordinates: [750, 125] },
]);
});
test('accepts a valid empty grounding response', () => {
assert.deepEqual(parseGroundingResponse('[]', 1), []);
});
test('renders bare four-number lists as boxes on the first image', () => {
assert.deepEqual(parseGroundingResponse('Detected regions: [10, 20, 500, 600] and [600, 100, 900, 800].', 2), [
{ imageId: 0, label: 'Bounding box', type: 'box', coordinates: [10, 20, 500, 600] },
{ imageId: 0, label: 'Bounding box 2', type: 'box', coordinates: [600, 100, 900, 800] },
]);
});
test('normalizes zero-to-one boxes in structured and bare output', () => {
assert.deepEqual(parseGroundingResponse('[{"image_id":0,"label":"cat","bbox_2d":[0.1,0.2,0.8,0.9]}]', 1), [
{ imageId: 0, label: 'cat', type: 'box', coordinates: [100, 200, 800, 900] },
]);
assert.deepEqual(parseGroundingResponse('box: [0.125, 0.25, 0.75, 1]', 1), [
{ imageId: 0, label: 'Bounding box', type: 'box', coordinates: [125, 250, 750, 1000] },
]);
});
test('does not treat fenced or unrelated JSON as grounding', () => {
assert.equal(parseGroundingResponse('```json\n[]\n```', 1), null);
assert.equal(parseGroundingResponse('{"answer": 4}', 1), null);
assert.equal(parseGroundingResponse('[{"image_id":0,"label":"cat","bbox_2d":[0,0,1,1],"score":1}]', 1), null);
});
test('rejects invalid image references and coordinates', () => {
assert.equal(parseGroundingResponse('[{"image_id":1,"label":"cat","bbox_2d":[0,0,10,10]}]', 1), null);
assert.equal(parseGroundingResponse('[{"image_id":0,"label":"cat","point_2d":[1.5,2]}]', 1), null);
assert.equal(parseGroundingResponse('[{"image_id":0,"label":"cat","point_2d":[1001,2]}]', 1), null);
assert.equal(parseGroundingResponse('[{"image_id":0,"label":"cat","bbox_2d":[20,20,10,30]}]', 1), null);
});
test('requires one and only one supported geometry', () => {
assert.equal(parseGroundingResponse('[{"image_id":0,"label":"cat"}]', 1), null);
assert.equal(parseGroundingResponse('[{"image_id":0,"label":"cat","point_2d":[1,2],"bbox_2d":[0,0,2,3]}]', 1), null);
assert.equal(parseGroundingResponse('[{"image_id":0,"label":"","point_2d":[1,2]}]', 1), null);
});
|