Разработчики выпустили Shiny for Python 1.0 с большим набором функций и стабильным API. Фреймворк построен на основе современного веб-стека Python и использует Starlette и asyncio для создания веб-приложений.
Новая версия включает:
новый компонент Chat(), который упрощает внедрение генеративных чат-ботов с искусственным интеллектом на базе любой языковой модели;
from shiny.express import ui
chat = ui.Chat(id="chat")
chat.ui()
@chat.on_user_submit
async def _():
messages = chat.messages()
# The next line is a placeholder for the actual generative AI model
response = await ai_model.generate_response(messages, stream=True)
# Use append_message_stream() when streaming responses
await chat.append_message_stream(response)
сквозное тестирование для поддержания качества кода при смоделированных взаимодействиях в реальном браузере. Оно организовано на платформе Playwright;
улучшения фреймов данных. Появилось два компонента для рендеринга кадров данных: DataGrid() и DataTable().
render.DataGrid(
pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}),
styles=[
# Center the text of each cell (using Bootstrap utility class)
{
"class": "text-center",
},
# Highlight 1st column green
{
"cols": [0],
"style": {"background-color": "mediumspringgreen"},
},
# Highlight rows 1-2 within 2nd column
{
"rows": [0, 1],
"cols": [1],
"style": {"background-color": "darkorange", "color": "white"},
},
],
)
Первый представляет собой более интерактивную и многофункциональную таблицу, а второй — более простую. DataGrid() и DataTable() получили аргумент стилей для отображаемого результата. Они могут принимать список словарей, где каждый словарь представляет стиль, который будет применён к таблице (и, следовательно, должен иметь как минимум ключ стиля). Для применения стиля к конкретным ячейкам можно использовать клавиши rows и cols. Если указаны и строки, и столбцы, стиль будет применяться только к пересечению указанных элементов;
активацию одновременно выделения и редактирования;
render.DataGrid(
pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}),
selection_mode="row",
editable=True,
)
поддержку Polars и набора текста в дополнение к DataFrames pandas. Кроме того, методы доступа, такие как .data() и .data_view(), теперь возвращают тот же тип, что и отображаемые данные. Это работает даже с подсказками типов;
больше контроля над сортировкой и фильтрацией за счёт функций .data_view_rows() — отсортированные и отфильтрованные номера строк, .sort() — информация отсортированного столбца, .filter() — информация отфильтрованного столбца, .update_sort(sort=) — обновление сортировки фрейма данных, .update_filter(filter=) — обновление фильтрации фрейма данных.
import pandas as pd
from shiny import reactive
from shiny.express import input, render, ui
@render.data_frame
def df():
return pd.DataFrame({"A": [1, 3, 2], "B": [4, 5, 6]})
@reactive.effect
@reactive.event(input.sort)
async def update_sort():
await df.update_sort([{"col": 0, "desc": False}])
ui.input_action_button("sort", "Sort on column 0↑")
Кроме того, Shiny теперь предлагает пользовательский интерфейс чата с видеопомощником, поддерживаемый GPT-4o. Он принимает видео с веб-камеры в качестве входных данных и воспроизводит аудио в качестве выходных. Для этого можно использовать функции:
input_video_clip(): предварительный просмотр видео веб-камеры с кнопкой, позволяющей начать/остановить запись, и меню настроек, позволяющее выбрать камеру/микрофон;
audio_spinner(): аудиоплеер, который пульсирует синхронно со звуковым сигналом.
Эти компоненты доступны в отдельном пакете под названием Shinymedia.
В феврале вышла версия Quarto 1.4 с поддержкой Shiny для Python.