Génération PAIDF Cosmos Predict
Préparez et exécutez la génération PAIDF Cosmos Predict pour les échantillons média. La compétence émet un handoff JSONL qui mappe chaque id d'entrée vers le chemin média original et le chemin vidéo générée.
Purpose
Utilisez cette compétence quand un workflow DEFT a déjà des échantillons média et a besoin de vidéos synthétiques/générées à partir de PAIDF Cosmos Predict. Cette compétence ne démarre pas le service de captioning VLM. Une URL de base compatible OpenAI atteignable pour le modèle utilisé pour légender les médias d'entrée doit être fournie à l'exécution.
Prerequisites
- Docker avec support GPU NVIDIA et
nvidia-container-toolkit. - Accès à l'image d'augmentation PAIDF déclarée par
images.metropolis_sdg.paidf_augmentationdansversions.yaml. - Un service de captioning VLM en cours d'exécution avec une URL de base d'API compatible OpenAI. L'URL de base doit être fournie par l'utilisateur ou le workflow en amont à l'exécution ; réutilisez cette URL de base exacte pour chaque argument
--vlm-captioning-endpoint. N'incluez pas/modelsdansVLM_CAPTIONING_ENDPOINT. HF_TOKENdans l'environnement d'exécution quand les téléchargements du modèle Cosmos nécessitent un accès HuggingFace — exporté, ou dans un fichier env approuvé par l'utilisateur (lignesKEY=valuesimples) que le bloc d'exécution charge.VLM_API_KEYdans l'environnement d'exécution de la même manière quand le point de terminaison du captioning VLM nécessite une authentification.- Les chemins média d'entrée qui sont des chemins absolus sur l'hôte sous le répertoire média requis. Passez le répertoire média hôte avec
--media-dir; la compétence le monte dans le conteneur PAIDF exactement au même chemin.
Inputs
| Input | Required | Notes |
|---|---|---|
| Input JSONL | Yes | Chemin vers le JSONL média générique. L'utilisateur ou le workflow en amont doit le fournir. Chaque ligne doit inclure les champs string id et media_path ; les valeurs id doivent être uniques. |
| Output directory | Yes | Répertoire hôte pour la config PAIDF préparée, vidéos générées, légendes, métadonnées, logs et handoff final. L'utilisateur ou le workflow en amont doit le fournir. |
| VLM captioning endpoint base URL | Yes | L'utilisateur ou le workflow en amont doit fournir cette URL de base compatible OpenAI, par exemple une URL se terminant par /v1. N'incluez pas /models. Passez la même URL de base exacte à verify_vlm_captioning_base_url.py avant toute autre étape et à prepare_paidf_config.py lors de l'écriture de config.yaml. |
| Generation settings | No | Si l'utilisateur fournit un JSON de paramètres de génération, utilisez-le. Sinon, définissez GENERATION_SETTINGS sur skills/data/paidf-cosmos-predict/assets/default_generation_settings.json. Toujours passer le chemin résolu à prepare_paidf_config.py avec --generation-settings. |
| PAIDF GPU count | Yes | Nombre de GPUs pour l'augmentation PAIDF. Passez-le à prepare_paidf_config.py avec --paidf-num-gpus N et à Docker avec --gpus "$PAIDF_NUM_GPUS". |
| Media directory | Yes | Répertoire hôte contenant les médias d'entrée référencés par media_path. Passez-le en tant que --media-dir /path/to/media_dir à prepare_paidf_config.py et montez-le dans Docker 1:1. |
| VLM captioning prompt | Yes | Fichier de texte prompt pour le captioning VLM. Passez-le à prepare_paidf_config.py avec --caption-prompt-file ; le script intègre le prompt dans config.yaml. |
HF_TOKEN |
Yes for Cosmos model downloads | L'agent vérifie que HF_TOKEN est déjà défini dans l'environnement d'exécution, qu'il soit exporté ou chargé à partir d'un fichier env approuvé par l'utilisateur, et le transfère à Docker avec -e HF_TOKEN. |
VLM_API_KEY |
Yes when the VLM captioning endpoint requires authentication | L'agent avertit quand VLM_API_KEY n'est pas défini, puis le transfère à Docker avec -e VLM_API_KEY quand présent. Si le point de terminaison ne nécessite pas d'authentification, PAIDF peut s'exécuter sans lui. |
Forme de ligne input JSONL :
{"id": "stable-sample-id", "media_path": "/abs/input.mp4"}
Le JSONL d'entrée peut contenir des valeurs media_path dupliquées, mais chaque id doit être unique. Cela permet à un workflow en amont d'attacher plusieurs échantillons logiques à la même vidéo source tout en évitant la génération PAIDF répétée pour cette vidéo.
Exemple :
{"id": "sample-a-question-1", "media_path": "/abs/video_a.mp4"}
{"id": "sample-a-question-2", "media_path": "/abs/video_a.mp4"}
{"id": "sample-b-question-1", "media_path": "/abs/video_b.mp4"}
prepare_paidf_config.py convertit les valeurs media_path en chemins absolus et les déduplique avant d'écrire config.yaml, afin que chaque vidéo unique n'apparaisse qu'une seule fois dans PAIDF data[] et passe par le captioning/génération une seule fois. write_paidf_handoff.py étend ensuite jusqu'au niveau de ligne d'entrée afin que chaque id original apparaisse dans generated_videos.jsonl ou failed_videos.jsonl, avec les lignes média dupliquées pointant vers le même chemin vidéo généré ou attendu.
Runtime Image
L'image d'augmentation PAIDF est résolue à partir de images.metropolis_sdg.paidf_augmentation dans versions.yaml ; les utilisateurs n'ont pas besoin de la fournir pour le workflow standard.
Agent Run Procedure
Avant d'exécuter, déterminez ces valeurs d'exécution à partir de la demande de l'utilisateur ou de la sortie du workflow en amont :
INPUT_JSONL: chemin vers le JSONL média.OUTPUT_DIR: chemin vers le répertoire de sortie PAIDF.VLM_CAPTIONING_ENDPOINT: URL de base compatible OpenAI du captioning VLM fournie par l'utilisateur. N'incluez pas/models.GENERATION_SETTINGS: JSON de paramètres de génération fourni par l'utilisateur, ouskills/data/paidf-cosmos-predict/assets/default_generation_settings.jsonquand l'utilisateur n'en a pas fourni.PAIDF_NUM_GPUS: nombre de GPU PAIDF.MEDIA_DIR: répertoire média à monter 1:1 dans Docker.CAPTION_PROMPT_FILE: fichier prompt de captioning VLM.
Si des valeurs requises manquent, demandez-les à l'utilisateur avant de lancer PAIDF.
Définissez les valeurs d'exécution :
INPUT_JSONL="<user-provided-input-jsonl>"
OUTPUT_DIR="<user-provided-output-dir>"
VLM_CAPTIONING_ENDPOINT="<user-provided-vlm-captioning-base-url>"
GENERATION_SETTINGS="skills/data/paidf-cosmos-predict/assets/default_generation_settings.json"
PAIDF_NUM_GPUS="<user-provided-paidf-gpu-count>"
MEDIA_DIR="<user-provided-media-dir>"
CAPTION_PROMPT_FILE="<user-provided-caption-prompt-file>"
Si l'utilisateur fournit un JSON de paramètres de génération, remplacez GENERATION_SETTINGS par ce chemin.
Vérifiez l'URL de base du captioning VLM avant de préparer les entrées PAIDF. Cela envoie une demande de preflight à <VLM_CAPTIONING_ENDPOINT>/models uniquement pour vérifier que l'URL de base est atteignable et compatible OpenAI. PAIDF reçoit toujours VLM_CAPTIONING_ENDPOINT lui-même dans config.yaml, pas l'URL /models dérivée.
python skills/data/paidf-cosmos-predict/scripts/verify_vlm_captioning_base_url.py \
--vlm-captioning-endpoint "$VLM_CAPTIONING_ENDPOINT"
Si cela échoue, arrêtez le workflow PAIDF et émettez une erreur indiquant que l'URL de base fournie par l'utilisateur n'a pas réussi la vérification de preflight OpenAI-compatible /models.
Préparez le répertoire de sortie PAIDF :
python skills/data/paidf-cosmos-predict/scripts/prepare_paidf_config.py \
--input-jsonl "$INPUT_JSONL" \
--output-dir "$OUTPUT_DIR" \
--vlm-captioning-endpoint "$VLM_CAPTIONING_ENDPOINT" \
--media-dir "$MEDIA_DIR" \
--generation-settings "$GENERATION_SETTINGS" \
--paidf-num-gpus "$PAIDF_NUM_GPUS" \
--caption-prompt-file "$CAPTION_PROMPT_FILE"
prepare_paidf_config.py effectue un preflight de capacité d'écriture, écrit config.yaml, écrit path_map.jsonl, écrit run_metadata.json, et crée des répertoires de sortie accessibles en écriture par le conteneur. Si un répertoire monté existant ou un fichier n'est pas accessible en écriture par l'agent, il échoue tôt avec une commande de correction de permissions.
La config générée utilise le captioning VLM uniquement plus la génération text-to-world de Cosmos Predict. L'étape d'augmentation de prompt LLM séparé de PAIDF est désactivée par omission : captioning.llm n'est pas présent. prepare_paidf_config.py intègre CAPTION_PROMPT_FILE dans captioning.vlm.user_prompt.
Fichiers helper préparés :
path_map.jsonlmappe chaquemedia_pathabsolue d'entrée unique au chemin vidéo généré, chemin de légende et chemin de métadonnées déterministes.write_paidf_handoff.pyl'utilise pour produire une ligne de handoff générée ou échouée par ligne d'entrée.run_metadata.jsonenregistre le point de terminaison du captioning VLM, le modèle de captioning et le nombre de GPU PAIDF utilisés quandconfig.yamla été préparé. C'est à titre informatif uniquement.
Exécutez PAIDF :
set -a; source /path/to/.env; set +a # omit if already exported
[ -n "${HF_TOKEN:-}" ] || {
echo "MISSING: HF_TOKEN is not set. Export it, or point the loader above at a user-approved env file."
exit 1
}
if [ -z "${VLM_API_KEY:-}" ]; then
echo "WARNING: VLM_API_KEY is not set. Continue only if the VLM captioning endpoint does not require authentication."
fi
PAIDF_IMAGE="$(scripts/resolve_versions_key.py images.metropolis_sdg.paidf_augmentation)"
set -o pipefail
docker run --rm \
--gpus "$PAIDF_NUM_GPUS" \
--shm-size=8g \
--network host \
-e HF_TOKEN \
-e VLM_API_KEY \
-v "$MEDIA_DIR:$MEDIA_DIR:ro" \
-v "$OUTPUT_DIR:$OUTPUT_DIR" \
"$PAIDF_IMAGE" \
--config "$OUTPUT_DIR/config.yaml" \
2>&1 | tee "$OUTPUT_DIR/paidf_docker.log"
La commande Docker résout l'image PAIDF depuis versions.yaml, monte MEDIA_DIR 1:1 en lecture seule, monte OUTPUT_DIR 1:1 accessible en écriture, transfère HF_TOKEN et VLM_API_KEY, et conserve une copie de Docker stdout/stderr dans $OUTPUT_DIR/paidf_docker.log via tee. set -o pipefail préserve le statut de sortie Docker lors de l'utilisation de tee.
Créez le handoff après que PAIDF ait écrit les vidéos générées :
python skills/data/paidf-cosmos-predict/scripts/write_paidf_handoff.py \
--input-jsonl "$INPUT_JSONL" \
--path-map "${OUTPUT_DIR}/path_map.jsonl" \
--generated-jsonl "${OUTPUT_DIR}/generated_videos.jsonl" \
--failed-jsonl "${OUTPUT_DIR}/failed_videos.jsonl"
Workflow
- Vérifiez l'URL de base du captioning VLM fournie par l'utilisateur avec
verify_vlm_captioning_base_url.py. Si cela échoue, arrêtez et rapportez l'erreur de preflight OpenAI-compatible/models. - Exécutez
prepare_paidf_config.pysur le JSONL média d'entrée en utilisant ce même point de terminaison. Il lit les valeurs de captioning VLM et de génération PAIDF à partir des paramètres de génération, fait un preflight d'accès en écriture, écrit la config PAIDF et la path map, et déduplique la génération PAIDF à une entrée par chemin média unique. - Exécutez la commande Docker PAIDF. L'agent doit surveiller la sortie Docker, le statut de sortie Docker et les comptages de sortie générés.
- Exécutez
write_paidf_handoff.pypour produiregenerated_videos.jsonletfailed_videos.jsonl.
Long-Running Run Updates
La génération PAIDF peut s'exécuter longtemps. Pendant une exécution pilotée par agent, tenez l'utilisateur informé sans lui demander de demander le statut.
- Avant de lancer PAIDF, rapportez le répertoire de sortie, le comptage de médias uniques depuis
path_map.jsonl, le nombre de GPU PAIDF et le répertoire média. - Pendant que PAIDF s'exécute, fournissez une courte mise à jour de progression toutes les 30 minutes. Incluez le temps écoulé, le comptage de vidéos générées sous
generated/videos/, le comptage de médias uniques attendu et le dernier signal de log PAIDF utile si disponible. - Si vous utilisez un environnement d'outil où une commande Docker au premier plan bloquerait les mises à jour visibles par l'utilisateur, lancez PAIDF d'une manière monitorable, puis interrogez l'état/logs Docker et comptages de sortie du système de fichiers entre les mises à jour.
- À la fin, rapportez si le conteneur s'est fermé avec succès, le comptage de vidéos générées, le comptage de sorties manquantes le cas échéant, et les chemins
generated_videos.jsonletfailed_videos.jsonlaprès avoir exécutéwrite_paidf_handoff.py. - En cas d'échec, rapportez le code de sortie du conteneur, la sortie Docker pertinente et si des vidéos partiellement générées ont été produites.
Reference Files
assets/default_generation_settings.json est le fichier de paramètres de captioning VLM et de génération Cosmos Predict par défaut. Si l'utilisateur fournit un JSON de paramètres de génération différent, définissez GENERATION_SETTINGS sur ce chemin ; sinon, définissez-le sur le chemin de fichier asset par défaut. Toujours passer le chemin résolu avec --generation-settings. Utilisez assets/paidf_config_template.yaml uniquement comme référence lisible pour la config PAIDF générée.
Deterministic Mapping
Le helper convertit chaque media_path en chemin absolu, le hache avec SHA-256 et utilise les 16 premiers caractères hexadécimaux comme id d'échantillon.
Pour chaque chemin média unique :
generated video: <output_dir>/generated/videos/<hash16>.mp4
caption: <output_dir>/captions/<hash16>.txt
metadata: <output_dir>/generated/metadata/<hash16>.json
Les chemins média d'entrée dupliqués partagent un chemin généré. Le handoff écrit toujours une ligne par ligne d'entrée, afin que plusieurs ids d'entrée uniques puissent pointer vers la même vidéo générée.
Outputs
| Output | Producer | Notes |
|---|---|---|
config.yaml |
prepare_paidf_config.py |
Config PAIDF avec une entrée par chemin média absolu unique. |
path_map.jsonl |
prepare_paidf_config.py |
Fichier helper interne mappant chaque chemin média absolu unique à ses chemins vidéo générée, légende et métadonnées attendus. write_paidf_handoff.py utilise ce fichier pour émettre une ligne générée ou échouée par ligne d'entrée JSONL. Les chemins hôte/conteneur sont identiques. |
run_metadata.json |
prepare_paidf_config.py |
Fichier provenance interne enregistrant le point de terminaison du captioning VLM/modèle et le nombre de GPU PAIDF utilisés pour préparer la config. |
paidf_docker.log |
Docker command | Docker stdout/stderr capturés avec tee lors de la génération PAIDF. |
generated/videos/*.mp4 |
PAIDF | Une vidéo générée par chemin média absolu unique. |
generated_videos.jsonl |
write_paidf_handoff.py |
JSONL pour les sorties PAIDF réussies ; une ligne par ligne d'entrée dont la vidéo générée existe. |
failed_videos.jsonl |
write_paidf_handoff.py |
JSONL d'audit pour les vidéos générées manquantes ; une ligne par ligne d'entrée dont la vidéo générée attendue est absente. |
Chaque ligne generated_videos.jsonl a exactement :
{"id": "stable-sample-id", "original_media_path": "/abs/input.mp4", "generated_video_path": "/abs/generated.mp4"}
Chaque ligne failed_videos.jsonl a exactement :
{"id": "stable-sample-id", "original_media_path": "/abs/input.mp4", "expected_generated_video_path": "/abs/generated.mp4", "error": "missing_generated_video"}
Troubleshooting
| Symptom | Likely Cause | Agent Response |
|---|---|---|
| VLM captioning base URL preflight fails | Le service de captioning n'est pas en cours d'exécution, l'URL de base est incorrecte, /v1 manque, la probe OpenAI-compatible /models n'est pas disponible, ou le service n'est pas atteignable depuis l'hôte agent |
Rapportez l'URL de base, l'URL de probe /models dérivée et le détail de l'erreur. L'agent n'a pas assez de contexte pour démarrer ou réparer le service ; demandez à l'utilisateur s'il faut fournir une URL de base différente, démarrer le service en externe ou arrêter l'exécution. |
| PAIDF fails after launch | Le conteneur PAIDF s'est fermé avec un code de sortie non-zéro | Rapportez le statut de sortie, la sortie Docker pertinente et le comptage de vidéos générées sous <output_dir>/generated/videos/ par rapport au comptage de médias uniques attendu depuis path_map.jsonl. Puis demandez à l'utilisateur comment procéder avant de réessayer, supprimer les sorties, changer les paramètres ou continuer avec les résultats partiels. |
| Cosmos checkpoint download fails | HF_TOKEN n'est pas défini, expiré ou n'a pas accès au repo Cosmos protégé |
Rapportez l'erreur d'authentification/téléchargement. Suggérez que l'utilisateur accepte la licence du modèle si nécessaire et mette HF_TOKEN à disposition avant de réessayer, en l'exportant ou en l'ajoutant à un fichier env approuvé par l'utilisateur que l'exécution charge. Ne demandez pas à l'utilisateur de coller le token dans le chat ; ne créez jamais la valeur du token vous-même et ne l'imprimez jamais. |
| VLM captioning returns authentication errors | VLM_API_KEY n'est pas défini, expiré ou non autorisé pour le point de terminaison du captioning VLM fourni |
Rapportez l'erreur d'authentification depuis paidf_docker.log. Demandez à l'utilisateur d'exporter VLM_API_KEY ou de l'ajouter à un fichier env approuvé par l'utilisateur que l'exécution charge avant de réessayer. Après que l'utilisateur dise de procéder, double-vérifiez que VLM_API_KEY est défini avant de lancer PAIDF à nouveau. Ne demandez pas à l'utilisateur de coller la clé dans le chat ; ne créez jamais la valeur de la clé vous-même et ne l'imprimez jamais. |
| User has not provided PAIDF GPU count | La compétence ne peut pas déduire le nombre correct de GPU PAIDF uniquement à partir du matériel car l'allocation souhaitée dépend du plan d'exécution et des ressources partagées | Demandez à l'utilisateur PAIDF_NUM_GPUS avant la préparation/exécution. Ne devinez pas. |
| PAIDF appears to use the wrong GPU count | PAIDF_NUM_GPUS a été défini incorrectement pour l'exécution |
Rapportez la valeur utilisée pour --paidf-num-gpus et Docker --gpus. Demandez à l'utilisateur le nombre correct de GPU ; s'il le fournit, réexécutez prepare_paidf_config.py puis la commande Docker avec la même valeur corrigée. |
prepare_paidf_config.py fails with file is not writable |
Une exécution Docker précédente ou une configuration manuelle a laissé des fichiers propriétaires root ou en lecture seule sous output_dir |
Rapportez le chemin exact et l'erreur de permission. Si le script a imprimé une commande chown/chmod, demandez à l'utilisateur avant de l'exécuter car elle change la propriété/les permissions des fichiers. |
| PAIDF cannot write outputs | output_dir n'est pas accessible en écriture par le conteneur, ou le conteneur écrit en dehors des répertoires de sortie préparés |
Rapportez le chemin de sortie défaillant depuis la sortie Docker quand disponible et la propriété/permissions actuelles de OUTPUT_DIR. Demandez à l'utilisateur s'il faut corriger les permissions, choisir un répertoire de sortie différent ou arrêter. |
| PAIDF cannot read input media | Une ou plusieurs valeurs media_path se trouvent en dehors de MEDIA_DIR, manquent sur l'hôte ou ne sont pas visibles dans Docker via le montage 1:1 |
Rapportez le chemin média défaillant et MEDIA_DIR. Demandez à l'utilisateur s'il faut corriger media.jsonl, fournir un répertoire média différent ou arrêter. |
failed_videos.jsonl is non-empty |
PAIDF n'a pas produit chaque .mp4 attendu |
Rapportez le comptage de lignes échouées, comptage de lignes générées, comptage de médias uniques attendu et comptage de vidéos générées. |
| Missing input field error | Une ligne d'entrée manque id ou media_path |
Rapportez le fichier d'entrée et le numéro de ligne depuis l'erreur. Demandez à l'utilisateur ou au workflow en amont de fournir un JSONL d'entrée corrigé ; ne fabriquez pas d'ids ou de chemins média. |