NexusInstruments commited on
Commit
44806de
·
verified ·
1 Parent(s): e6eb71c

Update pages/BulkDigest.py

Browse files
Files changed (1) hide show
  1. pages/BulkDigest.py +25 -19
pages/BulkDigest.py CHANGED
@@ -1,54 +1,60 @@
1
  import streamlit as st
2
  import os, hashlib, re, sys
3
 
4
- # ─── Ensure utils/ is importable ──────────────────────────────
5
- sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
 
 
 
6
 
 
7
  from omniscientframework.utils.file_utils import normalize_log_line
8
  from omniscientframework.utils.summarizer import summarize_text
9
  from omniscientframework.utils.docgen import generate_doc
10
 
 
11
  st.title("📂 AI Bulk Digest")
12
  st.write("Upload multiple files for batch digestion, summarization, and documentation.")
13
 
14
- # Init counters
15
- if "uploaded_files" not in st.session_state:
16
- st.session_state.uploaded_files = []
17
- if "errors" not in st.session_state:
18
- st.session_state.errors = []
19
- if "bulk_digests" not in st.session_state:
20
- st.session_state.bulk_digests = []
21
 
 
22
  uploads = st.file_uploader(
23
- "Upload files (scripts, logs, text, PDFs)",
24
- type=["py", "sh", "txt", "log", "pdf"],
25
  accept_multiple_files=True
26
  )
27
 
 
28
  if uploads:
29
  digests = []
30
  for f in uploads:
31
  try:
 
32
  content = f.read().decode("utf-8", errors="ignore")
33
  sha1 = hashlib.sha1(content.encode()).hexdigest()
34
 
35
- # Detect type
36
  is_log = f.name.endswith(".log")
37
- is_script = f.name.endswith(".py") or f.name.endswith(".sh")
38
 
39
- # Normalize logs
40
  if is_log:
41
  normalized = [normalize_log_line(line) for line in content.splitlines()]
42
  preview = "\n".join(normalized[:30])
43
  else:
44
  preview = "\n".join(content.splitlines()[:30])
45
 
46
- # AI summary
47
  summary = summarize_text(content)
48
 
49
- # Script docs if applicable
50
  doc = generate_doc(f.name, "uploaded", content) if is_script else None
51
 
 
52
  result = {
53
  "name": f.name,
54
  "sha1": sha1,
@@ -58,10 +64,10 @@ if uploads:
58
  }
59
  digests.append(result)
60
 
61
- # Track upload
62
  st.session_state.uploaded_files.append(f.name)
63
 
64
- # Display in UI
65
  st.subheader(f"📄 {f.name}")
66
  st.code(preview)
67
  st.markdown(f"**SHA1:** `{sha1}`")
@@ -74,6 +80,6 @@ if uploads:
74
  st.error(f"⚠️ Error processing {f.name}: {e}")
75
  st.session_state.errors.append(str(e))
76
 
77
- # Save to session state for Chatbot
78
  st.session_state.bulk_digests = digests
79
  st.success(f"✅ Bulk digestion complete for {len(digests)} files.")
 
1
  import streamlit as st
2
  import os, hashlib, re, sys
3
 
4
+ # ─── Ensure omniscientframework package is importable ────────────────
5
+ ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
6
+ PACKAGE_PATH = os.path.abspath(os.path.join(ROOT_PATH, ".."))
7
+ if PACKAGE_PATH not in sys.path:
8
+ sys.path.insert(0, PACKAGE_PATH)
9
 
10
+ # ─── Import project utilities ────────────────────────────────────────
11
  from omniscientframework.utils.file_utils import normalize_log_line
12
  from omniscientframework.utils.summarizer import summarize_text
13
  from omniscientframework.utils.docgen import generate_doc
14
 
15
+ # ─── Page Setup ─────────────────────────────────────────────────────
16
  st.title("📂 AI Bulk Digest")
17
  st.write("Upload multiple files for batch digestion, summarization, and documentation.")
18
 
19
+ # ─── Initialize Session State ───────────────────────────────────────
20
+ for key in ("uploaded_files", "errors", "bulk_digests"):
21
+ if key not in st.session_state:
22
+ st.session_state[key] = []
 
 
 
23
 
24
+ # ─── File Upload ────────────────────────────────────────────────────
25
  uploads = st.file_uploader(
26
+ "Upload files (scripts, logs, text, PDFs)",
27
+ type=["py", "sh", "txt", "log", "pdf"],
28
  accept_multiple_files=True
29
  )
30
 
31
+ # ─── Bulk Processing Logic ─────────────────────────────────────────
32
  if uploads:
33
  digests = []
34
  for f in uploads:
35
  try:
36
+ # Read content
37
  content = f.read().decode("utf-8", errors="ignore")
38
  sha1 = hashlib.sha1(content.encode()).hexdigest()
39
 
40
+ # File type detection
41
  is_log = f.name.endswith(".log")
42
+ is_script = f.name.endswith((".py", ".sh"))
43
 
44
+ # Normalize log lines
45
  if is_log:
46
  normalized = [normalize_log_line(line) for line in content.splitlines()]
47
  preview = "\n".join(normalized[:30])
48
  else:
49
  preview = "\n".join(content.splitlines()[:30])
50
 
51
+ # Generate AI summary
52
  summary = summarize_text(content)
53
 
54
+ # Auto-generate documentation for scripts
55
  doc = generate_doc(f.name, "uploaded", content) if is_script else None
56
 
57
+ # Build result object
58
  result = {
59
  "name": f.name,
60
  "sha1": sha1,
 
64
  }
65
  digests.append(result)
66
 
67
+ # Track file name
68
  st.session_state.uploaded_files.append(f.name)
69
 
70
+ # ─── Display Results ───────────────────────────────
71
  st.subheader(f"📄 {f.name}")
72
  st.code(preview)
73
  st.markdown(f"**SHA1:** `{sha1}`")
 
80
  st.error(f"⚠️ Error processing {f.name}: {e}")
81
  st.session_state.errors.append(str(e))
82
 
83
+ # Save to session state
84
  st.session_state.bulk_digests = digests
85
  st.success(f"✅ Bulk digestion complete for {len(digests)} files.")