rahimizadeh commited on
Commit
9cffedd
·
verified ·
1 Parent(s): 4b47b1d

Update modules/analysis.py

Browse files
Files changed (1) hide show
  1. modules/analysis.py +37 -52
modules/analysis.py CHANGED
@@ -1,52 +1,37 @@
1
- from langchain.chains import RetrievalQA
2
- from langchain.llms import HuggingFacePipeline
3
- from transformers import pipeline
4
- from modules import parser, vectorizer
5
-
6
- def run_analysis(uploaded_files, text_input, query, quick_action, temperature, start_time, end_time):
7
- """
8
- Main logic that runs when the user clicks 'Analyze Logs'.
9
- It combines file and text inputs, applies embeddings,
10
- and performs question answering using a language model.
11
- """
12
- logs_text = ""
13
-
14
- # Combine all uploaded files into one text string
15
- if uploaded_files:
16
- logs_text += parser.parse_uploaded_files(uploaded_files)
17
-
18
- # Add manual pasted text logs
19
- if text_input:
20
- logs_text += "\n" + text_input
21
-
22
- # Show error if no log input provided
23
- if not logs_text.strip():
24
- return "❌ No logs provided.", None, None, None
25
-
26
- # Use either free-form query or a quick action
27
- query_text = query if query else quick_action
28
- if not query_text:
29
- return "❌ No query provided.", None, None, None
30
-
31
- # Chunk logs and embed them
32
- docs = vectorizer.prepare_documents(logs_text)
33
- vectordb = vectorizer.create_vectorstore(docs)
34
-
35
- # Load a small Hugging Face text generation pipeline (GPT-2 here)
36
- pipe = pipeline("text-generation", model="gpt2", max_length=512, temperature=temperature)
37
- llm = HuggingFacePipeline(pipeline=pipe)
38
-
39
- # Create LangChain retrieval-based QA chain
40
- qa = RetrievalQA.from_chain_type(llm=llm, retriever=vectordb.as_retriever())
41
-
42
- # Run the query against embedded document chunks
43
- result = qa.run(query_text)
44
-
45
- # -------- Mocked example chart and alert outputs --------
46
- bar_data = {"Hour": ["14:00", "15:00"], "Count": [8, 4]}
47
- pie_data = {"Event Type": ["Blocked", "Scan"], "Count": [8, 4]}
48
- alerts = [("CRITICAL", "8 blocked SSH attempts from 192.168.1.5"),
49
- ("WARNING", "4 port scanning alerts from 10.0.0.8")]
50
-
51
- # Return structured outputs to Gradio UI
52
- return result, bar_data, pie_data, alerts
 
1
+ from langchain.chains import RetrievalQA
2
+ from langchain_community.llms import HuggingFacePipeline # ✅ Updated import
3
+ from transformers import pipeline
4
+ from modules import parser, vectorizer
5
+
6
+ def run_analysis(uploaded_files, text_input, query, quick_action, temperature, start_time, end_time):
7
+ logs_text = ""
8
+
9
+ if uploaded_files:
10
+ logs_text += parser.parse_uploaded_files(uploaded_files)
11
+
12
+ if text_input:
13
+ logs_text += "\n" + text_input
14
+
15
+ if not logs_text.strip():
16
+ return "❌ No logs provided.", None, None, None
17
+
18
+ query_text = query if query else quick_action
19
+ if not query_text:
20
+ return "❌ No query provided.", None, None, None
21
+
22
+ docs = vectorizer.prepare_documents(logs_text)
23
+ vectordb = vectorizer.create_vectorstore(docs)
24
+
25
+ pipe = pipeline("text-generation", model="gpt2", max_length=512, temperature=temperature)
26
+ llm = HuggingFacePipeline(pipeline=pipe)
27
+
28
+ qa = RetrievalQA.from_chain_type(llm=llm, retriever=vectordb.as_retriever())
29
+ result = qa.run(query_text)
30
+
31
+ # Example mock output
32
+ bar_data = {"Hour": ["14:00", "15:00"], "Count": [8, 4]}
33
+ pie_data = {"Event Type": ["Blocked", "Scan"], "Count": [8, 4]}
34
+ alerts = [("CRITICAL", "8 blocked SSH attempts from 192.168.1.5"),
35
+ ("WARNING", "4 port scanning alerts from 10.0.0.8")]
36
+
37
+ return result, bar_data, pie_data, alerts