File size: 2,908 Bytes
6038be0
2cba708
56681c6
 
2cba708
56681c6
2cba708
 
 
56681c6
2cba708
56681c6
 
2cba708
 
 
 
 
 
 
 
0f45e38
 
 
 
 
2cba708
 
 
 
 
56681c6
 
 
 
 
2cba708
 
 
56681c6
 
 
 
 
a3ac2d8
56681c6
23a5b76
56681c6
092c220
23a5b76
182e542
 
56681c6
2cba708
4fbaa37
 
 
 
2cba708
4fbaa37
2cba708
56681c6
 
2cba708
56681c6
 
 
 
182e542
 
0f45e38
bf63594
 
 
 
2cba708
aa81381
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
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"))
with st.sidebar:
    # Add a selector in the sidebar using the dictionary's keys
    selected_language_name = st.sidebar.selectbox("Select Language", list(GOOGLE_LANGUAGES_TO_CODES.keys()))
    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.status("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 each only one code snippet and only in that way that it would run in streamlit app, and but don't output anything if it requires some additional libraries.")
        st.write("Done...")
        
        st.write("Checking images...")
    for i in response['images']:
        st.image(i)
    
    return response

# Display chat messages from history on app rerun
if "messages" not in st.session_state:
    st.session_state.messages = []

for message in st.session_state.messages:
    with st.chat_message(message["role"], avatar=("πŸ§‘β€πŸ’»" if message["role"] == 'human' else '🌴')):
        st.markdown(message["content"])

# React to user input
if prompt := st.chat_input("Ask Palm 2 anything..."):
    st.chat_message("human", avatar="πŸ§‘β€πŸ’»").markdown(prompt)
    st.session_state.messages.append({"role": "human", "content": prompt})

    response = predict(prompt)
    with st.chat_message("assistant", avatar='🌴'):
        st.markdown(response['content'])
    
    if response['code'] and code_interpreter:
        try:
            exec(response['code'])
        except Exception as e:
            st.write(f"ERROR {e}...")
    
    # st.session_state.messages.append({"role": "assistant", "content": response['content']})