2026-01-18 16:26:16 +00:00
import { expect , tap } from '@git.zone/tstest/tapbundle' ;
2025-10-03 14:21:25 +00:00
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 ( ) ;