Session et tour

Les références à une session et à ses tours, et les données qu'un tour accepte en entrée.

Guides : Sessions et Tours.

NomDéfinition
SessionUne session, identifiée par son ID.
TurnUn tour d'une session, identifié par son ID.
SessionInputUne valeur transmise au démarrage d'une session, que les outils et les hooks peuvent lire.
DependsIndique qu'un paramètre Annotated est une entrée de session : Annotated[T, agents.Depends()].
HistoryImportEntryUne entrée d'historique qui initialise une nouvelle session, au format accepté par history= : un message, le raisonnement du modèle, un appel d'outil, un résultat d'outil ou un instantané.
HistoryImportMessageUn message de l'historique : ce que l'utilisateur, le modèle ou le système a dit.
HistoryImportReasoningLe raisonnement du modèle, sous forme d'entrée d'historique.
HistoryImportToolCallUn appel d'outil effectué par le modèle, sous forme d'entrée d'historique.
HistoryImportToolResultLe résultat d'un appel d'outil, sous forme d'entrée d'historique : result ou error, mais pas les deux.
HistoryImportSnapshotDes données enregistrées dans l'historique que le modèle ne voit pas.
TextContentBlockUn bloc de texte.
ImageContentBlockUne image, désignée par son URI.
AudioContentBlockUn extrait audio, désigné par son URI.
ResourceLinkContentBlockUn lien vers une ressource, comme un fichier, que le bloc ne contient pas.
EmbeddedResourceContentBlockUne ressource, comme un fichier, contenue dans le bloc sous forme de texte ou de données en base64.
UnknownContentBlockUn bloc de contenu dont le type a été ajouté après la version de votre SDK.
ContentAnnotationsLes annotations de bloc MCP : à qui un bloc est destiné et son importance.
Session

Session

class Session

Une session, identifiée par son ID. Créer une référence avec agent.session(session_id) n'envoie aucune requête.

Obtenez une référence avec await agent.start_session(), ou utilisez un ID enregistré avec agent.session(session_id). Les deux méthodes conservent le output_type de l'agent pour run, ainsi que pour get et result des tours de la session.

on_approval répond aux demandes d'approbation de la session et de ses sous-agents pendant l'attente de session.run ou turn.result, avec AllowApproval, DenyApproval ou agents.KeepCallbackOpen(). on_sign_in répond à leurs demandes de connexion avec un SignInAnswer. on_client_tool répond à leurs appels d'outils côté client, pour que l'attente ne renvoie pas Blocked pour ces appels. Un gestionnaire d'approbation ou de connexion qui lève une exception ou renvoie une autre valeur laisse son callback ouvert, et l'appel en attente lève une exception tandis que le tour continue de s'exécuter. Une réponse d'outil côté client ou un gestionnaire on_client_tool qui lève une exception suit le paramètre tool_errors de l'agent, comme pour agent.run : par défaut, le modèle est informé de l'échec de l'appel et l'attente continue. Deux attentes simultanées dans une même boucle d'événements partagent les réponses : la fonction de réponse s'exécute une fois par appel d'outil côté client.

Deux références sont égales lorsqu'elles désignent la même session au même endroit : la même API Mistral pour un agent déployé, quelle que soit la manière dont vous l'avez chargé, ou le même environnement d'exécution local. Vous pouvez les conserver dans un ensemble ou les utiliser comme clés de dictionnaire.

AttributTypeDescription
idstrL'ID de la session.
Session.turn

Session.turn

def turn(turn_id: str) -> Turn

Renvoie la référence à un tour de cette session. N'envoie aucune requête.

ParamètreTypeValeur par défautDescription
turn_idstrobligatoireL'ID du tour.
Session.send_message

Session.send_message

async def send_message(
    content: str | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]],
    *,
    idempotency_key: str | None = None,
) -> Turn

Envoie un message : la session démarre un tour ou ajoute le message au tour en cours.

turn.started indique le cas : True pour un nouveau tour, False pour le tour en cours.

Lève agents.SessionBusyError si la session ne peut toujours pas accepter le message après plusieurs tentatives ; aucune modification n'a été appliquée.

