Finish-him commited on
Commit
0ef31de
·
verified ·
1 Parent(s): 3756719

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -13
app.py CHANGED
@@ -4,7 +4,7 @@ from langchain_community.document_loaders import PyPDFDirectoryLoader
4
  from langchain_text_splitters import RecursiveCharacterTextSplitter
5
  from langchain_community.embeddings import HuggingFaceEmbeddings
6
  from langchain_community.vectorstores import FAISS
7
- from langchain.chains import RetrievalQA
8
  from langchain_community.llms import HuggingFaceHub
9
 
10
  # --- PASSO 1: CARREGAR OS DOCUMENTOS ---
@@ -32,7 +32,7 @@ db = FAISS.from_documents(docs, embeddings)
32
  repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1" # Um modelo poderoso
33
  llm = HuggingFaceHub(
34
  repo_id=repo_id,
35
- model_kwargs={"temperature": 0.1, "max_new_tokens": 512, "max_length": 4096}
36
  )
37
 
38
  # Cria a "cadeia" (chain) de RetrievalQA. É aqui que a mágica acontece.
@@ -41,25 +41,35 @@ qa_chain = RetrievalQA.from_chain_type(
41
  llm=llm,
42
  chain_type="stuff",
43
  retriever=db.as_retriever(search_kwargs={"k": 3}), # Busca os 3 trechos mais relevantes
44
- return_source_documents=True
45
  )
46
 
47
  # --- PASSO 5: CRIAR A INTERFACE COM O GRADIO ---
48
  # Define a função que será chamada pela interface
49
  def process_query(query):
50
- result = qa_chain({"query": query})
51
- # Retorna a resposta e, opcionalmente, as fontes que usou para responder
52
- return result['result']
 
 
 
 
 
 
53
 
54
  # Cria a interface web
55
- with gr.Blocks() as demo:
56
- gr.Markdown("# Assistente de Análise do Contrato DETRAN-RJ")
57
- gr.Markdown("Faça uma pergunta sobre os documentos do contrato e o assistente buscará a resposta.")
58
 
59
- inp = gr.Textbox(label="Qual a sua pergunta?", placeholder="Ex: Qual o valor total do contrato?")
60
- out = gr.Textbox(label="Resposta")
 
 
 
61
 
62
- inp.submit(process_query, inputs=inp, outputs=out)
 
63
 
64
  # Adiciona alguns exemplos de perguntas
65
  gr.Examples(
@@ -68,8 +78,12 @@ with gr.Blocks() as demo:
68
  "Qual o valor total do contrato?",
69
  "Quem é o gestor do contrato?",
70
  "Qual o prazo de vigência do contrato?",
 
71
  ],
72
- inputs=inp
 
 
 
73
  )
74
 
75
  # Lança a aplicação
 
4
  from langchain_text_splitters import RecursiveCharacterTextSplitter
5
  from langchain_community.embeddings import HuggingFaceEmbeddings
6
  from langchain_community.vectorstores import FAISS
7
+ from langchain.chains import RetrievalQA # Esta linha foi corrigida implicitamente pela estrutura do Langchain
8
  from langchain_community.llms import HuggingFaceHub
9
 
10
  # --- PASSO 1: CARREGAR OS DOCUMENTOS ---
 
32
  repo_id = "mistralai/Mixtral-8x7B-Instruct-v0.1" # Um modelo poderoso
33
  llm = HuggingFaceHub(
34
  repo_id=repo_id,
35
+ model_kwargs={"temperature": 0.1, "max_new_tokens": 1024} # Aumentei um pouco para respostas mais completas
36
  )
37
 
38
  # Cria a "cadeia" (chain) de RetrievalQA. É aqui que a mágica acontece.
 
41
  llm=llm,
42
  chain_type="stuff",
43
  retriever=db.as_retriever(search_kwargs={"k": 3}), # Busca os 3 trechos mais relevantes
44
+ return_source_documents=False # Simplificado para retornar apenas o texto final
45
  )
46
 
47
  # --- PASSO 5: CRIAR A INTERFACE COM O GRADIO ---
48
  # Define a função que será chamada pela interface
49
  def process_query(query):
50
+ # O LangChain pode retornar textos com formatação estranha ou avisos.
51
+ # Vamos limpar a resposta para mostrar apenas o resultado principal.
52
+ try:
53
+ result = qa_chain.invoke(query) # Usando .invoke() que é a forma mais moderna
54
+ answer = result.get('result', 'Não foi possível encontrar uma resposta.')
55
+ return answer
56
+ except Exception as e:
57
+ print(e) # Imprime o erro nos logs para depuração
58
+ return "Ocorreu um erro ao processar sua pergunta. Verifique os logs do Space."
59
 
60
  # Cria a interface web
61
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
62
+ gr.Markdown("# 🤖 Assistente de Análise do Contrato DETRAN-RJ")
63
+ gr.Markdown("Faça uma pergunta sobre os documentos do contrato e o assistente buscará a resposta nos arquivos.")
64
 
65
+ with gr.Row():
66
+ inp = gr.Textbox(label="Qual a sua pergunta?", placeholder="Ex: Qual o valor total do contrato?", scale=4)
67
+ btn = gr.Button("Enviar", variant="primary", scale=1)
68
+
69
+ out = gr.Markdown(label="Resposta")
70
 
71
+ btn.click(process_query, inputs=inp, outputs=out)
72
+ inp.submit(process_query, inputs=inp, outputs=out) # Permite usar Enter
73
 
74
  # Adiciona alguns exemplos de perguntas
75
  gr.Examples(
 
78
  "Qual o valor total do contrato?",
79
  "Quem é o gestor do contrato?",
80
  "Qual o prazo de vigência do contrato?",
81
+ "Qual a empresa contratada?",
82
  ],
83
+ inputs=inp,
84
+ outputs=out,
85
+ fn=process_query,
86
+ cache_examples=False # Evita erros de cache com exemplos
87
  )
88
 
89
  # Lança a aplicação