Enregistrements de tour

Ce que renvoie la lecture ou l'attente d'un tour : un TurnState, l'un des six enregistrements, et les valeurs renvoyées par les appels qui démarrent, orientent ou interrompent un tour.

Guides : Tours et Statuts de session.

NomDéfinition
TurnStateL'état d'un tour à la position cursor : l'un des six enregistrements Running, Blocked, Completed, Interrupted, Failed et UnknownOutcome.
RunningLe tour est en cours d'exécution.
BlockedLe tour attend une réponse à un ou plusieurs callbacks.
CompletedLe tour est terminé, éventuellement de manière anticipée : voir stop_reason.
InterruptedLe tour s'est arrêté avant de se terminer.
FailedLe tour s'est terminé avec une erreur, par exemple un refus du fournisseur du modèle.
UnknownOutcomeLe tour s'est terminé avec une issue ajoutée après votre version du SDK, telle que "future_outcome".
ProtocolErrorUne erreur provenant de l'environnement d'exécution de la session, comme celle qui a fait échouer un tour.
InvalidOutputLe tour est terminé, mais sa sortie n'est pas conforme au type demandé.
ToolCallUn appel d'outil effectué par le modèle pendant le tour.
TokenUsageLes tokens utilisés par un appel au modèle, tels que rapportés par le fournisseur.
OpenCallbackUn callback dont le tour, ou l'un de ses sous-agents, attend la réponse : un OpenApproval, un OpenSignIn, un OpenClientToolCall ou un UnknownOpenCallback.
OpenApprovalUne approbation attendue par le tour.
OpenClientToolCallUn appel d'outil côté client dont le tour attend le résultat.
OpenSignInUne connexion attendue par le tour : l'agent demande à l'utilisateur de connecter une ou plusieurs sources, telles que des connecteurs, avant d'utiliser leurs outils.
UnknownOpenCallbackUn callback dont la catégorie n'a pas de type dédié dans votre version du SDK.
BusyUn nouveau tour n'a pas démarré, car un autre tour de la session est actif.
TurnConflictUne requête a désigné un tour qui n'est plus le tour actif de la session.
TurnState

TurnState

type TurnState[T] = Running | Blocked | Completed[T] | Interrupted | Failed | UnknownOutcome

L'état d'un tour à la position cursor : l'un des six enregistrements Running, Blocked, Completed, Interrupted, Failed et UnknownOutcome.

Running

Running

class Running(*, session_id: str, turn_id: str, cursor: str, text: str | None)

Le tour est en cours d'exécution. Aucune action n'est attendue de votre part.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session du tour.
turn_idstrobligatoireL'identifiant du tour.
cursorstrobligatoireL'identifiant de la position dans le log de la session à laquelle l'enregistrement a été lu. Pour un Running ou un Blocked renvoyé par une attente avec on_event, il s'agit de la position atteinte par les événements du gestionnaire, si elle diffère.
textstr | NoneobligatoireLe dernier texte de l'assistant pour ce tour à cette position, ou None avant le premier texte.
Blocked

Blocked

class Blocked(
    *,
    session_id: str,
    turn_id: str,
    cursor: str,
    text: str | None,
    callbacks: tuple[OpenCallback, ...],
)

Le tour attend une réponse à un ou plusieurs callbacks.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session du tour.
turn_idstrobligatoireL'identifiant du tour.
cursorstrobligatoireL'identifiant de la position dans le log de la session à laquelle l'enregistrement a été lu. Pour un Running ou un Blocked renvoyé par une attente avec on_event, il s'agit de la position atteinte par les événements du gestionnaire, si elle diffère.
textstr | NoneobligatoireLe dernier texte de l'assistant pour ce tour à cette position, ou None avant le premier texte.
callbackstuple[OpenCallback, ...]obligatoireLes callbacks dont le tour attend la réponse.
Completed

Completed