ParamètreTypeValeur par défautDescription
contentstr | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]]obligatoireLe message : une chaîne de caractères ou des blocs de contenu.
idempotency_keystr | NoneNonePermet de réessayer l'envoi sans risque : la même clé renvoie le même tour, et sa réutilisation pour un autre message lève agents.SessionIdempotencyConflictError.
Session.start_turn

Session.start_turn

async def start_turn(
    content: str | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]],
    *,
    idempotency_key: str | None = None,
) -> Turn | Busy

Démarre un nouveau tour. Renvoie Busy, avec le tour en cours dans busy.turn, si un tour est actif.

La même idempotency_key renvoie le tour démarré par cette clé ; sa réutilisation pour un autre message lève agents.SessionIdempotencyConflictError pendant l'exécution de la session. Une nouvelle tentative avec une clé refusée par Busy démarre un tour une fois le tour en cours terminé. Un démarrage ne rejoint jamais un tour en cours, donc turn.started vaut True.

Lève SessionBusyError si la session ne peut pas accepter un démarrage pour une autre raison, comme une limite du nombre de sous-agents en cours d'exécution ; aucune modification n'a été appliquée.

ParamètreTypeValeur par défautDescription
contentstr | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]]obligatoireLe message qui démarre le tour : une chaîne de caractères ou des blocs de contenu.
idempotency_keystr | NoneNoneIdentifie le démarrage pour qu'une nouvelle tentative avec cette clé renvoie le tour qu'elle a démarré.
Session.run

Session.run

async def run(
    content: str | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]],
    *,
    output_type: type[BaseModel] | None = None,
    idempotency_key: str | None = None,
    timeout: float | None = None,
    on_event: Callable[[Event], Awaitable[None] | None] | None = None,
) -> TurnState[Any] | Busy

Démarre un tour et attend qu'il se termine ou qu'il attende un callback ; renvoie son enregistrement.

Renvoie Busy si un autre tour est actif. Équivaut à start_turn, puis turn.result(timeout=, on_event=) : quitter l'attente n'arrête pas le tour. Avec le on_client_tool de la référence, lève les mêmes exceptions que Turn.result pour une réponse d'outil côté client.

ParamètreTypeValeur par défautDescription
contentstr | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]]obligatoireLe message qui démarre le tour : une chaîne de caractères ou des blocs de contenu.
output_typetype[BaseModel] | NoneNoneUn modèle Pydantic qui valide la sortie d'un enregistrement Completed (voir Turn.result). S'il n'est pas fourni, le output_type de l'agent associé à la référence est utilisé, s'il est défini.
idempotency_keystr | NoneNoneIdentifie le démarrage pour qu'une nouvelle tentative avec cette clé renvoie le tour qu'elle a démarré.
timeoutfloat | NoneNoneLa durée maximale d'attente du tour en secondes, hors démarrage. Le temps d'exécution d'un gestionnaire on_approval ou on_sign_in est comptabilisé ; celui de votre code d'outil côté client ne l'est pas. None attend sans limite.
on_eventCallable[[Event], Awaitable[None] | None] | NoneNoneUne fonction synchrone ou asynchrone appelée avec chaque événement du tour pendant l'attente de l'appel. Quand le tour est terminé, le dernier événement est TurnEnded.
Session.iter_events

Session.iter_events

def iter_events(*, after: TurnState[object] | str | None = None) -> AsyncIterator[Event]

Produit les événements de la session après after, un enregistrement ou un curseur, ou depuis son début.

Suit la session jusqu'à sa fin, sans jamais rien modifier. Lit chaque tour terminé, de sorte que chaque TurnEnded contient son enregistrement.

ParamètreTypeValeur par défautDescription
afterTurnState[object] | str | NoneNoneUn enregistrement ou un curseur après lequel reprendre. None commence au début de la session.
Exceptions levées
ObservationLostLes événements de la session n'ont pas pu être relus ; reprenez après son curseur.
InvalidCursorErrorÀ la première itération, after est un enregistrement ou un curseur d'une autre session, ou un curseur non valide.
Session.cancel

Session.cancel

async def cancel() -> None

Termine la session et ses sous-agents. Une session déjà terminée reste inchangée.

Les tours en cours sont interrompus et la session n'accepte plus de nouvelle commande : un envoi ultérieur lève SessionTerminatedError. Son historique reste accessible en lecture. Pour une session déployée, l'annulation revient dès que le déploiement l'accepte ; pour une session locale, elle revient une fois la session terminée et sa sandbox libérée. Un sous-agent ne peut pas être annulé seul. Annulez plutôt sa session racine.

