MathJake commited on
Commit
6ed25d8
·
verified ·
1 Parent(s): ee522ae

Update src/Llm_local.py

Browse files
Files changed (1) hide show
  1. src/Llm_local.py +126 -126
src/Llm_local.py CHANGED
@@ -1,126 +1,126 @@
1
- import ollama
2
- import time
3
- import streamlit as st
4
- import fitz
5
- from docx import Document
6
- from io import BytesIO
7
- from fpdf import FPDF
8
-
9
- def get_response_from_mistral(query, context):
10
- prompt_text = f"""
11
- "Tú eres un asistente para tareas de respuesta a preguntas. "
12
- "Usa los siguientes fragmentos de contexto recuperado para responder la pregunta. "
13
- "Si el contexto está vacío o no contiene información relevante, responde: 'Disculpa, no tengo información para responder esa pregunta'. "
14
- "Si el contexto es válido, responde la pregunta usando un mínimo de 2 oraciones y un máximo de 4, manteniendo la respuesta clara y concisa. "
15
- "No inventes ni asumas nada que no esté explícitamente en el contexto."
16
- "\n\n"
17
-
18
- Usa solo este contexto:
19
- {context}
20
- **IMPORTANTE***
21
- "Ojo siempre que tu contexto es vacio, tu respuesta debe ser : Disculpa, no tengo información para responder esa pregunta"
22
- **
23
- Y Responde esta pregunta:
24
- {query}
25
- """
26
-
27
- respuesta = ollama.chat(
28
- model="mistral",
29
- messages=[
30
- {"role": "system", "content": "Eres un asistente especializado en análisis de datos."},
31
- {"role": "user", "content": prompt_text}
32
- ]
33
- )
34
-
35
- respuesta_texto = respuesta["message"]["content"]
36
-
37
- for word in respuesta_texto.split():
38
- yield word + " "
39
- time.sleep(0.05)
40
-
41
- def generarPages():
42
- with st.sidebar:
43
- st.page_link("chatbox_v1.py", label="Inicio", icon="🏠")
44
- st.page_link("pages/resumen_word.py", label="Informe de PDF y Word", icon="📄")
45
- st.page_link("pages/insertardocumentos.py", label="Documentos a vector", icon="🛢️")
46
-
47
- def informes_mistral(context):
48
- prompt_text = f"""
49
- **Atención**: No generes una historia o narrativa, tu tarea es realizar un análisis detallado y preciso del documento legal. No se requiere creatividad, solo precisión.
50
- Eres un asistente experto en procesamiento y análisis de documentos. Tu tarea es leer y comprender el contenido proporcionado y generar un informe extenso, detallado y bien estructurado.
51
- El informe debe incluir las siguientes secciones:
52
-
53
- 1. **Resumen General**: Proporciona un resumen completo y detallado de todo el contenido del documento. Incluye los aspectos más relevantes, pero sin dejar de lado detalles importantes.
54
-
55
- 2. **Puntos Clave**: Enumera los puntos más importantes del documento, resaltando las ideas principales y los aspectos críticos que se abordan.
56
-
57
- 3. **Análisis Crítico**: Realiza un análisis en profundidad sobre el contenido del documento. Comenta sobre su calidad, lógica, coherencia, posibles fallos, aspectos positivos, y cualquier otro elemento que pueda ser relevante.
58
-
59
- 4. **Recomendaciones**: Proporciona sugerencias o recomendaciones para mejorar el contenido. Si el documento se trata de un informe técnico, análisis de datos, o investigación, incluye sugerencias de cómo se podría mejorar la interpretación de los datos, el análisis o la presentación.
60
-
61
- 5. **Conclusiones**: Finaliza con una sección de conclusiones que recapitule los puntos clave del análisis y del documento en general, además de una visión global de las implicaciones del contenido.
62
-
63
- 6: **En caso de**: En caso de que el contenido sea acerca de un decreto legislativo o algo acera de una ley incluye un seccion donde hables lo mas importante de todos los articulos y menciones cuales son los mas relevantes.
64
-
65
- 7: **Documentos Analizados**: Menciona el nombre de todos los documentos que componen el contenido analizado. Si hay más de uno, asegúrate de listarlos todos y dejar claro que el análisis se basa en todos ellos en conjunto.
66
-
67
- Siempre deberás comenzar el informe con los nombres de los archivos que componen el contenido.
68
- Recuerda que siempre debes mantener la estructura que te mande
69
-
70
- Contenido del documento:
71
- {context}
72
-
73
- Utiliza un estilo claro y profesional en todo momento, y asegúrate de que cada sección esté claramente diferenciada. Tu informe debe ser extenso y abarcativo, no debe ser corto ni vago.
74
- recuerda siempre reponder en español
75
- """
76
- respuesta = ollama.chat(
77
- model="mistral",
78
- messages=[
79
- {"role": "system", "content": "Eres un asistente especializado en análisis detallado de documentos."},
80
- {"role": "user", "content": prompt_text}
81
- ]
82
- )
83
-
84
- respuesta_texto = respuesta["message"]["content"]
85
-
86
- for word in respuesta_texto.split():
87
- yield word + " "
88
- time.sleep(0.05)
89
-
90
- def extraer_texto(archivo):
91
- if archivo.name.endswith(".pdf"):
92
- texto = ""
93
- with fitz.open(stream=archivo.read(), filetype="pdf") as doc:
94
- for page in doc:
95
- texto += page.get_text()
96
- return texto
97
- elif archivo.name.endswith(".txt"):
98
- return archivo.read().decode("utf-8")
99
- else:
100
- return ""
101
-
102
- def extraer_texto_word(file):
103
- texto = ""
104
- doc = Document(file)
105
- for para in doc.paragraphs:
106
- texto += para.text + "\n"
107
- return texto
108
-
109
- def generar_docx(texto):
110
- doc = Document()
111
- doc.add_heading("Resumen generado por IA", 0)
112
- for parrafo in texto.split("\n"):
113
- doc.add_paragraph(parrafo)
114
- buffer = BytesIO()
115
- doc.save(buffer)
116
- buffer.seek(0)
117
- return buffer
118
-
119
- def generar_pdf(texto):
120
- pdf = FPDF()
121
- pdf.add_page()
122
- pdf.set_auto_page_break(auto=True, margin=15)
123
- pdf.set_font("Arial", size=12)
124
- for linea in texto.split("\n"):
125
- pdf.multi_cell(0, 10, linea)
126
- return bytes(pdf.output(dest='S').encode('latin-1'))
 
