snsynth's picture
precompute at start
e4800a1
import mesop as me
from rag_app.chat_utils import State, _make_style_chat_bubble_wrapper, _ROLE_ASSISTANT, on_chat_input, _make_chat_bubble_style, \
on_click_submit_chat_msg, _STYLE_CHAT_BUBBLE_NAME, handle_pdf_upload
from rag_app.rag_2 import check_if_exists, precompute_index
_COLOR_BACKGROUND = me.theme_var("background")
_STYLE_APP_CONTAINER = me.Style(
background=_COLOR_BACKGROUND,
display="flex",
flex_direction="column",
height="100%",
margin=me.Margin.symmetric(vertical=0, horizontal="auto"),
width="min(1024px, 100%)",
box_shadow="0 3px 1px -2px #0003, 0 2px 2px #00000024, 0 1px 5px #0000001f",
padding=me.Padding(top=20, left=20, right=20),
)
@me.page(security_policy=me.SecurityPolicy(
allowed_iframe_parents=["https://huggingface.co"]
))
def app():
if not check_if_exists():
print("precomputing the index")
precompute_index()
state = me.state(State)
with me.box(style=_STYLE_APP_CONTAINER):
with me.box(style=me.Style(
width="min(680%, 100%)",
margin=me.Margin.symmetric(vertical=36, horizontal="auto"),
flex_grow=1,
overflow_y="auto",
padding=me.Padding(left=20, right=20)
)):
me.text("""
FinanceGPT - Powered by open source language models capable of document QnA on Annual
Investor Reports of top companies.
""",
style=me.Style(font_size=20, margin=me.Margin(bottom=24), text_align="center")
)
me.text("ℹ️ Upload annual reports to start asking questions.",
style=me.Style(font_size=12, margin=me.Margin(bottom=24), text_align="center")
)
for index, msg in enumerate(state.output):
with me.box(style=_make_style_chat_bubble_wrapper(msg.role), key=f"msg-{index}"):
if msg.role == _ROLE_ASSISTANT:
me.text("assistant", style=_STYLE_CHAT_BUBBLE_NAME)
with me.box(style=_make_chat_bubble_style(msg.role)):
me.markdown(msg.content)
if state.in_progress:
me.progress_spinner()
with me.box(key="scroll-to", style=me.Style(height=250)):
pass
with me.box(style=me.Style(
padding=me.Padding(top=30, left=20, right=20),
display="flex",
flex_direction="row"
)):
with me.content_uploader(
accepted_file_types=["application/pdf"],
on_upload=handle_pdf_upload,
type="icon",
style=me.Style(font_weight="bold", margin=me.Margin(right=8)),
):
me.icon("attach_file")
with me.box(style=me.Style(flex_grow=1)):
me.input(
label="Enter your prompt",
key=f"input-{len(state.output)}",
on_input=on_chat_input,
on_enter=on_click_submit_chat_msg,
style=me.Style(width="100%")
)
with me.content_button(
color="primary",
type="flat",
disabled=state.in_progress,
on_click=on_click_submit_chat_msg,
style=me.Style(margin=me.Margin(top=8, left=8))
):
me.icon("send" if not state.in_progress else "pending")