physics-bot / app.py
ofermend's picture
Update app.py
06e14df verified
raw
history blame
3.07 kB
import sys
import toml
from omegaconf import OmegaConf
from query import VectaraQuery
import os
import streamlit as st
from PIL import Image
from functools import partial
def set_query(q: str):
st.session_state['query'] = q
def launch_bot():
def get_answer(question):
response = vq.submit_query(question)
return response
corpus_ids = list(eval(os.environ['corpus_ids']))
questions = list(eval(os.environ['examples']))
cfg = OmegaConf.create({
'customer_id': os.environ['customer_id'],
'corpus_ids': corpus_ids,
'api_key': os.environ['api_key'],
'title': os.environ['title'],
'description': os.environ['description'],
'examples': questions,
'source_data_desc': os.environ['source_data_desc']
})
vq = VectaraQuery(cfg.api_key, cfg.customer_id, cfg.corpus_ids)
st.set_page_config(page_title=cfg.title, layout="wide")
# left side content
with st.sidebar:
image = Image.open('Vectara-logo.png')
st.markdown(f"## Welcome to {cfg.title}\n\n"
f"With this demo uses Retieval Augmented Generation to ask questions about {cfg.source_data_desc}\n\n")
st.markdown("---")
st.markdown(
"## How this works?\n"
"This app was built with [Vectara](https://vectara.com).\n"
"Vectara's [Indexing API](https://docs.vectara.com/docs/api-reference/indexing-apis/indexing) was used to ingest the data into a Vectara corpus (or index).\n\n"
"This app uses Vectara API to query the corpus and present the results to you, answering your question.\n\n"
)
st.markdown("---")
st.image(image, width=250)
st.markdown(f"<center> <h2> Vectara demo app: {cfg.title} </h2> </center>", unsafe_allow_html=True)
st.markdown(f"<center> <h4> {cfg.description} <h4> </center>", unsafe_allow_html=True)
# Setup a split column layout
main_col, questions_col = st.columns([4, 2], gap="medium")
with main_col:
cols = st.columns([1, 8], gap="small")
cols[0].markdown("""<h5>Search</h5>""", unsafe_allow_html=True)
cols[1].text_input(label="search", key='query', max_chars=256, label_visibility='collapsed', help="Enter your question here")
st.markdown("<h5>Response</h5>", unsafe_allow_html=True)
response_text = st.empty()
response_text.text_area(f" ", placeholder="The answer will appear here.", disabled=True,
key="response", height=1, label_visibility='collapsed')
with questions_col:
st.markdown("<h5 style='text-align:center; color: red'> Sample questions </h5>", unsafe_allow_html=True)
for q in list(cfg.examples):
st.button(q, on_click=partial(set_query, q), use_container_width=True)
# run the main flow
if st.session_state.get('query'):
query = st.session_state['query']
response = get_answer(query)
response_text.markdown(response)
if __name__ == "__main__":
launch_bot()