1
+ import ollama
2
+ import time
3
+ import streamlit as st
4
+ import fitz
5
+ from docx import Document
6
+ from io import BytesIO
7
+ from fpdf import FPDF
8
+
9
+ def get_response_from_mistral(query, context):
10
+ prompt_text = f"""
11
+ "Tú eres un asistente para tareas de respuesta a preguntas. "
12
+ "Usa los siguientes fragmentos de contexto recuperado para responder la pregunta. "
13
+ "Si el contexto está vacío o no contiene información relevante, responde: 'Disculpa, no tengo información para responder esa pregunta'. "
14
+ "Si el contexto es válido, responde la pregunta usando un mínimo de 2 oraciones y un máximo de 4, manteniendo la respuesta clara y concisa. "
15
+ "No inventes ni asumas nada que no esté explícitamente en el contexto."
16
+ "\n\n"
17
+
18
+ Usa solo este contexto:
19
+ {context}
20
+ **IMPORTANTE***
21
+ "Ojo siempre que tu contexto es vacio, tu respuesta debe ser : Disculpa, no tengo información para responder esa pregunta"
22
+ **
23
+ Y Responde esta pregunta:
24
+ {query}
25
+ """
26
+
27
+ respuesta = ollama.chat(
28
+ model="mistral",
29
+ messages=[
30
+ {"role": "system", "content": "Eres un asistente especializado en análisis de datos."},
31
+ {"role": "user", "content": prompt_text}
32
+ ]
33
+ )
34
+
35
+ respuesta_texto = respuesta["message"]["content"]
36
+
37
+ for word in respuesta_texto.split():
38
+ yield word + " "
39
+ time.sleep(0.05)
40
+
41
+ def generarPages():
42
+ with st.sidebar:
43
+ st.page_link("chatbox_v1.py", label="Inicio", icon="🏠")
44
+ st.page_link("./pages/resumen_word.py", label="Informe de PDF y Word", icon="📄")
45
+ st.page_link("./pages/insertardocumentos.py", label="Documentos a vector", icon="🛢️")
46
+
47
+ def informes_mistral(context):
48
+ prompt_text = f"""
49
+ **Atención**: No generes una historia o narrativa, tu tarea es realizar un análisis detallado y preciso del documento legal. No se requiere creatividad, solo precisión.
50
+ Eres un asistente experto en procesamiento y análisis de documentos. Tu tarea es leer y comprender el contenido proporcionado y generar un informe extenso, detallado y bien estructurado.
51
+ El informe debe incluir las siguientes secciones:
52
+
53
+ 1. **Resumen General**: Proporciona un resumen completo y detallado de todo el contenido del documento. Incluye los aspectos más relevantes, pero sin dejar de lado detalles importantes.
54
+
55
+ 2. **Puntos Clave**: Enumera los puntos más importantes del documento, resaltando las ideas principales y los aspectos críticos que se abordan.
56
+
57
+ 3. **Análisis Crítico**: Realiza un análisis en profundidad sobre el contenido del documento. Comenta sobre su calidad, lógica, coherencia, posibles fallos, aspectos positivos, y cualquier otro elemento que pueda ser relevante.
58
+
59
+ 4. **Recomendaciones**: Proporciona sugerencias o recomendaciones para mejorar el contenido. Si el documento se trata de un informe técnico, análisis de datos, o investigación, incluye sugerencias de cómo se podría mejorar la interpretación de los datos, el análisis o la presentación.
60
+
61
+ 5. **Conclusiones**: Finaliza con una sección de conclusiones que recapitule los puntos clave del análisis y del documento en general, además de una visión global de las implicaciones del contenido.
62
+
63
+ 6: **En caso de**: En caso de que el contenido sea acerca de un decreto legislativo o algo acera de una ley incluye un seccion donde hables lo mas importante de todos los articulos y menciones cuales son los mas relevantes.
64
+
65
+ 7: **Documentos Analizados**: Menciona el nombre de todos los documentos que componen el contenido analizado. Si hay más de uno, asegúrate de listarlos todos y dejar claro que el análisis se basa en todos ellos en conjunto.
66
+
67
+ Siempre deberás comenzar el informe con los nombres de los archivos que componen el contenido.
68
+ Recuerda que siempre debes mantener la estructura que te mande
69
+
70
+ Contenido del documento:
71
+ {context}
72
+
73
+ Utiliza un estilo claro y profesional en todo momento, y asegúrate de que cada sección esté claramente diferenciada. Tu informe debe ser extenso y abarcativo, no debe ser corto ni vago.
74
+ recuerda siempre reponder en español
75
+ """
76
+ respuesta = ollama.chat(
77
+ model="mistral",
78
+ messages=[
79
+ {"role": "system", "content": "Eres un asistente especializado en análisis detallado de documentos."},
80
+ {"role": "user", "content": prompt_text}
81
+ ]
82
+ )
83
+
84
+ respuesta_texto = respuesta["message"]["content"]
85
+
86
+ for word in respuesta_texto.split():
87
+ yield word + " "
88
+ time.sleep(0.05)
89
+
90
+ def extraer_texto(archivo):
91
+ if archivo.name.endswith(".pdf"):
92
+ texto = ""
93
+ with fitz.open(stream=archivo.read(), filetype="pdf") as doc:
94
+ for page in doc:
95
+ texto += page.get_text()
96
+ return texto
97
+ elif archivo.name.endswith(".txt"):
98
+ return archivo.read().decode("utf-8")
99
+ else:
100
+ return ""
101
+
102
+ def extraer_texto_word(file):
103
+ texto = ""
104
+ doc = Document(file)
105
+ for para in doc.paragraphs:
106
+ texto += para.text + "\n"
107
+ return texto
108
+
109
+ def generar_docx(texto):
110
+ doc = Document()
111
+ doc.add_heading("Resumen generado por IA", 0)
112
+ for parrafo in texto.split("\n"):
113
+ doc.add_paragraph(parrafo)
114
+ buffer = BytesIO()
115
+ doc.save(buffer)
116
+ buffer.seek(0)
117
+ return buffer
118
+
119
+ def generar_pdf(texto):
120
+ pdf = FPDF()
121
+ pdf.add_page()
122
+ pdf.set_auto_page_break(auto=True, margin=15)
123
+ pdf.set_font("Arial", size=12)
124
+ for linea in texto.split("\n"):
125
+ pdf.multi_cell(0, 10, linea)
126
+ return bytes(pdf.output(dest='S').encode('latin-1'))