@push.rocks/smartai 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartai',
6
- version: '0.0.4',
6
+ version: '0.0.6',
7
7
  description: 'a standardaized interface to talk to AI models'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGdEQUFnRDtDQUM5RCxDQUFBIn0=
@@ -0,0 +1,5 @@
1
+ export declare abstract class MultiModal {
2
+ abstract start(): Promise<void>;
3
+ abstract stop(): Promise<void>;
4
+ abstract chatStream(input: ReadableStream<string>): ReadableStream<string>;
5
+ }
@@ -0,0 +1,3 @@
1
+ export class MultiModal {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuY2xhc3Nlcy5tdWx0aW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvYWJzdHJhY3QuY2xhc3Nlcy5tdWx0aW1vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBZ0IsVUFBVTtDQU8vQiJ9
@@ -1 +1,3 @@
1
1
  export * from './smartai.classes.smartai.js';
2
+ export * from './abstract.classes.multimodal.js';
3
+ export * from './provider.openai.js';
package/dist_ts/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './smartai.classes.smartai.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDIn0=
2
+ export * from './abstract.classes.multimodal.js';
3
+ export * from './provider.openai.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxzQkFBc0IsQ0FBQyJ9
@@ -0,0 +1,2 @@
1
+ export declare const packageDir: string;
2
+ export declare const nogitDir: string;
@@ -0,0 +1,4 @@
1
+ import * as plugins from './plugins.js';
2
+ export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
3
+ export const nogitDir = plugins.path.join(packageDir, './.nogit');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,10 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import * as path from 'path';
3
+ export { path, };
4
+ import * as qenv from '@push.rocks/qenv';
5
+ import * as smartpath from '@push.rocks/smartpath';
6
+ import * as smartpromise from '@push.rocks/smartpromise';
7
+ import * as smartfile from '@push.rocks/smartfile';
8
+ export { qenv, smartpath, smartpromise, smartfile, };
9
+ import * as openai from 'openai';
10
+ export { openai, };
@@ -0,0 +1,13 @@
1
+ // node native
2
+ import * as path from 'path';
3
+ export { path, };
4
+ // @push.rocks scope
5
+ import * as qenv from '@push.rocks/qenv';
6
+ import * as smartpath from '@push.rocks/smartpath';
7
+ import * as smartpromise from '@push.rocks/smartpromise';
8
+ import * as smartfile from '@push.rocks/smartfile';
9
+ export { qenv, smartpath, smartpromise, smartfile, };
10
+ // third party
11
+ import * as openai from 'openai';
12
+ export { openai, };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFDTCxJQUFJLEdBQ0wsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFDTCxJQUFJLEVBQ0osU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEdBQ1YsQ0FBQTtBQUVELGNBQWM7QUFDZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsTUFBTSxHQUNQLENBQUEifQ==
@@ -0,0 +1,17 @@
1
+ import * as plugins from './plugins.js';
2
+ import { MultiModal } from './abstract.classes.multimodal.js';
3
+ export declare class OpenAiProvider extends MultiModal {
4
+ private openAiToken;
5
+ openAiApiClient: plugins.openai.default;
6
+ constructor(openaiToken: string);
7
+ start(): Promise<void>;
8
+ stop(): Promise<void>;
9
+ chatStream(input: ReadableStream<string>): ReadableStream<string>;
10
+ chat(systemMessage: string, userMessage: string, messageHistory: {
11
+ role: 'assistant' | 'user';
12
+ content: string;
13
+ }[]): Promise<{
14
+ message: import("openai/resources/index.mjs").ChatCompletionMessage;
15
+ }>;
16
+ audio(messageArg: string): Promise<unknown>;
17
+ }
@@ -0,0 +1,70 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as paths from './paths.js';
3
+ import { MultiModal } from './abstract.classes.multimodal.js';
4
+ export class OpenAiProvider extends MultiModal {
5
+ constructor(openaiToken) {
6
+ super();
7
+ this.openAiToken = openaiToken; // Ensure the token is stored
8
+ }
9
+ async start() {
10
+ this.openAiApiClient = new plugins.openai.default({
11
+ apiKey: this.openAiToken,
12
+ dangerouslyAllowBrowser: true,
13
+ });
14
+ }
15
+ async stop() { }
16
+ chatStream(input) {
17
+ const decoder = new TextDecoder();
18
+ let messageHistory = [];
19
+ return new ReadableStream({
20
+ async start(controller) {
21
+ const reader = input.getReader();
22
+ try {
23
+ let done, value;
24
+ while ((({ done, value } = await reader.read()), !done)) {
25
+ const userMessage = decoder.decode(value, { stream: true });
26
+ messageHistory.push({ role: 'user', content: userMessage });
27
+ const aiResponse = await this.chat('', userMessage, messageHistory);
28
+ messageHistory.push({ role: 'assistant', content: aiResponse.message });
29
+ // Directly enqueue the string response instead of encoding it first
30
+ controller.enqueue(aiResponse.message);
31
+ }
32
+ controller.close();
33
+ }
34
+ catch (err) {
35
+ controller.error(err);
36
+ }
37
+ },
38
+ });
39
+ }
40
+ // Implementing the synchronous chat interaction
41
+ async chat(systemMessage, userMessage, messageHistory) {
42
+ const result = await this.openAiApiClient.chat.completions.create({
43
+ model: 'gpt-3.5-turbo-16k-0613',
44
+ messages: [
45
+ { role: 'system', content: systemMessage },
46
+ ...messageHistory,
47
+ { role: 'user', content: userMessage },
48
+ ],
49
+ });
50
+ return {
51
+ message: result.choices[0].message,
52
+ };
53
+ }
54
+ async audio(messageArg) {
55
+ const done = plugins.smartpromise.defer();
56
+ const result = await this.openAiApiClient.audio.speech.create({
57
+ model: 'tts-1-hd',
58
+ input: messageArg,
59
+ voice: 'nova',
60
+ response_format: 'mp3',
61
+ speed: 1,
62
+ });
63
+ const stream = result.body.pipe(plugins.smartfile.fsStream.createWriteStream(plugins.path.join(paths.nogitDir, 'output.mp3')));
64
+ stream.on('finish', () => {
65
+ done.resolve();
66
+ });
67
+ return done.promise;
68
+ }
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIub3BlbmFpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIub3BlbmFpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFJNUMsWUFBWSxXQUFtQjtRQUM3QixLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsNkJBQTZCO0lBQy9ELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNoRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDeEIsdUJBQXVCLEVBQUUsSUFBSTtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksS0FBSSxDQUFDO0lBRWYsVUFBVSxDQUFDLEtBQTZCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxjQUFjLEdBQXNELEVBQUUsQ0FBQztRQUUzRSxPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDcEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUM7b0JBQ0gsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDO29CQUNoQixPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@push.rocks/smartai",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "private": false,
5
5
  "description": "a standardaized interface to talk to AI models",
6
6
  "main": "dist_ts/index.js",
@@ -16,7 +16,13 @@
16
16
  "@push.rocks/tapbundle": "^5.0.15",
17
17
  "@types/node": "^20.8.7"
18
18
  },
19
- "dependencies": {},
19
+ "dependencies": {
20
+ "@push.rocks/qenv": "^6.0.5",
21
+ "@push.rocks/smartfile": "^11.0.4",
22
+ "@push.rocks/smartpath": "^5.0.11",
23
+ "@push.rocks/smartpromise": "^4.0.3",
24
+ "openai": "^4.31.0"
25
+ },
20
26
  "repository": {
21
27
  "type": "git",
22
28
  "url": "git+https://code.foss.global/push.rocks/smartai.git"
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartai',
6
- version: '0.0.4',
6
+ version: '0.0.6',
7
7
  description: 'a standardaized interface to talk to AI models'
8
8
  }
@@ -0,0 +1,8 @@
1
+ export abstract class MultiModal {
2
+ abstract start(): Promise<void>;
3
+ abstract stop(): Promise<void>;
4
+
5
+ // Defines a streaming interface for chat interactions.
6
+ // The implementation will vary based on the specific AI model.
7
+ abstract chatStream(input: ReadableStream<string>): ReadableStream<string>;
8
+ }
package/ts/index.ts CHANGED
@@ -1 +1,3 @@
1
- export * from './smartai.classes.smartai.js';
1
+ export * from './smartai.classes.smartai.js';
2
+ export * from './abstract.classes.multimodal.js';
3
+ export * from './provider.openai.js';
package/ts/paths.ts ADDED
@@ -0,0 +1,4 @@
1
+ import * as plugins from './plugins.js';
2
+
3
+ export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
4
+ export const nogitDir = plugins.path.join(packageDir, './.nogit');
package/ts/plugins.ts ADDED
@@ -0,0 +1,26 @@
1
+ // node native
2
+ import * as path from 'path';
3
+
4
+ export {
5
+ path,
6
+ }
7
+
8
+ // @push.rocks scope
9
+ import * as qenv from '@push.rocks/qenv';
10
+ import * as smartpath from '@push.rocks/smartpath';
11
+ import * as smartpromise from '@push.rocks/smartpromise';
12
+ import * as smartfile from '@push.rocks/smartfile';
13
+
14
+ export {
15
+ qenv,
16
+ smartpath,
17
+ smartpromise,
18
+ smartfile,
19
+ }
20
+
21
+ // third party
22
+ import * as openai from 'openai';
23
+
24
+ export {
25
+ openai,
26
+ }
@@ -0,0 +1,88 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as paths from './paths.js';
3
+
4
+ import { MultiModal } from './abstract.classes.multimodal.js';
5
+
6
+ export class OpenAiProvider extends MultiModal {
7
+ private openAiToken: string;
8
+ public openAiApiClient: plugins.openai.default;
9
+
10
+ constructor(openaiToken: string) {
11
+ super();
12
+ this.openAiToken = openaiToken; // Ensure the token is stored
13
+ }
14
+
15
+ async start() {
16
+ this.openAiApiClient = new plugins.openai.default({
17
+ apiKey: this.openAiToken,
18
+ dangerouslyAllowBrowser: true,
19
+ });
20
+ }
21
+
22
+ async stop() {}
23
+
24
+ chatStream(input: ReadableStream<string>): ReadableStream<string> {
25
+ const decoder = new TextDecoder();
26
+ let messageHistory: { role: 'assistant' | 'user'; content: string }[] = [];
27
+
28
+ return new ReadableStream({
29
+ async start(controller) {
30
+ const reader = input.getReader();
31
+ try {
32
+ let done, value;
33
+ while ((({ done, value } = await reader.read()), !done)) {
34
+ const userMessage = decoder.decode(value, { stream: true });
35
+ messageHistory.push({ role: 'user', content: userMessage });
36
+
37
+ const aiResponse = await this.chat('', userMessage, messageHistory);
38
+ messageHistory.push({ role: 'assistant', content: aiResponse.message });
39
+
40
+ // Directly enqueue the string response instead of encoding it first
41
+ controller.enqueue(aiResponse.message);
42
+ }
43
+ controller.close();
44
+ } catch (err) {
45
+ controller.error(err);
46
+ }
47
+ },
48
+ });
49
+ }
50
+
51
+ // Implementing the synchronous chat interaction
52
+ public async chat(
53
+ systemMessage: string,
54
+ userMessage: string,
55
+ messageHistory: {
56
+ role: 'assistant' | 'user';
57
+ content: string;
58
+ }[]
59
+ ) {
60
+ const result = await this.openAiApiClient.chat.completions.create({
61
+ model: 'gpt-3.5-turbo-16k-0613',
62
+ messages: [
63
+ { role: 'system', content: systemMessage },
64
+ ...messageHistory,
65
+ { role: 'user', content: userMessage },
66
+ ],
67
+ });
68
+ return {
69
+ message: result.choices[0].message,
70
+ };
71
+ }
72
+
73
+ public async audio(messageArg: string) {
74
+ const done = plugins.smartpromise.defer();
75
+ const result = await this.openAiApiClient.audio.speech.create({
76
+ model: 'tts-1-hd',
77
+ input: messageArg,
78
+ voice: 'nova',
79
+ response_format: 'mp3',
80
+ speed: 1,
81
+ });
82
+ const stream = result.body.pipe(plugins.smartfile.fsStream.createWriteStream(plugins.path.join(paths.nogitDir, 'output.mp3')));
83
+ stream.on('finish', () => {
84
+ done.resolve();
85
+ });
86
+ return done.promise;
87
+ }
88
+ }
@@ -1,4 +0,0 @@
1
- const removeme = {};
2
- export {
3
- removeme
4
- }