From 9a9b143620ab07ffb535f5f6770bc2a369cc0e22 Mon Sep 17 00:00:00 2001 From: Xingyao Wang Date: Wed, 30 Apr 2025 00:04:11 +0800 Subject: [PATCH] nit: improve error message when action is not executed (#7029) Co-authored-by: Robert Brennan Co-authored-by: openhands --- frontend/src/i18n/translation.json | 15 +++++++++++++++ openhands/controller/agent_controller.py | 7 ++++++- tests/unit/test_agent_controller.py | 5 ++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/frontend/src/i18n/translation.json b/frontend/src/i18n/translation.json index 06faa41eca..0550bde3c8 100644 --- a/frontend/src/i18n/translation.json +++ b/frontend/src/i18n/translation.json @@ -6559,6 +6559,21 @@ "tr": "belgelendirme", "de": "Dokumentation" }, + "AGENT_ERROR$ERROR_ACTION_NOT_EXECUTED": { + "en": "The action has not been executed. This may have occurred because the user pressed the stop button, or because the runtime system crashed and restarted due to resource constraints. Any previously established system state, dependencies, or environment variables may have been lost.", + "ja": "アクションは実行されていません。これはユーザーが停止ボタンを押したか、リソース制約によりランタイムシステムがクラッシュして再起動したことが原因かもしれません。以前に確立されたシステム状態、依存関係、または環境変数は失われている可能性があります。", + "zh-CN": "该操作尚未执行。这可能是因为用户按下了停止按钮,或者因为运行时系统由于资源限制而崩溃并重新启动。任何先前建立的系统状态、依赖项或环境变量可能已丢失。", + "zh-TW": "該操作尚未執行。這可能是因為用戶按下了停止按鈕,或者因為運行時系統由於資源限制而崩潰並重新啟動。任何先前建立的系統狀態、依賴項或環境變數可能已丟失。", + "ko-KR": "작업이 실행되지 않았습니다. 이는 사용자가 중지 버튼을 눌렀거나 리소스 제약으로 인해 런타임 시스템이 충돌하고 재시작되었기 때문일 수 있습니다. 이전에 설정된 시스템 상태, 종속성 또는 환경 변수가 손실되었을 수 있습니다.", + "no": "Handlingen har ikke blitt utført. Dette kan ha skjedd fordi brukeren trykket på stoppknappen, eller fordi kjøretidssystemet krasjet og startet på nytt på grunn av ressursbegrensninger. Enhver tidligere etablert systemtilstand, avhengigheter eller miljøvariabler kan ha gått tapt.", + "it": "L'azione non è stata eseguita. Ciò potrebbe essere accaduto perché l'utente ha premuto il pulsante di arresto, o perché il sistema di runtime si è arrestato in modo anomalo e riavviato a causa di vincoli di risorse. Qualsiasi stato di sistema, dipendenza o variabile d'ambiente precedentemente stabilito potrebbe essere andato perso.", + "pt": "A ação não foi executada. Isso pode ter ocorrido porque o usuário pressionou o botão de parar, ou porque o sistema de tempo de execução travou e reiniciou devido a restrições de recursos. Qualquer estado do sistema, dependências ou variáveis de ambiente estabelecidos anteriormente podem ter sido perdidos.", + "es": "La acción no se ha ejecutado. Esto puede haber ocurrido porque el usuario presionó el botón de detener, o porque el sistema de tiempo de ejecución se bloqueó y reinició debido a restricciones de recursos. Cualquier estado del sistema, dependencias o variables de entorno establecidos previamente pueden haberse perdido.", + "ar": "لم يتم تنفيذ الإجراء. قد يكون هذا حدث لأن المستخدم ضغط على زر التوقف، أو لأن نظام التشغيل تعطل وأعيد تشغيله بسبب قيود الموارد. قد تكون أي حالة نظام أو تبعيات أو متغيرات بيئية تم إنشاؤها مسبقًا قد فُقدت.", + "fr": "L'action n'a pas été exécutée. Cela peut s'être produit parce que l'utilisateur a appuyé sur le bouton d'arrêt, ou parce que le système d'exécution s'est planté et a redémarré en raison de contraintes de ressources. Tout état du système, dépendances ou variables d'environnement précédemment établis peuvent avoir été perdus.", + "tr": "Eylem yürütülmedi. Bu, kullanıcının durdurma düğmesine basması veya çalışma zamanı sisteminin kaynak kısıtlamaları nedeniyle çökmesi ve yeniden başlaması nedeniyle olmuş olabilir. Daha önce kurulmuş olan herhangi bir sistem durumu, bağımlılıklar veya ortam değişkenleri kaybolmuş olabilir.", + "de": "Die Aktion wurde nicht ausgeführt. Dies kann passiert sein, weil der Benutzer die Stopp-Taste gedrückt hat oder weil das Laufzeitsystem aufgrund von Ressourcenbeschränkungen abgestürzt und neu gestartet wurde. Alle zuvor eingerichteten Systemzustände, Abhängigkeiten oder Umgebungsvariablen sind möglicherweise verloren gegangen." + }, "DIFF_VIEWER$LOADING": { "en": "Loading...", "ja": "読み込み中...", diff --git a/openhands/controller/agent_controller.py b/openhands/controller/agent_controller.py index f45762ca4e..c13c348731 100644 --- a/openhands/controller/agent_controller.py +++ b/openhands/controller/agent_controller.py @@ -76,6 +76,8 @@ from openhands.llm.metrics import Metrics, TokenUsage TRAFFIC_CONTROL_REMINDER = ( "Please click on resume button if you'd like to continue, or start a new task." ) +ERROR_ACTION_NOT_EXECUTED_ID = 'AGENT_ERROR$ERROR_ACTION_NOT_EXECUTED' +ERROR_ACTION_NOT_EXECUTED = 'The action has not been executed. This may have occurred because the user pressed the stop button, or because the runtime system crashed and restarted due to resource constraints. Any previously established system state, dependencies, or environment variables may have been lost.' class AgentController: @@ -566,7 +568,10 @@ class AgentController: # make a new ErrorObservation with the tool call metadata if not found_observation: - obs = ErrorObservation(content='The action has not been executed.') + obs = ErrorObservation( + content=ERROR_ACTION_NOT_EXECUTED, + error_id=ERROR_ACTION_NOT_EXECUTED_ID, + ) obs.tool_call_metadata = self._pending_action.tool_call_metadata obs._cause = self._pending_action.id # type: ignore[attr-defined] self.event_stream.add_event(obs, EventSource.AGENT) diff --git a/tests/unit/test_agent_controller.py b/tests/unit/test_agent_controller.py index 193e45ff39..7c2b7bfb81 100644 --- a/tests/unit/test_agent_controller.py +++ b/tests/unit/test_agent_controller.py @@ -503,7 +503,10 @@ async def test_reset_with_pending_action_no_observation(mock_agent, mock_event_s args, kwargs = mock_event_stream.add_event.call_args error_obs, source = args assert isinstance(error_obs, ErrorObservation) - assert error_obs.content == 'The action has not been executed.' + assert ( + error_obs.content + == 'The action has not been executed. This may have occurred because the user pressed the stop button, or because the runtime system crashed and restarted due to resource constraints. Any previously established system state, dependencies, or environment variables may have been lost.' + ) assert error_obs.tool_call_metadata == pending_action.tool_call_metadata assert error_obs._cause == pending_action.id assert source == EventSource.AGENT