File size: 4,214 Bytes
0a1e238
 
 
 
b125eed
5d23ddc
 
 
 
 
 
 
 
 
 
0a1e238
5d23ddc
 
 
0a1e238
5d23ddc
 
0a1e238
5d23ddc
 
0a1e238
5d23ddc
 
0a1e238
5d23ddc
 
0a1e238
5d23ddc
 
0a1e238
3936853
4722147
31b5a19
 
c48611a
5c7d86e
614088e
db74214
eab471f
5d23ddc
 
74a942d
31b5a19
 
 
 
 
 
 
5c7d86e
 
 
591a68c
5c7d86e
 
 
 
 
 
afff22e
31b5a19
fe88ab5
0a1e238
57455f3
31b5a19
 
 
 
 
6f96de4
546504d
 
 
 
 
9b001dc
31b5a19
546504d
31b5a19
 
 
 
 
 
 
546504d
31b5a19
 
 
a12fa3b
 
36011ef
31b5a19
 
 
 
 
 
 
 
a12fa3b
f57ce49
13beabf
4722147
5c7d86e
13beabf
5c7d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import streamlit as st
import os
import pkg_resources

# # Using this wacky hack to get around the massively ridicolous managed env loading order
def is_installed(package_name, version):
    try:
        pkg = pkg_resources.get_distribution(package_name)
        return pkg.version == version
    except pkg_resources.DistributionNotFound:
        return False

# shifted from below - this must be the first streamlit call; otherwise: problems
st.set_page_config(page_title = 'Vulnerability Analysis', 
                   initial_sidebar_state='expanded', layout="wide") 

@st.cache_resource # cache the function so it's not called every time app.py is triggered
def install_packages():
    install_commands = []

    if not is_installed("spaces", "0.12.0"):
        install_commands.append("pip install spaces==0.17.0")
    
    if not is_installed("pydantic", "1.8.2"):
        install_commands.append("pip install pydantic==1.8.2")

    if not is_installed("typer", "0.4.0"):
        install_commands.append("pip install typer==0.4.0")

    if install_commands:
        os.system(" && ".join(install_commands))

# install packages if necessary
install_packages()

import appStore.vulnerability_analysis as vulnerability_analysis
import appStore.target as target_analysis
import appStore.doc_processing as processing
from utils.uploadAndExample import add_upload
from utils.vulnerability_classifier import label_dict
from utils.config import model_dict
import pandas as pd
import plotly.express as px

# st.set_page_config(page_title = 'Vulnerability Analysis', 
#                   initial_sidebar_state='expanded', layout="wide") 

with st.sidebar:
    # upload and example doc
    choice = st.sidebar.radio(label = 'Select the Document',
                            help = 'You can upload the document \
                            or else you can try a example document', 
                            options = ('Upload Document', 'Try Example'), 
                            horizontal = True)
    add_upload(choice)

    # Create a list of options for the dropdown
    model_options = ['Llama3.1-8B','Llama3.1-70B','Llama3.1-405B','Zephyr 7B β','Mistral-7B','Mixtral-8x7B']

    # Dropdown selectbox: model
    model_sel = st.selectbox('Select a model:', model_options)
    model_sel_name = model_dict[model_sel]

    st.session_state['model_sel_name'] = model_sel_name

with st.container():
    st.markdown("<h2 style='text-align: center;'> Vulnerability Analysis 3.1 </h2>", unsafe_allow_html=True)
    st.write(' ')

with st.expander("ℹ️ - About this app", expanded=False):
    st.write(
        """
        The Vulnerability Analysis App is an open-source\
        digital tool which aims to assist policy analysts and \
        other users in extracting and filtering references \
        to different groups in vulnerable situations from public documents. \
        We use Natural Language Processing (NLP), specifically deep \
        learning-based text representations  to search context-sensitively \
        for mentions of the special needs of groups in vulnerable situations 
        to cluster them thematically. 
        For more understanding on Methodology [Click Here](https://vulnerability-analysis.streamlit.app/)
        """)
    
    st.write("""
        What Happens in background?
        
        - Step 1: Once the document is provided to app, it undergoes *Pre-processing*.\
        In this step the document is broken into smaller paragraphs \
        (based on word/sentence count).
        - Step 2: The paragraphs are then fed to the **Vulnerability Classifier** which detects if
        the paragraph contains any or multiple references to vulnerable groups.
        """)
                  
    st.write("")

# Define the apps used
apps = [processing.app, vulnerability_analysis.app, target_analysis.app]

multiplier_val =1/len(apps)
if st.button("Analyze Document"):
    prg = st.progress(0.0)
    for i,func in enumerate(apps):
        func()
        prg.progress((i+1)*multiplier_val)

# If there is data stored
if 'key0' in st.session_state:

    vulnerability_analysis.vulnerability_display()
    target_analysis.target_display(model_sel_name=model_sel_name)