-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
121 lines (106 loc) · 5.14 KB
/
app.py
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
113
114
115
116
117
118
119
120
121
import streamlit as st
from PyPDF2 import PdfReader
import requests
import io
import os
import openai
from fpdf import FPDF
# Function to get the model completion
def get_completion(prompt):
# Set the OpenAI API key from the environment variable
openai_api_key = os.getenv('OPENAI_API_KEY')
# Check if the API key is set
if not openai_api_key:
return "API key for OpenAI not found. Please set the 'OPENAI_API_KEY' environment variable."
openai.api_key = openai_api_key
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
temperature=0.5, # this is the degree of randomness of the model's output
)
return response.choices[0].message["content"]
# Keywords for each category
keywords = {
'Quejas y Reclamos': ['Queja', 'Reclamo'],
'Derechos de Petición': ['Derecho de Petición', 'Peticion'],
'Tutelas': ['Tutela', 'Tutelas'],
'Requerimientos': ['contraloria', 'procuraduria']
}
def main():
st.image("header.png") # replace with the path to your header image
st.title("ICFES")
st.write("Bienvenido al sistema de respuestas asistidas de ICFES")
st.write("""Somos una entidad que reconoce y valora la calidad de la educación como la clave para construir escenarios de inclusión social, aportar a la competitividad económica y laboral del país y fortalecer los espacios comunes de aprendizaje, como las aulas de clase.
Nuestra esencia es transformar los resultados de las pruebas de Estado en una oportunidad para identificar las necesidades de aprendizaje y apropiación de competencias de las personas, en cualquier etapa de su vida.""")
col1, col2 = st.columns(2)
col1.image("SG.jpg") # replace with the path to your profile picture
col2.write("Hola Luisa, estos son los documentos para hoy")
uploaded_files = st.file_uploader("Upload PDF Files", type='pdf', accept_multiple_files=True)
if uploaded_files is not None:
for uploaded_file in uploaded_files:
try:
text = extract_text_from_pdf(uploaded_file)
except Exception as e:
st.error(f"Error reading file {uploaded_file.name}: {e}")
continue
# Save the text to a .txt file
try:
with open(f'{uploaded_file.name}.txt', 'w') as f:
f.write(text)
except Exception as e:
st.error(f"Error writing to file {uploaded_file.name}.txt: {e}")
continue
# Classify the PDF based on keywords
for category, category_keywords in keywords.items():
if any(keyword in text for keyword in category_keywords):
# Move the .txt file to a directory named after the category
os.makedirs(category, exist_ok=True)
try:
os.rename(f'{uploaded_file.name}.txt', f'{category}/{uploaded_file.name}.txt')
except Exception as e:
st.error(f"Error moving file to category {category}: {e}")
break
# Allow the user to select a category and a .txt file within that category
category = st.selectbox('Select a category', list(keywords.keys()))
# Check if the directory for the selected category exists
file = None
if os.path.isdir(category):
file = st.selectbox('Select a file', os.listdir(category))
else:
st.write(f"No hay archivos en {category}")
if file and st.button('Proponer respuesta'):
with open(f'{category}/{file}', 'r') as f:
text = f.read()
try:
# Call the function to get the completion
prompt = f"""
Nombre: Luisa Fernanda Trujillo
Cargo: Secretaria General
Eres un competente abogado del ICFES respondiendo {category} el texto que debes responder es {text} tu respuesta
debe estar dirigida a quién escribió con su número de identificación y debe ser de fondo. Firma con tu nombre y tu cargo.
"""
with st.spinner('Generando una propuesta de respuesta...'):
st.session_state.content = get_completion(prompt)
st.text_area('Proposed response', value=st.session_state.content, height=200)
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.multi_cell(0, 10, st.session_state.content)
pdf_file_path = f'response_{file}.pdf'
pdf.output(pdf_file_path)
with open(pdf_file_path, 'rb') as f:
pdf_bytes = f.read()
st.download_button('Descargar PDF', pdf_bytes, file_name='response.pdf', mime='application/pdf')
if st.button('Enviar Respuesta'):
st.success('Respuesta enviada')
except Exception as e:
st.error(f"Error generating response: {e}")
def extract_text_from_pdf(uploaded_file):
pdf_reader = PdfReader(uploaded_file)
text = ''
for page in pdf_reader.pages:
text += page.extract_text()
return text
if __name__ == "__main__":
main()