123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- """ 工具 text_to_image 画图"""
- from tools.toolbase import *
- from openai_wrapper import OpenAIWrapper
- class Tool_text_to_image(ToolBase):
- """ 工具:text_to_image
- 调用openai 作图"""
- def __init__(self, config:Config, oaiw:OpenAIWrapper) -> None:
- """初始化 """
- super().__init__(config)
- self.oaiw = oaiw
- @property
- def name(self) -> str:
- return "text_to_image"
- @property
- def desc(self) -> str:
- return "用文字描述生成图像"
- @property
- def function_json(self) -> dict:
- FUNCTION_TEXT_TO_IMAGE = {
- "name": "text_to_image",
- "description": "Generate image or photo based on user text prompt when user explicitly requests to generate iamge or photo",
- "parameters": {
- "type": "object",
- "properties": {
- "prompt": {
- "type": "string",
- "description": "User's text description of the desired image."
- },
- "quality":{
- "type": "string",
- "description": "The quality of the image that will be generated. hd creates images with finer details and greater consistency across the image.",
- "enum": ["standard", "hd"]
- }
- },
- "required": ["prompt", "quality"]
- }
- }
- return FUNCTION_TEXT_TO_IMAGE
- def process_toolcall(self, arguments:str, callback_msg:MSG_CALLBACK) -> str:
- """ 作图 """
- args = json.loads(arguments)
- prompt = args['prompt']
- quality = args['quality']
- callback_msg(ChatMsg(ContentType.text, f"正在为您生成图片({quality})"))
- # common.logger().info("调用OpenAI生成图片(%s): %s", quality, prompt)
- url, revised_prompt = self.oaiw.text_to_image(prompt, quality)
- # common.logger().info("下载图片: %s", url)
- tempfile = common.temp_file(f"openai_image_{common.timestamp()}.png")
- proxy = self.config.OPENAI.get('proxy', None) # 使用openai proxy
- res = common.download_file(url, tempfile, proxy)
- if res == 0: #下载成功:
- callback_msg(ChatMsg(ContentType.image, tempfile))
- return f"成功生成图片并已发送给用户。修改后的提示词: {revised_prompt}"
- else: #下载失败
- return f"下载图片失败。图片地址:{url}, 修改后的提示词: {revised_prompt}"
|