Spaces:
Runtime error
Runtime error
yuanjie commited on
Commit ·
6207b87
1
Parent(s): df42de3
update
Browse files- pages/2_📚_PDF预览.py +3 -1
- pages/889_机器监控.py +118 -0
- pages/991_streamlit_apex_charts.py +12 -111
- pages/997_streamlit_aggrid.py +16 -0
- pages/998_streamlit_agraph.py +49 -0
- requirements.txt +3 -0
pages/2_📚_PDF预览.py
CHANGED
|
@@ -2,7 +2,7 @@ from meutils.pipe import *
|
|
| 2 |
from appzoo.streamlit_app import Page
|
| 3 |
|
| 4 |
import streamlit as st
|
| 5 |
-
|
| 6 |
|
| 7 |
class MyPage(Page):
|
| 8 |
"""
|
|
@@ -10,6 +10,8 @@ class MyPage(Page):
|
|
| 10 |
"""
|
| 11 |
|
| 12 |
def main(self):
|
|
|
|
|
|
|
| 13 |
with st.form("PDF"):
|
| 14 |
file = st.file_uploader("选择待上传的PDF文件", type=['pdf', 'docx', 'xlsx'])
|
| 15 |
|
|
|
|
| 2 |
from appzoo.streamlit_app import Page
|
| 3 |
|
| 4 |
import streamlit as st
|
| 5 |
+
import streamlit.components.v1 as components
|
| 6 |
|
| 7 |
class MyPage(Page):
|
| 8 |
"""
|
|
|
|
| 10 |
"""
|
| 11 |
|
| 12 |
def main(self):
|
| 13 |
+
|
| 14 |
+
|
| 15 |
with st.form("PDF"):
|
| 16 |
file = st.file_uploader("选择待上传的PDF文件", type=['pdf', 'docx', 'xlsx'])
|
| 17 |
|
pages/889_机器监控.py
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
# @Project : Python.
|
| 4 |
+
# @File : 991_streamlit_apex_charts
|
| 5 |
+
# @Time : 2022/10/17 上午10:48
|
| 6 |
+
# @Author : yuanjie
|
| 7 |
+
# @WeChat : meutils
|
| 8 |
+
# @Software : PyCharm
|
| 9 |
+
# @Description :
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
import psutil
|
| 13 |
+
import streamlit as st
|
| 14 |
+
import time
|
| 15 |
+
import datetime
|
| 16 |
+
from streamlit_autorefresh import st_autorefresh
|
| 17 |
+
from streamlit_apex_charts import bar_chart, pie_chart
|
| 18 |
+
import pandas as pd
|
| 19 |
+
import platform
|
| 20 |
+
import os
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
st.set_page_config(page_title="系统信息查看器", page_icon="💻", layout="wide")
|
| 24 |
+
|
| 25 |
+
#st_autorefresh(interval=5000, limit=100000, key="Mr.R")
|
| 26 |
+
|
| 27 |
+
st.header("系统信息查看器")
|
| 28 |
+
base_infor = [[datetime.datetime.now().strftime("%Y-%m-%d %H: %M: %S"),str(psutil.users()[0][0]),platform.platform()]]
|
| 29 |
+
df_base_infor = pd.DataFrame(base_infor, columns=["当前时间","登陆者","操作系统"])
|
| 30 |
+
st.table(df_base_infor)
|
| 31 |
+
|
| 32 |
+
#获取网卡名称
|
| 33 |
+
def get_key():
|
| 34 |
+
key_info = psutil.net_io_counters(pernic=True).keys() # 获取网卡名称
|
| 35 |
+
recv = {}
|
| 36 |
+
sent = {}
|
| 37 |
+
for key in key_info:
|
| 38 |
+
recv.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_recv) # 各网卡接收的字节数
|
| 39 |
+
sent.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_sent) # 各网卡发送的字节数
|
| 40 |
+
return key_info, recv, sent
|
| 41 |
+
|
| 42 |
+
#获取网卡速率
|
| 43 |
+
def get_rate(func):
|
| 44 |
+
key_info, old_recv, old_sent = func() # 上一秒收集的数据
|
| 45 |
+
time.sleep(1)
|
| 46 |
+
key_info, now_recv, now_sent = func() # 当前所收集的数据
|
| 47 |
+
net_in = {}
|
| 48 |
+
net_out = {}
|
| 49 |
+
for key in key_info:
|
| 50 |
+
net_in.setdefault(key, (now_recv.get(key) - old_recv.get(key)) / 1024) # 每秒接收速率
|
| 51 |
+
net_out.setdefault(key, (now_sent.get(key) - old_sent.get(key)) / 1024) # 每秒发送速率
|
| 52 |
+
return key_info, net_in, net_out
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
c1, c2, c3 = st.columns(3)
|
| 56 |
+
|
| 57 |
+
with c1:
|
| 58 |
+
#内存
|
| 59 |
+
mem = psutil.virtual_memory()
|
| 60 |
+
zj = float(mem.total) / 1024 / 1024 / 1024
|
| 61 |
+
ysy = float(mem.used) / 1024 / 1024 / 1024
|
| 62 |
+
kx = float(mem.free) / 1024 / 1024 / 1024
|
| 63 |
+
|
| 64 |
+
data_neicun = [[round(ysy,2),round(kx, 2)]]
|
| 65 |
+
df_neicun = pd.DataFrame(data_neicun, columns=["已用内存","空闲内存"])
|
| 66 |
+
pie_chart("内存使用情况(GB)", df_neicun)
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
#CPU
|
| 70 |
+
cpu_liyonglv = (str(psutil.cpu_percent(1))) + '%'
|
| 71 |
+
cpu_data = [[cpu_liyonglv]]
|
| 72 |
+
df_cpu = pd.DataFrame(cpu_data, columns=["CPU利用率"])
|
| 73 |
+
bar_chart("CPU利用率(%)", df_cpu)
|
| 74 |
+
|
| 75 |
+
with c2:
|
| 76 |
+
#磁盘
|
| 77 |
+
dk = psutil.disk_usage('/')
|
| 78 |
+
total = dk.total / 1024 / 1024 / 1024
|
| 79 |
+
used = dk.used / 1024 / 1024 / 1024
|
| 80 |
+
free = dk.free / 1024 / 1024 / 1024
|
| 81 |
+
|
| 82 |
+
cipan_shiyong = [[used, free]]
|
| 83 |
+
df_cipan = pd.DataFrame(cipan_shiyong, columns=["已使用磁盘大小","空闲磁盘大小"])
|
| 84 |
+
pie_chart("磁盘使用率(%)", df_cipan)
|
| 85 |
+
|
| 86 |
+
#网络速率
|
| 87 |
+
key_info, net_in, net_out = get_rate(get_key)
|
| 88 |
+
wangka_liuliang = []
|
| 89 |
+
for key in key_info:
|
| 90 |
+
wangka_liuliang.append([net_in.get(key),net_out.get(key)])
|
| 91 |
+
speed_internet = wangka_liuliang
|
| 92 |
+
df_speed = pd.DataFrame(speed_internet, columns=["下行速率","上行速率"])
|
| 93 |
+
bar_chart("网络速率(kb/s)", df_speed)
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
with c3:
|
| 98 |
+
#进程信息
|
| 99 |
+
pids = psutil.pids()
|
| 100 |
+
process = []
|
| 101 |
+
for pid in pids:
|
| 102 |
+
p = psutil.Process(pid)
|
| 103 |
+
process_name = p.name()
|
| 104 |
+
process.append([pid, process_name, p.is_running()])
|
| 105 |
+
|
| 106 |
+
df_process = pd.DataFrame(process, columns=["PID","进程名","是否还在运行"])
|
| 107 |
+
st.dataframe(df_process)
|
| 108 |
+
|
| 109 |
+
# #已安装软件
|
| 110 |
+
# import wmi
|
| 111 |
+
# c = wmi.WMI()
|
| 112 |
+
# software_list = []
|
| 113 |
+
# for s in c.Win32_Product():
|
| 114 |
+
# software_list.append([s.Caption, s.Vendor, s.Version])
|
| 115 |
+
# if len(software_list)>1:
|
| 116 |
+
# st.dataframe(pd.DataFrame(software_list, columns=["名称","发布人","版本"]))
|
| 117 |
+
# else:
|
| 118 |
+
# st.info("正在导出已安装的软件程序列表")
|
pages/991_streamlit_apex_charts.py
CHANGED
|
@@ -1,118 +1,19 @@
|
|
| 1 |
-
|
| 2 |
-
# -*- coding: utf-8 -*-
|
| 3 |
-
# @Project : Python.
|
| 4 |
-
# @File : 991_streamlit_apex_charts
|
| 5 |
-
# @Time : 2022/10/17 上午10:48
|
| 6 |
-
# @Author : yuanjie
|
| 7 |
-
# @WeChat : meutils
|
| 8 |
-
# @Software : PyCharm
|
| 9 |
-
# @Description :
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
import psutil
|
| 13 |
-
import streamlit as st
|
| 14 |
-
import time
|
| 15 |
-
import datetime
|
| 16 |
-
from streamlit_autorefresh import st_autorefresh
|
| 17 |
-
from streamlit_apex_charts import bar_chart, pie_chart
|
| 18 |
import pandas as pd
|
| 19 |
-
import
|
| 20 |
-
import
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
st.set_page_config(page_title="系统信息查看器", page_icon="💻", layout="wide")
|
| 24 |
-
|
| 25 |
-
#st_autorefresh(interval=5000, limit=100000, key="Mr.R")
|
| 26 |
-
|
| 27 |
-
st.header("系统信息查看器")
|
| 28 |
-
base_infor = [[datetime.datetime.now().strftime("%Y-%m-%d %H: %M: %S"),str(psutil.users()[0][0]),platform.platform()]]
|
| 29 |
-
df_base_infor = pd.DataFrame(base_infor, columns=["当前时间","登陆者","操作系统"])
|
| 30 |
-
st.table(df_base_infor)
|
| 31 |
-
|
| 32 |
-
#获取网卡名称
|
| 33 |
-
def get_key():
|
| 34 |
-
key_info = psutil.net_io_counters(pernic=True).keys() # 获取网卡名称
|
| 35 |
-
recv = {}
|
| 36 |
-
sent = {}
|
| 37 |
-
for key in key_info:
|
| 38 |
-
recv.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_recv) # 各网卡接收的字节数
|
| 39 |
-
sent.setdefault(key, psutil.net_io_counters(pernic=True).get(key).bytes_sent) # 各网卡发送的字节数
|
| 40 |
-
return key_info, recv, sent
|
| 41 |
-
|
| 42 |
-
#获取网卡速率
|
| 43 |
-
def get_rate(func):
|
| 44 |
-
key_info, old_recv, old_sent = func() # 上一秒收集的数据
|
| 45 |
-
time.sleep(1)
|
| 46 |
-
key_info, now_recv, now_sent = func() # 当前所收集的数据
|
| 47 |
-
net_in = {}
|
| 48 |
-
net_out = {}
|
| 49 |
-
for key in key_info:
|
| 50 |
-
net_in.setdefault(key, (now_recv.get(key) - old_recv.get(key)) / 1024) # 每秒接收速率
|
| 51 |
-
net_out.setdefault(key, (now_sent.get(key) - old_sent.get(key)) / 1024) # 每秒发送速率
|
| 52 |
-
return key_info, net_in, net_out
|
| 53 |
|
|
|
|
| 54 |
|
| 55 |
-
|
| 56 |
|
|
|
|
|
|
|
| 57 |
with c1:
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
zj = float(mem.total) / 1024 / 1024 / 1024
|
| 61 |
-
ysy = float(mem.used) / 1024 / 1024 / 1024
|
| 62 |
-
kx = float(mem.free) / 1024 / 1024 / 1024
|
| 63 |
-
|
| 64 |
-
data_neicun = [[round(ysy,2),round(kx, 2)]]
|
| 65 |
-
df_neicun = pd.DataFrame(data_neicun, columns=["已用内存","空闲内存"])
|
| 66 |
-
pie_chart("内存使用情况(GB)", df_neicun)
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
#CPU
|
| 70 |
-
cpu_liyonglv = (str(psutil.cpu_percent(1))) + '%'
|
| 71 |
-
cpu_data = [[cpu_liyonglv]]
|
| 72 |
-
df_cpu = pd.DataFrame(cpu_data, columns=["CPU利用率"])
|
| 73 |
-
bar_chart("CPU利用率(%)", df_cpu)
|
| 74 |
-
|
| 75 |
with c2:
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
total = dk.total / 1024 / 1024 / 1024
|
| 79 |
-
used = dk.used / 1024 / 1024 / 1024
|
| 80 |
-
free = dk.free / 1024 / 1024 / 1024
|
| 81 |
-
|
| 82 |
-
cipan_shiyong = [[used, free]]
|
| 83 |
-
df_cipan = pd.DataFrame(cipan_shiyong, columns=["已使用磁盘大小","空闲磁盘大小"])
|
| 84 |
-
pie_chart("磁盘使用率(%)", df_cipan)
|
| 85 |
-
|
| 86 |
-
#网络速率
|
| 87 |
-
key_info, net_in, net_out = get_rate(get_key)
|
| 88 |
-
wangka_liuliang = []
|
| 89 |
-
for key in key_info:
|
| 90 |
-
wangka_liuliang.append([net_in.get(key),net_out.get(key)])
|
| 91 |
-
speed_internet = wangka_liuliang
|
| 92 |
-
df_speed = pd.DataFrame(speed_internet, columns=["下行速率","上行速率"])
|
| 93 |
-
bar_chart("网络速率(kb/s)", df_speed)
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
with c3:
|
| 98 |
-
#进程信息
|
| 99 |
-
pids = psutil.pids()
|
| 100 |
-
process = []
|
| 101 |
-
for pid in pids:
|
| 102 |
-
p = psutil.Process(pid)
|
| 103 |
-
process_name = p.name()
|
| 104 |
-
process.append([pid, process_name, p.is_running()])
|
| 105 |
-
|
| 106 |
-
df_process = pd.DataFrame(process, columns=["PID","进程名","是否还在运行"])
|
| 107 |
-
st.dataframe(df_process)
|
| 108 |
|
| 109 |
-
|
| 110 |
-
# import wmi
|
| 111 |
-
# c = wmi.WMI()
|
| 112 |
-
# software_list = []
|
| 113 |
-
# for s in c.Win32_Product():
|
| 114 |
-
# software_list.append([s.Caption, s.Vendor, s.Version])
|
| 115 |
-
# if len(software_list)>1:
|
| 116 |
-
# st.dataframe(pd.DataFrame(software_list, columns=["名称","发布人","版本"]))
|
| 117 |
-
# else:
|
| 118 |
-
# st.info("正在导出已安装的软件程序列表")
|
|
|
|
| 1 |
+
import numpy as np
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
import pandas as pd
|
| 3 |
+
import streamlit as st
|
| 4 |
+
from streamlit_apex_charts import line_chart, bar_chart, pie_chart, area_chart, radar_chart
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
+
st.set_page_config(layout="wide")
|
| 7 |
|
| 8 |
+
df = pd.DataFrame(np.random.randint(1, 10, size=(10, 3)), columns=['Apple', 'Microsoft', 'Google'])
|
| 9 |
|
| 10 |
+
line_chart('Line chart', df)
|
| 11 |
+
c1, c2 = st.columns(2)
|
| 12 |
with c1:
|
| 13 |
+
bar_chart('Bar chart', df)
|
| 14 |
+
pie_chart('Pie chart', df)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
with c2:
|
| 16 |
+
area_chart('Area chart', df)
|
| 17 |
+
radar_chart('Radar chart', df)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
|
| 19 |
+
# https://discuss.streamlit.io/t/new-component-streamlit-apex-charts/18769/3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pages/997_streamlit_aggrid.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
# @Project : Python.
|
| 4 |
+
# @File : 997_streamlit_aggrid
|
| 5 |
+
# @Time : 2022/10/17 下午1:14
|
| 6 |
+
# @Author : yuanjie
|
| 7 |
+
# @WeChat : meutils
|
| 8 |
+
# @Software : PyCharm
|
| 9 |
+
# @Description :
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
from st_aggrid import AgGrid
|
| 13 |
+
import pandas as pd
|
| 14 |
+
|
| 15 |
+
df = pd.read_csv('./data/airline-safety.csv')
|
| 16 |
+
AgGrid(df)
|
pages/998_streamlit_agraph.py
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
from streamlit_agraph import agraph, Node, Edge, Config
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
c1, c2 = st.columns(2)
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
with c1:
|
| 9 |
+
|
| 10 |
+
nodes = []
|
| 11 |
+
edges = []
|
| 12 |
+
nodes.append(Node(id="Spiderman",
|
| 13 |
+
label="Peter Parker",
|
| 14 |
+
size=25,
|
| 15 |
+
shape="circularImage",
|
| 16 |
+
image="http://marvel-force-chart.surge.sh/marvel_force_chart_img/top_spiderman.png")
|
| 17 |
+
) # includes **kwargs
|
| 18 |
+
nodes.append(Node(id="Captain_Marvel",
|
| 19 |
+
size=25,
|
| 20 |
+
shape="circularImage",
|
| 21 |
+
image="http://marvel-force-chart.surge.sh/marvel_force_chart_img/top_captainmarvel.png")
|
| 22 |
+
)
|
| 23 |
+
edges.append(Edge(source="Captain_Marvel",
|
| 24 |
+
label="friend_of",
|
| 25 |
+
target="Spiderman",
|
| 26 |
+
# **kwargs
|
| 27 |
+
)
|
| 28 |
+
)
|
| 29 |
+
|
| 30 |
+
config = Config(width=500,
|
| 31 |
+
height=500,
|
| 32 |
+
# **kwargs
|
| 33 |
+
)
|
| 34 |
+
|
| 35 |
+
return_value = agraph(nodes=nodes, edges=edges, config=config)
|
| 36 |
+
|
| 37 |
+
with c2:
|
| 38 |
+
# Currently not workin since update to agraph 2.0 - work in progress
|
| 39 |
+
from rdflib import Graph
|
| 40 |
+
from streamlit_agraph import TripleStore, agraph
|
| 41 |
+
|
| 42 |
+
graph = Graph()
|
| 43 |
+
graph.parse("http://www.w3.org/People/Berners-Lee/card")
|
| 44 |
+
store = TripleStore()
|
| 45 |
+
|
| 46 |
+
for subj, pred, obj in graph:
|
| 47 |
+
store.add_triple(subj, pred, obj, "")
|
| 48 |
+
|
| 49 |
+
agraph(list(store.getNodes()), list(store.getEdges()), config)
|
requirements.txt
CHANGED
|
@@ -10,3 +10,6 @@ https://mirror.baidu.com/pypi/packages/78/38/76a3357c4adb31d0074bb7adb8c4c813830
|
|
| 10 |
streamlit_chat
|
| 11 |
streamlit_text_rating
|
| 12 |
streamlit_echarts
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
streamlit_chat
|
| 11 |
streamlit_text_rating
|
| 12 |
streamlit_echarts
|
| 13 |
+
streamlit-aggrid
|
| 14 |
+
streamlit-agraph
|
| 15 |
+
rdflib
|