Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import os, hashlib, re, sys | |
| # ─── Ensure utils/ is importable ────────────────────────────── | |
| sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) | |
| from utils.file_utils import normalize_log_line | |
| from utils.summarizer import summarize_text | |
| from utils.docgen import generate_doc | |
| st.title("📂 AI Bulk Digest") | |
| st.write("Upload multiple files for batch digestion, summarization, and documentation.") | |
| # Init counters | |
| if "uploaded_files" not in st.session_state: | |
| st.session_state.uploaded_files = [] | |
| if "errors" not in st.session_state: | |
| st.session_state.errors = [] | |
| if "bulk_digests" not in st.session_state: | |
| st.session_state.bulk_digests = [] | |
| uploads = st.file_uploader( | |
| "Upload files (scripts, logs, text, PDFs)", | |
| type=["py", "sh", "txt", "log", "pdf"], | |
| accept_multiple_files=True | |
| ) | |
| if uploads: | |
| digests = [] | |
| for f in uploads: | |
| try: | |
| content = f.read().decode("utf-8", errors="ignore") | |
| sha1 = hashlib.sha1(content.encode()).hexdigest() | |
| # Detect type | |
| is_log = f.name.endswith(".log") | |
| is_script = f.name.endswith(".py") or f.name.endswith(".sh") | |
| # Normalize logs | |
| if is_log: | |
| normalized = [normalize_log_line(line) for line in content.splitlines()] | |
| preview = "\n".join(normalized[:30]) | |
| else: | |
| preview = "\n".join(content.splitlines()[:30]) | |
| # AI summary | |
| summary = summarize_text(content) | |
| # Script docs if applicable | |
| doc = generate_doc(f.name, "uploaded", content) if is_script else None | |
| result = { | |
| "name": f.name, | |
| "sha1": sha1, | |
| "preview": preview, | |
| "summary": summary, | |
| "doc": doc, | |
| } | |
| digests.append(result) | |
| # Track upload | |
| st.session_state.uploaded_files.append(f.name) | |
| # Display in UI | |
| st.subheader(f"📄 {f.name}") | |
| st.code(preview) | |
| st.markdown(f"**SHA1:** `{sha1}`") | |
| st.write("🧠 **Summary:**", summary) | |
| if doc: | |
| st.write("📘 **Generated Documentation:**") | |
| st.markdown(doc) | |
| except Exception as e: | |
| st.error(f"⚠️ Error processing {f.name}: {e}") | |
| st.session_state.errors.append(str(e)) | |
| # Save to session state for Chatbot | |
| st.session_state.bulk_digests = digests | |
| st.success(f"✅ Bulk digestion complete for {len(digests)} files.") | |