Skip to content

Commit fa49207

Browse files
authored
chore(providers/openai-compatible): convert to providerOptions (#5673)
1 parent bd8a36c commit fa49207

File tree

47 files changed

+413
-640
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+413
-640
lines changed

‎.changeset/fair-cobras-tan.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
'@ai-sdk/openai-compatible': patch
3+
'@ai-sdk/amazon-bedrock': patch
4+
'@ai-sdk/togetherai': patch
5+
'@ai-sdk/deepinfra': patch
6+
'@ai-sdk/fireworks': patch
7+
'@ai-sdk/cerebras': patch
8+
'@ai-sdk/deepseek': patch
9+
'@ai-sdk/xai': patch
10+
---
11+
12+
feat(providers/openai-compatible): convert to providerOptions

‎content/providers/01-ai-sdk-providers/01-xai.mdx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,23 @@ xAI language models can also be used in the `streamText`, `generateObject`, and
9494

9595
### Chat Models
9696

97-
xAI chat models also support some model specific settings that are not part of
98-
the [standard call settings](/docs/ai-sdk-core/settings). You can pass them as
99-
an options argument:
97+
xAI chat models also support some model specific provider options that are not part of
98+
the [standard call settings](/docs/ai-sdk-core/settings). You can pass them in `providerOptions` argument:
10099

101100
```ts
102-
const model = xai('grok-3', {
103-
user: 'test-user', // optional unique user identifier
101+
const model = xai('grok-3');
102+
103+
await generateText({
104+
model,
105+
providerOptions: {
106+
xai: {
107+
user: 'test-user', // optional unique user identifier
108+
},
109+
},
104110
});
105111
```
106112

107-
The following optional settings are available for xAI chat models:
113+
The following optional provider options are available for xAI chat models:
108114

109115
- **user** _string_
110116

‎content/providers/02-openai-compatible-providers/01-custom-providers.mdx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,10 @@ packages/example/
3030
1. **example-chat-settings.ts** - Define chat model IDs and settings:
3131

3232
```ts
33-
import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';
34-
3533
export type ExampleChatModelId =
3634
| 'example/chat-model-1'
3735
| 'example/chat-model-2'
3836
| (string & {});
39-
40-
export interface ExampleChatSettings extends OpenAICompatibleChatSettings {
41-
// Add any custom settings here
42-
}
4337
```
4438

4539
The completion, embedding, and image settings are implemented similarly to the chat settings.
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';
2-
31
// https://inference-docs.cerebras.ai/introduction
42
export type CerebrasChatModelId =
53
| 'llama3.1-8b'
64
| 'llama3.1-70b'
75
| 'llama-3.3-70b'
86
| (string & {});
9-
10-
export interface CerebrasChatSettings extends OpenAICompatibleChatSettings {}

‎packages/cerebras/src/cerebras-provider.test.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('CerebrasProvider', () => {
2828

2929
const constructorCall =
3030
OpenAICompatibleChatLanguageModelMock.mock.calls[0];
31-
const config = constructorCall[2];
31+
const config = constructorCall[1];
3232
config.headers();
3333

3434
expect(loadApiKey).toHaveBeenCalledWith({
@@ -49,7 +49,7 @@ describe('CerebrasProvider', () => {
4949

5050
const constructorCall =
5151
OpenAICompatibleChatLanguageModelMock.mock.calls[0];
52-
const config = constructorCall[2];
52+
const config = constructorCall[1];
5353
config.headers();
5454

5555
expect(loadApiKey).toHaveBeenCalledWith({
@@ -62,9 +62,8 @@ describe('CerebrasProvider', () => {
6262
it('should return a chat model when called as a function', () => {
6363
const provider = createCerebras();
6464
const modelId = 'foo-model-id';
65-
const settings = { user: 'foo-user' };
6665

67-
const model = provider(modelId, settings);
66+
const model = provider(modelId);
6867
expect(model).toBeInstanceOf(OpenAICompatibleChatLanguageModel);
6968
});
7069
});
@@ -73,9 +72,8 @@ describe('CerebrasProvider', () => {
7372
it('should construct a language model with correct configuration', () => {
7473
const provider = createCerebras();
7574
const modelId = 'foo-model-id';
76-
const settings = { user: 'foo-user' };
7775

78-
const model = provider.languageModel(modelId, settings);
76+
const model = provider.languageModel(modelId);
7977

8078
expect(model).toBeInstanceOf(OpenAICompatibleChatLanguageModel);
8179
});
@@ -95,9 +93,8 @@ describe('CerebrasProvider', () => {
9593
it('should construct a chat model with correct configuration', () => {
9694
const provider = createCerebras();
9795
const modelId = 'foo-model-id';
98-
const settings = { user: 'foo-user' };
9996

100-
const model = provider.chat(modelId, settings);
97+
const model = provider.chat(modelId);
10198

10299
expect(model).toBeInstanceOf(OpenAICompatibleChatLanguageModel);
103100
});

‎packages/cerebras/src/cerebras-provider.ts

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@ import {
99
loadApiKey,
1010
withoutTrailingSlash,
1111
} from '@ai-sdk/provider-utils';
12-
import {
13-
CerebrasChatModelId,
14-
CerebrasChatSettings,
15-
} from './cerebras-chat-settings';
12+
import { CerebrasChatModelId } from './cerebras-chat-settings';
1613
import { z } from 'zod';
1714
import { ProviderErrorStructure } from '@ai-sdk/openai-compatible';
1815

@@ -55,26 +52,17 @@ export interface CerebrasProvider extends ProviderV2 {
5552
/**
5653
Creates a Cerebras model for text generation.
5754
*/
58-
(
59-
modelId: CerebrasChatModelId,
60-
settings?: CerebrasChatSettings,
61-
): LanguageModelV2;
55+
(modelId: CerebrasChatModelId): LanguageModelV2;
6256

6357
/**
6458
Creates a Cerebras model for text generation.
6559
*/
66-
languageModel(
67-
modelId: CerebrasChatModelId,
68-
settings?: CerebrasChatSettings,
69-
): LanguageModelV2;
60+
languageModel(modelId: CerebrasChatModelId): LanguageModelV2;
7061

7162
/**
7263
Creates a Cerebras chat model for text generation.
7364
*/
74-
chat(
75-
modelId: CerebrasChatModelId,
76-
settings?: CerebrasChatSettings,
77-
): LanguageModelV2;
65+
chat(modelId: CerebrasChatModelId): LanguageModelV2;
7866
}
7967

8068
export function createCerebras(
@@ -92,11 +80,8 @@ export function createCerebras(
9280
...options.headers,
9381
});
9482

95-
const createLanguageModel = (
96-
modelId: CerebrasChatModelId,
97-
settings: CerebrasChatSettings = {},
98-
) => {
99-
return new OpenAICompatibleChatLanguageModel(modelId, settings, {
83+
const createLanguageModel = (modelId: CerebrasChatModelId) => {
84+
return new OpenAICompatibleChatLanguageModel(modelId, {
10085
provider: `cerebras.chat`,
10186
url: ({ path }) => `${baseURL}${path}`,
10287
headers: getHeaders,
@@ -106,10 +91,8 @@ export function createCerebras(
10691
});
10792
};
10893

109-
const provider = (
110-
modelId: CerebrasChatModelId,
111-
settings?: CerebrasChatSettings,
112-
) => createLanguageModel(modelId, settings);
94+
const provider = (modelId: CerebrasChatModelId) =>
95+
createLanguageModel(modelId);
11396

11497
provider.languageModel = createLanguageModel;
11598
provider.chat = createLanguageModel;

‎packages/deepinfra/src/deepinfra-chat-settings.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';
2-
31
// https://deepinfra.com/models/text-generation
42
export type DeepInfraChatModelId =
53
| 'meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8'
@@ -69,5 +67,3 @@ export type DeepInfraChatModelId =
6967
| 'openchat/openchat-3.6-8b'
7068
| 'openchat/openchat_3.5'
7169
| (string & {});
72-
73-
export interface DeepInfraChatSettings extends OpenAICompatibleChatSettings {}
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import { OpenAICompatibleCompletionSettings } from '@ai-sdk/openai-compatible';
21
import { DeepInfraChatModelId } from './deepinfra-chat-settings';
32

43
// Use the same model IDs as chat
54
export type DeepInfraCompletionModelId = DeepInfraChatModelId;
6-
7-
export interface DeepInfraCompletionSettings
8-
extends OpenAICompatibleCompletionSettings {}

‎packages/deepinfra/src/deepinfra-embedding-settings.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { OpenAICompatibleEmbeddingSettings } from '@ai-sdk/openai-compatible';
2-
31
// https://deepinfra.com/models/embeddings
42
export type DeepInfraEmbeddingModelId =
53
| 'BAAI/bge-base-en-v1.5'
@@ -19,6 +17,3 @@ export type DeepInfraEmbeddingModelId =
1917
| 'thenlper/gte-base'
2018
| 'thenlper/gte-large'
2119
| (string & {});
22-
23-
export interface DeepInfraEmbeddingSettings
24-
extends OpenAICompatibleEmbeddingSettings {}

‎packages/deepinfra/src/deepinfra-provider.test.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ describe('DeepInfraProvider', () => {
5353
// Use the mocked version
5454
const constructorCall =
5555
OpenAICompatibleChatLanguageModelMock.mock.calls[0];
56-
const config = constructorCall[2];
56+
const config = constructorCall[1];
5757
config.headers();
5858

5959
expect(loadApiKey).toHaveBeenCalledWith({
@@ -74,7 +74,7 @@ describe('DeepInfraProvider', () => {
7474

7575
const constructorCall =
7676
OpenAICompatibleChatLanguageModelMock.mock.calls[0];
77-
const config = constructorCall[2];
77+
const config = constructorCall[1];
7878
config.headers();
7979

8080
expect(loadApiKey).toHaveBeenCalledWith({
@@ -87,9 +87,8 @@ describe('DeepInfraProvider', () => {
8787
it('should return a chat model when called as a function', () => {
8888
const provider = createDeepInfra();
8989
const modelId = 'foo-model-id';
90-
const settings = { user: 'foo-user' };
9190

92-
const model = provider(modelId, settings);
91+
const model = provider(modelId);
9392
expect(model).toBeInstanceOf(OpenAICompatibleChatLanguageModel);
9493
});
9594
});
@@ -98,14 +97,12 @@ describe('DeepInfraProvider', () => {
9897
it('should construct a chat model with correct configuration', () => {
9998
const provider = createDeepInfra();
10099
const modelId = 'deepinfra-chat-model';
101-
const settings = { user: 'foo-user' };
102100

103-
const model = provider.chatModel(modelId, settings);
101+
const model = provider.chatModel(modelId);
104102

105103
expect(model).toBeInstanceOf(OpenAICompatibleChatLanguageModel);
106104
expect(OpenAICompatibleChatLanguageModelMock).toHaveBeenCalledWith(
107105
modelId,
108-
settings,
109106
expect.objectContaining({
110107
provider: 'deepinfra.chat',
111108
defaultObjectGenerationMode: 'json',
@@ -118,9 +115,8 @@ describe('DeepInfraProvider', () => {
118115
it('should construct a completion model with correct configuration', () => {
119116
const provider = createDeepInfra();
120117
const modelId = 'deepinfra-completion-model';
121-
const settings = { user: 'foo-user' };
122118

123-
const model = provider.completionModel(modelId, settings);
119+
const model = provider.completionModel(modelId);
124120

125121
expect(model).toBeInstanceOf(OpenAICompatibleCompletionLanguageModel);
126122
});
@@ -130,9 +126,8 @@ describe('DeepInfraProvider', () => {
130126
it('should construct a text embedding model with correct configuration', () => {
131127
const provider = createDeepInfra();
132128
const modelId = 'deepinfra-embedding-model';
133-
const settings = { user: 'foo-user' };
134129

135-
const model = provider.textEmbeddingModel(modelId, settings);
130+
const model = provider.textEmbeddingModel(modelId);
136131

137132
expect(model).toBeInstanceOf(OpenAICompatibleEmbeddingModel);
138133
});

0 commit comments

Comments
 (0)