luansouza4444 commited on
Commit
b9eee6d
·
verified ·
1 Parent(s): e0cf2b0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -13
app.py CHANGED
@@ -6,7 +6,6 @@ Automatically generated by Colab.
6
  Original file is located at
7
  https://colab.research.google.com/drive/1ZybFOpX1r-SAA-RslP5WJkQ9gdI6JCCj
8
  """
9
-
10
  import streamlit as st
11
  import os
12
  from langchain.chat_models import ChatOpenAI
@@ -17,48 +16,55 @@ from langchain.text_splitter import RecursiveCharacterTextSplitter
17
  from langchain.chains import RetrievalQA
18
  import tempfile
19
 
20
- st.set_page_config(page_title="Análise de PDF com LangChain", layout="centered")
21
- st.title("📄🔍 Análise de PDF com LangChain")
22
 
23
- uploaded_file = st.file_uploader("Faça upload de um PDF", type="pdf")
24
 
25
  if uploaded_file is not None:
26
  with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp:
27
  tmp.write(uploaded_file.read())
28
  pdf_path = tmp.name
29
 
30
- with st.spinner("Processando o PDF..."):
31
  try:
 
32
  loader = PyPDFLoader(pdf_path)
33
  documents = loader.load()
34
 
35
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
36
  docs = text_splitter.split_documents(documents)
37
 
 
38
  embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
39
  vectorstore = FAISS.from_documents(docs, embeddings)
40
 
 
41
  llm = ChatOpenAI(
42
  openai_api_base="https://openrouter.ai/api/v1",
43
  openai_api_key=os.environ["OPENROUTER_API_KEY"],
44
  model='deepseek/deepseek-r1-zero:free'
45
  )
46
 
 
47
  qa_chain = RetrievalQA.from_chain_type(
48
  llm=llm,
49
  retriever=vectorstore.as_retriever(),
50
  return_source_documents=True
51
  )
52
 
53
- resposta = qa_chain.invoke({"query": "Qual é o principal assunto tratado neste PDF?"})
 
 
 
 
54
 
55
- st.success("✅ Resposta gerada com sucesso!")
56
- st.subheader("🤖 Resposta:")
57
- st.write(resposta['result'])
58
 
59
- st.subheader("📄 Fontes:")
60
- for i, doc in enumerate(resposta['source_documents']):
61
- st.markdown(f"**Fonte {i+1}:**\n\n{doc.page_content[:500]}...")
62
 
63
  except Exception as e:
64
- st.error(f"Erro ao processar o PDF: {str(e)}")
 
6
  Original file is located at
7
  https://colab.research.google.com/drive/1ZybFOpX1r-SAA-RslP5WJkQ9gdI6JCCj
8
  """
 
9
  import streamlit as st
10
  import os
11
  from langchain.chat_models import ChatOpenAI
 
16
  from langchain.chains import RetrievalQA
17
  import tempfile
18
 
19
+ st.set_page_config(page_title="Chat com PDF", layout="centered")
20
+ st.title("📄 Chat com PDF usando LangChain")
21
 
22
+ uploaded_file = st.file_uploader("📤 Envie um arquivo PDF", type="pdf")
23
 
24
  if uploaded_file is not None:
25
  with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp:
26
  tmp.write(uploaded_file.read())
27
  pdf_path = tmp.name
28
 
29
+ with st.spinner("🔍 Processando o PDF..."):
30
  try:
31
+ # Carregar e dividir o PDF
32
  loader = PyPDFLoader(pdf_path)
33
  documents = loader.load()
34
 
35
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
36
  docs = text_splitter.split_documents(documents)
37
 
38
+ # Gerar embeddings
39
  embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
40
  vectorstore = FAISS.from_documents(docs, embeddings)
41
 
42
+ # Criar modelo LLM
43
  llm = ChatOpenAI(
44
  openai_api_base="https://openrouter.ai/api/v1",
45
  openai_api_key=os.environ["OPENROUTER_API_KEY"],
46
  model='deepseek/deepseek-r1-zero:free'
47
  )
48
 
49
+ # Criar a cadeia de QA
50
  qa_chain = RetrievalQA.from_chain_type(
51
  llm=llm,
52
  retriever=vectorstore.as_retriever(),
53
  return_source_documents=True
54
  )
55
 
56
+ # Interface para pergunta
57
+ pergunta = st.text_input("❓ Faça uma pergunta sobre o PDF:")
58
+
59
+ if pergunta:
60
+ resposta = qa_chain.invoke({"query": pergunta})
61
 
62
+ st.success("✅ Resposta:")
63
+ st.write(resposta['result'])
 
64
 
65
+ with st.expander("📄 Fontes usadas"):
66
+ for i, doc in enumerate(resposta['source_documents']):
67
+ st.markdown(f"**Fonte {i+1}:**\n\n{doc.page_content[:500]}...")
68
 
69
  except Exception as e:
70
+ st.error(f"Erro: {str(e)}")