@ai-sdk/groq 4.0.0-beta.1 → 4.0.0-beta.10
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/CHANGELOG.md +73 -4
- package/dist/index.d.mts +6 -5
- package/dist/index.d.ts +6 -5
- package/dist/index.js +22 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -7
- package/dist/index.mjs.map +1 -1
- package/docs/09-groq.mdx +3 -2
- package/package.json +3 -5
- package/src/convert-groq-usage.ts +2 -2
- package/src/convert-to-groq-chat-messages.ts +2 -2
- package/src/groq-chat-language-model.ts +39 -22
- package/src/groq-chat-options.ts +2 -1
- package/src/groq-prepare-tools.ts +6 -6
- package/src/groq-provider.ts +8 -8
- package/src/groq-transcription-model.ts +7 -7
- package/src/map-groq-finish-reason.ts +2 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InvalidResponseDataError,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
LanguageModelV4,
|
|
4
|
+
LanguageModelV4CallOptions,
|
|
5
|
+
LanguageModelV4Content,
|
|
6
|
+
LanguageModelV4FinishReason,
|
|
7
|
+
LanguageModelV4GenerateResult,
|
|
8
|
+
LanguageModelV4StreamPart,
|
|
9
|
+
LanguageModelV4StreamResult,
|
|
10
|
+
SharedV4ProviderMetadata,
|
|
11
|
+
SharedV4Warning,
|
|
12
12
|
} from '@ai-sdk/provider';
|
|
13
13
|
import {
|
|
14
14
|
FetchFunction,
|
|
@@ -17,7 +17,9 @@ import {
|
|
|
17
17
|
createEventSourceResponseHandler,
|
|
18
18
|
createJsonResponseHandler,
|
|
19
19
|
generateId,
|
|
20
|
+
isCustomReasoning,
|
|
20
21
|
isParsableJson,
|
|
22
|
+
mapReasoningToProviderEffort,
|
|
21
23
|
parseProviderOptions,
|
|
22
24
|
postJsonToApi,
|
|
23
25
|
} from '@ai-sdk/provider-utils';
|
|
@@ -37,8 +39,8 @@ type GroqChatConfig = {
|
|
|
37
39
|
fetch?: FetchFunction;
|
|
38
40
|
};
|
|
39
41
|
|
|
40
|
-
export class GroqChatLanguageModel implements
|
|
41
|
-
readonly specificationVersion = '
|
|
42
|
+
export class GroqChatLanguageModel implements LanguageModelV4 {
|
|
43
|
+
readonly specificationVersion = 'v4';
|
|
42
44
|
|
|
43
45
|
readonly modelId: GroqChatModelId;
|
|
44
46
|
|
|
@@ -68,14 +70,15 @@ export class GroqChatLanguageModel implements LanguageModelV3 {
|
|
|
68
70
|
stopSequences,
|
|
69
71
|
responseFormat,
|
|
70
72
|
seed,
|
|
73
|
+
reasoning,
|
|
71
74
|
stream,
|
|
72
75
|
tools,
|
|
73
76
|
toolChoice,
|
|
74
77
|
providerOptions,
|
|
75
|
-
}:
|
|
78
|
+
}: LanguageModelV4CallOptions & {
|
|
76
79
|
stream: boolean;
|
|
77
80
|
}) {
|
|
78
|
-
const warnings:
|
|
81
|
+
const warnings: SharedV4Warning[] = [];
|
|
79
82
|
|
|
80
83
|
const groqOptions = await parseProviderOptions({
|
|
81
84
|
provider: 'groq',
|
|
@@ -145,7 +148,21 @@ export class GroqChatLanguageModel implements LanguageModelV3 {
|
|
|
145
148
|
|
|
146
149
|
// provider options:
|
|
147
150
|
reasoning_format: groqOptions?.reasoningFormat,
|
|
148
|
-
reasoning_effort:
|
|
151
|
+
reasoning_effort:
|
|
152
|
+
groqOptions?.reasoningEffort ??
|
|
153
|
+
(isCustomReasoning(reasoning) && reasoning !== 'none'
|
|
154
|
+
? mapReasoningToProviderEffort({
|
|
155
|
+
reasoning,
|
|
156
|
+
effortMap: {
|
|
157
|
+
minimal: 'low',
|
|
158
|
+
low: 'low',
|
|
159
|
+
medium: 'medium',
|
|
160
|
+
high: 'high',
|
|
161
|
+
xhigh: 'high',
|
|
162
|
+
},
|
|
163
|
+
warnings,
|
|
164
|
+
})
|
|
165
|
+
: undefined),
|
|
149
166
|
service_tier: groqOptions?.serviceTier,
|
|
150
167
|
|
|
151
168
|
// messages:
|
|
@@ -160,8 +177,8 @@ export class GroqChatLanguageModel implements LanguageModelV3 {
|
|
|
160
177
|
}
|
|
161
178
|
|
|
162
179
|
async doGenerate(
|
|
163
|
-
options:
|
|
164
|
-
): Promise<
|
|
180
|
+
options: LanguageModelV4CallOptions,
|
|
181
|
+
): Promise<LanguageModelV4GenerateResult> {
|
|
165
182
|
const { args, warnings } = await this.getArgs({
|
|
166
183
|
...options,
|
|
167
184
|
stream: false,
|
|
@@ -189,7 +206,7 @@ export class GroqChatLanguageModel implements LanguageModelV3 {
|
|
|
189
206
|
});
|
|
190
207
|
|
|
191
208
|
const choice = response.choices[0];
|
|
192
|
-
const content: Array<
|
|
209
|
+
const content: Array<LanguageModelV4Content> = [];
|
|
193
210
|
|
|
194
211
|
// text content:
|
|
195
212
|
const text = choice.message.content;
|
|
@@ -236,8 +253,8 @@ export class GroqChatLanguageModel implements LanguageModelV3 {
|
|
|
236
253
|
}
|
|
237
254
|
|
|
238
255
|
async doStream(
|
|
239
|
-
options:
|
|
240
|
-
): Promise<
|
|
256
|
+
options: LanguageModelV4CallOptions,
|
|
257
|
+
): Promise<LanguageModelV4StreamResult> {
|
|
241
258
|
const { args, warnings } = await this.getArgs({ ...options, stream: true });
|
|
242
259
|
|
|
243
260
|
const body = JSON.stringify({ ...args, stream: true });
|
|
@@ -269,7 +286,7 @@ export class GroqChatLanguageModel implements LanguageModelV3 {
|
|
|
269
286
|
hasFinished: boolean;
|
|
270
287
|
}> = [];
|
|
271
288
|
|
|
272
|
-
let finishReason:
|
|
289
|
+
let finishReason: LanguageModelV4FinishReason = {
|
|
273
290
|
unified: 'other',
|
|
274
291
|
raw: undefined,
|
|
275
292
|
};
|
|
@@ -295,12 +312,12 @@ export class GroqChatLanguageModel implements LanguageModelV3 {
|
|
|
295
312
|
let isActiveText = false;
|
|
296
313
|
let isActiveReasoning = false;
|
|
297
314
|
|
|
298
|
-
let providerMetadata:
|
|
315
|
+
let providerMetadata: SharedV4ProviderMetadata | undefined;
|
|
299
316
|
return {
|
|
300
317
|
stream: response.pipeThrough(
|
|
301
318
|
new TransformStream<
|
|
302
319
|
ParseResult<z.infer<typeof groqChatChunkSchema>>,
|
|
303
|
-
|
|
320
|
+
LanguageModelV4StreamPart
|
|
304
321
|
>({
|
|
305
322
|
start(controller) {
|
|
306
323
|
controller.enqueue({ type: 'stream-start', warnings });
|
package/src/groq-chat-options.ts
CHANGED
|
@@ -67,12 +67,13 @@ export const groqLanguageModelOptions = z.object({
|
|
|
67
67
|
/**
|
|
68
68
|
* Service tier for the request.
|
|
69
69
|
* - 'on_demand': Default tier with consistent performance and fairness
|
|
70
|
+
* - 'performance': Prioritized tier for latency-sensitive workloads
|
|
70
71
|
* - 'flex': Higher throughput tier optimized for workloads that can handle occasional request failures
|
|
71
72
|
* - 'auto': Uses on_demand rate limits, then falls back to flex tier if exceeded
|
|
72
73
|
*
|
|
73
74
|
* @default 'on_demand'
|
|
74
75
|
*/
|
|
75
|
-
serviceTier: z.enum(['on_demand', 'flex', 'auto']).optional(),
|
|
76
|
+
serviceTier: z.enum(['on_demand', 'performance', 'flex', 'auto']).optional(),
|
|
76
77
|
});
|
|
77
78
|
|
|
78
79
|
export type GroqLanguageModelOptions = z.infer<typeof groqLanguageModelOptions>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
LanguageModelV4CallOptions,
|
|
3
|
+
SharedV4Warning,
|
|
4
4
|
UnsupportedFunctionalityError,
|
|
5
5
|
} from '@ai-sdk/provider';
|
|
6
6
|
import {
|
|
@@ -14,8 +14,8 @@ export function prepareTools({
|
|
|
14
14
|
toolChoice,
|
|
15
15
|
modelId,
|
|
16
16
|
}: {
|
|
17
|
-
tools:
|
|
18
|
-
toolChoice?:
|
|
17
|
+
tools: LanguageModelV4CallOptions['tools'];
|
|
18
|
+
toolChoice?: LanguageModelV4CallOptions['toolChoice'];
|
|
19
19
|
modelId: GroqChatModelId;
|
|
20
20
|
}): {
|
|
21
21
|
tools:
|
|
@@ -40,12 +40,12 @@ export function prepareTools({
|
|
|
40
40
|
| 'none'
|
|
41
41
|
| 'required'
|
|
42
42
|
| undefined;
|
|
43
|
-
toolWarnings:
|
|
43
|
+
toolWarnings: SharedV4Warning[];
|
|
44
44
|
} {
|
|
45
45
|
// when the tools array is empty, change it to undefined to prevent errors:
|
|
46
46
|
tools = tools?.length ? tools : undefined;
|
|
47
47
|
|
|
48
|
-
const toolWarnings:
|
|
48
|
+
const toolWarnings: SharedV4Warning[] = [];
|
|
49
49
|
|
|
50
50
|
if (tools == null) {
|
|
51
51
|
return { tools: undefined, toolChoice: undefined, toolWarnings };
|
package/src/groq-provider.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
LanguageModelV4,
|
|
3
3
|
NoSuchModelError,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
ProviderV4,
|
|
5
|
+
TranscriptionModelV4,
|
|
6
6
|
} from '@ai-sdk/provider';
|
|
7
7
|
import {
|
|
8
8
|
FetchFunction,
|
|
@@ -17,21 +17,21 @@ import { GroqTranscriptionModel } from './groq-transcription-model';
|
|
|
17
17
|
|
|
18
18
|
import { groqTools } from './groq-tools';
|
|
19
19
|
import { VERSION } from './version';
|
|
20
|
-
export interface GroqProvider extends
|
|
20
|
+
export interface GroqProvider extends ProviderV4 {
|
|
21
21
|
/**
|
|
22
22
|
* Creates a model for text generation.
|
|
23
23
|
*/
|
|
24
|
-
(modelId: GroqChatModelId):
|
|
24
|
+
(modelId: GroqChatModelId): LanguageModelV4;
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Creates an Groq chat model for text generation.
|
|
28
28
|
*/
|
|
29
|
-
languageModel(modelId: GroqChatModelId):
|
|
29
|
+
languageModel(modelId: GroqChatModelId): LanguageModelV4;
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Creates a model for transcription.
|
|
33
33
|
*/
|
|
34
|
-
transcription(modelId: GroqTranscriptionModelId):
|
|
34
|
+
transcription(modelId: GroqTranscriptionModelId): TranscriptionModelV4;
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
37
|
* Tools provided by Groq.
|
|
@@ -118,7 +118,7 @@ export function createGroq(options: GroqProviderSettings = {}): GroqProvider {
|
|
|
118
118
|
return createLanguageModel(modelId);
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
-
provider.specificationVersion = '
|
|
121
|
+
provider.specificationVersion = 'v4' as const;
|
|
122
122
|
provider.languageModel = createLanguageModel;
|
|
123
123
|
provider.chat = createChatModel;
|
|
124
124
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { TranscriptionModelV4, SharedV4Warning } from '@ai-sdk/provider';
|
|
2
2
|
import {
|
|
3
3
|
combineHeaders,
|
|
4
4
|
convertBase64ToUint8Array,
|
|
@@ -22,8 +22,8 @@ interface GroqTranscriptionModelConfig extends GroqConfig {
|
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
export class GroqTranscriptionModel implements
|
|
26
|
-
readonly specificationVersion = '
|
|
25
|
+
export class GroqTranscriptionModel implements TranscriptionModelV4 {
|
|
26
|
+
readonly specificationVersion = 'v4';
|
|
27
27
|
|
|
28
28
|
get provider(): string {
|
|
29
29
|
return this.config.provider;
|
|
@@ -38,8 +38,8 @@ export class GroqTranscriptionModel implements TranscriptionModelV3 {
|
|
|
38
38
|
audio,
|
|
39
39
|
mediaType,
|
|
40
40
|
providerOptions,
|
|
41
|
-
}: Parameters<
|
|
42
|
-
const warnings:
|
|
41
|
+
}: Parameters<TranscriptionModelV4['doGenerate']>[0]) {
|
|
42
|
+
const warnings: SharedV4Warning[] = [];
|
|
43
43
|
|
|
44
44
|
// Parse provider options
|
|
45
45
|
const groqOptions = await parseProviderOptions({
|
|
@@ -101,8 +101,8 @@ export class GroqTranscriptionModel implements TranscriptionModelV3 {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
async doGenerate(
|
|
104
|
-
options: Parameters<
|
|
105
|
-
): Promise<Awaited<ReturnType<
|
|
104
|
+
options: Parameters<TranscriptionModelV4['doGenerate']>[0],
|
|
105
|
+
): Promise<Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>> {
|
|
106
106
|
const currentDate = this.config._internal?.currentDate?.() ?? new Date();
|
|
107
107
|
const { formData, warnings } = await this.getArgs(options);
|
|
108
108
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LanguageModelV4FinishReason } from '@ai-sdk/provider';
|
|
2
2
|
|
|
3
3
|
export function mapGroqFinishReason(
|
|
4
4
|
finishReason: string | null | undefined,
|
|
5
|
-
):
|
|
5
|
+
): LanguageModelV4FinishReason['unified'] {
|
|
6
6
|
switch (finishReason) {
|
|
7
7
|
case 'stop':
|
|
8
8
|
return 'stop';
|