4 Commits

6 changed files with 37 additions and 16 deletions

View File

@ -1,5 +1,17 @@
# Changelog # Changelog
## 2025-04-03 - 0.5.2 - fix(readme)
Remove redundant conclusion section from README to streamline documentation.
- Eliminated the conclusion block describing SmartAi's capabilities and documentation pointers.
## 2025-02-25 - 0.5.1 - fix(OpenAiProvider)
Corrected audio model ID in OpenAiProvider
- Fixed audio model identifier from 'o3-mini' to 'tts-1-hd' in the OpenAiProvider's audio method.
- Addressed minor code formatting issues in test suite for better readability.
- Corrected spelling errors in test documentation and comments.
## 2025-02-25 - 0.5.0 - feat(documentation and configuration) ## 2025-02-25 - 0.5.0 - feat(documentation and configuration)
Enhanced package and README documentation Enhanced package and README documentation

View File

@ -1,6 +1,6 @@
{ {
"name": "@push.rocks/smartai", "name": "@push.rocks/smartai",
"version": "0.5.0", "version": "0.5.2",
"private": false, "private": false,
"description": "SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.", "description": "SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",

View File

@ -218,13 +218,6 @@ while (true) {
This approach can facilitate adaptive content processing workflows. This approach can facilitate adaptive content processing workflows.
### Conclusion
SmartAi is a powerful toolkit for multi-faceted AI integration, offering robust solutions for chat, media, and document processing. Developers can enjoy a consistent API experience while leveraging the strengths of each supported AI model.
For futher exploration, developers might consider perusing individual provider's documentation to understand specific capabilities and limitations.
## License and Legal Information ## License and Legal Information
This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.

View File

@ -21,8 +21,7 @@ tap.test('should create chat response with openai', async () => {
const response = await testSmartai.openaiProvider.chat({ const response = await testSmartai.openaiProvider.chat({
systemMessage: 'Hello', systemMessage: 'Hello',
userMessage: userMessage, userMessage: userMessage,
messageHistory: [ messageHistory: [],
],
}); });
console.log(`userMessage: ${userMessage}`); console.log(`userMessage: ${userMessage}`);
console.log(response.message); console.log(response.message);
@ -55,7 +54,7 @@ tap.test('should recognize companies in a pdf', async () => {
address: string; address: string;
city: string; city: string;
country: string; country: string;
EU: boolean; // wether the entity is within EU EU: boolean; // whether the entity is within EU
}; };
entityReceiver: { entityReceiver: {
type: 'official state entity' | 'company' | 'person'; type: 'official state entity' | 'company' | 'person';
@ -63,7 +62,7 @@ tap.test('should recognize companies in a pdf', async () => {
address: string; address: string;
city: string; city: string;
country: string; country: string;
EU: boolean; // wether the entity is within EU EU: boolean; // whether the entity is within EU
}; };
date: string; // the date of the document as YYYY-MM-DD date: string; // the date of the document as YYYY-MM-DD
title: string; // a short title, suitable for a filename title: string; // a short title, suitable for a filename
@ -75,10 +74,27 @@ tap.test('should recognize companies in a pdf', async () => {
pdfDocuments: [pdfBuffer], pdfDocuments: [pdfBuffer],
}); });
console.log(result); console.log(result);
}) });
tap.test('should create audio response with openai', async () => {
// Call the audio method with a sample message.
const audioStream = await testSmartai.openaiProvider.audio({
message: 'This is a test of audio generation.',
});
// Read all chunks from the stream.
const chunks: Uint8Array[] = [];
for await (const chunk of audioStream) {
chunks.push(chunk as Uint8Array);
}
const audioBuffer = Buffer.concat(chunks);
await smartfile.fs.toFs(audioBuffer, './.nogit/testoutput.mp3');
console.log(`Audio Buffer length: ${audioBuffer.length}`);
// Assert that the resulting buffer is not empty.
expect(audioBuffer.length).toBeGreaterThan(0);
});
tap.test('should stop the smartai instance', async () => { tap.test('should stop the smartai instance', async () => {
await testSmartai.stop(); await testSmartai.stop();
}); });
export default tap.start(); export default tap.start();

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartai', name: '@push.rocks/smartai',
version: '0.5.0', version: '0.5.2',
description: 'SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.' description: 'SmartAi is a versatile TypeScript library designed to facilitate integration and interaction with various AI models, offering functionalities for chat, audio generation, document processing, and vision tasks.'
} }

View File

@ -141,7 +141,7 @@ export class OpenAiProvider extends MultiModalModel {
public async audio(optionsArg: { message: string }): Promise<NodeJS.ReadableStream> { public async audio(optionsArg: { message: string }): Promise<NodeJS.ReadableStream> {
const done = plugins.smartpromise.defer<NodeJS.ReadableStream>(); const done = plugins.smartpromise.defer<NodeJS.ReadableStream>();
const result = await this.openAiApiClient.audio.speech.create({ const result = await this.openAiApiClient.audio.speech.create({
model: this.options.audioModel ?? 'o3-mini', model: this.options.audioModel ?? 'tts-1-hd',
input: optionsArg.message, input: optionsArg.message,
voice: 'nova', voice: 'nova',
response_format: 'mp3', response_format: 'mp3',