Adaptateur Personnalisé
Par défaut, Guard extrait le texte des objets de réponse compatibles OpenAI. Utilisez un adaptateur personnalisé pour prendre en charge n'importe quel fournisseur LLM — Cohere, Mistral, un modèle auto-hébergé, ou n'importe quelle API personnalisée.
Comportement par Défaut
Guard gère automatiquement les réponses au format standard OpenAI :
// Cela fonctionne nativement avec OpenAI, Anthropic (via SDK), et les APIs compatibles OpenAI
const result = await guard.protect(
(prompt) => openai.chat.completions.create({ ... }),
userPrompt
);Analyseur de Réponse Personnalisé
const guard = new Guardian({
adapter: {
// Indique à Guard comment extraire le texte de la réponse de votre LLM
extractText: (response) => {
// Pour une API personnalisée qui retourne { output: { text: string } }
return response.output.text;
},
// Extrait optionnellement le nombre de tokens
extractUsage: (response) => ({
inputTokens: response.usage.prompt_tokens,
outputTokens: response.usage.completion_tokens,
}),
},
});Exemple Cohere
const { CohereClient } = require('cohere-ai');
const cohere = new CohereClient({ token: process.env.COHERE_API_KEY });
const guard = new Guardian({
adapter: {
extractText: (response) => response.text,
extractUsage: (response) => ({
inputTokens: response.meta?.tokens?.inputTokens ?? 0,
outputTokens: response.meta?.tokens?.outputTokens ?? 0,
}),
},
schema: { validator: MySchema },
pii: { targets: ['email', 'phone'] },
});
const result = await guard.protect(
(prompt) => cohere.generate({ prompt, model: 'command-r-plus' }),
userPrompt
);Exemple Mistral / Llama
import Mistral from '@mistralai/mistralai';
const mistral = new Mistral({ apiKey: process.env.MISTRAL_API_KEY });
const guard = new Guardian({
adapter: {
// Mistral utilise le même format qu'OpenAI
extractText: (r) => r.choices[0].message.content,
extractUsage: (r) => ({
inputTokens: r.usage.promptTokens,
outputTokens: r.usage.completionTokens,
}),
},
});
const result = await guard.protect(
(prompt) => mistral.chat.complete({
model: 'mistral-large-latest',
messages: [{ role: 'user', content: prompt }],
}),
userPrompt
);Interface de l'Adaptateur
interface GuardAdapter {
// Requis : extrait le contenu texte de la réponse du LLM
extractText(response: unknown): string;
// Optionnel : extrait l'utilisation des tokens pour le suivi du budget
extractUsage?(response: unknown): {
inputTokens: number;
outputTokens: number;
};
// Optionnel : transforme la réponse après le traitement par Guard
transformResponse?(response: unknown, guardedText: string): unknown;
}