praisonai 1.3.6 → 1.5.0

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 (170) hide show
  1. package/dist/agent/audio.d.ts +190 -0
  2. package/dist/agent/audio.js +302 -0
  3. package/dist/agent/index.d.ts +2 -0
  4. package/dist/agent/index.js +5 -1
  5. package/dist/ai/agent-loop.d.ts +177 -0
  6. package/dist/ai/agent-loop.js +313 -0
  7. package/dist/ai/devtools.d.ts +74 -0
  8. package/dist/ai/devtools.js +216 -0
  9. package/dist/ai/embed.d.ts +71 -0
  10. package/dist/ai/embed.js +154 -0
  11. package/dist/ai/generate-image.d.ts +66 -0
  12. package/dist/ai/generate-image.js +138 -0
  13. package/dist/ai/generate-object.d.ts +132 -0
  14. package/dist/ai/generate-object.js +206 -0
  15. package/dist/ai/generate-text.d.ts +201 -0
  16. package/dist/ai/generate-text.js +253 -0
  17. package/dist/ai/index.d.ts +27 -0
  18. package/dist/ai/index.js +140 -0
  19. package/dist/ai/mcp.d.ts +181 -0
  20. package/dist/ai/mcp.js +234 -0
  21. package/dist/ai/middleware.d.ts +110 -0
  22. package/dist/ai/middleware.js +186 -0
  23. package/dist/ai/models.d.ts +67 -0
  24. package/dist/ai/models.js +249 -0
  25. package/dist/ai/multimodal.d.ts +125 -0
  26. package/dist/ai/multimodal.js +270 -0
  27. package/dist/ai/nextjs.d.ts +122 -0
  28. package/dist/ai/nextjs.js +218 -0
  29. package/dist/ai/server.d.ts +126 -0
  30. package/dist/ai/server.js +336 -0
  31. package/dist/ai/speech.d.ts +135 -0
  32. package/dist/ai/speech.js +296 -0
  33. package/dist/ai/telemetry.d.ts +162 -0
  34. package/dist/ai/telemetry.js +311 -0
  35. package/dist/ai/tool-approval.d.ts +225 -0
  36. package/dist/ai/tool-approval.js +407 -0
  37. package/dist/ai/tools.d.ts +93 -0
  38. package/dist/ai/tools.js +89 -0
  39. package/dist/ai/types.d.ts +47 -0
  40. package/dist/ai/types.js +5 -0
  41. package/dist/ai/ui-message.d.ts +218 -0
  42. package/dist/ai/ui-message.js +291 -0
  43. package/dist/cli/commands/approval.d.ts +10 -0
  44. package/dist/cli/commands/approval.js +274 -0
  45. package/dist/cli/commands/observability.d.ts +7 -0
  46. package/dist/cli/commands/observability.js +202 -12
  47. package/dist/cli/commands/providers.d.ts +5 -2
  48. package/dist/cli/commands/providers.js +204 -5
  49. package/dist/cli/commands/tools.d.ts +11 -1
  50. package/dist/cli/commands/tools.js +450 -64
  51. package/dist/cli/output/errors.d.ts +1 -0
  52. package/dist/cli/output/errors.js +1 -0
  53. package/dist/cli/spec/cli-spec.js +17 -0
  54. package/dist/index.d.ts +21 -4
  55. package/dist/index.js +275 -19
  56. package/dist/integrations/computer-use.d.ts +182 -0
  57. package/dist/integrations/computer-use.js +356 -0
  58. package/dist/integrations/postgres.d.ts +162 -0
  59. package/dist/integrations/postgres.js +396 -0
  60. package/dist/integrations/slack.d.ts +145 -0
  61. package/dist/integrations/slack.js +270 -0
  62. package/dist/knowledge/chonkie-adapter.d.ts +99 -0
  63. package/dist/knowledge/chonkie-adapter.js +268 -0
  64. package/dist/knowledge/index.d.ts +5 -0
  65. package/dist/knowledge/index.js +29 -1
  66. package/dist/knowledge/query-engine.d.ts +136 -0
  67. package/dist/knowledge/query-engine.js +214 -0
  68. package/dist/knowledge/rag-pipeline.d.ts +192 -0
  69. package/dist/knowledge/rag-pipeline.js +283 -0
  70. package/dist/knowledge/readers.d.ts +129 -0
  71. package/dist/knowledge/readers.js +393 -0
  72. package/dist/llm/providers/ai-sdk/types.d.ts +49 -3
  73. package/dist/llm/providers/ai-sdk/types.js +169 -15
  74. package/dist/mcp/index.d.ts +188 -0
  75. package/dist/mcp/index.js +373 -0
  76. package/dist/mcp/server.d.ts +211 -0
  77. package/dist/mcp/server.js +412 -0
  78. package/dist/memory/docs-manager.d.ts +165 -0
  79. package/dist/memory/docs-manager.js +294 -0
  80. package/dist/memory/hooks.d.ts +154 -0
  81. package/dist/memory/hooks.js +228 -0
  82. package/dist/memory/rules-manager.d.ts +182 -0
  83. package/dist/memory/rules-manager.js +244 -0
  84. package/dist/observability/adapters/console.d.ts +33 -0
  85. package/dist/observability/adapters/console.js +71 -0
  86. package/dist/observability/adapters/external/arize.d.ts +20 -0
  87. package/dist/observability/adapters/external/arize.js +22 -0
  88. package/dist/observability/adapters/external/axiom.d.ts +20 -0
  89. package/dist/observability/adapters/external/axiom.js +22 -0
  90. package/dist/observability/adapters/external/braintrust.d.ts +20 -0
  91. package/dist/observability/adapters/external/braintrust.js +22 -0
  92. package/dist/observability/adapters/external/helicone.d.ts +20 -0
  93. package/dist/observability/adapters/external/helicone.js +22 -0
  94. package/dist/observability/adapters/external/laminar.d.ts +20 -0
  95. package/dist/observability/adapters/external/laminar.js +22 -0
  96. package/dist/observability/adapters/external/langfuse.d.ts +28 -0
  97. package/dist/observability/adapters/external/langfuse.js +186 -0
  98. package/dist/observability/adapters/external/langsmith.d.ts +21 -0
  99. package/dist/observability/adapters/external/langsmith.js +83 -0
  100. package/dist/observability/adapters/external/langwatch.d.ts +20 -0
  101. package/dist/observability/adapters/external/langwatch.js +22 -0
  102. package/dist/observability/adapters/external/maxim.d.ts +20 -0
  103. package/dist/observability/adapters/external/maxim.js +22 -0
  104. package/dist/observability/adapters/external/patronus.d.ts +20 -0
  105. package/dist/observability/adapters/external/patronus.js +22 -0
  106. package/dist/observability/adapters/external/scorecard.d.ts +20 -0
  107. package/dist/observability/adapters/external/scorecard.js +22 -0
  108. package/dist/observability/adapters/external/signoz.d.ts +20 -0
  109. package/dist/observability/adapters/external/signoz.js +22 -0
  110. package/dist/observability/adapters/external/traceloop.d.ts +20 -0
  111. package/dist/observability/adapters/external/traceloop.js +22 -0
  112. package/dist/observability/adapters/external/weave.d.ts +20 -0
  113. package/dist/observability/adapters/external/weave.js +22 -0
  114. package/dist/observability/adapters/index.d.ts +19 -0
  115. package/dist/observability/adapters/index.js +289 -0
  116. package/dist/observability/adapters/memory.d.ts +41 -0
  117. package/dist/observability/adapters/memory.js +190 -0
  118. package/dist/observability/adapters/noop.d.ts +25 -0
  119. package/dist/observability/adapters/noop.js +64 -0
  120. package/dist/observability/index.d.ts +39 -78
  121. package/dist/observability/index.js +99 -150
  122. package/dist/observability/types.d.ts +165 -0
  123. package/dist/observability/types.js +165 -0
  124. package/dist/tools/builtins/airweave.d.ts +32 -0
  125. package/dist/tools/builtins/airweave.js +119 -0
  126. package/dist/tools/builtins/bedrock-agentcore.d.ts +62 -0
  127. package/dist/tools/builtins/bedrock-agentcore.js +233 -0
  128. package/dist/tools/builtins/code-execution.d.ts +36 -0
  129. package/dist/tools/builtins/code-execution.js +136 -0
  130. package/dist/tools/builtins/code-mode.d.ts +54 -0
  131. package/dist/tools/builtins/code-mode.js +167 -0
  132. package/dist/tools/builtins/custom.d.ts +42 -0
  133. package/dist/tools/builtins/custom.js +195 -0
  134. package/dist/tools/builtins/exa.d.ts +53 -0
  135. package/dist/tools/builtins/exa.js +112 -0
  136. package/dist/tools/builtins/firecrawl.d.ts +56 -0
  137. package/dist/tools/builtins/firecrawl.js +158 -0
  138. package/dist/tools/builtins/index.d.ts +45 -0
  139. package/dist/tools/builtins/index.js +180 -0
  140. package/dist/tools/builtins/parallel.d.ts +30 -0
  141. package/dist/tools/builtins/parallel.js +113 -0
  142. package/dist/tools/builtins/perplexity.d.ts +32 -0
  143. package/dist/tools/builtins/perplexity.js +113 -0
  144. package/dist/tools/builtins/superagent.d.ts +66 -0
  145. package/dist/tools/builtins/superagent.js +187 -0
  146. package/dist/tools/builtins/tavily.d.ts +99 -0
  147. package/dist/tools/builtins/tavily.js +285 -0
  148. package/dist/tools/builtins/valyu.d.ts +65 -0
  149. package/dist/tools/builtins/valyu.js +193 -0
  150. package/dist/tools/index.d.ts +5 -0
  151. package/dist/tools/index.js +16 -2
  152. package/dist/tools/registry/index.d.ts +9 -0
  153. package/dist/tools/registry/index.js +28 -0
  154. package/dist/tools/registry/middleware.d.ts +43 -0
  155. package/dist/tools/registry/middleware.js +220 -0
  156. package/dist/tools/registry/registry.d.ts +92 -0
  157. package/dist/tools/registry/registry.js +280 -0
  158. package/dist/tools/registry/types.d.ts +217 -0
  159. package/dist/tools/registry/types.js +49 -0
  160. package/dist/tools/subagent.d.ts +131 -0
  161. package/dist/tools/subagent.js +185 -0
  162. package/dist/tools/tools.d.ts +74 -0
  163. package/dist/tools/tools.js +133 -0
  164. package/dist/workflows/index.d.ts +76 -1
  165. package/dist/workflows/index.js +125 -6
  166. package/dist/workflows/loop.d.ts +111 -0
  167. package/dist/workflows/loop.js +274 -0
  168. package/dist/workflows/repeat.d.ts +115 -0
  169. package/dist/workflows/repeat.js +144 -0
  170. package/package.json +4 -1
