Uh oh!
There was an error while loading. Please reload this page.
feat: add plan_update chunk for chat streaming - #1821
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@## feat-ai-apps-thinking-steps #1821 +/- ##
==============================================================
Coverage ? 83.96% ==============================================================
Files ? 116 Lines ? 13223 Branches ? 0 ==============================================================
Hits ? 11103 Misses ? 2120 Partials ? 0 ☔ View full report in Codecov by Sentry. |
| super().__init__(type=self.type) | ||
| show_unknown_key_warning(self, others) | ||
| self.title = title |
There was a problem hiding this comment.
thanks for getting clarification on what this chunk should look like 😸
There was a problem hiding this comment.
✅ Thanks for adding the plan_update chunk!
🧪 Local testing works well on my side. Thanks for the code sample. In case others want to check, I'll include my listeners/assistant/message.py from the sample app.
bolt-python-assistant-template/listeners/assistant/message.py:
fromloggingimportLoggerfromtypingimportDict, Listfromslack_boltimportBoltContext, Say, SetStatusfromslack_sdkimportWebClientfromai.llm_callerimportcall_llmfrom ..views.feedback_blockimportcreate_feedback_blockimporttimefromslack_sdk.models.messages.chunkimportMarkdownTextChunk, TaskUpdateChunk, URLSource, PlanUpdateChunkdefmessage(
client: WebClient,
context: BoltContext,
logger: Logger,
payload: dict,
say: Say,
set_status: SetStatus,
):
""" Handles when users send messages or select a prompt in an assistant thread and generate AI responses: Args: client: Slack WebClient for making API calls context: Bolt context containing channel and thread information logger: Logger instance for error tracking payload: Event payload with message details (channel, user, text, etc.) say: Function to send messages to the thread set_status: Function to update the assistant's status """try:
channel_id=payload["channel"]
team_id=context.team_idthread_ts=payload["thread_ts"]
user_id=context.user_idset_status(
status="thinking...",
loading_messages=[
"Teaching the hamsters to type faster…",
"Untangling the internet cables…",
"Consulting the office goldfish…",
"Polishing up the response just for you…",
"Convincing the AI to stop overthinking…",
],
)
replies=client.conversations_replies(
channel=context.channel_id,
ts=context.thread_ts,
oldest=context.thread_ts,
limit=10,
)
messages_in_thread: List[Dict[str, str]] = []
formessageinreplies["messages"]:
role="user"ifmessage.get("bot_id") isNoneelse"assistant"messages_in_thread.append({"role": role, "content": message["text"]})
streamer=client.chat_stream(
channel=channel_id,
recipient_team_id=team_id,
recipient_user_id=user_id,
thread_ts=thread_ts,
task_display_mode="plan",
)
streamer.append(
chunks=[
MarkdownTextChunk(
text="Hello.\nI have received the task. ",
),
MarkdownTextChunk(
text="This task appears manageable.\nThat is good.",
),
TaskUpdateChunk(
id="001",
title="Understanding the task...",
status="in_progress",
details="- Identifying the goal\n- Identifying constraints",
),
TaskUpdateChunk(
id="002",
title="Performing acrobatics...",
status="pending",
),
],
)
time.sleep(4)
streamer.append(
chunks=[
PlanUpdateChunk(
title="Adding the final pieces...",
),
TaskUpdateChunk(
id="001",
title="Understanding the task...",
status="complete",
details="\n- Pretending this was obvious",
output="We'll continue to ramble now",
),
TaskUpdateChunk(
id="002",
title="Performing acrobatics...",
status="in_progress",
),
],
)
time.sleep(4)
streamer.stop(
chunks=[
TaskUpdateChunk(
id="002",
title="Performing acrobatics...",
status="complete",
details="- Jumped atop ropes\n- Juggled bowling pins\n- Rode a single wheel too",
),
MarkdownTextChunk(
text="The crowd appears to be astound and applauds :popcorn:"
),
PlanUpdateChunk(
title="Celebrating a job well done!",
),
],
)
exceptExceptionase:
logger.exception(f"Failed to handle a user message event: {e}")
say(f":warning: Something went wrong! ({e})")Co-authored-by: Michael Brooks <mbrooks@slack-corp.com>
zimeg
commented
Jan 17, 2026
Uh oh!
There was an error while loading. Please reload this page.
Summary
This PR adds the
plan_updatechunk for updating the plan block title in chat streams.Testing
The following shows the plan block title updating after each few seconds:
Category
/docs(Documents)tests/integration_tests(Automated tests for this library)Requirements
python3 -m venv .venv && source .venv/bin/activate && ./scripts/run_validation.shafter making the changes.