Spaces:
No application file
No application file
File size: 2,992 Bytes
66c0d0c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
import asyncio
import os
import httpx
import streamlit as st
from dotenv import load_dotenv
APP_TITLE = "DAPA"
APP_ICON = "🛡️"
# Load environment variables
load_dotenv()
BACKEND_URL = os.getenv("BACKEND_URL")
CHAT_API = BACKEND_URL + "/chat"
async def get_response(user_message: str, thread_id: str | None = None) -> dict:
payload = {"user_message": user_message, "thread_id": thread_id}
async with httpx.AsyncClient(timeout=10.0) as client:
try:
response = await client.post(CHAT_API, json=payload)
response.raise_for_status()
return response.json()
except httpx.HTTPError as e:
return {"error": f"Error connecting to backend: {str(e)}"}
async def main():
st.set_page_config(page_title=APP_TITLE, page_icon=APP_ICON)
if "thread_id" not in st.session_state:
st.session_state.thread_id = None
if "messages" not in st.session_state:
st.session_state.messages = []
st.title(f"{APP_ICON} DAPA AI Assistant")
st.write(
"This bot helps you identify or report phone numbers involved in financial fraud or cyber scams."
"Please describe your incident below."
)
for message in st.session_state.messages:
responder_type = message["responder"]
if responder_type == "tool":
st.chat_message("tool", avatar="🛡️").write(message["content"])
else:
st.chat_message(responder_type).write(message["content"])
# User input
if user_input := st.chat_input("Type your message here..."):
st.session_state.messages.append({"responder": "human", "content": user_input})
st.chat_message("human").write(user_input)
response = await get_response(user_input, st.session_state.thread_id)
if "error" in response:
st.error(response["error"])
else:
response_message = response["response_message"]
responder = response["responder"]
st.session_state.thread_id = response["thread_id"]
# Append the response to session state
st.session_state.messages.append(
{"responder": responder, "content": response_message}
)
if responder == "tool":
st.chat_message("tool", avatar="🛡️").write(response_message)
else:
st.chat_message(responder).write(response_message)
with st.sidebar:
st.header(f"{APP_ICON} {APP_TITLE}")
st.write("DAPA chatbot for secure reporting of scams.")
# Privacy Section
with st.expander("🔒 Privacy"):
st.write(
"Query and response in this app are anonymously recorded and saved to LangSmith for product evaluation and improvement purposes."
)
st.markdown(
"Made with ❤️ by [Raushan](https://www.linkedin.com/in/raushan-in/) in Trier"
)
if __name__ == "__main__":
asyncio.run(main())
|