WorkflowsException

Workflows fournit une classe d’exception structurée, WorkflowsException, pour gérer les erreurs de manière cohérente dans l’ensemble des workflows et activités.

Quand l’utiliser

Quand l’utiliser

Levez une WorkflowsException pour des erreurs attendues ou structurées que les appelants (autres workflows, activités ou consommateurs de l’API) doivent pouvoir détecter et traiter : saisie invalide, violation de règles métier, modes d’échec connus d’un service externe. Les champs structurés code et status HTTP rendent ces erreurs reconnaissables dans tout le système et visibles dans les réponses API.

Pour les erreurs inattendues (un KeyError, un httpx.ConnectError, un panic dans une librairie tierce), laissez l’exception se propager. La plateforme enregistrera l’erreur dans l’historique d’exécution de l’activité ou du workflow, appliquera votre stratégie de reprise, et finira par marquer l’exécution comme échouée si toutes les tentatives sont dépassées. Envelopper toutes les exceptions dans une WorkflowsException ajoute du bruit sans apport d’information.

Présentation

Présentation

WorkflowsException fournit :

  • Des codes d’erreur structurés grâce à l’énumération ErrorCode
  • La correspondance avec le code de statut HTTP
  • La sérialisation en réponses JSON
  • Des méthodes factory pour les scénarios d’erreurs courants
Utilisation de base

Utilisation de base

import asyncio
import http
import mistralai.workflows as workflows
from mistralai.workflows.exceptions import WorkflowsException, ErrorCode
from pydantic import BaseModel


@workflows.activity()
async def validate_input(value: str) -> str:
    if not value:
        raise WorkflowsException(
            code=ErrorCode.INVALID_ARGUMENTS_ERROR,
            message="Input value cannot be empty",
            status=http.HTTPStatus.BAD_REQUEST,
        )
    return f"valid:{value}"


class Input(BaseModel):
    value: str


@workflows.workflow.define(name="exception_workflow")
class ExceptionWorkflow:
    @workflows.workflow.entrypoint
    async def run(self, params: Input) -> str:
        return await validate_input(params.value)


async def main():
    result = await workflows.execute_workflow(
        ExceptionWorkflow,
        params=Input(value="hello"),
    )
    print(result)

    try:
        await workflows.execute_workflow(
            ExceptionWorkflow,
            params=Input(value=""),
        )
    except WorkflowsException as e:
        print(f"code:    {e.code}")
        print(f"message: {e.message}")
        print(f"status:  {e.status}")
Paramètres du constructeur

Paramètres du constructeur

ParamètreTypeValeur par défautDescription
messagestrrequisMessage d’erreur lisible par un humain
statusHTTPStatusINTERNAL_SERVER_ERRORCode de statut HTTP
codeErrorCodeEXECUTION_ERRORCode d’erreur structuré
typestr"invalid_request_error"Libellé d’erreur de premier niveau reflété dans la réponse API (correspond au champ type utilisé par les autres API Mistral). Dans la plupart des cas, vous pouvez laisser la valeur par défaut.
Codes d’erreur

Codes d’erreur

L’énumération ErrorCode définit des codes d’erreur structurés regroupés par catégorie :

Erreurs générales (40xx)

Erreurs générales (40xx)

CodeDescription
execution_errorErreur générale d’exécution
platform_errorErreur liée à la plateforme
platform_service_errorErreur de service plateforme
platform_connection_errorÉchec de la connexion à la plateforme
platform_client_creation_errorÉchec de création du client plateforme
search_attributes_creation_errorÉchec de création d’attributs de recherche
Erreurs d’activité (41xx)

Erreurs d’activité (41xx)

CodeDescription
activity_definition_errorActivité définie de manière incorrecte
activity_not_found_errorActivité non trouvée
invalid_arguments_errorArguments invalides
activity_not_module_levelL’activité doit être définie au niveau du module
tool_argument_errorArgument d’outil non valide
rate_limit_errorLimite de requêtes dépassée
Erreurs de workflow (42xx)

Erreurs de workflow (42xx)

CodeDescription
workflow_definition_errorWorkflow défini de façon incorrecte
workflow_description_errorErreur de description du workflow
workflow_already_startedWorkflow déjà en cours d’exécution
workflow_not_foundWorkflow non trouvé
invalid_params_errorParamètres invalides
workflow_timeout_errorTimeout du workflow
workflow_signal_definition_errorSignal mal défini
workflow_update_definition_errorMise à jour mal définie
workflow_query_errorÉchec lors de l’interrogation du workflow
Erreurs worker (43xx)

Erreurs worker (43xx)

CodeDescription
worker_registration_errorÉchec de l’enregistrement du worker
worker_runtime_config_errorErreur de configuration du runtime worker
Erreurs agent durable (44xx)

Erreurs agent durable (44xx)

CodeDescription
agent_execution_errorErreur d’exécution de l’agent
Erreurs d’infrastructure (45xx)

Erreurs d’infrastructure (45xx)

CodeDescription
workspace_already_usedEspace de travail déjà utilisé
in_memory_cache_errorErreur de cache en mémoire
rejected_query_errorRequête rejetée
unserializable_payload_errorImpossible de sérialiser la charge utile
blob_storage_config_errorErreur de configuration du stockage d’objets