class Completed[T](
    *,
    session_id: str,
    turn_id: str,
    cursor: str,
    text: str | None,
    output: T | InvalidOutput | None,
    stop_reason: str | None = None,
    tool_calls: tuple[ToolCall, ...] = (),
)

Le tour est terminé, éventuellement de manière anticipée : voir stop_reason.

Avec output_type, output vaut None lorsque le tour s'est terminé de manière anticipée : il n'y a donc aucune réponse à analyser. Sans output_type, il contient le texte du tour, même si le tour s'est terminé de manière anticipée (le texte d'un tour ignoré est le motif fourni par le hook, celui d'un tour tronqué est la réponse tronquée), ou "" en l'absence de texte.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session du tour.
turn_idstrobligatoireL'identifiant du tour.
cursorstrobligatoireL'identifiant de la position dans le log de la session à laquelle l'enregistrement a été lu. Pour un Running ou un Blocked renvoyé par une attente avec on_event, il s'agit de la position atteinte par les événements du gestionnaire, si elle diffère.
textstr | NoneobligatoireLe dernier texte de l'assistant pour ce tour à cette position, ou None avant le premier texte.
outputT | InvalidOutput | NoneobligatoireLe texte du tour ; avec output_type, ce texte après analyse, InvalidOutput s'il n'est pas conforme, ou None si le tour s'est terminé de manière anticipée.
stop_reasonstr | NoneNone"iteration_limit" (le tour a atteint sa limite d'itérations), "skipped" (un hook l'a ignoré), "rejected" (un hook a rejeté la réponse), "output_limit" (la dernière réponse du modèle s'est arrêtée à la limite de tokens de sortie, après que l'agent lui a demandé une réponse plus courte jusqu'à six fois), None si le tour s'est terminé normalement, ou un motif d'arrêt ajouté après votre version du SDK.
tool_callstuple[ToolCall, ...]()Les appels d'outils propres au tour, dans l'ordre où l'historique de la session les enregistre ; les appels d'un sous-agent ne sont pas inclus.
Interrupted

Interrupted

class Interrupted(*, session_id: str, turn_id: str, cursor: str, text: str | None, cause: str)

Le tour s'est arrêté avant de se terminer.

Lorsqu'aucune cause n'est fournie, le SDK lit "cancelled" si le tour s'est terminé avec l'annulation de sa session, sinon "interrupted". text contient le texte produit par le tour avant son arrêt.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session du tour.
turn_idstrobligatoireL'identifiant du tour.
cursorstrobligatoireL'identifiant de la position dans le log de la session à laquelle l'enregistrement a été lu. Pour un Running ou un Blocked renvoyé par une attente avec on_event, il s'agit de la position atteinte par les événements du gestionnaire, si elle diffère.
textstr | NoneobligatoireLe dernier texte de l'assistant pour ce tour à cette position, ou None avant le premier texte.
causestrobligatoireLe motif de l'arrêt du tour : "interrupted" (un client a interrompu le tour), "cancelled" (un client a annulé ou fermé la session du tour), "lifetime_limit" ou "idle_limit" (la session a atteint l'une de ses limites), ou une cause ajoutée après votre version du SDK.
Failed

Failed

class Failed(*, session_id: str, turn_id: str, cursor: str, text: str | None, error: ProtocolError)

Le tour s'est terminé avec une erreur, par exemple un refus du fournisseur du modèle.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session du tour.
turn_idstrobligatoireL'identifiant du tour.
cursorstrobligatoireL'identifiant de la position dans le log de la session à laquelle l'enregistrement a été lu. Pour un Running ou un Blocked renvoyé par une attente avec on_event, il s'agit de la position atteinte par les événements du gestionnaire, si elle diffère.
textstr | NoneobligatoireLe dernier texte de l'assistant pour ce tour à cette position, ou None avant le premier texte.
errorProtocolErrorobligatoireLa cause de l'échec du tour, sous forme de ProtocolError.
UnknownOutcome

UnknownOutcome

