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

   ### Search before asking
   
   - [x] I searched in the 
[issues](https://github.com/apache/flink-agents/issues) and found nothing 
similar.
   
   ### Description
   
   Found during YAML doc verification (#742).
   
   `docs/content/docs/development/yaml.md` line 137 documents `parameter_types`
   as "java only" and **Forbidden** for Python tools:
   
   | Field | Required | Description |
   |-------|----------|-------------|
   | `parameter_types` | java only | Required for Java tools — one Java type 
FQN per declared parameter, in order. **Forbidden for Python tools** (the 
signature is reflected from the callable). |
   
   The Python loader does not enforce the prohibition. In
   `python/flink_agents/api/yaml/loader.py:178-188`:
   
   ```python
   def _build_tool(spec: ToolSpec) -> FunctionTool:
       if spec.type == "java" and spec.parameter_types is None:
           msg = f"Tool {spec.name!r}: java tools must declare 
'parameter_types' in YAML."
           raise ValueError(msg)
       func = resolve_function(
           name=spec.name,
           function=spec.function,
           language=spec.type,
           parameter_types=spec.parameter_types,
       )
       return FunctionTool(func=func)
   ```
   
   Only the missing-on-Java direction is checked. When `type` is `python` (or
   unset) and `parameter_types` is set, the value passes through to
   `resolve_function`, which discards it in the Python branch:
   
   ```python
   return PythonFunction(module=left, qualname=right)   # parameter_types not 
used
   ```
   
   `ActionSpec` handles the analogous case correctly by not declaring
   `parameter_types` at all (combined with `extra="forbid"`), and
   `test_action_spec_rejects_parameter_types` verifies that. `ToolSpec` declares
   the field, so the same approach does not work without a custom validator.
   
   ### How to reproduce
   
   ```yaml
   agents:
     - name: a
       tools:
         - name: my_py_tool
           type: python
           function: my_pkg.tools:add
           parameter_types: [java.lang.Integer, java.lang.Integer]   # doc: 
"Forbidden"
       actions:
         - name: act
           function: my_pkg.actions:process_input
           listen_to: [input]
   ```
   
   ```python
   env = AgentsExecutionEnvironment.get_execution_environment()
   env.load_yaml("repro.yaml")   # succeeds; parameter_types silently dropped
   ```
   
   ### Fix
   
   Either (preferred — matches the doc):
   
   ```python
   def _build_tool(spec: ToolSpec) -> FunctionTool:
       if spec.type == "java" and spec.parameter_types is None:
           raise ValueError(...)
       if spec.type != "java" and spec.parameter_types is not None:
           raise ValueError(
               f"Tool {spec.name!r}: 'parameter_types' is only valid for Java 
tools."
           )
       ...
   ```
   
   Or relax the doc to "Ignored for Python tools" instead of "Forbidden".
   
   ### Version and environment
   
   Flink Agents 0.3.0 (`main`). Python loader only; Java loader unverified.
   
   ### Are you willing to submit a PR?
   
   - [ ] 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