Strategy
Une strategy est le point d’orchestration exécutable par le runtime. C’est l’entrée d’un programme Touba : elle déclare dans uses les agent (ou strategy, skill, tool, function) qu’elle peut invoquer, puis orchestre l’exécution dans un bloc do.
Forme
strategy StrategyName
uses AgentName
do
AgentName
Cas simple
module examples.strategy_simple
type DatasetRequest
query is Text
type DatasetBrief
summary is Text
tool SearchDatasets
takes request as DatasetRequest
gives DatasetBrief
requires network
skill BuildDatasetBrief
takes request as DatasetRequest
gives DatasetBrief
uses SearchDatasets
do
SearchDatasets
with request as request
into result
give result
agent Researcher
responsibility "Fulfill the declared Researcher responsibility using only authorized capabilities."
uses BuildDatasetBrief
callable_by strategy RunDatasetResearch
strategy RunDatasetResearch
uses Researcher
do
Researcher
RunDatasetResearch est le seul caller autorisé pour Researcher, déclaré explicitement par callable_by.
Cas avancé
module examples.strategy_advanced
type ChangeRequest
summary is Text
type ReviewedChange
summary is Text
tool ApplyChange
takes request as ChangeRequest
gives ReviewedChange
skill MakeChange
takes request as ChangeRequest
gives ReviewedChange
uses ApplyChange
do
ApplyChange
with request as request
into result
give result
skill ReviewChange
takes request as ChangeRequest
gives ChangeRequest
do
give request
agent Reviewer
responsibility "Fulfill the declared Reviewer responsibility using only authorized capabilities."
uses ReviewChange
callable_by strategy RunChangeReview
agent Engineer
responsibility "Fulfill the declared Engineer responsibility using only authorized capabilities."
uses MakeChange
callable_by strategy RunChangeReview
strategy RunChangeReview
takes request as ChangeRequest
uses Reviewer
uses Engineer
do
Reviewer
Engineer
Une strategy peut déclarer takes (l’entrée du run) et orchestrer plusieurs agent distincts. Chacun reste borné par son propre uses et n’est invocable ici que parce qu’il déclare callable_by strategy RunChangeReview.
Strategy vs agent
- Un
agentporte la responsabilité d’un choix parmi les capacités qu’il déclare lui-même dansuses. - Une
strategyporte l’orchestration de la séquence globale : quels agents sont sollicités, dans quel ordre, avec quelle entrée.
Un agent peut autoriser une strategy ou un autre agent dans callable_by,
y compris par nom qualifié. Une stratégie n'a pas de callable_by : elle peut
être une entrée CLI/trigger ou une capacité typée appelée avec with / into.
Ses arguments et résultats restent distincts des valeurs de son appelant.
Composition et parallélisme
Les appels ordinaires se suivent. Pour traiter plusieurs entrées indépendantes,
une stratégie ou une skill peut déclarer un groupe parallel sur une cible
typée, locale ou importée. Voici une composition sans handler ni modèle :
module examples.batch_labels
strategy LabelTicket
takes ticket as Text
gives Text
do
give "Ticket: " ++ ticket
strategy LabelBatch
takes tickets as List of Text
gives List of Text
uses LabelTicket
do
parallel LabelTicket
each ticket in tickets
with ticket as ticket
max_concurrency 4
max_items 32
into labels
give labels
LabelBatch retourne une liste dans l'ordre de tickets, même si les appels
se terminent dans un autre ordre. Une liste vide rend une liste vide ; plus de
32 éléments refuse le groupe avant son premier appel. La jointure attend tous
les résultats : un échec ne devient pas une liste partielle réussie.
La même forme accepte un agent, une skill, une function ou un tool déclaré avec une sortie typée. Les budgets restent communs et chaque invocation garde ses valeurs propres. Pour la configuration provider, les pauses humaines et la reprise, suivre le tutoriel multi-agent.
Contrat runtime
- L'ordre est séquentiel hors d'un groupe
parallelexplicite. max_concurrencyetmax_itemsbornent le groupe ; les plafonds hôte et les budgets de run restent applicables.- Une
strategyne contourne pasuses/callable_bydes agents qu’elle invoque : le runtime vérifie ces contrats à chaque appel. - Voir Autonomie bornée pour le détail du contrôle runtime sur chaque invocation d’agent.