Mark abstract image/vision generators as real async generators
`ImageGenService.run_image_gen` and `VisionService.run_vision` were declared `async def ... -> AsyncGenerator[Frame, None]` with `pass` bodies. Without a `yield` anywhere in the body, Python treats the function as a coroutine returning an `AsyncGenerator`, not as an async generator itself, so callers got a coroutine where they expected an iterator. Add `raise NotImplementedError; yield` so the body contains a yield (making this a real async generator) while still raising cleanly if a subclass ever calls `super().run_*` by mistake.
This commit is contained in:
@@ -57,7 +57,8 @@ class ImageGenService(AIService):
|
||||
Frame: Frames containing the generated image (typically ImageRawFrame
|
||||
or URLImageRawFrame).
|
||||
"""
|
||||
pass
|
||||
raise NotImplementedError
|
||||
yield # pragma: no cover
|
||||
|
||||
async def process_frame(self, frame: Frame, direction: FrameDirection):
|
||||
"""Process frames for image generation.
|
||||
|
||||
@@ -59,7 +59,8 @@ class VisionService(AIService):
|
||||
Frame: Frames containing the vision analysis results, typically TextFrame
|
||||
objects with descriptions or answers.
|
||||
"""
|
||||
pass
|
||||
raise NotImplementedError
|
||||
yield # pragma: no cover
|
||||
|
||||
async def process_frame(self, frame: Frame, direction: FrameDirection):
|
||||
"""Process frames, handling vision image frames for analysis.
|
||||
|
||||
Reference in New Issue
Block a user