chat_mod_server() now returns a list of reactives for
last_input and last_turn, as well functions to
update_user_input(), append() and
clear() the chat. (#130, #143, #145)Added chat_restore() which adds Shiny bookmarking
hooks to save and restore the {ellmer} chat client. (#28,
#82)
Added update_chat_user_input() for programmatically
updating the user input of a chat UI element. (#78)
shinychat now shows tool call request and results in the UI, and
the feature is enabled by default in chat_app() and the
chat module (chat_mod_server()). When using
chat_append() with chat_ui(), set
stream = "content" when you call the
$stream_async() method on the ellmer::Chat
client to ensure tool calls are included in the chat stream output.
Learn more in the tool
calling UI article. (#52)
Added chat_append(icon=...) and
chat_ui(icon_assistant=...) for customizing the icon that
appears next to assistant responses. (#88)
chat_app() now correctly restores the chat client
state when refreshing the app, e.g. by reloading the page.
(#71)
External links in chat messages in chat_ui() now
open in a new tab by default, with a confirmation dialog.
(#120)
We consolidated the <shiny-chat-message> and
<shiny-user-message> components into a single
<shiny-chat-message> component with a
data-role attribute to indicate whether it’s an “assistant”
or “user” message. This likely has minimal impact on your apps, other
than custom styles. You should update any
shiny-user-message rules to use
shiny-chat-message[data-role="user"]. (#101)
The chat UI’s send input button is now identified by the class
.shiny-chat-btn-send. (@DeepanshKhurana, #138)
Added new output_markdown_stream() and
markdown_stream() functions to allow for streaming markdown
content to the client. This is useful for showing Generative AI
responses in real-time in a Shiny app, outside of a chat interface.
(#23)
Both chat_ui() and
output_markdown_stream() now support arbitrary Shiny UI
elements inside of messages. This allows for gathering input from the
user (e.g., selectInput()), displaying of rich output
(e.g., {htmlwidgets} like {plotly}), and more.
(#29)
Added a new chat_clear() function to clear the chat
of all messages. (#25)
Added chat_app(), chat_mod_ui() and
chat_mod_server(). chat_app() takes an
{ellmer} chat client and launches a simple Shiny app
interface with the chat. chat_mod_ui() and
chat_mod_server() replicate the interface as a Shiny
module, for easily adding a simple chat interface connected to a
specific {ellmer} chat client. (#36)
The promise returned by chat_append() now resolves
to the content streamed into the chat. (#49)
chat_append(), chat_append_message()
and chat_clear() now all work in Shiny modules without
needing to namespace the id of the Chat component.
(#37)
chat_append() now logs and throws a silent error if
the stream errors for any reason. This prevents the app from crashing if
the stream is interrupted. You can still use
promises::catch() to handle the error in your app code if
desired. (#46)