| 
					
				 | 
			
			
				@@ -1,11 +1,12 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from base64 import b64decode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from typing import Any, Union 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from httpx import post 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.file.enums import FileType 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.file.file_manager import download 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.entities.common_entities import I18nObject 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.tools.entities.tool_entities import ToolInvokeMessage, ToolParameter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from core.tools.errors import ToolProviderCredentialValidationError 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from core.tools.provider.builtin.vectorizer.tools.test_data import VECTORIZER_ICON_PNG 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.errors import ToolParameterValidationError 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.tools.tool.builtin_tool import BuiltinTool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -16,30 +17,30 @@ class VectorizerTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         invoke tools 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        api_key_name = self.runtime.credentials.get("api_key_name", None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        api_key_value = self.runtime.credentials.get("api_key_value", None) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        api_key_name = self.runtime.credentials.get("api_key_name") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        api_key_value = self.runtime.credentials.get("api_key_value") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         mode = tool_parameters.get("mode", "test") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if mode == "production": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            mode = "preview" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if not api_key_name or not api_key_value: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            raise ToolProviderCredentialValidationError("Please input api key name and value") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # image file for workflow mode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        image = tool_parameters.get("image") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if image and image.type != FileType.IMAGE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise ToolParameterValidationError("Not a valid image") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # image_id for agent mode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         image_id = tool_parameters.get("image_id", "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if not image_id: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return self.create_text_message("Please input image id") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if image_id.startswith("__test_"): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            image_binary = b64decode(VECTORIZER_ICON_PNG) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if image_id: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             image_binary = self.get_variable_file(self.VariableKey.IMAGE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if not image_binary: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return self.create_text_message("Image not found, please request user to generate image firstly.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        elif image: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            image_binary = download(image) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise ToolParameterValidationError("Please provide either image or image_id") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         response = post( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             "https://vectorizer.ai/api/v1/vectorize", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            data={"mode": mode}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             files={"image": image_binary}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            data={"mode": mode} if mode == "test" else {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             auth=(api_key_name, api_key_value), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             timeout=30, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -59,11 +60,23 @@ class VectorizerTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ToolParameter.get_simple_instance( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 name="image_id", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                llm_description=f"the image id that you want to vectorize, \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    and the image id should be specified in \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                llm_description=f"the image_id that you want to vectorize, \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    and the image_id should be specified in \ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         {[i.name for i in self.list_default_image_variables()]}", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 type=ToolParameter.ToolParameterType.SELECT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                required=True, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                required=False, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 options=[i.name for i in self.list_default_image_variables()], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ToolParameter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                name="image", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                label=I18nObject(en_US="image", zh_Hans="image"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                human_description=I18nObject( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    en_US="The image to be converted.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    zh_Hans="要转换的图片。", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                type=ToolParameter.ToolParameterType.FILE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                form=ToolParameter.ToolParameterForm.LLM, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                llm_description="you should not input this parameter. just input the image_id.", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                required=False, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ] 
			 |