class UnknownOutcome(
    *,
    session_id: str,
    turn_id: str,
    cursor: str,
    text: str | None,
    outcome: str,
    raw: dict[str, JsonValue] = {},
)

Le tour s'est terminé avec une issue ajoutée après votre version du SDK, telle que "future_outcome".

Prévoyez un case pour cet enregistrement, pour que votre code continue de fonctionner lorsque de nouvelles issues sont ajoutées.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session du tour.
turn_idstrobligatoireL'identifiant du tour.
cursorstrobligatoireL'identifiant de la position dans le log de la session à laquelle l'enregistrement a été lu. Pour un Running ou un Blocked renvoyé par une attente avec on_event, il s'agit de la position atteinte par les événements du gestionnaire, si elle diffère.
textstr | NoneobligatoireLe dernier texte de l'assistant pour ce tour à cette position, ou None avant le premier texte.
outcomestrobligatoireL'issue, telle que "future_outcome".
rawdict[str, JsonValue]{}Les données de fin du tour, sans analyse.
ProtocolError

ProtocolError

class ProtocolError(
    *,
    message: str,
    code: str | None = None,
    retryable: bool = False,
    details: dict[str, JsonValue] | None = None,
)

Une erreur provenant de l'environnement d'exécution de la session, comme celle qui a fait échouer un tour.

Le code de l'erreur d'un tour ayant échoué indique ce qui a échoué. Vous pouvez donc l'utiliser pour distinguer les cas :

  • "completion_rejected" : le fournisseur du modèle a refusé la requête avec un statut HTTP 4xx autre que 401, 403, 408, 409 et 429, par exemple pour un modèle inconnu ou un paramètre invalide : corrigez la requête.
  • "completion_unauthorized" : le fournisseur du modèle a refusé les identifiants (HTTP 401 ou 403). Aucune nouvelle tentative possible.
  • "completion_rate_limited" : le nombre de requêtes dépasse votre limite de débit (HTTP 429 avec le motif rate_limited). Une nouvelle tentative est possible.
  • "completion_unavailable" : le fournisseur du modèle n'a pas pu traiter la requête : aucune capacité disponible pour le modèle (HTTP 409, ou tout autre 429), une panne ou une erreur serveur. Une nouvelle tentative est possible si la cause est temporaire, par exemple HTTP 502, 503 ou 504.
  • "completion_timed_out" : le fournisseur a répondu HTTP 408, le modèle a cessé de produire une sortie, ou l'appel a dépassé sa limite de durée. Une nouvelle tentative est possible, sauf si l'appel a dépassé sa limite de durée.
  • "completion_context_too_large" : la requête dépasse la fenêtre de contexte du modèle. Aucune nouvelle tentative possible, sauf si le fournisseur la refuse à nouveau juste après une compaction du contexte, ou refuse même la plus petite requête de compaction (details.reason vaut "after_compaction" ou "minimal_summary_request").
  • "completion_billing_denied" : la facturation a refusé la requête, par exemple parce que le budget est épuisé. Aucune nouvelle tentative possible.
  • "completion_failed" : l'appel au modèle a échoué sans statut HTTP, par exemple à cause d'une perte de connexion ou d'un flux terminé prématurément. Une nouvelle tentative est possible.
  • "completion_failed_permanently" : l'appel au modèle a échoué sans statut HTTP et une nouvelle tentative ne résoudra pas le problème, par exemple si une réponse ne rapporte aucune utilisation de tokens : un serveur compatible avec OpenAI doit prendre en charge stream_options.include_usage. Aucune nouvelle tentative possible.
  • "remote_session_failed" : une session accessible via une API ou déployée a échoué ou atteint sa limite de durée. La session est terminée : démarrez-en une nouvelle.
  • "capability_execution_failed" : un hook autre que pre_tool_call ou post_tool_call a levé une exception, ou son état sauvegardé était trop volumineux. Le message se termine par le texte de l'exception. Aucune nouvelle tentative possible.
  • "tool_raised" : un outil a levé une exception autre que agents.ToolError sur un agent avec tool_errors="raise". Le message indique le nom de l'outil et le type de l'exception. Aucune nouvelle tentative possible.
  • "tool_output_schema_mismatch" : le résultat d'un outil n'était pas conforme à son output_schema= sur un agent avec tool_errors="raise". Aucune nouvelle tentative possible.
  • "invalid_compaction_summary" : une compaction du contexte a échoué : le résumé du modèle était vide, comportait des délimiteurs <summary> mal formés, appelait des outils ou atteignait la limite de tokens de sortie. Aucune nouvelle tentative possible.
  • "compaction_request_too_large" : une compaction du contexte n'a pas pu démarrer, car le contexte à envoyer dépasse le seuil de compaction. Aucune nouvelle tentative possible.
  • "compaction_replacement_too_large" : le résumé et le contexte nécessaires au tour dépassent le seuil de compaction. Aucune nouvelle tentative possible.
  • "turn_failed" : une erreur sans code dédié provenant d'un agent accessible via une API.
