engineering-ai-assistant / ui /components.py
Милана
Первый релиз: интеллектуальный помощник инженера-строителя
96aaef2
import streamlit as st
import pandas as pd
def render_statistics_tab(result):
st.subheader("📊 Статистика документа")
col1, col2, col3 = st.columns(3)
with col1:
st.metric("Символов", f"{result['stats']['characters']:,}")
with col2:
st.metric("Слов", f"{result['stats']['words']:,}")
with col3:
st.metric("Предложений", f"{result['stats']['sentences']:,}")
if result.get('sections'):
st.subheader("📑 Разделы документа")
for num, title in list(result['sections'].items())[:10]:
st.write(f"**{num}** {title}")
def render_materials_tab(result):
st.subheader("🏗️ Найденные материалы")
if result.get('materials_lemmas'):
lemmas = sorted(result['materials_lemmas'])
df = pd.DataFrame({
'№': range(1, len(lemmas) + 1),
'Материал': lemmas
})
st.dataframe(df, width='stretch')
st.caption(f"📊 **Всего уникальных материалов: {len(lemmas)}**")
else:
st.info("Материалы не найдены")
def render_standards_tab(result):
st.subheader("📜 Нормативные документы")
if result.get('standards'):
df = pd.DataFrame({'Норматив': sorted(result['standards'])})
st.dataframe(df, width='stretch')
st.caption(f"📊 **Всего нормативов: {len(result['standards'])}**")
else:
st.info("Нормативы не найдены")
def render_parameters_tab(result):
st.subheader("🌡️ Технические параметры")
if result.get('temperatures'):
st.write("**Температуры:**")
st.write(", ".join(sorted(result['temperatures'])[:15]))
if result.get('thicknesses'):
st.write("**Толщины:**")
st.write(", ".join(sorted(result['thicknesses'])[:15]))
if result.get('densities'):
st.write("**Плотности:**")
st.write(", ".join(sorted(result['densities'])[:15]))
def render_sidebar():
"""Боковая панель для загрузки файлов"""
with st.sidebar:
st.header("📁 Управление")
uploaded_file = st.file_uploader(
"Загрузите документ",
type=['txt', 'docx', 'pdf'],
help="Поддерживаются форматы: TXT, DOCX, PDF"
)
st.divider()
st.subheader("📄 Доступные документы")
from utils.config import RAW_DIR
docs = list(RAW_DIR.glob("*"))
if docs:
for doc in docs:
st.write(f"• {doc.name}")
else:
st.info("Нет документов")
return uploaded_file