Session.subagents

Session.subagents

async def subagents() -> list[Session]

Renvoie les références aux sous-agents directs de cette session, du plus récent au plus ancien.

La référence à un sous-agent permet la lecture, et ses tours acceptent interrupt : send_message, start_turn, run et cancel sur la référence, ainsi que steer sur ses tours, lèvent UnsupportedSessionProcedureError. Pour réorienter un sous-agent, envoyez un message à son parent ou utilisez steer sur celui-ci ; pour l'arrêter, annulez sa session racine. Il utilise les mêmes on_approval, on_sign_in et on_client_tool que cette référence.

Turn

Turn

class Turn

Un tour d'une session, identifié par son ID. Créer une référence avec session.turn(turn_id) n'envoie aucune requête.

Obtenez une référence avec session.turn(turn_id) ou à partir d'un envoi. Deux références au même tour de la même session sont égales.

AttributTypeDescription
idstrL'ID du tour.
startedbool | NoneTrue pour un tour démarré par un envoi, False pour un tour en cours rejoint par un envoi. None pour une référence qui ne provient pas d'un envoi, comme une référence créée à partir d'un ID.
Turn.get

Turn.get

async def get() -> TurnState[Any]

Lit l'état actuel de ce tour. N'attend jamais et ne modifie jamais le tour.

Renvoie Running, Blocked (le tour attend un callback), ou l'enregistrement de la façon dont le tour s'est terminé : Completed, Interrupted, Failed ou UnknownOutcome. Completed.output contient le texte du tour ou, si l'agent associé à la référence possède un output_type, ce texte analysé comme avec result(output_type=...). Le cursor de l'enregistrement est l'ID du dernier événement de la session au moment de la lecture. Le tour actif de la session est également Blocked lorsqu'un de ses sous-agents, à n'importe quelle profondeur, attend un callback, comme une approbation : Blocked.callbacks le liste avec les ID du sous-agent. Un tour d'une session terminée n'est jamais Running. Si la session n'a pas indiqué comment le tour s'est terminé, son état reflète la fin de la session : pour une session annulée, Interrupted avec cause="cancelled". Un tour renvoyé par un envoi est Running jusqu'à ce que la session le répertorie : un agent déployé répond à l'envoi avant de le faire.

Exceptions levées
TurnNotFoundErrorLa session n'a aucun tour avec cet ID. Jamais levée pour un tour renvoyé par un envoi, ni pour busy.turn.
Turn.result

Turn.result

async def result(
    *,
    output_type: type[BaseModel] | None = None,
    after: TurnState[object] | str | None = None,
    timeout: float | None = None,
    on_event: Callable[[Event], Awaitable[None] | None] | None = None,
) -> TurnState[Any]

Attend que le tour se termine ou qu'il attende un callback, puis renvoie son enregistrement.

Renvoie Completed, Interrupted, Failed ou UnknownOutcome quand le tour se termine, et Blocked s'il attend un callback ouvert après after et toujours ouvert. À l'expiration du délai, renvoie l'enregistrement du tour à cet instant, Running ou Blocked, sans lever d'exception.

Quitter l'attente n'envoie rien, et le tour continue de s'exécuter. Une annulation, comme asyncio.wait_for ou Ctrl-C, reçoit une note indiquant les ID et la marche à suivre pour arrêter le tour.

Sans after, un tour qui attend un callback renvoie immédiatement son état. Passez le dernier enregistrement de ce tour comme after pour attendre au-delà des callbacks déjà traités.

