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.
|
||||
|
||||
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:
|
||||
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}")
|
||||
return data
|
||||
else:
|
||||
logger.debug(
|
||||
f"Streaming server refus (HTTP {resp.status_code}): "
|
||||
f"{resp.text[:200]}"
|
||||
# Le serveur est UP mais refuse — renvoyer l'erreur pour éviter le fallback local
|
||||
error_detail = 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:
|
||||
logger.debug("Streaming server non disponible (connexion refusée)")
|
||||
except http_requests.Timeout:
|
||||
@@ -1088,6 +1092,29 @@ def execute_workflow(match, params):
|
||||
# Tenter l'exécution via le streaming server (Agent V1 distant)
|
||||
replay_result = _try_streaming_server_replay(match.workflow_id, params)
|
||||
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
|
||||
total_actions = replay_result.get("total_actions", 1)
|
||||
target_session = replay_result.get("session_id", "?")
|
||||
@@ -1116,8 +1143,8 @@ def execute_workflow(match, params):
|
||||
)
|
||||
return
|
||||
|
||||
# Fallback : exécution locale
|
||||
logger.info("Streaming server indisponible, exécution locale")
|
||||
# Fallback : exécution locale (seulement si le streaming server est injoignable)
|
||||
logger.info("Streaming server injoignable, exécution locale")
|
||||
|
||||
execution_status["running"] = True
|
||||
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