| import subprocess |
| import time |
| import gradio as gr |
| import requests |
|
|
| subprocess.Popen(["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]) |
| time.sleep(3) |
|
|
| API_URL = "http://localhost:8000" |
| session_id = None |
| chat_history = [] |
|
|
| def start(): |
| global session_id, chat_history |
| try: |
| res = requests.post(f"{API_URL}/start_chat") |
| res.raise_for_status() |
| data = res.json() |
| session_id = data["session_id"] |
| scammer_msg = data["scammer"] |
| chat_history = [{"role": "assistant", "content": scammer_msg}] |
| return "", chat_history |
| except Exception as e: |
| return "", [{"role": "assistant", "content": f"❌ Gagal mulai percakapan: {str(e)}"}] |
|
|
| def respond(user_input): |
| global session_id, chat_history |
| try: |
| payload = {"session_id": session_id, "content": user_input} |
| res = requests.post(f"{API_URL}/chat", json=payload) |
| res.raise_for_status() |
| scammer_response = res.json()["scammer"] |
| chat_history.append({"role": "user", "content": user_input}) |
| chat_history.append({"role": "assistant", "content": scammer_response}) |
| return "", chat_history |
| except Exception as e: |
| chat_history.append({"role": "user", "content": user_input}) |
| chat_history.append({"role": "assistant", "content": f"❌ Error: {str(e)}"}) |
| return "", chat_history |
|
|
| with gr.Blocks() as demo: |
| gr.Markdown("## 🕵️ Edu-Scam Chatbot Simulator") |
| btn_start = gr.Button("Start Scam Simulation") |
| chatbox = gr.Chatbot(type='messages') |
| txt = gr.Textbox(placeholder="Type your reply here...", show_label=False) |
|
|
| btn_start.click(start, outputs=[txt, chatbox]) |
| txt.submit(respond, inputs=txt, outputs=[txt, chatbox]) |
|
|
| demo.launch(server_name="0.0.0.0", server_port=7860) |
|
|