ParamètreTypeValeur par défautDescription
messagestrobligatoireLa description du problème.
codestr | NoneNoneLe code de l'erreur, tel que "completion_rate_limited", ou None si elle n'en a pas.
retryableboolFalseTrue si le renvoi de la même requête peut réussir, par exemple après un dépassement du délai d'attente du flux du modèle.
detailsdict[str, JsonValue] | NoneNoneLes données structurées accompagnant l'erreur, par exemple {"reason": "invalid_request_error", "status_code": 422} transmis par le fournisseur du modèle, ou None si aucune donnée n'a été transmise (les données qui ne sont pas des objets JSON sont omises).
InvalidOutput

InvalidOutput

class InvalidOutput(*, raw: JsonValue, error: str)

Le tour s'est terminé, mais sa sortie n'est pas conforme au type demandé.

ParamètreTypeValeur par défautDescription
rawJsonValueobligatoireLe texte du tour.
errorstrobligatoireLa raison de l'échec de la validation.
ToolCall

ToolCall

class ToolCall(name: str, arguments: JsonValue)

Un appel d'outil effectué par le modèle pendant le tour.

name est l'identifiant complet de l'outil, par exemple client.get_weather, et non le nom utilisé par le modèle pour l'appeler. Un appel à un outil inexistant conserve le nom utilisé par le modèle. Dans les tool_calls d'un hook post_llm_call ou post_agent_turn, l'appel n'est pas encore résolu : name correspond donc au nom utilisé par le modèle, par exemple get_weather. Un appel qui n'a pas été exécuté figure aussi dans la liste : une règle d'autorisation l'a refusé, un utilisateur l'a rejeté lors de l'approbation, le délai d'approbation a expiré, un hook l'a ignoré ou a échoué en le traitant, l'agent l'a refusé (invalid_tool_call : arguments qui ne sont pas du JSON valide ou que le schéma rejette, outil inconnu, wait aux côtés d'autres appels) ou, dans run_typescript, ses arguments ne correspondaient pas au schéma d'entrée de l'outil ou la limite de temps du programme l'a arrêté avant son démarrage. arguments contient les arguments de l'appel : dans Completed.tool_calls, ceux définis par un hook pre_tool_call si présent, sinon ceux du modèle ; dans les tool_calls d'un hook, ceux du modèle. Les arguments qui ne sont pas du JSON valide sont représentés par la chaîne brute, et une session d'un agent déployé peut renvoyer n'importe quelle valeur JSON.

ParamètreTypeValeur par défautDescription
namestrobligatoireL'identifiant complet de l'outil, par exemple client.get_weather, et non le nom utilisé par le modèle pour l'appeler. Un appel à un outil inexistant conserve le nom utilisé par le modèle.
argumentsJsonValueobligatoireLes arguments de l'appel : dans Completed.tool_calls, ceux définis par un hook pre_tool_call si présent, sinon ceux du modèle ; dans les tool_calls d'un hook, ceux du modèle. Les arguments qui ne sont pas du JSON valide sont représentés par la chaîne brute, et une session d'un agent déployé peut renvoyer n'importe quelle valeur JSON.
TokenUsage

