Modifications et ajout de nouveaux fichiers
This commit is contained in:
parent
192629f30e
commit
5e9f90a287
7 changed files with 85 additions and 3 deletions
|
|
@ -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` |
|
| `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) |
|
| `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) |
|
| `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 |
|
| `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`
|
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.
|
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 ».
|
- **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.
|
- **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).
|
- 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).
|
- 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.
|
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.
|
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).
|
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
44
llm_avis.md
Normal 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 |
|
||||||
15
packages/agent/src/tools/currentmodel.test.ts
Normal file
15
packages/agent/src/tools/currentmodel.test.ts
Normal 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");
|
||||||
|
});
|
||||||
|
});
|
||||||
17
packages/agent/src/tools/currentmodel.ts
Normal file
17
packages/agent/src/tools/currentmodel.ts
Normal 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";
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import type { Tool } from "@maia/core";
|
import type { Tool } from "@maia/core";
|
||||||
import { bashTool } from "./bash";
|
import { bashTool } from "./bash";
|
||||||
|
import { currentModelTool } from "./currentmodel";
|
||||||
import { editTool } from "./edit";
|
import { editTool } from "./edit";
|
||||||
import { globTool } from "./glob";
|
import { globTool } from "./glob";
|
||||||
import { grepTool } from "./grep";
|
import { grepTool } from "./grep";
|
||||||
|
|
@ -18,4 +19,5 @@ export const builtinTools: Tool[] = [
|
||||||
bashTool,
|
bashTool,
|
||||||
todoWriteTool,
|
todoWriteTool,
|
||||||
webFetchTool,
|
webFetchTool,
|
||||||
|
currentModelTool,
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ async function executeToolCall(
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
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);
|
ui.onToolResult(call.name, output, false);
|
||||||
return result(output);
|
return result(output);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,8 @@ export interface LLMProvider {
|
||||||
|
|
||||||
export interface ToolContext {
|
export interface ToolContext {
|
||||||
cwd: string;
|
cwd: string;
|
||||||
|
/** Modèle LLM utilisé par la session à cet instant (change avec /model). */
|
||||||
|
model?: string;
|
||||||
signal?: AbortSignal;
|
signal?: AbortSignal;
|
||||||
/** Variables d'environnement additionnelles (fournies par l'agent). */
|
/** Variables d'environnement additionnelles (fournies par l'agent). */
|
||||||
env?: Record<string, string>;
|
env?: Record<string, string>;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue