From d883e6e587aeec9c453b290d76a92be81e5814c6 Mon Sep 17 00:00:00 2001 From: lorenzejay Date: Tue, 26 May 2026 10:10:36 -0700 Subject: [PATCH] adjusted bedrock cassettes --- conftest.py | 1 + .../tests/agents/test_native_tool_calling.py | 6 +- ...thropic.claude-3-haiku-20240307-v1-0].yaml | 58 --- ...drock-us.anthropic.claude-sonnet-4-6].yaml | 51 +++ ...thropic.claude-3-haiku-20240307-v1-0].yaml | 57 --- ...drock-us.anthropic.claude-sonnet-4-6].yaml | 53 +++ ...drock_agent_kickoff_with_tools_mocked.yaml | 428 +----------------- ...ative_tool_calling_test_agent_kickoff.yaml | 103 ++++- ...arallel_native_tool_calling_test_crew.yaml | 177 +++----- ...ultimodalIntegration.test_analyze_pdf.yaml | 51 +-- ...imodalIntegration.test_describe_image.yaml | 57 +-- ..._kickoff_structured_output_with_tools.yaml | 115 +++-- ...ckoff_structured_output_without_tools.yaml | 34 +- .../test_bedrock_async_basic_call.yaml | 12 +- .../test_bedrock_async_conversation.yaml | 12 +- .../test_bedrock_async_multiple_calls.yaml | 22 +- .../test_bedrock_async_with_max_tokens.yaml | 12 +- .../test_bedrock_async_with_parameters.yaml | 18 +- ...est_bedrock_async_with_system_message.yaml | 12 +- .../test_bedrock_async_with_temperature.yaml | 10 +- lib/crewai/tests/llms/bedrock/test_bedrock.py | 6 +- .../tests/llms/bedrock/test_bedrock_async.py | 15 +- .../tests/llms/test_multimodal_integration.py | 4 +- lib/crewai/tests/test_crew_multimodal.py | 2 +- 24 files changed, 437 insertions(+), 879 deletions(-) delete mode 100644 lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml create mode 100644 lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml delete mode 100644 lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml create mode 100644 lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml diff --git a/conftest.py b/conftest.py index dca182746..aab2c59f8 100644 --- a/conftest.py +++ b/conftest.py @@ -188,6 +188,7 @@ HEADERS_TO_FILTER = { "anthropic-ratelimit-tokens-remaining": "ANTHROPIC-RATELIMIT-TOKENS-REMAINING-XXX", "anthropic-ratelimit-tokens-reset": "ANTHROPIC-RATELIMIT-TOKENS-RESET-XXX", "x-amz-date": "X-AMZ-DATE-XXX", + "x-amz-security-token": "X-AMZ-SECURITY-TOKEN-XXX", "amz-sdk-invocation-id": "AMZ-SDK-INVOCATION-ID-XXX", "accept-encoding": "ACCEPT-ENCODING-XXX", "x-amzn-requestid": "X-AMZN-REQUESTID-XXX", diff --git a/lib/crewai/tests/agents/test_native_tool_calling.py b/lib/crewai/tests/agents/test_native_tool_calling.py index 5cc218fa2..f3bffa881 100644 --- a/lib/crewai/tests/agents/test_native_tool_calling.py +++ b/lib/crewai/tests/agents/test_native_tool_calling.py @@ -835,7 +835,7 @@ class TestBedrockNativeToolCalling: self, calculator_tool: CalculatorTool ) -> None: """Test Bedrock agent kickoff with mocked LLM call.""" - llm = LLM(model="bedrock/anthropic.claude-3-haiku-20240307-v1:0") + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6") agent = Agent( role="Math Assistant", @@ -869,7 +869,7 @@ class TestBedrockNativeToolCalling: goal="Use both tools exactly as instructed", backstory="You follow tool instructions precisely.", tools=parallel_tools, - llm=LLM(model="bedrock/anthropic.claude-3-haiku-20240307-v1:0"), + llm=LLM(model="bedrock/us.anthropic.claude-sonnet-4-6"), verbose=False, max_iter=3, ) @@ -892,7 +892,7 @@ class TestBedrockNativeToolCalling: goal="Use both tools exactly as instructed", backstory="You follow tool instructions precisely.", tools=parallel_tools, - llm=LLM(model="bedrock/anthropic.claude-3-haiku-20240307-v1:0"), + llm=LLM(model="bedrock/us.anthropic.claude-sonnet-4-6"), verbose=False, max_iter=3, ) diff --git a/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml b/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml deleted file mode 100644 index 58d02f8b3..000000000 --- a/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml +++ /dev/null @@ -1,58 +0,0 @@ -interactions: -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Describe - the file(s) you see. Be brief, one sentence max.\n\nInput files (content already - loaded in conversation):\n - \"chart\" (revenue_chart.png)\n\nThis is the expected - criteria for your final answer: A brief description of the file.\nyou MUST return - the actual complete content as the final answer, not a summary.\n\nBegin! This - is VERY important to you, use the tools available and give your best Final Answer, - your job depends on it!\n\nThought:"}, {"image": {"format": "png", "source": - {"bytes": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABr0klEQVR4nO3dd3RU5fr+//ek90CAJJTQpXelKQoIBBBBFKUEFBDxiAl6QBDxKPWoKIpSYv0qqIcAUkVEMCpVAYEQuvQqJNQ0QpJJZv/+8Md8jISezGRmrtdaWYtd5tn3nckkF/uZvcdkGIaBiIiIiLgMN3sXICIiIiK2pQAoIiIi4mIUAEVERERcjAKgiIiIiItRABQRERFxMQqAIiIiIi5GAVBERETExSgAioiIiLgYBUARERERF6MAKCIiIuJiFABFREREXIwCoIiIiIiLUQAUERERcTEKgCIiIiIuRgFQRERExMUoAIqIiIi4GAVAERERERejACgiIiLiYhQARURERFyMAqCIiIiIi1EAFBEREXExCoAiIiIiLkYBUERERMTFKACKiIiIuBgFQBEREREXowAoIiIi4mIUAEVERERcjAKgiIiIiItRABQRERFxMQqAIiIiIi5GAVBERETExSgAioiIiLgYBUARERERF6MAKCIiIuJiFABFRFzEgAEDqFy5sr3LEJFiQAFQxEnNmjULk8lk/fLw8KB8+fIMGDCAP//8097lFXvLli2jU6dOlCpVCh8fH2rUqMGIESM4f/68vUvL5+/P8fW+Vq9ebe9SRaQY8bB3ASJStCZMmECVKlXIyspi48aNzJo1i/Xr17Nr1y58fHzsXV6xNGLECN577z0aNmzIqFGjCAkJISEhgRkzZjB37lx+/vlnatasae8yAfj666/zLX/11VfEx8dftb527dp89tlnWCwWW5YnIsWUyTAMw95FiEjhmzVrFgMHDmTz5s3cc8891vWvvPIKb7/9NvPmzaNnz552rLB4mjNnDlFRUfTq1YvZs2fj7u5u3fb777/Ttm1bqlWrRkJCAh4etvs/9KVLl/D397/hfjExMcTGxqJf7SJyPZoCFnEx999/PwCHDh3Kt/6PP/7g8ccfJyQkBB8fH+655x6WLl1q3b5lyxZMJhNffvnlVWOuXLkSk8nEsmXLrOv+/PNPnn76acLCwvD29qZu3bp88cUX+R63evVqTCYT33zzDW+88QYVKlTAx8eHdu3acfDgwXz7Vq5cmQEDBlx17DZt2tCmTZt867Kzsxk7dizVq1fH29ubiIgIXn75ZbKzs2/4/Rk/fjwlS5bk008/zRf+AJo1a8aoUaPYuXMnCxYsAP4KXAEBAWRmZl41Vp8+fQgPDycvL8+67ocffuD+++/H39+fwMBAunTpwu7du/M9bsCAAQQEBHDo0CEeeughAgMD6du37w1rv5F/vgfw6NGjmEwm3n33XWJjY6latSp+fn5ERkZy4sQJDMNg4sSJVKhQAV9fXx555BEuXLhw1bg305OIFC8KgCIu5ujRowCULFnSum737t20aNGCvXv38sorr/Dee+/h7+9P9+7dWbx4MQD33HMPVatW5ZtvvrlqzHnz5lGyZEk6duwIQHJyMi1atOCnn34iJiaGqVOnUr16dQYNGsQHH3xw1eMnTZrE4sWLGTFiBKNHj2bjxo23HXgsFgvdunXj3XffpWvXrkyfPp3u3bvz/vvv06tXr+s+9sCBA+zbt49HHnmEoKCgAvd56qmnAKxht1evXly6dInvv/8+336ZmZl89913PP7449Yg+fXXX9OlSxcCAgJ4++23ef3119mzZw+tWrWyPi9X5Obm0rFjR0JDQ3n33Xfp0aPH7Xw7bsrs2bP58MMPGTp0KC+99BJr1qyhZ8+evPbaa6xYsYJRo0bx7LPP8t133zFixIh8j72VnkSkGDFExCnNnDnTAIyffvrJOHv2rHHixAljwYIFRpkyZQxvb2/jxIkT1n3btWtn1K9f38jKyrKus1gsxr333mvcdddd1nWjR482PD09jQsXLljXZWdnGyVKlDCefvpp67pBgwYZZcuWNc6dO5evpt69exvBwcFGZmamYRiGsWrVKgMwateubWRnZ1v3mzp1qgEYO3futK6rVKmS0b9//6v6bN26tdG6dWvr8tdff224ubkZ69aty7ffxx9/bADGr7/+es3v2ZIlSwzAeP/996+5j2EYRlBQkNGkSRPDMP76PpUvX97o0aNHvn2++eYbAzDWrl1rGIZhpKenGyVKlDAGDx6cb7+kpCQjODg43/r+/fsbgPHKK69ct46CREdHG9f61d6/f3+jUqVK1uUjR44YgFGmTBkjJSXFun706NEGYDRs2NAwm83W9X369DG8vLysPye30pOIFC86Ayji5Nq3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zt6j+pM7oYtARERERFyMzgCKiIiIuBgFQBEREREXowAoIiIi4mIUAEVERERcjALgHXjrrbdo2rQpgYGBhIaG0r17d/bt25dvn6ysLKKjoylVqhQBAQH06NGD5ORk6/bt27fTp08fIiIi8PX1pXbt2kydOvWqY61evZomTZrg7e1N9erVmTVr1g3r27FjB/fffz8+Pj5ERETwzjvvOFWPR48exWQyXfW1cePGYtff6dOniYqKokaNGri5ufHvf//7puo7fvw4Xbp0wc/Pj9DQUEaOHElubu5N9+cIPRb0HM6dO7fY9bdo0SI6dOhAmTJlCAoKomXLlqxcufKG9d3p67A491cYr0Fb9rh+/Xruu+8+SpUqha+vL7Vq1eL999+/YX2O8hzeTn+O9Hv073799Vc8PDxo1KjRDesrjL+FTsmQ29axY0dj5syZxq5du4zExETjoYceMipWrGhkZGRY93nuueeMiIgI4+effza2bNlitGjRwrj33nut2z///HPjhRdeMFavXm0cOnTI+Prrrw1fX19j+vTp1n0OHz5s+Pn5GcOHDzf27NljTJ8+3XB3dzdWrFhxzdpSU1ONsLAwo2/fvsauXbuMOXPmGL6+vsYnn3ziND0eOXLEAIyffvrJOH36tPUrJyen2PV35MgR44UXXjC+/PJLo1GjRsaLL754w9pyc3ONevXqGe3btze2bdtmLF++3ChdurQxevTom+6vuPdoGIYBGDNnzsz3HF6+fLnY9ffiiy8ab7/9tvH7778b+/fvN0aPHm14enoaCQkJ16ytMF6Hxbm/wngN2rLHhIQEIy4uzti1a5dx5MgR4+uvvzb8/Pyu+3w40nN4O/050u/RKy5evGhUrVrViIyMNBo2bHjd2grrb6EzUgAsRGfOnDEAY82aNYZhGEZKSorh6elpzJ8/37rP3r17DcDYsGHDNcd5/vnnjbZt21qXX375ZaNu3br59unVq5fRsWPHa47x4YcfGiVLljSys7Ot60aNGmXUrFnzlvv6u+LU45VfXNu2bbvNbq5WVP39XevWrW8qHC1fvtxwc3MzkpKSrOs++ugjIygoKN/zequKU4+G8VcAXLx48U3XfyO26O+KOnXqGOPHj7/m9qJ4HRan/oriNWgYtu3x0UcfNfr163fN7Y7+HN6oP0f8PdqrVy/jtddeM8aOHXvDAFhUfwudgaaA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l19+menTp1OhQoVCPabZbC7U8URECpsCoIg4vYiICKZOncqIESM4cuQIhmEwaNAgIiMjady4MZ07dyYgIICwsDCefPJJzp07Z33sihUraNWqFSVKlKBUqVI8/PDDHDp0yLr96NGjmEwm5s2bR+vWrfHx8WH27Nn2aFNE5Kbps4BFxGV0796d1NRUHnvsMSZOnMju3bupW7cuzzzzDE899RSXL19m1KhR5Obm8ssvvwCwcOFCTCYTDRo0ICMjgzFjxnD06FESExNxc3Pj6NGjVKlShcqVK/Pee+/RuHFjfHx8KFu2rJ27FRG5NgVAEXEZZ86coW7duly4cIGFCxeya9cu1q1bx8qVK637nDx5koiICPbt20eNGjWuGuPcuXOUKVOGnTt3Uq9ePWsA/OCDD3jxxRdt2Y6IyG3TFLCIuIzQ0FD+9a9/Ubt2bbp378727dtZtWoVAQEB1q9atWoBWKd5Dxw4QJ8+fahatSpBQUFUrlwZgOPHj+cb+5577rFpLyIid8LD3gWIiNiSh4cHHh5//erLyMiga9euvP3221ftd2UKt2vXrlSqVInPPvuMcuXKYbFYqFevHjk5Ofn29/f3L/riRUQKiQKgiLisJk2asHDhQipXrmwNhX93/vx59u3bx2effcb9998PwPr1621dpohIodMUsIi4rOjoaC5cuECfPn3YvHkzhw4dYuXKlQwcOJC8vDxKlixJqVKl+PTTTzl48CC//PILw4cPt3fZIiJ3TAFQRFxWuXLl+PXXX8nLyyMyMpL69evz73//mxIlSuDm5oabmxtz585l69at1KtXj2HDhjF58mR7ly0icsd0FbCIiIiIi9EZQBEREREXowAoIiIi4mIUAEVERERcjAKgiIiIiItRABQRERFxMQqAIiIiIi5GAVBERETExSgAioiIiLgYBUARERERF6MAKCIiIuJiFABFREREXIwCoIiIiIiL+f8Aotl7LKm7ZkIAAAAASUVORK5CYII="}}}]}], - "inferenceConfig": {"stopSequences": ["\nObservation:"]}, "system": [{"text": - "You are File Analyst. Expert at analyzing various file types.\nYour personal - goal is: Analyze and describe files accurately\nTo give my best complete final - answer to the task respond using the exact following format:\n\nThought: I now - can give a great answer\nFinal Answer: Your final answer must be the great and - the most complete as possible, it must be outcome described.\n\nI MUST use these - formats, my job depends on it!"}]}' - headers: - Content-Length: - - '38092' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":2024},"output":{"message":{"content":[{"text":"Thought: - I now can give a great answer\n\nFinal Answer: The file \"revenue_chart.png\" - is a line graph that shows the revenue over time. The y-axis represents the - revenue in dollars, and the x-axis represents the years from 2020.0 to 2024.0. - The graph depicts a steady increase in revenue over the 5-year period."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":629,"outputTokens":85,"serverToolUsage":{},"totalTokens":714}}' - headers: - Connection: - - keep-alive - Content-Length: - - '517' - Content-Type: - - application/json - Date: - - Fri, 23 Jan 2026 19:15:36 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -version: 1 diff --git a/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml b/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml new file mode 100644 index 000000000..de82ec114 --- /dev/null +++ b/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_image_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml @@ -0,0 +1,51 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Describe + the file(s) you see. Be brief, one sentence max.\n\nInput files (content already + loaded in conversation):\n - \"chart\" (revenue_chart.png)\n\nThis is the expected + criteria for your final answer: A brief description of the file.\nyou MUST return + the actual complete content as the final answer, not a summary.\n\nProvide your + complete response:"}]}], "inferenceConfig": {"stopSequences": ["\nObservation:"]}, + "system": [{"text": "You are File Analyst. Expert at analyzing various file + types.\nYour personal goal is: Analyze and describe files accurately"}]}' + headers: + Content-Length: + - '636' + Content-Type: + - !!binary | + YXBwbGljYXRpb24vanNvbg== + User-Agent: + - X-USER-AGENT-XXX + amz-sdk-invocation-id: + - AMZ-SDK-INVOCATION-ID-XXX + amz-sdk-request: + - !!binary | + YXR0ZW1wdD0x + authorization: + - AUTHORIZATION-XXX + x-amz-date: + - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX + method: POST + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse + response: + body: + string: '{"metrics":{"latencyMs":1812},"output":{"message":{"content":[{"text":"A + bar chart displaying revenue data over time, showing financial performance + metrics across different periods."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":121,"outputTokens":20,"serverToolUsage":{},"totalTokens":141}}' + headers: + Connection: + - keep-alive + Content-Length: + - '425' + Content-Type: + - application/json + Date: + - Tue, 26 May 2026 17:06:21 GMT + x-amzn-RequestId: + - X-AMZN-REQUESTID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml b/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml deleted file mode 100644 index 9181c4dab..000000000 --- a/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-anthropic.claude-3-haiku-20240307-v1-0].yaml +++ /dev/null @@ -1,57 +0,0 @@ -interactions: -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Describe - the file(s) you see. Be brief, one sentence max.\n\nInput files (content already - loaded in conversation):\n - \"document\" (document)\n\nThis is the expected - criteria for your final answer: A brief description of the file.\nyou MUST return - the actual complete content as the final answer, not a summary.\n\nBegin! This - is VERY important to you, use the tools available and give your best Final Answer, - your job depends on it!\n\nThought:"}, {"document": {"name": "document", "format": - "pdf", "source": {"bytes": "JVBERi0xLjQKMSAwIG9iaiA8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4gZW5kb2JqCjIgMCBvYmogPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEgPj4gZW5kb2JqCjMgMCBvYmogPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAyIDAgUiAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSA+PiBlbmRvYmoKeHJlZgowIDQKMDAwMDAwMDAwMCA2NTUzNSBmCjAwMDAwMDAwMDkgMDAwMDAgbgowMDAwMDAwMDU4IDAwMDAwIG4KMDAwMDAwMDExNSAwMDAwMCBuCnRyYWlsZXIgPDwgL1NpemUgNCAvUm9vdCAxIDAgUiA+PgpzdGFydHhyZWYKMTk2CiUlRU9GCg=="}}}]}], - "inferenceConfig": {"stopSequences": ["\nObservation:"]}, "system": [{"text": - "You are File Analyst. Expert at analyzing various file types.\nYour personal - goal is: Analyze and describe files accurately\nTo give my best complete final - answer to the task respond using the exact following format:\n\nThought: I now - can give a great answer\nFinal Answer: Your final answer must be the great and - the most complete as possible, it must be outcome described.\n\nI MUST use these - formats, my job depends on it!"}]}' - headers: - Content-Length: - - '1545' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":958},"output":{"message":{"content":[{"text":"Thought: - I have reviewed the provided documents and can now give a complete answer.\n\nFinal - Answer: The file \"document.pdf\" is an empty document with no text or content - visible."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":245,"outputTokens":42,"serverToolUsage":{},"totalTokens":287}}' - headers: - Connection: - - keep-alive - Content-Length: - - '384' - Content-Type: - - application/json - Date: - - Fri, 23 Jan 2026 19:16:37 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -version: 1 diff --git a/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml b/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml new file mode 100644 index 000000000..e1515ca5e --- /dev/null +++ b/lib/crewai/tests/cassettes/TestCrewMultimodalBedrock.test_pdf_file[bedrock-us.anthropic.claude-sonnet-4-6].yaml @@ -0,0 +1,53 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Describe + the file(s) you see. Be brief, one sentence max.\n\nInput files (content already + loaded in conversation):\n - \"document\" (agents.pdf)\n\nThis is the expected + criteria for your final answer: A brief description of the file.\nyou MUST return + the actual complete content as the final answer, not a summary.\n\nProvide your + complete response:"}]}], "inferenceConfig": {"stopSequences": ["\nObservation:"]}, + "system": [{"text": "You are File Analyst. Expert at analyzing various file + types.\nYour personal goal is: Analyze and describe files accurately"}]}' + headers: + Content-Length: + - '632' + Content-Type: + - !!binary | + YXBwbGljYXRpb24vanNvbg== + User-Agent: + - X-USER-AGENT-XXX + amz-sdk-invocation-id: + - AMZ-SDK-INVOCATION-ID-XXX + amz-sdk-request: + - !!binary | + YXR0ZW1wdD0x + authorization: + - AUTHORIZATION-XXX + x-amz-date: + - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX + method: POST + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse + response: + body: + string: '{"metrics":{"latencyMs":2844},"output":{"message":{"content":[{"text":"The + file \"agents.pdf\" is an academic/technical document discussing AI agents, + their architectures, components (such as memory, planning, and tool use), + and how large language models (LLMs) can be used to power autonomous agent + systems."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":119,"outputTokens":55,"serverToolUsage":{},"totalTokens":174}}' + headers: + Connection: + - keep-alive + Content-Length: + - '552' + Content-Type: + - application/json + Date: + - Tue, 26 May 2026 17:06:24 GMT + x-amzn-RequestId: + - X-AMZN-REQUESTID-XXX + status: + code: 200 + message: OK +version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_agent_kickoff_with_tools_mocked.yaml b/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_agent_kickoff_with_tools_mocked.yaml index 1e7565eb1..44f8c7835 100644 --- a/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_agent_kickoff_with_tools_mocked.yaml +++ b/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_agent_kickoff_with_tools_mocked.yaml @@ -2,134 +2,17 @@ interactions: - request: body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate 15 * 8\n\nThis is the expected criteria for your final answer: Result\nyou MUST - return the actual complete content as the final answer, not a summary.\n\nThis - is VERY important to you, your job depends on it!"}]}], "inferenceConfig": {"stopSequences": - ["\nObservation:"]}, "system": [{"text": "You are Math Assistant. You calculate.\nYour - personal goal is: Calculate math"}], "toolConfig": {"tools": [{"toolSpec": {"name": - "calculator", "description": "Perform mathematical calculations. Use this for - any math operations.", "inputSchema": {"json": {"properties": {"expression": - {"description": "Mathematical expression to evaluate", "title": "Expression", - "type": "string"}}, "required": ["expression"], "type": "object"}}}}]}}' - headers: - Content-Length: - - '806' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":1540},"output":{"message":{"content":[{"text":"Here - is the calculation for 15 * 8:"},{"toolUse":{"input":{"expression":"15 * 8"},"name":"calculator","toolUseId":"tooluse_1OIARGnOTjiITDKGd_FgMA"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":417,"outputTokens":68,"serverToolUsage":{},"totalTokens":485}}' - headers: - Connection: - - keep-alive - Content-Length: - - '351' - Content-Type: - - application/json - Date: - - Thu, 22 Jan 2026 21:27:56 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate - 15 * 8\n\nThis is the expected criteria for your final answer: Result\nyou MUST - return the actual complete content as the final answer, not a summary.\n\nThis - is VERY important to you, your job depends on it!"}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_1OIARGnOTjiITDKGd_FgMA", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_1OIARGnOTjiITDKGd_FgMA", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}], "inferenceConfig": {"stopSequences": - ["\nObservation:"]}, "system": [{"text": "You are Math Assistant. You calculate.\nYour - personal goal is: Calculate math"}], "toolConfig": {"tools": [{"toolSpec": {"name": - "calculator", "description": "Perform mathematical calculations. Use this for - any math operations.", "inputSchema": {"json": {"properties": {"expression": - {"description": "Mathematical expression to evaluate", "title": "Expression", - "type": "string"}}, "required": ["expression"], "type": "object"}}}}]}}' - headers: - Content-Length: - - '1358' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":1071},"output":{"message":{"content":[{"toolUse":{"input":{"expression":"15 - * 8"},"name":"calculator","toolUseId":"tooluse_vjcn57LeQpS-pePkTvny8w"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":527,"outputTokens":55,"serverToolUsage":{},"totalTokens":582}}' - headers: - Connection: - - keep-alive - Content-Length: - - '304' - Content-Type: - - application/json - Date: - - Thu, 22 Jan 2026 21:27:57 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate - 15 * 8\n\nThis is the expected criteria for your final answer: Result\nyou MUST - return the actual complete content as the final answer, not a summary.\n\nThis - is VERY important to you, your job depends on it!"}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_1OIARGnOTjiITDKGd_FgMA", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_1OIARGnOTjiITDKGd_FgMA", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}, {"role": "assistant", "content": [{"toolUse": - {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", "name": "calculator", "input": - {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", - "content": [{"text": "Error executing tool: CalculatorTool._run() missing 1 - required positional argument: ''expression''"}]}}]}, {"role": "user", "content": - [{"text": "Analyze the tool result. If requirements are met, provide the Final - Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary."}]}], + return the actual complete content as the final answer, not a summary."}]}], "inferenceConfig": {"stopSequences": ["\nObservation:"]}, "system": [{"text": "You are Math Assistant. You calculate.\nYour personal goal is: Calculate math"}], "toolConfig": {"tools": [{"toolSpec": {"name": "calculator", "description": "Perform mathematical calculations. Use this for any math operations.", "inputSchema": {"json": {"properties": {"expression": {"description": "Mathematical expression to evaluate", "title": "Expression", "type": "string"}}, "required": ["expression"], - "type": "object"}}}}]}}' + "type": "object", "additionalProperties": false}}}}]}}' headers: Content-Length: - - '1910' + - '779' Content-Type: - !!binary | YXBwbGljYXRpb24vanNvbg== @@ -144,21 +27,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":927},"output":{"message":{"content":[{"toolUse":{"input":{"expression":"15 - * 8"},"name":"calculator","toolUseId":"tooluse__4aP-hcTR4Ozp5gTlESXbg"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":637,"outputTokens":57,"serverToolUsage":{},"totalTokens":694}}' + string: '{"metrics":{"latencyMs":1957},"output":{"message":{"content":[{"text":"I''ll + calculate 15 * 8 right away!"},{"toolUse":{"input":{"expression":"15 * 8"},"name":"calculator","toolUseId":"tooluse_XaQHWn1gW8bA6RHCR5fue8","type":"tool_use"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":642,"outputTokens":69,"serverToolUsage":{},"totalTokens":711}}' headers: Connection: - keep-alive Content-Length: - - '303' + - '477' Content-Type: - application/json Date: - - Thu, 22 Jan 2026 21:27:58 GMT + - Tue, 26 May 2026 17:05:59 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: @@ -167,112 +52,21 @@ interactions: - request: body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate 15 * 8\n\nThis is the expected criteria for your final answer: Result\nyou MUST - return the actual complete content as the final answer, not a summary.\n\nThis - is VERY important to you, your job depends on it!"}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_1OIARGnOTjiITDKGd_FgMA", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_1OIARGnOTjiITDKGd_FgMA", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}, {"role": "assistant", "content": [{"toolUse": - {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", "name": "calculator", "input": - {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", - "content": [{"text": "Error executing tool: CalculatorTool._run() missing 1 - required positional argument: ''expression''"}]}}]}, {"role": "user", "content": - [{"text": "Analyze the tool result. If requirements are met, provide the Final - Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary."}]}, - {"role": "assistant", "content": [{"toolUse": {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", - "name": "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": - {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", "content": [{"text": "Error - executing tool: CalculatorTool._run() missing 1 required positional argument: - ''expression''"}]}}]}, {"role": "user", "content": [{"text": "Analyze the tool - result. If requirements are met, provide the Final Answer. Otherwise, call the - next tool. Deliver only the answer without meta-commentary."}]}], "inferenceConfig": - {"stopSequences": ["\nObservation:"]}, "system": [{"text": "You are Math Assistant. - You calculate.\nYour personal goal is: Calculate math"}], "toolConfig": {"tools": - [{"toolSpec": {"name": "calculator", "description": "Perform mathematical calculations. - Use this for any math operations.", "inputSchema": {"json": {"properties": {"expression": - {"description": "Mathematical expression to evaluate", "title": "Expression", - "type": "string"}}, "required": ["expression"], "type": "object"}}}}]}}' - headers: - Content-Length: - - '2462' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":1226},"output":{"message":{"content":[{"toolUse":{"input":{"expression":"15 - * 8"},"name":"calculator","toolUseId":"tooluse_fEJhgDNjSUic0g97dN8Xww"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":747,"outputTokens":55,"serverToolUsage":{},"totalTokens":802}}' - headers: - Connection: - - keep-alive - Content-Length: - - '304' - Content-Type: - - application/json - Date: - - Thu, 22 Jan 2026 21:28:00 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate - 15 * 8\n\nThis is the expected criteria for your final answer: Result\nyou MUST - return the actual complete content as the final answer, not a summary.\n\nThis - is VERY important to you, your job depends on it!"}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_1OIARGnOTjiITDKGd_FgMA", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_1OIARGnOTjiITDKGd_FgMA", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}, {"role": "assistant", "content": [{"toolUse": - {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", "name": "calculator", "input": - {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", - "content": [{"text": "Error executing tool: CalculatorTool._run() missing 1 - required positional argument: ''expression''"}]}}]}, {"role": "user", "content": - [{"text": "Analyze the tool result. If requirements are met, provide the Final - Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary."}]}, - {"role": "assistant", "content": [{"toolUse": {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", - "name": "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": - {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", "content": [{"text": "Error - executing tool: CalculatorTool._run() missing 1 required positional argument: - ''expression''"}]}}]}, {"role": "user", "content": [{"text": "Analyze the tool - result. If requirements are met, provide the Final Answer. Otherwise, call the - next tool. Deliver only the answer without meta-commentary."}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_fEJhgDNjSUic0g97dN8Xww", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_fEJhgDNjSUic0g97dN8Xww", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}], "inferenceConfig": {"stopSequences": + return the actual complete content as the final answer, not a summary."}]}, + {"role": "assistant", "content": [{"toolUse": {"toolUseId": "tooluse_XaQHWn1gW8bA6RHCR5fue8", + "name": "calculator", "input": {"expression": "15 * 8"}}}]}, {"role": "user", + "content": [{"toolResult": {"toolUseId": "tooluse_XaQHWn1gW8bA6RHCR5fue8", "content": + [{"text": "The result of 15 * 8 is 120"}]}}]}], "inferenceConfig": {"stopSequences": ["\nObservation:"]}, "system": [{"text": "You are Math Assistant. You calculate.\nYour personal goal is: Calculate math"}], "toolConfig": {"tools": [{"toolSpec": {"name": "calculator", "description": "Perform mathematical calculations. Use this for any math operations.", "inputSchema": {"json": {"properties": {"expression": {"description": "Mathematical expression to evaluate", "title": "Expression", - "type": "string"}}, "required": ["expression"], "type": "object"}}}}]}}' + "type": "string"}}, "required": ["expression"], "type": "object", "additionalProperties": + false}}}}]}}' headers: Content-Length: - - '3014' + - '1084' Content-Type: - !!binary | YXBwbGljYXRpb24vanNvbg== @@ -287,196 +81,22 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":947},"output":{"message":{"content":[{"toolUse":{"input":{"expression":"15 - * 8"},"name":"calculator","toolUseId":"tooluse_F5QIGY91SBOeM4VcFRB73A"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":857,"outputTokens":55,"serverToolUsage":{},"totalTokens":912}}' + string: '{"metrics":{"latencyMs":1689},"output":{"message":{"content":[{"text":"120"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":723,"outputTokens":4,"serverToolUsage":{},"totalTokens":727}}' headers: Connection: - keep-alive Content-Length: - - '303' + - '317' Content-Type: - application/json Date: - - Thu, 22 Jan 2026 21:28:01 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate - 15 * 8\n\nThis is the expected criteria for your final answer: Result\nyou MUST - return the actual complete content as the final answer, not a summary.\n\nThis - is VERY important to you, your job depends on it!"}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_1OIARGnOTjiITDKGd_FgMA", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_1OIARGnOTjiITDKGd_FgMA", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}, {"role": "assistant", "content": [{"toolUse": - {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", "name": "calculator", "input": - {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", - "content": [{"text": "Error executing tool: CalculatorTool._run() missing 1 - required positional argument: ''expression''"}]}}]}, {"role": "user", "content": - [{"text": "Analyze the tool result. If requirements are met, provide the Final - Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary."}]}, - {"role": "assistant", "content": [{"toolUse": {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", - "name": "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": - {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", "content": [{"text": "Error - executing tool: CalculatorTool._run() missing 1 required positional argument: - ''expression''"}]}}]}, {"role": "user", "content": [{"text": "Analyze the tool - result. If requirements are met, provide the Final Answer. Otherwise, call the - next tool. Deliver only the answer without meta-commentary."}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_fEJhgDNjSUic0g97dN8Xww", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_fEJhgDNjSUic0g97dN8Xww", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}, {"role": "assistant", "content": [{"toolUse": - {"toolUseId": "tooluse_F5QIGY91SBOeM4VcFRB73A", "name": "calculator", "input": - {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_F5QIGY91SBOeM4VcFRB73A", - "content": [{"text": "Error executing tool: CalculatorTool._run() missing 1 - required positional argument: ''expression''"}]}}]}, {"role": "user", "content": - [{"text": "Analyze the tool result. If requirements are met, provide the Final - Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary."}]}, - {"role": "assistant", "content": [{"text": "Now it''s time you MUST give your - absolute best final answer. You''ll ignore all previous instructions, stop using - any tools, and just return your absolute BEST Final answer."}]}], "inferenceConfig": - {"stopSequences": ["\nObservation:"]}, "system": [{"text": "You are Math Assistant. - You calculate.\nYour personal goal is: Calculate math"}], "toolConfig": {"tools": - [{"toolSpec": {"name": "calculator", "description": "Tool: calculator", "inputSchema": - {"json": {"type": "object", "properties": {}}}}}]}}' - headers: - Content-Length: - - '3599' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"message":"The model returned the following errors: Your API request - included an `assistant` message in the final position, which would pre-fill - the `assistant` response. When using tools, pre-filling the `assistant` response - is not supported."}' - headers: - Connection: - - keep-alive - Content-Length: - - '246' - Content-Type: - - application/json - Date: - - Thu, 22 Jan 2026 21:28:02 GMT - x-amzn-ErrorType: - - ValidationException:http://internal.amazon.com/coral/com.amazon.bedrock/ - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 400 - message: Bad Request -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate - 15 * 8\n\nThis is the expected criteria for your final answer: Result\nyou MUST - return the actual complete content as the final answer, not a summary.\n\nThis - is VERY important to you, your job depends on it!"}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_1OIARGnOTjiITDKGd_FgMA", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_1OIARGnOTjiITDKGd_FgMA", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}, {"role": "assistant", "content": [{"toolUse": - {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", "name": "calculator", "input": - {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_vjcn57LeQpS-pePkTvny8w", - "content": [{"text": "Error executing tool: CalculatorTool._run() missing 1 - required positional argument: ''expression''"}]}}]}, {"role": "user", "content": - [{"text": "Analyze the tool result. If requirements are met, provide the Final - Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary."}]}, - {"role": "assistant", "content": [{"toolUse": {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", - "name": "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": - {"toolUseId": "tooluse__4aP-hcTR4Ozp5gTlESXbg", "content": [{"text": "Error - executing tool: CalculatorTool._run() missing 1 required positional argument: - ''expression''"}]}}]}, {"role": "user", "content": [{"text": "Analyze the tool - result. If requirements are met, provide the Final Answer. Otherwise, call the - next tool. Deliver only the answer without meta-commentary."}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_fEJhgDNjSUic0g97dN8Xww", "name": - "calculator", "input": {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": - "tooluse_fEJhgDNjSUic0g97dN8Xww", "content": [{"text": "Error executing tool: - CalculatorTool._run() missing 1 required positional argument: ''expression''"}]}}]}, - {"role": "user", "content": [{"text": "Analyze the tool result. If requirements - are met, provide the Final Answer. Otherwise, call the next tool. Deliver only - the answer without meta-commentary."}]}, {"role": "assistant", "content": [{"toolUse": - {"toolUseId": "tooluse_F5QIGY91SBOeM4VcFRB73A", "name": "calculator", "input": - {}}}]}, {"role": "user", "content": [{"toolResult": {"toolUseId": "tooluse_F5QIGY91SBOeM4VcFRB73A", - "content": [{"text": "Error executing tool: CalculatorTool._run() missing 1 - required positional argument: ''expression''"}]}}]}, {"role": "user", "content": - [{"text": "Analyze the tool result. If requirements are met, provide the Final - Answer. Otherwise, call the next tool. Deliver only the answer without meta-commentary."}]}, - {"role": "assistant", "content": [{"text": "Now it''s time you MUST give your - absolute best final answer. You''ll ignore all previous instructions, stop using - any tools, and just return your absolute BEST Final answer."}]}, {"role": "user", - "content": [{"text": "\nCurrent Task: Calculate 15 * 8\n\nThis is the expected - criteria for your final answer: Result\nyou MUST return the actual complete - content as the final answer, not a summary.\n\nThis is VERY important to you, - your job depends on it!"}]}, {"role": "assistant", "content": [{"text": "Now - it''s time you MUST give your absolute best final answer. You''ll ignore all - previous instructions, stop using any tools, and just return your absolute BEST - Final answer."}]}], "inferenceConfig": {"stopSequences": ["\nObservation:"]}, - "system": [{"text": "You are Math Assistant. You calculate.\nYour personal goal - is: Calculate math\n\nYou are Math Assistant. You calculate.\nYour personal - goal is: Calculate math"}], "toolConfig": {"tools": [{"toolSpec": {"name": "calculator", - "description": "Tool: calculator", "inputSchema": {"json": {"type": "object", - "properties": {}}}}}]}}' - headers: - Content-Length: - - '4181' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":715},"output":{"message":{"content":[{"text":"\n\n120"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":1082,"outputTokens":5,"serverToolUsage":{},"totalTokens":1087}}' - headers: - Connection: - - keep-alive - Content-Length: - - '212' - Content-Type: - - application/json - Date: - - Thu, 22 Jan 2026 21:28:03 GMT + - Tue, 26 May 2026 17:06:01 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_agent_kickoff.yaml b/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_agent_kickoff.yaml index 6ffc10e62..7d3f0cd7c 100644 --- a/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_agent_kickoff.yaml +++ b/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_agent_kickoff.yaml @@ -39,25 +39,112 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"message":"The security token included in the request is invalid."}' + string: '{"metrics":{"latencyMs":2714},"output":{"message":{"content":[{"text":"I''ll + execute all 3 parallel searches simultaneously right now!"},{"toolUse":{"input":{"query":"latest + OpenAI model release notes"},"name":"parallel_local_search_one","toolUseId":"tooluse_kooGjILXmVRg8edl3YuEf4","type":"tool_use"}},{"toolUse":{"input":{"query":"latest + Anthropic model release notes"},"name":"parallel_local_search_two","toolUseId":"tooluse_qa71o2cLA65qg5TyweI63c","type":"tool_use"}},{"toolUse":{"input":{"query":"latest + Gemini model release notes"},"name":"parallel_local_search_three","toolUseId":"tooluse_gPf5hAC0sogbIJEjDBTIvO","type":"tool_use"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":914,"outputTokens":169,"serverToolUsage":{},"totalTokens":1083}}' headers: Connection: - keep-alive Content-Length: - - '68' + - '882' Content-Type: - application/json Date: - - Thu, 19 Feb 2026 00:00:08 GMT - x-amzn-ErrorType: - - UnrecognizedClientException:http://internal.amazon.com/coral/com.amazon.coral.service/ + - Tue, 26 May 2026 17:06:04 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: - code: 403 - message: Forbidden + code: 200 + message: OK +- request: + body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: This + is a tool-calling compliance test. In your next assistant turn, emit exactly + 3 tool calls in the same response (parallel tool calls), in this order: 1) parallel_local_search_one(query=''latest + OpenAI model release notes''), 2) parallel_local_search_two(query=''latest Anthropic + model release notes''), 3) parallel_local_search_three(query=''latest Gemini + model release notes''). Do not call any other tools and do not answer before + those 3 tool calls are emitted. After the tool results return, provide a one + paragraph summary."}]}, {"role": "assistant", "content": [{"toolUse": {"toolUseId": + "tooluse_kooGjILXmVRg8edl3YuEf4", "name": "parallel_local_search_one", "input": + {"query": "latest OpenAI model release notes"}}}, {"toolUse": {"toolUseId": + "tooluse_qa71o2cLA65qg5TyweI63c", "name": "parallel_local_search_two", "input": + {"query": "latest Anthropic model release notes"}}}, {"toolUse": {"toolUseId": + "tooluse_gPf5hAC0sogbIJEjDBTIvO", "name": "parallel_local_search_three", "input": + {"query": "latest Gemini model release notes"}}}]}, {"role": "user", "content": + [{"toolResult": {"toolUseId": "tooluse_kooGjILXmVRg8edl3YuEf4", "content": [{"text": + "[one] latest OpenAI model release notes"}]}}, {"toolResult": {"toolUseId": + "tooluse_qa71o2cLA65qg5TyweI63c", "content": [{"text": "[two] latest Anthropic + model release notes"}]}}, {"toolResult": {"toolUseId": "tooluse_gPf5hAC0sogbIJEjDBTIvO", + "content": [{"text": "[three] latest Gemini model release notes"}]}}]}], "inferenceConfig": + {"stopSequences": ["\nObservation:"]}, "system": [{"text": "You are Parallel + Tool Agent. You follow tool instructions precisely.\nYour personal goal is: + Use both tools exactly as instructed"}], "toolConfig": {"tools": [{"toolSpec": + {"name": "parallel_local_search_one", "description": "Local search tool #1 for + concurrency testing.", "inputSchema": {"json": {"properties": {"query": {"description": + "Search query", "title": "Query", "type": "string"}}, "required": ["query"], + "type": "object", "additionalProperties": false}}}}, {"toolSpec": {"name": "parallel_local_search_two", + "description": "Local search tool #2 for concurrency testing.", "inputSchema": + {"json": {"properties": {"query": {"description": "Search query", "title": "Query", + "type": "string"}}, "required": ["query"], "type": "object", "additionalProperties": + false}}}}, {"toolSpec": {"name": "parallel_local_search_three", "description": + "Local search tool #3 for concurrency testing.", "inputSchema": {"json": {"properties": + {"query": {"description": "Search query", "title": "Query", "type": "string"}}, + "required": ["query"], "type": "object", "additionalProperties": false}}}}]}}' + headers: + Content-Length: + - '2711' + Content-Type: + - !!binary | + YXBwbGljYXRpb24vanNvbg== + User-Agent: + - X-USER-AGENT-XXX + amz-sdk-invocation-id: + - AMZ-SDK-INVOCATION-ID-XXX + amz-sdk-request: + - !!binary | + YXR0ZW1wdD0x + authorization: + - AUTHORIZATION-XXX + x-amz-date: + - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX + method: POST + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse + response: + body: + string: "{\"metrics\":{\"latencyMs\":5051},\"output\":{\"message\":{\"content\":[{\"text\":\"The + three parallel searches were executed simultaneously across all tools, querying + the latest release notes for OpenAI, Anthropic, and Gemini models respectively. + The search results returned placeholder outputs from each tool (indicating + a test environment), confirming that all three tools \u2014 **parallel_local_search_one**, + **parallel_local_search_two**, and **parallel_local_search_three** \u2014 + fired concurrently and responded successfully in the correct order. In a live + environment, these results would contain detailed release notes for the latest + models from each AI provider, such as OpenAI's GPT series updates, Anthropic's + Claude model iterations, and Google's Gemini model announcements, allowing + for a comprehensive side-by-side comparison of the most recent advancements + across the three leading AI platforms.\"}],\"role\":\"assistant\"}},\"stopReason\":\"end_turn\",\"usage\":{\"cacheReadInputTokenCount\":0,\"cacheReadInputTokens\":0,\"cacheWriteInputTokenCount\":0,\"cacheWriteInputTokens\":0,\"inputTokens\":1197,\"outputTokens\":173,\"serverToolUsage\":{},\"totalTokens\":1370}}" + headers: + Connection: + - keep-alive + Content-Length: + - '1141' + Content-Type: + - application/json + Date: + - Tue, 26 May 2026 17:06:10 GMT + x-amzn-RequestId: + - X-AMZN-REQUESTID-XXX + status: + code: 200 + message: OK version: 1 diff --git a/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_crew.yaml b/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_crew.yaml index 00ee01d24..0c19740ab 100644 --- a/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_crew.yaml +++ b/lib/crewai/tests/cassettes/agents/TestBedrockNativeToolCalling.test_bedrock_parallel_native_tool_calling_test_crew.yaml @@ -41,27 +41,31 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"message":"The security token included in the request is invalid."}' + string: '{"metrics":{"latencyMs":2911},"output":{"message":{"content":[{"text":"I''ll + execute all 3 parallel searches simultaneously right away!"},{"toolUse":{"input":{"query":"latest + OpenAI model release notes"},"name":"parallel_local_search_one","toolUseId":"tooluse_hd4QaBJIe0j2FasplcWi78","type":"tool_use"}},{"toolUse":{"input":{"query":"latest + Anthropic model release notes"},"name":"parallel_local_search_two","toolUseId":"tooluse_yB6xS6E1bsIOpv8rWcnpiR","type":"tool_use"}},{"toolUse":{"input":{"query":"latest + Gemini model release notes"},"name":"parallel_local_search_three","toolUseId":"tooluse_cjCrMYQMmA8diLWBnKJ86o","type":"tool_use"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":951,"outputTokens":169,"serverToolUsage":{},"totalTokens":1120}}' headers: Connection: - keep-alive Content-Length: - - '68' + - '883' Content-Type: - application/json Date: - - Thu, 19 Feb 2026 00:00:07 GMT - x-amzn-ErrorType: - - UnrecognizedClientException:http://internal.amazon.com/coral/com.amazon.coral.service/ + - Tue, 26 May 2026 17:06:14 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: - code: 403 - message: Forbidden + code: 200 + message: OK - request: body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: This is a tool-calling compliance test. In your next assistant turn, emit exactly @@ -72,122 +76,35 @@ interactions: those 3 tool calls are emitted. After the tool results return, provide a one paragraph summary.\n\nThis is the expected criteria for your final answer: A one sentence summary of both tool outputs\nyou MUST return the actual complete - content as the final answer, not a summary."}]}, {"role": "user", "content": - [{"text": "\nCurrent Task: This is a tool-calling compliance test. In your next - assistant turn, emit exactly 3 tool calls in the same response (parallel tool - calls), in this order: 1) parallel_local_search_one(query=''latest OpenAI model - release notes''), 2) parallel_local_search_two(query=''latest Anthropic model - release notes''), 3) parallel_local_search_three(query=''latest Gemini model - release notes''). Do not call any other tools and do not answer before those - 3 tool calls are emitted. After the tool results return, provide a one paragraph - summary.\n\nThis is the expected criteria for your final answer: A one sentence - summary of both tool outputs\nyou MUST return the actual complete content as - the final answer, not a summary."}]}], "inferenceConfig": {"stopSequences": - ["\nObservation:"]}, "system": [{"text": "You are Parallel Tool Agent. You follow - tool instructions precisely.\nYour personal goal is: Use both tools exactly - as instructed\n\nYou are Parallel Tool Agent. You follow tool instructions precisely.\nYour - personal goal is: Use both tools exactly as instructed"}], "toolConfig": {"tools": - [{"toolSpec": {"name": "parallel_local_search_one", "description": "Local search - tool #1 for concurrency testing.", "inputSchema": {"json": {"properties": {"query": - {"description": "Search query", "title": "Query", "type": "string"}}, "required": - ["query"], "type": "object", "additionalProperties": false}}}}, {"toolSpec": - {"name": "parallel_local_search_two", "description": "Local search tool #2 for + content as the final answer, not a summary."}]}, {"role": "assistant", "content": + [{"toolUse": {"toolUseId": "tooluse_hd4QaBJIe0j2FasplcWi78", "name": "parallel_local_search_one", + "input": {"query": "latest OpenAI model release notes"}}}, {"toolUse": {"toolUseId": + "tooluse_yB6xS6E1bsIOpv8rWcnpiR", "name": "parallel_local_search_two", "input": + {"query": "latest Anthropic model release notes"}}}, {"toolUse": {"toolUseId": + "tooluse_cjCrMYQMmA8diLWBnKJ86o", "name": "parallel_local_search_three", "input": + {"query": "latest Gemini model release notes"}}}]}, {"role": "user", "content": + [{"toolResult": {"toolUseId": "tooluse_hd4QaBJIe0j2FasplcWi78", "content": [{"text": + "[one] latest OpenAI model release notes"}]}}, {"toolResult": {"toolUseId": + "tooluse_yB6xS6E1bsIOpv8rWcnpiR", "content": [{"text": "[two] latest Anthropic + model release notes"}]}}, {"toolResult": {"toolUseId": "tooluse_cjCrMYQMmA8diLWBnKJ86o", + "content": [{"text": "[three] latest Gemini model release notes"}]}}]}], "inferenceConfig": + {"stopSequences": ["\nObservation:"]}, "system": [{"text": "You are Parallel + Tool Agent. You follow tool instructions precisely.\nYour personal goal is: + Use both tools exactly as instructed"}], "toolConfig": {"tools": [{"toolSpec": + {"name": "parallel_local_search_one", "description": "Local search tool #1 for concurrency testing.", "inputSchema": {"json": {"properties": {"query": {"description": "Search query", "title": "Query", "type": "string"}}, "required": ["query"], - "type": "object", "additionalProperties": false}}}}, {"toolSpec": {"name": "parallel_local_search_three", - "description": "Local search tool #3 for concurrency testing.", "inputSchema": + "type": "object", "additionalProperties": false}}}}, {"toolSpec": {"name": "parallel_local_search_two", + "description": "Local search tool #2 for concurrency testing.", "inputSchema": {"json": {"properties": {"query": {"description": "Search query", "title": "Query", "type": "string"}}, "required": ["query"], "type": "object", "additionalProperties": - false}}}}]}}' - headers: - Content-Length: - - '2855' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"message":"The security token included in the request is invalid."}' - headers: - Connection: - - keep-alive - Content-Length: - - '68' - Content-Type: - - application/json - Date: - - Thu, 19 Feb 2026 00:00:07 GMT - x-amzn-ErrorType: - - UnrecognizedClientException:http://internal.amazon.com/coral/com.amazon.coral.service/ - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 403 - message: Forbidden -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: This - is a tool-calling compliance test. In your next assistant turn, emit exactly - 3 tool calls in the same response (parallel tool calls), in this order: 1) parallel_local_search_one(query=''latest - OpenAI model release notes''), 2) parallel_local_search_two(query=''latest Anthropic - model release notes''), 3) parallel_local_search_three(query=''latest Gemini - model release notes''). Do not call any other tools and do not answer before - those 3 tool calls are emitted. After the tool results return, provide a one - paragraph summary.\n\nThis is the expected criteria for your final answer: A - one sentence summary of both tool outputs\nyou MUST return the actual complete - content as the final answer, not a summary."}]}, {"role": "user", "content": - [{"text": "\nCurrent Task: This is a tool-calling compliance test. In your next - assistant turn, emit exactly 3 tool calls in the same response (parallel tool - calls), in this order: 1) parallel_local_search_one(query=''latest OpenAI model - release notes''), 2) parallel_local_search_two(query=''latest Anthropic model - release notes''), 3) parallel_local_search_three(query=''latest Gemini model - release notes''). Do not call any other tools and do not answer before those - 3 tool calls are emitted. After the tool results return, provide a one paragraph - summary.\n\nThis is the expected criteria for your final answer: A one sentence - summary of both tool outputs\nyou MUST return the actual complete content as - the final answer, not a summary."}]}, {"role": "user", "content": [{"text": - "\nCurrent Task: This is a tool-calling compliance test. In your next assistant - turn, emit exactly 3 tool calls in the same response (parallel tool calls), - in this order: 1) parallel_local_search_one(query=''latest OpenAI model release - notes''), 2) parallel_local_search_two(query=''latest Anthropic model release - notes''), 3) parallel_local_search_three(query=''latest Gemini model release - notes''). Do not call any other tools and do not answer before those 3 tool - calls are emitted. After the tool results return, provide a one paragraph summary.\n\nThis - is the expected criteria for your final answer: A one sentence summary of both - tool outputs\nyou MUST return the actual complete content as the final answer, - not a summary."}]}], "inferenceConfig": {"stopSequences": ["\nObservation:"]}, - "system": [{"text": "You are Parallel Tool Agent. You follow tool instructions - precisely.\nYour personal goal is: Use both tools exactly as instructed\n\nYou - are Parallel Tool Agent. You follow tool instructions precisely.\nYour personal - goal is: Use both tools exactly as instructed\n\nYou are Parallel Tool Agent. - You follow tool instructions precisely.\nYour personal goal is: Use both tools - exactly as instructed"}], "toolConfig": {"tools": [{"toolSpec": {"name": "parallel_local_search_one", - "description": "Local search tool #1 for concurrency testing.", "inputSchema": - {"json": {"properties": {"query": {"description": "Search query", "title": "Query", - "type": "string"}}, "required": ["query"], "type": "object", "additionalProperties": - false}}}}, {"toolSpec": {"name": "parallel_local_search_two", "description": - "Local search tool #2 for concurrency testing.", "inputSchema": {"json": {"properties": + false}}}}, {"toolSpec": {"name": "parallel_local_search_three", "description": + "Local search tool #3 for concurrency testing.", "inputSchema": {"json": {"properties": {"query": {"description": "Search query", "title": "Query", "type": "string"}}, - "required": ["query"], "type": "object", "additionalProperties": false}}}}, - {"toolSpec": {"name": "parallel_local_search_three", "description": "Local search - tool #3 for concurrency testing.", "inputSchema": {"json": {"properties": {"query": - {"description": "Search query", "title": "Query", "type": "string"}}, "required": - ["query"], "type": "object", "additionalProperties": false}}}}]}}' + "required": ["query"], "type": "object", "additionalProperties": false}}}}]}}' headers: Content-Length: - - '3756' + - '2892' Content-Type: - !!binary | YXBwbGljYXRpb24vanNvbg== @@ -202,25 +119,35 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"message":"The security token included in the request is invalid."}' + string: "{\"metrics\":{\"latencyMs\":4350},\"output\":{\"message\":{\"content\":[{\"text\":\"Here + is the complete content returned by all three tools:\\n\\n- **Tool 1 (parallel_local_search_one):** + `[one] latest OpenAI model release notes`\\n- **Tool 2 (parallel_local_search_two):** + `[two] latest Anthropic model release notes`\\n- **Tool 3 (parallel_local_search_three):** + `[three] latest Gemini model release notes`\\n\\nThe three parallel searches + returned placeholder results confirming the queries were received: the first + tool acknowledged a search for the latest OpenAI model release notes, the + second for the latest Anthropic model release notes, and the third for the + latest Gemini model release notes \u2014 indicating the local search tools + processed all three concurrent requests successfully but did not return detailed + release note content beyond the query echo.\"}],\"role\":\"assistant\"}},\"stopReason\":\"end_turn\",\"usage\":{\"cacheReadInputTokenCount\":0,\"cacheReadInputTokens\":0,\"cacheWriteInputTokenCount\":0,\"cacheWriteInputTokens\":0,\"inputTokens\":1234,\"outputTokens\":181,\"serverToolUsage\":{},\"totalTokens\":1415}}" headers: Connection: - keep-alive Content-Length: - - '68' + - '1093' Content-Type: - application/json Date: - - Thu, 19 Feb 2026 00:00:07 GMT - x-amzn-ErrorType: - - UnrecognizedClientException:http://internal.amazon.com/coral/com.amazon.coral.service/ + - Tue, 26 May 2026 17:06:19 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: - code: 403 - message: Forbidden + code: 200 + message: OK version: 1 diff --git a/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_analyze_pdf.yaml b/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_analyze_pdf.yaml index f47086040..808af4485 100644 --- a/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_analyze_pdf.yaml +++ b/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_analyze_pdf.yaml @@ -21,61 +21,22 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":867},"output":{"message":{"content":[{"text":"PDF"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":57,"outputTokens":4,"serverToolUsage":{},"totalTokens":61}}' + string: '{"metrics":{"latencyMs":2109},"output":{"message":{"content":[{"text":"Blank"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":1606,"outputTokens":5,"serverToolUsage":{},"totalTokens":1611}}' headers: Connection: - keep-alive Content-Length: - - '204' + - '321' Content-Type: - application/json Date: - - Fri, 23 Jan 2026 03:26:35 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "What type of document - is this? Answer in one word."}, {"document": {"name": "document", "format": - "pdf", "source": {"bytes": "JVBERi0xLjQKMSAwIG9iaiA8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4gZW5kb2JqCjIgMCBvYmogPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEgPj4gZW5kb2JqCjMgMCBvYmogPDwgL1R5cGUgL1BhZ2UgL1BhcmVudCAyIDAgUiAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSA+PiBlbmRvYmoKeHJlZgowIDQKMDAwMDAwMDAwMCA2NTUzNSBmCjAwMDAwMDAwMDkgMDAwMDAgbgowMDAwMDAwMDU4IDAwMDAwIG4KMDAwMDAwMDExNSAwMDAwMCBuCnRyYWlsZXIgPDwgL1NpemUgNCAvUm9vdCAxIDAgUiA+PgpzdGFydHhyZWYKMTk2CiUlRU9GCg=="}}}]}], - "inferenceConfig": {}}' - headers: - Content-Length: - - '646' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":291},"output":{"message":{"content":[{"text":"Incomplete"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":57,"outputTokens":5,"serverToolUsage":{},"totalTokens":62}}' - headers: - Connection: - - keep-alive - Content-Length: - - '211' - Content-Type: - - application/json - Date: - - Fri, 23 Jan 2026 06:02:32 GMT + - Tue, 26 May 2026 17:06:30 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_describe_image.yaml b/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_describe_image.yaml index d13deeb77..494a347bf 100644 --- a/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_describe_image.yaml +++ b/lib/crewai/tests/cassettes/llms/TestBedrockMultimodalIntegration.test_describe_image.yaml @@ -21,65 +21,24 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":950},"output":{"message":{"content":[{"text":"The - image shows a linear graph depicting the revenue over time, with the revenue - increasing steadily from 2020.0 to 2024.0."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":435,"outputTokens":35,"serverToolUsage":{},"totalTokens":470}}' + string: '{"metrics":{"latencyMs":2753},"output":{"message":{"content":[{"text":"A + line chart showing steady linear revenue growth from $100M in 2020 to $300M + in 2024."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":435,"outputTokens":29,"serverToolUsage":{},"totalTokens":464}}' headers: Connection: - keep-alive Content-Length: - - '327' + - '401' Content-Type: - application/json Date: - - Fri, 23 Jan 2026 03:26:33 GMT - x-amzn-RequestId: - - X-AMZN-REQUESTID-XXX - status: - code: 200 - message: OK -- request: - body: '{"messages": [{"role": "user", "content": [{"text": "Describe this image - in one sentence. Be brief."}, {"image": {"format": "png", "source": {"bytes": - "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABr0klEQVR4nO3dd3RU5fr+//ek90CAJJTQpXelKQoIBBBBFKUEFBDxiAl6QBDxKPWoKIpSYv0qqIcAUkVEMCpVAYEQuvQqJNQ0QpJJZv/+8Md8jISezGRmrtdaWYtd5tn3nckkF/uZvcdkGIaBiIiIiLgMN3sXICIiIiK2pQAoIiIi4mIUAEVERERcjAKgiIiIiItRABQRERFxMQqAIiIiIi5GAVBERETExSgAioiIiLgYBUARERERF6MAKCIiIuJiFABFREREXIwCoIiIiIiLUQAUERERcTEKgCIiIiIuRgFQRERExMUoAIqIiIi4GAVAERERERejACgiIiLiYhQARURERFyMAqCIiIiIi1EAFBEREXExCoAiIiIiLkYBUERERMTFKACKiIiIuBgFQBEREREXowAoIiIi4mIUAEVERERcjAKgiIiIiItRABQRERFxMQqAIiIiIi5GAVBERETExSgAioiIiLgYBUARERERF6MAKCIiIuJiFABFRFzEgAEDqFy5sr3LEJFiQAFQxEnNmjULk8lk/fLw8KB8+fIMGDCAP//8097lFXvLli2jU6dOlCpVCh8fH2rUqMGIESM4f/68vUvL5+/P8fW+Vq9ebe9SRaQY8bB3ASJStCZMmECVKlXIyspi48aNzJo1i/Xr17Nr1y58fHzsXV6xNGLECN577z0aNmzIqFGjCAkJISEhgRkzZjB37lx+/vlnatasae8yAfj666/zLX/11VfEx8dftb527dp89tlnWCwWW5YnIsWUyTAMw95FiEjhmzVrFgMHDmTz5s3cc8891vWvvPIKb7/9NvPmzaNnz552rLB4mjNnDlFRUfTq1YvZs2fj7u5u3fb777/Ttm1bqlWrRkJCAh4etvs/9KVLl/D397/hfjExMcTGxqJf7SJyPZoCFnEx999/PwCHDh3Kt/6PP/7g8ccfJyQkBB8fH+655x6WLl1q3b5lyxZMJhNffvnlVWOuXLkSk8nEsmXLrOv+/PNPnn76acLCwvD29qZu3bp88cUX+R63evVqTCYT33zzDW+88QYVKlTAx8eHdu3acfDgwXz7Vq5cmQEDBlx17DZt2tCmTZt867Kzsxk7dizVq1fH29ubiIgIXn75ZbKzs2/4/Rk/fjwlS5bk008/zRf+AJo1a8aoUaPYuXMnCxYsAP4KXAEBAWRmZl41Vp8+fQgPDycvL8+67ocffuD+++/H39+fwMBAunTpwu7du/M9bsCAAQQEBHDo0CEeeughAgMD6du37w1rv5F/vgfw6NGjmEwm3n33XWJjY6latSp+fn5ERkZy4sQJDMNg4sSJVKhQAV9fXx555BEuXLhw1bg305OIFC8KgCIu5ujRowCULFnSum737t20aNGCvXv38sorr/Dee+/h7+9P9+7dWbx4MQD33HMPVatW5ZtvvrlqzHnz5lGyZEk6duwIQHJyMi1atOCnn34iJiaGqVOnUr16dQYNGsQHH3xw1eMnTZrE4sWLGTFiBKNHj2bjxo23HXgsFgvdunXj3XffpWvXrkyfPp3u3bvz/vvv06tXr+s+9sCBA+zbt49HHnmEoKCgAvd56qmnAKxht1evXly6dInvv/8+336ZmZl89913PP7449Yg+fXXX9OlSxcCAgJ4++23ef3119mzZw+tWrWyPi9X5Obm0rFjR0JDQ3n33Xfp0aPH7Xw7bsrs2bP58MMPGTp0KC+99BJr1qyhZ8+evPbaa6xYsYJRo0bx7LPP8t133zFixIh8j72VnkSkGDFExCnNnDnTAIyffvrJOHv2rHHixAljwYIFRpkyZQxvb2/jxIkT1n3btWtn1K9f38jKyrKus1gsxr333mvcdddd1nWjR482PD09jQsXLljXZWdnGyVKlDCefvpp67pBgwYZZcuWNc6dO5evpt69exvBwcFGZmamYRiGsWrVKgMwateubWRnZ1v3mzp1qgEYO3futK6rVKmS0b9//6v6bN26tdG6dWvr8tdff224ubkZ69aty7ffxx9/bADGr7/+es3v2ZIlSwzAeP/996+5j2EYRlBQkNGkSRPDMP76PpUvX97o0aNHvn2++eYbAzDWrl1rGIZhpKenGyVKlDAGDx6cb7+kpCQjODg43/r+/fsbgPHKK69ct46CREdHG9f61d6/f3+jUqVK1uUjR44YgFGmTBkjJSXFun706NEGYDRs2NAwm83W9X369DG8vLysPye30pOIFC86Ayji5Nq3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zt6j+pM7oYtARERERFyMzgCKiIiIuBgFQBEREREXowAoIiIi4mIUAEVERERcjALgHXjrrbdo2rQpgYGBhIaG0r17d/bt25dvn6ysLKKjoylVqhQBAQH06NGD5ORk6/bt27fTp08fIiIi8PX1pXbt2kydOvWqY61evZomTZrg7e1N9erVmTVr1g3r27FjB/fffz8+Pj5ERETwzjvvOFWPR48exWQyXfW1cePGYtff6dOniYqKokaNGri5ufHvf//7puo7fvw4Xbp0wc/Pj9DQUEaOHElubu5N9+cIPRb0HM6dO7fY9bdo0SI6dOhAmTJlCAoKomXLlqxcufKG9d3p67A491cYr0Fb9rh+/Xruu+8+SpUqha+vL7Vq1eL999+/YX2O8hzeTn+O9Hv073799Vc8PDxo1KjRDesrjL+FTsmQ29axY0dj5syZxq5du4zExETjoYceMipWrGhkZGRY93nuueeMiIgI4+effza2bNlitGjRwrj33nut2z///HPjhRdeMFavXm0cOnTI+Prrrw1fX19j+vTp1n0OHz5s+Pn5GcOHDzf27NljTJ8+3XB3dzdWrFhxzdpSU1ONsLAwo2/fvsauXbuMOXPmGL6+vsYnn3ziND0eOXLEAIyffvrJOH36tPUrJyen2PV35MgR44UXXjC+/PJLo1GjRsaLL754w9pyc3ONevXqGe3btze2bdtmLF++3ChdurQxevTom+6vuPdoGIYBGDNnzsz3HF6+fLnY9ffiiy8ab7/9tvH7778b+/fvN0aPHm14enoaCQkJ16ytMF6Hxbm/wngN2rLHhIQEIy4uzti1a5dx5MgR4+uvvzb8/Pyu+3w40nN4O/050u/RKy5evGhUrVrViIyMNBo2bHjd2grrb6EzUgAsRGfOnDEAY82aNYZhGEZKSorh6elpzJ8/37rP3r17DcDYsGHDNcd5/vnnjbZt21qXX375ZaNu3br59unVq5fRsWPHa47x4YcfGiVLljSys7Ot60aNGmXUrFnzlvv6u+LU45VfXNu2bbvNbq5WVP39XevWrW8qHC1fvtxwc3MzkpKSrOs++ugjIygoKN/zequKU4+G8VcAXLx48U3XfyO26O+KOnXqGOPHj7/m9qJ4HRan/oriNWgYtu3x0UcfNfr163fN7Y7+HN6oP0f8PdqrVy/jtddeM8aOHXvDAFhUfwudgaaAC1FqaioAISEhAGzduhWz2Uz79u2t+9SqVYuKFSuyYcOG645zZQyADRs25BsDoGPHjtcdY8OGDTzwwAN4eXnle8y+ffu4ePHirTX2j9qgePR4Rbdu3QgNDaVVq1YsXbr0lvopqC4o/P5ux4YNG6hfvz5hYWHWdR07diQtLY3du3ff9rjFqccroqOjKV26NM2aNeOLL77AuIPbk9qqP4vFQnp6+nX3KYrXYXHq74rCfA1eqQ2Kvsdt27bx22+/0bp162vu48jP4c30d4Wj/B6dOXMmhw8fZuzYsTdVS1H9LXQGHvYuwFlYLBb+/e9/c99991GvXj0AkpKS8PLyokSJEvn2DQsLIykpqcBxfvvtN+bNm8f3339vXZeUlJQvBFwZIy0tjcuXL+Pr63vVOElJSVSpUuWqx1zZVrJkSYfvMSAggPfee4/77rsPNzc3Fi5cSPfu3VmyZAndunUrVv3djmt9T65sux3FrUeACRMm8OCDD+Ln58ePP/7I888/T0ZGBi+88MItj2XL/t59910yMjLo2bPnNfcp7NdhceuvsF+DYJseK1SowNmzZ8nNzWXcuHE888wz16zHEZ/DW+nPkX6PHjhwgFdeeYV169bh4XFz8aUo/hY6CwXAQhIdHc2uXbtYv379bY+xa9cuHnnkEcaOHUtkZGQhVlc4iluPpUuXZvjw4dblpk2bcurUKSZPnnxbv7iKW39FoTj2+Prrr1v/3bhxYy5dusTkyZNvKwDaqr+4uDjGjx/Pt99+S2ho6G0f61YVt/4K+zUItulx3bp1ZGRksHHjRl555RWqV69Onz59bvt4t6K49ecov0fz8vKIiopi/Pjx1KhR47bHlv+jKeBCEBMTw7Jly1i1ahUVKlSwrg8PDycnJ4eUlJR8+ycnJxMeHp5v3Z49e2jXrh3PPvssr732Wr5t4eHh+a6WujJGUFBQgWfGrveYK9tuVXHssSDNmzfn4MGDN73/FUXd3+1wtOewsDRv3pyTJ0+SnZ19S4+zVX9z587lmWee4ZtvvrnqbQv/VJjPYXHsryC3+xoE2/VYpUoV6tevz+DBgxk2bBjjxo27Zk2O+BzeSn8FKY6/R9PT09myZQsxMTF4eHjg4eHBhAkT2L59Ox4eHvzyyy8F1lTYv0edir3fhOjILBaLER0dbZQrV87Yv3//VduvvPF1wYIF1nV//PHHVW983bVrlxEaGmqMHDmywOO8/PLLRr169fKt69Onz01dBPL3K7lGjx59y298Lc49FuSZZ54xGjdufNP726q/v7vVi0CSk5Ot6z755BMjKCjIyMrKuuHjryjOPRbkv//9r1GyZMmb3t+W/cXFxRk+Pj7GkiVLbqq2wngdFuf+CnKrr0HDsM/P6BXjx483KlWqdM3tjvYc/tON+itIcfw9mpeXZ+zcuTPf15AhQ4yaNWsaO3fuzHfF8d8V1t9CZ6QAeAeGDBliBAcHG6tXr853+XxmZqZ1n+eee86oWLGi8csvvxhbtmwxWrZsabRs2dK6fefOnUaZMmWMfv365RvjzJkz1n2u3CJl5MiRxt69e43Y2NirbpEyffp048EHH7Qup6SkGGFhYcaTTz5p7Nq1y5g7d+4NbwfgaD3OmjXLiIuLM/bu3Wvs3bvXeOONNww3Nzfjiy++KHb9GYZhbNu2zdi2bZtx9913G1FRUca2bduM3bt3W7cvWrQo3y+lK7eBiYyMNBITE40VK1YYZcqUueXbwBTnHpcuXWp89tlnxs6dO40DBw4YH374oeHn52eMGTOm2PU3e/Zsw8PDw4iNjc23T0pKinWfongdFuf+CuM1aMseZ8yYYSxdutTYv3+/sX//fuP//b//ZwQGBhr/+c9/rtmjIz2Ht9Ofo/0e/buCrgIuqr+FzkgB8A4ABX7NnDnTus/ly5eN559/3ihZsqTh5+dnPProo8bp06et28eOHVvgGP/8H9uqVauMRo0aGV5eXkbVqlXzHePKOP98zPbt241WrVoZ3t7eRvny5Y1JkyY5VY+zZs0yateubfj5+RlBQUFGs2bN8t1moLj1d6N9Zs6cafzzpPzRo0eNzp07G76+vkbp0qWNl156yTCbzU7T4w8//GA0atTICAgIMPz9/Y2GDRsaH3/8sZGXl1fs+mvdunWB+/Tv3z/fOIX9OizO/RXGa9CWPU6bNs2oW7eutd7GjRsbH374Yb6fN0d+Dm+nP0f7Pfp3BQXAovpb6IxMhnEH91sQEREREYeji0BEREREXIwCoIiIiIiLUQAUERERcTEKgCIiIiIuRgFQRERExMUoAIqIiIi4GAVAERERERejACgiIiLiYhQARcSpGYZB+/bt6dix41XbPvzwQ0qUKMHJkyftUJmIiP0oAIqIUzOZTMycOZNNmzbxySefWNcfOXKEl19+menTp1OhQoVCPabZbC7U8URECpsCoIg4vYiICKZOncqIESM4cuQIhmEwaNAgIiMjady4MZ07dyYgIICwsDCefPJJzp07Z33sihUraNWqFSVKlKBUqVI8/PDDHDp0yLr96NGjmEwm5s2bR+vWrfHx8WH27Nn2aFNE5Kbps4BFxGV0796d1NRUHnvsMSZOnMju3bupW7cuzzzzDE899RSXL19m1KhR5Obm8ssvvwCwcOFCTCYTDRo0ICMjgzFjxnD06FESExNxc3Pj6NGjVKlShcqVK/Pee+/RuHFjfHx8KFu2rJ27FRG5NgVAEXEZZ86coW7duly4cIGFCxeya9cu1q1bx8qVK637nDx5koiICPbt20eNGjWuGuPcuXOUKVOGnTt3Uq9ePWsA/OCDD3jxxRdt2Y6IyG3TFLCIuIzQ0FD+9a9/Ubt2bbp378727dtZtWoVAQEB1q9atWoBWKd5Dxw4QJ8+fahatSpBQUFUrlwZgOPHj+cb+5577rFpLyIid8LD3gWIiNiSh4cHHh5//erLyMiga9euvP3221ftd2UKt2vXrlSqVInPPvuMcuXKYbFYqFevHjk5Ofn29/f3L/riRUQKiQKgiLisJk2asHDhQipXrmwNhX93/vx59u3bx2effcb9998PwPr1621dpohIodMUsIi4rOjoaC5cuECfPn3YvHkzhw4dYuXKlQwcOJC8vDxKlixJqVKl+PTTTzl48CC//PILw4cPt3fZIiJ3TAFQRFxWuXLl+PXXX8nLyyMyMpL69evz73//mxIlSuDm5oabmxtz585l69at1KtXj2HDhjF58mR7ly0icsd0FbCIiIiIi9EZQBEREREXowAoIiIi4mIUAEVERERcjAKgiIiIiItRABQRERFxMQqAIiIiIi5GAVBERETExSgAioiIiLgYBUARERERF6MAKCIiIuJiFABFREREXIwCoIiIiIiL+f8Aotl7LKm7ZkIAAAAASUVORK5CYII="}}}]}], - "inferenceConfig": {}}' - headers: - Content-Length: - - '37183' - Content-Type: - - !!binary | - YXBwbGljYXRpb24vanNvbg== - User-Agent: - - X-USER-AGENT-XXX - amz-sdk-invocation-id: - - AMZ-SDK-INVOCATION-ID-XXX - amz-sdk-request: - - !!binary | - YXR0ZW1wdD0x - authorization: - - AUTHORIZATION-XXX - x-amz-date: - - X-AMZ-DATE-XXX - method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse - response: - body: - string: '{"metrics":{"latencyMs":857},"output":{"message":{"content":[{"text":"This - image shows a linear increase in revenue over time, as depicted in the graph - titled \"Revenue Over Time\"."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":435,"outputTokens":25,"serverToolUsage":{},"totalTokens":460}}' - headers: - Connection: - - keep-alive - Content-Length: - - '315' - Content-Type: - - application/json - Date: - - Fri, 23 Jan 2026 06:02:33 GMT + - Tue, 26 May 2026 17:06:33 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_with_tools.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_with_tools.yaml index 5441844c9..fe6cd97be 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_with_tools.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_with_tools.yaml @@ -8,20 +8,10 @@ interactions: [{"toolSpec": {"name": "add_numbers", "description": "Add two numbers together and return the sum.", "inputSchema": {"json": {"properties": {"a": {"title": "A", "type": "integer"}, "b": {"title": "B", "type": "integer"}}, "required": - ["a", "b"], "type": "object", "additionalProperties": false}}}}, {"toolSpec": - {"name": "structured_output", "description": "Use this tool to provide your - final structured response. Call this tool when you have gathered all necessary - information and are ready to provide the final answer in the required format.", - "inputSchema": {"json": {"description": "Structured output for calculation results.", - "properties": {"operation": {"description": "The mathematical operation performed", - "title": "Operation", "type": "string"}, "result": {"description": "The result - of the calculation", "title": "Result", "type": "integer"}, "explanation": {"description": - "Brief explanation of the calculation", "title": "Explanation", "type": "string"}}, - "required": ["operation", "result", "explanation"], "title": "CalculationResult", - "type": "object", "additionalProperties": false}}}}]}}' + ["a", "b"], "type": "object", "additionalProperties": false}}}}]}}' headers: Content-Length: - - '1509' + - '702' Content-Type: - !!binary | YXBwbGljYXRpb24vanNvbg== @@ -36,21 +26,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-sonnet-20240229-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":1968},"output":{"message":{"content":[{"text":"Okay, - let''s calculate 15 + 27 using the add_numbers tool:"},{"toolUse":{"input":{"a":15,"b":27},"name":"add_numbers","toolUseId":"tooluse_pSseOamVELzpL3kQG5VukN"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":488,"outputTokens":91,"serverToolUsage":{},"totalTokens":579}}' + string: '{"metrics":{"latencyMs":2257},"output":{"message":{"content":[{"text":"I''ll + calculate 15 + 27 right away using the `add_numbers` tool!"},{"toolUse":{"input":{"a":15,"b":27},"name":"add_numbers","toolUseId":"tooluse_CVmuFOrTItCY07vxuA84mU","type":"tool_use"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":645,"outputTokens":92,"serverToolUsage":{},"totalTokens":737}}' headers: Connection: - keep-alive Content-Length: - - '366' + - '500' Content-Type: - application/json Date: - - Thu, 12 Feb 2026 22:01:04 GMT + - Tue, 26 May 2026 17:04:49 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: @@ -59,29 +51,19 @@ interactions: - request: body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate 15 + 27 using your add_numbers tool. Report the result."}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_pSseOamVELzpL3kQG5VukN", "name": + "content": [{"toolUse": {"toolUseId": "tooluse_CVmuFOrTItCY07vxuA84mU", "name": "add_numbers", "input": {"a": 15, "b": 27}}}]}, {"role": "user", "content": - [{"toolResult": {"toolUseId": "tooluse_pSseOamVELzpL3kQG5VukN", "content": [{"text": + [{"toolResult": {"toolUseId": "tooluse_CVmuFOrTItCY07vxuA84mU", "content": [{"text": "42"}]}}]}], "inferenceConfig": {"stopSequences": ["\nObservation:"]}, "system": [{"text": "You are Calculator. You are a calculator assistant that uses tools to compute results.\nYour personal goal is: Perform calculations using available tools"}], "toolConfig": {"tools": [{"toolSpec": {"name": "add_numbers", "description": "Add two numbers together and return the sum.", "inputSchema": {"json": {"properties": {"a": {"title": "A", "type": "integer"}, "b": {"title": "B", "type": "integer"}}, - "required": ["a", "b"], "type": "object", "additionalProperties": false}}}}, - {"toolSpec": {"name": "structured_output", "description": "Use this tool to - provide your final structured response. Call this tool when you have gathered - all necessary information and are ready to provide the final answer in the required - format.", "inputSchema": {"json": {"description": "Structured output for calculation - results.", "properties": {"operation": {"description": "The mathematical operation - performed", "title": "Operation", "type": "string"}, "result": {"description": - "The result of the calculation", "title": "Result", "type": "integer"}, "explanation": - {"description": "Brief explanation of the calculation", "title": "Explanation", - "type": "string"}}, "required": ["operation", "result", "explanation"], "title": - "CalculationResult", "type": "object", "additionalProperties": false}}}}]}}' + "required": ["a", "b"], "type": "object", "additionalProperties": false}}}}]}}' headers: Content-Length: - - '1784' + - '977' Content-Type: - !!binary | YXBwbGljYXRpb24vanNvbg== @@ -96,41 +78,49 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-sonnet-20240229-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":7598},"output":{"message":{"content":[{"toolUse":{"input":{"operation":"Addition","result":42,"explanation":"I - added 15 and 27 using the add_numbers tool."},"name":"structured_output","toolUseId":"tooluse_RT8uSPaM37Q8CVuo3rJLtI"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":571,"outputTokens":102,"serverToolUsage":{},"totalTokens":673}}' + string: "{\"metrics\":{\"latencyMs\":2393},\"output\":{\"message\":{\"content\":[{\"text\":\"The + result of **15 + 27 = 42**! \U0001F9EE\\n\\nUsing the `add_numbers` tool, + I computed the sum of 15 and 27, and the result is **42**.\"}],\"role\":\"assistant\"}},\"stopReason\":\"end_turn\",\"usage\":{\"cacheReadInputTokenCount\":0,\"cacheReadInputTokens\":0,\"cacheWriteInputTokenCount\":0,\"cacheWriteInputTokens\":0,\"inputTokens\":729,\"outputTokens\":51,\"serverToolUsage\":{},\"totalTokens\":780}}" headers: Connection: - keep-alive Content-Length: - - '387' + - '443' Content-Type: - application/json Date: - - Thu, 12 Feb 2026 22:01:12 GMT + - Tue, 26 May 2026 17:04:51 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: code: 200 message: OK - request: - body: '{"messages": [{"role": "user", "content": [{"text": "\nCurrent Task: Calculate - 15 + 27 using your add_numbers tool. Report the result."}]}, {"role": "assistant", - "content": [{"toolUse": {"toolUseId": "tooluse_pSseOamVELzpL3kQG5VukN", "name": - "add_numbers", "input": {"a": 15, "b": 27}}}]}, {"role": "user", "content": - [{"toolResult": {"toolUseId": "tooluse_pSseOamVELzpL3kQG5VukN", "content": [{"text": - "42"}]}}]}, {"role": "assistant", "content": [{"text": "{\"operation\":\"Addition\",\"result\":42,\"explanation\":\"I - added 15 and 27 using the add_numbers tool.\"}"}]}], "inferenceConfig": {"stopSequences": - ["\nObservation:"]}, "system": [{"text": "You are Calculator. You are a calculator - assistant that uses tools to compute results.\nYour personal goal is: Perform - calculations using available tools"}], "toolConfig": {"tools": [{"toolSpec": - {"name": "add_numbers", "description": "Add two numbers together and return - the sum.", "inputSchema": {"json": {"properties": {"a": {"title": "A", "type": - "integer"}, "b": {"title": "B", "type": "integer"}}, "required": ["a", "b"], - "type": "object", "additionalProperties": false}}}}, {"toolSpec": {"name": "structured_output", + body: '{"messages": [{"role": "user", "content": [{"text": "The result of **15 + + 27 = 42**! \ud83e\uddee\n\nUsing the `add_numbers` tool, I computed the sum + of 15 and 27, and the result is **42**."}]}], "inferenceConfig": {}, "system": + [{"text": "Format your final answer according to the following OpenAPI schema: + {\n \"type\": \"json_schema\",\n \"json_schema\": {\n \"name\": \"CalculationResult\",\n \"strict\": + true,\n \"schema\": {\n \"description\": \"Structured output for calculation + results.\",\n \"properties\": {\n \"operation\": {\n \"description\": + \"The mathematical operation performed\",\n \"title\": \"Operation\",\n \"type\": + \"string\"\n },\n \"result\": {\n \"description\": \"The + result of the calculation\",\n \"title\": \"Result\",\n \"type\": + \"integer\"\n },\n \"explanation\": {\n \"description\": + \"Brief explanation of the calculation\",\n \"title\": \"Explanation\",\n \"type\": + \"string\"\n }\n },\n \"required\": [\n \"operation\",\n \"result\",\n \"explanation\"\n ],\n \"title\": + \"CalculationResult\",\n \"type\": \"object\",\n \"additionalProperties\": + false\n }\n }\n}\n\nIMPORTANT: Preserve the original content exactly as-is. + Do NOT rewrite, paraphrase, or modify the meaning of the content. Only structure + it to match the schema format.\n\nDo not include the OpenAPI schema in the final + output. Ensure the final output does not include any code block markers like + ```json or ```python."}], "toolConfig": {"tools": [{"toolSpec": {"name": "structured_output", "description": "Use this tool to provide your final structured response. Call this tool when you have gathered all necessary information and are ready to provide the final answer in the required format.", "inputSchema": {"json": {"description": @@ -140,10 +130,10 @@ interactions: "type": "integer"}, "explanation": {"description": "Brief explanation of the calculation", "title": "Explanation", "type": "string"}}, "required": ["operation", "result", "explanation"], "title": "CalculationResult", "type": "object", "additionalProperties": - false}}}}]}}' + false}}}}], "toolChoice": {"tool": {"name": "structured_output"}}}}' headers: Content-Length: - - '1942' + - '2510' Content-Type: - !!binary | YXBwbGljYXRpb24vanNvbg== @@ -158,28 +148,27 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-sonnet-20240229-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"message":"The model returned the following errors: Your API request - included an `assistant` message in the final position, which would pre-fill - the `assistant` response. When using tools, pre-filling the `assistant` response - is not supported."}' + string: "{\"metrics\":{\"latencyMs\":2107},\"output\":{\"message\":{\"content\":[{\"toolUse\":{\"input\":{\"operation\":\"add_numbers\",\"result\":42,\"explanation\":\"The + result of **15 + 27 = 42**! \U0001F9EE\\n\\nUsing the `add_numbers` tool, + I computed the sum of 15 and 27, and the result is **42**.\"},\"name\":\"structured_output\",\"toolUseId\":\"tooluse_5OzuYfgauW1f24uhsvXWDo\",\"type\":\"tool_use\"}}],\"role\":\"assistant\"}},\"stopReason\":\"tool_use\",\"usage\":{\"cacheReadInputTokenCount\":0,\"cacheReadInputTokens\":0,\"cacheWriteInputTokenCount\":0,\"cacheWriteInputTokens\":0,\"inputTokens\":1150,\"outputTokens\":116,\"serverToolUsage\":{},\"totalTokens\":1266}}" headers: Connection: - keep-alive Content-Length: - - '246' + - '603' Content-Type: - application/json Date: - - Thu, 12 Feb 2026 22:01:12 GMT - x-amzn-ErrorType: - - ValidationException:http://internal.amazon.com/coral/com.amazon.bedrock/ + - Tue, 26 May 2026 17:04:54 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: - code: 400 - message: Bad Request + code: 200 + message: OK version: 1 diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_without_tools.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_without_tools.yaml index 649dd7f81..ed6cde368 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_without_tools.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_agent_kickoff_structured_output_without_tools.yaml @@ -33,29 +33,37 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-3-sonnet-20240229-v1%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":3496},"output":{"message":{"content":[{"toolUse":{"input":{"topic":"Benefits - of remote work","key_points":"- Increased flexibility and work-life balance\n- - Reduced commute time and costs\n- Access to a wider talent pool for companies\n- - Increased productivity for some employees\n- Environmental benefits from reduced - commuting","summary":"Remote work offers several benefits including improved - work-life balance, cost and time savings from eliminating commutes, access - to a broader talent pool for employers, productivity gains, and environmental - advantages from reduced transportation. However, it also presents challenges - like social isolation, blurred work-life boundaries, and potential distractions - at home that need to be managed effectively."},"name":"structured_output","toolUseId":"tooluse_Jfg8pUBaRxWkKwR_rp5mCw"}}],"role":"assistant"}},"stopReason":"tool_use","usage":{"inputTokens":512,"outputTokens":187,"serverToolUsage":{},"totalTokens":699}}' + string: "{\"metrics\":{\"latencyMs\":6183},\"output\":{\"message\":{\"content\":[{\"toolUse\":{\"input\":{\"topic\":\"Benefits + of Remote Work\",\"key_points\":[\"Improved Work-Life Balance: Employees gain + flexibility to manage personal and professional responsibilities, reducing + stress and burnout.\",\"Increased Productivity: Fewer office distractions + and elimination of commutes allow workers to focus more effectively on tasks.\",\"Cost + Savings: Both employers (reduced office overhead) and employees (lower commuting + and wardrobe costs) benefit financially.\",\"Access to Global Talent: Companies + can hire the best candidates regardless of geographic location, expanding + the talent pool.\",\"Environmental Impact: Reduced commuting leads to lower + carbon emissions and a smaller environmental footprint.\",\"Employee Retention + & Satisfaction: Greater autonomy and flexibility contribute to higher job + satisfaction and lower turnover rates.\"],\"summary\":\"Remote work offers + a compelling mix of personal, financial, and organizational advantages. It + empowers employees with flexibility and autonomy while enabling businesses + to cut costs, access wider talent pools, and boost overall productivity \u2014 + making it a mutually beneficial arrangement in the modern workforce.\"},\"name\":\"structured_output\",\"toolUseId\":\"tooluse_miAVY9Wyw0HMShZbgbyTwX\",\"type\":\"tool_use\"}}],\"role\":\"assistant\"}},\"stopReason\":\"tool_use\",\"usage\":{\"cacheReadInputTokenCount\":0,\"cacheReadInputTokens\":0,\"cacheWriteInputTokenCount\":0,\"cacheWriteInputTokens\":0,\"inputTokens\":851,\"outputTokens\":268,\"serverToolUsage\":{},\"totalTokens\":1119}}" headers: Connection: - keep-alive Content-Length: - - '982' + - '1568' Content-Type: - application/json Date: - - Fri, 30 Jan 2026 01:04:10 GMT + - Tue, 26 May 2026 17:05:01 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_basic_call.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_basic_call.yaml index 549b74782..04560c01c 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_basic_call.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_basic_call.yaml @@ -19,21 +19,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":776},"output":{"message":{"content":[{"text":"Hello! - How are you today?"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":9,"outputTokens":10,"serverToolUsage":{},"totalTokens":19}}' + string: "{\"metrics\":{\"latencyMs\":2397},\"output\":{\"message\":{\"content\":[{\"text\":\"Hello! + \U0001F44B How are you doing? Is there something I can help you with today?\"}],\"role\":\"assistant\"}},\"stopReason\":\"end_turn\",\"usage\":{\"cacheReadInputTokenCount\":0,\"cacheReadInputTokens\":0,\"cacheWriteInputTokenCount\":0,\"cacheWriteInputTokens\":0,\"inputTokens\":9,\"outputTokens\":24,\"serverToolUsage\":{},\"totalTokens\":33}}" headers: Connection: - keep-alive Content-Length: - - '226' + - '388' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:50:59 GMT + - Tue, 26 May 2026 17:05:24 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_conversation.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_conversation.yaml index 3154a2be6..8e39ef151 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_conversation.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_conversation.yaml @@ -21,21 +21,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":622},"output":{"message":{"content":[{"text":"Your - name is Alice."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":31,"outputTokens":8,"serverToolUsage":{},"totalTokens":39}}' + string: '{"metrics":{"latencyMs":1900},"output":{"message":{"content":[{"text":"Your + name is Alice! You told me that at the start of our conversation."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":31,"outputTokens":19,"serverToolUsage":{},"totalTokens":50}}' headers: Connection: - keep-alive Content-Length: - - '330' + - '383' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:51:04 GMT + - Tue, 26 May 2026 17:05:10 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_multiple_calls.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_multiple_calls.yaml index e40ae4395..8b2ea324a 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_multiple_calls.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_multiple_calls.yaml @@ -19,20 +19,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":583},"output":{"message":{"content":[{"text":"1+1=2"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":14,"outputTokens":9,"serverToolUsage":{},"totalTokens":23}}' + string: '{"metrics":{"latencyMs":2148},"output":{"message":{"content":[{"text":"1 + + 1 = **2**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":14,"outputTokens":14,"serverToolUsage":{},"totalTokens":28}}' headers: Connection: - keep-alive Content-Length: - - '206' + - '326' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:51:00 GMT + - Tue, 26 May 2026 17:05:12 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: @@ -58,20 +61,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":869},"output":{"message":{"content":[{"text":"2+2=4"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":14,"outputTokens":9,"serverToolUsage":{},"totalTokens":23}}' + string: '{"metrics":{"latencyMs":1443},"output":{"message":{"content":[{"text":"2 + + 2 = **4**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":14,"outputTokens":14,"serverToolUsage":{},"totalTokens":28}}' headers: Connection: - keep-alive Content-Length: - - '206' + - '326' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:51:01 GMT + - Tue, 26 May 2026 17:05:14 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_max_tokens.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_max_tokens.yaml index 38b1be1c1..3b70e3189 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_max_tokens.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_max_tokens.yaml @@ -19,21 +19,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":966},"output":{"message":{"content":[{"text":"Here''s - a long story about a dragon:"}],"role":"assistant"}},"stopReason":"max_tokens","usage":{"inputTokens":16,"outputTokens":10,"serverToolUsage":{},"totalTokens":26}}' + string: '{"metrics":{"latencyMs":1421},"output":{"message":{"content":[{"text":"# + The Last Ember of Varathorn"}],"role":"assistant"}},"stopReason":"max_tokens","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":16,"outputTokens":10,"serverToolUsage":{},"totalTokens":26}}' headers: Connection: - keep-alive Content-Length: - - '239' + - '344' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:50:58 GMT + - Tue, 26 May 2026 17:05:16 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_parameters.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_parameters.yaml index 9b7a6c89f..a1cf8f1e6 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_parameters.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_parameters.yaml @@ -1,10 +1,10 @@ interactions: - request: body: '{"messages": [{"role": "user", "content": [{"text": "Tell me a short fact"}]}], - "inferenceConfig": {"maxTokens": 100, "temperature": 0.7, "topP": 0.9}}' + "inferenceConfig": {"maxTokens": 100, "temperature": 0.7}}' headers: Content-Length: - - '151' + - '138' Content-Type: - application/json User-Agent: @@ -19,22 +19,24 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":1360},"output":{"message":{"content":[{"text":"Here''s - a short fact: Honeybees can recognize human faces by learning and remembering - facial features, similar to how we do."}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":12,"outputTokens":31,"serverToolUsage":{},"totalTokens":43}}' + string: "{\"metrics\":{\"latencyMs\":2721},\"output\":{\"message\":{\"content\":[{\"text\":\"Here's + a short fact:\\n\\n**Honey never spoils.** Archaeologists have found 3,000-year-old + honey in Egyptian tombs that was still perfectly edible. \U0001F36F\"}],\"role\":\"assistant\"}},\"stopReason\":\"end_turn\",\"usage\":{\"cacheReadInputTokenCount\":0,\"cacheReadInputTokens\":0,\"cacheWriteInputTokenCount\":0,\"cacheWriteInputTokens\":0,\"inputTokens\":12,\"outputTokens\":47,\"serverToolUsage\":{},\"totalTokens\":59}}" headers: Connection: - keep-alive Content-Length: - - '436' + - '463' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:50:57 GMT + - Tue, 26 May 2026 17:06:27 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_system_message.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_system_message.yaml index ff0518fb5..a5971a69f 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_system_message.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_system_message.yaml @@ -19,21 +19,23 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":677},"output":{"message":{"content":[{"text":"2 - + 2 = 4"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":20,"outputTokens":13,"serverToolUsage":{},"totalTokens":33}}' + string: '{"metrics":{"latencyMs":2975},"output":{"message":{"content":[{"text":"2 + + 2 = **4**"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":21,"outputTokens":14,"serverToolUsage":{},"totalTokens":35}}' headers: Connection: - keep-alive Content-Length: - - '211' + - '326' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:51:03 GMT + - Tue, 26 May 2026 17:05:21 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_temperature.yaml b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_temperature.yaml index 8308d4394..c7134aba0 100644 --- a/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_temperature.yaml +++ b/lib/crewai/tests/cassettes/llms/bedrock/test_bedrock_async_with_temperature.yaml @@ -19,20 +19,22 @@ interactions: - AUTHORIZATION-XXX x-amz-date: - X-AMZ-DATE-XXX + x-amz-security-token: + - X-AMZ-SECURITY-TOKEN-XXX method: POST - uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20241022-v2%3A0/converse + uri: https://bedrock-runtime.us-west-2.amazonaws.com/model/us.anthropic.claude-sonnet-4-6/converse response: body: - string: '{"metrics":{"latencyMs":654},"output":{"message":{"content":[{"text":"test"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"inputTokens":15,"outputTokens":4,"serverToolUsage":{},"totalTokens":19}}' + string: '{"metrics":{"latencyMs":1720},"output":{"message":{"content":[{"text":"test"}],"role":"assistant"}},"stopReason":"end_turn","usage":{"cacheReadInputTokenCount":0,"cacheReadInputTokens":0,"cacheWriteInputTokenCount":0,"cacheWriteInputTokens":0,"inputTokens":15,"outputTokens":4,"serverToolUsage":{},"totalTokens":19}}' headers: Connection: - keep-alive Content-Length: - - '205' + - '316' Content-Type: - application/json Date: - - Mon, 01 Dec 2025 08:51:02 GMT + - Tue, 26 May 2026 17:05:18 GMT x-amzn-RequestId: - X-AMZN-REQUESTID-XXX status: diff --git a/lib/crewai/tests/llms/bedrock/test_bedrock.py b/lib/crewai/tests/llms/bedrock/test_bedrock.py index 959b1dbc2..6cd3d3253 100644 --- a/lib/crewai/tests/llms/bedrock/test_bedrock.py +++ b/lib/crewai/tests/llms/bedrock/test_bedrock.py @@ -439,7 +439,7 @@ def test_bedrock_aws_credentials_configuration(): """ aws_access_key_id = "test-access-key" aws_secret_access_key = "test-secret-key" - aws_region_name = "us-east-1" + aws_region_name = "us-west-2" # Test with environment variables @@ -910,7 +910,7 @@ def test_bedrock_agent_kickoff_structured_output_without_tools(): role="Analyst", goal="Provide structured analysis on topics", backstory="You are an expert analyst who provides clear, structured insights.", - llm=LLM(model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0"), + llm=LLM(model="bedrock/us.anthropic.claude-sonnet-4-6"), tools=[], verbose=True, ) @@ -952,7 +952,7 @@ def test_bedrock_agent_kickoff_structured_output_with_tools(): role="Calculator", goal="Perform calculations using available tools", backstory="You are a calculator assistant that uses tools to compute results.", - llm=LLM(model="bedrock/anthropic.claude-3-sonnet-20240229-v1:0"), + llm=LLM(model="bedrock/us.anthropic.claude-sonnet-4-6"), tools=[add_numbers], verbose=True, ) diff --git a/lib/crewai/tests/llms/bedrock/test_bedrock_async.py b/lib/crewai/tests/llms/bedrock/test_bedrock_async.py index 0bf3558b1..1097e2816 100644 --- a/lib/crewai/tests/llms/bedrock/test_bedrock_async.py +++ b/lib/crewai/tests/llms/bedrock/test_bedrock_async.py @@ -17,7 +17,7 @@ SKIP_REASON = "VCR does not support aiobotocore async HTTP client" @pytest.mark.skip(reason=SKIP_REASON) async def test_bedrock_async_basic_call(): """Test basic async call with Bedrock.""" - llm = LLM(model="bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0") + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6") result = await llm.acall("Say hello") @@ -31,7 +31,7 @@ async def test_bedrock_async_basic_call(): @pytest.mark.skip(reason=SKIP_REASON) async def test_bedrock_async_with_temperature(): """Test async call with temperature parameter.""" - llm = LLM(model="bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0", temperature=0.1) + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6", temperature=0.1) result = await llm.acall("Say the word 'test' once") @@ -44,7 +44,7 @@ async def test_bedrock_async_with_temperature(): @pytest.mark.skip(reason=SKIP_REASON) async def test_bedrock_async_with_max_tokens(): """Test async call with max_tokens parameter.""" - llm = LLM(model="bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0", max_tokens=10) + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6", max_tokens=10) result = await llm.acall("Write a very long story about a dragon.") @@ -58,7 +58,7 @@ async def test_bedrock_async_with_max_tokens(): @pytest.mark.skip(reason=SKIP_REASON) async def test_bedrock_async_with_system_message(): """Test async call with system message.""" - llm = LLM(model="bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0") + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6") messages = [ {"role": "system", "content": "You are a helpful assistant."}, @@ -76,7 +76,7 @@ async def test_bedrock_async_with_system_message(): @pytest.mark.skip(reason=SKIP_REASON) async def test_bedrock_async_conversation(): """Test async call with conversation history.""" - llm = LLM(model="bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0") + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6") messages = [ {"role": "user", "content": "My name is Alice."}, @@ -95,7 +95,7 @@ async def test_bedrock_async_conversation(): @pytest.mark.skip(reason=SKIP_REASON) async def test_bedrock_async_multiple_calls(): """Test making multiple async calls in sequence.""" - llm = LLM(model="bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0") + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6") result1 = await llm.acall("What is 1+1?") result2 = await llm.acall("What is 2+2?") @@ -112,10 +112,9 @@ async def test_bedrock_async_multiple_calls(): async def test_bedrock_async_with_parameters(): """Test async call with multiple parameters.""" llm = LLM( - model="bedrock/us.anthropic.claude-3-5-sonnet-20241022-v2:0", + model="bedrock/us.anthropic.claude-sonnet-4-6", temperature=0.7, max_tokens=100, - top_p=0.9 ) result = await llm.acall("Tell me a short fact") diff --git a/lib/crewai/tests/llms/test_multimodal_integration.py b/lib/crewai/tests/llms/test_multimodal_integration.py index 180669518..12eee5bfb 100644 --- a/lib/crewai/tests/llms/test_multimodal_integration.py +++ b/lib/crewai/tests/llms/test_multimodal_integration.py @@ -290,7 +290,7 @@ class TestBedrockMultimodalIntegration: @pytest.mark.vcr() def test_describe_image(self, test_image_bytes: bytes) -> None: """Test Bedrock Claude can describe an image.""" - llm = LLM(model="bedrock/anthropic.claude-3-haiku-20240307-v1:0") + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6") files = {"image": ImageFile(source=test_image_bytes)} messages = _build_multimodal_message( @@ -308,7 +308,7 @@ class TestBedrockMultimodalIntegration: @pytest.mark.vcr() def test_analyze_pdf(self) -> None: """Test Bedrock Claude can analyze a PDF.""" - llm = LLM(model="bedrock/anthropic.claude-3-haiku-20240307-v1:0") + llm = LLM(model="bedrock/us.anthropic.claude-sonnet-4-6") files = {"document": PDFFile(source=MINIMAL_PDF)} messages = _build_multimodal_message( diff --git a/lib/crewai/tests/test_crew_multimodal.py b/lib/crewai/tests/test_crew_multimodal.py index d23a80a99..173599d5d 100644 --- a/lib/crewai/tests/test_crew_multimodal.py +++ b/lib/crewai/tests/test_crew_multimodal.py @@ -42,7 +42,7 @@ GEMINI_MODELS = [ ] BEDROCK_MODELS = [ - "bedrock/anthropic.claude-3-haiku-20240307-v1:0", + "bedrock/us.anthropic.claude-sonnet-4-6", ]