Skip to content

Commit db9ab1a

Browse files
sphuffAUTOMATIC1111
authored andcommitted
[Bugfix][API] - Fix API response for colab users
1 parent cbb857b commit db9ab1a

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

modules/api/api.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from fastapi import Body, APIRouter, HTTPException
88
from fastapi.responses import JSONResponse
99
from pydantic import BaseModel, Field, Json
10+
from typing import List
1011
import json
1112
import io
1213
import base64
@@ -15,12 +16,12 @@
1516
sampler_to_index = lambda name: next(filter(lambda row: name.lower() == row[1].name.lower(), enumerate(all_samplers)), None)
1617

1718
class TextToImageResponse(BaseModel):
18-
images: list[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
19+
images: List[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
1920
parameters: Json
2021
info: Json
2122

2223
class ImageToImageResponse(BaseModel):
23-
images: list[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
24+
images: List[str] = Field(default=None, title="Image", description="The generated image in base64 format.")
2425
parameters: Json
2526
info: Json
2627

@@ -41,6 +42,9 @@ def __base64_to_image(self, base64_string):
4142
# convert base64 to PIL image
4243
return Image.open(io.BytesIO(imgdata))
4344

45+
def __processed_info_to_json(self, processed):
46+
return json.dumps(processed.info)
47+
4448
def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI):
4549
sampler_index = sampler_to_index(txt2imgreq.sampler_index)
4650

@@ -65,7 +69,7 @@ def text2imgapi(self, txt2imgreq: StableDiffusionTxt2ImgProcessingAPI):
6569
i.save(buffer, format="png")
6670
b64images.append(base64.b64encode(buffer.getvalue()))
6771

68-
return TextToImageResponse(images=b64images, parameters=json.dumps(vars(txt2imgreq)), info=json.dumps(processed.info))
72+
return TextToImageResponse(images=b64images, parameters=json.dumps(vars(txt2imgreq)), info=processed.js())
6973

7074

7175

@@ -111,7 +115,12 @@ def img2imgapi(self, img2imgreq: StableDiffusionImg2ImgProcessingAPI):
111115
i.save(buffer, format="png")
112116
b64images.append(base64.b64encode(buffer.getvalue()))
113117

114-
return ImageToImageResponse(images=b64images, parameters=json.dumps(vars(img2imgreq)), info=json.dumps(processed.info))
118+
if (not img2imgreq.include_init_images):
119+
# remove img2imgreq.init_images and img2imgreq.mask
120+
img2imgreq.init_images = None
121+
img2imgreq.mask = None
122+
123+
return ImageToImageResponse(images=b64images, parameters=json.dumps(vars(img2imgreq)), info=processed.js())
115124

116125
def extrasapi(self):
117126
raise NotImplementedError

modules/api/models.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ModelDef(BaseModel):
3131
field_alias: str
3232
field_type: Any
3333
field_value: Any
34+
field_exclude: bool = False
3435

3536

3637
class PydanticModelGenerator:
@@ -68,7 +69,7 @@ def merge_class_params(class_):
6869
field=underscore(k),
6970
field_alias=k,
7071
field_type=field_type_generator(k, v),
71-
field_value=v.default
72+
field_value=v.default,
7273
)
7374
for (k,v) in self._class_data.items() if k not in API_NOT_ALLOWED
7475
]
@@ -78,15 +79,16 @@ def merge_class_params(class_):
7879
field=underscore(fields["key"]),
7980
field_alias=fields["key"],
8081
field_type=fields["type"],
81-
field_value=fields["default"]))
82+
field_value=fields["default"],
83+
field_exclude=fields["exclude"] if "exclude" in fields else False))
8284

8385
def generate_model(self):
8486
"""
8587
Creates a pydantic BaseModel
8688
from the json and overrides provided at initialization
8789
"""
8890
fields = {
89-
d.field: (d.field_type, Field(default=d.field_value, alias=d.field_alias)) for d in self._model_def
91+
d.field: (d.field_type, Field(default=d.field_value, alias=d.field_alias, exclude=d.field_exclude)) for d in self._model_def
9092
}
9193
DynamicModel = create_model(self._model_name, **fields)
9294
DynamicModel.__config__.allow_population_by_field_name = True
@@ -102,5 +104,5 @@ def generate_model(self):
102104
StableDiffusionImg2ImgProcessingAPI = PydanticModelGenerator(
103105
"StableDiffusionProcessingImg2Img",
104106
StableDiffusionProcessingImg2Img,
105-
[{"key": "sampler_index", "type": str, "default": "Euler"}, {"key": "init_images", "type": list, "default": None}, {"key": "denoising_strength", "type": float, "default": 0.75}, {"key": "mask", "type": str, "default": None}]
107+
[{"key": "sampler_index", "type": str, "default": "Euler"}, {"key": "init_images", "type": list, "default": None}, {"key": "denoising_strength", "type": float, "default": 0.75}, {"key": "mask", "type": str, "default": None}, {"key": "include_init_images", "type": bool, "default": False, "exclude" : True}]
106108
).generate_model()

0 commit comments

Comments
 (0)