Add some utils fns, add moshi to cookbook, fix querySelector, support async functions in ReplyOnPause (#29)

* add

* add code
This commit is contained in:
Freddy Boulton
2024-12-04 15:14:19 -05:00
committed by GitHub
parent c85c117576
commit 868e0bfa64
9 changed files with 158 additions and 10 deletions

View File

@@ -70,6 +70,10 @@ ReplyFnGenerator = Union[
]
async def iterate(generator: Generator) -> Any:
return next(generator)
class ReplyOnPause(StreamHandler):
def __init__(
self,
@@ -86,6 +90,7 @@ class ReplyOnPause(StreamHandler):
self.output_frame_size = output_frame_size
self.model = get_vad_model()
self.fn = fn
self.is_async = inspect.isasyncgenfunction(fn)
self.event = Event()
self.state = AppState()
self.generator = None
@@ -172,6 +177,9 @@ class ReplyOnPause(StreamHandler):
self.channel.send("tick")
logger.debug("Sent tick")
async def async_iterate(self, generator) -> Any:
return await anext(generator)
def emit(self):
if not self.event.is_set():
return None
@@ -190,6 +198,11 @@ class ReplyOnPause(StreamHandler):
logger.debug("Latest args: %s", self.latest_args)
self.state.responding = True
try:
return next(self.generator)
except StopIteration:
if self.is_async:
return asyncio.run_coroutine_threadsafe(
self.async_iterate(self.generator), self.loop
).result()
else:
return next(self.generator)
except (StopIteration, StopAsyncIteration):
self.reset()