SPB Git forge

spb/immbot-ai

Public
1commits 1branches 0releases
1.5 MBsize
maindefault branch
20 days agolast push
TypeScript 98.3% CSS 0.9% Shell 0.7%
2.5 KB · 52 lines markdown
Rendered Raw Blame History
1# Intégration OpenRouter — Immbot AI23## Architecture45```6Navigateur ──(SSE, sans clé)── Next.js API ──(Bearer OPENROUTER_API_KEY)── openrouter.ai/api/v17```89La clé ne quitte **jamais** le serveur (`lib/openrouter/client.ts`, `registry.ts`).1011## Registre dynamique (`lib/openrouter/registry.ts`)1213- `GET /models` → normalisation (prix $/M jetons, modalités d'entrée, `supported_parameters`) →14  **cache mémoire 15 min** (l'ancien cache sert de secours si l'API échoue).15- Capacités détectées : images, fichiers, outils, raisonnement, sortie structurée, contexte max.16- Palier de coût calculé (`économique` < 1 $/M pondéré ≤ `modéré` < 8 $/M ≤ `coûteux`) — les17  étudiants voient le palier, l'admin voit les prix exacts.18- **Surcharges admin** (`model_overrides`) : activer/désactiver, favori, note. Un modèle désactivé19  est refusé côté serveur même si le client force son id.20- **Préréglages** configurables (`settings.model_presets`) avec repli ordonné : le premier modèle21  disponible et activé de la liste est utilisé (`resolvePreset`).2223## Appels de complétion (`lib/openrouter/client.ts`)2425- `streamChat` : SSE (`stream: true`, `usage: {include: true}`) relayé événement par événement au26  navigateur ; supporte `models: [principal, ...secours]` pour le repli fournisseur d'OpenRouter.27- `completeChat` : non-streaming, `response_format: json_object` pour les générateurs (quiz,28  flashcards, résumés).29- Multimodal : messages `content[]` avec `image_url` (data-URL base64) pour les images ; les30  documents texte (PDF/DOCX/XLSX extraits localement) sont injectés comme texte délimité.3132## Suivi des coûts3334Chaque appel journalise jetons entrée/sortie, coût estimé (prix du registre × jetons), latence,35succès/erreur (`usage_log`). Budgets appliqués **avant** chaque appel (`lib/usage.ts`) :36par étudiant/jour, étudiant/mois, global/mois, requêtes/jour — configurables dans l'admin.3738## Choix des modèles par tâche3940| Tâche | Préréglage utilisé |41|---|---|42| Chat étudiant | choix de l'étudiant (défaut : Recommandé) |43| Génération de flashcards | Économique |44| Résumés | Recommandé |45| Titres/consolidation | (aucun appel — heuristiques locales) |4647## Limites connues4849- OpenRouter n'offre pas d'endpoint d'embeddings → embeddings **locaux** (voir rag-architecture.md).50- Les prix du registre sont indicatifs ; le coût facturé exact est visible dans le tableau de bord51  OpenRouter (l'endpoint `/generation` par requête est une évolution possible).52