ParamètreTypeValeur par défautDescription
output_typetype[BaseModel] | NoneNoneUn modèle Pydantic dans lequel le texte du tour est analysé, sous la forme Completed.output. Par défaut, utilise le output_type de l'agent associé à la référence.
afterTurnState[object] | str | NoneNoneUn enregistrement de cette session, ou son cursor, après lequel lire les événements du tour. Par défaut, commence au début de ce tour : les callbacks des tours précédents ne comptent pas. Passez l'enregistrement de ce tour ou un enregistrement lu avant son démarrage. L'enregistrement d'un autre tour, lu pendant l'exécution de ce tour, peut faire manquer certains événements de ce tour.
timeoutfloat | NoneNoneLa durée maximale d'attente du tour en secondes. Le temps d'exécution d'un gestionnaire on_approval ou on_sign_in est comptabilisé ; celui de votre code d'outil côté client ne l'est pas. None attend aussi longtemps que le tour.
on_eventCallable[[Event], Awaitable[None] | None] | NoneNoneUne fonction synchrone ou asynchrone appelée avec chaque événement du tour, dans l'ordre, pendant l'attente de l'appel. Quand le tour est terminé, le dernier événement est TurnEnded.
Exceptions levées
ObservationLostLes événements de la session ou les callbacks de ses sous-agents n'ont pas pu être lus ; le tour continue de s'exécuter.
TurnNotFoundErrorLa session n'a aucun tour avec cet ID. Jamais levée pour un tour renvoyé par un envoi, ni pour busy.turn : jusqu'à ce que la session le répertorie, l'attente suit ses événements.
InvalidCursorErrorafter est un enregistrement ou un curseur d'une autre session, auquel cas l'exception est levée avant toute lecture, ou un curseur que la session n'a jamais eu, auquel cas elle n'est levée que lorsque l'attente lit les événements.
ClientToolAnswerErrorLe on_client_tool de la référence a répondu à un appel, mais la réponse n'a pas pu être envoyée ; l'appel reste ouvert.
ExceptionAvec tool_errors="raise", l'exception levée par une réponse d'outil côté client ou un gestionnaire on_client_tool ; son appel reste ouvert.
Turn.iter_events

Turn.iter_events

def iter_events(*, after: TurnState[object] | str | None = None) -> AsyncIterator[Event]

Produit les événements de ce tour après after, ou depuis son début, jusqu'à son TurnEnded.

Produit les événements déjà disponibles dans la session, puis ceux qui arrivent en direct, sans limite de temps : un tour qui attend une approbation peut n'envoyer aucun événement pendant des heures. Une fois le tour terminé, le dernier événement est TurnEnded, avec son enregistrement, et une position située à sa fin ou après ne produit rien, immédiatement. Ne modifie rien.

ParamètreTypeValeur par défautDescription
afterTurnState[object] | str | NoneNoneL'enregistrement de ce tour, un enregistrement lu avant son démarrage (comme le résultat du tour précédent), ou un curseur situé dans ce tour. None commence après la fin du tour précédent.
Exceptions levées
ObservationLostLes événements de la session n'ont pas pu être relus ; reprenez après son curseur.
TurnNotFoundErrorÀ la première itération, la session n'a aucun tour avec cet ID. Jamais levée pour un tour renvoyé par un envoi, ni pour busy.turn.
InvalidCursorErrorÀ la première itération, after est un enregistrement ou un curseur d'une autre session, ou un curseur non valide.
Turn.steer

Turn.steer

async def steer(
    content: str | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]],
) -> Turn | TurnConflict

Ajoute un message à ce tour pendant son exécution.

Renvoie TurnConflict si ce tour n'est plus le tour actif : le message n'est pas ajouté.

ParamètreTypeValeur par défautDescription
contentstr | Sequence[TextContentBlock | ImageContentBlock | Mapping[str, Any]]obligatoireLe message à ajouter : une chaîne de caractères ou des blocs de contenu.
Turn.answer

Turn.answer

async def answer(callback_id: str, answer: object) -> Answered | AlreadySettled | NotFound

Répond à tout callback ouvert de la session de ce tour ou de ses sous-agents, quel que soit le tour, à partir de son ID de callback. L'ID du tour n'est pas utilisé : l'ID d'un callback l'identifie dans sa session.

Une approbation (OpenApproval) accepte AllowApproval ou DenyApproval. Une demande de connexion (OpenSignIn) accepte un SignInAnswer qui désigne chaque source demandée, et uniquement celles-ci. Un appel d'outil côté client (OpenClientToolCall) accepte le résultat de l'outil : ce qu'une fonction de réponse renverrait, comme un modèle, un dictionnaire ou un ToolResult. Si le stub figure dans le tools= de l'agent ou de ses sous-agents, le résultat est vérifié par rapport au type de retour du stub et envoyé de la même manière que sa réponse. Sinon, il est envoyé en JSON, sans vérification : pour un outil créé avec output_schema=, un outil de hook, un ID d'outil partagé par deux stubs différents, ou une référence obtenue avec Agent.load_from().

