PablitoGil14 commited on
Commit
514c042
verified
1 Parent(s): dfac782

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -0
app.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from langchain_community.chat_models import HuggingFaceHub
3
+ from langchain_community.vectorstores import Chroma
4
+ from langchain.document_loaders import PyPDFLoader
5
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
6
+ from langchain_core.output_parsers import StrOutputParser
7
+ from langchain_huggingface import HuggingFaceEmbeddings
8
+ from langchain import hub
9
+ from rerankers import Reranker
10
+ import os
11
+
12
+ # Configuraci贸n del token de acceso a Hugging Face (si usas modelo privado)
13
+ os.environ["HUGGINGFACEHUB_API_TOKEN"] = os.getenv("HUGGINGFACEHUB_API_TOKEN", "")
14
+
15
+ # Cargar PDF
16
+ loader = PyPDFLoader("80dias.pdf")
17
+ documents = loader.load()
18
+ splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=20)
19
+ splits = splitter.split_documents(documents)
20
+
21
+ # Crear embeddings
22
+ embedding_model = "sentence-transformers/paraphrase-multilingual-mpnet-base-v2"
23
+ embeddings = HuggingFaceEmbeddings(model_name=embedding_model)
24
+ vectordb = Chroma.from_documents(splits, embedding=embeddings)
25
+
26
+ # Modelo LLM desde HuggingFace (usa uno disponible en Spaces)
27
+ llm = HuggingFaceHub(repo_id="mistralai/Mistral-7B-Instruct-v0.1", model_kwargs={"temperature": 0.5, "max_new_tokens": 500})
28
+ chain = llm | StrOutputParser()
29
+
30
+ # Reranker
31
+ ranker = Reranker("answerdotai/answerai-colbert-small-v1", model_type="colbert")
32
+
33
+ # Funci贸n RAG
34
+ def rag_chat(query):
35
+ results = vectordb.similarity_search_with_score(query)
36
+ context = []
37
+ for doc, score in results:
38
+ if score < 7:
39
+ context.append(doc.page_content)
40
+ if not context:
41
+ return "No tengo informaci贸n para responder a esa pregunta."
42
+
43
+ ranking = ranker.rank(query=query, docs=context)
44
+ best_context = ranking[0].text
45
+
46
+ prompt = hub.pull("rlm/rag-prompt")
47
+ rag_chain = prompt | llm | StrOutputParser()
48
+
49
+ result = rag_chain.invoke({"context": best_context, "question": query})
50
+ return result
51
+
52
+ # Interfaz Gradio
53
+ iface = gr.ChatInterface(fn=rag_chat, title="Chat Julio Verne - RAG", description="Pregunta lo que quieras sobre *La vuelta al mundo en 80 d铆as* de Julio Verne.")
54
+ iface.launch()