library(dotenv)
library(shiny)
library(shinychat)
ui <- bslib::page_fluid(
chat_ui("chat")
)
server <- function(input, output, session) {
chat <- ellmer::chat_openai(system_prompt = "You're a trickster who answers in riddles")
observeEvent(input$chat_user_input, {
stream <- chat$stream_async(input$chat_user_input)
chat_append("chat", stream)
})
}
shinyApp(ui, server)
from shiny.express import render, ui
from shinychat.express import Chat
# Set some Shiny page options
ui.page_opts(title="Hello Chat")
# Create a chat instance, with an initial message
chat = Chat(
id="chat",
messages=[
{"content": "Hello! How can I help you today?", "role": "assistant"},
],
)
# Display the chat
chat.ui()
# Define a callback to run when the user submits a message
@chat.on_user_submit
async def handle_user_input(user_input: str):
await chat.append_message(f"You said: {user_input}")
"Message state:"
@render.code
def message_state():
return str(chat.messages())
library(dotenv)
library(shiny)
library(bslib)
library(querychat)
# 1. Configure querychat. This is where you specify the dataset and can also
# override options like the greeting message, system prompt, model, etc.
querychat_config <- querychat_init(mtcars)
ui <- page_sidebar(
# 2. Use querychat_sidebar(id) in a bslib::page_sidebar.
# Alternatively, use querychat_ui(id) elsewhere if you don't want your
# chat interface to live in a sidebar.
sidebar = querychat_sidebar("chat"),
DT::DTOutput("dt")
)
server <- function(input, output, session) {
# 3. Create a querychat object using the config from step 1.
querychat <- querychat_server("chat", querychat_config)
output$dt <- DT::renderDT({
# 4. Use the filtered/sorted data frame anywhere you wish, via the
# querychat$df() reactive.
DT::datatable(querychat$df())
})
}
shinyApp(ui, server)
import querychat
from chatlas import ChatAnthropic
from seaborn import load_dataset
from shiny.express import render
# data -----
titanic = load_dataset("titanic")
# chatbot setup -----
def create_chat_callback(system_prompt):
return ChatAnthropic(system_prompt=system_prompt)
querychat_config = querychat.init(
titanic,
"titanic",
greeting="""Hello! I'm here to help you explore the Titanic dataset.""",
create_chat_callback=create_chat_callback,
)
chat = querychat.server("chat", querychat_config)
# shiny application -----
# querychat UI
querychat.sidebar("chat")
# querychat filtered dataframe
@render.data_frame
def data_table():
return chat["df"]()
10:00
Python template example code:
MDS AI Mini-Workshop. 2025. https://github.com/chendaniely/2025-06-05-llm