diff --git a/gemini/gemini_image_node.py b/gemini/gemini_image_node.py index 8b7785b..8795e86 100644 --- a/gemini/gemini_image_node.py +++ b/gemini/gemini_image_node.py @@ -49,7 +49,7 @@ class GeminiImage(io.ComfyNode): """ # 如果提供了配置覆盖,则使用覆盖配置 if config_options is not None: - base_url = config_options.get('base_url', '').strip() + base_url = config_options.get('api_url', '').strip() api_key = config_options.get('api_key', '').strip() timeout = config_options.get('timeout', 120) @@ -98,8 +98,8 @@ class GeminiImage(io.ComfyNode): # 如果有配置覆盖,则使用覆盖的值(如果提供了) if config_options is not None: - if config_options.get('base_url', '').strip(): - base_url = config_options['base_url'].strip() + if config_options.get('api_url', '').strip(): + base_url = config_options['api_url'].strip() if config_options.get('api_key', '').strip(): api_key = config_options['api_key'].strip() if config_options.get('timeout'): diff --git a/gemini/gemini_stt_node.py b/gemini/gemini_stt_node.py index 0c6bdc6..ef3caff 100644 --- a/gemini/gemini_stt_node.py +++ b/gemini/gemini_stt_node.py @@ -45,7 +45,7 @@ class GeminiSTT(io.ComfyNode): """ # 如果提供了配置覆盖,则使用覆盖配置 if config_options is not None: - base_url = config_options.get('base_url', '').strip() + base_url = config_options.get('api_url', '').strip() api_key = config_options.get('api_key', '').strip() timeout = config_options.get('timeout', 120) @@ -94,8 +94,8 @@ class GeminiSTT(io.ComfyNode): # 如果有配置覆盖,则使用覆盖的值(如果提供了) if config_options is not None: - if config_options.get('base_url', '').strip(): - base_url = config_options['base_url'].strip() + if config_options.get('api_url', '').strip(): + base_url = config_options['api_url'].strip() if config_options.get('api_key', '').strip(): api_key = config_options['api_key'].strip() if config_options.get('timeout'): diff --git a/gemini/gemini_tts_node.py b/gemini/gemini_tts_node.py index b01cd9e..6492445 100644 --- a/gemini/gemini_tts_node.py +++ b/gemini/gemini_tts_node.py @@ -77,7 +77,7 @@ class GeminiTTS(io.ComfyNode): """ # 如果提供了配置覆盖,则使用覆盖配置 if config_options is not None: - base_url = config_options.get('base_url', '').strip() + base_url = config_options.get('api_url', '').strip() api_key = config_options.get('api_key', '').strip() timeout = config_options.get('timeout', 120) @@ -126,8 +126,8 @@ class GeminiTTS(io.ComfyNode): # 如果有配置覆盖,则使用覆盖的值(如果提供了) if config_options is not None: - if config_options.get('base_url', '').strip(): - base_url = config_options['base_url'].strip() + if config_options.get('api_url', '').strip(): + base_url = config_options['api_url'].strip() if config_options.get('api_key', '').strip(): api_key = config_options['api_key'].strip() if config_options.get('timeout'): diff --git a/locales/en/nodeDefs.json b/locales/en/nodeDefs.json index baee0fb..a68ebf8 100644 --- a/locales/en/nodeDefs.json +++ b/locales/en/nodeDefs.json @@ -158,14 +158,18 @@ "display_name": "API Config Options", "description": "This node provides override API config options.", "inputs": { - "base_url": { - "name": "base_url", - "tooltip": "Override the API base URL" + "api_url": { + "name": "api_url", + "tooltip": "Override the API URL" }, "api_key": { "name": "api_key", "tooltip": "Override the API key" }, + "api_protocol": { + "name": "api_protocol", + "tooltip": "Override the API protocol (openai-completions / openai-responses / anthropic-messages)" + }, "timeout": { "name": "timeout", "tooltip": "Override the request timeout in seconds" diff --git a/locales/zh/nodeDefs.json b/locales/zh/nodeDefs.json index e579b85..6e9f4a7 100644 --- a/locales/zh/nodeDefs.json +++ b/locales/zh/nodeDefs.json @@ -159,16 +159,20 @@ "display_name": "API 配置选项", "description": "该节点提供了覆盖 API 配置选项的功能", "inputs": { - "base_url": { - "name": "base_url", - "tooltip": "覆盖 API 基础 URL" + "api_url": { + "name": "api_url", + "tooltip": "覆盖 API URL" }, "api_key": { "name": "api_key", "tooltip": "覆盖 API 密钥" }, + "api_protocol": { + "name": "API 协议", + "tooltip": "覆盖 API 协议(openai-completions / openai-responses / anthropic-messages)" + }, "timeout": { - "name": "timeout", + "name": "超时时间", "tooltip": "以秒为单位覆盖请求超时时间" } }, diff --git a/modelscope/modelscope_image_edit_node.py b/modelscope/modelscope_image_edit_node.py index 7fd377a..6423bd0 100644 --- a/modelscope/modelscope_image_edit_node.py +++ b/modelscope/modelscope_image_edit_node.py @@ -39,7 +39,7 @@ class ModelScopeImageEdit(io.ComfyNode): raise ValueError(f"Missing '{cls._CONFIG_SECTION}' section in config file") config_options = config_options or {} - base_url = str(config_options.get("base_url") or config.get("base_url") or "").strip() + base_url = str(config_options.get("api_url") or config.get("base_url") or "").strip() api_key = str(config_options.get("api_key") or config.get("api_key") or "").strip() timeout = config_options.get("timeout") or config.get("timeout", 300) try: diff --git a/modelscope/modelscope_image_node.py b/modelscope/modelscope_image_node.py index c487fe5..e7511bc 100644 --- a/modelscope/modelscope_image_node.py +++ b/modelscope/modelscope_image_node.py @@ -46,7 +46,7 @@ class ModelScopeImage(io.ComfyNode): """ # 如果提供了配置覆盖,则使用覆盖配置 if config_options is not None: - base_url = config_options.get('base_url', '').strip() + base_url = config_options.get('api_url', '').strip() api_key = config_options.get('api_key', '').strip() timeout = config_options.get('timeout', 300) @@ -95,8 +95,8 @@ class ModelScopeImage(io.ComfyNode): # 如果有配置覆盖,则使用覆盖的值(如果提供了) if config_options is not None: - if config_options.get('base_url', '').strip(): - base_url = config_options['base_url'].strip() + if config_options.get('api_url', '').strip(): + base_url = config_options['api_url'].strip() if config_options.get('api_key', '').strip(): api_key = config_options['api_key'].strip() if config_options.get('timeout'): diff --git a/ollama/ollama_llm_node.py b/ollama/ollama_llm_node.py index 86b657b..4e693d2 100644 --- a/ollama/ollama_llm_node.py +++ b/ollama/ollama_llm_node.py @@ -11,7 +11,7 @@ def _load_config_credentials(config_options=None): """ # 如果提供了配置覆盖,则使用覆盖配置 if config_options is not None: - base_url = config_options.get('base_url', '').strip() + base_url = config_options.get('api_url', '').strip() api_key = config_options.get('api_key', '').strip() timeout = config_options.get('timeout', 120) @@ -42,8 +42,8 @@ def _load_config_credentials(config_options=None): # 如果有配置覆盖,则使用覆盖的值(如果提供了) if config_options is not None: - if config_options.get('base_url', '').strip(): - base_url = config_options['base_url'].strip() + if config_options.get('api_url', '').strip(): + base_url = config_options['api_url'].strip() if config_options.get('api_key', '').strip(): api_key = config_options['api_key'].strip() if config_options.get('timeout'): diff --git a/ollama/ollama_vlm_node.py b/ollama/ollama_vlm_node.py index 3657477..8b6e4a4 100644 --- a/ollama/ollama_vlm_node.py +++ b/ollama/ollama_vlm_node.py @@ -12,7 +12,7 @@ def _load_config_credentials(config_options=None): """ # 如果提供了配置覆盖,则使用覆盖配置 if config_options is not None: - base_url = config_options.get('base_url', '').strip() + base_url = config_options.get('api_url', '').strip() api_key = config_options.get('api_key', '').strip() timeout = config_options.get('timeout', 120) @@ -43,8 +43,8 @@ def _load_config_credentials(config_options=None): # 如果有配置覆盖,则使用覆盖的值(如果提供了) if config_options is not None: - if config_options.get('base_url', '').strip(): - base_url = config_options['base_url'].strip() + if config_options.get('api_url', '').strip(): + base_url = config_options['api_url'].strip() if config_options.get('api_key', '').strip(): api_key = config_options['api_key'].strip() if config_options.get('timeout'): diff --git a/options/config_options_node.py b/options/config_options_node.py index 422ecbb..4a481be 100644 --- a/options/config_options_node.py +++ b/options/config_options_node.py @@ -2,7 +2,7 @@ from comfy_api.latest import ComfyExtension, io class ConfigOptions(io.ComfyNode): """ - 这个节点用于覆盖 API 的配置参数(base_url、api_key、timeout) + 这个节点用于覆盖 API 的配置参数(api_url、api_key、api_protocol、timeout) """ @classmethod @@ -13,9 +13,9 @@ class ConfigOptions(io.ComfyNode): category="YCYY/API/utils", inputs=[ io.String.Input( - id="base_url", + id="api_url", multiline=True, - tooltip="Override the API base URL" + tooltip="Override the API URL" ), io.String.Input( id="api_key", @@ -23,6 +23,12 @@ class ConfigOptions(io.ComfyNode): multiline=True, tooltip="Override the API key" ), + io.Combo.Input( + id="api_protocol", + options=["openai-completions", "openai-responses", "anthropic-messages"], + default="openai-completions", + tooltip="Override the API protocol" + ), io.Int.Input( id="timeout", default=120, @@ -42,14 +48,15 @@ class ConfigOptions(io.ComfyNode): ) @classmethod - def execute(cls, base_url, api_key, timeout) -> io.NodeOutput: + def execute(cls, api_url, api_key, api_protocol, timeout) -> io.NodeOutput: # 验证和清理输入 - base_url = base_url.strip() if base_url else "" + api_url = api_url.strip() if api_url else "" api_key = api_key.strip() if api_key else "" config_options = { - "base_url": base_url, + "api_url": api_url, "api_key": api_key, + "api_protocol": api_protocol, "timeout": timeout }