67 lines
1.9 KiB
TypeScript
67 lines
1.9 KiB
TypeScript
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|
import * as qenv from '@push.rocks/qenv';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
import { getModel } from '../ts/index.js';
|
|
import { analyzeImage } from '../ts_vision/index.js';
|
|
|
|
const testQenv = new qenv.Qenv('./', './.nogit/');
|
|
|
|
tap.test('analyzeImage should describe a test image', async () => {
|
|
const apiKey = await testQenv.getEnvVarOnDemand('ANTHROPIC_TOKEN');
|
|
if (!apiKey) {
|
|
console.log('ANTHROPIC_TOKEN not set, skipping test');
|
|
return;
|
|
}
|
|
|
|
// Find an image file recursively in testimages/
|
|
const testImageDir = path.join(process.cwd(), 'test', 'testimages');
|
|
if (!fs.existsSync(testImageDir)) {
|
|
console.log('No test images directory found, skipping test');
|
|
return;
|
|
}
|
|
|
|
const findImage = (dir: string): string | null => {
|
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
const fullPath = path.join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
const found = findImage(fullPath);
|
|
if (found) return found;
|
|
} else if (/\.(jpg|jpeg|png)$/i.test(entry.name)) {
|
|
return fullPath;
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
|
|
const imagePath = findImage(testImageDir);
|
|
if (!imagePath) {
|
|
console.log('No test images found, skipping test');
|
|
return;
|
|
}
|
|
|
|
const imageBuffer = fs.readFileSync(imagePath);
|
|
const ext = path.extname(imagePath).toLowerCase();
|
|
const mediaType = ext === '.png' ? 'image/png' : 'image/jpeg';
|
|
|
|
const model = getModel({
|
|
provider: 'anthropic',
|
|
model: 'claude-sonnet-4-5-20250929',
|
|
apiKey,
|
|
promptCaching: false,
|
|
});
|
|
|
|
const result = await analyzeImage({
|
|
model,
|
|
image: imageBuffer,
|
|
prompt: 'Describe this image briefly.',
|
|
mediaType: mediaType as 'image/jpeg' | 'image/png',
|
|
});
|
|
|
|
console.log('Vision result:', result);
|
|
expect(result).toBeTruthy();
|
|
expect(result.length).toBeGreaterThan(10);
|
|
});
|
|
|
|
export default tap.start();
|