Skip to content

fix(agents): support Bedrock toolUse format in _parse_native_tool_call (fixes #4972)#5902

Open
STiFLeR7 wants to merge 4 commits into
crewAIInc:mainfrom
STiFLeR7:fix/issue-4972-bedrock-tool-parsing
Open

fix(agents): support Bedrock toolUse format in _parse_native_tool_call (fixes #4972)#5902
STiFLeR7 wants to merge 4 commits into
crewAIInc:mainfrom
STiFLeR7:fix/issue-4972-bedrock-tool-parsing

Conversation

@STiFLeR7
Copy link
Copy Markdown

@STiFLeR7 STiFLeR7 commented May 22, 2026

Closes #4972

Summary

Restored tool calling for AWS Bedrock Converse API by supporting the toolUse nesting level in native tool parsing.

Changes

  • Modified CrewAgentExecutor._parse_native_tool_call to unwrap the toolUse key.
  • Added type guards to prevent AttributeErrors on malformed responses (addressing CodeRabbit feedback).

Summary by CodeRabbit

  • Bug Fixes

    • Improved tool-call parsing to correctly handle both wrapped and direct payload formats from Bedrock AI models, enhancing compatibility.
  • Tests

    • Added test suite validating tool-call payload parsing for multiple Bedrock response formats to ensure consistent behavior.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 22, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f50a1a74-678a-4a8d-92c0-dd5b00519910

📥 Commits

Reviewing files that changed from the base of the PR and between e187e1d and e454a70.

📒 Files selected for processing (2)
  • lib/crewai/src/crewai/agents/crew_agent_executor.py
  • lib/crewai/tests/agents/test_repro_4972.py
💤 Files with no reviewable changes (1)
  • lib/crewai/tests/agents/test_repro_4972.py

📝 Walkthrough

Walkthrough

This PR fixes Bedrock Converse API tool-call parsing by detecting and unwrapping the "toolUse" wrapper structure in CrewAgentExecutor. The executor now recognizes wrapped payloads, safely unwraps them, and extracts arguments from the standard dict structure. Regression tests cover both wrapped and direct Bedrock payload formats.

Changes

Bedrock toolUse wrapper support

Layer / File(s) Summary
Detect and unwrap toolUse wrapper in executor
lib/crewai/src/crewai/agents/crew_agent_executor.py
_is_tool_call_list recognizes dicts containing a "toolUse" key as valid tool calls. _parse_native_tool_call unwraps tool_call["toolUse"] when present and validates the unwrapped value is a dict, returning None if validation fails.
Test wrapped and direct Bedrock formats
lib/crewai/tests/agents/test_repro_4972.py
TestParseNativeToolCall creates a dummy executor and tests _parse_native_tool_call with both wrapped (Bedrock Converse) and direct tool-call payloads, asserting non-None results and correct extraction of call_id, func_name, and func_args.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Poem

🐰 A wrapper unwraps, a dict appears,
Bedrock's toolUse conquers our fears,
Arguments flow where once they were lost,
Tests prove the fix at minimal cost.
✨ Tool calls now parse, clean and clear!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 12.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically summarizes the main change: adding support for Bedrock toolUse format in the _parse_native_tool_call method to fix the identified issue.
Linked Issues check ✅ Passed The code changes directly address all requirements from issue #4972: unwrapping the toolUse key to parse Bedrock responses correctly, extracting arguments from the input field, adding type guards to prevent errors on malformed responses, and preserving compatibility.
Out of Scope Changes check ✅ Passed All changes are directly scoped to fixing issue #4972: modifications to _parse_native_tool_call in CrewAgentExecutor and comprehensive test coverage for the Bedrock tool-call parsing functionality.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@lib/crewai/src/crewai/agents/crew_agent_executor.py`:
- Around line 806-808: After unwrapping tool_call with tool_call =
tool_call["toolUse"], add a dict-type guard so subsequent .get() calls don't
raise AttributeError: check isinstance(tool_call, dict) and if it's not a dict,
log or handle the malformed response (e.g., processLogger.warn or raise a
controlled exception) and skip or fallback to the original tool_call behavior;
update the code around the unwrap in crew_agent_executor (where tool_call is
reassigned) to perform this type check before any .get() usage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7c02a532-1f09-4f79-a429-578923b11b4e

📥 Commits

Reviewing files that changed from the base of the PR and between 179c20b and 1f33534.

📒 Files selected for processing (1)
  • lib/crewai/src/crewai/agents/crew_agent_executor.py

Comment thread lib/crewai/src/crewai/agents/crew_agent_executor.py
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
lib/crewai/src/crewai/agents/crew_agent_executor.py (1)

619-641: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Bedrock toolUse wrapper can still be dropped before parsing

Line 634+ only treats dict tool calls as native when they expose name/input directly. A wrapped payload like {"toolUse": {...}} returns False in _is_tool_call_list, so _parse_native_tool_call is never reached in the native loop.

💡 Minimal fix
@@
         if (
             isinstance(first_item, dict)
+            and "toolUse" in first_item
+            and isinstance(first_item["toolUse"], dict)
+        ):
+            return True
+        if (
+            isinstance(first_item, dict)
             and "name" in first_item
             and "input" in first_item
         ):
             return True
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@lib/crewai/src/crewai/agents/crew_agent_executor.py` around lines 619 - 641,
The _is_tool_call_list logic fails to recognize wrapped Bedrock tool calls like
{"toolUse": {...}} so _parse_native_tool_call is never invoked; update the
predicate in _is_tool_call_list to also detect when the first_item is a dict
containing a single "toolUse" key whose value is a dict (or contains
name/input/function_call/tool fields) so wrapped payloads are treated as native
tool calls; reference the _is_tool_call_list method and ensure it checks for
"toolUse" wrappers on first_item before returning False so the existing
_parse_native_tool_call path will be exercised.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@repro_4972.py`:
- Around line 1-45: The test file repro_4972.py is not collected by CI because
it's at the repo root and not named/placed per pytest conventions; move and
rename it so pytest will run it (e.g., place the file under lib/crewai/tests/
and rename to test_repro_4972.py or similar) and keep the tests as-is (they
exercise CrewAgentExecutor.__new__ and the _parse_native_tool_call method via
the TestParseNativeToolCall class and its test_parse_bedrock_converse_format and
test_parse_direct_bedrock_format methods) so CI run from lib/crewai will
discover and execute them.

---

Outside diff comments:
In `@lib/crewai/src/crewai/agents/crew_agent_executor.py`:
- Around line 619-641: The _is_tool_call_list logic fails to recognize wrapped
Bedrock tool calls like {"toolUse": {...}} so _parse_native_tool_call is never
invoked; update the predicate in _is_tool_call_list to also detect when the
first_item is a dict containing a single "toolUse" key whose value is a dict (or
contains name/input/function_call/tool fields) so wrapped payloads are treated
as native tool calls; reference the _is_tool_call_list method and ensure it
checks for "toolUse" wrappers on first_item before returning False so the
existing _parse_native_tool_call path will be exercised.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 351a155c-7682-4136-9043-e950a6aa7264

📥 Commits

Reviewing files that changed from the base of the PR and between 1f33534 and 69f2638.

📒 Files selected for processing (2)
  • lib/crewai/src/crewai/agents/crew_agent_executor.py
  • repro_4972.py

Comment thread repro_4972.py Outdated
Comment on lines +1 to +45
import unittest
from typing import Any
from crewai.agents.crew_agent_executor import CrewAgentExecutor

class TestParseNativeToolCall(unittest.TestCase):
def setUp(self):
# We need a mock agent or just call the method on a dummy instance
self.executor = CrewAgentExecutor.__new__(CrewAgentExecutor)

def test_parse_bedrock_converse_format(self):
# Format reported in issue #4972
tool_call = {
"toolUse": {
"toolUseId": "tooluse_123",
"name": "calculator",
"input": {"expression": "1 + 1"}
}
}

result = self.executor._parse_native_tool_call(tool_call)

self.assertIsNotNone(result, "Should not return None for Bedrock format")
call_id, func_name, func_args = result
self.assertEqual(call_id, "tooluse_123")
self.assertEqual(func_name, "calculator")
self.assertEqual(func_args, {"expression": "1 + 1"})

def test_parse_direct_bedrock_format(self):
# Format if already unwrapped
tool_call = {
"toolUseId": "tooluse_123",
"name": "calculator",
"input": {"expression": "1 + 1"}
}

result = self.executor._parse_native_tool_call(tool_call)

self.assertIsNotNone(result)
call_id, func_name, func_args = result
self.assertEqual(call_id, "tooluse_123")
self.assertEqual(func_name, "calculator")
self.assertEqual(func_args, {"expression": "1 + 1"})

if __name__ == "__main__":
unittest.main()
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Test discovery config files =="
fd -HI '^(pytest\.ini|pyproject\.toml|setup\.cfg|tox\.ini)$' -x sh -c '
  echo "--- $1 ---"
  rg -n "python_files|testpaths|addopts|unittest" "$1" || true
' sh {}

echo
echo "== Files matching common test patterns =="
fd -HI '(^test_.*\.py$|.*_test\.py$)'

echo
echo "== PR-added file =="
fd -HI '^repro_4972\.py$'

Repository: crewAIInc/crewAI

Length of output: 14485


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Locate repro_4972.py =="
fd -HI '^repro_4972\.py$' -t f -a .

echo
echo "== Where pytest is invoked (CI/workflows or scripts) =="
fd -HI '(.github/workflows|scripts|Makefile|pyproject\.toml)$' -t f -a . || true
rg -n --hidden --glob '!.git' -S 'pytest' .github workflows scripts Makefile pyproject.toml 2>/dev/null || rg -n --hidden --glob '!.git' -S 'pytest' . || true

echo
echo "== Any pytest test file pattern overrides =="
rg -n -S 'python_files|testpaths|unittest|python_classes|norecursedirs' pyproject.toml **/pyproject.toml 2>/dev/null || true

echo
echo "== Any explicit unittest discovery config/commands =="
rg -n -S 'unittest\.TestLoader|unittest\.discover|python -m unittest|nose' . 2>/dev/null || true

Repository: crewAIInc/crewAI

Length of output: 50373


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Root pyproject: pytest ini options =="
python - <<'PY'
import re, itertools, pathlib
p = pathlib.Path("pyproject.toml")
lines = p.read_text().splitlines()
for i,l in enumerate(lines,1):
    if l.strip()=="[tool.pytest.ini_options]":
        start=i
        break
else:
    start=None
if start:
    for j in range(start, min(start+60, len(lines)+1)):
        print(f"{j}:{lines[j-1]}")
PY

echo
echo "== lib/crewai pyproject: pytest ini options =="
python - <<'PY'
import pathlib
p = pathlib.Path("lib/crewai/pyproject.toml")
lines = p.read_text().splitlines()
for i,l in enumerate(lines,1):
    if l.strip()=="[tool.pytest.ini_options]":
        start=i
        break
else:
    start=None
if start:
    for j in range(start, min(start+60, len(lines)+1)):
        print(f"{j}:{lines[j-1]}")
PY

echo
echo "== lib/crewai-tools pyproject: pytest ini options =="
python - <<'PY'
import pathlib
p = pathlib.Path("lib/crewai-tools/pyproject.toml")
lines = p.read_text().splitlines()
for i,l in enumerate(lines,1):
    if l.strip()=="[tool.pytest.ini_options]":
        start=i
        break
else:
    start=None
if start:
    for j in range(start, min(start+60, len(lines)+1)):
        print(f"{j}:{lines[j-1]}")
PY

echo
echo "== Locate CI pytest invocations (relevant lines) =="
rg -n "cd lib/crewai && uv run pytest|cd lib/crewai-tools && uv run pytest" .github/workflows/tests.yml

Repository: crewAIInc/crewAI

Length of output: 3726


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== Relevant parts of .github/workflows/tests.yml =="
sed -n '60,120p' .github/workflows/tests.yml

echo
echo "== Check whether lib/crewai*.pyproject.toml defines pytest ini options =="
rg -n "^\[tool\.pytest\.ini_options\]" lib/crewai/pyproject.toml lib/crewai-tools/pyproject.toml || true

echo
echo "== Show surrounding pytest config in root (just in case) =="
sed -n '120,180p' pyproject.toml

Repository: crewAIInc/crewAI

Length of output: 4897


Move/rename repro_4972.py so CI can collect it
repro_4972.py sits at the repo root, but pytest in this repo is configured to only collect from lib/*/tests and only files matching test_*.py, and CI runs pytest from lib/crewai and lib/crewai-tools. As a result, these tests won’t run in CI.

Move it under the relevant lib/crewai/tests/... (or other appropriate lib/*/tests directory) and rename it to test_*.py.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@repro_4972.py` around lines 1 - 45, The test file repro_4972.py is not
collected by CI because it's at the repo root and not named/placed per pytest
conventions; move and rename it so pytest will run it (e.g., place the file
under lib/crewai/tests/ and rename to test_repro_4972.py or similar) and keep
the tests as-is (they exercise CrewAgentExecutor.__new__ and the
_parse_native_tool_call method via the TestParseNativeToolCall class and its
test_parse_bedrock_converse_format and test_parse_direct_bedrock_format methods)
so CI run from lib/crewai will discover and execute them.

@STiFLeR7
Copy link
Copy Markdown
Author

@coderabbitai I have added the dict-type guard as requested in the latest commit. Please review.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 23, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Get the current state of the modified file
cat src/crewai/agents/crew_agent_executor.py | grep -n "_parse_native_tool_call" -A 40

# Also check the test file
cat repro_4972.py 2>/dev/null || fd -i "repro_4972" --exec cat {}

Length of output: 1673


🏁 Script executed:

#!/bin/bash
# Find the correct path
fd "crew_agent_executor.py" --exec cat {}

Length of output: 61880


@STiFLeR7 Thanks for the update! The dict-type guard is correctly implemented:

if "toolUse" in tool_call:
    tool_call = tool_call["toolUse"]

if not isinstance(tool_call, dict):
    return None

This safely handles the case where toolUse maps to a non-dict value. ✅

I do have two remaining observations to flag:


1. _is_tool_call_list doesn't recognize the {"toolUse": {...}} shape

_parse_native_tool_call is only invoked if _is_tool_call_list returns True first. Looking at that method, none of its checks match a raw Bedrock converse item of the form {"toolUse": {...}}:

# None of these match {"toolUse": {"toolUseId": ..., "name": ..., "input": ...}}
isinstance(first_item, dict) and "function" in first_item       # False
isinstance(first_item, dict) and "name" in first_item and "input" in first_item  # False

Consider adding a check there:

if isinstance(first_item, dict) and "toolUse" in first_item:
    return True

This is only needed if LiteLLM does not normalise Bedrock converse responses before returning them. If LiteLLM always converts them to OpenAI format upstream, this gap is irrelevant — but it may be worth double-checking or adding a comment clarifying that assumption.


2. Test file placement

repro_4972.py is placed at the repository root. It would be better to move it to the tests/ directory with a standard name (e.g. tests/agents/test_crew_agent_executor_bedrock.py) so it runs as part of the normal test suite rather than being a one-off reproduction script.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
lib/crewai/tests/agents/test_repro_4972.py (2)

6-8: ⚖️ Poor tradeoff

Consider improving testability instead of bypassing initialization.

Using __new__ to bypass __init__ is a testing anti-pattern. Consider one of these approaches:

  • If _parse_native_tool_call doesn't depend on instance state, refactor it to a static or class method.
  • If __init__ has complex dependencies, introduce a factory method or use dependency injection to make the class easier to test.
  • Mock required dependencies in setUp rather than creating an uninitialized instance.

This improves test maintainability and signals whether the method truly needs instance state.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@lib/crewai/tests/agents/test_repro_4972.py` around lines 6 - 8, The test
currently creates an uninitialized CrewAgentExecutor via
CrewAgentExecutor.__new__ in setUp; instead, make _parse_native_tool_call
testable without bypassing __init__ by either refactoring
_parse_native_tool_call into a `@staticmethod` or `@classmethod` if it does not use
instance state, or by adding a test-friendly factory or dependency-injection
hook on CrewAgentExecutor so setUp can construct a fully initialized instance;
alternatively, if instance state is required, update setUp to construct a real
CrewAgentExecutor with mocked dependencies (mock whatever __init__ requires)
rather than using __new__, and update tests to call the method on that properly
initialized object.

10-42: ⚡ Quick win

Add test coverage for malformed inputs to verify type guards.

The PR description states that "type guards to prevent AttributeErrors on malformed responses" were added, but the current test suite only validates happy paths. Add test cases for:

  • Malformed toolUse value: {"toolUse": "not_a_dict"}
  • None input
  • Empty dict: {}
  • Missing required keys (e.g., {"toolUse": {"name": "foo"}} without input or toolUseId)

These tests will verify that the defensive type guards work as intended and prevent regressions.

📋 Example test cases
def test_parse_malformed_tooluse_value(self):
    """Type guard should handle toolUse with non-dict value."""
    tool_call = {"toolUse": "not_a_dict"}
    result = self.executor._parse_native_tool_call(tool_call)
    self.assertIsNone(result, "Should return None for malformed toolUse")

def test_parse_none_input(self):
    """Should handle None gracefully."""
    result = self.executor._parse_native_tool_call(None)
    self.assertIsNone(result)

def test_parse_empty_dict(self):
    """Should handle empty dict gracefully."""
    result = self.executor._parse_native_tool_call({})
    self.assertIsNone(result)

def test_parse_missing_required_keys(self):
    """Should handle missing keys gracefully."""
    tool_call = {"toolUse": {"name": "calculator"}}  # missing input and toolUseId
    result = self.executor._parse_native_tool_call(tool_call)
    # Verify behavior matches implementation
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@lib/crewai/tests/agents/test_repro_4972.py` around lines 10 - 42, Add unit
tests to exercise defensive type guards in _parse_native_tool_call by verifying
it returns None (and does not raise) for malformed inputs: (1) toolUse as
non-dict (e.g., {"toolUse": "not_a_dict"}), (2) None input, (3) empty dict {},
and (4) missing required keys (e.g., {"toolUse": {"name": "calculator"}} lacking
toolUseId/input). Place these new test methods alongside existing tests in
test_repro_4972.py, assert result is None for each case, and name them clearly
(e.g., test_parse_malformed_tooluse_value, test_parse_none_input,
test_parse_empty_dict, test_parse_missing_required_keys) to document the intent.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@lib/crewai/tests/agents/test_repro_4972.py`:
- Line 2: The test file imports the unused typing symbol Any; remove the unused
import by deleting Any from the import statement (i.e., update the line
importing Any so it no longer includes the Any symbol) to eliminate the
unused-import warning in lib/crewai/tests/agents/test_repro_4972.py.

---

Nitpick comments:
In `@lib/crewai/tests/agents/test_repro_4972.py`:
- Around line 6-8: The test currently creates an uninitialized CrewAgentExecutor
via CrewAgentExecutor.__new__ in setUp; instead, make _parse_native_tool_call
testable without bypassing __init__ by either refactoring
_parse_native_tool_call into a `@staticmethod` or `@classmethod` if it does not use
instance state, or by adding a test-friendly factory or dependency-injection
hook on CrewAgentExecutor so setUp can construct a fully initialized instance;
alternatively, if instance state is required, update setUp to construct a real
CrewAgentExecutor with mocked dependencies (mock whatever __init__ requires)
rather than using __new__, and update tests to call the method on that properly
initialized object.
- Around line 10-42: Add unit tests to exercise defensive type guards in
_parse_native_tool_call by verifying it returns None (and does not raise) for
malformed inputs: (1) toolUse as non-dict (e.g., {"toolUse": "not_a_dict"}), (2)
None input, (3) empty dict {}, and (4) missing required keys (e.g., {"toolUse":
{"name": "calculator"}} lacking toolUseId/input). Place these new test methods
alongside existing tests in test_repro_4972.py, assert result is None for each
case, and name them clearly (e.g., test_parse_malformed_tooluse_value,
test_parse_none_input, test_parse_empty_dict, test_parse_missing_required_keys)
to document the intent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 3dd22aae-2b4b-4ce3-84e9-fbc73bac2698

📥 Commits

Reviewing files that changed from the base of the PR and between 69f2638 and e187e1d.

📒 Files selected for processing (1)
  • lib/crewai/tests/agents/test_repro_4972.py

Comment thread lib/crewai/tests/agents/test_repro_4972.py Outdated
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.

[BUG] _parse_native_tool_call drops Bedrock Converse API tool arguments — always passes empty dict

1 participant