@@ -0,0 +1,190 @@
1
+ /**
2
+ * AudioAgent - Speech synthesis and transcription agent
3
+ *
4
+ * Wraps AI SDK's generateSpeech and transcribe functions for
5
+ * text-to-speech and speech-to-text capabilities.
6
+ *
7
+ * Requires AI SDK: npm install ai @ai-sdk/openai
8
+ *
9
+ * @example Text-to-Speech
10
+ * ```typescript
11
+ * import { AudioAgent } from 'praisonai';
12
+ *
13
+ * const agent = new AudioAgent({
14
+ * provider: 'openai',
15
+ * voice: 'alloy'
16
+ * });
17
+ *
18
+ * const audio = await agent.speak('Hello, world!');
19
+ * // Returns audio buffer
20
+ * ```
21
+ *
22
+ * @example Speech-to-Text
23
+ * ```typescript
24
+ * const agent = new AudioAgent({ provider: 'openai' });
25
+ *
26
+ * const text = await agent.transcribe('./audio.mp3');
27
+ * console.log(text); // "Hello, world!"
28
+ * ```
29
+ */
30
+ /**
31
+ * Supported audio providers
32
+ */
33
+ export type AudioProvider = 'openai' | 'elevenlabs' | 'google' | 'deepgram' | 'groq';
34
+ /**
35
+ * Voice options by provider
36
+ */
37
+ export type OpenAIVoice = 'alloy' | 'echo' | 'fable' | 'onyx' | 'nova' | 'shimmer';
38
+ export type ElevenLabsVoice = string;
39
+ /**
40
+ * Audio format options
41
+ */
42
+ export type AudioFormat = 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
43
+ /**
44
+ * Configuration for AudioAgent
45
+ */
46
+ export interface AudioAgentConfig {
47
+ /** Name of the agent */
48
+ name?: string;
49
+ /** Audio provider (default: 'openai') */
50
+ provider?: AudioProvider;
51
+ /** Voice to use for TTS */
52
+ voice?: string;
53
+ /** TTS model to use (provider-specific) */
54
+ model?: string;
55
+ /** Audio output format */
56
+ format?: AudioFormat;
57
+ /** Speed multiplier for TTS (0.25 to 4.0) */
58
+ speed?: number;
59
+ /** Language for transcription */
60
+ language?: string;
61
+ /** Enable verbose logging */
62
+ verbose?: boolean;
63
+ }
64
+ /**
65
+ * Options for speak method
66
+ */
67
+ export interface SpeakOptions {
68
+ /** Override voice for this call */
69
+ voice?: string;
70
+ /** Override model for this call */
71
+ model?: string;
72
+ /** Override format for this call */
73
+ format?: AudioFormat;
74
+ /** Override speed for this call */
75
+ speed?: number;
76
+ }
77
+ /**
78
+ * Options for transcribe method
79
+ */
80
+ export interface TranscribeOptions {
81
+ /** Language hint for transcription */
82
+ language?: string;
83
+ /** Include word-level timestamps */
84
+ timestamps?: boolean;
85
+ /** Return detailed segments */
86
+ segments?: boolean;
87
+ }
88
+ /**
89
+ * Result from speak method
90
+ */
91
+ export interface SpeakResult {
92
+ /** Audio data as Buffer or ArrayBuffer */
93
+ audio: Buffer | ArrayBuffer;
94
+ /** Duration in seconds (if available) */
95
+ duration?: number;
96
+ /** Audio format */
97
+ format: string;
98
+ }
99
+ /**
100
+ * Result from transcribe method
101
+ */
102
+ export interface TranscribeResult {
103
+ /** Transcribed text */
104
+ text: string;
105
+ /** Detected language */
106
+ language?: string;
107
+ /** Duration in seconds */
108
+ duration?: number;
109
+ /** Word-level timestamps (if requested) */
110
+ words?: Array<{
111
+ word: string;
112
+ start: number;
113
+ end: number;
114
+ }>;
115
+ /** Segments (if requested) */
116
+ segments?: Array<{
117
+ text: string;
118
+ start: number;
119
+ end: number;
120
+ }>;
121
+ }
122
+ /**
123
+ * AudioAgent - Speech synthesis and transcription
124
+ */
125
+ export declare class AudioAgent {
126
+ readonly id: string;
127
+ readonly name: string;
128
+ private config;
129
+ constructor(config?: AudioAgentConfig);
130
+ /**
131
+ * Get default TTS model for provider
132
+ */
133
+ private getDefaultModel;
134
+ /**
135
+ * Generate speech from text (Text-to-Speech)
136
+ *
137
+ * @param text - Text to convert to speech
138
+ * @param options - Override options for this call
139
+ * @returns Audio data with metadata
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const result = await agent.speak('Hello, world!');
144
+ * fs.writeFileSync('output.mp3', result.audio);
145
+ * ```
146
+ */
147
+ speak(text: string, options?: SpeakOptions): Promise<SpeakResult>;
148
+ /**
149
+ * Get provider-specific speech model
150
+ */
151
+ private getSpeechModel;
152
+ /**
153
+ * Transcribe audio to text (Speech-to-Text)
154
+ *
155
+ * @param audioInput - Audio file path, URL, or Buffer
156
+ * @param options - Transcription options
157
+ * @returns Transcribed text with metadata
158
+ *
159
+ * @example From file
160
+ * ```typescript
161
+ * const result = await agent.transcribe('./audio.mp3');
162
+ * console.log(result.text);
163
+ * ```
164
+ *
165
+ * @example From Buffer
166
+ * ```typescript
167
+ * const audioBuffer = fs.readFileSync('./audio.mp3');
168
+ * const result = await agent.transcribe(audioBuffer);
169
+ * ```
170
+ */
171
+ transcribe(audioInput: string | Buffer | ArrayBuffer, options?: TranscribeOptions): Promise<TranscribeResult>;
172
+ /**
173
+ * Prepare audio input for transcription
174
+ */
175
+ private prepareAudioInput;
176
+ /**
177
+ * Get provider-specific transcription model
178
+ */
179
+ private getTranscriptionModel;
180
+ /**
181
+ * Chat method for agent-like interface
182
+ * Determines whether to speak or transcribe based on input
183
+ */
184
+ chat(input: string): Promise<string>;
185
+ }
186
+ /**
187
+ * Factory function to create AudioAgent
188
+ */
189
+ export declare function createAudioAgent(config?: AudioAgentConfig): AudioAgent;
190
+ export default AudioAgent;
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ /**
3
+ * AudioAgent - Speech synthesis and transcription agent
4
+ *
5
+ * Wraps AI SDK's generateSpeech and transcribe functions for
6
+ * text-to-speech and speech-to-text capabilities.
7
+ *
8
+ * Requires AI SDK: npm install ai @ai-sdk/openai
9
+ *
10
+ * @example Text-to-Speech
11
+ * ```typescript
12
+ * import { AudioAgent } from 'praisonai';
13
+ *
14
+ * const agent = new AudioAgent({
15
+ * provider: 'openai',
16
+ * voice: 'alloy'
17
+ * });
18
+ *
19
+ * const audio = await agent.speak('Hello, world!');
20
+ * // Returns audio buffer
21
+ * ```
22
+ *
23
+ * @example Speech-to-Text
24
+ * ```typescript
25
+ * const agent = new AudioAgent({ provider: 'openai' });
26
+ *
27
+ * const text = await agent.transcribe('./audio.mp3');
28
+ * console.log(text); // "Hello, world!"
29
+ * ```
30
+ */
31
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ var desc = Object.getOwnPropertyDescriptor(m, k);
34
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
35
+ desc = { enumerable: true, get: function() { return m[k]; } };
36
+ }
37
+ Object.defineProperty(o, k2, desc);
38
+ }) : (function(o, m, k, k2) {
39
+ if (k2 === undefined) k2 = k;
40
+ o[k2] = m[k];
41
+ }));
42
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
43
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
44
+ }) : function(o, v) {
45
+ o["default"] = v;
46
+ });
47
+ var __importStar = (this && this.__importStar) || (function () {
48
+ var ownKeys = function(o) {
49
+ ownKeys = Object.getOwnPropertyNames || function (o) {
50
+ var ar = [];
51
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
52
+ return ar;
53
+ };
54
+ return ownKeys(o);
55
+ };
56
+ return function (mod) {
57
+ if (mod && mod.__esModule) return mod;
58
+ var result = {};
59
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
60
+ __setModuleDefault(result, mod);
61
+ return result;
62
+ };
63
+ })();
64
+ Object.defineProperty(exports, "__esModule", { value: true });
65
+ exports.AudioAgent = void 0;
66
+ exports.createAudioAgent = createAudioAgent;
67
+ const crypto_1 = require("crypto");
68
+ /**
69
+ * AudioAgent - Speech synthesis and transcription
70
+ */
71
+ class AudioAgent {
72
+ constructor(config = {}) {
73
+ this.id = (0, crypto_1.randomUUID)();
74
+ this.name = config.name ?? `AudioAgent_${(0, crypto_1.randomUUID)().slice(0, 8)}`;
75
+ this.config = {
76
+ provider: config.provider ?? 'openai',
77
+ voice: config.voice ?? 'alloy',
78
+ model: config.model ?? this.getDefaultModel(config.provider ?? 'openai'),
79
+ format: config.format ?? 'mp3',
80
+ speed: config.speed ?? 1.0,
81
+ language: config.language ?? 'en',
82
+ verbose: config.verbose ?? false,
83
+ };
84
+ }
85
+ /**
86
+ * Get default TTS model for provider
87
+ */
88
+ getDefaultModel(provider) {
89
+ switch (provider) {
90
+ case 'openai':
91
+ return 'tts-1';
92
+ case 'elevenlabs':
93
+ return 'eleven_multilingual_v2';
94
+ case 'google':
95
+ return 'text-to-speech';
96
+ case 'deepgram':
97
+ return 'aura-asteria-en';
98
+ case 'groq':
99
+ return 'whisper-large-v3';
100
+ default:
101
+ return 'tts-1';
102
+ }
103
+ }
104
+ /**
105
+ * Generate speech from text (Text-to-Speech)
106
+ *
107
+ * @param text - Text to convert to speech
108
+ * @param options - Override options for this call
109
+ * @returns Audio data with metadata
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * const result = await agent.speak('Hello, world!');
114
+ * fs.writeFileSync('output.mp3', result.audio);
115
+ * ```
116
+ */
117
+ async speak(text, options) {
118
+ const voice = options?.voice ?? this.config.voice;
119
+ const model = options?.model ?? this.config.model;
120
+ const speed = options?.speed ?? this.config.speed;
121
+ if (this.config.verbose) {
122
+ console.log(`[AudioAgent] Speaking with ${this.config.provider}/${model}, voice: ${voice}`);
123
+ }
124
+ try {
125
+ // Lazy import AI SDK
126
+ const { experimental_generateSpeech: generateSpeech } = await Promise.resolve().then(() => __importStar(require('ai')));
127
+ // Get provider-specific speech model
128
+ const speechModel = await this.getSpeechModel(model, voice);
129
+ const result = await generateSpeech({
130
+ model: speechModel,
131
+ text,
132
+ voice,
133
+ // Note: speed is provider-specific, may not be supported by all
134
+ });
135
+ // Handle both Buffer and audio file object types
136
+ const audioData = result.audio instanceof Buffer
137
+ ? result.audio
138
+ : (result.audio.arrayBuffer
139
+ ? await result.audio.arrayBuffer()
140
+ : result.audio);
141
+ return {
142
+ audio: audioData,
143
+ format: this.config.format,
144
+ duration: result.duration, // If available
145
+ };
146
+ }
147
+ catch (error) {
148
+ // Check for common issues
149
+ if (error.message?.includes('Cannot find module')) {
150
+ throw new Error(`AI SDK not installed. Run: npm install ai @ai-sdk/${this.config.provider}`);
151
+ }
152
+ throw error;
153
+ }
154
+ }
155
+ /**
156
+ * Get provider-specific speech model
157
+ */
158
+ async getSpeechModel(model, voice) {
159
+ switch (this.config.provider) {
160
+ case 'openai': {
161
+ const { openai } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/openai')));
162
+ return openai.speech(model);
163
+ }
164
+ case 'elevenlabs': {
165
+ // @ts-ignore - optional dependency
166
+ const elevenlabsModule = await Promise.resolve().then(() => __importStar(require('@ai-sdk/elevenlabs'))).catch(() => null);
167
+ if (!elevenlabsModule)
168
+ throw new Error('Install @ai-sdk/elevenlabs for ElevenLabs support');
169
+ return elevenlabsModule.elevenlabs.speech(model);
170
+ }
171
+ case 'google': {
172
+ const { google } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/google')));
173
+ return google.speech?.(model) ?? google(model);
174
+ }
175
+ default:
176
+ throw new Error(`Provider ${this.config.provider} not supported for TTS`);
177
+ }
178
+ }
179
+ /**
180
+ * Transcribe audio to text (Speech-to-Text)
181
+ *
182
+ * @param audioInput - Audio file path, URL, or Buffer
183
+ * @param options - Transcription options
184
+ * @returns Transcribed text with metadata
185
+ *
186
+ * @example From file
187
+ * ```typescript
188
+ * const result = await agent.transcribe('./audio.mp3');
189
+ * console.log(result.text);
190
+ * ```
191
+ *
192
+ * @example From Buffer
193
+ * ```typescript
194
+ * const audioBuffer = fs.readFileSync('./audio.mp3');
195
+ * const result = await agent.transcribe(audioBuffer);
196
+ * ```
197
+ */
198
+ async transcribe(audioInput, options) {
199
+ const language = options?.language ?? this.config.language;
200
+ if (this.config.verbose) {
201
+ console.log(`[AudioAgent] Transcribing with ${this.config.provider}`);
202
+ }
203
+ try {
204
+ // Lazy import AI SDK
205
+ const { experimental_transcribe: transcribe } = await Promise.resolve().then(() => __importStar(require('ai')));
206
+ // Convert input to appropriate format
207
+ const audio = await this.prepareAudioInput(audioInput);
208
+ // Get provider-specific transcription model
209
+ const transcriptionModel = await this.getTranscriptionModel();
210
+ const result = await transcribe({
211
+ model: transcriptionModel,
212
+ audio,
213
+ // language, // If supported by provider
214
+ });
215
+ return {
216
+ text: result.text,
217
+ language: result.language,
218
+ duration: result.duration,
219
+ words: options?.timestamps ? result.words : undefined,
220
+ segments: options?.segments ? result.segments : undefined,
221
+ };
222
+ }
223
+ catch (error) {
224
+ if (error.message?.includes('Cannot find module')) {
225
+ throw new Error(`AI SDK not installed. Run: npm install ai @ai-sdk/${this.config.provider}`);
226
+ }
227
+ throw error;
228
+ }
229
+ }
230
+ /**
231
+ * Prepare audio input for transcription
232
+ */
233
+ async prepareAudioInput(input) {
234
+ if (typeof input === 'string') {
235
+ // Check if it's a URL
236
+ if (input.startsWith('http://') || input.startsWith('https://')) {
237
+ return { type: 'url', url: input };
238
+ }
239
+ // Assume it's a file path - load with fs
240
+ const fs = await Promise.resolve().then(() => __importStar(require('fs'))).catch(() => null);
241
+ if (!fs) {
242
+ throw new Error('File loading requires Node.js fs module');
243
+ }
244
+ const buffer = fs.readFileSync(input);
245
+ return { type: 'buffer', data: buffer };
246
+ }
247
+ // Already a buffer
248
+ return { type: 'buffer', data: input };
249
+ }
250
+ /**
251
+ * Get provider-specific transcription model
252
+ */
253
+ async getTranscriptionModel() {
254
+ switch (this.config.provider) {
255
+ case 'openai': {
256
+ const { openai } = await Promise.resolve().then(() => __importStar(require('@ai-sdk/openai')));
257
+ return openai.transcription('whisper-1');
258
+ }
259
+ case 'groq': {
260
+ // @ts-ignore - optional dependency
261
+ const groqModule = await Promise.resolve().then(() => __importStar(require('@ai-sdk/groq'))).catch(() => null);
262
+ if (!groqModule)
263
+ throw new Error('Install @ai-sdk/groq for Groq support');
264
+ return groqModule.groq.transcription?.('whisper-large-v3') ?? groqModule.groq('whisper-large-v3');
265
+ }
266
+ case 'deepgram': {
267
+ // @ts-ignore - optional dependency
268
+ const deepgramModule = await Promise.resolve().then(() => __importStar(require('@ai-sdk/deepgram'))).catch(() => null);
269
+ if (!deepgramModule)
270
+ throw new Error('Install @ai-sdk/deepgram for Deepgram support');
271
+ return deepgramModule.deepgram.transcription?.('nova-2') ?? deepgramModule.deepgram('nova-2');
272
+ }
273
+ default:
274
+ throw new Error(`Provider ${this.config.provider} not supported for transcription`);
275
+ }
276
+ }
277
+ /**
278
+ * Chat method for agent-like interface
279
+ * Determines whether to speak or transcribe based on input
280
+ */
281
+ async chat(input) {
282
+ // If input looks like a file path, transcribe it
283
+ if (input.endsWith('.mp3') || input.endsWith('.wav') ||
284
+ input.endsWith('.m4a') || input.endsWith('.ogg') ||
285
+ input.startsWith('http')) {
286
+ const result = await this.transcribe(input);
287
+ return result.text;
288
+ }
289
+ // Otherwise, speak the text and return info
290
+ const result = await this.speak(input);
291
+ return `[Audio generated: ${result.format}, ${result.audio.byteLength} bytes]`;
292
+ }
293
+ }
294
+ exports.AudioAgent = AudioAgent;
295
+ /**
296
+ * Factory function to create AudioAgent
297
+ */
298
+ function createAudioAgent(config) {
299
+ return new AudioAgent(config);
300
+ }
301
+ // Default export
302
+ exports.default = AudioAgent;
@@ -9,6 +9,8 @@
9
9
  */
