Skip to content

fix(delegate_task): send empty list instead of None for tools#3736

Closed
kelsia14 wants to merge 1 commit into
NousResearch:mainfrom
kelsia14:fix/delegate-task-tools-none
Closed

fix(delegate_task): send empty list instead of None for tools#3736
kelsia14 wants to merge 1 commit into
NousResearch:mainfrom
kelsia14:fix/delegate-task-tools-none

Conversation

@kelsia14

Copy link
Copy Markdown
Contributor

Problem

delegate_task fails with Fireworks AI (and other strict OpenAI-compatible providers) when a subagent has no valid tools after filtering blocked ones:

HTTP 400: Input should be a valid list, field: 'tools', value: None

Root Cause

In _build_api_kwargs(), when self.tools is an empty list [] (falsy in Python), the code was converting it to None:

"tools": self.tools if self.tools else None,

Fireworks AI rejects tools=None — it requires either a valid list or the parameter omitted entirely.

Fix

Changed to always send a valid list:

"tools": self.tools if self.tools else [],

Testing

  • Subagent with tools (terminal): ✅ Works
  • Subagent without tools (empty list): ✅ Works (previously failed)

Note: This is a minimal one-line fix with no breaking changes.

Fireworks AI (and other strict OpenAI-compatible providers) reject
HTTP 400 when tools=None is sent in the API request. This happens
when a subagent has no valid tools after filtering blocked ones.

Changed: self.tools if self.tools else None
To:      self.tools if self.tools else []

Fixes subagent delegation failure with:
"Input should be a valid list, field: 'tools', value: None"
teknium1 added a commit that referenced this pull request Mar 29, 2026
Some providers (Fireworks AI) reject tools=null, and others (Anthropic)
reject tools=[]. The safest approach is to not include the key at all
when there are no tools — the OpenAI SDK treats a missing parameter as
NOT_GIVEN and omits it from the request entirely.

Inspired by PR #3736 (@kelsia14).
teknium1 added a commit that referenced this pull request Mar 29, 2026
)

Some providers (Fireworks AI) reject tools=null, and others (Anthropic)
reject tools=[]. The safest approach is to not include the key at all
when there are no tools — the OpenAI SDK treats a missing parameter as
NOT_GIVEN and omits it from the request entirely.

Inspired by PR #3736 (@kelsia14).
@teknium1

Copy link
Copy Markdown
Contributor

Fixed in #3820 with a better approach. Your PR correctly identified the issue (providers rejecting tools=null), but sending tools=[] would break other providers like Anthropic that reject empty arrays. The fix omits the tools key entirely when empty — the SDK then uses NOT_GIVEN which all providers handle correctly. Thanks for surfacing this @kelsia14!

@teknium1 teknium1 closed this Mar 29, 2026
@kelsia14 kelsia14 deleted the fix/delegate-task-tools-none branch March 30, 2026 09:41
angelburgosrosado pushed a commit to angelburgosrosado/hermes-agent that referenced this pull request Apr 27, 2026
…usResearch#3820)

Some providers (Fireworks AI) reject tools=null, and others (Anthropic)
reject tools=[]. The safest approach is to not include the key at all
when there are no tools — the OpenAI SDK treats a missing parameter as
NOT_GIVEN and omits it from the request entirely.

Inspired by PR NousResearch#3736 (@kelsia14).
02356abc pushed a commit to 02356abc/hermes-agent that referenced this pull request May 14, 2026
…usResearch#3820)

Some providers (Fireworks AI) reject tools=null, and others (Anthropic)
reject tools=[]. The safest approach is to not include the key at all
when there are no tools — the OpenAI SDK treats a missing parameter as
NOT_GIVEN and omits it from the request entirely.

Inspired by PR NousResearch#3736 (@kelsia14).
olympus-terminal pushed a commit to olympus-terminal/hermes-agent that referenced this pull request May 16, 2026
…usResearch#3820)

Some providers (Fireworks AI) reject tools=null, and others (Anthropic)
reject tools=[]. The safest approach is to not include the key at all
when there are no tools — the OpenAI SDK treats a missing parameter as
NOT_GIVEN and omits it from the request entirely.

Inspired by PR NousResearch#3736 (@kelsia14).
gweeteve pushed a commit to gweeteve/hermes-agent that referenced this pull request Jun 2, 2026
…usResearch#3820)

Some providers (Fireworks AI) reject tools=null, and others (Anthropic)
reject tools=[]. The safest approach is to not include the key at all
when there are no tools — the OpenAI SDK treats a missing parameter as
NOT_GIVEN and omits it from the request entirely.

Inspired by PR NousResearch#3736 (@kelsia14).
Egavasyug pushed a commit to Egavasyug/hermes-agent that referenced this pull request Jun 10, 2026
…usResearch#3820)

Some providers (Fireworks AI) reject tools=null, and others (Anthropic)
reject tools=[]. The safest approach is to not include the key at all
when there are no tools — the OpenAI SDK treats a missing parameter as
NOT_GIVEN and omits it from the request entirely.

Inspired by PR NousResearch#3736 (@kelsia14).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants