Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -46,7 +46,6 @@ def load_doc(list_file_path, chunk_size, chunk_overlap):
|
|
46 |
# Função para criar o banco de dados vetorial
|
47 |
def create_db(splits, collection_name):
|
48 |
embedding = HuggingFaceEmbeddings()
|
49 |
-
# Usando PersistentClient para persistir o banco de dados
|
50 |
new_client = chromadb.PersistentClient(path="./chroma_db")
|
51 |
vectordb = Chroma.from_documents(
|
52 |
documents=splits,
|
@@ -128,8 +127,6 @@ def create_collection_name(filepath):
|
|
128 |
collection_name = 'A' + collection_name[1:]
|
129 |
if not collection_name[-1].isalnum():
|
130 |
collection_name = collection_name[:-1] + 'Z'
|
131 |
-
print('Caminho do arquivo: ', filepath)
|
132 |
-
print('Nome da coleção: ', collection_name)
|
133 |
return collection_name
|
134 |
|
135 |
# Função para inicializar o banco de dados
|
@@ -147,7 +144,6 @@ def initialize_database(list_file_obj, chunk_size, chunk_overlap, progress=gr.Pr
|
|
147 |
# Função para inicializar o modelo LLM
|
148 |
def initialize_LLM(llm_option, llm_temperature, max_tokens, top_k, vector_db, progress=gr.Progress()):
|
149 |
llm_name = list_llm[llm_option]
|
150 |
-
print("Nome do LLM: ", llm_name)
|
151 |
qa_chain = initialize_llmchain(llm_name, llm_temperature, max_tokens, top_k, vector_db, progress)
|
152 |
return qa_chain, "Completo!"
|
153 |
|
@@ -185,7 +181,7 @@ def upload_file(file_obj):
|
|
185 |
return list_file_path
|
186 |
|
187 |
def demo():
|
188 |
-
with gr.Blocks(
|
189 |
vector_db = gr.State()
|
190 |
qa_chain = gr.State()
|
191 |
collection_name = gr.State()
|
@@ -194,72 +190,29 @@ def demo():
|
|
194 |
"""<center><h2>Chatbot baseado em PDF</center></h2>
|
195 |
<h3>Faça qualquer pergunta sobre seus documentos PDF</h3>""")
|
196 |
gr.Markdown(
|
197 |
-
"""<b>Nota:</b> Este assistente de IA, utilizando Langchain e LLMs de código aberto, realiza geração aumentada por recuperação
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
with gr.Accordion("Opções avançadas - Modelo LLM", open=False):
|
224 |
-
with gr.Row():
|
225 |
-
slider_temperature = gr.Slider(minimum=0.01, maximum=1.0, value=0.7, step=0.1, label="Temperatura", info="Controla a criatividade das respostas. Valores mais altos geram respostas mais diversificadas.", interactive=True)
|
226 |
-
with gr.Row():
|
227 |
-
slider_maxtokens = gr.Slider(minimum=224, maximum=4096, value=1024, step=32, label="Máximo de Tokens", info="Define o número máximo de tokens que o modelo pode gerar por resposta.", interactive=True)
|
228 |
-
with gr.Row():
|
229 |
-
slider_topk = gr.Slider(minimum=1, maximum=10, value=3, step=1, label="Amostras top-k", info="Controla o número de amostras consideradas durante a geração de respostas.", interactive=True)
|
230 |
-
with gr.Row():
|
231 |
-
llm_progress = gr.Textbox(value="Nenhum", label="Progresso da cadeia QA", info="Acompanhe o progresso da inicialização da cadeia de Pergunta e Resposta.")
|
232 |
-
with gr.Row():
|
233 |
-
qachain_btn = gr.Button("Inicializar cadeia de Pergunta e Resposta", info="Clique para inicializar a cadeia de Pergunta e Resposta com o modelo LLM selecionado.")
|
234 |
-
|
235 |
-
with gr.Tab("Etapa 4 - Chatbot"):
|
236 |
-
chatbot = gr.Chatbot(height=300, label="Chatbot", info="Interaja com o chatbot fazendo perguntas sobre os documentos carregados.")
|
237 |
-
with gr.Accordion("Avançado - Referências do documento", open=False):
|
238 |
-
with gr.Row():
|
239 |
-
doc_source1 = gr.Textbox(label="Referência 1", lines=2, container=True, scale=20, info="Trecho do documento referente à primeira fonte de informação.")
|
240 |
-
source1_page = gr.Number(label="Página", scale=1, info="Página do documento onde a referência foi encontrada.")
|
241 |
-
with gr.Row():
|
242 |
-
doc_source2 = gr.Textbox(label="Referência 2", lines=2, container=True, scale=20, info="Trecho do documento referente à segunda fonte de informação.")
|
243 |
-
source2_page = gr.Number(label="Página", scale=1, info="Página do documento onde a referência foi encontrada.")
|
244 |
-
with gr.Row():
|
245 |
-
doc_source3 = gr.Textbox(label="Referência 3", lines=2, container=True, scale=20, info="Trecho do documento referente à terceira fonte de informação.")
|
246 |
-
source3_page = gr.Number(label="Página", scale=1, info="Página do documento onde a referência foi encontrada.")
|
247 |
-
with gr.Row():
|
248 |
-
msg = gr.Textbox(placeholder="Digite a mensagem (exemplo: 'Sobre o que é este documento?')", container=True, label="Mensagem", info="Digite sua pergunta aqui.")
|
249 |
-
with gr.Row():
|
250 |
-
submit_btn = gr.Button("Enviar mensagem", info="Clique para enviar sua pergunta ao chatbot.")
|
251 |
-
clear_btn = gr.ClearButton([msg, chatbot], value="Limpar conversa", info="Clique para limpar a conversa atual.")
|
252 |
-
|
253 |
-
# Eventos de pré-processamento
|
254 |
-
db_btn.click(initialize_database, inputs=[document, slider_chunk_size, slider_chunk_overlap], outputs=[vector_db, collection_name, db_progress])
|
255 |
-
qachain_btn.click(initialize_LLM, inputs=[llm_btn, slider_temperature, slider_maxtokens, slider_topk, vector_db], outputs=[qa_chain, llm_progress]).then(lambda:[None,"",0,"",0,"",0], inputs=None, outputs=[chatbot, doc_source1, source1_page, doc_source2, source2_page, doc_source3, source3_page], queue=False)
|
256 |
-
|
257 |
-
# Eventos do Chatbot
|
258 |
-
msg.submit(conversation, inputs=[qa_chain, msg, chatbot], outputs=[qa_chain, msg, chatbot, doc_source1, source1_page, doc_source2, source2_page, doc_source3, source3_page], queue=False)
|
259 |
-
submit_btn.click(conversation, inputs=[qa_chain, msg, chatbot], outputs=[qa_chain, msg, chatbot, doc_source1, source1_page, doc_source2, source2_page, doc_source3, source3_page], queue=False)
|
260 |
-
clear_btn.click(lambda:[None,"",0,"",0,"",0], inputs=None, outputs=[chatbot, doc_source1, source1_page, doc_source2, source2_page, doc_source3, source3_page], queue=False)
|
261 |
-
demo.queue().launch(debug=True)
|
262 |
-
|
263 |
-
|
264 |
-
if __name__ == "__main__":
|
265 |
-
demo()
|
|
|
46 |
# Função para criar o banco de dados vetorial
|
47 |
def create_db(splits, collection_name):
|
48 |
embedding = HuggingFaceEmbeddings()
|
|
|
49 |
new_client = chromadb.PersistentClient(path="./chroma_db")
|
50 |
vectordb = Chroma.from_documents(
|
51 |
documents=splits,
|
|
|
127 |
collection_name = 'A' + collection_name[1:]
|
128 |
if not collection_name[-1].isalnum():
|
129 |
collection_name = collection_name[:-1] + 'Z'
|
|
|
|
|
130 |
return collection_name
|
131 |
|
132 |
# Função para inicializar o banco de dados
|
|
|
144 |
# Função para inicializar o modelo LLM
|
145 |
def initialize_LLM(llm_option, llm_temperature, max_tokens, top_k, vector_db, progress=gr.Progress()):
|
146 |
llm_name = list_llm[llm_option]
|
|
|
147 |
qa_chain = initialize_llmchain(llm_name, llm_temperature, max_tokens, top_k, vector_db, progress)
|
148 |
return qa_chain, "Completo!"
|
149 |
|
|
|
181 |
return list_file_path
|
182 |
|
183 |
def demo():
|
184 |
+
with gr.Blocks() as demo:
|
185 |
vector_db = gr.State()
|
186 |
qa_chain = gr.State()
|
187 |
collection_name = gr.State()
|
|
|
190 |
"""<center><h2>Chatbot baseado em PDF</center></h2>
|
191 |
<h3>Faça qualquer pergunta sobre seus documentos PDF</h3>""")
|
192 |
gr.Markdown(
|
193 |
+
"""<b>Nota:</b> Este assistente de IA, utilizando Langchain e LLMs de código aberto, realiza geração aumentada por recuperação, usando as informações dos documentos PDF carregados.""")
|
194 |
+
|
195 |
+
with gr.Tab("Iniciar Chatbot"):
|
196 |
+
with gr.Column():
|
197 |
+
gr.Markdown("Por favor, faça upload de um ou mais arquivos PDF.")
|
198 |
+
file_upload = gr.File(label="Carregar PDFs", file_count="multiple", file_types=["pdf"])
|
199 |
+
chunk_size = gr.Slider(minimum=500, maximum=1500, step=100, label="Tamanho do Chunk", value=1000)
|
200 |
+
chunk_overlap = gr.Slider(minimum=0, maximum=500, step=10, label="Sobreposição do Chunk", value=100)
|
201 |
+
gr.Markdown("<center><h3>Escolha o modelo LLM desejado:</h3></center>")
|
202 |
+
llm_option = gr.Dropdown(choices=list_llm_simple, value=list_llm_simple[0])
|
203 |
+
gr.Markdown(
|
204 |
+
"""<center><h3>Escolha os parâmetros do LLM desejados:</h3></center>""")
|
205 |
+
llm_temperature = gr.Slider(minimum=0, maximum=1, step=0.01, label="Temperatura", value=0.7)
|
206 |
+
max_tokens = gr.Slider(minimum=100, maximum=500, step=10, label="Tokens Máximos", value=150)
|
207 |
+
top_k = gr.Slider(minimum=10, maximum=50, step=5, label="Top-K", value=40)
|
208 |
+
|
209 |
+
progress = gr.Progress()
|
210 |
+
progress.clear()
|
211 |
+
progress_progress = gr.Progress()
|
212 |
+
submit_button = gr.Button("Iniciar Chatbot")
|
213 |
+
|
214 |
+
submit_button.click(initialize_database, inputs=[file_upload, chunk_size, chunk_overlap], outputs=[vector_db, collection_name, progress])
|
215 |
+
submit_button.click(initialize_LLM, inputs=[llm_option, llm_temperature, max_tokens, top_k, vector_db], outputs=[qa_chain, progress])
|
216 |
+
return demo
|
217 |
+
|
218 |
+
demo().launch()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|