79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import { expect, tap } from '@push.rocks/tapbundle';
							 | 
						||
| 
								 | 
							
								import * as qenv from '@push.rocks/qenv';
							 | 
						||
| 
								 | 
							
								import * as smartrequest from '@push.rocks/smartrequest';
							 | 
						||
| 
								 | 
							
								import * as smartfile from '@push.rocks/smartfile';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const testQenv = new qenv.Qenv('./', './.nogit/');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import * as smartai from '../ts/index.js';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let anthropicProvider: smartai.AnthropicProvider;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Anthropic Document: should create and start Anthropic provider', async () => {
							 | 
						||
| 
								 | 
							
								  anthropicProvider = new smartai.AnthropicProvider({
							 | 
						||
| 
								 | 
							
								    anthropicToken: await testQenv.getEnvVarOnDemand('ANTHROPIC_TOKEN'),
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  await anthropicProvider.start();
							 | 
						||
| 
								 | 
							
								  expect(anthropicProvider).toBeInstanceOf(smartai.AnthropicProvider);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Anthropic Document: should document a PDF', async () => {
							 | 
						||
| 
								 | 
							
								  const pdfUrl = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf';
							 | 
						||
| 
								 | 
							
								  const pdfResponse = await smartrequest.SmartRequest.create()
							 | 
						||
| 
								 | 
							
								    .url(pdfUrl)
							 | 
						||
| 
								 | 
							
								    .get();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const result = await anthropicProvider.document({
							 | 
						||
| 
								 | 
							
								    systemMessage: 'Classify the document. Only the following answers are allowed: "invoice", "bank account statement", "contract", "test document", "other". The answer should only contain the keyword for machine use.',
							 | 
						||
| 
								 | 
							
								    userMessage: 'Classify this document.',
							 | 
						||
| 
								 | 
							
								    messageHistory: [],
							 | 
						||
| 
								 | 
							
								    pdfDocuments: [Buffer.from(await pdfResponse.arrayBuffer())],
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  console.log(`Anthropic Document - Result:`, result);
							 | 
						||
| 
								 | 
							
								  expect(result).toBeTruthy();
							 | 
						||
| 
								 | 
							
								  expect(result.message).toBeTruthy();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Anthropic Document: should handle complex document analysis', async () => {
							 | 
						||
| 
								 | 
							
								  // Test with the demo PDF if it exists
							 | 
						||
| 
								 | 
							
								  const pdfPath = './.nogit/demo_without_textlayer.pdf';
							 | 
						||
| 
								 | 
							
								  let pdfBuffer: Uint8Array;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    pdfBuffer = await smartfile.fs.toBuffer(pdfPath);
							 | 
						||
| 
								 | 
							
								  } catch (error) {
							 | 
						||
| 
								 | 
							
								    // If the file doesn't exist, use the dummy PDF
							 | 
						||
| 
								 | 
							
								    console.log('Demo PDF not found, using dummy PDF instead');
							 | 
						||
| 
								 | 
							
								    const pdfUrl = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf';
							 | 
						||
| 
								 | 
							
								    const pdfResponse = await smartrequest.SmartRequest.create()
							 | 
						||
| 
								 | 
							
								      .url(pdfUrl)
							 | 
						||
| 
								 | 
							
								      .get();
							 | 
						||
| 
								 | 
							
								    pdfBuffer = Buffer.from(await pdfResponse.arrayBuffer());
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const result = await anthropicProvider.document({
							 | 
						||
| 
								 | 
							
								    systemMessage: `
							 | 
						||
| 
								 | 
							
								      Analyze this document and provide a JSON response with the following structure:
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								        "documentType": "string",
							 | 
						||
| 
								 | 
							
								        "hasText": boolean,
							 | 
						||
| 
								 | 
							
								        "summary": "string"
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    `,
							 | 
						||
| 
								 | 
							
								    userMessage: 'Analyze this document.',
							 | 
						||
| 
								 | 
							
								    messageHistory: [],
							 | 
						||
| 
								 | 
							
								    pdfDocuments: [pdfBuffer],
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  console.log(`Anthropic Complex Document Analysis:`, result);
							 | 
						||
| 
								 | 
							
								  expect(result).toBeTruthy();
							 | 
						||
| 
								 | 
							
								  expect(result.message).toBeTruthy();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Anthropic Document: should stop the provider', async () => {
							 | 
						||
| 
								 | 
							
								  await anthropicProvider.stop();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default tap.start();
							 |