Skip to content

Commit ccce59b

Browse files
authored
feat (provider): support changing provider, model, supportedUrls in middleware (#6840)
## Background Language model middleware may need to change the model, provider, and supported urls of a model. ## Summary support changing provider, model, supportedUrls in middleware
1 parent 023ba40 commit ccce59b

File tree

5 files changed

+189
-52
lines changed

5 files changed

+189
-52
lines changed

‎.changeset/bright-turtles-give.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@ai-sdk/provider': major
3+
---
4+
5+
feat (provider): support changing provider, model, supportedUrls in middleware

‎packages/ai/core/middleware/default-settings-middleware.test.ts

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import { LanguageModelV2CallOptions } from '@ai-sdk/provider';
22
import { defaultSettingsMiddleware } from './default-settings-middleware';
3+
import { MockLanguageModelV2 } from '../test/mock-language-model-v2';
34

45
const BASE_PARAMS: LanguageModelV2CallOptions = {
56
prompt: [
67
{ role: 'user', content: [{ type: 'text', text: 'Hello, world!' }] },
78
],
89
};
910

11+
const MOCK_MODEL = new MockLanguageModelV2();
12+
1013
describe('defaultSettingsMiddleware', () => {
1114
describe('transformParams', () => {
1215
it('should apply default settings', async () => {
@@ -16,9 +19,8 @@ describe('defaultSettingsMiddleware', () => {
1619

1720
const result = await middleware.transformParams!({
1821
type: 'generate',
19-
params: {
20-
...BASE_PARAMS,
21-
},
22+
params: { ...BASE_PARAMS },
23+
model: MOCK_MODEL,
2224
});
2325

2426
expect(result.temperature).toBe(0.7);
@@ -35,6 +37,7 @@ describe('defaultSettingsMiddleware', () => {
3537
...BASE_PARAMS,
3638
temperature: 0.5,
3739
},
40+
model: MOCK_MODEL,
3841
});
3942

4043
expect(result.temperature).toBe(0.5);
@@ -54,9 +57,8 @@ describe('defaultSettingsMiddleware', () => {
5457

5558
const result = await middleware.transformParams!({
5659
type: 'generate',
57-
params: {
58-
...BASE_PARAMS,
59-
},
60+
params: { ...BASE_PARAMS },
61+
model: MOCK_MODEL,
6062
});
6163

6264
expect(result.temperature).toBe(0.7);
@@ -93,6 +95,7 @@ describe('defaultSettingsMiddleware', () => {
9395
},
9496
},
9597
},
98+
model: MOCK_MODEL,
9699
});
97100

98101
expect(result.providerOptions).toEqual({
@@ -134,6 +137,7 @@ describe('defaultSettingsMiddleware', () => {
134137
},
135138
},
136139
},
140+
model: MOCK_MODEL,
137141
});
138142

139143
expect(result.providerOptions).toEqual({
@@ -157,6 +161,7 @@ describe('defaultSettingsMiddleware', () => {
157161
const result = await middleware.transformParams!({
158162
type: 'generate',
159163
params: { ...BASE_PARAMS, temperature: 0 },
164+
model: MOCK_MODEL,
160165
});
161166

162167
expect(result.temperature).toBe(0);
@@ -170,6 +175,7 @@ describe('defaultSettingsMiddleware', () => {
170175
const result = await middleware.transformParams!({
171176
type: 'generate',
172177
params: { ...BASE_PARAMS, temperature: undefined },
178+
model: MOCK_MODEL,
173179
});
174180

175181
expect(result.temperature).toBe(0.7);
@@ -183,6 +189,7 @@ describe('defaultSettingsMiddleware', () => {
183189
const result = await middleware.transformParams!({
184190
type: 'generate',
185191
params: { ...BASE_PARAMS, temperature: null as any },
192+
model: MOCK_MODEL,
186193
});
187194

188195
expect(result.temperature).toBe(null);
@@ -196,6 +203,7 @@ describe('defaultSettingsMiddleware', () => {
196203
const result = await middleware.transformParams!({
197204
type: 'generate',
198205
params: { ...BASE_PARAMS, temperature: 0.9 },
206+
model: MOCK_MODEL,
199207
});
200208

201209
expect(result.temperature).toBe(0.9);
@@ -210,6 +218,7 @@ describe('defaultSettingsMiddleware', () => {
210218
const result = await middleware.transformParams!({
211219
type: 'generate',
212220
params: BASE_PARAMS,
221+
model: MOCK_MODEL,
213222
});
214223
expect(result.maxOutputTokens).toBe(100);
215224
});
@@ -221,6 +230,7 @@ describe('defaultSettingsMiddleware', () => {
221230
const result = await middleware.transformParams!({
222231
type: 'generate',
223232
params: { ...BASE_PARAMS, maxOutputTokens: 50 },
233+
model: MOCK_MODEL,
224234
});
225235
expect(result.maxOutputTokens).toBe(50);
226236
});
@@ -232,6 +242,7 @@ describe('defaultSettingsMiddleware', () => {
232242
const result = await middleware.transformParams!({
233243
type: 'generate',
234244
params: BASE_PARAMS,
245+
model: MOCK_MODEL,
235246
});
236247
expect(result.stopSequences).toEqual(['stop']);
237248
});
@@ -243,6 +254,7 @@ describe('defaultSettingsMiddleware', () => {
243254
const result = await middleware.transformParams!({
244255
type: 'generate',
245256
params: { ...BASE_PARAMS, stopSequences: ['end'] },
257+
model: MOCK_MODEL,
246258
});
247259
expect(result.stopSequences).toEqual(['end']);
248260
});
@@ -252,6 +264,7 @@ describe('defaultSettingsMiddleware', () => {
252264
const result = await middleware.transformParams!({
253265
type: 'generate',
254266
params: BASE_PARAMS,
267+
model: MOCK_MODEL,
255268
});
256269
expect(result.topP).toBe(0.9);
257270
});
@@ -261,6 +274,7 @@ describe('defaultSettingsMiddleware', () => {
261274
const result = await middleware.transformParams!({
262275
type: 'generate',
263276
params: { ...BASE_PARAMS, topP: 0.5 },
277+
model: MOCK_MODEL,
264278
});
265279
expect(result.topP).toBe(0.5);
266280
});
@@ -280,6 +294,7 @@ describe('defaultSettingsMiddleware', () => {
280294
...BASE_PARAMS,
281295
headers: { 'X-Custom-Header': 'test2' },
282296
},
297+
model: MOCK_MODEL,
283298
});
284299

285300
expect(result.headers).toEqual({
@@ -295,6 +310,7 @@ describe('defaultSettingsMiddleware', () => {
295310
const result = await middleware.transformParams!({
296311
type: 'generate',
297312
params: { ...BASE_PARAMS, headers: { 'X-Param-Header': 'param' } },
313+
model: MOCK_MODEL,
298314
});
299315
expect(result.headers).toEqual({ 'X-Param-Header': 'param' });
300316
});
@@ -306,6 +322,7 @@ describe('defaultSettingsMiddleware', () => {
306322
const result = await middleware.transformParams!({
307323
type: 'generate',
308324
params: { ...BASE_PARAMS, headers: {} },
325+
model: MOCK_MODEL,
309326
});
310327
expect(result.headers).toEqual({ 'X-Default-Header': 'default' });
311328
});
@@ -317,6 +334,7 @@ describe('defaultSettingsMiddleware', () => {
317334
const result = await middleware.transformParams!({
318335
type: 'generate',
319336
params: { ...BASE_PARAMS },
337+
model: MOCK_MODEL,
320338
});
321339
expect(result.headers).toBeUndefined();
322340
});
@@ -333,6 +351,7 @@ describe('defaultSettingsMiddleware', () => {
333351
...BASE_PARAMS,
334352
providerOptions: { openai: { user: 'param-user' } },
335353
},
354+
model: MOCK_MODEL,
336355
});
337356
expect(result.providerOptions).toEqual({
338357
openai: { user: 'param-user' },
@@ -346,6 +365,7 @@ describe('defaultSettingsMiddleware', () => {
346365
const result = await middleware.transformParams!({
347366
type: 'generate',
348367
params: { ...BASE_PARAMS, providerOptions: {} },
368+
model: MOCK_MODEL,
349369
});
350370
expect(result.providerOptions).toEqual({
351371
anthropic: { user: 'default-user' },
@@ -359,6 +379,7 @@ describe('defaultSettingsMiddleware', () => {
359379
const result = await middleware.transformParams!({
360380
type: 'generate',
361381
params: { ...BASE_PARAMS },
382+
model: MOCK_MODEL,
362383
});
363384
expect(result.providerOptions).toBeUndefined();
364385
});

0 commit comments

Comments
 (0)