On pensait tous que les frameworks d’agents IA continueraient à boiter avec les tics de checkpoint-replay de LangGraph — relancer des nœuds entiers à la reprise, tordre le code en bretzels idempotents. Mais Selectools balance la v0.20.1, un uppercut en un pip au statu quo : graphes multi-agents, invocation d’outils, RAG, 50 évaluateurs, masquage PII. Tout intégré, open source Apache-2.0, compatible OpenAI, Anthropic, Gemini, Ollama.
Ça change tout pour les devs écœurés de bricoler des abstractions poreuses.
Pourquoi les interruptions de LangGraph rendent les devs dingues
L’interrupt() de LangGraph — c’est fait exprès — rejoue tout le nœud après pause. Le fix officiel ? Idempotiser les effets de bord, décaler les ops coûteuses après l’appel, ou les éclater plus bas. Bien en théorie. L’enfer sur le terrain. Chaque nœud avec humain se contorsionne autour des règles de reprise. Étanchéité d’une passoire.
Selectools ? Des générateurs Python. Yield un InterruptRequest. Reprise via generator.send() — pile au yield. Pas de réexécution. Analyse LLM onéreuse ? Une seule fois. Nickel.
Regardez ça :
async def review_node(state):
analysis = await expensive_llm_analysis(state.data["draft"]) # runs once
decision = yield InterruptRequest(prompt="Approve?", payload=analysis)
state.data["approved"] = (decision == "yes") # resumes here
Paf.
“Reprend exactement au point de yield (LangGraph redémarre tout le nœud).”
Droit du changelog v0.18.0. Pas de baratin — le code dit vrai.
Mon avis : ce tour de générateurs rappelle les coroutines Node.js qui ont maté l’enfer asynchrone. Selectools ne réinvente rien ; il ouvre la voie que les agents prennent vraiment. Pari ? Il va rafler les utilisateurs de LangGraph en masse d’ici Q2 2025, en explosant le mythe du ‘framework unique’ comme Kubernetes l’a fait pour les swarms Docker.
Comment Selectools gère les graphes multi-agents ?
AgentGraph : graphe orienté pour nœuds agents. Routage ? Des fonctions Python basiques — pas de roulette LLM, pas de DSL gonflé. Flux déterministe, les LLM raisonnent dans les nœuds. Malin.
ContextMode garde l’historique sain : LAST_MESSAGE (par défaut), LAST_N, FULL, SUMMARY, CUSTOM. Pas de noyade des agents aval par le bruit amont.
Exécution parallèle avec MergePolicy — LAST_WINS, FIRST_WINS, APPEND. Fan-out, fan-in, sans drame.
Boucles ? Stagnations ? Hachage d’état détecte les états inchangés. Anti-blocage.
Mais attendez — SupervisorAgent monte d’un cran. Quatre stratégies :
| Stratégie | Description | Idéal pour |
|---|---|---|
| plan_and_execute | Plan JSON par LLM, exécution séquentielle | Tâches structurées |
| round_robin | Tours, superviseur vérifie | Raffinage itératif |
| dynamic | LLM choisit l’agent par étape | Tâches hétérogènes |
| magentic | Magentic-One avec ledger + replan | Recherche autonome |
Magentic imite le pattern de Microsoft Research. ModelSplit ? Planificateurs sur GPT-4o, exécuteurs sur Llama — 70-90 % moins cher. Ruse prête pour la production.
La suite d’évals de Selectools est-elle vraiment utile ?
50 évaluateurs prêts à l’emploi. Sans services payants. 30 déterministes (exact-match, regex), 20 jugés par LLM (style G-Eval).
Masquage PII ? Intégré, scanne les sorties avant déploiement. RAG ? Stockages vectoriels, chaînes de retrieval — branchez Ollama ou Pinecone. Invocation d’outils ? Structurée, parallèle.
Pas du vent. Le framework d’éval s’accroche à AgentGraph : lancez des suites sur des graphes, agrégez les scores. Les devs ont des baselines sans vendor lock-in.
Sceptique ? Moi aussi, d’abord. Mais le ‘comment’ claque : évals comme nœuds graph premiers citoyens. Interrupt mid-éval pour ajuster. Reprise chirurgicale.
Un petit paragraphe ici.
Cette densité d’évaluateurs — 50 préfabriqués — évoque pytest qui a explosé sur les tests Python en 2008. À l’époque, unittest puait ; pytest a fait du TDD la norme. Selectools pourrait faire ça pour la fiabilité des agents. Les