MikeCraBash commited on
Commit
4b6b36a
1 Parent(s): d40b7dc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -24
app.py CHANGED
@@ -1,12 +1,14 @@
1
- # TRASH CAN DO WHAT YOU WANT WITH IT
 
2
 
3
  # Basic Imports & Setup
4
  import os
5
- from transformers import AutoModelForCausalLM, AutoTokenizer
6
 
7
  # Using Chainlit for our UI
8
  import chainlit as cl
9
  from chainlit.prompt import Prompt, PromptMessage
 
10
 
11
  # Getting the API key from the .env file
12
  from dotenv import load_dotenv
@@ -22,12 +24,13 @@ file_id = "1UQnaQjBKKyWAiLdr6UlwSJovOp9zDdxr"
22
  # file_id = "12cvKg19CJf-wt98q5sPJctjp5fW-nsh6" //Used for MLOps Meetup
23
  direct_url = f"https://drive.google.com/uc?export=download&id={file_id}"
24
 
 
25
  # Now load the document using the direct URL
26
  docs = PyMuPDFLoader(direct_url).load()
27
 
28
  import tiktoken
29
  def tiktoken_len(text):
30
- tokens = tiktoken.encoding_for_model("solar-10.7b").encode(
31
  text,
32
  )
33
  return len(tokens)
@@ -36,20 +39,20 @@ def tiktoken_len(text):
36
  from langchain.text_splitter import RecursiveCharacterTextSplitter
37
 
38
  text_splitter = RecursiveCharacterTextSplitter(
39
- chunk_size=500, # 500 tokens per chunk, experiment with this value
40
- chunk_overlap=50, # 50 tokens overlap between chunks, experiment with this value
41
- length_function=tiktoken_len,
42
  )
43
 
44
  split_chunks = text_splitter.split_documents(docs)
45
 
46
  # Load the embeddings model
47
- from langchain.embeddings import HuggingFaceEmbeddings
48
 
49
- embedding_model = HuggingFaceEmbeddings(model_name="solar-10.7b")
50
 
51
  # Load the vector store and retriever from Qdrant
52
- from langchain.vectorstores import Qdrant
53
 
