eduardocpacheco commited on
Commit
9ed81d8
·
1 Parent(s): ebdb90c

primeiro PR

Browse files
app.py CHANGED
@@ -1,4 +1,16 @@
1
  import streamlit as st
 
 
 
2
 
3
- x = st.slider('Select a value')
4
- st.write(x, 'squared is', x * x)
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
+ import label_oabench_discursive
3
+ import label_oabench_practical
4
+ import label_oabench_dashboard
5
 
6
+ # Criando a barra lateral para navegação
7
+ st.sidebar.title("Anotação paper LLM-as-Judge")
8
+ opcao = st.sidebar.radio("Escolha uma aplicação:", ["Provas práticas", "Questões discursivas","Dashboard anotações"])
9
+
10
+ # Roteando para a aplicação correta
11
+ if opcao == "Provas práticas":
12
+ label_oabench_practical.run()
13
+ elif opcao == "Questões discursivas":
14
+ label_oabench_discursive.run()
15
+ elif opcao == "Dashboard anotações":
16
+ label_oabench_dashboard.run()
label_oabench_dashboard.py ADDED
File without changes
label_oabench_discursive.py ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import json
4
+ import os
5
+ import re
6
+
7
+ # Função para carregar usuários e senhas de um arquivo JSON
8
+ def carregar_usuarios(arquivo="users.json"):
9
+ if os.path.exists(arquivo):
10
+ with open(arquivo, "r", encoding="utf-8") as f:
11
+ return json.load(f)
12
+ return {}
13
+
14
+ # Função para carregar anotações de um arquivo específico para cada usuário
15
+ def carregar_anotacoes_usuario(usuario, pasta="anotacoes"):
16
+ if not os.path.exists(pasta):
17
+ os.makedirs(pasta)
18
+ arquivo_usuario = os.path.join(pasta, f"{usuario}_anotacoes_discursivas.json")
19
+ if os.path.exists(arquivo_usuario):
20
+ with open(arquivo_usuario, "r", encoding="utf-8") as f:
21
+ return json.load(f)
22
+ return {}
23
+
24
+ # Função para salvar anotações de um usuário
25
+ def salvar_anotacoes_usuario(usuario, dados, pasta="anotacoes"):
26
+ arquivo_usuario = os.path.join(pasta, f"{usuario}_anotacoes_discursivas.json")
27
+ with open(arquivo_usuario, "w", encoding="utf-8") as f:
28
+ json.dump(dados, f, ensure_ascii=False, indent=4)
29
+
30
+ # Função para autenticar o login
31
+ def autenticar(usuario, senha, usuarios):
32
+ return usuarios.get(usuario) == senha
33
+
34
+ # Função para extrair questões do texto
35
+ def extrai_questoes(texto):
36
+ enunciado = texto.split('A)')[0]
37
+ opcao_A = texto.split('B)')[0].split('A)')[1]
38
+ opcao_B = texto.split('B)')[1].split('Obs.')[0]
39
+ disclaimer = texto.split('Obs.')[1]
40
+ return {
41
+ 'enunciado': enunciado,
42
+ 'A': opcao_A,
43
+ 'B': opcao_B,
44
+ 'warning': disclaimer
45
+ }
46
+
47
+ # Configuração inicial
48
+ st.set_page_config(layout="wide")
49
+
50
+ # Tela de login
51
+ usuarios = carregar_usuarios()
52
+ if "usuario" not in st.session_state:
53
+ st.session_state["usuario"] = None
54
+ if "selected_criterio" not in st.session_state:
55
+ st.session_state["selected_criterio"] = None
56
+
57
+ if st.session_state["usuario"] is None:
58
+ st.title("ICAIL - Benchmark jurídico OAB segunda fase")
59
+ st.markdown("Questões discursivas")
60
+
61
+ usuario = st.text_input("Usuário")
62
+ senha = st.text_input("Senha", type="password")
63
+ if st.button("Entrar"):
64
+ if autenticar(usuario, senha, usuarios):
65
+ st.session_state["usuario"] = usuario
66
+ st.success(f"Bem-vindo, {usuario}!")
67
+ st.rerun()
68
+ else:
69
+ st.error("Usuário ou senha inválidos.")
70
+ else:
71
+ usuario = st.session_state["usuario"]
72
+
73
+ # Carregar anotações do usuário
74
+ anotacoes_salvas = carregar_anotacoes_usuario(usuario)
75
+
76
+ # Carregar os dados do arquivo pickle correspondente
77
+ dados_pickle = "df_evaluated_discursive.pkl"
78
+ df = pd.read_pickle(dados_pickle)
79
+
80
+ # Configuração da barra lateral para escolher a questão
81
+ st.sidebar.title(f"Usuário: {usuario}")
82
+ questao_id = st.sidebar.selectbox("Selecione a questão", df["id"].tolist())
83
+
84
+ # Filtrar o DataFrame para a questão selecionada
85
+ questao = df[df["id"] == questao_id].iloc[0]
86
+
87
+ # Inicializar o JSON para a questão selecionada, se não existir
88
+ if str(questao_id) not in anotacoes_salvas:
89
+ anotacoes_salvas[str(questao_id)] = {}
90
+
91
+ # Layout principal
92
+ col1, col2 = st.columns([2, 1])
93
+
94
+ with col1:
95
+ st.header("Leitura e Contexto")
96
+ st.write(f"{questao['exam']} º exame da OAB, área Direito {questao['area']} - prova aplicada em {questao['exam date']}")
97
+
98
+ tab1, tab2, tab3 = st.tabs(["Questão discursiva", "Gabarito", "Resposta do Candidato"])
99
+ with tab1:
100
+ st.markdown(f"{questao['question']}", unsafe_allow_html=True)
101
+ with tab2:
102
+ st.markdown(f"{questao['answer']}", unsafe_allow_html=True)
103
+ with tab3:
104
+ questoes = extrai_questoes(questao['question'])
105
+ st.markdown(f"<strong>Enunciado:</strong><br>{questoes['enunciado']}<br>", unsafe_allow_html=True)
106
+ st.markdown("<strong>Resposta do candidato:</strong>", unsafe_allow_html=True)
107
+ respostas = json.loads(questao['model_answer'])
108
+ for resposta in respostas:
109
+ for key, value in resposta.items():
110
+ st.markdown(f"<strong>{key}) {questoes[key]}</strong>", unsafe_allow_html=True)
111
+ st.markdown(f"{value}<br>", unsafe_allow_html=True)
112
+
113
+
114
+ with col2:
115
+ st.header("Lista de Critérios")
116
+ for idx, criterio in enumerate(questao["formated_criteria"]):
117
+ texto_botao = f"Critério {criterio['letra']} - {criterio['parte']}"
118
+ if st.button(texto_botao, key=f"menu_criterio_{idx}"):
119
+ st.session_state["selected_criterio"] = idx
120
+ st.rerun() # Garante que a interface seja atualizada após o clique
121
+
122
+ # Exibir o critério selecionado
123
+ if st.session_state["selected_criterio"] is not None:
124
+ criterio = questao["formated_criteria"][st.session_state["selected_criterio"]]
125
+ st.subheader(f"Critério {criterio['letra']} - {criterio['parte']}")
126
+ st.write(f"Gabarito: {criterio['gabarito']}")
127
+ st.write(f"Critério: {criterio['criterio']} (Peso: {criterio['pontos']})")
128
+ chave_anotacao = f"exame_{questao['exam']}_area_{questao['area']}_questao_numero_{questao['number']}_letra_{criterio['letra']}_parte_{criterio['parte']}"
129
+ valor_salvo = anotacoes_salvas[str(questao_id)].get(chave_anotacao, "-")
130
+
131
+ # Rádio para escolher a decisão
132
+ atende = st.radio(
133
+ f"Atende ao critério?",
134
+ options=["-", "Sim", "Não"],
135
+ index=["-", "Sim", "Não"].index(valor_salvo) if valor_salvo in ["-", "Sim", "Não"] else 0,
136
+ key=f"criterio_{questao_id}_{st.session_state['selected_criterio']}"
137
+ )
138
+
139
+ # Atualizar o valor no JSON
140
+ anotacoes_salvas[str(questao_id)][chave_anotacao] = atende
141
+
142
+ # Botão para salvar as anotações
143
+ if st.button("Salvar Anotação"):
144
+ salvar_anotacoes_usuario(usuario, anotacoes_salvas)
145
+ st.success("Anotação salva com sucesso!")
146
+ st.write("Resultados da anotação:")
147
+ st.json(anotacoes_salvas)
148
+
149
+ # Opção para logout
150
+ if st.sidebar.button("Logout"):
151
+ st.session_state["usuario"] = None
152
+ st.rerun()
label_oabench_practical.py ADDED
File without changes
users.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "eduardo": "senha123",
3
+ "fernanda": "senha456",
4
+ "glauber": "senha789",
5
+ "raul": "raul123!",
6
+ "ricardo" : "ricardo123!"
7
+ }