ConserGPT / app.py
Bartusito's picture
Update app.py
139df3c verified
from operator import itemgetter
import gradio as gr
from langchain_core.prompts import ChatPromptTemplate
from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableLambda, RunnablePassthrough
from langchain_together import TogetherEmbeddings
from langchain_community.llms import Together
from langchain.llms import CTransformers
from langchain.prompts import PromptTemplate
import os
from dotenv import load_dotenv
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
from agent import getDocumentCharged
from langchain_openai import ChatOpenAI
from langfuse.callback import CallbackHandler
from ingest import procesar_archivos
# Carga las variables de entorno desde el archivo .env
load_dotenv()
# Accede a la API key utilizando os.environ
TOGETHER_API_KEY = os.environ.get("TOGETHER_API_KEY")
LANGFUSE_PRIVATE_API_KEY = os.environ.get("LANGFUSE_PRIVATE_API_KEY")
LANGFUSE_PUBLIC_API_KEY = os.environ.get("LANGFUSE_PUBLIC_API_KEY")
handler = CallbackHandler(LANGFUSE_PUBLIC_API_KEY, LANGFUSE_PRIVATE_API_KEY)
model = ChatOpenAI(
model="mistralai/Mixtral-8x7B-Instruct-v0.1",
temperature=0,
max_tokens=1024,
openai_api_key=TOGETHER_API_KEY,
base_url='https://api.together.xyz',
callbacks=[handler]
)
# model = Together(
# )
embeddings = HuggingFaceBgeEmbeddings(
model_name="BAAI/bge-large-en",
model_kwargs={'device': 'cpu'},
encode_kwargs = {'normalize_embeddings': False}
)
load_vector_store = Chroma(
persist_directory="stores/ConserGPT/", embedding_function=embeddings)
retriever = load_vector_store.as_retriever(search_kwargs={"k": 1})
#retriever = vectorstore.as_retriever()
# Provide a template following the LLM's original chat template.
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 solo y exclusivamente con la informaci贸n que se te ha sido proporcionada.
Responde siempre en castellano.
Solo si el usuario te pregunta por el n煤mero de archivos que hay cargados, ejecuta el siguiente c贸digo: {ShowDocu}, en caso contrario, omite este paso y no lo ejecutes.
Respuesta 煤til:"""
prompt = ChatPromptTemplate.from_template(template)
chain = (
{"context": retriever, "question": RunnablePassthrough(), "ShowDocu": RunnableLambda(getDocumentCharged)}
| prompt
| model
| StrOutputParser()
)
def get_response(input):
query = input
output = chain.invoke(query)
return output
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 Mixtral.",
allow_flagging='never'
)
iface.launch(share=True)