Skip to content

[Bug]: convert_tools_to_description does not parse nested parameters of tools #1074

@Edward-sy

Description

@Edward-sy

Is there an existing issue for the same bug? (If one exists, thumbs up or comment on the issue instead).

  • I have checked the existing issues.

Describe the bug and reproduction steps

Description

1.When the LLM calls the task_tracker tool to plan tasks, the entries written to the file are all “Untitled task.”

Image

2.After inspecting the OpenHands source, I found in function_calling.py that the code uses task.get('title', 'Untitled task') to get the task title. When incoming data uses the name field, title does not exist, so the default value "Untitled task" is used.

# Normalize task_list to ensure it's always a list of dictionaries
normalized_task_list = []
for i, task in enumerate(raw_task_list):
    if isinstance(task, dict):
        # Task is already in correct format, ensure required fields exist
        normalized_task = {
            'id': task.get('id', f'task-{i + 1}'),
            'title': task.get('title', 'Untitled task'),
            'status': task.get('status', 'todo'),
            'notes': task.get('notes', ''),
        }

3.I further reviewed the prompts and examples related to the task_tracker tool in OpenHands and noticed that OH does not actually teach the LLM how to populate the input parameters.

Parameters:
  (1) command (string, required): The command to execute. `view` shows the current task list. `plan` creates or updates the task list based on provided requirements and progress. Always `view` the current list before making changes.
Allowed values: [`view`, `plan`]
  (2) task_list (array, optional): The full task list. Required parameter of `plan` command.

4.I captured the request/response messages between OpenHands and the LLM. Searching through them shows that the fields inside task_list are being filled ad-hoc by the LLM without clear guidance.

Image

Steps to Reproduce

1.In the OpenHands UI, guide the LLM to call the task_tracker tool to plan a to-do list.
2.Observe the result after a successful task_tracker call: the tasks are typically titled “Untitled task.”

Root Cause

While working with the fn_call_converter.py file, I noticed that the convert_tools_to_description function does not parse nested parameters, especially when the tool arguments contain array-type inputs.

As a result, nested input parameters inside task_list are missing, which leads to incomplete prompt descriptions for tools like task_tracker.

OpenHands Installation

Development workflow

OpenHands Version

1.0.1

Model Name

No response

Operating System

Linux

Logs, Errors, Screenshots, and Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions