reichaves commited on
Commit
77a2047
1 Parent(s): f7eaa5d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -60
app.py CHANGED
@@ -1,31 +1,16 @@
1
- # -*- coding: utf-8
2
- # Reinaldo Chaves (reichaves@gmail.com)
3
- # Este projeto implementa um sistema de Recuperação de Informações Aumentada por Geração (RAG) conversacional
4
- # usando Streamlit, LangChain, e modelos de linguagem de grande escala - para entrevistar PDFs
5
- # Geração de respostas usando o modelo Gemma2-9b-It da Groq
6
- # Embeddings de texto usando o modelo all-MiniLM-L6-v2 do Hugging Face
7
- #
8
-
9
- import sys
10
- import platform
11
-
12
- __import__('pysqlite3')
13
- sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
14
-
15
  import streamlit as st
16
  from langchain.chains import create_history_aware_retriever, create_retrieval_chain
17
  from langchain.chains.combine_documents import create_stuff_documents_chain
18
- from langchain_chroma import Chroma
19
  from langchain_community.chat_message_histories import ChatMessageHistory
20
  from langchain_core.chat_history import BaseChatMessageHistory
21
  from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
22
  from langchain_groq import ChatGroq
23
  from langchain_core.runnables.history import RunnableWithMessageHistory
24
- from langchain_huggingface import HuggingFaceEmbeddings
25
  from langchain_text_splitters import RecursiveCharacterTextSplitter
26
  from langchain_community.document_loaders import PyPDFLoader
 
27
  import os
28
- import chromadb
29
  import tempfile
30
 
31
  # Configurar o tema para dark
@@ -56,23 +41,7 @@ st.markdown("""
56
  # Sidebar com orientações
57
  st.sidebar.title("Menu")
58
  st.sidebar.markdown("""
59
- * Se encontrar erros de processamento, reinicie com F5. Utilize arquivos .PDF com textos não digitalizados como imagens.
60
- * Para recomeçar uma nova sessão pressione F5.
61
-
62
- **Atenção:** Os documentos que você compartilhar com o modelo de IA generativa podem ser usados pelo Gemini para treinar o sistema. Portanto, evite compartilhar documentos PDF que contenham:
63
- 1. Dados bancários e financeiros
64
- 2. Dados de sua própria empresa
65
- 3. Informações pessoais
66
- 4. Informações de propriedade intelectual
67
- 5. Conteúdos autorais
68
-
69
- E não use IA para escrever um texto inteiro! O auxílio é melhor para gerar resumos, filtrar informações ou auxiliar a entender contextos - que depois devem ser checados. Inteligência Artificial comete erros (alucinações, viés, baixa qualidade, problemas éticos)!
70
-
71
- Este projeto não se responsabiliza pelos conteúdos criados a partir deste site.
72
-
73
- **Sobre este app**
74
-
75
- Este aplicativo foi desenvolvido por Reinaldo Chaves. Para mais informações, contribuições e feedback, visite o [repositório do projeto no GitHub](https://github.com/seu_usuario/seu_repositorio).
76
  """)
77
 
78
  st.title("RAG conversacional com upload em PDF e histórico de bate-papo")
@@ -112,27 +81,8 @@ if groq_api_key and huggingface_api_token:
112
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
113
  splits = text_splitter.split_documents(documents)
114
 
115
- # Create Chroma vector store in batches
116
- batch_size = 100 # Adjust this value if needed
117
-
118
- # Initialize Chroma client with persistence
119
- chroma_client = chromadb.PersistentClient(path="./chroma_db")
120
-
121
- # Create or get the collection
122
- collection_name = "pdf_collection"
123
- collection = chroma_client.get_or_create_collection(name=collection_name)
124
-
125
- # Create Chroma vector store
126
- vectorstore = Chroma(
127
- client=chroma_client,
128
- collection_name=collection_name,
129
- embedding_function=embeddings
130
- )
131
-
132
- # Add documents in batches
133
- for i in range(0, len(splits), batch_size):
134
- batch = splits[i:i+batch_size]
135
- vectorstore.add_documents(batch)
136
 
137
  st.success(f"Processed {len(splits)} document chunks.")
138
 
@@ -155,10 +105,10 @@ if groq_api_key and huggingface_api_token:
155
 
156
  system_prompt = (
157
  "Você é um assistente para tarefas de resposta a perguntas. Responda em Português do Brasil a menos que seja pedido outro idioma"
158
- "Use os seguintes pedaços de contexto recuperado para responder "
159
- "à pergunta. Se você não sabe a resposta, diga que "
160
- "não sabe. Use no máximo três frases e mantenha a "
161
- "resposta concisa."
162
  "\n\n"
163
  "{context}"
164
  )
@@ -191,7 +141,7 @@ if groq_api_key and huggingface_api_token:
191
  {"input": user_input},
192
  config={"configurable": {"session_id": session_id}},
193
  )
194
- st.write("Assistante:", response['answer'])
195
 
196
  with st.expander("Ver histórico do chat"):
197
  for message in session_history.messages:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
  from langchain.chains import create_history_aware_retriever, create_retrieval_chain
3
  from langchain.chains.combine_documents import create_stuff_documents_chain
 
4
  from langchain_community.chat_message_histories import ChatMessageHistory
5
  from langchain_core.chat_history import BaseChatMessageHistory
6
  from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
7
  from langchain_groq import ChatGroq
8
  from langchain_core.runnables.history import RunnableWithMessageHistory
9
+ from langchain_community.embeddings import HuggingFaceEmbeddings
10
  from langchain_text_splitters import RecursiveCharacterTextSplitter
11
  from langchain_community.document_loaders import PyPDFLoader
12
+ from langchain_community.vectorstores import FAISS
13
  import os
 
14
  import tempfile
15
 
16
  # Configurar o tema para dark
 
41
  # Sidebar com orientações
42
  st.sidebar.title("Menu")
43
  st.sidebar.markdown("""
44
+ # ... [O conteúdo do sidebar permanece o mesmo] ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  """)
46
 
47
  st.title("RAG conversacional com upload em PDF e histórico de bate-papo")
 
81
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
82
  splits = text_splitter.split_documents(documents)
83
 
84
+ # Create FAISS vector store
85
+ vectorstore = FAISS.from_documents(splits, embeddings)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
 
87
  st.success(f"Processed {len(splits)} document chunks.")
88
 
 
105
 
106
  system_prompt = (
107
  "Você é um assistente para tarefas de resposta a perguntas. Responda em Português do Brasil a menos que seja pedido outro idioma"
108
+ "Use os seguintes pedaços de contexto recuperado para responder "
109
+ "à pergunta. Se você não sabe a resposta, diga que "
110
+ "não sabe. Use no máximo três frases e mantenha a "
111
+ "resposta concisa."
112
  "\n\n"
113
  "{context}"
114
  )
 
141
  {"input": user_input},
142
  config={"configurable": {"session_id": session_id}},
143
  )
144
+ st.write("Assistente:", response['answer'])
145
 
146
  with st.expander("Ver histórico do chat"):
147
  for message in session_history.messages: