alnzng opened a new issue, #920:
URL: https://github.com/apache/flink-agents/issues/920

   ### Search before asking
   
   - [x] I searched in the 
[issues](https://github.com/apache/flink-agents/issues) and found nothing 
similar.
   
   ### Description
   
    ### What I was testing
   
     A `ReActAgent` with both `tools` and an `output_schema` 
(`FlinkSqlJobProfile`). The schema class was importable on the driver but **not 
on the worker** (a packaging mistake on my side).
   
     ### Symptom
   
     The job failed at runtime pointing at `chat_model_action.py` with a 
misleading `AttributeError`:
   
     ```
     pemja.core.PythonException: <class 'AttributeError'>: 'list' object has no 
attribute 'model_dump'
         at 
.../flink_agents/plan/actions/chat_model_action._save_tool_request_event_context
     (chat_model_action.py:115)
         at .../flink_agents/plan/actions/chat_model_action._handle_tool_calls 
(chat_model_action.py:237)
         at .../flink_agents/plan/actions/chat_model_action.chat 
(chat_model_action.py:379)
         at 
.../flink_agents/plan/actions/chat_model_action._process_chat_request 
(chat_model_action.py:410)
         at 
.../flink_agents/plan/actions/chat_model_action.process_chat_request_or_tool_response
     (chat_model_action.py:470)
         at pemja.core.PythonInterpreter.invoke(PythonInterpreter.java:92)
         at 
org.apache.flink.agents.runtime.operator.ActionExecutionOperator.processActionTaskForKey(ActionExecutionOp
     erator.java:375)
     ```
   
     Nothing here points at the real problem.
   
     ### Actual root cause
     
     `Action.__custom_deserialize` (`plan/actions/action.py`) reconstructs 
`[module, class, value]` config values
     inside a `try/except` that **silently swallows any failure** and keeps the 
raw value:
   
     ```python
     for name, value in config.items():
         try:
             module = importlib.import_module(value[0])
             clazz = getattr(module, value[1])
             self["config"][name] = clazz.model_validate(value[2])
         except Exception:          # <-- swallows the real error
             self["config"][name] = value
     ```
   
     My `output_schema` class wasn't importable on the worker → reconstruction 
raised `ModuleNotFoundError` →
     swallowed → `output_schema` stayed a raw `list` → later 
`_save_tool_request_event_context` called `.model_dump()` on that list → the 
misleading `AttributeError` above.
   
     ### What the error *should* have looked like
   
     Making the branch fail fast instead of swallowing gave the true cause and 
location, at plan-load before any
     record was processed:
   
     ```
     pemja.core.PythonException: <class 'ModuleNotFoundError'>: No module named 
'streamingjobprofileagent'
         at <frozen importlib._bootstrap>:1360 (_find_and_load)
         at 
/export/apps/python/3.12.6/lib/python3.12/importlib/__init__.import_module 
(__init__.py:90)
         at .../flink_agents/api/agents/types.__custom_deserialize (types.py:65)
         at .../pydantic/main.model_validate (main.py:732)
         at .../flink_agents/plan/actions/action.__custom_deserialize 
(action.py:94)
         at .../flink_agents/plan/actions/action.__init__ (action.py:107)
         at 
.../flink_agents/runtime/flink_runner_context.create_flink_runner_context 
(flink_runner_context.py:773)
         at pemja.core.PythonInterpreter.invoke(PythonInterpreter.java:94)
         at 
org.apache.flink.agents.runtime.python.utils.PythonActionExecutor.open(PythonActionExecutor.java:108)
         at 
org.apache.flink.agents.runtime.operator.ActionExecutionOperator.open(ActionExecutionOperator.java:172)
     ```
   
     Real error (`ModuleNotFoundError`), real location (`action.py` / 
`types.py`), failing at operator `open()` —
     instead of a downstream `AttributeError` in an unrelated module.
   
   
   ### How to reproduce
   
    1. Define a `ReActAgent` with `tools=[...]` and `output_schema=SomeModel`, 
where `SomeModel` is importable when the plan is built (driver) but **not 
importable in the worker process**.
     2. Run the agent so the LLM issues a tool call.
     3. The worker crashes with `'list' object has no attribute 'model_dump'` 
from `chat_model_action.py`, with nothing indicating the real 
`ModuleNotFoundError` raised during config deserialization in `action.py`.
   
   
   ### Version and environment
   
   - flink-agents: 0.3.0
   - Python: 3.12
   - Flink: 2.2.x, deployed on Kubernetes
   
   
   ### Are you willing to submit a PR?
   
   - [x] I'm willing to submit a PR!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to