48 lines
2.0 KiB
TypeScript
48 lines
2.0 KiB
TypeScript
/**
|
|
* Bifrost — gateway LLM (remplace les appels directs Mistral)
|
|
* Endpoint OpenAI-compatible : POST {bifrostUrl}/v1/chat/completions
|
|
* Auth : header x-bf-vk
|
|
*
|
|
* 2 tiers validés (Mission M3, build Bifrost) :
|
|
* RAPIDE — défaut, pas de toggle UI mode rapide/approfondi sur le site actuellement
|
|
* APPROFONDI — activable via body.mode === 'approfondi' (prêt pour un futur toggle front)
|
|
*
|
|
* ⚠ openrouter-oai exclu (bug Bifrost confirmé — 404 HTML sur modèles avec slash)
|
|
* ⚠ gemini-oai exige le préfixe "models/" (sinon 403 silencieux)
|
|
* ⚠ cerebras/gemma-4-31b RETIRÉ du tier RAPIDE (M4, 15/07) : en JSON mode avec un contexte
|
|
* réel (prompt + ~20 fiches), le modèle part en boucle de répétition dégénérée ("1 1 1...")
|
|
* dans ~75% des cas où il sert de fallback, produit un JSON invalide, et Bifrost ne bascule
|
|
* PAS plus loin dans la chaîne (HTTP 200 côté provider = pas une erreur pour Bifrost). Bug
|
|
* constaté en prod sur chatbot-reseaux (1 échec/3), reproduit 3/4 sur appel direct Bifrost.
|
|
* Cerebras reste configuré dans Bifrost (dispo pour tier CODE ou reconfiguration future),
|
|
* juste plus dans cette chaîne tant que ce n'est pas fiabilisé.
|
|
*/
|
|
|
|
export const BIFROST_TIER_RAPIDE = {
|
|
model: 'groq/llama-3.1-8b-instant',
|
|
fallbacks: [
|
|
'gemini-oai/models/gemini-2.5-flash-lite',
|
|
'cohere/command-r-08-2024',
|
|
],
|
|
}
|
|
|
|
export const BIFROST_TIER_APPROFONDI = {
|
|
model: 'groq/llama-3.3-70b-versatile',
|
|
fallbacks: [
|
|
'gemini-oai/models/gemini-2.5-flash',
|
|
'mistral/mistral-large-latest',
|
|
'cohere/command-r-plus-08-2024',
|
|
],
|
|
}
|
|
|
|
/** Sélectionne le tier selon le param optionnel body.mode. */
|
|
export function pickBifrostTier(mode?: string) {
|
|
return mode === 'approfondi' ? BIFROST_TIER_APPROFONDI : BIFROST_TIER_RAPIDE
|
|
}
|
|
|
|
export interface BifrostChatResponse {
|
|
choices: { message: { content: string } }[]
|
|
usage?: { prompt_tokens: number; completion_tokens: number }
|
|
extra_fields?: { provider?: string; resolved_model_used?: string }
|
|
}
|