Ce guide accompagne la standardisation du Synapse Core sur le format OpenAI Chat Completions (LLM-agnosticism).
Depuis février 2026, le bundle utilise le format canonique OpenAI pour tous les échanges internes. Cela permet une compatibilité totale avec n'importe quel provider (Gemini, Mistral, Claude, Ollama) sans changer la logique du service de chat.
contents. Le message système est systématiquement le premier élément avec le rôle system.LlmClientInterface : La méthode generateContent ne reçoit plus $systemInstruction en argument séparé.blocked_reason) au lieu d'enums spécifiques aux providers.Si vous souhaitez implémenter un nouveau provider, vous devez implémenter LlmClientInterface.
use ArnaudMoncondhuy\SynapseCore\Contract\LlmClientInterface;
class MyCustomClient implements LlmClientInterface
{
public function generateContent(
array $contents,
array $tools = [],
?string $model = null,
array $options = [],
array &$debugOut = []
): array {
// 1. Extraire le système si besoin (en tête de $contents)
$system = '';
if ($contents[0]['role'] === 'system') {
$system = $contents[0]['content'];
$contents = array_slice($contents, 1);
}
// 2. Traduire $contents vers votre API
// 3. Appeler votre API
// 4. Retourner un chunk normalisé
}
}
Le retour doit TOUJOURS suivre cette structure :
return [
'text' => '...', // Contenu texte généré
'thinking' => '...', // Contenu de réflexion (si supporté)
'function_calls' => [...], // Appels d'outils
'usage' => [
'prompt_tokens' => 10,
'completion_tokens' => 20,
'total_tokens' => 30,
],
'blocked' => false,
'blocked_reason' => null, // "discours haineux", "harcèlement", etc.
];
Si vous aviez un client pré-v0.5 :
$systemInstruction de vos méthodes.$contents[0]['content'] si $contents[0]['role'] === 'system'.ModelCapabilityRegistry pour vérifier les capacités du modèle avant l'envoi.blocked_category par blocked_reason dans vos retours.How can I help you explore Laravel packages today?