@push.rocks/smartai 0.0.7 → 0.0.14

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.
Files changed (40) hide show
  1. package/dist_ts/00_commitinfo_data.js +3 -3
  2. package/dist_ts/abstract.classes.multimodal.d.ts +24 -2
  3. package/dist_ts/abstract.classes.multimodal.js +2 -2
  4. package/dist_ts/classes.conversation.d.ts +26 -0
  5. package/dist_ts/classes.conversation.js +95 -0
  6. package/dist_ts/classes.smartai.d.ts +25 -0
  7. package/dist_ts/classes.smartai.js +41 -0
  8. package/dist_ts/classes.tts.d.ts +6 -0
  9. package/dist_ts/classes.tts.js +10 -0
  10. package/dist_ts/index.d.ts +1 -1
  11. package/dist_ts/index.js +2 -2
  12. package/dist_ts/interfaces.d.ts +1 -0
  13. package/dist_ts/interfaces.js +2 -0
  14. package/dist_ts/plugins.d.ts +8 -3
  15. package/dist_ts/plugins.js +9 -4
  16. package/dist_ts/provider.anthropic.d.ts +25 -0
  17. package/dist_ts/provider.anthropic.js +41 -0
  18. package/dist_ts/provider.ollama.d.ts +2 -0
  19. package/dist_ts/provider.ollama.js +4 -0
  20. package/dist_ts/provider.openai.d.ts +33 -10
  21. package/dist_ts/provider.openai.js +63 -41
  22. package/dist_ts/provider.perplexity.d.ts +2 -0
  23. package/dist_ts/provider.perplexity.js +4 -0
  24. package/npmextra.json +16 -2
  25. package/package.json +25 -9
  26. package/readme.hints.md +1 -0
  27. package/readme.md +107 -27
  28. package/ts/00_commitinfo_data.ts +2 -2
  29. package/ts/abstract.classes.multimodal.ts +28 -4
  30. package/ts/classes.conversation.ts +116 -0
  31. package/ts/classes.smartai.ts +62 -0
  32. package/ts/classes.tts.ts +15 -0
  33. package/ts/index.ts +1 -1
  34. package/ts/interfaces.ts +0 -0
  35. package/ts/plugins.ts +12 -2
  36. package/ts/provider.anthropic.ts +62 -0
  37. package/ts/provider.ollama.ts +3 -0
  38. package/ts/provider.openai.ts +97 -51
  39. package/ts/provider.perplexity.ts +3 -0
  40. package/ts/smartai.classes.smartai.ts +0 -53
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartai',
6
- version: '0.0.7',
7
- description: 'a standardaized interface to talk to AI models'
6
+ version: '0.0.14',
7
+ description: 'A TypeScript library for integrating and interacting with multiple AI models, offering capabilities for chat and potentially audio responses.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGdEQUFnRDtDQUM5RCxDQUFBIn0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLCtJQUErSTtDQUM3SixDQUFBIn0=
@@ -1,5 +1,27 @@
1
- export declare abstract class MultiModal {
1
+ export declare abstract class MultiModalModel {
2
+ /**
3
+ * starts the model
4
+ */
2
5
  abstract start(): Promise<void>;
6
+ /**
7
+ * stops the model
8
+ */
3
9
  abstract stop(): Promise<void>;
4
- abstract chatStream(input: ReadableStream<string>): ReadableStream<string>;
10
+ abstract chat(optionsArg: {
11
+ systemMessage: string;
12
+ userMessage: string;
13
+ messageHistory: {
14
+ role: 'assistant' | 'user';
15
+ content: string;
16
+ }[];
17
+ }): Promise<{
18
+ role: 'assistant';
19
+ message: string;
20
+ }>;
21
+ /**
22
+ * Defines a streaming interface for chat interactions.
23
+ * The implementation will vary based on the specific AI model.
24
+ * @param input
25
+ */
26
+ abstract chatStream(input: ReadableStream<string>): Promise<ReadableStream<string>>;
5
27
  }
@@ -1,3 +1,3 @@
1
- export class MultiModal {
1
+ export class MultiModalModel {
2
2
  }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuY2xhc3Nlcy5tdWx0aW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvYWJzdHJhY3QuY2xhc3Nlcy5tdWx0aW1vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBZ0IsVUFBVTtDQU8vQiJ9
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QuY2xhc3Nlcy5tdWx0aW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvYWJzdHJhY3QuY2xhc3Nlcy5tdWx0aW1vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBZ0IsZUFBZTtDQStCcEMifQ==
@@ -0,0 +1,26 @@
1
+ import type { SmartAi } from "./classes.smartai.js";
2
+ type TProcessFunction = (input: string) => Promise<string>;
3
+ export interface IConversationOptions {
4
+ processFunction: TProcessFunction;
5
+ }
6
+ /**
7
+ * a conversation
8
+ */
9
+ export declare class Conversation {
10
+ static createWithOpenAi(smartaiRefArg: SmartAi): Promise<Conversation>;
11
+ static createWithAnthropic(smartaiRefArg: SmartAi): Promise<Conversation>;
12
+ static createWithPerplexity(smartaiRefArg: SmartAi): Promise<Conversation>;
13
+ static createWithOllama(smartaiRefArg: SmartAi): Promise<Conversation>;
14
+ smartaiRef: SmartAi;
15
+ private systemMessage;
16
+ private processFunction;
17
+ private inputStreamWriter;
18
+ private outputStreamController;
19
+ constructor(smartairefArg: SmartAi, options: IConversationOptions);
20
+ setSystemMessage(systemMessageArg: string): Promise<void>;
21
+ private setupOutputStream;
22
+ private setupInputStream;
23
+ getInputStreamWriter(): WritableStreamDefaultWriter<string>;
24
+ getOutputStream(): ReadableStream<string>;
25
+ }
26
+ export {};
@@ -0,0 +1,95 @@
1
+ import { OpenAiProvider } from "./provider.openai.js";
2
+ /**
3
+ * a conversation
4
+ */
5
+ export class Conversation {
6
+ // STATIC
7
+ static async createWithOpenAi(smartaiRefArg) {
8
+ if (!smartaiRefArg.openaiProvider) {
9
+ throw new Error('OpenAI provider not available');
10
+ }
11
+ const conversation = new Conversation(smartaiRefArg, {
12
+ processFunction: async (input) => {
13
+ return ''; // TODO implement proper streaming
14
+ }
15
+ });
16
+ return conversation;
17
+ }
18
+ static async createWithAnthropic(smartaiRefArg) {
19
+ if (!smartaiRefArg.anthropicProvider) {
20
+ throw new Error('Anthropic provider not available');
21
+ }
22
+ const conversation = new Conversation(smartaiRefArg, {
23
+ processFunction: async (input) => {
24
+ return ''; // TODO implement proper streaming
25
+ }
26
+ });
27
+ return conversation;
28
+ }
29
+ static async createWithPerplexity(smartaiRefArg) {
30
+ if (!smartaiRefArg.perplexityProvider) {
31
+ throw new Error('Perplexity provider not available');
32
+ }
33
+ const conversation = new Conversation(smartaiRefArg, {
34
+ processFunction: async (input) => {
35
+ return ''; // TODO implement proper streaming
36
+ }
37
+ });
38
+ return conversation;
39
+ }
40
+ static async createWithOllama(smartaiRefArg) {
41
+ if (!smartaiRefArg.ollamaProvider) {
42
+ throw new Error('Ollama provider not available');
43
+ }
44
+ const conversation = new Conversation(smartaiRefArg, {
45
+ processFunction: async (input) => {
46
+ return ''; // TODO implement proper streaming
47
+ }
48
+ });
49
+ return conversation;
50
+ }
51
+ constructor(smartairefArg, options) {
52
+ this.inputStreamWriter = null;
53
+ this.outputStreamController = null;
54
+ this.processFunction = options.processFunction;
55
+ }
56
+ async setSystemMessage(systemMessageArg) {
57
+ this.systemMessage = systemMessageArg;
58
+ }
59
+ setupOutputStream() {
60
+ return new ReadableStream({
61
+ start: (controller) => {
62
+ this.outputStreamController = controller;
63
+ }
64
+ });
65
+ }
66
+ setupInputStream() {
67
+ const writableStream = new WritableStream({
68
+ write: async (chunk) => {
69
+ const processedData = await this.processFunction(chunk);
70
+ if (this.outputStreamController) {
71
+ this.outputStreamController.enqueue(processedData);
72
+ }
73
+ },
74
+ close: () => {
75
+ this.outputStreamController?.close();
76
+ },
77
+ abort: (err) => {
78
+ console.error('Stream aborted', err);
79
+ this.outputStreamController?.error(err);
80
+ }
81
+ });
82
+ return writableStream;
83
+ }
84
+ getInputStreamWriter() {
85
+ if (!this.inputStreamWriter) {
86
+ const inputStream = this.setupInputStream();
87
+ this.inputStreamWriter = inputStream.getWriter();
88
+ }
89
+ return this.inputStreamWriter;
90
+ }
91
+ getOutputStream() {
92
+ return this.setupOutputStream();
93
+ }
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jb252ZXJzYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmNvbnZlcnNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFRdEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUN2QixTQUFTO0lBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFzQjtRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFO1lBQ25ELGVBQWUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9CLE9BQU8sRUFBRSxDQUFBLENBQUMsa0NBQWtDO1lBQzlDLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxhQUFzQjtRQUM1RCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxhQUFhLEVBQUU7WUFDbkQsZUFBZSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDL0IsT0FBTyxFQUFFLENBQUEsQ0FBQyxrQ0FBa0M7WUFDOUMsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLGFBQXNCO1FBQzdELElBQUks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
@@ -0,0 +1,25 @@
1
+ import { Conversation } from './classes.conversation.js';
2
+ import { AnthropicProvider } from './provider.anthropic.js';
3
+ import type { OllamaProvider } from './provider.ollama.js';
4
+ import { OpenAiProvider } from './provider.openai.js';
5
+ import type { PerplexityProvider } from './provider.perplexity.js';
6
+ export interface ISmartAiOptions {
7
+ openaiToken?: string;
8
+ anthropicToken?: string;
9
+ perplexityToken?: string;
10
+ }
11
+ export type TProvider = 'openai' | 'anthropic' | 'perplexity' | 'ollama';
12
+ export declare class SmartAi {
13
+ options: ISmartAiOptions;
14
+ openaiProvider: OpenAiProvider;
15
+ anthropicProvider: AnthropicProvider;
16
+ perplexityProvider: PerplexityProvider;
17
+ ollamaProvider: OllamaProvider;
18
+ constructor(optionsArg: ISmartAiOptions);
19
+ start(): Promise<void>;
20
+ stop(): Promise<void>;
21
+ /**
22
+ * create a new conversation
23
+ */
24
+ createConversation(provider: TProvider): Promise<Conversation>;
25
+ }
@@ -0,0 +1,41 @@
1
+ import { Conversation } from './classes.conversation.js';
2
+ import * as plugins from './plugins.js';
3
+ import { AnthropicProvider } from './provider.anthropic.js';
4
+ import { OpenAiProvider } from './provider.openai.js';
5
+ export class SmartAi {
6
+ constructor(optionsArg) {
7
+ this.options = optionsArg;
8
+ }
9
+ async start() {
10
+ if (this.options.openaiToken) {
11
+ this.openaiProvider = new OpenAiProvider({
12
+ openaiToken: this.options.openaiToken,
13
+ });
14
+ await this.openaiProvider.start();
15
+ }
16
+ if (this.options.anthropicToken) {
17
+ this.anthropicProvider = new AnthropicProvider({
18
+ anthropicToken: this.options.anthropicToken,
19
+ });
20
+ }
21
+ }
22
+ async stop() { }
23
+ /**
24
+ * create a new conversation
25
+ */
26
+ createConversation(provider) {
27
+ switch (provider) {
28
+ case 'openai':
29
+ return Conversation.createWithOpenAi(this);
30
+ case 'anthropic':
31
+ return Conversation.createWithAnthropic(this);
32
+ case 'perplexity':
33
+ return Conversation.createWithPerplexity(this);
34
+ case 'ollama':
35
+ return Conversation.createWithOllama(this);
36
+ default:
37
+ throw new Error('Provider not available');
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGFpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5zbWFydGFpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFZdEQsTUFBTSxPQUFPLE9BQU87SUFRbEIsWUFBWSxVQUEyQjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUM7Z0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7YUFDdEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQUM7Z0JBQzdDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWM7YUFDNUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxLQUFJLENBQUM7SUFFdEI7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxRQUFtQjtRQUNwQyxRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssUUFBUTtnQkFDWCxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEQsS0FBSyxZQUFZO2dCQUNmLE9BQU8sWUFBWSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELEtBQUssUUFBUTtnQkFDWCxPQUFPLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QztnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
@@ -0,0 +1,6 @@
1
+ import type { SmartAi } from './classes.smartai.js';
2
+ export declare class TTS {
3
+ static createWithOpenAi(smartaiRef: SmartAi): Promise<TTS>;
4
+ smartaiRef: SmartAi;
5
+ constructor(smartairefArg: SmartAi);
6
+ }
@@ -0,0 +1,10 @@
1
+ import * as plugins from './plugins.js';
2
+ export class TTS {
3
+ static async createWithOpenAi(smartaiRef) {
4
+ return new TTS(smartaiRef);
5
+ }
6
+ constructor(smartairefArg) {
7
+ this.smartaiRef = smartairefArg;
8
+ }
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnR0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLE9BQU8sR0FBRztJQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBbUI7UUFDdEQsT0FBTyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBS0QsWUFBWSxhQUFzQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUNsQyxDQUFDO0NBQ0YifQ==
@@ -1,3 +1,3 @@
1
- export * from './smartai.classes.smartai.js';
1
+ export * from './classes.smartai.js';
2
2
  export * from './abstract.classes.multimodal.js';
3
3
  export * from './provider.openai.js';
package/dist_ts/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export * from './smartai.classes.smartai.js';
1
+ export * from './classes.smartai.js';
2
2
  export * from './abstract.classes.multimodal.js';
3
3
  export * from './provider.openai.js';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxzQkFBc0IsQ0FBQyJ9
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxzQkFBc0IsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -2,9 +2,14 @@
2
2
  import * as path from 'path';
3
3
  export { path, };
4
4
  import * as qenv from '@push.rocks/qenv';
5
+ import * as smartarray from '@push.rocks/smartarray';
6
+ import * as smartfile from '@push.rocks/smartfile';
5
7
  import * as smartpath from '@push.rocks/smartpath';
8
+ import * as smartpdf from '@push.rocks/smartpdf';
6
9
  import * as smartpromise from '@push.rocks/smartpromise';
7
- import * as smartfile from '@push.rocks/smartfile';
8
- export { qenv, smartpath, smartpromise, smartfile, };
10
+ import * as smartrequest from '@push.rocks/smartrequest';
11
+ import * as webstream from '@push.rocks/webstream';
12
+ export { smartarray, qenv, smartfile, smartpath, smartpdf, smartpromise, smartrequest, webstream, };
13
+ import * as anthropic from '@anthropic-ai/sdk';
9
14
  import * as openai from 'openai';
10
- export { openai, };
15
+ export { anthropic, openai, };
@@ -3,11 +3,16 @@ import * as path from 'path';
3
3
  export { path, };
4
4
  // @push.rocks scope
5
5
  import * as qenv from '@push.rocks/qenv';
6
+ import * as smartarray from '@push.rocks/smartarray';
7
+ import * as smartfile from '@push.rocks/smartfile';
6
8
  import * as smartpath from '@push.rocks/smartpath';
9
+ import * as smartpdf from '@push.rocks/smartpdf';
7
10
  import * as smartpromise from '@push.rocks/smartpromise';
8
- import * as smartfile from '@push.rocks/smartfile';
9
- export { qenv, smartpath, smartpromise, smartfile, };
11
+ import * as smartrequest from '@push.rocks/smartrequest';
12
+ import * as webstream from '@push.rocks/webstream';
13
+ export { smartarray, qenv, smartfile, smartpath, smartpdf, smartpromise, smartrequest, webstream, };
10
14
  // third party
15
+ import * as anthropic from '@anthropic-ai/sdk';
11
16
  import * as openai from 'openai';
12
- export { openai, };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFDTCxJQUFJLEdBQ0wsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFDTCxJQUFJLEVBQ0osU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEdBQ1YsQ0FBQTtBQUVELGNBQWM7QUFDZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsTUFBTSxHQUNQLENBQUEifQ==
17
+ export { anthropic, openai, };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFDTCxJQUFJLEdBQ0wsQ0FBQTtBQUVELG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUNMLFVBQVUsRUFDVixJQUFJLEVBQ0osU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLFlBQVksRUFDWixTQUFTLEdBQ1YsQ0FBQTtBQUVELGNBQWM7QUFDZCxPQUFPLEtBQUssU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxHQUNQLENBQUEifQ==
@@ -0,0 +1,25 @@
1
+ import * as plugins from './plugins.js';
2
+ import { MultiModalModel } from './abstract.classes.multimodal.js';
3
+ export interface IAnthropicProviderOptions {
4
+ anthropicToken: string;
5
+ }
6
+ export declare class AnthropicProvider extends MultiModalModel {
7
+ private options;
8
+ anthropicApiClient: plugins.anthropic.default;
9
+ constructor(optionsArg: IAnthropicProviderOptions);
10
+ start(): Promise<void>;
11
+ stop(): Promise<void>;
12
+ chatStream(input: ReadableStream<string>): Promise<ReadableStream<string>>;
13
+ chat(optionsArg: {
14
+ systemMessage: string;
15
+ userMessage: string;
16
+ messageHistory: {
17
+ role: 'assistant' | 'user';
18
+ content: string;
19
+ }[];
20
+ }): Promise<{
21
+ role: "assistant";
22
+ message: string;
23
+ }>;
24
+ private audio;
25
+ }
@@ -0,0 +1,41 @@
1
+ import * as plugins from './plugins.js';
2
+ import * as paths from './paths.js';
3
+ import { MultiModalModel } from './abstract.classes.multimodal.js';
4
+ export class AnthropicProvider extends MultiModalModel {
5
+ constructor(optionsArg) {
6
+ super();
7
+ this.options = optionsArg; // Ensure the token is stored
8
+ }
9
+ async start() {
10
+ this.anthropicApiClient = new plugins.anthropic.default({
11
+ apiKey: this.options.anthropicToken,
12
+ });
13
+ }
14
+ async stop() { }
15
+ async chatStream(input) {
16
+ // TODO: implement for OpenAI
17
+ const returnStream = new ReadableStream();
18
+ return returnStream;
19
+ }
20
+ // Implementing the synchronous chat interaction
21
+ async chat(optionsArg) {
22
+ const result = await this.anthropicApiClient.messages.create({
23
+ model: 'claude-3-opus-20240229',
24
+ system: optionsArg.systemMessage,
25
+ messages: [
26
+ ...optionsArg.messageHistory,
27
+ { role: 'user', content: optionsArg.userMessage },
28
+ ],
29
+ max_tokens: 4000,
30
+ });
31
+ return {
32
+ role: result.role,
33
+ message: result.content.join('\n'),
34
+ };
35
+ }
36
+ async audio(messageArg) {
37
+ // Anthropic does not provide an audio API, so this method is not implemented.
38
+ throw new Error('Audio generation is not yet supported by Anthropic.');
39
+ }
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuYW50aHJvcGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIuYW50aHJvcGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU1uRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBZTtJQUlwRCxZQUFZLFVBQXFDO1FBQy9DLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUEsQ0FBQyw2QkFBNkI7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDdEQsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYztTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksS0FBSSxDQUFDO0lBRVIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUE2QjtRQUNuRCw2QkFBNkI7UUFFN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMxQyxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0RBQWdEO0lBQ3pDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFPakI7UUFDQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzNELEtBQUssRUFBRSx3QkFBd0I7WUFDL0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxhQUFhO1lBQ2hDLFFBQVEsRUFBRTtnQkFDUixHQUFHLFVBQVUsQ0FBQyxjQUFjO2dCQUM1QixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUU7YUFDbEQ7WUFDRCxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFtQjtZQUNoQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFrQjtRQUNwQyw4RUFBOEU7UUFDOUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiJ9
@@ -0,0 +1,2 @@
1
+ export declare class OllamaProvider {
2
+ }
@@ -0,0 +1,4 @@
1
+ import * as plugins from './plugins.js';
2
+ export class OllamaProvider {
3
+ }
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIub2xsYW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIub2xsYW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE1BQU0sT0FBTyxjQUFjO0NBQUcifQ==
@@ -1,17 +1,40 @@
1
+ /// <reference types="node" resolution-mode="require"/>
1
2
  import * as plugins from './plugins.js';
2
- import { MultiModal } from './abstract.classes.multimodal.js';
3
- export declare class OpenAiProvider extends MultiModal {
4
- private openAiToken;
3
+ import { MultiModalModel } from './abstract.classes.multimodal.js';
4
+ export interface IOpenaiProviderOptions {
5
+ openaiToken: string;
6
+ }
7
+ export declare class OpenAiProvider extends MultiModalModel {
8
+ private options;
5
9
  openAiApiClient: plugins.openai.default;
6
- constructor(openaiToken: string);
10
+ smartpdfInstance: plugins.smartpdf.SmartPdf;
11
+ constructor(optionsArg: IOpenaiProviderOptions);
7
12
  start(): Promise<void>;
8
13
  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
+ chatStream(input: ReadableStream<string>): Promise<ReadableStream<string>>;
15
+ chat(optionsArg: {
16
+ systemMessage: string;
17
+ userMessage: string;
18
+ messageHistory: {
19
+ role: 'assistant' | 'user';
20
+ content: string;
21
+ }[];
22
+ }): Promise<{
23
+ role: "assistant";
24
+ message: string;
25
+ }>;
26
+ audio(optionsArg: {
27
+ message: string;
28
+ }): Promise<NodeJS.ReadableStream>;
29
+ document(optionsArg: {
30
+ systemMessage: string;
31
+ userMessage: string;
32
+ pdfDocuments: Uint8Array[];
33
+ messageHistory: {
34
+ role: 'assistant' | 'user';
35
+ content: any;
36
+ }[];
37
+ }): Promise<{
14
38
  message: import("openai/resources/index.mjs").ChatCompletionMessage;
15
39
  }>;
16
- audio(messageArg: string): Promise<unknown>;
17
40
  }
@@ -1,70 +1,92 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import * as paths from './paths.js';
3
- import { MultiModal } from './abstract.classes.multimodal.js';
4
- export class OpenAiProvider extends MultiModal {
5
- constructor(openaiToken) {
3
+ import { MultiModalModel } from './abstract.classes.multimodal.js';
4
+ export class OpenAiProvider extends MultiModalModel {
5
+ constructor(optionsArg) {
6
6
  super();
7
- this.openAiToken = openaiToken; // Ensure the token is stored
7
+ this.options = optionsArg;
8
8
  }
9
9
  async start() {
10
10
  this.openAiApiClient = new plugins.openai.default({
11
- apiKey: this.openAiToken,
11
+ apiKey: this.options.openaiToken,
12
12
  dangerouslyAllowBrowser: true,
13
13
  });
14
+ this.smartpdfInstance = new plugins.smartpdf.SmartPdf();
14
15
  }
15
16
  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
- });
17
+ async chatStream(input) {
18
+ // TODO: implement for OpenAI
19
+ const returnStream = new ReadableStream();
20
+ return returnStream;
39
21
  }
40
22
  // Implementing the synchronous chat interaction
41
- async chat(systemMessage, userMessage, messageHistory) {
23
+ async chat(optionsArg) {
42
24
  const result = await this.openAiApiClient.chat.completions.create({
43
- model: 'gpt-3.5-turbo-16k-0613',
25
+ model: 'gpt-4-turbo-preview',
44
26
  messages: [
45
- { role: 'system', content: systemMessage },
46
- ...messageHistory,
47
- { role: 'user', content: userMessage },
27
+ { role: 'system', content: optionsArg.systemMessage },
28
+ ...optionsArg.messageHistory,
29
+ { role: 'user', content: optionsArg.userMessage },
48
30
  ],
49
31
  });
50
32
  return {
51
- message: result.choices[0].message,
33
+ role: result.choices[0].message.role,
34
+ message: result.choices[0].message.content,
52
35
  };
53
36
  }
54
- async audio(messageArg) {
37
+ async audio(optionsArg) {
55
38
  const done = plugins.smartpromise.defer();
56
39
  const result = await this.openAiApiClient.audio.speech.create({
57
40
  model: 'tts-1-hd',
58
- input: messageArg,
41
+ input: optionsArg.message,
59
42
  voice: 'nova',
60
43
  response_format: 'mp3',
61
44
  speed: 1,
62
45
  });
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
- });
46
+ const stream = result.body;
47
+ done.resolve(stream);
67
48
  return done.promise;
68
49
  }
50
+ async document(optionsArg) {
51
+ let pdfDocumentImageBytesArray = [];
52
+ for (const pdfDocument of optionsArg.pdfDocuments) {
53
+ const documentImageArray = await this.smartpdfInstance.convertPDFToPngBytes(pdfDocument);
54
+ pdfDocumentImageBytesArray = pdfDocumentImageBytesArray.concat(documentImageArray);
55
+ }
56
+ console.log(`image smartfile array`);
57
+ console.log(pdfDocumentImageBytesArray.map((smartfile) => smartfile.length));
58
+ const smartfileArray = await plugins.smartarray.map(pdfDocumentImageBytesArray, async (pdfDocumentImageBytes) => {
59
+ return plugins.smartfile.SmartFile.fromBuffer('pdfDocumentImage.jpg', Buffer.from(pdfDocumentImageBytes));
60
+ });
61
+ const result = await this.openAiApiClient.chat.completions.create({
62
+ model: 'gpt-4-vision-preview',
63
+ // response_format: { type: "json_object" }, // not supported for now
64
+ messages: [
65
+ { role: 'system', content: optionsArg.systemMessage },
66
+ ...optionsArg.messageHistory,
67
+ {
68
+ role: 'user',
69
+ content: [
70
+ { type: 'text', text: optionsArg.userMessage },
71
+ ...(() => {
72
+ const returnArray = [];
73
+ for (const imageBytes of pdfDocumentImageBytesArray) {
74
+ returnArray.push({
75
+ type: 'image_url',
76
+ image_url: {
77
+ url: 'data:image/png;base64,' + Buffer.from(imageBytes).toString('base64'),
78
+ },
79
+ });
80
+ }
81
+ return returnArray;
82
+ })(),
83
+ ],
84
+ },
85
+ ],
86
+ });
87
+ return {
88
+ message: result.choices[0].message,
89
+ };
90
+ }
69
91
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIub3BlbmFpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIub3BlbmFpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFJNUMsWUFBWSxXQUFtQjtRQUM3QixLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsNkJBQTZCO0lBQy9ELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNoRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDeEIsdUJBQXVCLEVBQUUsSUFBSTtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksS0FBSSxDQUFDO0lBRWYsVUFBVSxDQUFDLEtBQTZCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxjQUFjLEdBQXNELEVBQUUsQ0FBQztRQUUzRSxPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDcEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUM7b0JBQ0gsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDO29CQUNoQixPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVB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
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIub3BlbmFpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcHJvdmlkZXIub3BlbmFpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU1uRSxNQUFNLE9BQU8sY0FBZSxTQUFRLGVBQWU7SUFLakQsWUFBWSxVQUFrQztRQUM1QyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDaEQsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztZQUNoQyx1QkFBdUIsRUFBRSxJQUFJO1NBQzlCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJLEtBQUksQ0FBQztJQUVmLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBNkI7UUFDbkQsNkJBQTZCO1FBRTdCLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDMUMsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELGdEQUFnRDtJQUN6QyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBT2pCO1FBQ0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBQ2hFLEtBQUssRUFBRSxxQkFBcUI7WUFFNUIsUUFBUSxFQUFFO2dCQUNSLEVB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
@@ -0,0 +1,2 @@
1
+ export declare class PerplexityProvider {
2
+ }
@@ -0,0 +1,4 @@
1
+ import * as plugins from './plugins.js';
2
+ export class PerplexityProvider {
3
+ }
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIucGVycGxleGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3Byb3ZpZGVyLnBlcnBsZXhpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxPQUFPLGtCQUFrQjtDQUFHIn0=