@@ -15,7 +15,7 @@ import { createOpenRouter } from '@openrouter/ai-sdk-provider-v5';
1515import { parseModelRouterId } from '../gateway-resolver.js' ;
1616import { MastraModelGateway } from './base.js' ;
1717import type { GatewayLanguageModel , ProviderConfig } from './base.js' ;
18- import { EXCLUDED_PROVIDERS , PROVIDERS_WITH_INSTALLED_PACKAGES } from './constants.js' ;
18+ import { EXCLUDED_PROVIDERS , MASTRA_USER_AGENT , PROVIDERS_WITH_INSTALLED_PACKAGES } from './constants.js' ;
1919
2020interface ModelsDevProviderInfo {
2121 id : string ;
@@ -198,47 +198,41 @@ export class ModelsDevGateway extends MastraModelGateway {
198198 } ) : Promise < GatewayLanguageModel > {
199199 const baseURL = this . buildUrl ( `${ providerId } /${ modelId } ` ) ;
200200
201+ const mastraHeaders = { 'User-Agent' : MASTRA_USER_AGENT , ...headers } ;
202+
201203 switch ( providerId ) {
202204 case 'openai' :
203- return createOpenAI ( { apiKey } ) . responses ( modelId ) ;
205+ return createOpenAI ( { apiKey, headers : mastraHeaders } ) . responses ( modelId ) ;
204206 case 'gemini' :
205207 case 'google' :
206- return createGoogleGenerativeAI ( {
207- apiKey,
208- } ) . chat ( modelId ) ;
208+ return createGoogleGenerativeAI ( { apiKey, headers : mastraHeaders } ) . chat ( modelId ) ;
209209 case 'anthropic' :
210- return createAnthropic ( { apiKey } ) ( modelId ) ;
210+ return createAnthropic ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
211211 case 'mistral' :
212- return createMistral ( { apiKey } ) ( modelId ) ;
212+ return createMistral ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
213213 case 'groq' :
214- return createGroq ( { apiKey } ) ( modelId ) ;
214+ return createGroq ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
215215 case 'openrouter' :
216- // Cast needed: @openrouter /ai-sdk-provider@1.2.3 resolves against a newer @ai-sdk/provider
217- // version than @ai -sdk/provider-v5, causing structural type incompatibility
218- return createOpenRouter ( { apiKey, headers } ) ( modelId ) as unknown as GatewayLanguageModel ;
216+ return createOpenRouter ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
219217 case 'xai' :
220- return createXai ( {
221- apiKey,
222- } ) ( modelId ) ;
218+ return createXai ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
223219 case 'deepseek' :
224- return createDeepSeek ( {
225- apiKey,
226- } ) ( modelId ) ;
220+ return createDeepSeek ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
227221 case 'perplexity' :
228- return createPerplexity ( { apiKey } ) ( modelId ) ;
222+ return createPerplexity ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
229223 case 'cerebras' :
230- return createCerebras ( { apiKey } ) ( modelId ) ;
224+ return createCerebras ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
231225 case 'togetherai' :
232- return createTogetherAI ( { apiKey } ) ( modelId ) ;
226+ return createTogetherAI ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
233227 case 'deepinfra' :
234- return createDeepInfra ( { apiKey } ) ( modelId ) ;
228+ return createDeepInfra ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
235229 case 'vercel' :
236- return createGateway ( { apiKey, headers } ) ( modelId ) ;
230+ return createGateway ( { apiKey, headers : mastraHeaders } ) ( modelId ) ;
237231 case 'moonshotai' :
238232 case 'moonshotai-cn' : {
239233 // moonshotai uses Anthropic-compatible API endpoint
240234 if ( ! baseURL ) throw new Error ( `No API URL found for ${ providerId } /${ modelId } ` ) ;
241- return createAnthropic ( { apiKey, baseURL } ) ( modelId ) ;
235+ return createAnthropic ( { apiKey, baseURL, headers : mastraHeaders } ) ( modelId ) ;
242236 }
243237 default : {
244238 // Check if this provider uses a specific SDK package (e.g., kimi-for-coding uses @ai-sdk/anthropic)
@@ -247,28 +241,32 @@ export class ModelsDevGateway extends MastraModelGateway {
247241
248242 if ( npm === '@ai-sdk/anthropic' ) {
249243 if ( ! baseURL ) throw new Error ( `No API URL found for ${ providerId } /${ modelId } ` ) ;
250- return createAnthropic ( { apiKey, baseURL } ) ( modelId ) ;
244+ return createAnthropic ( { apiKey, baseURL, headers : mastraHeaders } ) ( modelId ) ;
251245 }
252246
253247 if ( npm === '@ai-sdk/openai' ) {
254248 if ( ! baseURL ) throw new Error ( `No API URL found for ${ providerId } /${ modelId } ` ) ;
255- return createOpenAI ( { apiKey, baseURL } ) . chat ( modelId ) ;
249+ return createOpenAI ( { apiKey, baseURL, headers : mastraHeaders } ) . chat ( modelId ) ;
256250 }
257251
258252 if ( npm === '@ai-sdk/google' ) {
259253 if ( ! baseURL ) throw new Error ( `No API URL found for ${ providerId } /${ modelId } ` ) ;
260- return createGoogleGenerativeAI ( { apiKey, baseURL } ) . chat ( modelId ) ;
254+ return createGoogleGenerativeAI ( { apiKey, baseURL, headers : mastraHeaders } ) . chat ( modelId ) ;
261255 }
262256
263257 if ( npm === '@ai-sdk/mistral' ) {
264258 if ( ! baseURL ) throw new Error ( `No API URL found for ${ providerId } /${ modelId } ` ) ;
265- return createMistral ( { apiKey, baseURL } ) ( modelId ) ;
259+ return createMistral ( { apiKey, baseURL, headers : mastraHeaders } ) ( modelId ) ;
266260 }
267261
268262 if ( ! baseURL ) throw new Error ( `No API URL found for ${ providerId } /${ modelId } ` ) ;
269- return createOpenAICompatible ( { name : providerId , apiKey, baseURL, supportsStructuredOutputs : true } ) . chatModel (
270- modelId ,
271- ) ;
263+ return createOpenAICompatible ( {
264+ name : providerId ,
265+ apiKey,
266+ baseURL,
267+ headers : mastraHeaders ,
268+ supportsStructuredOutputs : true ,
269+ } ) . chatModel ( modelId ) ;
272270 }
273271 }
274272 }
0 commit comments