Face-Doc / app_one.py
MiguelCosta's picture
first without pdf,db
0f9e6dd
#from langchain.chat_models import ChatOpenAI
#from langchain_community.chat_models import ChatOpenAI
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser
from langchain.schema.runnable import Runnable
from langchain.schema.runnable.config import RunnableConfig
from langchain_community.vectorstores import Qdrant
from qdrant_client import QdrantClient, models
from langchain_openai.embeddings import OpenAIEmbeddings
from langchain.retrievers import MultiQueryRetriever
from operator import itemgetter
import chainlit as cl
model = ChatOpenAI(model="gpt-3.5-turbo", streaming=True)
client = QdrantClient(path="Qdrant_db")
embedding_model = OpenAIEmbeddings(model="text-embedding-3-small")
collection_name = "Meta info 400"
qdrant = Qdrant(client, collection_name, embedding_model)
qdrant_retriever = qdrant.as_retriever()
advanced_retriever = MultiQueryRetriever.from_llm(retriever=qdrant_retriever, llm=model)
@cl.on_chat_start
async def on_chat_start():
RAG_PROMPT = """
CONTEXT:
{context}
QUERY:
{question}
Answer the query above using the context provided. If you don't know the answer responde with: I don't know
"""
rag_prompt = ChatPromptTemplate.from_template(RAG_PROMPT)
runnable = (
{"context": itemgetter("question") | advanced_retriever, "question": itemgetter("question")} | rag_prompt | model | StrOutputParser()
)
cl.user_session.set("runnable", runnable)
@cl.on_message
async def on_message(message: cl.Message):
runnable = cl.user_session.get("runnable") # type: Runnable
msg = cl.Message(content="")
for chunk in await cl.make_async(runnable.stream)(
{"question": message.content},
config=RunnableConfig(callbacks=[cl.LangchainCallbackHandler()]),
):
await msg.stream_token(chunk)
await msg.send()