Spaces:
Runtime error
Runtime error
File size: 10,198 Bytes
9921884 a7e3700 9921884 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
import os
os.environ["GOOGLE_API_KEY"] = "AIzaSyAGoYnNPu__70AId7EJS7F_61i69Qmn-wM"
os.environ["OPENAI_API_TYPE"] = "azure"
# os.environ["OPENAI_API_VERSION"] = "2023-07-01-preview"
# # os.environ["OPENAI_API_KEY"] = "5b624f6b71884a488560a86b1fffbf42"
# os.environ["OPENAI_API_KEY"] = "9e337d6696ce4a22a9a1b901e2ebb5fb"
from embedder import CustomEmbeddings
from langchain.chat_models import AzureChatOpenAI, ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate)
from langchain_google_genai import ChatGoogleGenerativeAI
from search import SimilaritySearch
embeddings = CustomEmbeddings(
model="text-embedding-ada-002",
model_url="https://year-embedding-ada-002-aiservices-2136192926.openai.azure.com//openai/deployments/fresh-embedding-ada-002/embeddings?api-version=2023-10-01-preview",
api_key="6eed3006cdd3445cb3f422a7358ce461"
)
vector_store = SimilaritySearch.load_from_disk(
embedding_function=embeddings,
data_dir="./indexs/text-embedding-ada-002/"
# data_dir="../indexs/basic-fno-text-embedding-ada-002/"
)
class Model:
def __init__(self, model_name: str, **kwargs) -> None:
self.model_name = model_name
self.llm = self.load_llm(model_name=model_name, **kwargs)
def load_llm(self, model_name: str, **kwargs):
if self.model_name == "gemini-pro":
self.retriever = vector_store.as_retriever(search_kwargs={"k": 2}, search_type="similarity")
return ChatGoogleGenerativeAI(model=model_name, temperature=0, max_tokens=4096)
elif self.model_name == "gpt-3.5-turbo":
self.retriever = vector_store.as_retriever(search_kwargs={"k": 2}, search_type="similarity")
return AzureChatOpenAI(
deployment_name="latest-gpt-35-turbo-16k",
temperature=0,
max_tokens=4096,
# azure_endpoint="https://high-gpt4-32k-0613-aiservices336365459.openai.azure.com/",
openai_api_key="9e337d6696ce4a22a9a1b901e2ebb5fb",
# openai_api_base="https://jan-2024-gpt35-turbo16k-aiservices800630185.openai.azure.com/",
openai_api_base = "https://fresh-gpt35-turbo-aiservices-2112150452.openai.azure.com/",
openai_api_version="2023-07-01-preview"
)
elif self.model_name == "gpt4":
self.retriever = vector_store.as_retriever(search_kwargs={"k": kwargs.get("k", 2)}, search_type="similarity")
return AzureChatOpenAI(
deployment_name="gpt-4-32k",
temperature=0,
max_tokens=4096,
# azure_endpoint="https://high-gpt4-32k-0613-aiservices336365459.openai.azure.com/",
openai_api_key="e91a341abb2f4646ab7b0acd3b9d461e",
openai_api_base="https://jan-2024-gpt4-ai-aiservices-1959882301.openai.azure.com/",
openai_api_version="2023-07-01-preview"
)
self.retriever = vector_store.as_retriever(search_kwargs={"k": kwargs.get("k", 1)}, search_type="similarity")
return ChatOpenAI(
model=model_name,
openai_api_key="EMPTY",
openai_api_base="http://localhost:8000/v1",
max_tokens=1024,
temperature=0,
model_kwargs={"stop": ["<|im_end|>", "Query:", "Question:"], "top_p": 0.95}
)
def run_qa_result(self, query: str):
support_docs = self.retriever.get_relevant_documents(query)
sources = list({d.metadata['source'] for d in support_docs})
context = "\n\n".join([f"{i + 1}. {d.page_content}" for i, d in enumerate(support_docs)])
return context, sources
def return_prompt(self, system_prompt: str, query: str, context: str):
# human_template = "Context:\n\n{context}\n\nQuery: {query}"
# human_template = "E-Book:\n\n{context}\n\nQuestion: {query}"
human_template = "\n\nContext:\n\n{context}\n\nQuestion: {query}"
# human_template = "\n\nBook:\n\n{context}\n\nQuestion: {query}"
messages = []
if self.model_name in [
"gemini-pro",
"TheBloke/Mistral-7B-Instruct-v0.2-AWQ",
]:
human_template = system_prompt + "\n\n" + human_template
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
messages.append(human_message_prompt)
else:
system_message_prompt = SystemMessagePromptTemplate.from_template(system_prompt)
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
messages.extend([system_message_prompt, human_message_prompt])
chat_prompt = ChatPromptTemplate.from_messages(messages)
return chat_prompt.format_prompt(context=context, query=query).to_messages()
def run(self, system_prompt: str, query: str):
context, sources = self.run_qa_result(query=query)
chat_prompt = self.return_prompt(system_prompt=system_prompt, query=query, context=context)
# text = "".join(resp.content for resp in self.llm.stream(chat_prompt))
# text += "\nSources: \n" + "\n".join([f"{i + 1}. {d}" for i, d in enumerate(sources)])
# return text, sources
for resp in self.llm.stream(chat_prompt):
yield resp.content.replace("$", "₹")
yield sources
# text = "".join(resp.content for resp in self.llm.stream(chat_prompt))
# text += "\nSources: \n" + "\n".join([f"{i + 1}. {d}" for i, d in enumerate(sources)])
# return text, sources
def get_sources(query):
results = vector_store.similarity_search_with_relevance_scores(query, k=2)
return [
{
"score": r[-1],
"source": r[0].metadata['source']
}
for r in results
]
if __name__ == "__main__":
# model = Model(model_name="phi2")
# model = Model(model_name="gpt-3.5-turbo")
# model = Model(model_name="gemini-pro")
# model = Model(model_name="TheBloke/zephyr-7B-beta-AWQ")
# model = Model(model_name="TheBloke/neural-chat-7B-v3-3-AWQ")
model = Model(model_name="TheBloke/Mistral-7B-Instruct-v0.2-AWQ")
model = Model(model_name="gpt4")
model = Model(model_name="gpt-3.5-turbo")
# query = "what is reliance?"
# print("results: ", get_sources(query))
# query = "explain FNO trading?"
# print("results: ", get_sources(query))
# query="What is FNO trading?"
# query = "Describe ITM, ATM and OTM"
# query = "give formula to calculate intrinsic value in Put and provide an example"
# query = "what is the order of delta, theta, gamma and vega amongst options in a given options chain"
# query = "Explain apple stock and nasdaq"
# query = "generate a table with long and short in F&O instruments"
# query = "how can we calculate intrinsic value and time value"
# query = "give formula to calculate intrinsic value in Put"
query = "explain exit from a put trade"
#
# query = "what will be buying cost if I long tesla CE"
# system_prompt="""Use the following pieces of context to answer the question in detail. Provide example only if it is in provided context and make sure to use them in rupees.""",
# system_prompt = """Use the following pieces of context to answer the question in detail. Provide example only if it is in context and make sure to use them in ₹.
# If you don't know the answer, just say 'Please rephrase the question I am unable to answer'"""
# system_prompt = """Answer the question using the context. Provide examples only from the context and use only Rupees (₹) in examples. If you don't know the answer, just say 'Please rephrase the question I am unable to answer'"""
# system_prompt = """Your task is to answer the question using the given context.
# Follow the below rules while answering the question:
# - Only create example using the context
# - Use only Rupees '₹' to represent currency.
# - If you don't know the answer, just say 'Please rephrase the question I am unable to answer'"""
# system_prompt = """You are an Indian Stock Market Assistant. Your task is to answer the question using the given context. Only create example from the given context and don't use '$'."""
# query = "what is reliance?"
# query = "what is python?"
query = "what is an apple stock and nasdq"
query = "Generate a tabular format on playing long and short through options"
query = "What is FNO Trading?"
system_prompt = """Answer the question only from context.
Provide examples only from the context.
If you don't know the answer, just say 'Please rephrase the question I am unable to answer'"""
system_prompt = "Answer the question only from the e-book. If it is not sufficient then respond as \"Unknown\""
system_prompt = """Use the following pieces of book to answer the question at the end. \nIf you don't know the answer, please think rationally and answer from the book"""
# system_prompt = """Answer the question using the context. Provide examples only from the context and use only Rupees (₹) in examples. If you don't know the answer, just say 'Please rephrase the question I am unable to answer'"""
# system_prompt = """Answer the question from the context. Provide examples only from the context. If you don't know the answer, just say 'Please rephrase the question'"""
# system_prompt = """Answer the question from the book. Provide examples only from the book. If you don't know the answer, just say 'Please rephrase the question'"""
response = model.run(
system_prompt=system_prompt,
query=query
)
text = ""
for resp in response:
if isinstance(resp, list):
sources = resp
break
text += resp
text = text.split("Question")[0].strip("\n")
print("text: ", text)
open("./text.txt", "w").write(text) |