@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.
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  InvalidResponseDataError,
3
- LanguageModelV3,
4
- LanguageModelV3CallOptions,
5
- LanguageModelV3Content,
6
- LanguageModelV3FinishReason,
7
- LanguageModelV3GenerateResult,
8
- LanguageModelV3StreamPart,
9
- LanguageModelV3StreamResult,
10
- SharedV3ProviderMetadata,
11
- SharedV3Warning,
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 LanguageModelV3 {
41
- readonly specificationVersion = 'v3';
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
- }: LanguageModelV3CallOptions & {
78
+ }: LanguageModelV4CallOptions & {
76
79
  stream: boolean;
77
80
  }) {
78
- const warnings: SharedV3Warning[] = [];
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: groqOptions?.reasoningEffort,
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: LanguageModelV3CallOptions,
164
- ): Promise<LanguageModelV3GenerateResult> {
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<LanguageModelV3Content> = [];
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: LanguageModelV3CallOptions,
240
- ): Promise<LanguageModelV3StreamResult> {
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: LanguageModelV3FinishReason = {
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: SharedV3ProviderMetadata | undefined;
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
- LanguageModelV3StreamPart
320
+ LanguageModelV4StreamPart
304
321
  >({
305
322
  start(controller) {
306
323
  controller.enqueue({ type: 'stream-start', warnings });
@@ -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
- LanguageModelV3CallOptions,
3
- SharedV3Warning,
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: LanguageModelV3CallOptions['tools'];
18
- toolChoice?: LanguageModelV3CallOptions['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: SharedV3Warning[];
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: SharedV3Warning[] = [];
48
+ const toolWarnings: SharedV4Warning[] = [];
49
49
 
50
50
  if (tools == null) {
51
51
  return { tools: undefined, toolChoice: undefined, toolWarnings };
@@ -1,8 +1,8 @@
1
1
  import {
2
- LanguageModelV3,
2
+ LanguageModelV4,
3
3
  NoSuchModelError,
4
- ProviderV3,
5
- TranscriptionModelV3,
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 ProviderV3 {
20
+ export interface GroqProvider extends ProviderV4 {
21
21
  /**
22
22
  * Creates a model for text generation.
23
23
  */
24
- (modelId: GroqChatModelId): LanguageModelV3;
24
+ (modelId: GroqChatModelId): LanguageModelV4;
25
25
 
26
26
  /**
27
27
  * Creates an Groq chat model for text generation.
28
28
  */
29
- languageModel(modelId: GroqChatModelId): LanguageModelV3;
29
+ languageModel(modelId: GroqChatModelId): LanguageModelV4;
30
30
 
31
31
  /**
32
32
  * Creates a model for transcription.
33
33
  */
34
- transcription(modelId: GroqTranscriptionModelId): TranscriptionModelV3;
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 = 'v3' as const;
121
+ provider.specificationVersion = 'v4' as const;
122
122
  provider.languageModel = createLanguageModel;
123
123
  provider.chat = createChatModel;
124
124
 
@@ -1,4 +1,4 @@
1
- import { TranscriptionModelV3, SharedV3Warning } from '@ai-sdk/provider';
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 TranscriptionModelV3 {
26
- readonly specificationVersion = 'v3';
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<TranscriptionModelV3['doGenerate']>[0]) {
42
- const warnings: SharedV3Warning[] = [];
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<TranscriptionModelV3['doGenerate']>[0],
105
- ): Promise<Awaited<ReturnType<TranscriptionModelV3['doGenerate']>>> {
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 { LanguageModelV3FinishReason } from '@ai-sdk/provider';
1
+ import { LanguageModelV4FinishReason } from '@ai-sdk/provider';
2
2
 
3
3
  export function mapGroqFinishReason(
4
4
  finishReason: string | null | undefined,
5
- ): LanguageModelV3FinishReason['unified'] {
5
+ ): LanguageModelV4FinishReason['unified'] {
6
6
  switch (finishReason) {
7
7
  case 'stop':
8
8
  return 'stop';