pmelnechuk commited on
Commit
8a6e488
verified
1 Parent(s): 99a7d35

Update src/model_load.py

Browse files
Files changed (1) hide show
  1. src/model_load.py +59 -60
src/model_load.py CHANGED
@@ -1,61 +1,60 @@
1
- from langchain.chains import RetrievalQAWithSourcesChain
2
- from langchain.llms import HuggingFacePipeline
3
- from transformers import AutoTokenizer, pipeline, AutoModelForCausalLM, BitsAndBytesConfig
4
- import torch
5
- from langchain.prompts import PromptTemplate
6
- from langchain.llms import HuggingFaceHub
7
- from langchain.chains import LLMChain
8
-
9
- def load_model():
10
- model_name="tiiuae/Falcon3-10B-Instruct"
11
-
12
- # Cargar tokenizer y modelo de Hugging Face
13
- tokenizer = AutoTokenizer.from_pretrained(model_name)
14
- model = AutoModelForCausalLM.from_pretrained(model_name,
15
- torch_dtype=torch.float16,
16
- device_map="auto",
17
- quantization_config=BitsAndBytesConfig(load_in_8bit=True))
18
-
19
- # Crear pipeline de generaci贸n de texto
20
- text_generation_pipeline = pipeline(
21
- "text-generation",
22
- model=model,
23
- tokenizer=tokenizer,
24
- max_new_tokens=128,
25
- repetition_penalty=1.2,
26
- device_map="auto"
27
- )
28
- # Crear el LLM compatible con LangChain
29
- llm = HuggingFacePipeline(pipeline=text_generation_pipeline)
30
-
31
- # Crear la plantilla de prompt que tomar谩 el texto y la pregunta
32
- prompt_template = """
33
- 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.
34
-
35
- **Documentos relevantes:**
36
- {documento}
37
-
38
- **Pregunta:**
39
- {pregunta}
40
-
41
- **Respuesta:**
42
- """
43
-
44
- # Crear el prompt con las variables necesarias
45
- prompt = PromptTemplate(input_variables=["documento", "pregunta"], template=prompt_template)
46
-
47
- # Crear una cadena de LLMChain que combine el retriever y el prompt
48
- qa_chain = LLMChain(llm=llm, prompt=prompt)
49
-
50
- def ask(pregunta: str,retriever):
51
-
52
- #Busqueda de documentos mediante el retriever
53
- documentos=retriever.get_relevant_documents(pregunta)
54
-
55
- #Generacion de la respuesta
56
- respuesta = qa_chain.invoke({
57
- "documentos": "\n".join([doc.page_content for doc in docs_relevantes]),
58
- "pregunta": pregunta
59
- })
60
-
61
  return respuesta["text"].split("**Respuesta:**\n")[1]
 
1
+ from langchain.chains import RetrievalQAWithSourcesChain
2
+ from langchain.llms import HuggingFacePipeline
3
+ from transformers import AutoTokenizer, pipeline, AutoModelForCausalLM, BitsAndBytesConfig
4
+ import torch
5
+ from langchain.prompts import PromptTemplate
6
+ from langchain.llms import HuggingFaceHub
7
+ from langchain.chains import LLMChain
8
+
9
+ def load_model():
10
+ model_name="tiiuae/Falcon3-10B-Instruct"
11
+
12
+ # Cargar tokenizer y modelo de Hugging Face
13
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
14
+ model = AutoModelForCausalLM.from_pretrained(model_name,
15
+ torch_dtype=torch.float16,
16
+ device_map="auto")
17
+
18
+ # Crear pipeline de generaci贸n de texto
19
+ text_generation_pipeline = pipeline(
20
+ "text-generation",
21
+ model=model,
22
+ tokenizer=tokenizer,
23
+ max_new_tokens=128,
24
+ repetition_penalty=1.2,
25
+ device_map="auto"
26
+ )
27
+ # Crear el LLM compatible con LangChain
28
+ llm = HuggingFacePipeline(pipeline=text_generation_pipeline)
29
+
30
+ # Crear la plantilla de prompt que tomar谩 el texto y la pregunta
31
+ prompt_template = """
32
+ 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.
33
+
34
+ **Documentos relevantes:**
35
+ {documento}
36
+
37
+ **Pregunta:**
38
+ {pregunta}
39
+
40
+ **Respuesta:**
41
+ """
42
+
43
+ # Crear el prompt con las variables necesarias
44
+ prompt = PromptTemplate(input_variables=["documento", "pregunta"], template=prompt_template)
45
+
46
+ # Crear una cadena de LLMChain que combine el retriever y el prompt
47
+ qa_chain = LLMChain(llm=llm, prompt=prompt)
48
+
49
+ def ask(pregunta: str,retriever):
50
+
51
+ #Busqueda de documentos mediante el retriever
52
+ documentos=retriever.get_relevant_documents(pregunta)
53
+
54
+ #Generacion de la respuesta
55
+ respuesta = qa_chain.invoke({
56
+ "documentos": "\n".join([doc.page_content for doc in docs_relevantes]),
57
+ "pregunta": pregunta
58
+ })
59
+
 
60
  return respuesta["text"].split("**Respuesta:**\n")[1]