@memberjunction/ai-groq 6.1.0-edge.0 → 6.1.0-edge.2

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.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './models/groq.js';
2
+ export * from './models/groqAudio.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './models/groq.js';
2
+ export * from './models/groqAudio.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { AudioModel, AudioSplitter, BaseAudioGenerator, PronounciationDictionary, SpeechResult, SpeechToTextParams, TextToSpeechParams, VoiceInfo } from '@memberjunction/ai';
2
+ import Groq from 'groq-sdk';
3
+ /**
4
+ * Groq implementation of {@link BaseAudioGenerator}, covering speech-to-text via Whisper.
5
+ *
6
+ * Groq offers no text-to-speech surface, so `CreateSpeech` and the voice/dictionary methods
7
+ * are not supported — `GetSupportedMethods` reports exactly what works.
8
+ *
9
+ * Whisper on Groq does **not** do speaker diarization. There is no parameter for it and no
10
+ * way to emulate it from the response, so a caller that needs speaker labels needs a
11
+ * different provider (AssemblyAI, Deepgram) rather than a flag here.
12
+ *
13
+ * Audio above Groq's 25MB upload ceiling requires an {@link AudioSplitter}, assigned to
14
+ * {@link Splitter}. Without one, oversized audio fails with a message naming the option
15
+ * rather than silently transcribing a truncated prefix.
16
+ */
17
+ export declare class GroqAudioGenerator extends BaseAudioGenerator {
18
+ private _client;
19
+ constructor(apiKey: string);
20
+ /**
21
+ * Read only getter for the underlying Groq client instance
22
+ */
23
+ get GroqClient(): Groq;
24
+ /**
25
+ * Optional splitter used only when the audio exceeds Groq's upload ceiling. See
26
+ * {@link AudioSplitter} for why this is injected rather than bundled.
27
+ */
28
+ Splitter: AudioSplitter | null;
29
+ /**
30
+ * Transcribes audio to text using one of Groq's Whisper models.
31
+ *
32
+ * Pieces of split audio are transcribed **sequentially**, not in parallel: Groq rate
33
+ * limits by audio-seconds per minute, so firing an hour of audio at once buys nothing
34
+ * but 429s, and a partial failure mid-way would leave a transcript with an unmarked
35
+ * hole in it.
36
+ */
37
+ SpeechToText(params: SpeechToTextParams): Promise<SpeechResult>;
38
+ /**
39
+ * Resolve the audio bytes from whichever of the two input forms the caller used.
40
+ */
41
+ private resolveAudio;
42
+ private transcribeOne;
43
+ CreateSpeech(_params: TextToSpeechParams): Promise<SpeechResult>;
44
+ GetVoices(): Promise<VoiceInfo[]>;
45
+ GetModels(): Promise<AudioModel[]>;
46
+ GetPronounciationDictionaries(): Promise<PronounciationDictionary[]>;
47
+ GetSupportedMethods(): Promise<string[]>;
48
+ }
49
+ //# sourceMappingURL=groqAudio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groqAudio.d.ts","sourceRoot":"","sources":["../../src/models/groqAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,aAAa,EACb,kBAAkB,EAElB,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,IAAgB,MAAM,UAAU,CAAC;AAgBxC;;;;;;;;;;;;;GAaG;AACH,qBACa,kBAAmB,SAAQ,kBAAkB;IACtD,OAAO,CAAC,OAAO,CAAO;gBAEV,MAAM,EAAE,MAAM;IAK1B;;OAEG;IACH,IAAW,UAAU,IAAI,IAAI,CAE5B;IAED;;;OAGG;IACI,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAQ;IAE7C;;;;;;;OAOG;IACU,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAuD5E;;OAEG;IACH,OAAO,CAAC,YAAY;YAUN,aAAa;IAYd,YAAY,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhE,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKjC,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IA0BlC,6BAA6B,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAIpE,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGxD"}
@@ -0,0 +1,177 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { BaseAudioGenerator, ErrorAnalyzer, SpeechResult, } from '@memberjunction/ai';
11
+ import { RegisterClass } from '@memberjunction/global';
12
+ import Groq, { toFile } from 'groq-sdk';
13
+ /**
14
+ * Groq's documented upload ceiling for the transcription endpoint. The request is rejected
15
+ * outright above this, so it is a hard boundary rather than a tuning knob.
16
+ */
17
+ const MAX_UPLOAD_BYTES = 25 * 1024 * 1024;
18
+ /**
19
+ * Leave headroom under the ceiling: multipart framing and the form fields ride along with
20
+ * the audio, and a piece sized exactly at the limit fails for the overhead alone.
21
+ */
22
+ const SPLIT_TARGET_BYTES = 24 * 1024 * 1024;
23
+ const DEFAULT_MODEL = 'whisper-large-v3';
24
+ /**
25
+ * Groq implementation of {@link BaseAudioGenerator}, covering speech-to-text via Whisper.
26
+ *
27
+ * Groq offers no text-to-speech surface, so `CreateSpeech` and the voice/dictionary methods
28
+ * are not supported — `GetSupportedMethods` reports exactly what works.
29
+ *
30
+ * Whisper on Groq does **not** do speaker diarization. There is no parameter for it and no
31
+ * way to emulate it from the response, so a caller that needs speaker labels needs a
32
+ * different provider (AssemblyAI, Deepgram) rather than a flag here.
33
+ *
34
+ * Audio above Groq's 25MB upload ceiling requires an {@link AudioSplitter}, assigned to
35
+ * {@link Splitter}. Without one, oversized audio fails with a message naming the option
36
+ * rather than silently transcribing a truncated prefix.
37
+ */
38
+ let GroqAudioGenerator = class GroqAudioGenerator extends BaseAudioGenerator {
39
+ constructor(apiKey) {
40
+ super(apiKey);
41
+ /**
42
+ * Optional splitter used only when the audio exceeds Groq's upload ceiling. See
43
+ * {@link AudioSplitter} for why this is injected rather than bundled.
44
+ */
45
+ this.Splitter = null;
46
+ this._client = new Groq({ apiKey: apiKey });
47
+ }
48
+ /**
49
+ * Read only getter for the underlying Groq client instance
50
+ */
51
+ get GroqClient() {
52
+ return this._client;
53
+ }
54
+ /**
55
+ * Transcribes audio to text using one of Groq's Whisper models.
56
+ *
57
+ * Pieces of split audio are transcribed **sequentially**, not in parallel: Groq rate
58
+ * limits by audio-seconds per minute, so firing an hour of audio at once buys nothing
59
+ * but 429s, and a partial failure mid-way would leave a transcript with an unmarked
60
+ * hole in it.
61
+ */
62
+ async SpeechToText(params) {
63
+ const result = new SpeechResult();
64
+ try {
65
+ const audio = this.resolveAudio(params);
66
+ const model = params.model || DEFAULT_MODEL;
67
+ let text;
68
+ if (audio.byteLength <= MAX_UPLOAD_BYTES) {
69
+ text = await this.transcribeOne(audio, model, params);
70
+ }
71
+ else {
72
+ if (!this.Splitter) {
73
+ throw new Error(`Audio is ${(audio.byteLength / (1024 * 1024)).toFixed(1)}MB, above Groq's 25MB ` +
74
+ `transcription limit. Assign an AudioSplitter to the Splitter property to transcribe ` +
75
+ `audio this size.`);
76
+ }
77
+ const pieces = await this.Splitter.Split(audio, SPLIT_TARGET_BYTES);
78
+ if (pieces.length === 0) {
79
+ throw new Error('The configured AudioSplitter returned no pieces');
80
+ }
81
+ const transcripts = [];
82
+ for (const piece of pieces) {
83
+ // A piece the splitter left oversized would fail at the API with a size
84
+ // error naming neither the splitter nor which piece; say so here instead.
85
+ if (piece.byteLength > MAX_UPLOAD_BYTES) {
86
+ throw new Error(`The configured AudioSplitter produced a ${(piece.byteLength / (1024 * 1024)).toFixed(1)}MB ` +
87
+ `piece, above Groq's 25MB limit`);
88
+ }
89
+ transcripts.push(await this.transcribeOne(piece, model, params));
90
+ }
91
+ text = transcripts.filter((t) => t.length > 0).join(' ');
92
+ }
93
+ if (text.trim().length === 0) {
94
+ // Whisper returns an empty string for silence, and for audio it could not
95
+ // decode. Both are failures from the caller's point of view — an empty
96
+ // transcript reported as success gets stored as if it were the content.
97
+ throw new Error('Transcription returned no text; the audio may be silent or in an unsupported format');
98
+ }
99
+ result.success = true;
100
+ result.content = text;
101
+ }
102
+ catch (error) {
103
+ const errorInfo = ErrorAnalyzer.analyzeError(error, 'Groq Whisper');
104
+ result.success = false;
105
+ result.errorMessage = error?.message || 'Unknown error occurred';
106
+ console.error('Groq Whisper error:', error, errorInfo);
107
+ }
108
+ return result;
109
+ }
110
+ /**
111
+ * Resolve the audio bytes from whichever of the two input forms the caller used.
112
+ */
113
+ resolveAudio(params) {
114
+ if (params.audioData && params.audioData.byteLength > 0) {
115
+ return params.audioData;
116
+ }
117
+ if (params.audioFile && params.audioFile.length > 0) {
118
+ return Buffer.from(params.audioFile, 'base64');
119
+ }
120
+ throw new Error('SpeechToText requires either audioData (Buffer) or audioFile (base 64 string)');
121
+ }
122
+ async transcribeOne(audio, model, params) {
123
+ const response = await this._client.audio.transcriptions.create({
124
+ file: await toFile(audio, params.fileName || 'audio.mp3'),
125
+ model,
126
+ response_format: 'json',
127
+ language: params.language,
128
+ prompt: params.prompt,
129
+ temperature: params.temperature,
130
+ });
131
+ return response.text ?? '';
132
+ }
133
+ async CreateSpeech(_params) {
134
+ throw new Error('Groq does not offer a text-to-speech API');
135
+ }
136
+ async GetVoices() {
137
+ // Transcription only — there are no voices to enumerate.
138
+ return [];
139
+ }
140
+ async GetModels() {
141
+ // Hardcoded rather than listed from the API: Groq's /models endpoint returns every
142
+ // model on the platform, LLMs included, with nothing on the row to identify which
143
+ // ones the transcription endpoint accepts.
144
+ return [
145
+ {
146
+ id: 'whisper-large-v3',
147
+ name: 'Whisper Large v3',
148
+ supportsTextToSpeech: false,
149
+ supportsVoiceConversion: false,
150
+ supportsStyle: false,
151
+ supportsSpeakerBoost: false,
152
+ supportsFineTuning: false,
153
+ },
154
+ {
155
+ id: 'whisper-large-v3-turbo',
156
+ name: 'Whisper Large v3 Turbo',
157
+ supportsTextToSpeech: false,
158
+ supportsVoiceConversion: false,
159
+ supportsStyle: false,
160
+ supportsSpeakerBoost: false,
161
+ supportsFineTuning: false,
162
+ },
163
+ ];
164
+ }
165
+ async GetPronounciationDictionaries() {
166
+ return [];
167
+ }
168
+ async GetSupportedMethods() {
169
+ return ['SpeechToText', 'GetModels'];
170
+ }
171
+ };
172
+ GroqAudioGenerator = __decorate([
173
+ RegisterClass(BaseAudioGenerator, 'GroqAudioGenerator'),
174
+ __metadata("design:paramtypes", [String])
175
+ ], GroqAudioGenerator);
176
+ export { GroqAudioGenerator };
177
+ //# sourceMappingURL=groqAudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groqAudio.js","sourceRoot":"","sources":["../../src/models/groqAudio.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/ai-groq",
3
3
  "type": "module",
4
- "version": "6.1.0-edge.0",
4
+ "version": "6.1.0-edge.2",
5
5
  "description": "MemberJunction Wrapper for Groq AI LPU inference engine",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -15,8 +15,8 @@
15
15
  "typescript": "^5.9.3"
16
16
  },
17
17
  "dependencies": {
18
- "@memberjunction/ai": "6.1.0-edge.0",
19
- "@memberjunction/global": "6.1.0-edge.0",
18
+ "@memberjunction/ai": "6.1.0-edge.2",
19
+ "@memberjunction/global": "6.1.0-edge.2",
20
20
  "groq-sdk": "^0.37.0"
21
21
  },
22
22
  "repository": {