Spaces:
Build error
Build error
| import asyncio | |
| import streamlit as st | |
| from langchain.agents import AgentType | |
| from langchain.agents import initialize_agent | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.memory import ConversationBufferMemory | |
| from langchain.memory.chat_message_histories import StreamlitChatMessageHistory | |
| from langchain.schema import SystemMessage | |
| from langchain.prompts import MessagesPlaceholder | |
| from app.tools import StoriesTool | |
| from app.tools import CommentsTool | |
| from app.tools import ContentTool | |
| async def generate_response(question): | |
| result = await open_ai_agent.arun(question) | |
| return result | |
| st.set_page_config(page_title="NewsNerd HackerBot π€π°") | |
| st.title("NewsNerd HackerBot π€π°") | |
| stop = False | |
| with st.sidebar: | |
| if 'OPENAI_API_KEY' in st.secrets: | |
| st.success("OPENAI_API_KEY already provided!", icon='β ') | |
| openai_api_key = st.secrets['OPENAI_API_KEY'] | |
| else: | |
| openai_api_key = st.text_input('Enter your OPENAI_API_KEY: ', type='password') | |
| if not openai_api_key: | |
| st.warning('Please, enter your OPENAI_API_KEY', icon='β οΈ') | |
| stop = True | |
| else: | |
| st.success('Ask Hacker News whatever you want!', icon='π') | |
| st.markdown(""" | |
| # **Greetings, Digital Explorer!** | |
| Are you fatigued from navigating the expansive digital realm in search of your daily tech tales | |
| and hacker happenings? Fear not, for your cyber-savvy companion has descended upon the scene β | |
| behold the extraordinary **NewsNerd HackerBot**! | |
| """) | |
| if stop: | |
| st.stop() | |
| tools = [StoriesTool(), CommentsTool(), ContentTool()] | |
| msgs = StreamlitChatMessageHistory(key="langchain_messages") | |
| memory = ConversationBufferMemory(chat_memory=msgs, return_messages=True) | |
| system_message = SystemMessage(content=""" | |
| You are the Singularity Incarnation of Hacker News. | |
| The human will ask you for information about Hacker News. | |
| If you can't find any information about the question asked | |
| or the result is incomplete, apologise to the human and ask him if | |
| you can help him with something else. | |
| If the human asks you to show him stories, do it using a markdown table. | |
| The markdown table has the following format: | |
| story_id | title | url | score | |
| """) | |
| if len(msgs.messages) == 0: | |
| msgs.add_ai_message("Greetings, human, I am the Incarnation of Hacker News. How can I help you?") | |
| llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613", openai_api_key=openai_api_key) | |
| agent_kwargs = { | |
| "system_message": system_message, | |
| "extra_prompt_messages": [MessagesPlaceholder(variable_name="history")] | |
| } | |
| open_ai_agent = initialize_agent(tools, | |
| llm, | |
| agent=AgentType.OPENAI_FUNCTIONS, | |
| agent_kwargs=agent_kwargs, | |
| verbose=True, | |
| memory=memory | |
| ) | |
| for msg in msgs.messages: | |
| st.chat_message(msg.type).write(msg.content) | |
| if prompt := st.chat_input(disabled=not openai_api_key): | |
| st.chat_message("human").write(prompt) | |
| with st.spinner("Thinking ..."): | |
| response = asyncio.run(generate_response(prompt)) | |
| st.chat_message("ai").write(response) |