Skip to content

Commit b2ddd27

Browse files
Ian Massinghamclaude
andauthored
Update Anthropic prompt driver with Claude 4.5/4.6 models (#71)
* feat: update Anthropic prompt driver with Claude 4.5/4.6 models Add support for latest Claude models and deprecate older versions: Models added to dropdown: - claude-opus-4-6 - claude-sonnet-4-6 (new default) - claude-haiku-4-5-20251001 Deprecated models (auto-migrated): - claude-3-5-sonnet-20241022 → claude-sonnet-4-6 - claude-3-5-sonnet-20240620 → claude-sonnet-4-6 - claude-3-5-haiku-20241022 → claude-haiku-4-5-20251001 - claude-3-opus-20240229 → claude-opus-4-6 - claude-3-sonnet-20240229 → claude-sonnet-4-6 - claude-3-haiku-20240307 → claude-haiku-4-5-20251001 - claude-3-7-sonnet-latest → claude-sonnet-4-6 - claude-3-5-sonnet-latest → claude-sonnet-4-6 - claude-3-5-opus-latest → claude-opus-4-6 - claude-3-5-haiku-latest → claude-haiku-4-5-20251001 Implementation: - Add deprecation notice UI with dismiss button - Position notice below model parameter for visibility - Implement before_value_set() for automatic model migration - Fix top_p parameter handling to only set when not None - Bump library version to 0.67.1 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * fix: add type guard for model value in before_value_set Add isinstance check to ensure value is a string before checking against DEPRECATED_MODELS dictionary. Bump library version to 0.67.3. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 6854b21 commit b2ddd27

2 files changed

Lines changed: 70 additions & 7 deletions

File tree

griptape_nodes_library.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@
2828
"metadata": {
2929
"author": "Griptape, Inc",
3030
"description": "Default nodes for Griptape Nodes",
31+
<<<<<<< feature/update-anthropic-models
32+
"library_version": "0.67.3",
33+
=======
3134
"library_version": "0.67.2",
35+
>>>>>>> main
3236
"engine_version": "0.77.0",
3337
"tags": [
3438
"Griptape",

griptape_nodes_library/config/prompt/anthropic_prompt.py

Lines changed: 66 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@
77
node configuration, and instantiates the `GtAnthropicPromptDriver`.
88
"""
99

10+
from typing import Any
11+
1012
from griptape.drivers.prompt.anthropic import AnthropicPromptDriver as GtAnthropicPromptDriver
13+
from griptape_nodes.exe_types.core_types import Parameter, ParameterMessage
1114
from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
15+
from griptape_nodes.traits.button import Button
1216

1317
from griptape_nodes_library.config.prompt.base_prompt import BasePrompt
1418

@@ -18,12 +22,27 @@
1822
API_KEY_URL = "https://console.anthropic.com/settings/keys"
1923
API_KEY_ENV_VAR = "ANTHROPIC_API_KEY"
2024
MODEL_CHOICES = [
21-
"claude-3-7-sonnet-latest",
22-
"claude-3-5-sonnet-latest",
23-
"claude-3-5-opus-latest",
24-
"claude-3-5-haiku-latest",
25+
"claude-opus-4-6",
26+
"claude-sonnet-4-6",
27+
"claude-haiku-4-5-20251001",
2528
]
26-
DEFAULT_MODEL = MODEL_CHOICES[0]
29+
DEFAULT_MODEL = MODEL_CHOICES[1] # claude-sonnet-4-6
30+
31+
# Deprecated models and their replacements
32+
DEPRECATED_MODELS = {
33+
# Dated model versions
34+
"claude-3-5-sonnet-20241022": "claude-sonnet-4-6",
35+
"claude-3-5-sonnet-20240620": "claude-sonnet-4-6",
36+
"claude-3-5-haiku-20241022": "claude-haiku-4-5-20251001",
37+
"claude-3-opus-20240229": "claude-opus-4-6",
38+
"claude-3-sonnet-20240229": "claude-sonnet-4-6",
39+
"claude-3-haiku-20240307": "claude-haiku-4-5-20251001",
40+
# -latest variants
41+
"claude-3-7-sonnet-latest": "claude-sonnet-4-6",
42+
"claude-3-5-sonnet-latest": "claude-sonnet-4-6",
43+
"claude-3-5-opus-latest": "claude-opus-4-6",
44+
"claude-3-5-haiku-latest": "claude-haiku-4-5-20251001",
45+
}
2746

2847

2948
class AnthropicPrompt(BasePrompt):
@@ -53,14 +72,51 @@ def __init__(self, **kwargs) -> None:
5372
# Update the 'model' parameter for Anthropic specifics.
5473
self._update_option_choices(param="model", choices=MODEL_CHOICES, default=DEFAULT_MODEL)
5574

75+
# Add deprecation notice message element right after model parameter
76+
self.add_node_element(
77+
ParameterMessage(
78+
name="model_deprecation_notice",
79+
title="Model Deprecation Notice",
80+
variant="info",
81+
value="",
82+
traits={
83+
Button(
84+
full_width=True,
85+
on_click=lambda _, __: self.hide_message_by_name("model_deprecation_notice"),
86+
)
87+
},
88+
button_text="Dismiss",
89+
hide=True,
90+
)
91+
)
92+
5693
# Replace `min_p` with `top_p` for Anthropic.
5794
self._replace_param_by_name(
5895
param_name="min_p", new_param_name="top_p", tooltip=None, default_value=0.9, ui_options=None
5996
)
6097

61-
# Remove the 'seed' parameter as it's not directly used by GriptapeCloudPromptDriver.
98+
# Remove the 'seed' parameter as it's not directly used by AnthropicPromptDriver.
6299
self.remove_parameter_element_by_name("seed")
63100

101+
def before_value_set(
102+
self,
103+
parameter: Parameter,
104+
value: Any,
105+
) -> Any:
106+
if parameter.name == "model":
107+
if isinstance(value, str) and value in DEPRECATED_MODELS:
108+
replacement = DEPRECATED_MODELS[value]
109+
message = self.get_message_by_name_or_element_id("model_deprecation_notice")
110+
if message is None:
111+
raise RuntimeError("model_deprecation_notice message element not found") # noqa: TRY003, EM101
112+
message.value = f"The '{value}' model has been deprecated. The model has been updated to '{replacement}'. Please save your workflow to apply this change."
113+
self.show_message_by_name("model_deprecation_notice")
114+
value = replacement
115+
else:
116+
self.hide_message_by_name("model_deprecation_notice")
117+
118+
return super().before_value_set(parameter, value)
119+
64120
def process(self) -> None:
65121
"""Processes the node configuration to create an AnthropicPromptDriver.
66122
@@ -92,7 +148,10 @@ def process(self) -> None:
92148

93149
# Handle specific parameter conversions/logic for Anthropic driver
94150
# Anthropic uses 'top_p' and 'top_k' directly as kwargs.
95-
specific_args["top_p"] = self.get_parameter_value("top_p")
151+
# Only set top_p if it's not None (otherwise the driver will use temperature).
152+
top_p = self.get_parameter_value("top_p")
153+
if top_p is not None:
154+
specific_args["top_p"] = top_p
96155

97156
response_format = self.get_parameter_value("response_format")
98157
if response_format == "json_object":

0 commit comments

Comments
 (0)