Lit la session une fois, puis répond. Renvoie Answered si le callback était ouvert, AlreadySettled s'il ne l'est plus (un autre client a répondu en premier, ou le callback s'est fermé), et NotFound si la session ne l'a jamais ouvert. Un callback ouvert d'un sous-agent, répertorié dans le Blocked.callbacks de la racine, reçoit une réponse dans la session du sous-agent, et l'enregistrement désigne cette session ; une fois le callback fermé, la racine renvoie NotFound et la session du sous-agent lui-même, agent.session(callback.session_id), renvoie AlreadySettled.

Pour une approbation, Answered.answer est la réponse prise en compte : deux clients qui répondent simultanément reçoivent tous deux Answered, avec la réponse du premier arrivé. Vous devez donc la comparer à la vôtre. Elle vaut None si la réponse prise en compte n'a pas pu être lue à temps ; lisez le tour pour connaître le résultat. Pour un appel d'outil côté client et une demande de connexion, elle vaut None : le premier résultat envoyé est pris en compte. Les sessions locales et déployées fonctionnent de la même manière.

La valeur answer d'une approbation est AllowApproval ou DenyApproval, jamais un booléen, un dictionnaire ou None. KeepCallbackOpen() est une valeur de retour de gestionnaire, jamais une réponse : pour laisser un callback ouvert, n'y répondez pas.

ParamètreTypeValeur par défautDescription
callback_idstrobligatoireL'ID du callback ouvert, tel qu'il figure dans Blocked.callbacks.
answerobjectobligatoireLa réponse correspondant au type de callback : AllowApproval ou DenyApproval, un SignInAnswer, ou le résultat d'un outil côté client.
Exceptions levées
ValueErrorcallback_id n'est pas un UUID (rien n'est envoyé).
SdkErroranswer vaut KeepCallbackOpen() ou ne convient pas au callback, ou deux sous-agents ont un callback ouvert avec cet identifiant. Cette erreur survient aussi lorsque answer autorise l'approbation d'un hook pour toute la session (AllowApproval(scope="session")), ou lorsque le callback est un appel d'outil client pour un outil fourni par la plateforme, par exemple dans l'espace de noms connectors. Rien n'est envoyé. Une demande de connexion arrive sous la forme OpenSignIn et attend un SignInAnswer.
ObservationLostLe callback n'est ouvert nulle part, et les événements de la session n'ont pas pu être lus.
Turn.interrupt

Turn.interrupt

async def interrupt() -> Turn | TurnConflict

Arrête ce tour ; la session reste ouverte pour de nouveaux tours.

Renvoie TurnConflict lorsque ce tour n'est plus le tour actif.

Entrée

Entrée

SessionInput

SessionInput

class SessionInput(pydantic.BaseModel)

Une valeur que vous transmettez au démarrage d'une session et que les outils et les hooks peuvent lire.

Créez une sous-classe avec les champs nécessaires, par exemple un dépôt ou une organisation, et définissez input_id. Un outil, un hook ou un hook de sandbox la lit au moyen d'un paramètre annoté Annotated[YourInput, agents.Depends()] ; le modèle ne la voit jamais. N'y placez jamais d'identifiant d'authentification : la session la conserve pendant toute sa durée de vie.

Une règle exprimée uniquement par un validateur est vérifiée à l'endroit où la valeur est utilisée, et le rejet d'une valeur fait échouer cette utilisation. N'incluez jamais la valeur dans le message d'un validateur, car ce message est transmis aux résultats des tours et au modèle.

Une session conserve ses entrées pendant toute sa durée de vie, y compris lors de nouveaux déploiements de l'agent. Toute modification d'une classe doit donc continuer d'accepter les valeurs acceptées par sa version précédente.

AttributTypeDescription
input_idstrLe nom stable de l'entrée, utilisé par une session pour la retrouver. Il ne fait pas partie de la valeur.
Depends

Depends

class Depends()

Marque un paramètre Annotated comme entrée de session : Annotated[T, agents.Depends()].

Le type annoté T est la classe d'entrée, déclarée une seule fois.

