11from io import BytesIO
2- from typing import Optional , Union
3- import json
42import os
5- import time
6- import uuid
73from enum import Enum
84from inspect import cleandoc
95import numpy as np
106import torch
117from PIL import Image
12- from server import PromptServer
138import folder_paths
149import base64
1510from comfy_api .latest import IO , ComfyExtension
@@ -587,11 +582,11 @@ def tensor_to_input_image_content(
587582 def create_input_message_contents (
588583 cls ,
589584 prompt : str ,
590- image : Optional [ torch .Tensor ] = None ,
591- files : Optional [ list [InputFileContent ]] = None ,
585+ image : torch .Tensor | None = None ,
586+ files : list [InputFileContent ] | None = None ,
592587 ) -> InputMessageContentList :
593588 """Create a list of input message contents from prompt and optional image."""
594- content_list : list [Union [ InputContent , InputTextContent , InputImageContent , InputFileContent ] ] = [
589+ content_list : list [InputContent | InputTextContent | InputImageContent | InputFileContent ] = [
595590 InputTextContent (text = prompt , type = "input_text" ),
596591 ]
597592 if image is not None :
@@ -617,9 +612,9 @@ async def execute(
617612 prompt : str ,
618613 persist_context : bool = False ,
619614 model : SupportedOpenAIModel = SupportedOpenAIModel .gpt_5 .value ,
620- images : Optional [ torch .Tensor ] = None ,
621- files : Optional [ list [InputFileContent ]] = None ,
622- advanced_options : Optional [ CreateModelResponseProperties ] = None ,
615+ images : torch .Tensor | None = None ,
616+ files : list [InputFileContent ] | None = None ,
617+ advanced_options : CreateModelResponseProperties | None = None ,
623618 ) -> IO .NodeOutput :
624619 validate_string (prompt , strip_whitespace = False )
625620
@@ -660,30 +655,7 @@ async def execute(
660655 status_extractor = lambda response : response .status ,
661656 completed_statuses = ["incomplete" , "completed" ]
662657 )
663- output_text = cls .get_text_from_message_content (cls .get_message_content_from_response (result_response ))
664-
665- # Update history
666- render_spec = {
667- "node_id" : cls .hidden .unique_id ,
668- "component" : "ChatHistoryWidget" ,
669- "props" : {
670- "history" : json .dumps (
671- [
672- {
673- "prompt" : prompt ,
674- "response" : output_text ,
675- "response_id" : str (uuid .uuid4 ()),
676- "timestamp" : time .time (),
677- }
678- ]
679- ),
680- },
681- }
682- PromptServer .instance .send_sync (
683- "display_component" ,
684- render_spec ,
685- )
686- return IO .NodeOutput (output_text )
658+ return IO .NodeOutput (cls .get_text_from_message_content (cls .get_message_content_from_response (result_response )))
687659
688660
689661class OpenAIInputFiles (IO .ComfyNode ):
@@ -790,8 +762,8 @@ def define_schema(cls):
790762 def execute (
791763 cls ,
792764 truncation : bool ,
793- instructions : Optional [ str ] = None ,
794- max_output_tokens : Optional [ int ] = None ,
765+ instructions : str | None = None ,
766+ max_output_tokens : int | None = None ,
795767 ) -> IO .NodeOutput :
796768 """
797769 Configure advanced options for the OpenAI Chat Node.
0 commit comments