starwars-chat / app.py
ofermend's picture
Duplicate from ofermend/Ask-Langchain
7f46a81
raw
history blame
No virus
3.16 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 [Grounded Generation](https://vectara.com/grounded-generation-making-generative-ai-safe-trustworthy-more-relevant/) 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()