Spaces:
Runtime error
Runtime error
| # https://towardsai.net/p/machine-learning/deploying-a-langchain-large-language-model-llm-with-streamlit-pinecone?amp=1 | |
| import os | |
| import pinecone | |
| import streamlit as st | |
| from streamlit_chat import message | |
| from langchain.llms import OpenAI | |
| from langchain.embeddings.openai import OpenAIEmbeddings | |
| from langchain.vectorstores import Pinecone | |
| from langchain.chains import ConversationChain | |
| from langchain.retrievers.self_query.base import SelfQueryRetriever | |
| from langchain.chains import RetrievalQA | |
| from langchain.chains.query_constructor.base import AttributeInfo | |
| pinecone.init( | |
| api_key=str(os.environ['PINECONE_API_KEY']), | |
| environment=str(os.environ['PINECONE_ENV'])) | |
| llm = OpenAI(temperature=0) | |
| embeddings = OpenAIEmbeddings() | |
| vectorstore = Pinecone.from_existing_index("impromptu", embeddings) | |
| document_content_description = ("Excerpts from the book Impromptu, " | |
| "jointly authored by Reid Hoffman, " | |
| "GPT-3, and GPT 4.") | |
| metadata_field_info=[ | |
| AttributeInfo( | |
| name="author", | |
| description="The author of the excerpt", | |
| type="string or list[string]", | |
| ), | |
| AttributeInfo( | |
| name="chapter_number", | |
| description="The chapter number of excerpt", | |
| type="integer", | |
| ), | |
| AttributeInfo( | |
| name="chapter_name", | |
| description="The chapter name of the excerpt", | |
| type="string", | |
| ), | |
| ] | |
| def load_chain(): | |
| retriever = SelfQueryRetriever.from_llm( | |
| llm, | |
| vectorstore, | |
| document_content_description, | |
| metadata_field_info, | |
| verbose=True) | |
| qa = RetrievalQA.from_chain_type( | |
| llm=OpenAI(), | |
| chain_type="stuff", | |
| retriever=retriever, | |
| return_source_documents=False) | |
| return qa | |
| chain = load_chain() | |
| # From here down is all the StreamLit UI. | |
| st.set_page_config(page_title="Impromptu GPT", page_icon=":robot:") | |
| st.header("Impromptu GPT") | |
| ''' | |
| > A secondary UI testing LangChain's Python-only [```SelfQueryRetriever```](https://python.langchain.com/en/latest/modules/indexes/retrievers/examples/self_query_retriever.html) | |
| interface, which uses an LLM to structure vectorstore queries. | |
| Below, conversational requests for specific chapters and | |
| speakers are extracted into relevant metadata filters. | |
| ''' | |
| if "generated" not in st.session_state: | |
| st.session_state["generated"] = [] | |
| if "past" not in st.session_state: | |
| st.session_state["past"] = [] | |
| def get_text(): | |
| input_text = st.text_input("You: ", "What are some of the risks mentioned in chapter one?", key="input") | |
| return input_text | |
| user_input = get_text() | |
| if user_input: | |
| output = chain.run(user_input) | |
| st.session_state.past.append(user_input) | |
| st.session_state.generated.append(output) | |
| if st.session_state["generated"]: | |
| for i in range(len(st.session_state["generated"]) - 1, -1, -1): | |
| message(st.session_state["generated"][i], key=str(i), avatar_style="bottts") | |
| message(st.session_state["past"][i], is_user=True, key=str(i) + "_user", avatar_style="shapes") |