ConserGPT / app.py
lruizap's picture
Upload 21 files
7dfd89d
import os
import gradio as gr
from langchain.llms import CTransformers
from langchain.prompts import PromptTemplate
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.embeddings import HuggingFaceBgeEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import PyPDFLoader
local_llm = "zephyr-7b-alpha.Q5_K_S.gguf"
config = {
'max_new_tokens': 1024,
'repetition_penalty': 1.1,
'temperature': 0,
'top_k': 50,
'top_p': 0.9,
'stream': True,
'threads': int(os.cpu_count() / 2)
}
llm = CTransformers(
model=local_llm,
model_type="zephyr",
lib="avx2", # for CPU use
**config
)
print("LLM Initialized...")
prompt_template = """Utiliza la siguiente información para responder a la pregunta del usuario.
Si no sabes la respuesta, di simplemente que no la sabes, no intentes inventarte una respuesta.
Contexto: {context}
Pregunta: {question}
Devuelve sólo la respuesta útil que aparece a continuación y nada más.
Responde siempre en castellano
Respuesta útil:
"""
model_name = "BAAI/bge-large-en"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': False}
embeddings = HuggingFaceBgeEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs
)
# loader = PyPDFLoader(
# "./Instruccion26septiembre2023PremiosExtraordinariosMusica.pdf")
# documents = loader.load()
# text_splitter = RecursiveCharacterTextSplitter(
# chunk_size=1000, chunk_overlap=100)
# texts = text_splitter.split_documents(documents)
# vector_store = Chroma.from_documents(texts, embeddings, collection_metadata={
# "hnsw:space": "cosine"}, persist_directory="stores/ConserGPT")
# print("Vector Store Created.......")
prompt = PromptTemplate(template=prompt_template,
input_variables=['context', 'question'])
load_vector_store = Chroma(
persist_directory="stores/ConserGPT/", embedding_function=embeddings)
retriever = load_vector_store.as_retriever(search_kwargs={"k": 1})
print("######################################################################")
chain_type_kwargs = {"prompt": prompt}
sample_prompts = ["En caso de empate entre el alumnado de alguna especialidad de la enseñanza profesionales de música, ¿Qué criterios se aplicarían para dar el premio?",
"¿Qué requisitos debe reunir un alumno candidato al premio extraordinario de enseñanzas profesionales de música?", "¿Cuál es la fecha de publicación en el BOE de la Orden ECD/1611/2015, del 29 de julio, del Ministerio de Educación, Cultura y Deporte?"]
def get_response(input):
query = input
chain_type_kwargs = {"prompt": prompt}
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever,
return_source_documents=True, chain_type_kwargs=chain_type_kwargs, verbose=True)
response = qa(query)
return response["result"]
input = gr.Text(
label="Prompt",
show_label=False,
max_lines=1,
placeholder="Enter your prompt",
container=False,
)
iface = gr.Interface(fn=get_response,
inputs=input,
outputs="text",
title="ConserGPT",
description="This is a RAG implementation based on Zephyr 7B Alpha LLM.",
examples=sample_prompts,
allow_flagging='never'
)
iface.launch(share=True)