HistoryImportEntry

HistoryImportEntry

type HistoryImportEntry = (
    HistoryImportMessage
    | HistoryImportReasoning
    | HistoryImportToolCall
    | HistoryImportToolResult
    | HistoryImportSnapshot
)

Une entrée d'historique qui initialise une nouvelle session, telle qu'acceptée par history= : un message, le raisonnement du modèle, un appel d'outil, un résultat d'outil ou un instantané. Fournissez chaque entrée sous la forme d'une des classes ci-dessous, ou d'un dictionnaire contenant les mêmes champs, en snake case ou en camelCase, avec son type : "message", "reasoning", "tool_call", "tool_result" ou "snapshot".

HistoryImportMessage

HistoryImportMessage

class HistoryImportMessage(
    *,
    role: Literal['system', 'user', 'assistant'],
    content: list[ContentBlock] = [],
)

Un message de l'historique : ce qu'a dit l'utilisateur, le modèle ou le système.

ParamètreTypeValeur par défautDescription
roleLiteral['system', 'user', 'assistant']obligatoire"system", "user" ou "assistant".
contentlist[ContentBlock][]Les blocs de contenu du message. Un message système n'accepte que des blocs de texte, et un message de l'assistant n'accepte aucune ressource intégrée.
AttributTypeDescription
typeLiteral['message']Toujours "message".
HistoryImportReasoning

HistoryImportReasoning

class HistoryImportReasoning(*, text: str)

Le raisonnement du modèle, sous forme d'entrée d'historique.

ParamètreTypeValeur par défautDescription
textstrobligatoireLe raisonnement du modèle.
AttributTypeDescription
typeLiteral['reasoning']Toujours "reasoning".
HistoryImportToolCall

HistoryImportToolCall

class HistoryImportToolCall(
    *,
    tool_call_id: str,
    tool_kind: Literal['builtin', 'local', 'mcp', 'client', 'plugin', 'connector'] = 'local',
    name: str,
    arguments: JsonValue = None,
)

Un appel d'outil effectué par le modèle, sous forme d'entrée d'historique.

ParamètreTypeValeur par défautDescription
tool_call_idstrobligatoireL'identifiant de l'appel : son résultat porte le même identifiant.
tool_kindLiteral['builtin', 'local', 'mcp', 'client', 'plugin', 'connector']'local'L'origine de l'outil, par exemple "local" ou "mcp".
namestrobligatoireLe nom de l'outil appelé par le modèle.
argumentsJsonValueNoneLes arguments de l'appel tels qu'ils apparaissent dans l'historique : ceux du modèle, ou ceux définis par un hook pre_tool_call.
AttributTypeDescription
typeLiteral['tool_call']Toujours "tool_call".
HistoryImportToolResult

HistoryImportToolResult

class HistoryImportToolResult(
    *,
    tool_call_id: str,
    name: str | None = None,
    result: JsonValue = None,
    error: ProtocolError | None = None,
    annotations: dict[str, JsonValue] = {},
)

Le résultat d'un appel d'outil, sous forme d'entrée d'historique : result ou error, mais pas les deux.

ParamètreTypeValeur par défautDescription
tool_call_idstrobligatoireL'identifiant de l'appel auquel ce résultat correspond.
namestr | NoneNoneLe nom de l'outil, ou None.
resultJsonValueNoneLe résultat de l'outil, pour un appel réussi.
errorProtocolError | NoneNonePour un appel ayant échoué, son erreur, par exemple {"message": "..."}, à la place de result : une entrée contenant les deux est refusée.
annotationsdict[str, JsonValue]{}Les métadonnées conservées avec le résultat.
AttributTypeDescription
typeLiteral['tool_result']Toujours "tool_result".
HistoryImportSnapshot

HistoryImportSnapshot

class HistoryImportSnapshot(*, task_name: str, snapshot_type: str, value: JsonValue = None)

Des données enregistrées dans l'historique que le modèle ne voit pas. L'historique de la session les présente comme une entrée agents.UnknownEntry de type "checkpoint" : raw["message"] vaut task_name:snapshot_type, et raw["details"] vaut value.

