ProviderHistoryCompat
Le Processor ProviderHistoryCompat gère les incompatibilités de l’historique propres aux Providers. Il peut réécrire le prompt sortant du modèle de langage avant l’appel d’un Provider, ou réagir aux erreurs de l’API et effectuer une nouvelle tentative avec un historique de messages corrigé.
Utilisez-le lorsqu’un Agent peut passer d’un Provider de modèles à un autre ou réutiliser un historique de messages entre plusieurs Providers. Il gère également les Providers qui rejettent les champs émis par un autre Provider.
Exemple d’utilisationLien direct vers Exemple d’utilisation
Ajoutez ProviderHistoryCompat à inputProcessors lorsque vous souhaitez mettre toutes les règles de compatibilité intégrées à la disposition d’un Agent :
import { Agent } from '@mastra/core/agent'
import { ProviderHistoryCompat } from '@mastra/core/processors'
export const agent = new Agent({
id: 'my-agent',
name: 'my-agent',
instructions: 'You are a helpful assistant.',
model: 'anthropic/claude-sonnet-4-5',
inputProcessors: [new ProviderHistoryCompat()],
})
Les Agents Mastra n’ajoutent pas automatiquement ce Processor. Ajoutez-le explicitement lorsque vous avez besoin de règles de compatibilité de l’historique des Providers, d’une récupération réactive après une erreur de l’API, de règles personnalisées ou d’un ordre prévisible des Processors.
Paramètres du constructeurLien direct vers Paramètres du constructeur
opts?:
additionalRules?:
PropriétésLien direct vers Propriétés
id:
name:
processLLMRequest:
processAPIError:
Règles intégréesLien direct vers Règles intégrées
ProviderHistoryCompat comprend les règles de compatibilité intégrées suivantes :
| Règle | Provider | Moment | Comportement |
|---|---|---|---|
anthropic-tool-id-format | Anthropic | Récupération réactive après une erreur de l’API | Réécrit les ID d’appel de Tool qui contiennent des caractères extérieurs à [a-zA-Z0-9_-], puis effectue une nouvelle tentative. |
cerebras-strip-reasoning-content | Cerebras | Réécriture préventive du prompt | Supprime les parties reasoning de l’assistant dans le prompt sortant afin qu’elles ne soient pas sérialisées sous forme de champs reasoning_content non pris en charge. |
anthropic-strip-foreign-reasoning-content | Anthropic | Réécriture préventive du prompt | Supprime du prompt sortant les parties reasoning de l’assistant qui ne proviennent pas d’Anthropic. L’historique de réflexion natif d’Anthropic est conservé. |
Les règles préventives s’exécutent par l’intermédiaire de processLLMRequest, après que Mastra a converti les messages au format de prompt du modèle et avant l’envoi du prompt au Provider. Ces réécritures concernent uniquement l’appel actuel du Provider.
Les règles réactives s’exécutent par l’intermédiaire de processAPIError après le rejet d’un Provider. Elles peuvent mettre à jour la messageList persistante et demander une nouvelle tentative.
CompatRuleLien direct vers compatrule
Une CompatRule définit un correctif de compatibilité de l’historique d’un Provider :
import type { CompatRule } from '@mastra/core/processors'
const removeUnsupportedPromptParts: CompatRule = {
name: 'remove-unsupported-prompt-parts',
applyToPrompt({ prompt, model }) {
// Return a modified LanguageModelV2Prompt, or undefined to leave it unchanged.
return undefined
},
}
name:
errorPatterns?:
fix?:
applyToPrompt?:
Règles personnaliséesLien direct vers Règles personnalisées
Transmettez les règles personnalisées au moyen de additionalRules. Elles s’exécutent après les règles intégrées :
import { Agent } from '@mastra/core/agent'
import { ProviderHistoryCompat, type CompatRule } from '@mastra/core/processors'
const stripUnsupportedAssistantMetadata: CompatRule = {
name: 'strip-unsupported-assistant-metadata',
applyToPrompt({ prompt, model }) {
if (typeof model !== 'string' || !model.startsWith('example-provider/')) {
return undefined
}
let changed = false
const nextPrompt = prompt.map(message => {
if (message.role !== 'assistant' || typeof message.content === 'string') {
return message
}
const nextContent = message.content.map(part => {
if (!('providerOptions' in part)) return part
changed = true
const { providerOptions: _providerOptions, ...rest } = part
return rest
})
return { ...message, content: nextContent }
})
return changed ? nextPrompt : undefined
},
}
export const agent = new Agent({
id: 'custom-provider-agent',
name: 'custom-provider-agent',
instructions: 'You are a helpful assistant.',
model: 'example-provider/model',
inputProcessors: [
new ProviderHistoryCompat({
additionalRules: [stripUnsupportedAssistantMetadata],
}),
],
})
Utilisez applyToPrompt pour les réécritures propres au Provider qui ne doivent pas être enregistrées dans la mémoire. Utilisez fix avec errorPatterns lorsque le Provider rejette un historique de messages persistant et que l’historique corrigé doit être réutilisé lors des tours suivants.