File size: 3,186 Bytes
f73ac0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
86
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)

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.toggle("Code Interpreter", value=True)
    system_prompt = st.sidebar.text_input("System prompt for code interpreter", value = "Rule 1: If a user provides a code explain it line by line")
    useSystemPrompt = st.sidebar.toggle("Use System prompt", value=True)
    exportToReplIt = st.sidebar.toggle("Export to repl.it", value=False)
    showImages = st.sidebar.toggle("Show images", 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)

TITLE = "Ayush Dhawan's Codebot"
DESCRIPTION = """
Welcome to my coding chatbot! paste any code you want an explanation for!
"""


# Streamlit UI
st.title(TITLE)
st.write(DESCRIPTION)

# Prediction function
def predict(message):
    with st.status("Requesting πŸ¦”..."):
        st.write("Requesting API...")
        response = bard.get_answer(message if not (code_interpreter and useSystemPrompt) else message + " . "+system_prompt)
        st.write("Done...")
        
        st.write("Checking images...")
    if 'images' in response.keys() and showImages:
        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']:
        if exportToReplIt:
            with st.status("Exporting replit..."):
                fale = False
                try:
                    url = bard.export_replit(code=response['code'],program_lang=response['program_lang'])['url']
                except error:
                    fale=True
                    st.write('ERROR')
            if not fale:
                st.title('Export to repl.it')
                st.markdown(f'[link]({url})')
        if 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']})