shinychat (development version)
New features
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 usingchat_append()
withchat_ui()
, setstream = "content"
when you call the$stream_async()
method on theellmer::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=...)
andchat_ui(icon_assistant=...)
for customizing the icon that appears next to assistant responses. (#88)chat_mod_server()
now returns a list of reactives forlast_input
andlast_turn
, as well and functions toupdate_user_input()
andclear()
the chat. (#130)
Improvements
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)
Bug fixes
- The chat input no longer submits incomplete text when the user has activated IME completions (e.g. while typing in Japanese or Chinese). (#85)
Internal changes
- We consolidated the
<shiny-chat-message>
and<shiny-user-message>
components into a single<shiny-chat-message>
component with adata-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 anyshiny-user-message
rules to useshiny-chat-message[data-role="user"]
. (#101)
shinychat 0.2.0
CRAN release: 2025-05-16
New features and improvements
Added new
output_markdown_stream()
andmarkdown_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()
andoutput_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()
andchat_mod_server()
.chat_app()
takes an ellmer chat client and launches a simple Shiny app interface with the chat.chat_mod_ui()
andchat_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)
Bug fixes
chat_append()
,chat_append_message()
andchat_clear()
now all work in Shiny modules without needing to namespace theid
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 usepromises::catch()
to handle the error in your app code if desired. (#46)