10
10
  export { Agent, PraisonAIAgents, Agents } from './simple';
11
11
  export type { SimpleAgentConfig, PraisonAIAgentsConfig } from './simple';
12
+ export { AudioAgent, createAudioAgent } from './audio';
13
+ export type { AudioAgentConfig, SpeakOptions, TranscribeOptions, SpeakResult, TranscribeResult, AudioProvider } from './audio';
12
14
  export { Router, RouterAgent, createRouter, routeConditions } from './router';
13
15
  export type { RouterConfig, RouteConfig, RouteContext, SimpleRouterConfig, SimpleRouteConfig } from './router';
14
16
  export { Task } from './types';
@@ -9,13 +9,17 @@
9
9
  * - Workflow: Step-based workflow execution (from workflows module)
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Task = exports.routeConditions = exports.createRouter = exports.RouterAgent = exports.Router = exports.Agents = exports.PraisonAIAgents = exports.Agent = void 0;
12
+ exports.Task = exports.routeConditions = exports.createRouter = exports.RouterAgent = exports.Router = exports.createAudioAgent = exports.AudioAgent = exports.Agents = exports.PraisonAIAgents = exports.Agent = void 0;
13
13
  exports.setTaskMode = setTaskMode;
14
14
  // Core exports - the main API surface
