mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-06-10 16:27:33 +08:00
Merge ed90e2eb7b into f48d2a017e
This commit is contained in:
commit
3550486e56
@ -46,6 +46,13 @@ class AnthropicMessagesRequest(BaseModel):
|
||||
stop_sequences: list[str] | None = Field(None)
|
||||
|
||||
|
||||
ANTHROPIC_MODELS_WITHOUT_TEMPERATURE = {"claude-opus-4-7"}
|
||||
|
||||
|
||||
def get_supported_temperature(model: str, temperature: float) -> float | None:
|
||||
return None if model in ANTHROPIC_MODELS_WITHOUT_TEMPERATURE else temperature
|
||||
|
||||
|
||||
class AnthropicResponseTextBlock(BaseModel):
|
||||
type: Literal["text"] = "text"
|
||||
text: str = Field(...)
|
||||
|
||||
@ -11,6 +11,7 @@ from comfy_api_nodes.apis.anthropic import (
|
||||
AnthropicMessagesResponse,
|
||||
AnthropicRole,
|
||||
AnthropicTextContent,
|
||||
get_supported_temperature,
|
||||
)
|
||||
from comfy_api_nodes.util import (
|
||||
ApiEndpoint,
|
||||
@ -207,8 +208,9 @@ class ClaudeNode(IO.ComfyNode):
|
||||
) -> IO.NodeOutput:
|
||||
validate_string(prompt, strip_whitespace=True, min_length=1)
|
||||
model_label = model["model"]
|
||||
model_id = CLAUDE_MODELS[model_label]
|
||||
max_tokens = model["max_tokens"]
|
||||
temperature = model["temperature"]
|
||||
temperature = get_supported_temperature(model_id, model["temperature"])
|
||||
|
||||
image_tensors: list[Input.Image] = [t for t in (images or {}).values() if t is not None]
|
||||
if sum(get_number_of_images(t) for t in image_tensors) > CLAUDE_MAX_IMAGES:
|
||||
@ -224,7 +226,7 @@ class ClaudeNode(IO.ComfyNode):
|
||||
ApiEndpoint(path=ANTHROPIC_MESSAGES_ENDPOINT, method="POST"),
|
||||
response_model=AnthropicMessagesResponse,
|
||||
data=AnthropicMessagesRequest(
|
||||
model=CLAUDE_MODELS[model_label],
|
||||
model=model_id,
|
||||
max_tokens=max_tokens,
|
||||
messages=[AnthropicMessage(role=AnthropicRole.user, content=content)],
|
||||
system=system_prompt or None,
|
||||
|
||||
33
tests-unit/comfy_api_nodes_test/test_nodes_anthropic.py
Normal file
33
tests-unit/comfy_api_nodes_test/test_nodes_anthropic.py
Normal file
@ -0,0 +1,33 @@
|
||||
from comfy_api_nodes.apis.anthropic import (
|
||||
AnthropicMessage,
|
||||
AnthropicMessagesRequest,
|
||||
AnthropicRole,
|
||||
AnthropicTextContent,
|
||||
get_supported_temperature,
|
||||
)
|
||||
|
||||
|
||||
def test_claude_opus_47_omits_temperature():
|
||||
request = AnthropicMessagesRequest(
|
||||
model="claude-opus-4-7",
|
||||
max_tokens=128,
|
||||
messages=[AnthropicMessage(role=AnthropicRole.user, content=[AnthropicTextContent(text="Hello")])],
|
||||
temperature=get_supported_temperature("claude-opus-4-7", 0.25),
|
||||
)
|
||||
|
||||
assert request.model == "claude-opus-4-7"
|
||||
assert request.temperature is None
|
||||
assert "temperature" not in request.model_dump(exclude_none=True)
|
||||
|
||||
|
||||
def test_claude_models_that_support_sampling_keep_temperature():
|
||||
request = AnthropicMessagesRequest(
|
||||
model="claude-sonnet-4-6",
|
||||
max_tokens=128,
|
||||
messages=[AnthropicMessage(role=AnthropicRole.user, content=[AnthropicTextContent(text="Hello")])],
|
||||
temperature=get_supported_temperature("claude-sonnet-4-6", 0.25),
|
||||
)
|
||||
|
||||
assert request.model == "claude-sonnet-4-6"
|
||||
assert request.temperature == 0.25
|
||||
assert request.model_dump(exclude_none=True)["temperature"] == 0.25
|
||||
Loading…
Reference in New Issue
Block a user