Hotfix for https://huggingface.co/spaces/finegrain/finegrain-object-eraser/discussions/9

#10
by catwell - opened
Files changed (1) hide show
  1. src/app.py +11 -4
src/app.py CHANGED
@@ -88,6 +88,15 @@ async def _process(ctx: EditorAPIContext, params: ProcessParams) -> Image.Image:
88
  f.seek(0)
89
  return Image.open(f)
90
 
 
 
 
 
 
 
 
 
 
91
 
92
  def process_bbox(prompts: dict[str, Any]) -> tuple[Image.Image, Image.Image]:
93
  assert isinstance(img := prompts["image"], Image.Image)
@@ -100,8 +109,7 @@ def process_bbox(prompts: dict[str, Any]) -> tuple[Image.Image, Image.Image]:
100
  if resized_img.width != img.width:
101
  bbox = [int(v * resized_img.width / img.width) for v in bbox]
102
 
103
- output_image = _ctx().run_one_sync(
104
- _process,
105
  ProcessParams(
106
  image=resized_img,
107
  bbox=(bbox[0], bbox[1], bbox[2], bbox[3]),
@@ -116,8 +124,7 @@ def on_change_bbox(prompts: dict[str, Any] | None):
116
 
117
  def process_prompt(img: Image.Image, prompt: str) -> tuple[Image.Image, Image.Image]:
118
  resized_img = resize(img)
119
- output_image = _ctx().run_one_sync(
120
- _process,
121
  ProcessParams(image=resized_img, prompt=prompt),
122
  )
123
  return (img, output_image)
 
88
  f.seek(0)
89
  return Image.open(f)
90
 
91
+ async def _run(params: ProcessParams) -> Image.Image:
92
+ # hotfix for https://huggingface.co/spaces/finegrain/finegrain-object-eraser/discussions/9
93
+ # happens because _sse_task is not None in sse_start
94
+ ctx = _ctx()
95
+ try:
96
+ return ctx.run_one_sync(_process, params)
97
+ except AssertionError:
98
+ ctx.reset()
99
+ return ctx.run_one_sync(_process, params)
100
 
101
  def process_bbox(prompts: dict[str, Any]) -> tuple[Image.Image, Image.Image]:
102
  assert isinstance(img := prompts["image"], Image.Image)
 
109
  if resized_img.width != img.width:
110
  bbox = [int(v * resized_img.width / img.width) for v in bbox]
111
 
112
+ output_image = _run(
 
113
  ProcessParams(
114
  image=resized_img,
115
  bbox=(bbox[0], bbox[1], bbox[2], bbox[3]),
 
124
 
125
  def process_prompt(img: Image.Image, prompt: str) -> tuple[Image.Image, Image.Image]:
126
  resized_img = resize(img)
127
+ output_image = _run(
 
128
  ProcessParams(image=resized_img, prompt=prompt),
129
  )
130
  return (img, output_image)