Разработчики выпустили 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.
Источник: habr.com