Support Gemini 4 Argon models across GenerateContent and Interactions APIs
This commit is contained in:
+12
-7
@@ -262,6 +262,9 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
|
||||
_client_cache: dict = {} # Maps client_key tuple -> genai.Client instance
|
||||
GEMINI_3_7_FLASH = "gemini-3.7-flash"
|
||||
GEMINI_3_8_FLASH = "gemini-3.8-flash"
|
||||
GEMINI_4_ARGON = "gemini-4-argon"
|
||||
GEMINI_4_ARGON_CYBER_PERMISSIVE = "gemini-4-argon-cyber-permissive"
|
||||
ARGON_MODELS = (GEMINI_4_ARGON, GEMINI_4_ARGON_CYBER_PERMISSIVE)
|
||||
VIDEO_MIME_TYPE = "video/mp4"
|
||||
VIDEO_INLINE_LIMIT_BYTES = 100 * 1024 * 1024
|
||||
|
||||
@@ -283,11 +286,11 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
|
||||
THINKING_MODELS = [
|
||||
"gemini-1.5-pro-002", "gemini-2.0-flash-thinking-exp", "gemini-2.0-flash-thinking-exp-01-21", "gemini-2.0-flash-thinking-exp-1219",
|
||||
"gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-preview-04-17", "gemini-2.5-pro-exp-03-25",
|
||||
"gemini-3-flash-preview", "gemini-3.1-pro-preview", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.6-flash", GEMINI_3_7_FLASH, GEMINI_3_8_FLASH, GEMINI_4_FLASH_PREVIEW, "gemini-pro-latest", "gemini-flash-latest", "gemini-flash-lite-latest"
|
||||
"gemini-3-flash-preview", "gemini-3.1-pro-preview", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.6-flash", GEMINI_3_7_FLASH, GEMINI_3_8_FLASH, GEMINI_4_ARGON, GEMINI_4_ARGON_CYBER_PERMISSIVE, GEMINI_4_FLASH_PREVIEW, "gemini-pro-latest", "gemini-flash-latest", "gemini-flash-lite-latest"
|
||||
]
|
||||
GEN3_THINKING_MODELS = [
|
||||
"gemini-pro-latest", "gemini-flash-latest", "gemini-3.1-pro-preview",
|
||||
"gemini-3-flash-preview", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.6-flash", GEMINI_3_7_FLASH, GEMINI_3_8_FLASH, GEMINI_4_FLASH_PREVIEW
|
||||
"gemini-3-flash-preview", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.6-flash", GEMINI_3_7_FLASH, GEMINI_3_8_FLASH, GEMINI_4_ARGON, GEMINI_4_ARGON_CYBER_PERMISSIVE, GEMINI_4_FLASH_PREVIEW
|
||||
]
|
||||
IMAGE_MODELS = [
|
||||
"gemini-2.5-flash-image",
|
||||
@@ -320,7 +323,7 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
|
||||
cls.GemConfig.Input("config"),
|
||||
IO.String.Input("prompt", multiline=True),
|
||||
IO.String.Input("system_instruction", default="You are a helpful AI assistant.", multiline=True),
|
||||
IO.Combo.Input("model", options=["gemini-1.5-pro-002", "gemini-2.0-flash", "gemini-2.0-flash-lite", "gemini-2.5-flash-preview-04-17", "gemini-2.5-pro-exp-03-25", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite", "gemini-3-flash-preview", "gemini-3.1-flash-lite", "gemini-3.1-pro-preview", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.6-flash", cls.GEMINI_3_7_FLASH, cls.GEMINI_3_8_FLASH, "gemini-3.1-flash-image", "gemini-3.1-flash-lite-image", "gemini-3-pro-image", "gemini-pro-latest", "gemini-flash-latest", "gemini-flash-lite-latest"], default="gemini-2.5-flash"),
|
||||
IO.Combo.Input("model", options=["gemini-1.5-pro-002", "gemini-2.0-flash", "gemini-2.0-flash-lite", "gemini-2.5-flash-preview-04-17", "gemini-2.5-pro-exp-03-25", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite", "gemini-3-flash-preview", "gemini-3.1-flash-lite", "gemini-3.1-pro-preview", "gemini-3.5-flash", "gemini-3.5-flash-lite", "gemini-3.6-flash", cls.GEMINI_3_7_FLASH, cls.GEMINI_3_8_FLASH, cls.GEMINI_4_ARGON, cls.GEMINI_4_ARGON_CYBER_PERMISSIVE, "gemini-3.1-flash-image", "gemini-3.1-flash-lite-image", "gemini-3-pro-image", "gemini-pro-latest", "gemini-flash-latest", "gemini-flash-lite-latest"], default="gemini-2.5-flash"),
|
||||
IO.Float.Input("temperature", default=1.0, min=0.0, max=1.0, step=0.01, tooltip="Ignored in Interactions API"),
|
||||
IO.Float.Input("top_p", default=0.95, min=0.0, max=1.0, step=0.01, tooltip="Ignored in Interactions API"),
|
||||
IO.Int.Input("top_k", default=40, min=1, max=100, step=1, tooltip="Ignored in Interactions API"),
|
||||
@@ -525,11 +528,13 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
|
||||
@classmethod
|
||||
def _resolve_gemini_3_7_thinking_level(cls, thinking_level, model_name=None):
|
||||
if thinking_level is None or thinking_level == "None":
|
||||
if model_name == cls.GEMINI_4_ARGON_CYBER_PERMISSIVE:
|
||||
return "high"
|
||||
return "medium"
|
||||
if thinking_level == "minimal":
|
||||
if model_name == cls.GEMINI_3_8_FLASH:
|
||||
if model_name in (cls.GEMINI_3_8_FLASH, cls.GEMINI_4_ARGON, cls.GEMINI_4_ARGON_CYBER_PERMISSIVE):
|
||||
raise ValueError(
|
||||
"gemini-3.8-flash thinking_level must be low, medium, or high."
|
||||
f"{model_name} thinking_level must be low, medium, or high."
|
||||
)
|
||||
print(
|
||||
f"[WARNING] {model_name or 'Gemini 3.7 Flash'} does not support minimal "
|
||||
@@ -606,7 +611,7 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
|
||||
eff_aspect_ratio = str(aspect_ratio)
|
||||
eff_image_size = "None" if image_size in (None, "None") else str(image_size)
|
||||
|
||||
elif model in (cls.GEMINI_3_7_FLASH, cls.GEMINI_3_8_FLASH):
|
||||
elif model in (cls.GEMINI_3_7_FLASH, cls.GEMINI_3_8_FLASH, cls.GEMINI_4_ARGON, cls.GEMINI_4_ARGON_CYBER_PERMISSIVE):
|
||||
eff_thinking_level = cls._resolve_gemini_3_7_thinking_level(thinking_level, model)
|
||||
eff_include_thoughts = include_thoughts
|
||||
|
||||
@@ -1075,7 +1080,7 @@ class SSL_GeminiInteractionsTextPrompt(IO.ComfyNode):
|
||||
|
||||
# Assemble generation_config
|
||||
effective_thinking_level = None
|
||||
if model in (cls.GEMINI_3_7_FLASH, cls.GEMINI_3_8_FLASH):
|
||||
if model in (cls.GEMINI_3_7_FLASH, cls.GEMINI_3_8_FLASH, cls.GEMINI_4_ARGON, cls.GEMINI_4_ARGON_CYBER_PERMISSIVE):
|
||||
effective_thinking_level = cls._resolve_gemini_3_7_thinking_level(thinking_level, model)
|
||||
elif model in cls.GEN3_THINKING_MODELS and thinking_level not in (None, "None"):
|
||||
effective_thinking_level = thinking_level
|
||||
|
||||
Reference in New Issue
Block a user