Hooks et contextes
Hooks qui modifient la boucle de l'agent, contextes reçus par votre code et fonctions utilitaires qui renvoient les mêmes valeurs lorsqu'un agent déployé exécute à nouveau la boucle.
Fournissez le contenu du résultat d'un hook sous forme de blocs de contenu, comme agents.TextContentBlock(text="..."), ou utilisez agents.skip(reason), agents.retry(feedback) et agents.reject(reason) avec une chaîne de caractères.
Guide : Les mécanismes de contrôle.
| Nom | Rôle |
|---|---|
Hook | Code exécuté à différents points de la boucle de l'agent : avant et après chaque tour, appel au modèle et appel d'outil. |
HookDecision | Décision d'un hook, convertie en résultat du point d'exécution qui la renvoie. |
agents.skip | Arrêter le tour, l'appel au modèle ou l'appel d'outil. |
agents.retry | Ignorer la réponse du modèle et appeler à nouveau le modèle avec feedback. |
agents.reject | Rejeter la réponse du modèle et terminer le tour avec reason. |
agents.hook | Ce qu'un hook reçoit et renvoie à chaque point d'exécution : poursuivre ou remplacer l'entrée ou la sortie. |
State | Forme sauvegardée d'un hook ou d'une sandbox : son type et les données JSON conservées d'un tour à l'autre. |
hook.PreAgentTurn | Tour reçu par un hook pre_agent_turn. |
hook.PreLlmCall | Appel au modèle reçu par un hook pre_llm_call. |
hook.PostLlmCall | Réponse du modèle reçue par un hook post_llm_call. |
hook.PostAgentTurn | Réponse finale du tour reçue par un hook post_agent_turn. |
hook.PreToolCall | Appel d'outil reçu par un hook pre_tool_call. |
hook.PostToolCall | Appel d'outil et résultat reçus par un hook post_tool_call. |
hook.PreAgentTurnHookContinue | Ce que pre_agent_turn renvoie pour démarrer le tour avec un autre contenu utilisateur. |
hook.PreAgentTurnHookSkip | Ce que pre_agent_turn renvoie pour terminer le tour avant l'exécution du modèle, comme le fait agents.skip. |
hook.PreLlmCallHookContinue | Ce que pre_llm_call renvoie pour laisser l'appel au modèle s'exécuter, comme le fait None. |
hook.PreLlmCallHookSkip | Ce que pre_llm_call renvoie pour terminer le tour au lieu d'appeler le modèle, comme le fait agents.skip. |
hook.PostLlmCallHookAccept | Ce que post_llm_call renvoie pour conserver la réponse du modèle ou remplacer son contenu. |
hook.PostLlmCallHookRetry | Ce que post_llm_call renvoie pour ignorer la réponse et appeler à nouveau le modèle, comme le fait agents.retry. |
hook.PostLlmCallHookReject | Ce que post_llm_call renvoie pour rejeter la réponse et terminer le tour, comme le fait agents.reject. |
hook.PreToolCallHookContinue | Ce que pre_tool_call renvoie pour exécuter l'outil avec d'autres arguments. |
hook.PreToolCallHookSkip | Ce que pre_tool_call renvoie pour ignorer l'appel, comme le fait agents.skip. |
hook.PostToolCallHookContinue | Ce que post_tool_call renvoie pour fournir au modèle un autre résultat d'outil. |
hook.PostAgentTurnHookAccept | Ce que post_agent_turn renvoie pour conserver la réponse finale ou remplacer son contenu. |
hook.ReplaceAssistantContent | Remplacer la réponse du modèle par content, depuis post_llm_call ou post_agent_turn. |
pattern.hook.StructuredOutputHook | Valider la réponse finale de chaque tour avec un modèle Pydantic et demander au modèle de la corriger. |
CallbackContext | Ce qu'un callback reçoit dans ctx : la session dans laquelle il s'exécute et la sandbox de cette session. |
CallbackSession | Session dans laquelle un callback s'exécute : son identifiant et celui du tour. |
HookCallbackContext | Ce qu'une méthode de hook reçoit dans ctx : la session dans laquelle elle s'exécute et la sandbox de cette session. |
ToolCallbackContext | Ce qu'un outil reçoit comme premier paramètre, exclusivement positionnel : la session, sa sandbox et l'appel. |
ApprovalCallbackContext | Ce qu'un gestionnaire d'approbation reçoit dans ctx : la session à l'origine de la demande et l'identifiant de l'approbation. |
SandboxCallbackContext | Contexte reçu par un hook de sandbox dans on_create et on_destroy. |
agents.now | Heure actuelle en UTC, sous forme d'un objet datetime avec fuseau horaire. |
agents.sleep | Attendre pendant duration, dans la boucle de l'agent, un outil, un Hook ou une exécution locale. |
agents.uuid4 | UUID aléatoire qui reste identique lorsqu'un agent déployé exécute à nouveau la boucle de l'agent. |
agents.random | Générateur de nombres aléatoires qui renvoie les mêmes nombres lorsqu'un agent déployé exécute à nouveau la boucle. |
Hooks
HookHook
class Hook(*, tools: Sequence[PythonTool[..., Any] | ClientTool[..., Any]] = (), **data: Any)Code exécuté à différents points de la boucle de l'agent : avant et après chaque tour, appel au modèle et appel d'outil.
Redéfinissez les points d'exécution dont vous avez besoin ; renvoyer None poursuit l'exécution sans modification. Un hook est un modèle
Pydantic. Ses champs constituent son état : la session conserve leurs valeurs et chaque appel démarre avec les
valeurs laissées par le dernier appel réussi. Tout autre élément contenu dans le hook, comme un client, est un
PrivateAttr, qui n'est jamais sauvegardé. __init__ ne s'exécute qu'à la création du hook : chaque appel
démarre à partir d'une copie.
Une valeur sauvegardée enregistre sa classe, que le SDK retrouve parmi les modules déjà
chargés. Le chargement d'une valeur n'importe jamais de module. Définissez chaque classe de hook, ainsi que la classe de chaque
hook conservé dans un champ, au niveau du module, dans un module importé par celui de votre agent. Sinon,
la création d'une session échoue. Conservez les hooks contenus dans un champ dans une liste ou un tuple. Un ensemble lève
SdkError.
Un champ avec un alias, comme max_calls: int = Field(0, alias="maxCalls"), utilise son nom
à la création du hook, Budget(max_calls=5), et son alias dans la valeur sauvegardée. Pour créer le
hook également à partir de l'alias, définissez validate_by_alias=True dans model_config. La méthode
model_validate de Pydantic lit un hook par nom de champ ; elle ne charge donc pas la valeur sauvegardée d'un hook
dont un champ possède un alias.
| Attribut | Type | Description |
|---|---|---|
tools | Sequence[PythonTool[..., Any]] | Outils que le hook ajoute aux outils de l'agent. |
Hook.pre_agent_turnHook.pre_agent_turn
async def pre_agent_turn(
ctx: HookCallbackContext,
request: hook.PreAgentTurn,
) -> hook.PreAgentTurnHookContinue | hook.PreAgentTurnHookSkip | HookDecision | NoneS'exécute avant chaque tour, avec le contenu utilisateur du tour dans request.user_content.
Renvoyez hook.PreAgentTurnHookContinue pour envoyer un autre contenu, comme
[*request.user_content, agents.TextContentBlock(text="...")], ou agents.skip ou
hook.PreAgentTurnHookSkip pour ignorer le tour.
Hook.post_agent_turnHook.post_agent_turn
async def post_agent_turn(
ctx: HookCallbackContext,
result: hook.PostAgentTurn,
) -> hook.PostAgentTurnHookAccept | NoneS'exécute après chaque tour, avec la réponse finale du modèle dans result : result.text, result.content.
Renvoyez hook.PostAgentTurnHookAccept() pour conserver la réponse, ou remplacez son contenu avec
acceptance=hook.ReplaceAssistantContent(content=[agents.TextContentBlock(text="...")]).
Hook.pre_llm_callHook.pre_llm_call
async def pre_llm_call(
ctx: HookCallbackContext,
invocation: hook.PreLlmCall,
) -> hook.PreLlmCallHookContinue | hook.PreLlmCallHookSkip | HookDecision | NoneS'exécute avant chaque appel au modèle. Renvoyez agents.skip ou hook.PreLlmCallHookSkip pour terminer le tour
sans appeler le modèle (stop_reason="skipped").
Hook.post_llm_callHook.post_llm_call
async def post_llm_call(
ctx: HookCallbackContext,
invocation: hook.PostLlmCall,
) -> hook.PostLlmCallHookAccept | hook.PostLlmCallHookRetry | hook.PostLlmCallHookReject | HookDecision | NoneS'exécute après chaque appel au modèle, avec sa réponse dans invocation : invocation.text,
invocation.tool_calls, invocation.content.
Renvoyez hook.PostLlmCallHookAccept pour conserver la réponse ou remplacer son contenu, comme le fait
hook.PostAgentTurnHookAccept, agents.retry pour appeler à nouveau le modèle avec des indications de correction, ou
agents.reject pour terminer le tour.
Hook.pre_tool_callHook.pre_tool_call
async def pre_tool_call(
ctx: HookCallbackContext,
call: hook.PreToolCall,
) -> hook.PreToolCallHookContinue | hook.PreToolCallHookSkip | HookDecision | NoneS'exécute avant chaque appel d'outil, avec l'appel dans call.
Renvoyez hook.PreToolCallHookContinue pour exécuter l'outil avec d'autres effective_arguments, ou
agents.skip ou hook.PreToolCallHookSkip pour ignorer l'appel : le modèle reçoit alors la raison à la place du résultat.
L'entrée de l'appel d'outil dans l'historique affiche les arguments définis par le hook ; un appel ignoré conserve ceux du modèle.
Hook.post_tool_callHook.post_tool_call
async def post_tool_call(
ctx: HookCallbackContext,
result: hook.PostToolCall,
) -> hook.PostToolCallHookContinue | NoneS'exécute après chaque appel d'outil, avec l'appel et son résultat, un agents.ToolResult, dans result.
Renvoyez hook.PostToolCallHookContinue avec un autre tool_result pour modifier ce que le modèle reçoit,
comme agents.ToolResult(content=[agents.TextContentBlock(text="...")]).
HookDecisionHookDecision
class HookDecisionDécision d'un hook, convertie en résultat du point d'exécution qui la renvoie.
Créez-la avec agents.skip, agents.retry ou agents.reject.
| Attribut | Type | Description |
|---|---|---|
kind | Literal['skip', 'retry', 'reject'] | "skip", "retry" ou "reject" : la fonction qui l'a créée. |
message | str | Raison ou indications de correction reçues par la fonction. |
agents.skipagents.skip
def agents.skip(reason: str) -> HookDecisionArrêter le tour, l'appel au modèle ou l'appel d'outil.
Depuis pre_tool_call, reason est ce que le modèle reçoit à la place du résultat
de l'outil. Depuis pre_agent_turn ou pre_llm_call, le tour se termine avec
stop_reason="skipped" et reason comme texte.
agents.retryagents.retry
def agents.retry(feedback: str) -> HookDecisionIgnorer la réponse du modèle et appeler à nouveau le modèle avec feedback.
agents.rejectagents.reject
def agents.reject(reason: str) -> HookDecisionRejeter la réponse du modèle et terminer le tour avec reason.
agents.hookagents.hook
Ce qu'un hook reçoit et renvoie à chaque point d'exécution : poursuivre ou remplacer l'entrée ou la sortie.
Un hook qui poursuit l'exécution sans modification renvoie None ; un hook qui l'arrête renvoie agents.skip,
agents.retry ou agents.reject.
Ses classes sont présentées dans Classes de agents.hook.
StateState
class State(*, type: str, state: dict[str, JsonValue])Forme sauvegardée d'un hook ou d'une sandbox : son type et les données JSON conservées d'un tour à l'autre.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
type | str | obligatoire | Le type qui reconstruit la valeur, sous la forme module:QualifiedName. |
state | dict[str, JsonValue] | obligatoire | Les données enregistrées de la valeur : les champs d'un hook, ou ce que renvoie SandboxHook.to_unified_state() pour un hook de sandbox. |
Classes de agents.hook
hook.PreAgentTurnhook.PreAgentTurn
class PreAgentTurn(*, turn_id: str, user_content: list[ContentBlock])Le tour que reçoit un hook pre_agent_turn.
hook.PreLlmCallhook.PreLlmCall
class PreLlmCall(*, turn_id: str)L'appel au modèle que reçoit un hook pre_llm_call.
hook.PostLlmCallhook.PostLlmCall
class PostLlmCall(
*,
turn_id: str,
content: list[ContentBlock],
text: str,
tool_calls: tuple[ToolCall, ...],
reasoning: str,
finish_reason: Literal['stop', 'tool_call', 'length', 'content_filter', 'other'],
usage: TokenUsage | None,
)La réponse du modèle que reçoit un hook post_llm_call.
hook.PostAgentTurnhook.PostAgentTurn
class PostAgentTurn(
*,
turn_id: str,
content: list[ContentBlock],
text: str,
tool_calls: tuple[ToolCall, ...],
reasoning: str,
finish_reason: Literal['stop', 'tool_call', 'length', 'content_filter', 'other'],
usage: TokenUsage | None,
)La réponse finale du tour que reçoit un hook post_agent_turn.
hook.PreToolCallhook.PreToolCall
class PreToolCall(
*,
turn_id: str,
tool_name: str,
tool_id: str,
tool_call_id: str,
arguments: dict[str, JsonValue],
)L'appel d'outil que reçoit un hook pre_tool_call.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
turn_id | str | obligatoire | L'identifiant du tour. |
tool_name | str | obligatoire | Le nom de l'outil personnalisé ou de l'outil intégré, par exemple file_system.bash. |
tool_id | str | obligatoire | L'identifiant de l'outil : <namespace>.<name>, par exemple billing.charge, ou le nom de l'outil intégré. |
tool_call_id | str | obligatoire | L'identifiant de l'appel, tel que fourni par ToolCallEntry.tool_call_id et ToolCallbackContext.tool_call_id. |
arguments | dict[str, JsonValue] | obligatoire | Les arguments produits par le modèle. |
hook.PostToolCallhook.PostToolCall
class PostToolCall(
*,
turn_id: str,
tool_name: str,
tool_id: str,
tool_call_id: str,
arguments: dict[str, JsonValue],
tool_result: ToolResult,
)L'appel d'outil et son résultat que reçoit un hook post_tool_call.
Hérite de turn_id, tool_name, tool_id et tool_call_id de hook.PreToolCall.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
arguments | dict[str, JsonValue] | obligatoire | Les arguments avec lesquels l'outil s'est exécuté, après toute modification par un hook pre_tool_call. |
tool_result | ToolResult | obligatoire | Le résultat de l'appel. Renvoyez-le, ou une copie, dans hook.PostToolCallHookContinue : les blocs renvoyés sans modification sont transmis au modèle tels quels, et un appel échoué dont is_error=True est conservé garde son erreur. |
hook.PreAgentTurnHookContinuehook.PreAgentTurnHookContinue
class PreAgentTurnHookContinue(*, user_content: Sequence[ContentBlock])Ce que renvoie pre_agent_turn pour démarrer le tour avec un autre contenu utilisateur.
hook.PreAgentTurnHookSkiphook.PreAgentTurnHookSkip
class PreAgentTurnHookSkip(*, reason: Sequence[ContentBlock] = [])Ce que renvoie pre_agent_turn pour terminer le tour avant l'exécution du modèle, comme le fait agents.skip.
hook.PreLlmCallHookContinuehook.PreLlmCallHookContinue
class PreLlmCallHookContinue()Ce que renvoie pre_llm_call pour autoriser l'exécution de l'appel au modèle, comme le fait None.
hook.PreLlmCallHookSkiphook.PreLlmCallHookSkip
class PreLlmCallHookSkip(*, reason: Sequence[ContentBlock] = [])Ce que renvoie pre_llm_call pour terminer le tour au lieu d'appeler le modèle, comme le fait agents.skip.
hook.PostLlmCallHookAccepthook.PostLlmCallHookAccept
class PostLlmCallHookAccept(*, acceptance: ReplaceAssistantContent = ...)Ce que renvoie post_llm_call pour conserver la réponse du modèle ou remplacer son contenu.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
acceptance | ReplaceAssistantContent | ... | La valeur par défaut conserve la réponse telle que le modèle l'a fournie. hook.ReplaceAssistantContent(content=[...]) remplace son contenu. |
hook.PostLlmCallHookRetryhook.PostLlmCallHookRetry
class PostLlmCallHookRetry(*, feedback: Sequence[ContentBlock])Ce que renvoie post_llm_call pour supprimer la réponse et appeler à nouveau le modèle, comme le fait agents.retry.
hook.PostLlmCallHookRejecthook.PostLlmCallHookReject
class PostLlmCallHookReject(*, reason: Sequence[ContentBlock])Ce que renvoie post_llm_call pour rejeter la réponse et terminer le tour, comme le fait agents.reject.
hook.PreToolCallHookContinuehook.PreToolCallHookContinue
class PreToolCallHookContinue(*, effective_arguments: dict[str, JsonValue] = {})Ce que renvoie pre_tool_call pour exécuter l'outil avec d'autres arguments. Passez effective_arguments= ; sans arguments fournis, l'outil s'exécute sans arguments.
hook.PreToolCallHookSkiphook.PreToolCallHookSkip
class PreToolCallHookSkip(*, reason: Sequence[ContentBlock] = [])Ce que renvoie pre_tool_call pour ignorer l'appel, comme le fait agents.skip.
hook.PostToolCallHookContinuehook.PostToolCallHookContinue
class PostToolCallHookContinue(*, tool_result: ToolResult)Ce que renvoie post_tool_call pour fournir au modèle un autre résultat d'outil.
hook.PostAgentTurnHookAccepthook.PostAgentTurnHookAccept
class PostAgentTurnHookAccept(*, acceptance: ReplaceAssistantContent = ...)Ce que renvoie post_agent_turn pour conserver la réponse finale ou remplacer son contenu.
| Paramètre | Type | Valeur par défaut | Description |
|---|---|---|---|
acceptance | ReplaceAssistantContent | ... | La valeur par défaut conserve la réponse telle que le modèle l'a fournie. hook.ReplaceAssistantContent(content=[...]) remplace son contenu. |
hook.ReplaceAssistantContenthook.ReplaceAssistantContent
class ReplaceAssistantContent(*, content: Sequence[ContentBlock])Remplacez la réponse du modèle par content, depuis post_llm_call ou post_agent_turn.
Hooks prêts à l'emploi
pattern.hook.StructuredOutputHookpattern.hook.StructuredOutputHook
class StructuredOutputHook[T](
*,
tools: Sequence[PythonTool[..., Any] | ClientTool[..., Any]] = (),
**data: Any,
)Validez la réponse finale de chaque tour avec un modèle Pydantic, et demandez au modèle de la corriger.
Indiquez le modèle Pydantic entre crochets, comme dans StructuredOutputHook[City](max_retries=2), ou créez une sous-classe de
StructuredOutputHook[City] et définissez de nouvelles valeurs par défaut pour ses champs.
Le hook ne demande une correction que si max_retries le permet et s'il reste au tour une
itération dans la limite max_iterations de l'agent. Une fois cette limite atteinte, il accepte la dernière réponse
ou, si on_limit vaut "reject", lève ValueError, ce qui fait échouer le tour. Définissez
schema_in_prompt sur False pour exclure le schéma JSON du message utilisateur, par exemple
si output_type le fournit déjà au modèle ; les corrections l'incluent toujours. Définissez
enabled sur False pour accepter les réponses sans vérification.
Le hook compte chaque appel au modèle avant son exécution. Un appel relancé par un mécanisme de contrôle ou un
hook précédent compte donc aussi dans la limite max_iterations.
Basé sur Hook.
| Attribut | Type | Description |
|---|---|---|
max_retries | int | Le nombre de corrections que le hook demande au cours d'un tour. Valeur par défaut : 2. |
on_limit | Literal['accept', 'reject'] | Le comportement du hook à la limite : "accept", la valeur par défaut, conserve la dernière réponse ; "reject" lève ValueError, ce qui fait échouer le tour. |
schema_in_prompt | bool | Indique si le message utilisateur inclut le schéma JSON. Valeur par défaut : True. Les corrections l'incluent toujours. |
enabled | bool | Indique si le hook vérifie les réponses. Valeur par défaut : True. False les accepte sans vérification. |
Contextes
CallbackContextCallbackContext
class CallbackContextCe qu'un callback reçoit dans ctx : la session dans laquelle il s'exécute et la sandbox de cette session.
La base commune : une méthode de hook reçoit un HookCallbackContext, et un outil un ToolCallbackContext.
| Attribut | Type | Description |
|---|---|---|
session | CallbackSession | La session dans laquelle le callback s'exécute. |
sandbox | HookSandbox | La sandbox de la session, pour exécuter des commandes et lire et écrire des fichiers. await ctx.sandbox.execute(command, cwd=None, timeout_seconds=None, env=None) exécute une commande une fois et renvoie un SandboxExecutionResult. await ctx.sandbox.read_file(path, max_bytes=1048576) renvoie les octets d'un fichier. Un path relatif se situe dans l'espace de travail. Un fichier dont la taille dépasse max_bytes provoque une erreur, et un fichier absent lève FileNotFoundError. await ctx.sandbox.write_file(name, content) écrit des octets dans un fichier, dans un dossier que la sandbox réserve aux fichiers des hooks, en dehors de l'espace de travail, et renvoie son chemin. Un name absolu, ou qui sort de ce dossier, lève ValueError. Dans un hook de sandbox d'un agent exécuté par agents serve ou agents deploy, content doit être du texte UTF-8 et la requête, chemin inclus, ne doit pas dépasser 1 Mio de JSON. Chaque méthode lève RuntimeError lorsque la session ne dispose pas d'une sandbox capable d'exécuter des commandes. |
CallbackSessionCallbackSession
class CallbackSessionLa session dans laquelle un callback s'exécute : son identifiant et celui du tour.
| Attribut | Type | Description |
|---|---|---|
id | str | L'identifiant de la session. |
turn_id | str | L'identifiant du tour dans lequel le callback s'exécute. |
HookCallbackContextHookCallbackContext
class HookCallbackContext(CallbackContext)Ce qu'une méthode de hook reçoit dans ctx : la session dans laquelle elle s'exécute et la sandbox de cette session.
ToolCallbackContextToolCallbackContext
class ToolCallbackContext(CallbackContext)Ce qu'un outil reçoit comme premier paramètre, exclusivement positionnel : la session, sa sandbox et l'appel.
Un outil le reçoit selon son type, quel que soit son nom : def search(ctx: agents.ToolCallbackContext, /, query: str).
Le modèle ne le voit jamais. Un appel direct peut passer ToolCallbackContext.local(), ou l'omettre pour
obtenir ce contexte local. La réponse d'un outil client le reçoit aussi, sans sandbox ; les méthodes de
ctx.sandbox lèvent donc RuntimeError.
| Attribut | Type | Description |
|---|---|---|
tool_call_id | str | L'identifiant de l'appel du modèle à l'outil, tel qu'il figure dans l'entrée d'appel d'outil de la session. |
ToolCallbackContext.localToolCallbackContext.local
@classmethod
def local() -> ToolCallbackContextUn contexte pour un appel en dehors de toute session : chaque identifiant vaut "local" et la sandbox n'est pas liée.
ApprovalCallbackContextApprovalCallbackContext
class ApprovalCallbackContext(CallbackContext)Ce qu'un gestionnaire d'approbation reçoit dans ctx : la session à l'origine de la demande et l'identifiant de l'approbation.
ctx.session.id et ctx.session.turn_id identifient la session et le tour à l'origine de la demande : une
approbation de sous-agent contient la session du sous-agent et son propre tour. ctx.callback_id est l'identifiant de l'approbation,
celui qu'accepte turn.answer. Le gestionnaire s'exécute dans votre programme ; les méthodes de ctx.sandbox
lèvent donc RuntimeError.
| Attribut | Type | Description |
|---|---|---|
callback_id | str | L'identifiant de l'approbation, celui qu'accepte turn.answer. |
SandboxCallbackContextSandboxCallbackContext
class SandboxCallbackContextLe contexte qu'un hook de sandbox reçoit dans on_create et on_destroy.
| Attribut | Type | Description |
|---|---|---|
sandbox | HookSandbox | La sandbox, pour y exécuter des commandes et y lire et écrire des fichiers. |
Valeurs identiques lors de la réexécution de la boucle
agents.nowagents.now
def agents.now() -> datetimeL'heure actuelle en UTC, sous forme de datetime avec fuseau horaire.
Utilisez cette fonction à la place de datetime.now(). Dans la boucle d'un agent déployé, par exemple dans les méthodes d'une
sandbox personnalisée ou dans un SandboxHook, elle renvoie la même heure lorsque l'agent réexécute la boucle
pour reprendre une session, ce qui préserve l'échéance. Dans un outil, un Hook ou une exécution locale, elle renvoie l'heure
de l'horloge : les outils et les méthodes de Hook s'exécutent sous forme d'étapes enregistrées, en dehors de la partie de la boucle qu'un agent déployé
rejoue.
agents.sleepagents.sleep
async def agents.sleep(duration: timedelta | float, *, summary: str | None = None) -> NoneAttendez pendant duration, dans la boucle de l'agent, un outil, un Hook ou une exécution locale.
Utilisez cette fonction à la place de asyncio.sleep(). Dans la boucle d'un agent déployé, par exemple dans les méthodes d'une
sandbox personnalisée ou dans un SandboxHook, l'attente repose sur un minuteur côté serveur : elle persiste après un redémarrage
de l'agent, et aucune partie de l'agent ne s'exécute pendant l'attente. Les outils et les méthodes de Hook s'exécutent sous forme
d'étapes enregistrées, en dehors de la partie de la boucle qu'un agent déployé rejoue : dans ce cas, l'attente doit se terminer
avant la limite de temps de l'étape. Dans une exécution locale, il s'agit de asyncio.sleep().
agents.uuid4agents.uuid4
def agents.uuid4() -> UUIDUn UUID aléatoire qui reste identique lorsqu'un agent déployé réexécute la boucle de l'agent.
Utilisez cette fonction à la place de uuid.uuid4(). Dans un outil, un Hook ou une exécution locale, il s'agit de uuid.uuid4().
agents.randomagents.random
def agents.random() -> RandomUn générateur de nombres aléatoires qui produit les mêmes nombres lorsqu'un agent déployé réexécute la boucle.
Utilisez-le à la place du module random. Il propose des méthodes comme random, uniform,
choice et shuffle. Dans un outil, un Hook ou une exécution locale, il s'agit d'une nouvelle instance de
random.Random.