33import io
44import os
55from typing import List
6+ import uuid
67from loguru import logger
78import shortuuid
89from gpt_server .model_worker .base .model_worker_base import ModelWorkerBase
910from gpt_server .model_worker .utils import pil_to_base64
1011import torch
1112from diffusers import FluxPipeline
13+ from gpt_server .utils import STATIC_DIR
1214
1315root_dir = os .path .dirname (os .path .dirname (os .path .dirname (__file__ )))
1416
@@ -44,6 +46,7 @@ def __init__(
4446
4547 async def get_image_output (self , params ):
4648 prompt = params ["prompt" ]
49+ response_format = params .get ("response_format" , "b64_json" )
4750 image = self .pipe (
4851 prompt ,
4952 height = 1024 ,
@@ -53,17 +56,39 @@ async def get_image_output(self, params):
5356 max_sequence_length = 512 ,
5457 generator = torch .Generator (self .device ).manual_seed (0 ),
5558 ).images [0 ]
56- base64 = pil_to_base64 (pil_img = image )
57- result = {
58- "created" : shortuuid .random (),
59- "data" : [{"b64_json" : base64 }],
60- "usage" : {
61- "total_tokens" : 0 ,
62- "input_tokens" : 0 ,
63- "output_tokens" : 0 ,
64- "input_tokens_details" : {"text_tokens" : 0 , "image_tokens" : 0 },
65- },
66- }
59+ result = {}
60+ if response_format == "b64_json" :
61+ # Convert PIL image to base64
62+ base64 = pil_to_base64 (pil_img = image )
63+ result = {
64+ "created" : shortuuid .random (),
65+ "data" : [{"b64_json" : base64 }],
66+ "usage" : {
67+ "total_tokens" : 0 ,
68+ "input_tokens" : 0 ,
69+ "output_tokens" : 0 ,
70+ "input_tokens_details" : {"text_tokens" : 0 , "image_tokens" : 0 },
71+ },
72+ }
73+ return result
74+ elif response_format == "url" :
75+ # 生成唯一文件名(避免冲突)
76+ file_name = str (uuid .uuid4 ()) + ".png"
77+ save_path = STATIC_DIR / file_name
78+ image .save (save_path , format = "PNG" )
79+ WORKER_PORT = os .environ ["WORKER_PORT" ]
80+ WORKER_HOST = os .environ ["WORKER_HOST" ]
81+ url = f"http://{ WORKER_HOST } :{ WORKER_PORT } /static/{ file_name } "
82+ result = {
83+ "created" : shortuuid .random (),
84+ "data" : [{"url" : url }],
85+ "usage" : {
86+ "total_tokens" : 0 ,
87+ "input_tokens" : 0 ,
88+ "output_tokens" : 0 ,
89+ "input_tokens_details" : {"text_tokens" : 0 , "image_tokens" : 0 },
90+ },
91+ }
6792 return result
6893
6994
0 commit comments