pgtoopx commited on
Commit
c8ec056
·
1 Parent(s): f0a521e

feat: promt init chatgpt

Browse files
Files changed (3) hide show
  1. app.py +63 -57
  2. dockerfile +25 -0
  3. requirements.txt +1 -0
app.py CHANGED
@@ -1,68 +1,74 @@
1
  import gradio as gr
2
- import pandas as pd
3
- import matplotlib.pyplot as plt
4
- import openai
5
 
6
- # Configura tu clave de OpenAI (si lo necesitas)
7
- openai.api_key = "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"
8
 
9
- # Función para analizar documentos cargados
10
- def analizar_documento(documento):
11
- # Aquí podrías realizar un análisis más detallado según el tipo de documento.
12
- # Por simplicidad, estamos cargando el archivo como un DataFrame de pandas.
13
-
14
  try:
15
- df = pd.read_excel(documento.name)
16
- except Exception:
17
- return "Error al procesar el documento. Asegúrate de que sea un archivo Excel."
18
-
19
- # Simulación de análisis básico
20
- resumen = df.describe().to_string()
21
-
22
- # Generar gráfico simple
23
- plt.figure(figsize=(8, 6))
24
- df.plot(kind='bar')
25
- plt.title('Gráfico de Ejemplo')
26
- plt.savefig('grafico.png')
27
- plt.close()
28
 
29
- return resumen, 'grafico.png'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
- # Función para generar el análisis desde la API de OpenAI (simulado en este caso)
32
- def chat_gpt(message, documento=None):
33
- # Ejemplo de mensaje simulado
34
- respuesta = f"Análisis de GPT basado en el mensaje: {message}."
35
 
36
- if documento:
37
- resumen_documento, _ = analizar_documento(documento)
38
- respuesta += f"\nAdemás, aquí tienes un análisis del documento cargado:\n{resumen_documento}"
39
 
40
- return respuesta
 
 
41
 
42
- # Interfaz de Gradio
43
- def procesar_chat(message, file):
44
- if file:
45
- respuesta, grafico = analizar_documento(file)
46
- return f"Análisis detallado del archivo:\n{respuesta}", grafico
47
- else:
48
- respuesta = chat_gpt(message)
49
- return respuesta, None
50
 
51
- # Definir la interfaz gráfica usando Gradio
52
- interface = gr.Interface(
53
- fn=procesar_chat,
54
- inputs=[
55
- gr.Textbox(label="Escribe tu consulta aquí", placeholder="Ej: ¿Cuál es el análisis del balance general?"),
56
- gr.File(label="Cargar documento contable")
57
- ],
58
- outputs=[
59
- gr.Textbox(label="Respuesta del Asistente"),
60
- gr.Image(label="Gráfico Generado")
61
- ],
62
- title="Asistente Contable y Financiero de Chile",
63
- description="Este asistente analiza documentos contables y financieros en base a la normativa chilena (IFRS, PCGA).",
64
- allow_flagging=False
65
- )
 
66
 
67
- # Ejecutar la interfaz
68
- interface.launch()
 
 
 
1
  import gradio as gr
2
+ import fitz # PyMuPDF para procesar PDFs
 
 
3
 
4
+ # Variable global para almacenar el contenido del archivo PDF cargado en memoria
5
+ contenido_pdf = None
6
 
7
+ # Función para cargar el archivo PDF y extraer su contenido como texto
8
+ def cargar_archivo_pdf(documento):
9
+ global contenido_pdf
 
 
10
  try:
11
+ # Abre el archivo PDF y extrae todo el texto
12
+ doc = fitz.open(stream=documento.read(), filetype="pdf")
13
+ contenido_pdf = ""
14
+ for pagina in doc:
15
+ contenido_pdf += pagina.get_text()
16
+ if contenido_pdf.strip() == "":
17
+ return "No se pudo extraer texto del archivo PDF. Asegúrate de que no esté escaneado."
18
+ return "Archivo PDF cargado con éxito. Ahora puedes hacer preguntas sobre el documento."
19
+ except Exception as e:
20
+ return f"Error al procesar el archivo: {e}"
 
 
 
21
 
