import { expect, expectAsync, 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 testSmartai: smartai.SmartAi; tap.test('should create a smartai instance', async () => { testSmartai = new smartai.SmartAi({ openaiToken: await testQenv.getEnvVarOnDemand('OPENAI_TOKEN'), }); await testSmartai.start(); }); tap.test('should create chat response with openai', async () => { const userMessage = 'How are you?'; const response = await testSmartai.openaiProvider.chat({ systemMessage: 'Hello', userMessage: userMessage, messageHistory: [ ], }); console.log(`userMessage: ${userMessage}`); console.log(response.message); }); tap.test('should document a pdf', async () => { const pdfUrl = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf'; const pdfResponse = await smartrequest.getBinary(pdfUrl); const result = await testSmartai.openaiProvider.document({ systemMessage: 'Classify the document. Only the following answers are allowed: "invoice", "bank account statement", "contract", "other"', userMessage: "Classify the document.", messageHistory: [], pdfDocuments: [pdfResponse.body], }); console.log(result); }); tap.test('should recognize companies in a pdf', async () => { const pdfBuffer = await smartfile.fs.toBuffer('./.nogit/demo_without_textlayer.pdf'); const result = await testSmartai.openaiProvider.document({ systemMessage: ` summarize the document. answer in JSON format, adhering to the following schema: \`\`\`typescript type TAnswer = { entitySender: { type: 'official state entity' | 'company' | 'person'; name: string; address: string; city: string; country: string; EU: boolean; // wether the entity is within EU }; entityReceiver: { type: 'official state entity' | 'company' | 'person'; name: string; address: string; city: string; country: string; EU: boolean; // wether the entity is within EU }; date: string; // the date of the document as YYYY-MM-DD title: string; // a short title, suitable for a filename } \`\`\` `, userMessage: "Classify the document.", messageHistory: [], pdfDocuments: [pdfBuffer], }); console.log(result); }) tap.test('should stop the smartai instance', async () => { await testSmartai.stop(); }); export default tap.start();