54
  qdrant_vectorstore = Qdrant.from_documents(
55
  split_chunks,
@@ -60,12 +63,10 @@ qdrant_vectorstore = Qdrant.from_documents(
60
 
61
  qdrant_retriever = qdrant_vectorstore.as_retriever()
62
 
63
- # Load the Solar 10.7B model
64
- tokenizer = AutoTokenizer.from_pretrained("Upstage/SOLAR-10.7B-v1.0")
65
- model = AutoModelForCausalLM.from_pretrained("Upstage/SOLAR-10.7B-v1.0")
66
 
67
- # Set up the RAG prompt template
68
- from langchain.prompts import ChatPromptTemplate
69
 
70
  RAG_PROMPT = """
71
  SYSTEM:
@@ -77,15 +78,15 @@ When to talk with the user about conferences, it can be a "transactional convers
77
  Here is an example of a transactional conversation:
78
  User: When is the conference?
79
  You: The conference is on June 1st, 2024. What else would you like to know?
80
- It can also be a chain of questions and answers where you and the user continue the chain until they say "Got it".
81
  Here is an example of a transactional conversation:
82
  User: What sessions should I attend?
83
  You: You should attend the keynote session by Bono. Would you like to know more?
84
  User: Yes
85
  You: The keynote session by Bono is on June 1st, 2024. What else would you like?
86
- If asked a question about sessions, you can provide detailed information about the session.
87
  If there are multiple sessions, you can provide information about each session.
88
- The format of session-related replies is:
89
  Title:
90
  Description:
91
  Speaker:
@@ -97,15 +98,15 @@ CONTEXT:
97
  {context}
98
  QUERY:
99
  {question}
100
- ALL ANSWERS MUST COME FROM THE INCLUDED DOCUMENTS AND NOT FROM THE INTERNET OR FROM AI (do not make up an answer). If you can't reply, say: dunno, look it up yourself, bozo.
101
  Most questions are about the date, location, and purpose of the conference.
102
  You may be asked for fine details about the conference regarding the speakers, sponsors, and attendees.
103
  You are capable of looking up information and providing detailed responses.
104
  When asked a question about a conference, you should provide a detailed response.
105
  After completing your response, you should ask the user if they would like to know more about the conference by asking "Hope that helps".
106
- If the user says "yes", you should provide more information about the conference. If the user says "no", you should say "Goodbye!" or ask if they would like to provide feedback.
107
  If you are asked a question about Cher, you should respond with "Rock on With Your Bad Self!".
108
- You guess if you do not have an answer, but you must preface the response with: "I might be guessing, but ..."
109
  """
110
  rag_prompt = ChatPromptTemplate.from_template(RAG_PROMPT)
111
 
@@ -116,14 +117,14 @@ from langchain.schema.runnable import RunnablePassthrough
116
  retrieval_augmented_qa_chain = (
117
  {"context": itemgetter("question") | qdrant_retriever, "question": itemgetter("question")}
118
  | RunnablePassthrough.assign(context=itemgetter("context"))
119
- | {"response": rag_prompt | model, "context": itemgetter("context")}
120
  )
121
 
122
  # Chainlit App
123
  @cl.on_chat_start
124
  async def start_chat():
125
  settings = {
126
- "model": "solar-10.7b",
127
  "temperature": 0,
128
  "max_tokens": 500,
129
  "top_p": 1,
@@ -135,9 +136,9 @@ async def start_chat():
135
  @cl.on_message
136
  async def main(message: cl.Message):
137
  chainlit_question = message.content
 
138
  response = retrieval_augmented_qa_chain.invoke({"question": chainlit_question})
139
  chainlit_answer = response["response"].content
140
 
141
  msg = cl.Message(content=chainlit_answer)
142
- await msg.send()
143
-
 
1
+ # AI MAKERSPACE PREPR
2
+ # Date: 2024-5-16
3
 
4
  # Basic Imports & Setup
5
  import os
6
+ from openai import AsyncOpenAI
7
 
8
  # Using Chainlit for our UI
9
  import chainlit as cl
10
  from chainlit.prompt import Prompt, PromptMessage
11
+ from chainlit.playground.providers import ChatOpenAI
12
 
13
  # Getting the API key from the .env file
14
  from dotenv import load_dotenv
 
24
  # file_id = "12cvKg19CJf-wt98q5sPJctjp5fW-nsh6" //Used for MLOps Meetup
25
  direct_url = f"https://drive.google.com/uc?export=download&id={file_id}"
26
 
27
+
28
  # Now load the document using the direct URL
29
  docs = PyMuPDFLoader(direct_url).load()
30
 
31
  import tiktoken
32
  def tiktoken_len(text):
33
+ tokens = tiktoken.encoding_for_model("gpt-3.5-turbo").encode(
34
  text,
35
  )
36
  return len(tokens)
 
39
  from langchain.text_splitter import RecursiveCharacterTextSplitter
40
 
41
  text_splitter = RecursiveCharacterTextSplitter(
42
+ chunk_size = 500, # 500 tokens per chunk, experiment with this value
43
+ chunk_overlap = 50, # 50 tokens overlap between chunks, experiment with this value
44
+ length_function = tiktoken_len,
45
  )
46
 
47
  split_chunks = text_splitter.split_documents(docs)
48
 
49
  # Load the embeddings model
50
+ from langchain_openai.embeddings import OpenAIEmbeddings
51
 
52
+ embedding_model = OpenAIEmbeddings(model="text-embedding-3-small")
53
 
54
  # Load the vector store and retriever from Qdrant
55
+ from langchain_community.vectorstores import Qdrant
56
 
57
  qdrant_vectorstore = Qdrant.from_documents(
58
  split_chunks,
 
63
 
64
  qdrant_retriever = qdrant_vectorstore.as_retriever()
65
 
66
+ from langchain_openai import ChatOpenAI
67
+ openai_chat_model = ChatOpenAI(model="gpt-3.5-turbo")
 
68
 
69
+ from langchain_core.prompts import ChatPromptTemplate
 
70
 
71
  RAG_PROMPT = """
72
  SYSTEM:
 
78
  Here is an example of a transactional conversation:
79
  User: When is the conference?
80
  You: The conference is on June 1st, 2024. What else would you like to know?
81
+ It can also be a chain of questions and answers where you and the user continues the chain until they say "Got it".
82
  Here is an example of a transactional conversation:
83
  User: What sessions should I attend?
84
  You: You should attend the keynote session by Bono. Would you like to know more?
85
  User: Yes
86
  You: The keynote session by Bono is on June 1st, 2024. What else would you like?
87
+ If asked a question about a sessions, you can provide detailed information about the session.
88
  If there are multiple sessions, you can provide information about each session.
89
+ The format of session related replies is:
90
  Title:
91
  Description:
92
  Speaker:
 
98
  {context}
99
  QUERY:
100
  {question}
101
+ ALL ANWSERS MUST COME FROM THE INCLUDE DOCUMENTS AND NOT FROM INTERNET OR FROM AI (do not make up an answer). If you can't reply, say: dunno, look it up yourself, bozo.
102
  Most questions are about the date, location, and purpose of the conference.
103
  You may be asked for fine details about the conference regarding the speakers, sponsors, and attendees.
104
  You are capable of looking up information and providing detailed responses.
105
  When asked a question about a conference, you should provide a detailed response.
106
  After completing your response, you should ask the user if they would like to know more about the conference by asking "Hope that helps".
107
+ If the user says "yes", you should provide more information about the conference. If the user says "no", you should say "Goodbye! or ask if they would like to provide feedback.
108
  If you are asked a question about Cher, you should respond with "Rock on With Your Bad Self!".
109
+ You guess if you do not have a answer, but you must preface the repsonse with: "I might be guessing, but ..."
110
  """
111
  rag_prompt = ChatPromptTemplate.from_template(RAG_PROMPT)
112
 
 
117
  retrieval_augmented_qa_chain = (
118
  {"context": itemgetter("question") | qdrant_retriever, "question": itemgetter("question")}
119
  | RunnablePassthrough.assign(context=itemgetter("context"))
120
+ | {"response": rag_prompt | openai_chat_model, "context": itemgetter("context")}
121
  )
122
 
123
  # Chainlit App
124
  @cl.on_chat_start
125
  async def start_chat():
126
  settings = {
127
+ "model": "gpt-3.5-turbo",
128
  "temperature": 0,
129
  "max_tokens": 500,
130
  "top_p": 1,
 
136
  @cl.on_message
137
  async def main(message: cl.Message):
138
  chainlit_question = message.content
139
+ #chainlit_question = "What was the total value of 'Cash and cash equivalents' as of December 31, 2023?"
140
  response = retrieval_augmented_qa_chain.invoke({"question": chainlit_question})
141
  chainlit_answer = response["response"].content
142
 
143
  msg = cl.Message(content=chainlit_answer)
144
+ await msg.send()