22
+ # Función para procesar las preguntas sobre el archivo PDF cargado
23
+ def procesar_pregunta(pregunta):
24
+ global contenido_pdf
25
+ if contenido_pdf is None:
26
+ return "Por favor, carga un archivo PDF antes de hacer preguntas."
27
+
28
+ # Simulación de procesamiento de la pregunta (aquí puedes mejorar el análisis)
29
+ if "total" in pregunta.lower():
30
+ # Simulación de un análisis de la pregunta
31
+ return f"Respuesta simulada: El archivo menciona la palabra 'total' en el texto."
32
+ elif "resumen" in pregunta.lower():
33
+ # Devolver los primeros 500 caracteres del archivo como un resumen
34
+ return f"Resumen del archivo:\n{contenido_pdf[:500]}..."
35
+ else:
36
+ return "Lo siento, no puedo responder a esa pregunta. Prueba con algo como '¿Cuál es el total?' o 'Dame un resumen del archivo'."
37
 
38
+ # Definir la interfaz gráfica con Gradio
39
+ def crear_interface():
40
+ with gr.Blocks() as demo:
41
+ gr.Markdown("# Asistente Contable para Archivos PDF")
42
 
43
+ # Sección de carga de archivo PDF
44
+ archivo_input = gr.File(label="Cargar documento PDF", type="file")
45
+ archivo_output = gr.Textbox(label="Estado del archivo")
46
 
47
+ # Sección de preguntas y respuestas
48
+ pregunta_input = gr.Textbox(label="Haz tu pregunta", placeholder="Ej: ¿Cuál es el total mencionado en el documento?")
49
+ respuesta_output = gr.Textbox(label="Respuesta")
50
 
51
+ # Historial de preguntas y respuestas
52
+ historial = gr.Textbox(label="Historial", interactive=False)
 
 
 
 
 
 
53
 
54
+ # Función que actualiza el historial
55
+ def actualizar_historial(pregunta, respuesta, historial_actual):
56
+ return historial_actual + f"Pregunta: {pregunta}\nRespuesta: {respuesta}\n\n"
57
+
58
+ # Conectar los inputs/outputs con las funciones
59
+ archivo_input.change(cargar_archivo_pdf, archivo_input, archivo_output)
60
+ pregunta_input.submit(
61
+ fn=lambda pregunta: (respuesta := procesar_pregunta(pregunta), respuesta),
62
+ inputs=pregunta_input,
63
+ outputs=[respuesta_output, respuesta_output]
64
+ )
65
+ pregunta_input.submit(
66
+ actualizar_historial, [pregunta_input, respuesta_output, historial], historial
67
+ )
68
+
69
+ return demo
70
 
71
+ # Iniciar la interfaz
72
+ if __name__ == "__main__":
73
+ interfaz = crear_interface()
74
+ interfaz.launch()
dockerfile ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Usamos una imagen base ligera de Python 3.10
2
+ FROM python:3.10-slim
3
+
4
+ # Establecemos el directorio de trabajo en el contenedor
5
+ WORKDIR /app
6
+
7
+ # Copiamos los archivos de requirements.txt al contenedor
8
+ COPY requirements.txt .
9
+
10
+ # Actualizamos los paquetes del sistema y luego instalamos las dependencias de Python
11
+ RUN apt-get update && apt-get install -y --no-install-recommends \
12
+ build-essential \
13
+ && pip install --no-cache-dir --upgrade pip \
14
+ && pip install --no-cache-dir -r requirements.txt \
15
+ && apt-get clean \
16
+ && rm -rf /var/lib/apt/lists/*
17
+
18
+ # Copiamos todo el contenido del directorio de trabajo actual al contenedor
19
+ COPY . .
20
+
21
+ # Exponemos el puerto 7860 que es el puerto por defecto de Gradio
22
+ EXPOSE 7860
23
+
24
+ # Ejecutamos la aplicación Gradio cuando el contenedor inicie
25
+ CMD ["python", "app.py"]
requirements.txt CHANGED
@@ -3,3 +3,4 @@ pandas
3
  matplotlib
4
  openai
5
  httpx
 
 
3
  matplotlib
4
  openai
5
  httpx
6
+ fitz