Les commandes et le code restent en anglais dans toutes les langues. Remplacez les espaces réservés en majuscules par les valeurs de votre compte et de votre tâche payante ; ne collez pas de vraies clés dans des carnets ou des journaux partagés.
Une API de projet, un seul moteur sous-jacent
- from_file Charger sans modifier les poids
- plan Examiner les entrées résolues
- run / controls Gérer les processus et la reprise
- evaluate / export Examiner les sorties locales acceptées
from_file: Charger sans modifier les poids. plan: Examiner les entrées résolues. run / controls: Gérer les processus et la reprise. evaluate / export: Examiner les sorties locales acceptées
Utiliser le même moteur depuis Python
TrainingProject complète TrainingClient sans le remplacer. Chargez une configuration et une clé API limitée au périmètre voulu, examinez le plan, puis démarrez l’exécution. L’objet projet expose son exécution pour inspection et contrôle ; run refuse d’écraser une exécution existante, tandis que resume exige un état de reprise valide.
- Les chemins acceptent des chaînes ou des objets os.PathLike. Les options des méthodes sont nommées uniquement et les arguments inconnus sont rejetés.
- from_file valide la configuration locale ; il ne met pas à jour les poids et ne lance pas de requêtes au modèle de référence.
- Les interfaces Python et CLI résolvent les mêmes paramètres, empreintes, budgets et sorties.
| Champ ou interface | Type ou résultat | Valeur par défaut ou code de sortie | Comportement et validation |
|---|---|---|---|
TrainingProject.from_file(path, *, api_key) |
TrainingProject |
Obligatoire / sans valeur par défaut | Charge et valide le chemin de configuration et une chaîne secrète non vide. Renvoie un objet projet ; ne modifie pas les poids et ne contacte pas le modèle de référence. |
plan(*, dry_run=True) |
dict |
true |
True uniquement. Renvoie resolved_configuration, compatibility, data_sharing, budgets, topics, artifacts et fingerprints. |
run() |
dict |
Obligatoire / sans valeur par défaut | Bloque jusqu’à l’état final ou la mise en pause ; ne renvoie le résultat commun de l’exécution qu’en cas de réussite, sinon déclenche l’erreur correspondante. |
status() |
dict |
Obligatoire / sans valeur par défaut | Lit run_id, status, stop_reason, report_path et unmet_criteria sans démarrer de processus. |
pause() |
dict |
Obligatoire / sans valeur par défaut | Attend l’accusé de réception du processus et un point de contrôle valide ; renvoie le résultat commun de l’exécution. Un état invalide est une erreur de configuration. |
resume() |
dict |
Obligatoire / sans valeur par défaut | Valide toutes les empreintes et reprend les processus de l’exécution ; renvoie le résultat commun lorsque l’opération réussit. |
cancel() |
dict |
Obligatoire / sans valeur par défaut | Attend l’arrêt des processus de l’exécution et renvoie l’état cancelled ; déclenche CancellationError si l’arrêt sûr ne peut pas être confirmé. |
evaluate(*, split="test") |
dict |
"test" |
Accepte validation ou test. Renvoie run_id, split, accepted, criteria, regressions et report_path ; en cas d’échec de l’acceptation, déclenche EvaluationFailedError après l’enregistrement du rapport. |
export(*, format="safetensors") |
dict |
"safetensors" |
Renvoie run_id, format, artifact_path, manifest_path et sha256 pour un artefact compatible accepté. |
register_evaluator(name, scorer, *, version) |
None |
Obligatoire / sans valeur par défaut | Enregistrez une fonction de notation fiable avant la planification ou l’évaluation. Donnez-lui un nom stable et une version explicite. Elle reçoit prediction, target et row et doit renvoyer un score fini de 0 à 1. Les métriques intégrées ne peuvent pas être remplacées. |
import os
from fusionpointai_training import TrainingProject
project = TrainingProject.from_file(
"./german-project/training.json",
api_key=os.environ["FUSIONPOINTAI_API_KEY"],
)
plan = project.plan(dry_run=True)
print(plan["resolved_configuration"], plan["data_sharing"], plan["budgets"])
# Confirm the reviewed plan before starting real work.
result = project.run()
if result["status"] != "completed" or result["stop_reason"] != "accepted":
raise RuntimeError("Training was not accepted; inspect the retained report.")
evaluation = project.evaluate(split="test")
# A failed required criterion raises EvaluationFailedError after saving its report.
artifact = project.export(format="safetensors")
print(artifact["manifest_path"])
Examiner les résultats structurés
Le contrat de retour ci-dessous décrit les formes des résultats, pas des mesures d’exemple. Examinez status, stop_reason et unmet_criteria avant tout déploiement. Les résultats de l’évaluation identifient chaque critère et chaque régression. L’export renvoie des chemins locaux et des métadonnées d’intégrité ; il ne téléverse pas automatiquement le modèle et ne remplace pas l’inférence en production.
- Les données d’état et de manifeste doivent être consultables sans générer de nouvelle requête à l’enseignant.
- L’évaluation sur le jeu de test final est distincte de la validation utilisée pendant les améliorations.
- Un manifeste d’artefact doit correspondre aux fichiers réels, aux chemins relatifs sûrs, aux tailles en octets et aux valeurs SHA-256.
TrainingProject return contract (dictionary shapes)
from_file: validates configuration, attaches its owned run; no weight updates.
plan: {schema_version, resolved_configuration, compatibility, data_sharing,
budgets, topics, artifacts, fingerprints}; dry_run must be true.
run/resume: {run_id, status, stop_reason, report_path, unmet_criteria}.
status/pause/cancel: {run_id, status, stop_reason, report_path, unmet_criteria}.
stop_reason is null until terminal; run/resume block until terminal or paused.
pause blocks until owned workers acknowledge an atomic checkpoint.
cancel blocks until owned workers stop; a failed stop raises CancellationError.
evaluate: {run_id, split, accepted, criteria, regressions, report_path}.
export: {run_id, format, artifact_path, manifest_path, sha256}.
Returned paths are local, resolved paths; no model upload is implied.
Status output is redacted and may be read without opening an API connection.
from_file requires path: str | os.PathLike and a nonempty api_key: str.
plan accepts dry_run=True only; False is ConfigurationError, not execution.
evaluate accepts split="validation" or "test"; defaults to test.
export accepts safetensors or adapters when supported by the selected adapter.
All method keyword options are keyword-only. Unlisted arguments are rejected.
Gérer les erreurs sans les dissimuler
Les erreurs de projet héritent de TrainingError et correspondent aux codes de sortie CLI documentés. Les erreurs de configuration et de compatibilité surviennent avant l’entraînement. Les échecs de budget ou d’acceptation conservent leurs rapports et critères non satisfaits. Un échec lors de l’arrêt d’un processus ou de l’enregistrement d’un point de contrôle reste une erreur tant que le nettoyage n’est pas confirmé.
- Une méthode réussie renvoie le résultat documenté. Si l’objectif n’est pas atteint, l’erreur correspondante est levée après l’enregistrement du rapport.
- Ne consignez jamais de secrets, d’en-têtes d’autorisation, l’environnement complet ou des exemples d’entraînement privés.
- Ne transformez pas toutes les exceptions en nouvelles tentatives automatiques. Vérifiez d’abord l’état de l’exécution et du service.
| Champ ou interface | Type ou résultat | Valeur par défaut ou code de sortie | Comportement et validation |
|---|---|---|---|
ConfigurationError |
TrainingError |
2 |
Schéma, argument, chemin ou état invalide, ou surcharge non prise en charge. Corrigez les entrées avant de réessayer. |
CompatibilityError |
TrainingError |
3 |
Adaptateur, modèle, matériel, précision, distribution ou format non pris en charge. |
AuthenticationError |
TrainingError |
4 |
Clé manquante ou expirée, droit d’accès refusé ou partage avec l’enseignant interdit ; ne mettez jamais de secret dans le message. |
BudgetExceededError |
TrainingError |
5 |
Un budget limité a été épuisé avant l’acceptation. Conservez un point de contrôle valide et les critères non satisfaits. |
EvaluationFailedError |
TrainingError |
6 |
Critères obligatoires échoués, amélioration au point mort ou régression persistante. Conservez le rapport d’évaluation. |
CheckpointError |
TrainingError |
7 |
État de reprise invalide, incomplet ou incompatible. Ne forcez jamais la reprise. |
CancellationError |
TrainingError |
7 |
L’arrêt sûr des processus de l’exécution n’a pas pu être confirmé ; poursuivez le nettoyage. |
ExportError |
TrainingError |
7 |
Artefact non pris en charge ou invalide, chemin non sûr ou échec de somme de contrôle ; ne le livrez pas. |
TrainingError |
Exception |
7 |
Échec général de l’entraînement. Les erreurs du projet documentées héritent de cette classe ; conservez les diagnostics expurgés. |
import os
from fusionpointai_training import TrainingProject
from fusionpointai_training.errors import (
AuthenticationError, BudgetExceededError, CompatibilityError,
ConfigurationError, EvaluationFailedError, TrainingError,
)
try:
project = TrainingProject.from_file(
"./german-project/training.json",
api_key=os.environ.get("FUSIONPOINTAI_API_KEY", ""),
)
project.plan(dry_run=True)
project.run()
result = project.evaluate(split="test")
except (ConfigurationError, CompatibilityError):
print("Correct the configuration before starting a new run.")
except AuthenticationError:
print("Check access without logging the key.")
except BudgetExceededError:
print("Preserve the checkpoint. A larger approved budget requires a new plan.")
except EvaluationFailedError:
print("Preserve failed criteria; do not publish this model as accepted.")
except TrainingError:
print("Inspect redacted diagnostics; do not blindly repeat a write.")
# CancellationError, CheckpointError and ExportError also inherit TrainingError.
from fusionpointai_training import register_evaluator
def category_match(prediction, target, row):
return float(prediction.strip().casefold() == target.strip().casefold())
register_evaluator("category_match", category_match, version="1")
# Register before project.plan() in the same Python process.
# In rubric.json: "metric": "category_match", "minimum_score": 0.85
# This scorer measures category equality, not open-ended semantic correctness.