WeeAgent
AI models (OpenRouter)
OpenRouter (le moteur du chat)
Le chat en streaming de WeeAgent passe par OpenRouter : un routeur unique qui donne acces a Claude, GPT, Gemini, Kimi, Mistral... avec UNE seule cle. Sans cle, le kit tourne en mode mock (demo).
1 — Creer le compte & la cle
- Va sur openrouter.ai → « Sign in » (Google, GitHub ou email).
- Menu compte → « Keys » (openrouter.ai/keys) → « Create key » → nomme-la « WeeAgent ».
- Copie la cle « sk-or-... » (montree une seule fois).
- Ajoute des credits : « Credits » → « Add credits » (paiement a l'usage, prepaye).
2 — Poser le secret (Supabase)
terminal
1supabase secrets set OPENROUTER_API_KEY=sk-or-xxxxxxxxDes que la cle est posee, l'edge function weeagent passe automatiquement du mock aux vrais modeles.
3 — Choisir les modeles
Le catalogue affiche dans le dock est dans src/weeagent/lib/models.ts. Edite la liste :
src/weeagent/lib/models.ts
1export const MODELS = [
2 { id: "anthropic/claude-haiku-4.5", label: "Claude Haiku 4.5", provider: "Anthropic", note: "Rapide — défaut" },
3 { id: "openai/gpt-4o", label: "GPT-4o", provider: "OpenAI", note: "Polyvalent" },
4 { id: "google/gemini-2.5-pro", label: "Gemini 2.5 Pro", provider: "Google", note: "Analyse" },
5 // ajoute/retire selon ton budget — l'id doit exister sur openrouter.ai/models
6];Le morceau de code (proxy)
Le proxy vit dans supabase/functions/weeagent/index.ts. Le coeur tient en quelques lignes — a recuperer tel quel si tu veux le brancher ailleurs :
supabase/functions/weeagent/index.ts
1// cœur du proxy : relaie le flux OpenRouter tel quel (SSE)
2const upstream = await fetch("https://openrouter.ai/api/v1/chat/completions", {
3 method: "POST",
4 headers: {
5 Authorization: `Bearer ${Deno.env.get("OPENROUTER_API_KEY")}`,
6 "Content-Type": "application/json",
7 },
8 body: JSON.stringify({ model, messages, stream: true }),
9});
10return new Response(upstream.body, {
11 headers: { ...cors, "Content-Type": "text/event-stream" },
12});Controle d'acces (budget)
Pour eviter qu'un utilisateur fasse exploser ta facture OpenRouter, WeeAgent compte le COUT REEL par utilisateur et par mois, et coupe au plafond (fail-closed).
Le plafond se regle sur une seule ligne dans config.ts (source unique front + edge) :
config.ts
1ai: {
2 monthlyCapCents: 200, // 2,00 EUR par utilisateur/mois — 0 = illimite
3}- Comptage : OpenRouter renvoie le cout exact (usage.include) ; le proxy weeagent le lit en teeant le flux (le navigateur recoit le flux inchange).
- Coupure : au-dessus du plafond, aucun appel n'est fait (pas d'appel = pas de cout) ; l'agent repond « Plafond de conso IA atteint pour ce mois ».
- Badge : le dock affiche « X EUR / Y EUR ce mois » quand un plafond est configure.
- Stockage : table ai_usage (migration 0008), RLS sans policy + RPC SECURITY DEFINER.
- Anti-flood : config.ai.maxPerMinute limite les requetes par minute et par utilisateur (complement du plafond en euros, protege aussi le mode mock).
Couts & repli
- Sans OPENROUTER_API_KEY → flux mock (aucun cout), le kit reste utilisable.
- Avec la cle → vrais modeles ; le modele + l'effort se choisissent dans le menu du dock.
- Prix par modele : openrouter.ai/models. Commence par un modele « rapide » (Haiku/Flash) pour limiter les couts.