-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstreamlit_app.py
57 lines (49 loc) · 2.32 KB
/
streamlit_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
import os
import streamlit as st
from langchain.text_splitter import CharacterTextSplitter
from langchain.docstore.document import Document
from langchain.chains.summarize import load_summarize_chain
from langchain_community.llms import CTransformers
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from ctransformers import AutoModelForCausalLM
# Divide el texto en fragmentos y los convierte en formato de documento
def chunks_and_document(txt):
text_splitter = CharacterTextSplitter() # Divide el texto por caracteres
texts = text_splitter.split_text(txt) # Divide el texto en fragmentos más pequeños
docs = [Document(page_content=t) for t in texts] # Convierte los fragmentos en formato de documento
return docs
# Carga del modelo Llama 2
def load_llm():
callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]) # Instancia del callback con un manejador de salida de texto en tiempo real
llm = CTransformers(
model='llama-2-7b-chat.ggmlv3.q4_0.bin', # Reemplaza con la ruta local al modelo Llama 2
model_type="llama",
max_new_tokens=512,
temperature=0.5
)
return llm
# llm = AutoModelForCausalLM.from_pretrained("TheBloke/Llama-2-7B-Chat-GGML", model_file="llama-2-7b-chat.ggmlv3.q8_0.bin")
# Aplica el modelo LLM a nuestro documento
def chains_and_response(docs):
llm = load_llm()
chain = load_summarize_chain(llm, chain_type='map_reduce')
return chain.run(docs)
# Configuración de la página
st.set_page_config(page_title='🦜🔗 Aplicación de Resumen de Texto')
st.title('🦜🔗 Aplicación de Resumen de Texto')
# Entrada de texto
txt_input = st.text_area('Introduce tu texto', '', height=200)
# Formulario para aceptar la entrada de texto del usuario para el resumen
result = []
with st.form('summarize_form', clear_on_submit=True):
submitted = st.form_submit_button('Enviar')
if submitted:
with st.spinner('Calculando...'):
docs = chunks_and_document(txt_input)
response = chains_and_response(docs)
result.append(response)
# Muestra el resultado del resumen
if len(result):
st.title('📝✅ Resultado del Resumen')
st.info(response)