File size: 3,517 Bytes
0fc23c4
 
 
 
 
 
 
0919e86
 
0fc23c4
0919e86
 
0fc23c4
 
0919e86
0fc23c4
 
 
 
0919e86
0fc23c4
 
0919e86
0fc23c4
 
0919e86
0fc23c4
0919e86
0fc23c4
 
0919e86
0fc23c4
 
0919e86
0fc23c4
 
0919e86
0fc23c4
 
 
0919e86
0fc23c4
 
 
 
 
 
6ea5d9d
0fc23c4
 
 
0919e86
0fc23c4
 
0919e86
0fc23c4
 
0919e86
 
 
0fc23c4
0919e86
 
 
0fc23c4
0919e86
0fc23c4
 
0919e86
0fc23c4
0919e86
2c612a0
0fc23c4
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from langchain.callbacks import StreamlitCallbackHandler
import streamlit as st
from langchain.llms import OpenAI
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.callbacks import StreamlitCallbackHandler
import streamlit as st


import os


st.set_page_config(page_title="CalHacks2023", page_icon=":robot:")
st.header("CalHacks2023")

from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader

import os
os.environ["OPENAI_API_KEY"] = "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"

from langchain.chat_models import ChatOpenAI
from langchain.chains.question_answering import load_qa_chain

from langchain.chains import RetrievalQA

if "generated" not in st.session_state:
  st.session_state["generated"] = []

if "past" not in st.session_state:
  st.session_state["past"] = []

if "messages" not in st.session_state:
  st.session_state["messages"] = []

# load the document and split it into chunks
loader = TextLoader("shermaissian_how_to.txt")
documents = loader.load()

llm = ChatOpenAI(
  openai_api_key=os.environ.get("OPENAI_API_KEY"),
  model='gpt-3.5-turbo-16k',
  temperature=0,
  streaming=True
)

# split it into chunks
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# create the open-source embedding function
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")

# load it into Chroma
db = Chroma.from_documents(docs, embedding_function)



st_callback = StreamlitCallbackHandler(st.container())



retriever = db.as_retriever(search_type="similarity", search_kwargs={"k":10})

qa = RetrievalQA.from_chain_type(
    llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=False)

called = False


if prompt := st.chat_input():
    st.chat_message("user").write(prompt)
    with st.chat_message("assistant"):
        #st_callback = StreamlitCallbackHandler(st.container())
        if not called:
            result = qa({"query": "Image yourself in the perspective of a high school student trying to find extracurricular activities to do for college applications. The following shows a specific student answering questions about their passions and experiences:" + 
                 prompt + 
                 "Use the information provided to analyze the underlying passions this student has. Use their past experiences and interests to come up with a list of a few potential extracurricular activities that they can engage in to develop their college application. This has to fit both their interests and allow them to gain skills that will enable them to build a successful college application portfolio. Provide reasoning as to why you are recommending these activities and as part of the description as open-ended questions that challenge them to think more about these ideas. Discover the root cause of what drives them to change the world for a better place. Based on that, craft extracurriculars around a personalized, nuanced, and unique story that can make these applicants truly showcase how they’re creating an impact in novel, meaningful​​, and creative ways."})
            st.write(result['result'])
            called = True
        else:
            result = qa({"query" : prompt})
            st.write(result['result'])