TokenUsage

class TokenUsage(
    *,
    input_tokens: int,
    output_tokens: int,
    total_tokens: int,
    cached_input_tokens: int = 0,
    cache_write_tokens: int = 0,
    reasoning_tokens: int = 0,
)

Les tokens utilisés par un appel au modèle, tels que rapportés par le fournisseur.

total_tokens est la somme de input_tokens et output_tokens. cached_input_tokens compte les tokens d'entrée lus dans le cache du fournisseur et fait partie de input_tokens.

ParamètreTypeValeur par défautDescription
input_tokensintobligatoireLes tokens lus par le modèle, y compris ceux en cache.
output_tokensintobligatoireLes tokens écrits par le modèle.
total_tokensintobligatoireinput_tokens plus output_tokens.
cached_input_tokensint0Les tokens d'entrée lus dans le cache du fournisseur, inclus dans input_tokens.
cache_write_tokensint0Les tokens d'entrée écrits par le fournisseur dans son cache, tels qu'il les rapporte.
reasoning_tokensint0Les tokens de sortie utilisés par le modèle pour le raisonnement, tels que rapportés par le fournisseur.
Callbacks Ouverts

Callbacks Ouverts

OpenCallback

OpenCallback

class OpenCallback(*, id: str, session_id: str, turn_id: str, kind: str, title: str | None)

Un callback dont le tour, ou l'un de ses sous-agents, attend la réponse : un OpenApproval, un OpenSignIn, un OpenClientToolCall ou un UnknownOpenCallback.

turn.answer accepte son id sur n'importe quel tour de sa session ou d'une session située au-dessus dans l'arborescence. Le callback d'un sous-agent porte les identifiants du sous-agent, y compris celui de son propre tour.

ParamètreTypeValeur par défautDescription
idstrobligatoireL'identifiant du callback, celui qu'accepte turn.answer.
session_idstrobligatoireL'identifiant de la session qui a ouvert le callback : celle du sous-agent, pour un callback de sous-agent.
turn_idstrobligatoireL'identifiant du tour qui a ouvert le callback.
kindstrobligatoire"approval", "sign_in" ou "client_tool" ; les autres catégories sont réservées à l'usage interne de Mistral.
titlestr | NoneobligatoireLe titre d'une approbation, None pour les autres catégories.
OpenApproval

OpenApproval

class OpenApproval(
    *,
    id: str,
    session_id: str,
    turn_id: str,
    kind: str,
    title: str | None,
    request: ApprovalRequest,
)

Une approbation que le tour attend.

Hérite de id, session_id, turn_id, kind et title de OpenCallback.

ParamètreTypeValeur par défautDescription
requestApprovalRequestobligatoireL'appel d'outil concerné par l'approbation : le même objet ApprovalRequest que reçoit un gestionnaire on_approval.
OpenClientToolCall

OpenClientToolCall

class OpenClientToolCall[P, R](
    *,
    id: str,
    session_id: str,
    turn_id: str,
    kind: str,
    title: str | None,
    call: ClientToolCall,
)

Un appel d'outil côté client dont le tour attend la réponse.

Vérifiez l'outil appelé avec <stub>.called(callback), puis répondez avec turn.answer(callback.id, await callback.run(fn)).

Hérite de id, session_id, turn_id, kind et title de OpenCallback.

ParamètreTypeValeur par défautDescription
callClientToolCallobligatoireL'appel auquel répondre : le même objet ClientToolCall que reçoit un gestionnaire on_client_tool.
OpenClientToolCall.run

OpenClientToolCall.run

