|
|
import streamlit as st |
|
|
from Embeddings import GetEmbeddings |
|
|
import json |
|
|
|
|
|
|
|
|
|
|
|
@st.cache_resource |
|
|
def load_agent(): |
|
|
agent = GetEmbeddings(config_path="config.json") |
|
|
agent.run() |
|
|
agent.load_summarizer() |
|
|
encoder = agent.load_encoder() |
|
|
return agent, encoder |
|
|
|
|
|
|
|
|
def main(): |
|
|
st.set_page_config(page_title="π Financial QA Agent", layout="wide") |
|
|
|
|
|
st.title("π Financial QA Agent") |
|
|
st.markdown( |
|
|
""" |
|
|
Ask questions about financial reports. |
|
|
The system retrieves relevant sections from company reports and summarizes them into concise answers. |
|
|
""" |
|
|
) |
|
|
|
|
|
|
|
|
st.sidebar.header("βοΈ Settings") |
|
|
show_debug = st.sidebar.checkbox("Show retrieved chunks", value=False) |
|
|
|
|
|
|
|
|
agent, encoder = load_agent() |
|
|
|
|
|
|
|
|
query = st.text_area("Enter your financial question:", height=100) |
|
|
|
|
|
if st.button("Get Answer"): |
|
|
if query.strip() == "": |
|
|
st.warning("β οΈ Please enter a query.") |
|
|
else: |
|
|
with st.spinner("π Searching and generating answer..."): |
|
|
answer = agent.answer_query(query, top_k=3) |
|
|
|
|
|
st.subheader("β
Answer") |
|
|
st.write(answer) |
|
|
|
|
|
if show_debug: |
|
|
st.subheader("π Retrieved Chunks (Debug)") |
|
|
|
|
|
q_emb = encoder.encode(query, convert_to_numpy=True).reshape(1, -1) |
|
|
import faiss |
|
|
faiss.normalize_L2(q_emb) |
|
|
scores, idxs = agent.index.search(q_emb, k=3) |
|
|
for score, idx in zip(scores[0], idxs[0]): |
|
|
st.markdown(f"**Score:** {score:.4f}") |
|
|
st.write(agent.metadata[idx]["text"][:500] + "...") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|