File size: 1,614 Bytes
3dc5285
7d2e3ae
3dc5285
7d2e3ae
 
 
 
 
 
d0fa48e
3dc5285
ff67aba
7d2e3ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8e36c9a
7d2e3ae
8e36c9a
3dc5285
7d2e3ae
 
8e36c9a
7d2e3ae
 
8e36c9a
 
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
import gradio as gr
import os

from langchain_community.document_loaders import CSVLoader
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain import hub
from langchain_community.llms import HuggingFaceHub

loader = CSVLoader(file_path="data/test.csv")
documents = loader.load()

embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")

# --- Criar a base vetorial ---
vectorstore = FAISS.from_documents(documents, embeddings)
retriever = vectorstore.as_retriever()

# --- Usar modelo gerativo gratuito (FLAN-T5) via HuggingFace Hub ---
llm = HuggingFaceHub(repo_id="google/flan-t5-base", model_kwargs={"temperature": 0.2, "max_length": 512})

# --- Prompt RAG ---
rag_template = """
VocΓͺ Γ© um assistente ΓΊtil que responde com base nos dados do arquivo CSV.

Contexto: {context}

Pergunta: {question}
"""
prompt = ChatPromptTemplate.from_template(rag_template)

chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
)

def responder(pergunta):
    resposta = chain.invoke(pergunta)
    return resposta

iface = gr.Interface(fn=responder,
                     inputs=gr.Textbox(lines=2, placeholder="Digite sua pergunta sobre o CSV..."),
                     outputs="text",
                     title="Chat com CSV (sem OpenAI)",
                     description="Use um modelo gratuito para fazer perguntas sobre dados de um CSV.")

iface.launch()