Modifications et ajout de nouveaux fichiers

This commit is contained in:
Arnaud 2026-10-15 22:32:53 +02:00
parent 192629f30e
commit 5e9f90a287
7 changed files with 85 additions and 3 deletions

View file

@ -39,7 +39,7 @@ tient compte de `MAIA_CWD`, puis de `INIT_CWD` (dossier où pnpm/npm a été lan
| `core` | Contrats (`LLMProvider`, `Tool`, `AgentUI`…), boucle agent, sessions, `!`, `@fichier`, `§skill` |
| `providers` | Adaptateurs LLM : `litellm` (provider unique : requêtes au format OpenAI vers LiteLLM, voir ci-dessous) |
| `ui` | Interface Ink/React (journal, saisie, listes de choix, confirmations, spinner) |
| `agent` | L'agent MAIA : contexte (MAIA.md / CLAUDE.md), skills `.maia/skills` + outils Read/Glob/Grep/Write/Edit/Bash/TodoWrite/WebFetch |
| `agent` | L'agent MAIA : contexte (MAIA.md / CLAUDE.md), skills `.maia/skills` + outils Read/Glob/Grep/Write/Edit/Bash/TodoWrite/WebFetch/CurrentModel |
| `cli` | Point d'entrée : configuration, boucle de conversation |
Résolution du modèle (pas de défaut : s'il n'est pas défini, il est demandé) : option `--model` > variable `MAIA_MODEL`
@ -206,9 +206,10 @@ Instructions du skill… ($ARGUMENTS = arguments passés avec §sk_test)
Conséquence : sans `settings.json`, il n'y a plus de règles de permissions ni de variables d'environnement venant de la configuration de l'agent, et plus de slash-commandes personnalisées. Les outils qui demandent confirmation (Write, Edit, Bash, WebFetch) la demandent toujours.
## Outils TodoWrite et WebFetch (lot 3, première partie)
## Outils TodoWrite, WebFetch et CurrentModel
- **TodoWrite** : liste de tâches de la session (`pending` / `in_progress` / `completed`, forme `activeForm` pour la tâche en cours). Chaque appel remplace la liste ; le résultat (☐ ▶ ☑) est affiché à l'utilisateur et renvoyé au modèle. Un avertissement est ajouté si plusieurs tâches sont « en cours ».
- **CurrentModel** : renvoie le modèle LLM utilisé par la session (valeur à jour après un `/model`). Sans paramètre, sans confirmation ; le modèle est lu au moment de l'appel.
- **WebFetch** : télécharge une URL http(s) (HTML converti en Markdown avec `turndown`, JSON mis en forme, texte brut ; 5 Mo et 30 s maximum, `max_length` caractères renvoyés). Pas de JavaScript exécuté, pas de PDF ni d'images.
- Confirmation demandée à chaque appel (les règles de permissions de l'ancien `settings.json` ne sont plus lues).
- Une redirection vers un **autre domaine** n'est pas suivie : l'outil renvoie la nouvelle URL, que le modèle doit rappeler (ce qui repasse par la confirmation).
@ -244,3 +245,4 @@ Journal des évolutions, dans l'ordre :
14. **Skills dans `.maia/skills`** (dossier de lancement, dossier parent, dossier utilisateur) ; les dossiers `.claude` ne sont plus lus.
15. **Badges `@inkjs/ui`** : `INFO`, `WARN`, `FAIL` (texte d'erreur `#DC8ADD`) et `ASK` devant les questions.
16. **Suppression des modes et des extensions** : un seul agent MAIA (`packages/agent`), contexte de départ `MAIA.md` sinon `CLAUDE.md` (message `INFO`, ou `WARN` si aucun).
17. **Outil `CurrentModel`** : indique au modèle quel LLM est utilisé dans la session.

44
llm_avis.md Normal file
View file

@ -0,0 +1,44 @@
# Recommandations d'utilisation des modèles LLM
## 📊 Modèles disponibles et leurs domaines de force
### **1. Claude 4.5 Haiku** (anthropic--claude-4.5-haiku)
- **Domaines forts :** Tâches rapides et légères, traitement économique
- **Avantages :** Très rapide, coût très bas, bon pour les tâches simples
- **Idéal pour :** Réponses rapides, résumés, tâches de faible complexité
### **2. Claude 4.5 Sonnet** (anthropic--claude-4.5-sonnet) ⭐ **MEILLEUR CHOIX POLYVALENT**
- **Domaines forts :**
- 🎓 Raisonnement avancé (graduées-level)
- 💻 **Codage et traduction de code** (64% de réussite en agentic coding)
- 📝 Rédaction de contenu de qualité
- 🎨 Vision/interprétation visuelle (graphiques, charts)
- 📊 Reconnaissance de texte dans les images
- **Avantages :** Meilleur rapport intelligence/coût, 2x plus rapide que les anciens modèles
- **Idéal pour :** Travail complexe, aide à la programmation, orchestration multi-étapes
### **3. GPT-4.1** (gpt-4.1)
- **Domaines forts :** Benchmark général, raisonnement, utilisation en production stable
- **Avantages :** Version légèrement améliorée de GPT-4, toujours une référence fiable
- **Idéal pour :** Tâches générales de raisonnement, code
### **4. GPT-5 Nano** (gpt-5-nano)
- **Domaines forts :** Version légère et rapide de GPT-5
- **Avantages :** Probablement plus performant que GPT-4 avec meilleur rapport latence/intelligence
- **Idéal pour :** Tâches exigeant plus de puissance que les modèles légers
### **5. GPT-6 Astra** (gpt-6-astra)
- **Domaines forts :** Modèle de pointe OpenAI (la version la plus récente/puissante)
- **Avantages :** Probablement la meilleure performance globale
- **Idéal pour :** Tâches très complexes et exigeantes, recherche, problèmes de raisonnement avancé
## 🎯 Tableau de recommandations
| Besoin | Modèle recommandé |
|--------|-------------------|
| **Codage et programmation** | Claude 4.5 Sonnet ou GPT-6 Astra |
| **Raisonnement complexe** | GPT-6 Astra ou Claude 4.5 Sonnet |
| **Rapidité et économie** | Claude 4.5 Haiku |
| **Équilibre qualité/coût** | Claude 4.5 Sonnet ✅ |
| **Production stable** | GPT-4.1 |
| **Tâches légères/rapides** | Claude 4.5 Haiku |

View file

@ -0,0 +1,15 @@
import { describe, expect, it } from "vitest";
import { currentModelTool } from "./currentmodel";
describe("CurrentModel", () => {
it("renvoie le modèle de la session", async () => {
expect(await currentModelTool.execute({}, { cwd: "/x", model: "gpt-4o" })).toContain("gpt-4o");
});
it("modèle inconnu", async () => {
expect(await currentModelTool.execute({}, { cwd: "/x" })).toContain("inconnu");
});
it("sans confirmation, sans paramètre", () => {
expect(currentModelTool.permission).toBe("auto");
expect(currentModelTool.spec.name).toBe("CurrentModel");
});
});

View file

@ -0,0 +1,17 @@
import type { Tool } from "@maia/core";
/** Indique le modèle LLM utilisé par la session (celui choisi au démarrage ou avec /model). */
export const currentModelTool: Tool = {
spec: {
name: "CurrentModel",
description:
"Renvoie le nom du modèle LLM utilisé dans la session en cours. À utiliser quand on te demande quel modèle tu es " +
"ou quel modèle est utilisé : ne le devine pas, le modèle peut avoir été changé par l'utilisateur en cours de session.",
inputSchema: { type: "object", properties: {} },
},
permission: "auto",
describe: () => "modèle de la session",
async execute(_input, ctx) {
return ctx.model ? `Modèle LLM de la session : ${ctx.model}` : "Modèle LLM de la session : inconnu";
},
};

View file

@ -1,5 +1,6 @@
import type { Tool } from "@maia/core";
import { bashTool } from "./bash";
import { currentModelTool } from "./currentmodel";
import { editTool } from "./edit";
import { globTool } from "./glob";
import { grepTool } from "./grep";
@ -18,4 +19,5 @@ export const builtinTools: Tool[] = [
bashTool,
todoWriteTool,
webFetchTool,
currentModelTool,
];

View file

@ -148,7 +148,7 @@ async function executeToolCall(
}
try {
const output = await tool.execute(call.input, { cwd: session.cwd, signal, env: session.env });
const output = await tool.execute(call.input, { cwd: session.cwd, model: session.provider.model, signal, env: session.env });
ui.onToolResult(call.name, output, false);
return result(output);
} catch (err) {

View file

@ -51,6 +51,8 @@ export interface LLMProvider {
export interface ToolContext {
cwd: string;
/** Modèle LLM utilisé par la session à cet instant (change avec /model). */
model?: string;
signal?: AbortSignal;
/** Variables d'environnement additionnelles (fournies par l'agent). */
env?: Record<string, string>;