RAG_TESI / utils.py
giannantonio15's picture
Update utils.py
1944740 verified
raw
history blame
3.38 kB
from llama_index.core.prompts import PromptTemplate
from llama_index.llms.huggingface import HuggingFaceLLM
from llama_index.core import Settings
import torch
import os
import spaces
import torch
from transformers import BitsAndBytesConfig
def setGPU():
torch.cuda.empty_cache()
#os.environ["CUDA_VISIBLE_DEVICES"] = "3,4"
#os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
if torch.cuda.is_available():
print(f"Numero di GPU disponibili: {torch.cuda.device_count()}")
for i in range(torch.cuda.device_count()):
print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
current_device = torch.cuda.current_device()
print(f"GPU in uso: {current_device}, {torch.cuda.get_device_name(current_device)}")
else:
print("CUDA non disponibile. Utilizzando CPU.")
def setLLM():
# Define the quantization configuration
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
)
# Define the generate_kwargs
generate_kwargs = {
"do_sample": True,
"min_length": 50, # Lunghezza minima della risposta generata
"no_repeat_ngram_size": 5, # Evita la ripetizione di n-grammi
}
# Define the prompt template
prompt_template = PromptTemplate("<s> [INST] {query_str} [/INST] ")
# Load the HuggingFaceLLM with specified configurations
llm = HuggingFaceLLM(
model_name="swap-uniba/LLaMAntino-2-chat-7b-hf-UltraChat-ITA",
tokenizer_name="swap-uniba/LLaMAntino-2-chat-7b-hf-UltraChat-ITA",
query_wrapper_prompt=prompt_template,
context_window=3900,
max_new_tokens=512,
generate_kwargs=generate_kwargs,
model_kwargs={"quantization_config": quantization_config},
# tokenizer_kwargs={"token": hf_token},
device_map="auto", # Automatically allocate the model to GPU if available
)
return llm
def setPromptTemplate():
text_qa_template_str = (
"Sei un chatbot in grado di rispondere solo alle domande su bandi regionali e avvisi della regione Puglia. Le informazioni di contesto recuperate da diverse sorgenti sono qua sotto.\n"
"---------------------\n"
"{context_str}\n"
"---------------------\n"
"Usa le informazioni di contesto sopra fornite e non la tua conoscenza pregressa per rispondere, l'unica regione che conosci è la regione Puglia. Se le informazioni di contesto non sono utili rispondi usando la tua conoscenza pregressa senza comunicare informazioni false."
"rispondi alla seguente query usando le informazioni dei bandi della regione Puglia \n"
"Query: {query_str}\n"
"Risposta: "
)
refine_template_str = (
"La domanda orginale è la seguente: {query_str}\n Abbiamo fornito la"
" seguente risposta: {existing_answer}\nAbbiamo l'opportunità di aggiornare"
" la risposta (solo se necessario) con il seguente contesto in più"
" .\n------------\n{context_msg}\n------------\nUsando il nuovo"
" contesto, aggiorna o ripeti la risposta.\n"
)
text_qa_template = PromptTemplate(text_qa_template_str)
refine_template = PromptTemplate(refine_template_str)
return text_qa_template, refine_template