ParamètreTypeValeur par défautDescription
task_namestrobligatoireLa tâche à laquelle l'instantané correspond. Le message du point de contrôle est task_name:snapshot_type.
snapshot_typestrobligatoireLe type d'instantané.
valueJsonValueNoneLes données de l'instantané, conservées dans les détails du point de contrôle. Le modèle ne les lit pas.
AttributTypeDescription
typeLiteral['snapshot']Toujours "snapshot".
TextContentBlock

TextContentBlock

class TextContentBlock(
    *,
    annotations: ContentAnnotations | None = None,
    meta: dict[str, JsonValue] | None = None,
    text: str = '',
)

Un bloc de texte.

ParamètreTypeValeur par défautDescription
annotationsContentAnnotations | NoneNoneLe destinataire du bloc et son importance, sous forme d'annotations MCP.
metadict[str, JsonValue] | NoneNoneLes métadonnées destinées à votre client, dans le champ MCP _meta. Le modèle ne les voit jamais. Doit être un objet JSON.
textstr''Le texte.
AttributTypeDescription
typeLiteral['text']Toujours "text".
ImageContentBlock

ImageContentBlock

class ImageContentBlock(
    *,
    annotations: ContentAnnotations | None = None,
    meta: dict[str, JsonValue] | None = None,
    uri: str,
    media_type: str | None = None,
    alt_text: str | None = None,
)

Une image, référencée par une URI.

ParamètreTypeValeur par défautDescription
annotationsContentAnnotations | NoneNoneLe destinataire du bloc et son importance, sous forme d'annotations MCP.
metadict[str, JsonValue] | NoneNoneLes métadonnées destinées à votre client, dans le champ MCP _meta. Le modèle ne les voit jamais. Doit être un objet JSON.
uristrobligatoireL'URI de l'image, par exemple une URI data: contenant l'image en base64.
media_typestr | NoneNoneLe type de média de l'image, par exemple "image/png".
alt_textstr | NoneNoneUne description textuelle de l'image.
AttributTypeDescription
typeLiteral['image']Toujours "image".
ImageContentBlock.from_bytes

ImageContentBlock.from_bytes

@classmethod
def from_bytes(
    data: bytes,
    media_type: str | None = None,
    *,
    alt_text: str | None = None,
    annotations: ContentAnnotations | None = None,
) -> ImageContentBlock

Une image intégrée ; le type de média est déterminé à partir des octets PNG, JPEG, GIF ou WebP.

ParamètreTypeValeur par défautDescription
databytesobligatoireLes octets de l'image.
media_typestr | NoneNoneLe type de média de l'image. Par défaut, celui déterminé à partir des octets.
alt_textstr | NoneNoneUne description textuelle de l'image.
annotationsContentAnnotations | NoneNoneLe destinataire du bloc et son importance.
ImageContentBlock.from_path

ImageContentBlock.from_path

@classmethod
def from_path(
    path: str | PathLike[str],
    media_type: str | None = None,
    *,
    alt_text: str | None = None,
    annotations: ContentAnnotations | None = None,
) -> ImageContentBlock

Une image intégrée, lue depuis un fichier local. Sa représentation en base64 est limitée à 10 000 000 caractères, soit un fichier d'environ 7,5 Mo ; un fichier plus volumineux lève ValueError.

ParamètreTypeValeur par défautDescription
pathstr | PathLike[str]obligatoireLe fichier image.
media_typestr | NoneNoneLe type de média de l'image. Par défaut, celui déterminé à partir des octets du fichier.
alt_textstr | NoneNoneUne description textuelle de l'image.
annotationsContentAnnotations | NoneNoneLe destinataire du bloc et son importance.
AudioContentBlock

AudioContentBlock

class AudioContentBlock(
    *,
    annotations: ContentAnnotations | None = None,
    meta: dict[str, JsonValue] | None = None,
    uri: str,
    media_type: str | None = None,
)

Un extrait audio, référencé par une URI.

ParamètreTypeValeur par défautDescription
annotationsContentAnnotations | NoneNoneLe public auquel le bloc est destiné et son importance, sous forme d'annotations MCP.
metadict[str, JsonValue] | NoneNoneMétadonnées destinées à votre client, dans le champ MCP _meta. Le modèle n'y a jamais accès. La valeur doit être un objet JSON.
uristrobligatoireL'URI du clip, par exemple une URI data: contenant le clip encodé en base64.
media_typestr | NoneNoneLe type de média du clip, par exemple "audio/wav".
AttributTypeDescription
typeLiteral['audio']Toujours "audio".
ResourceLinkContentBlock

