sathishaiuse's picture
Update app.py
2af4b15 verified
import streamlit as st
import json
from salesforce import get_context, create_note
from model import PreCallSummaryModel
from schema import PreCallSummary
st.set_page_config(page_title="Pre‑Call Summary Generator", layout="wide")
st.title("Pre‑Call Summary Generator (Salesforce → HF Space)")
with st.expander("Instructions", expanded=False):
st.markdown("""
1. Enter your Salesforce **Instance URL** (e.g., `https://xxx.my.salesforce.com`).
2. Provide a short‑lived **Access Token** (from a Connected App / OAuth flow).
3. Provide an **Account Id** (`001...`).
4. Click **Generate Summary**. Optionally save it as a **Note** in Salesforce.
**Security:** tokens are used only in memory for this session and are not logged.
""")
inst = st.text_input("Salesforce Instance URL", placeholder="https://yourDomain.my.salesforce.com")
token = st.text_input("Salesforce Access Token", type="password", placeholder="Paste a short‑lived token")
acct_id = st.text_input("Account Id", placeholder="001xxxxxxxxxxxx")
colA, colB, colC = st.columns([1,1,1])
with colA:
opp_n = st.number_input("Max Opportunities", min_value=0, max_value=20, value=5, step=1)
with colB:
case_n = st.number_input("Max Cases", min_value=0, max_value=20, value=5, step=1)
with colC:
task_n = st.number_input("Max Tasks", min_value=0, max_value=50, value=10, step=1)
push_back = st.checkbox("Write to Salesforce as Note after generation", value=False)
generate = st.button("Generate Summary", type="primary")
if generate:
if not inst or not token or not acct_id:
st.error("Please provide instance URL, access token, and account id.")
st.stop()
with st.spinner("Fetching Salesforce context..."):
try:
context = get_context(inst, token, acct_id, opp_n, case_n, task_n)
except Exception as e:
st.error(f"Salesforce API error: {e}")
st.stop()
st.subheader("Fetched Context (trimmed)")
st.json(context)
with st.spinner("Calling model..."):
model = PreCallSummaryModel()
try:
summary: PreCallSummary = model.generate(context)
except Exception as e:
st.error(f"Model error: {e}")
st.stop()
st.subheader("Pre‑Call Summary (JSON)")
st.json(json.loads(summary.model_dump_json()))
if push_back:
with st.spinner("Writing Note to Salesforce..."):
try:
note_id = create_note(inst, token, acct_id, "Pre‑Call Summary", summary.model_dump_json(indent=2))
st.success(f"Saved Note Id: {note_id}")
except Exception as e:
st.error(f"Failed to save Note: {e}")
st.download_button("Download JSON", data=summary.model_dump_json(indent=2),
file_name=f"precall_summary_{acct_id}.json", mime="application/json")