|  | @@ -1,3 +1,4 @@
 | 
	
		
			
				|  |  | +import random
 | 
	
		
			
				|  |  |  from base64 import b64decode
 | 
	
		
			
				|  |  |  from typing import Any, Union
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -9,10 +10,10 @@ from core.tools.tool.builtin_tool import BuiltinTool
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  class DallE3Tool(BuiltinTool):
 | 
	
		
			
				|  |  | -    def _invoke(self, 
 | 
	
		
			
				|  |  | -                user_id: str, 
 | 
	
		
			
				|  |  | -               tool_parameters: dict[str, Any], 
 | 
	
		
			
				|  |  | -        ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
 | 
	
		
			
				|  |  | +    def _invoke(self,
 | 
	
		
			
				|  |  | +                user_id: str,
 | 
	
		
			
				|  |  | +                tool_parameters: dict[str, Any],
 | 
	
		
			
				|  |  | +                ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
 | 
	
		
			
				|  |  |          """
 | 
	
		
			
				|  |  |              invoke tools
 | 
	
		
			
				|  |  |          """
 | 
	
	
		
			
				|  | @@ -53,6 +54,9 @@ class DallE3Tool(BuiltinTool):
 | 
	
		
			
				|  |  |          style = tool_parameters.get('style', 'vivid')
 | 
	
		
			
				|  |  |          if style not in ['natural', 'vivid']:
 | 
	
		
			
				|  |  |              return self.create_text_message('Invalid style')
 | 
	
		
			
				|  |  | +        # set extra body
 | 
	
		
			
				|  |  | +        seed_id = tool_parameters.get('seed_id', self._generate_random_id(8))
 | 
	
		
			
				|  |  | +        extra_body = {'seed': seed_id}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          # call openapi dalle3
 | 
	
		
			
				|  |  |          response = client.images.generate(
 | 
	
	
		
			
				|  | @@ -60,6 +64,7 @@ class DallE3Tool(BuiltinTool):
 | 
	
		
			
				|  |  |              model='dall-e-3',
 | 
	
		
			
				|  |  |              size=size,
 | 
	
		
			
				|  |  |              n=n,
 | 
	
		
			
				|  |  | +            extra_body=extra_body,
 | 
	
		
			
				|  |  |              style=style,
 | 
	
		
			
				|  |  |              quality=quality,
 | 
	
		
			
				|  |  |              response_format='b64_json'
 | 
	
	
		
			
				|  | @@ -68,8 +73,15 @@ class DallE3Tool(BuiltinTool):
 | 
	
		
			
				|  |  |          result = []
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for image in response.data:
 | 
	
		
			
				|  |  | -            result.append(self.create_blob_message(blob=b64decode(image.b64_json), 
 | 
	
		
			
				|  |  | -                                                   meta={ 'mime_type': 'image/png' },
 | 
	
		
			
				|  |  | -                                                    save_as=self.VARIABLE_KEY.IMAGE.value))
 | 
	
		
			
				|  |  | +            result.append(self.create_blob_message(blob=b64decode(image.b64_json),
 | 
	
		
			
				|  |  | +                                                   meta={'mime_type': 'image/png'},
 | 
	
		
			
				|  |  | +                                                   save_as=self.VARIABLE_KEY.IMAGE.value))
 | 
	
		
			
				|  |  | +        result.append(self.create_text_message(f'\nGenerate image source to Seed ID: {seed_id}'))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          return result
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @staticmethod
 | 
	
		
			
				|  |  | +    def _generate_random_id(length=8):
 | 
	
		
			
				|  |  | +        characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
 | 
	
		
			
				|  |  | +        random_id = ''.join(random.choices(characters, k=length))
 | 
	
		
			
				|  |  | +        return random_id
 |