GPTBase / app.py
gptbase's picture
Update app.py
21653ff
raw
history blame contribute delete
No virus
3.91 kB
import requests
import streamlit as st
import json
from streamlit_chat import message
from utils import upload_file
st.title("GPTBase")
def clear_submit():
st.session_state["submit"] = False
def set_api_key(api_key: str):
st.session_state["API_KEY"] = api_key
def set_ai_id(ai_id: str):
st.session_state["ai_id"] = ai_id
# Sidebar
with st.sidebar:
user_secret = st.text_input(
"API Key",
type="password",
placeholder="Paste your API key here (ak-...)",
help="You can get your API key from https://gptbase.ai/api-keys.",
value=st.session_state.get("API_KEY", ""),
)
if user_secret:
set_api_key(user_secret)
user_ai_id = st.text_input(
"AI Id",
placeholder="Paste your AI Id here",
value=st.session_state.get("ai_id", ""),
)
if user_ai_id:
set_ai_id(user_ai_id)
uploaded_file = st.file_uploader(
"Upload a pdf, docx, or txt file",
type=["pdf", "docx", "txt"],
help="Scanned documents are not supported yet!",
on_change=clear_submit,
)
api_key = st.session_state.get("API_KEY")
ai_id = st.session_state.get("ai_id")
if not api_key or not ai_id:
st.warning("Please enter your API key and AI Id to upload a file.")
if uploaded_file is not None and "API_KEY" in st.session_state and "ai_id" in st.session_state:
res = upload_file(uploaded_file, api_key, ai_id)
if not res:
st.text("Upload failed, please try again")
# if not st.session_state.get("is_upload"):
# file = {"file": uploaded_file}
# url = f'https://mygpt.felo.me/api/v1/ais/{ai_id}/files'
# headers = {"Authorization": f"Bearer {api_key}"}
# try:
# response = requests.post(url, headers=headers, files=file)
# # print("upload")
# except requests.exceptions.HTTPError as err:
# st.text("Upload failed, please try again")
# st.session_state['is_upload'] = True
tab1, tab2 = st.tabs(["Introduce", "Ask AI"])
with tab1:
st.markdown("### Use steps")
st.write('1.Please fill in your API Key and AI Id.')
st.write('2.Upload the file you want to get the answer.')
st.write('3.You can ask questions about all the files you have uploaded.')
st.markdown("""---""")
st.write('If you have any questions or suggestions, please visit: https://twitter.com/GptBase')
with tab2:
if not api_key or not ai_id:
st.write('Please fill in your API Key and AI Id.')
st.header("Ask AI some questions about the file you uploaded:")
def get_text():
input_text = st.text_area("You:", on_change=clear_submit)
return input_text
user_input = get_text()
button = st.button("Submit")
if button or st.session_state.get("submit"):
if api_key and ai_id and user_input:
st.session_state["submit"] = True
question_url = f'https://gptbase.ai/api/v1/question/{ai_id}'
headers = {"Authorization": f"Bearer {api_key}"}
data = {"question": user_input}
# response = requests.post(question_url, headers=headers, data=json.dumps(data))
try:
response = requests.post(question_url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
result = response.json()
message(result['answer'])
else:
print(f"Failed to ask, please try again.")
response.raise_for_status() # Raises an HTTPError if the response contains an error status code.
except requests.exceptions.HTTPError as err:
print(f"Failed to ask, please try again.:{err}")
except requests.exceptions.RequestException as e:
print(e)