Skip to content

fix(asset-creator): handle ComfyUI timeouts and terminal status - #60

Draft
zedarvates wants to merge 1 commit into
mainfrom
fix/asset-creator-comfyui-wait
Draft

zedarvates wants to merge 1 commit into
mainfrom
fix/asset-creator-comfyui-wait

Conversation

@zedarvates

Copy link
Copy Markdown
Owner

Le client Asset Creator pouvait traiter des sorties partielles comme une réussite alors que ComfyUI déclarait un échec. Ses appels HTTP, sauf le contrôle de disponibilité, n'avaient pas de délai explicite ; le budget de polling ne suffisait donc pas à interrompre une requête silencieuse.

Cette PR corrige le client existant :

  • réussite uniquement avec status_str="success" et completed=true ; les erreurs restent prioritaires sur les sorties partielles ;
  • délai HTTP configurable, de 30 secondes par défaut, sur tous les appels ;
  • suivi avec horloge monotone, délais de GET et pauses limités au budget restant ;
  • ComfyUIWaitTimeout(TimeoutError) conserve prompt_id, distingue expiration du suivi et timeout HTTP, et garde la cause réseau ;
  • réponses de téléchargement fermées même en cas d'erreur ;
  • contrat, exemple de reprise et limites documentés dans COMFYUI_CLIENT.md.

La reprise concerne le client Python. Aucun service payant, modèle, nouvel orchestrateur ou nouvelle dépendance de production n'est ajouté.

Validation :

  • Deux défauts reproduits sur main@5b6c83b avec réponses simulées : retour des sorties d'un prompt en erreur et absence de timeout sur la lecture d'historique.
  • 18 tests ciblés réussis, horloge contrôlée et création de sockets interdite : statuts, sorties partielles, expiration, réduction des délais, callback, reprise sans nouvelle soumission, erreurs HTTP et fermeture des réponses.
  • Python 3.12.14, Requests 2.34.2 ; Ruff 0.16.8 et son contrôle de format passent sur les deux fichiers Python concernés ; git diff --check passe.

Commande : python -m unittest discover -s tests/asset_creator -p test_comfyui_client.py -v (avec Requests installé).

Limites :

  • Les délais Requests concernent connexion et inactivité de lecture ; ils ne garantissent pas une durée totale stricte, notamment face à une réponse lente ou un callback bloquant.
  • L'expiration arrête le suivi sans annuler la tâche. Le client n'ajoute aucune relance automatique du POST ; si sa réponse est perdue, son acceptation reste incertaine.
  • La conservation persistante de l'identifiant et la reprise dans les interfaces MCP/CLI/Blender restent à raccorder.
  • Un téléchargement interrompu peut encore laisser un fichier partiel.
  • Aucun essai réel ComfyUI/Blender/GPU ni validation des recettes Trellis2 locales dans cette PR.

Le contrat de statut a été vérifié dans ComfyUI execution.py et main.py, et les limites HTTP dans la documentation Requests.

Suite de l'audit Asset Factory / ComfyUI (#58, #59). Correction indépendante, fondée directement sur main, dont le client est identique à celui des deux PR précédentes.

@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant