Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/hayhooks/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
is_user_message,
get_last_user_message,
streaming_generator,
streaming_generator_all,
async_streaming_generator
)

Expand All @@ -14,6 +15,7 @@
"is_user_message",
"get_last_user_message",
"streaming_generator",
"streaming_generator_all",
"async_streaming_generator",
"create_app",
]
36 changes: 36 additions & 0 deletions src/hayhooks/server/pipelines/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,3 +175,39 @@ async def streaming_callback(chunk):
except Exception as e:
log.warning(f"Error during pipeline task cleanup: {e}")
raise e



# by HS: register streaming for all components
def streaming_generator_all(pipeline: Pipeline, pipeline_run_args: Dict) -> Generator:
queue: Queue[str] = Queue()

def streaming_callback(chunk):
queue.put(chunk.content)

pipeline_run_args = pipeline_run_args.copy()

# NEU: Alle Komponenten mit streaming_callback erfassen
for name, component in pipeline.walk():
if hasattr(component, "streaming_callback"):
if name not in pipeline_run_args:
pipeline_run_args[name] = {}
pipeline_run_args[name]["streaming_callback"] = streaming_callback

def run_pipeline():
try:
pipeline.run(pipeline_run_args)
finally:
queue.put(None)

thread = threading.Thread(target=run_pipeline)
thread.start()

while True:
chunk = queue.get()
if chunk is None:
break
yield chunk

thread.join()