Briques de base

Quand votre workflow gère déjà lui-même le fan-out, par exemple avec une orchestration personnalisée de workflows enfants, appelez vous-même les étapes de evaluation.run(). Vous gardez un contrôle total sur l'exécution et vous obtenez toujours les résultats dans Studio.

Les briques de base correspondent à ce que evaluation.run() fait en interne :

setup()  →  upload_inputs()  →  [your fan-out]  →  score()  →  upload()

evaluation.run() télécharge chaque enregistrement depuis son propre workflow enfant. Avec les briques de base, c'est vous qui gérez le fan-out, donc vous choisissez le nombre d'enregistrements envoyés par chaque appel à upload().

Exemple

Exemple

from mistralai.workflows.plugins.evaluations import evaluation
from mistralai.workflows.plugins.evaluations.types import (
    Evaluation, Evaluator, Project, Score, ScorerContext, System,
)

@evaluation.scorer
async def conciseness(ctx: ScorerContext) -> Score:
    ratio = len(str(ctx.output)) / max(len(ctx.input_record["text"]), 1)
    return Score(value=round(1.0 - ratio, 2))

evaluators = [Evaluator(name="conciseness", scorer=conciseness)]

# 1. Create the run in Studio
setup = await evaluation.setup(
    evaluator_names=["conciseness"],
    project=Project(name="Summarization"),
    evaluation=Evaluation(name="Summary quality"),
    system=System(name="small", params={"model": "mistral-small-latest"}),
)

# 2. Upload the input records
input_ids = await evaluation.upload_inputs(run_id=setup["run_id"], dataset=dataset)

# 3. Produce the outputs with your own fan-out
outputs = await my_custom_fan_out(dataset)

# 4. Score the outputs
scores = await evaluation.score(dataset=dataset, outputs=outputs, evaluators=evaluators)

# 5. Upload the outputs and scores
await evaluation.upload(
    run_id=setup["run_id"],
    evaluator_name_to_id=setup["evaluator_name_to_id"],
    input_record_ids=input_ids,
    outputs=outputs,
    scores=scores,
)
evaluation.setup()

evaluation.setup()

Crée l'exécution dans Studio. Renvoie un dict avec run_id, run_url, evaluator_name_to_id et run_evaluator_name_to_id.

ParamètreTypeValeur par défautDescription
evaluator_nameslist[str]requisNoms des évaluateurs
run_evaluator_nameslist[str] | NoneNoneNoms des évaluateurs d'exécution
projectProject | NoneNoneProjet à créer ou auquel se rattacher
evaluationEvaluation | NoneNoneÉvaluation à créer ou à laquelle se rattacher
namestr | NoneNoneNom de l'exécution
descriptionstr | NoneNoneDescription de l'exécution
tagslist[str] | NoneNoneÉtiquettes pour le filtrage dans Studio
metadatadict[str, Any] | NoneNoneMétadonnées associées à l'exécution
systemSystem | NoneNoneConfiguration système enregistrée sur l'exécution
num_generationsint1Générations par enregistrement, jusqu'à 100. Chaque enregistrement téléchargé doit contenir ce nombre de générations, sinon Studio le considère comme incomplet.
evaluation.upload_inputs()

evaluation.upload_inputs()

Télécharge les enregistrements d'entrée. Renvoie la liste des identifiants des enregistrements d'entrée.

ParamètreTypeDescription
run_idstrIdentifiant d'exécution renvoyé par setup()
datasetSequence[Mapping[str, Any]]Les enregistrements d'entrée
evaluation.score()

evaluation.score()

Évalue les sorties, une par enregistrement. Renvoie une liste de dicts de scores, un par enregistrement. Chaque scorer doit être décoré avec @evaluation.scorer.

ParamètreTypeDescription
datasetSequence[Mapping[str, Any]]Les enregistrements d'entrée
outputslist[Any]Les sorties de la tâche, une par enregistrement
evaluatorslist[Evaluator]Les évaluateurs à exécuter
evaluation.upload()

evaluation.upload()

Télécharge les sorties et les scores dans Studio.

ParamètreTypeDescription
run_idstrIdentifiant d'exécution renvoyé par setup()
evaluator_name_to_iddict[str, str]Mapping renvoyé par setup()
input_record_idslist[str]Identifiants renvoyés par upload_inputs()
outputslist[Any] | NoneSorties de la tâche, une par enregistrement. À utiliser pour les exécutions à génération unique.
scoreslist[dict] | NoneDicts de scores issus de score(). À utiliser avec outputs.
generationslist[list[dict]] | NonePour les exécutions multi-générations : pour chaque enregistrement, une liste de générations, chacune étant un dict avec output, scores (nom de l'évaluateur vers dict de score) et un error facultatif.