{"repo":"NousResearch/hermes-agent","public_id":"36151","display_label":"Bedrock Converse: skip sampling params for Opus 4.7/4.8","summary":"Multiple fixes and a bug report addressing that temperature and top_p must be omitted for Claude Opus 4.7 and 4.8 on the AWS Bedrock Converse API, which rejects those parameters with a 400 error.","subsystem":"agent","counts":{"members":6,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":4},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":45675},"resolution":{"state":"resolved","by":"pr-45675"},"freshness":{"state":"verified","last_verified_at":"2026-06-13T17:45:56+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.3333333333333333},"fix_edges":[{"issue_number":36151,"pr_number":45675,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":36151,"title":"bedrock_adapter: Opus 4.8 (and 4.7) on Bedrock Converse 400s with \"temperature is deprecated\" — _forbids_sampling_params guard never applied to Bedrock path","url":null,"state":"closed"},{"kind":"pr","number":36175,"title":"fix(bedrock): guard temperature/top_p for Opus 4.7/4.8 on Converse","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"957a8ffa88cb09224a5cbc4bb7a5a5a8706de6be","number":0},{"kind":"pr","value":"#45675","number":45675}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":36257,"title":"fix(bedrock): guard temperature/top_p for Opus 4.7/4.8 on Converse API (#36151)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#45675","number":45675},{"kind":"pr","value":"#38717","number":38717}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":37912,"title":"fix(bedrock): skip temperature/top_p for Opus 4.7+ on Converse API","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"957a8ffa88cb09224a5cbc4bb7a5a5a8706de6be","number":0},{"kind":"pr","value":"#36151","number":36151},{"kind":"pr","value":"#45675","number":45675}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":38717,"title":"fix(agent): skip temperature/topP for Opus 4.7/4.8 on Bedrock (#36151)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"957a8ffa8","number":0},{"kind":"pr","value":"#45675","number":45675},{"kind":"pr","value":"#36257","number":36257}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":45675,"title":"fix(bedrock): omit sampling params for restricted Claude models","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/bedrock_adapter.py","tests/agent/test_bedrock_adapter.py"],"fix_hunks":[{"file":"agent/bedrock_adapter.py","hunks":["@@ -935,11 +935,14 @@ def build_converse_kwargs(\n     if system_prompt:\n         kwargs[\"system\"] = system_prompt\n \n-    if temperature is not None:\n-        kwargs[\"inferenceConfig\"][\"temperature\"] = temperature\n+    from agent.anthropic_adapter import _forbids_sampling_params\n \n-    if top_p is not None:\n-        kwargs[\"inferenceConfig\"][\"topP\"] = top_p\n+    if not _forbids_sampling_params(model):\n+        if temperature is not None:\n+            kwargs[\"inferenceConfig\"][\"temperature\"] = temperature\n+\n+        if top_p is not None:\n+            kwargs[\"inferenceConfig\"][\"topP\"] = top_p\n \n     if stop_sequences:\n         kwargs[\"inferenceConfig\"][\"stopSequences\"] = stop_sequences"]},{"file":"tests/agent/test_bedrock_adapter.py","hunks":["@@ -605,6 +605,74 @@ def test_includes_temperature_and_top_p(self):\n         assert kwargs[\"inferenceConfig\"][\"temperature\"] == 0.7\n         assert kwargs[\"inferenceConfig\"][\"topP\"] == 0.9\n \n+    def test_omits_sampling_params_for_bedrock_opus_4_7(self):\n+        from agent.bedrock_adapter import build_converse_kwargs\n+\n+        for model_id in (\n+            \"anthropic.claude-opus-4-7-20260101-v1:0\",\n+            \"us.anthropic.claude-opus-4-7\",\n+        ):\n+            kwargs = build_converse_kwargs(\n+                model=model_id,\n+                messages=[{\"role\": \"user\", \"content\": \"Hi\"}],\n+                temperature=0.7,\n+                top_p=0.9,\n+            )\n+\n+            assert \"temperature\" not in kwargs[\"inferenceConfig\"]\n+            assert \"topP\" not in kwargs[\"inferenceConfig\"]\n+\n+    def test_omits_sampling_params_for_bedrock_opus_4_8_variants(self):\n+        from agent.bedrock_adapter import build_converse_kwargs\n+\n+        for model_id in (\n+            \"anthropic.claude-opus-4-8-20270101-v1:0\",\n+            \"us.anthropic.claude-opus-4-8\",\n+            \"anthropic.claude-opus-4.8\",\n+        ):\n+            kwargs = build_converse_kwargs(\n+                model=model_id,\n+                messages=[{\"role\": \"user\", \"content\": \"Hi\"}],\n+                temperature=0.5,\n+                top_p=0.95,\n+            )\n+\n+            assert \"temperature\" not in kwargs[\"inferenceConfig\"]\n+            assert \"topP\" not in kwargs[\"inferenceConfig\"]\n+\n+    def test_keeps_sampling_params_for_bedrock_non_restricted_models(self):\n+        from agent.bedrock_adapter import build_converse_kwargs\n+\n+        for model_id in (\n+            \"anthropic.claude-sonnet-4-6-20250514-v1:0\",\n+            \"anthropic.claude-haiku-4-5\",\n+            \"test-model\",\n+        ):\n+            kwargs = build_converse_kwargs(\n+                model=model_id,\n+                messages=[{\"role\": \"user\", \"content\": \"Hi\"}],\n+                temperature=0.7,\n+                top_p=0.9,\n+            )\n+\n+            assert kwargs[\"inferenceConfig\"].get(\"temperature\") == 0.7\n+            assert kwargs[\"inferenceConfig\"].get(\"topP\") == 0.9\n+\n+    def test_bedrock_opus_strips_sampling_params_but_keeps_stop_sequences(self):\n+        from agent.bedrock_adapter import build_converse_kwargs\n+\n+        kwargs = build_converse_kwargs(\n+            model=\"us.anthropic.claude-opus-4-8\",\n+            messages=[{\"role\": \"user\", \"content\": \"Hi\"}],\n+            temperature=0.7,\n+            top_p=0.9,\n+            stop_sequences=[\"END\"],\n+        )\n+\n+        assert \"temperature\" not in kwargs[\"inferenceConfig\"]\n+        assert \"topP\" not in kwargs[\"inferenceConfig\"]\n+        assert kwargs[\"inferenceConfig\"][\"stopSequences\"] == [\"END\"]\n+\n     def test_includes_guardrail_config(self):\n         from agent.bedrock_adapter import build_converse_kwargs\n         guardrail = {\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}