Spaces:
Sleeping
Sleeping
File size: 2,124 Bytes
8a6e488 5079ad5 2f94c75 881820d 8a6e488 9589f70 8a6e488 3571f6c 56f3f24 6bbbde2 8a6e488 48b1569 8a6e488 3e6183d 8a6e488 48b1569 8a6e488 2154031 |
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 52 53 54 55 56 57 58 59 60 61 62 |
from langchain.chains import RetrievalQAWithSourcesChain
from langchain.llms import HuggingFacePipeline
from transformers import AutoTokenizer, pipeline, AutoModelForCausalLM, BitsAndBytesConfig
import torch
from langchain.prompts import PromptTemplate
from langchain.llms import HuggingFaceHub
from langchain.chains import LLMChain
def load_model():
model_name="tiiuae/Falcon3-7B-Instruct"
max_memory = {0: "24GB", "cpu": "30GB"}
# Cargar tokenizer y modelo de Hugging Face
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name,
torch_dtype=torch.bfloat16).to("cuda")
# Crear pipeline de generaci贸n de texto
text_generation_pipeline = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=128,
repetition_penalty=1.2,
device_map="auto"
)
# Crear el LLM compatible con LangChain
llm = HuggingFacePipeline(pipeline=text_generation_pipeline)
# Crear la plantilla de prompt que tomar谩 el texto y la pregunta
prompt_template = """
Dado el siguiente texto extra铆do de varios documentos y una pregunta, crea una respuesta utilizando la informaci贸n proporcionada. Si la pregunta sale por fuera de la informaci贸n proporcionada responde con "No tengo informaci贸n al respecto" y corta la respuesta.
**Documentos relevantes:**
{documento}
**Pregunta:**
{pregunta}
**Respuesta:**
"""
# Crear el prompt con las variables necesarias
prompt = PromptTemplate(input_variables=["documento", "pregunta"], template=prompt_template)
# Crear una cadena de LLMChain que combine el retriever y el prompt
qa_chain = prompt | llm
return qa_chain
def ask(pregunta: str,retriever,qa_chain):
#Busqueda de documentos mediante el retriever
documentos=retriever.invoke(pregunta)
#Generacion de la respuesta
respuesta = qa_chain.invoke({
"documento": "\n".join([doc.page_content for doc in documentos]),
"pregunta": pregunta
})
return respuesta |