Skip to content

Commit 89be857

Browse files
ahuang11philippjfr
authored andcommitted
Propagate message params (#6830)
1 parent 250024e commit 89be857

File tree

3 files changed

+33
-8
lines changed

3 files changed

+33
-8
lines changed

examples/reference/chat/ChatFeed.ipynb

+14-3
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,12 @@
115115
"metadata": {},
116116
"outputs": [],
117117
"source": [
118-
"message = chat_feed.send(\"Hello world!\", user=\"Bot\", avatar=\"B\")"
118+
"message = chat_feed.send(\n",
119+
" \"Hello world!\",\n",
120+
" user=\"Bot\",\n",
121+
" avatar=\"B\",\n",
122+
" footer_objects=[pn.widgets.Button(name=\"Footer Object\")],\n",
123+
")"
119124
]
120125
},
121126
{
@@ -147,7 +152,7 @@
147152
"metadata": {},
148153
"outputs": [],
149154
"source": [
150-
"message = chat_feed.send({\"object\": \"Welcome!\", \"user\": \"Bot\", \"avatar\": \"B\"})"
155+
"message = chat_feed.send({\"object\": \"Welcome!\", \"user\": \"Bot\", \"avatar\": \"B\", \"footer_objects\": [pn.widgets.Button(name=\"Footer Object\")]})"
151156
]
152157
},
153158
{
@@ -849,7 +854,13 @@
849854
"outputs": [],
850855
"source": [
851856
"# streams (appends) to the previous message\n",
852-
"message = chat_feed.stream(\" World!\", user=\"Aspiring User\", avatar=\"🤓\", message=message)"
857+
"message = chat_feed.stream(\n",
858+
" \" World!\",\n",
859+
" user=\"Aspiring User\",\n",
860+
" avatar=\"🤓\",\n",
861+
" message=message,\n",
862+
" footer_objects=[pn.widgets.Button(name=\"Footer Object\")],\n",
863+
")"
853864
]
854865
},
855866
{

panel/chat/feed.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ def _build_message(
327327
value: dict,
328328
user: str | None = None,
329329
avatar: str | bytes | BytesIO | None = None,
330+
**input_message_params
330331
) -> ChatMessage | None:
331332
"""
332333
Builds a ChatMessage from the value.
@@ -347,6 +348,7 @@ def _build_message(
347348
message_params["avatar"] = avatar
348349
if self.width:
349350
message_params["width"] = int(self.width - 80)
351+
message_params.update(input_message_params)
350352

351353
message = ChatMessage(**message_params)
352354
return message
@@ -547,6 +549,7 @@ def send(
547549
user: str | None = None,
548550
avatar: str | bytes | BytesIO | None = None,
549551
respond: bool = True,
552+
**message_params
550553
) -> ChatMessage | None:
551554
"""
552555
Sends a value and creates a new message in the chat log.
@@ -563,6 +566,8 @@ def send(
563566
The avatar to use; overrides the message message's avatar if provided.
564567
respond : bool
565568
Whether to execute the callback.
569+
message_params : dict
570+
Additional parameters to pass to the ChatMessage.
566571
567572
Returns
568573
-------
@@ -578,7 +583,7 @@ def send(
578583
else:
579584
if not isinstance(value, dict):
580585
value = {"object": value}
581-
message = self._build_message(value, user=user, avatar=avatar)
586+
message = self._build_message(value, user=user, avatar=avatar, **message_params)
582587
self.append(message)
583588
if respond:
584589
self.respond()
@@ -591,6 +596,7 @@ def stream(
591596
avatar: str | bytes | BytesIO | None = None,
592597
message: ChatMessage | None = None,
593598
replace: bool = False,
599+
**message_params
594600
) -> ChatMessage | None:
595601
"""
596602
Streams a token and updates the provided message, if provided.
@@ -613,6 +619,8 @@ def stream(
613619
The message to update.
614620
replace : bool
615621
Whether to replace the existing text when streaming a string or dict.
622+
message_params : dict
623+
Additional parameters to pass to the ChatMessage.
616624
617625
Returns
618626
-------
@@ -635,14 +643,17 @@ def stream(
635643
message.avatar = avatar
636644
else:
637645
message.update(value, user=user, avatar=avatar)
646+
647+
if message_params:
648+
message.param.update(**message_params)
638649
return message
639650

640651
if isinstance(value, ChatMessage):
641652
message = value
642653
else:
643654
if not isinstance(value, dict):
644655
value = {"object": value}
645-
message = self._build_message(value, user=user, avatar=avatar)
656+
message = self._build_message(value, user=user, avatar=avatar, **message_params)
646657
self._replace_placeholder(message)
647658
return message
648659

panel/tests/chat/test_feed.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,11 @@ def test_card_params(self, chat_feed):
6868
assert not chat_feed._card.hide_header
6969

7070
def test_send(self, chat_feed):
71-
message = chat_feed.send("Message")
71+
message = chat_feed.send("Message", footer_objects=[HTML("Footer")])
7272
wait_until(lambda: len(chat_feed.objects) == 1)
7373
assert chat_feed.objects[0] is message
7474
assert chat_feed.objects[0].object == "Message"
75+
assert chat_feed.objects[0].footer_objects[0].object == "Footer"
7576

7677
def test_link_chat_log_objects(self, chat_feed):
7778
chat_feed.send("Message")
@@ -163,21 +164,23 @@ def test_respond_without_callback(self, chat_feed):
163164
chat_feed.respond() # Should not raise any errors
164165

165166
def test_stream(self, chat_feed):
166-
message = chat_feed.stream("Streaming message", user="Person", avatar="P")
167+
message = chat_feed.stream("Streaming message", user="Person", avatar="P", footer_objects=[HTML("Footer")])
167168
assert len(chat_feed.objects) == 1
168169
assert chat_feed.objects[0] is message
169170
assert chat_feed.objects[0].object == "Streaming message"
170171
assert chat_feed.objects[0].user == "Person"
171172
assert chat_feed.objects[0].avatar == "P"
173+
assert chat_feed.objects[0].footer_objects[0].object == "Footer"
172174

173175
updated_entry = chat_feed.stream(
174-
" Appended message", user="New Person", message=message, avatar="N"
176+
" Appended message", user="New Person", message=message, avatar="N", footer_objects=[HTML("New Footer")]
175177
)
176178
wait_until(lambda: len(chat_feed.objects) == 1)
177179
assert chat_feed.objects[0] is updated_entry
178180
assert chat_feed.objects[0].object == "Streaming message Appended message"
179181
assert chat_feed.objects[0].user == "New Person"
180182
assert chat_feed.objects[0].avatar == "N"
183+
assert chat_feed.objects[0].footer_objects[0].object == "New Footer"
181184

182185
new_entry = chat_feed.stream("New message")
183186
wait_until(lambda: len(chat_feed.objects) == 2)

0 commit comments

Comments
 (0)