async def run(
    fn: Callable[P, R | ToolResult[Any] | Awaitable[R | ToolResult[Any]]],
    /,
) -> R | ToolResult[Any]

Appelle fn avec les arguments de l'appel, validés par le stub de l'outil, et renvoie son résultat : la valeur qu'accepte turn.answer(callback.id, ...) pour cet appel.

fn accepte les paramètres du stub, sans contexte, et renvoie le type de retour du stub ou un agents.ToolResult, de manière synchrone ou asynchrone. Une fonction fn synchrone s'exécute dans un thread d'outil. Toute exception levée par fn se propage : tool_errors ne s'applique pas.

Lorsque les arguments du modèle ne correspondent pas au stub, fn n'est pas appelée : le résultat est un agents.ToolResult d'erreur qui en indique la raison. Répondre avec ce résultat permet au modèle de corriger l'appel.

ParamètreTypeValeur par défautDescription
fnCallable[P, R | ToolResult[Any] | Awaitable[R | ToolResult[Any]]]obligatoireLa fonction qui exécute l'outil de ce côté, avec les paramètres du stub.
Exceptions levées
SdkErrorAucun stub pour cet outil dans les outils, les mécanismes de contrôle, les hooks ou les sous-agents de l'agent (comme sur un handle issu de Agent.load_from()), ou deux stubs partagent son identifiant. Lisez plutôt call.arguments.
OpenSignIn

OpenSignIn

class OpenSignIn(
    *,
    id: str,
    session_id: str,
    turn_id: str,
    kind: str,
    title: str | None,
    requests: tuple[SignInRequest, ...],
)

Une connexion que le tour attend : l'agent demande à l'utilisateur de connecter une ou plusieurs sources, par exemple des connecteurs, avant d'utiliser leurs outils.

Répondez avec turn.answer(callback.id, agents.SignInAnswer(connected=..., denied=...)), en désignant chaque source par son id, ou avec un gestionnaire on_sign_in=, qui reçoit cet enregistrement. kind vaut "sign_in". on_client_tool ne reçoit jamais de demande de connexion.

Hérite de id, session_id, turn_id, kind et title de OpenCallback.

ParamètreTypeValeur par défautDescription
requeststuple[SignInRequest, ...]obligatoireLes sources à connecter, avec un SignInRequest pour chacune.
UnknownOpenCallback

UnknownOpenCallback

class UnknownOpenCallback(
    *,
    id: str,
    session_id: str,
    turn_id: str,
    kind: str,
    title: str | None,
    raw: dict[str, JsonValue] = {},
)

Un callback dont la catégorie n'a pas de type propre dans votre version du SDK.

Une version ultérieure du SDK peut attribuer un type propre à une catégorie. Faites la correspondance sur kind et laissez ouverts les callbacks des catégories que vous ne connaissez pas.

Hérite de id, session_id, turn_id, kind et title de OpenCallback.

ParamètreTypeValeur par défautDescription
rawdict[str, JsonValue]{}Les données du callback, non analysées.
Refus

Refus

Busy

Busy

class Busy(*, session_id: str, active_turn_id: str, turn: Turn)

Un nouveau tour n'a pas été démarré, car un autre tour de la session est actif.

Ce n'est pas un état de tour : aucun tour n'a été démarré.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session.
active_turn_idstrobligatoireL'identifiant du tour actif.
turnTurnobligatoireLe handle du tour actif, pour le guider, l'interrompre ou attendre sa fin.
TurnConflict

TurnConflict

class TurnConflict(*, session_id: str, expected_turn_id: str, active_turn_id: str | None)

Une requête désignait un tour qui n'est plus le tour actif de la session. Rien n'a été appliqué : la session a refusé la requête.

ParamètreTypeValeur par défautDescription
session_idstrobligatoireL'identifiant de la session.
expected_turn_idstrobligatoireL'identifiant du tour désigné par la requête.
active_turn_idstr | NoneobligatoireL'identifiant du tour actuellement actif, ou None si aucun tour n'est actif.