15
15
  var simple_1 = require("./simple");
16
16
  Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return simple_1.Agent; } });
17
17
  Object.defineProperty(exports, "PraisonAIAgents", { enumerable: true, get: function () { return simple_1.PraisonAIAgents; } });
18
18
  Object.defineProperty(exports, "Agents", { enumerable: true, get: function () { return simple_1.Agents; } });
19
+ // AudioAgent - Speech synthesis and transcription
20
+ var audio_1 = require("./audio");
21
+ Object.defineProperty(exports, "AudioAgent", { enumerable: true, get: function () { return audio_1.AudioAgent; } });
22
+ Object.defineProperty(exports, "createAudioAgent", { enumerable: true, get: function () { return audio_1.createAudioAgent; } });
19
23
  // Router exports
20
24
  var router_1 = require("./router");
21
25
  Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return router_1.Router; } });
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Agent Loop - Manual Agent Loop Control
3
+ *
4
+ * Provides utilities for manual control of agent execution loops.
5
+ */
6
+ import type { Message } from './types';
7
+ export interface AgentLoopConfig {
8
+ /** Model to use */
9
+ model: string;
10
+ /** System prompt */
11
+ system?: string;
12
+ /** Available tools */
13
+ tools?: Record<string, AgentTool>;
14
+ /** Maximum steps (default: 10) */
15
+ maxSteps?: number;
16
+ /** Stop condition */
17
+ stopWhen?: StopCondition;
18
+ /** On step finish callback */
19
+ onStepFinish?: (step: AgentStep) => void | Promise<void>;
20
+ /** On tool call callback (for approval) */
21
+ onToolCall?: (toolCall: ToolCallInfo) => Promise<boolean>;
22
+ }
23
+ export interface AgentTool {
24
+ description: string;
25
+ parameters: any;
26
+ execute: (args: any) => Promise<any>;
27
+ }
28
+ export interface AgentStep {
29
+ stepNumber: number;
30
+ text: string;
31
+ toolCalls: ToolCallInfo[];
32
+ toolResults: ToolResultInfo[];
33
+ usage: {
34
+ promptTokens: number;
35
+ completionTokens: number;
36
+ totalTokens: number;
37
+ };
38
+ finishReason: string;
39
+ }
40
+ export interface ToolCallInfo {
41
+ toolCallId: string;
42
+ toolName: string;
43
+ args: any;
44
+ }
45
+ export interface ToolResultInfo {
46
+ toolCallId: string;
47
+ toolName: string;
48
+ result: any;
49
+ isError?: boolean;
50
+ }
51
+ export type StopCondition = {
52
+ type: 'stepCount';
53
+ count: number;
54
+ } | {
55
+ type: 'noToolCalls';
56
+ } | {
57
+ type: 'custom';
58
+ check: (step: AgentStep) => boolean;
59
+ };
60
+ export interface AgentLoopResult {
61
+ text: string;
62
+ steps: AgentStep[];
63
+ totalUsage: {
64
+ promptTokens: number;
65
+ completionTokens: number;
66
+ totalTokens: number;
67
+ };
68
+ finishReason: string;
69
+ }
70
+ /**
71
+ * Create a manual agent loop for fine-grained control.
72
+ *
73
+ * @example Basic usage
74
+ * ```typescript
75
+ * const loop = createAgentLoop({
76
+ * model: 'gpt-4o',
77
+ * system: 'You are a helpful assistant',
78
+ * tools: {
79
+ * search: {
80
+ * description: 'Search the web',
81
+ * parameters: z.object({ query: z.string() }),
82
+ * execute: async ({ query }) => searchWeb(query)
83
+ * }
84
+ * },
85
+ * maxSteps: 5
86
+ * });
87
+ *
88
+ * const result = await loop.run('Find information about AI');
89
+ * ```
90
+ *
91
+ * @example With approval
92
+ * ```typescript
93
+ * const loop = createAgentLoop({
94
+ * model: 'gpt-4o',
95
+ * tools: { ... },
96
+ * onToolCall: async (toolCall) => {
97
+ * const approved = await askUserForApproval(toolCall);
98
+ * return approved;
99
+ * }
100
+ * });
101
+ * ```
102
+ *
103
+ * @example Step-by-step control
104
+ * ```typescript
105
+ * const loop = createAgentLoop({ model: 'gpt-4o', tools: { ... } });
106
+ *
107
+ * // Initialize with a prompt
108
+ * loop.addMessage({ role: 'user', content: 'Hello' });
109
+ *
110
+ * // Run one step at a time
111
+ * while (!loop.isComplete()) {
112
+ * const step = await loop.step();
113
+ * console.log('Step:', step);
114
+ *
115
+ * // Optionally modify messages or tools between steps
116
+ * if (needsMoreContext) {
117
+ * loop.addMessage({ role: 'user', content: 'Additional context...' });
118
+ * }
119
+ * }
120
+ *
121
+ * const result = loop.getResult();
122
+ * ```
123
+ */
124
+ export declare function createAgentLoop(config: AgentLoopConfig): AgentLoop;
125
+ export declare class AgentLoop {
126
+ private config;
127
+ private messages;
128
+ private steps;
129
+ private currentStep;
130
+ private complete;
131
+ private totalUsage;
132
+ constructor(config: AgentLoopConfig);
133
+ /**
134
+ * Add a message to the conversation.
135
+ */
136
+ addMessage(message: Message): void;
137
+ /**
138
+ * Get all messages in the conversation.
139
+ */
140
+ getMessages(): Message[];
141
+ /**
142
+ * Check if the loop is complete.
143
+ */
144
+ isComplete(): boolean;
145
+ /**
146
+ * Run a single step of the agent loop.
147
+ */
148
+ step(): Promise<AgentStep>;
149
+ /**
150
+ * Run the full agent loop until completion.
151
+ */
152
+ run(prompt: string): Promise<AgentLoopResult>;
153
+ /**
154
+ * Get the final result.
155
+ */
156
+ getResult(): AgentLoopResult;
157
+ /**
158
+ * Check if the loop should stop.
159
+ */
160
+ private shouldStop;
161
+ /**
162
+ * Reset the agent loop.
163
+ */
164
+ reset(): void;
165
+ }
166
+ /**
167
+ * Create a stop condition that stops after N steps.
168
+ */
169
+ export declare function stopAfterSteps(count: number): StopCondition;
170
+ /**
171
+ * Create a stop condition that stops when no tool calls are made.
172
+ */
173
+ export declare function stopWhenNoToolCalls(): StopCondition;
174
+ /**
175
+ * Create a custom stop condition.
176
+ */
177
+ export declare function stopWhen(check: (step: AgentStep) => boolean): StopCondition;