fix(agent-chat): ne plus fallback local quand streaming server refuse
- Distinguer serveur injoignable (fallback local OK) vs serveur UP mais
refus (pas de session Agent V1, workflow inconnu) → message d'erreur
explicite au lieu d'ouvrir un navigateur sur Linux
- _try_streaming_server_replay retourne {"error": ...} au lieu de None
quand le serveur répond avec un code d'erreur HTTP
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -987,7 +987,9 @@ def _try_streaming_server_replay(workflow_id: str, params: Dict[str, Any]) -> Op
|
|||||||
avec workflow_id et params.
|
avec workflow_id et params.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Réponse du serveur si succès, None si indisponible ou erreur.
|
dict avec le résultat si succès.
|
||||||
|
dict avec {"error": ...} si le serveur est UP mais refuse (ex: pas de session).
|
||||||
|
None si le serveur est injoignable (connexion refusée, timeout).
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
resp = http_requests.post(
|
resp = http_requests.post(
|
||||||
@@ -1004,10 +1006,12 @@ def _try_streaming_server_replay(workflow_id: str, params: Dict[str, Any]) -> Op
|
|||||||
logger.info(f"Workflow {workflow_id} envoyé au streaming server: {data}")
|
logger.info(f"Workflow {workflow_id} envoyé au streaming server: {data}")
|
||||||
return data
|
return data
|
||||||
else:
|
else:
|
||||||
logger.debug(
|
# Le serveur est UP mais refuse — renvoyer l'erreur pour éviter le fallback local
|
||||||
f"Streaming server refus (HTTP {resp.status_code}): "
|
error_detail = resp.text[:200]
|
||||||
f"{resp.text[:200]}"
|
logger.warning(
|
||||||
|
f"Streaming server refus (HTTP {resp.status_code}): {error_detail}"
|
||||||
)
|
)
|
||||||
|
return {"error": error_detail, "status_code": resp.status_code}
|
||||||
except http_requests.ConnectionError:
|
except http_requests.ConnectionError:
|
||||||
logger.debug("Streaming server non disponible (connexion refusée)")
|
logger.debug("Streaming server non disponible (connexion refusée)")
|
||||||
except http_requests.Timeout:
|
except http_requests.Timeout:
|
||||||
@@ -1088,6 +1092,29 @@ def execute_workflow(match, params):
|
|||||||
# Tenter l'exécution via le streaming server (Agent V1 distant)
|
# Tenter l'exécution via le streaming server (Agent V1 distant)
|
||||||
replay_result = _try_streaming_server_replay(match.workflow_id, params)
|
replay_result = _try_streaming_server_replay(match.workflow_id, params)
|
||||||
if replay_result:
|
if replay_result:
|
||||||
|
# Vérifier si c'est une erreur du serveur (UP mais pas de session/workflow)
|
||||||
|
if "error" in replay_result:
|
||||||
|
error_msg = replay_result["error"]
|
||||||
|
status_code = replay_result.get("status_code", 0)
|
||||||
|
if status_code == 404 and "session" in error_msg.lower():
|
||||||
|
# Pas de session Agent V1 active — NE PAS faire de fallback local
|
||||||
|
finish_execution(
|
||||||
|
match.workflow_name, False,
|
||||||
|
"Aucun Agent V1 connecté. Lancez l'agent sur le PC cible "
|
||||||
|
"et démarrez une session d'abord."
|
||||||
|
)
|
||||||
|
elif status_code == 404:
|
||||||
|
finish_execution(
|
||||||
|
match.workflow_name, False,
|
||||||
|
f"Workflow '{match.workflow_id}' non trouvé sur le serveur de streaming."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
finish_execution(
|
||||||
|
match.workflow_name, False,
|
||||||
|
f"Erreur serveur streaming : {error_msg}"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
# Le streaming server a accepté le replay
|
# Le streaming server a accepté le replay
|
||||||
total_actions = replay_result.get("total_actions", 1)
|
total_actions = replay_result.get("total_actions", 1)
|
||||||
target_session = replay_result.get("session_id", "?")
|
target_session = replay_result.get("session_id", "?")
|
||||||
@@ -1116,8 +1143,8 @@ def execute_workflow(match, params):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Fallback : exécution locale
|
# Fallback : exécution locale (seulement si le streaming server est injoignable)
|
||||||
logger.info("Streaming server indisponible, exécution locale")
|
logger.info("Streaming server injoignable, exécution locale")
|
||||||
|
|
||||||
execution_status["running"] = True
|
execution_status["running"] = True
|
||||||
execution_status["workflow"] = match.workflow_name
|
execution_status["workflow"] = match.workflow_name
|
||||||
@@ -1488,4 +1515,4 @@ if __name__ == '__main__':
|
|||||||
╚════════════════════════════════════════════════════════════╝
|
╚════════════════════════════════════════════════════════════╝
|
||||||
""")
|
""")
|
||||||
|
|
||||||
socketio.run(app, host='127.0.0.1', port=5004, debug=False, allow_unsafe_werkzeug=True)
|
socketio.run(app, host='0.0.0.0', port=5004, debug=False, allow_unsafe_werkzeug=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user