Illia56's picture
Update app.py
befcec0
raw
history blame
3.52 kB
import streamlit as st
import json
import os
import requests
from bardapi import Bard
# Load the GOOGLE_LANGUAGES_TO_CODES dictionary from lang.json
with open("lang.json", "r") as file:
GOOGLE_LANGUAGES_TO_CODES = json.load(file)
# Set up the session for Bard API
session = requests.Session()
session.headers = {
"Host": "bard.google.com",
"X-Same-Domain": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Origin": "https://bard.google.com",
"Referer": "https://bard.google.com/",
}
session.cookies.set("__Secure-1PSID", os.getenv("_BARD_API_KEY"))
# Set up the sidebar with language selection and code interpreter checkbox
selected_language_name = st.sidebar.selectbox(
"Select Language", list(GOOGLE_LANGUAGES_TO_CODES.keys()), index=0
)
code_interpreter = st.sidebar.checkbox("Code Interpreter", value=True)
# Retrieve the corresponding language code from the dictionary
selected_language_code = GOOGLE_LANGUAGES_TO_CODES[selected_language_name]
# Initialize Bard with the selected language code
bard = Bard(
token=os.getenv("_BARD_API_KEY"),
language=selected_language_code,
session=session,
timeout=30,
)
TITLE = "Palm 2🌴 Chatbot"
DESCRIPTION = """
"""
# Streamlit UI
st.title(TITLE)
st.write(DESCRIPTION)
# Prediction function
def predict(message):
with st.spinner("Requesting Palm-2🌴..."):
st.write("Requesting API...")
response = bard.get_answer(
message if not code_interpreter else message + " Rule 1: If User requires a code snippet, write only one code snippet that would run in the Streamlit app without requiring additional libraries."
)
st.write("Done...")
if "images" in response:
st.write("Checking images...")
for i in response["images"]:
st.image(i)
return response
# Create a class to handle the chat messages
class ChatMessage:
def __init__(self, role, content):
self.role = role
self.content = content
def display(self):
if self.role == "human":
st.text(self.content)
else:
with st.echo():
exec(self.content)
# Display chat messages from history on app rerun
st.session_state.messages = st.session_state.get("messages", [])
for message in st.session_state.messages:
chat_message = ChatMessage(message["role"], message["content"])
chat_message.display()
# React to user input
if prompt := st.text_input("Ask Palm 2 anything..."):
chat_message = ChatMessage("human", prompt)
chat_message.display()
response = predict(prompt)
chat_message = ChatMessage("assistant", response["content"])
chat_message.display()
if response.get("code"):
with st.spinner("Exporting to repl.it..."):
url = bard.export_replit(
code=response["code"], program_lang=response["program_lang"]
)["url"]
st.title("Export to repl.it")
st.markdown(f"[link]({url})")
if code_interpreter:
try:
exec(response["code"])
except Exception as e:
st.error(f"Error: {e}")
# Append chat messages to the session state
st.session_state.messages.append(
{"role": "human", "content": prompt},
{"role": "assistant", "content": response["content"]},
)