ResourceLinkContentBlock

class ResourceLinkContentBlock(
    *,
    annotations: ContentAnnotations | None = None,
    meta: dict[str, JsonValue] | None = None,
    uri: str,
    name: str | None = None,
    title: str | None = None,
    description: str | None = None,
    media_type: str | None = None,
    size: int | None = None,
)

Un lien vers une ressource, par exemple un fichier, dont le contenu n'est pas inclus dans le bloc.

ParamètreTypeValeur par défautDescription
annotationsContentAnnotations | NoneNoneLe public auquel le bloc est destiné et son importance, sous forme d'annotations MCP.
metadict[str, JsonValue] | NoneNoneMétadonnées destinées à votre client, dans le champ MCP _meta. Le modèle n'y a jamais accès. La valeur doit être un objet JSON.
uristrobligatoireL'URI de la ressource.
namestr | NoneNoneLe nom de la ressource.
titlestr | NoneNoneUn nom destiné à l'affichage.
descriptionstr | NoneNoneLa description de la ressource.
media_typestr | NoneNoneLe type de média de la ressource.
sizeint | NoneNoneLa taille de la ressource, en octets.
AttributTypeDescription
typeLiteral['resource_link']Toujours "resource_link".
EmbeddedResourceContentBlock

EmbeddedResourceContentBlock

class EmbeddedResourceContentBlock(
    *,
    annotations: ContentAnnotations | None = None,
    meta: dict[str, JsonValue] | None = None,
    uri: str,
    media_type: str | None = None,
    text: str | None = None,
    blob: str | None = None,
)

Une ressource, par exemple un fichier, dont le contenu est inclus dans le bloc sous forme de texte ou de données encodées en base64.

ParamètreTypeValeur par défautDescription
annotationsContentAnnotations | NoneNoneLe public auquel le bloc est destiné et son importance, sous forme d'annotations MCP.
metadict[str, JsonValue] | NoneNoneMétadonnées destinées à votre client, dans le champ MCP _meta. Le modèle n'y a jamais accès. La valeur doit être un objet JSON.
uristrobligatoireL'URI de la ressource.
media_typestr | NoneNoneLe type de média de la ressource.
textstr | NoneNoneLe texte de la ressource. Renseignez un seul des deux champs text et blob.
blobstr | NoneNoneLes données de la ressource, encodées en base64. Renseignez un seul des deux champs text et blob.
AttributTypeDescription
typeLiteral['embedded_resource']Toujours "embedded_resource".
UnknownContentBlock

UnknownContentBlock

class UnknownContentBlock(*, original_type: str)

Un bloc de contenu dont le type a été ajouté après votre version du SDK. Son champ type vaut unknown, ce qui permet à un match sur type de continuer à fonctionner pour les blocs connus ; original_type indique son type d'origine, et ses autres champs sont conservés tels qu'ils ont été reçus. L'entrée d'un tour ne peut pas contenir ce type de bloc.

ParamètreTypeValeur par défautDescription
original_typestrobligatoireLe type du bloc tel qu'il a été reçu.
AttributTypeDescription
typeLiteral['unknown']Toujours "unknown".
ContentAnnotations

ContentAnnotations

class ContentAnnotations(
    *,
    audience: list[Literal['user', 'assistant'] | str] | None = None,
    priority: float | None = None,
    last_modified: str | None = None,
)

Annotations MCP d'un bloc : le public auquel il est destiné et son importance.

Un bloc de résultat d'outil dont le public exclut "assistant" n'est jamais envoyé au modèle ; un client peut masquer un bloc dont le public exclut "user". priority doit être compris entre 0 et 1.

ParamètreTypeValeur par défautDescription
audiencelist[Literal['user', 'assistant'] | str] | NoneNoneLe public auquel le bloc est destiné : "user", "assistant" ou les deux. None désigne les deux.
priorityfloat | NoneNoneL'importance du bloc. La valeur doit être comprise entre 0 et 1.
last_modifiedstr | NoneNoneLa date de dernière modification du contenu du bloc, sous forme d'horodatage ISO 8601.