From 0780aa312b22a828e9d3caed941139a4e2c89de3 Mon Sep 17 00:00:00 2001 From: Ale Mercado Date: Thu, 2 Oct 2025 16:00:56 -0400 Subject: [PATCH 1/4] feat: streaming helper --- listeners/assistant/assistant.py | 7 +++---- requirements.txt | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/listeners/assistant/assistant.py b/listeners/assistant/assistant.py index 9bb6f16..5bfa433 100644 --- a/listeners/assistant/assistant.py +++ b/listeners/assistant/assistant.py @@ -118,23 +118,22 @@ def respond_in_assistant_thread( returned_message = call_llm(messages_in_thread) - stream_response = client.chat_startStream( + streamer = client.chat_stream( channel=channel_id, recipient_team_id=team_id, recipient_user_id=user_id, thread_ts=thread_ts, ) - stream_ts = stream_response["ts"] # use of this for loop is specific to openai response method for event in returned_message: if event.type == "response.output_text.delta": - client.chat_appendStream(channel=channel_id, ts=stream_ts, markdown_text=f"{event.delta}") + streamer.append(markdown_text=f"{event.delta}") else: continue feedback_block = create_feedback_block() - client.chat_stopStream(channel=channel_id, ts=stream_ts, blocks=feedback_block) + streamer.stop(blocks=feedback_block) except Exception as e: logger.exception(f"Failed to handle a user message event: {e}") diff --git a/requirements.txt b/requirements.txt index 083826a..be80817 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ slack-sdk==3.36.0.dev5 -slack-bolt==1.26.0.dev2 +slack-bolt==1.26.0.dev3 # If you use a different LLM vendor, replace this dependency openai From 1ee90f6795dba6d45c9a8a992bad0616e72c437f Mon Sep 17 00:00:00 2001 From: Ale Mercado Date: Thu, 2 Oct 2025 16:04:24 -0400 Subject: [PATCH 2/4] build: upgrade slack sdk version --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index be80817..5cd8a51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -slack-sdk==3.36.0.dev5 +slack-sdk==3.36.0.dev6 slack-bolt==1.26.0.dev3 # If you use a different LLM vendor, replace this dependency From d83423088b5732b1e0cd3e4a19eb0ec3d9822497 Mon Sep 17 00:00:00 2001 From: Ale Mercado Date: Thu, 2 Oct 2025 16:43:40 -0400 Subject: [PATCH 3/4] feat: add chat_stream to app_mention --- listeners/events/app_mentioned.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/listeners/events/app_mentioned.py b/listeners/events/app_mentioned.py index e9876ba..9f813f1 100644 --- a/listeners/events/app_mentioned.py +++ b/listeners/events/app_mentioned.py @@ -34,23 +34,22 @@ def app_mentioned_callback(client: WebClient, event: dict, logger: Logger, say: returned_message = call_llm([{"role": "user", "content": text}]) - stream_response = client.chat_startStream( - channel=channel_id, recipient_team_id=team_id, recipient_user_id=user_id, thread_ts=thread_ts + streamer = client.chat_stream( + channel=channel_id, + recipient_team_id=team_id, + recipient_user_id=user_id, + thread_ts=thread_ts, ) - stream_ts = stream_response["ts"] - - # Loop over OpenAI response stream - # https://platform.openai.com/docs/api-reference/responses/create + # use of this for loop is specific to openai response method for event in returned_message: if event.type == "response.output_text.delta": - client.chat_appendStream(channel=channel_id, ts=stream_ts, markdown_text=f"{event.delta}") + streamer.append(markdown_text=f"{event.delta}") else: continue feedback_block = create_feedback_block() - client.chat_stopStream(channel=channel_id, ts=stream_ts, blocks=feedback_block) - + streamer.stop(blocks=feedback_block) except Exception as e: logger.exception(f"Failed to handle a user message event: {e}") say(f":warning: Something went wrong! ({e})") From 15d6bce9a119c08151d8b6637181744bcf60f38b Mon Sep 17 00:00:00 2001 From: Michael Brooks Date: Thu, 2 Oct 2025 14:41:33 -0700 Subject: [PATCH 4/4] docs: update openai comment block --- listeners/assistant/assistant.py | 3 ++- listeners/events/app_mentioned.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/listeners/assistant/assistant.py b/listeners/assistant/assistant.py index 5bfa433..320d41f 100644 --- a/listeners/assistant/assistant.py +++ b/listeners/assistant/assistant.py @@ -125,7 +125,8 @@ def respond_in_assistant_thread( thread_ts=thread_ts, ) - # use of this for loop is specific to openai response method + # Loop over OpenAI response stream + # https://platform.openai.com/docs/api-reference/responses/create for event in returned_message: if event.type == "response.output_text.delta": streamer.append(markdown_text=f"{event.delta}") diff --git a/listeners/events/app_mentioned.py b/listeners/events/app_mentioned.py index 9f813f1..ea34c38 100644 --- a/listeners/events/app_mentioned.py +++ b/listeners/events/app_mentioned.py @@ -41,7 +41,8 @@ def app_mentioned_callback(client: WebClient, event: dict, logger: Logger, say: thread_ts=thread_ts, ) - # use of this for loop is specific to openai response method + # Loop over OpenAI response stream + # https://platform.openai.com/docs/api-reference/responses/create for event in returned_message: if event.type == "response.output_text.delta": streamer.append(markdown_text=f"{event.delta}")