"""
RegRadar - AI Regulatory Compliance Assistant
This application monitors and analyzes regulatory updates, providing
compliance guidance for various industries and regions.
New Feature: Improved Regulatory Query Detection
- Only new regulatory/compliance/update questions are treated as regulatory.
- Follow-up or general questions are handled as general chat, not as regulatory queries.
"""
import warnings
import gradio as gr
from agents.ui_handler import UIHandler
from config.settings import AVATAR_IMAGES
warnings.filterwarnings("ignore", category=DeprecationWarning)
def create_demo():
ui_handler = UIHandler() # New user for each session
with gr.Blocks(
title="RegRadar - AI Regulatory Compliance Assistant",
theme=gr.themes.Soft(),
css="""
.tool-status {
background-color: #f0f4f8;
padding: 10px;
border-radius: 5px;
margin: 10px 0;
}
""",
) as demo:
# Header
gr.HTML("""
🛡️ RegRadar
AI-powered regulatory compliance assistant that monitors global regulations
""")
# Main chat interface
chatbot = gr.Chatbot(
height=400,
type="messages",
avatar_images=AVATAR_IMAGES,
show_copy_button=True,
)
with gr.Row(equal_height=True):
msg = gr.Textbox(
placeholder="Ask about regulatory updates, compliance requirements, or any industry regulations...",
show_label=False,
scale=18,
autofocus=True,
)
submit = gr.Button("Send", variant="primary", scale=1, min_width=60)
stop = gr.Button("Stop", variant="stop", scale=1, min_width=60)
clear = gr.Button("Clear", scale=1, min_width=60)
# Add user_id_state for session
user_id_state = gr.State()
# Example queries
example_queries = [
"Show me the latest SEC regulations for fintech",
"What are the new data privacy rules in the EU?",
"Any updates on ESG compliance for energy companies?",
"Scan for healthcare regulations in the US",
"What are the global trends in AI regulation?",
]
gr.Examples(examples=example_queries, inputs=msg, label="Example Queries")
# Tool information panel
with gr.Accordion("🛠️ Available Tools", open=False):
gr.Markdown("""
**🧠 Query Type Detection**
- Now distinguishes between new regulatory/compliance/update questions and follow-up or general questions.
- Only new regulatory questions trigger compliance workflows; follow-ups and general queries are handled as general chat.
- Automatically detects if your message is a regulatory compliance query or a general question
- Selects the appropriate tools and response style based on your intent
**📩 Information Extraction**
- Extracts key details (industry, region, keywords, and report type) from your command
- Determines if you want a quick answer, summary, or full report, and adapts the response accordingly
- Shows the detected report type in the parameter extraction step
**🔍 Regulatory Web Crawler**
- Crawls official regulatory websites (SEC, FDA, FTC, etc.)
- Searches for recent updates and compliance changes
- Focuses on last 30 days of content
**🌐 Regulatory Search Engine**
- Searches across multiple sources for regulatory updates
- Finds industry-specific compliance information
- Aggregates results from various regulatory bodies
**💾 Memory System**
- Remembers past queries and responses
- Learns from your compliance interests
- Provides context from previous interactions
- Each session creates a new user for personalization
**🤖 AI Analysis Engine**
- Analyzes and summarizes regulatory findings
- Generates actionable compliance recommendations
- Creates executive summaries and action items
""")
# Event handlers
submit_event = msg.submit(
ui_handler.streaming_chatbot,
[msg, chatbot, user_id_state],
[chatbot, msg, msg, user_id_state],
)
click_event = submit.click(
ui_handler.streaming_chatbot,
[msg, chatbot, user_id_state],
[chatbot, msg, msg, user_id_state],
)
stop.click(None, cancels=[submit_event, click_event])
clear.click(
ui_handler.delayed_clear,
inputs=[user_id_state],
outputs=[chatbot, msg, msg, user_id_state],
)
# Footer
gr.HTML("""
RegRadar monitors regulatory updates from the SEC, EU Commission, and other leading global authorities.
All analyses are AI-generated. Please verify findings with official regulatory sources.
""")
return demo
def main():
"""Initialize and launch the RegRadar application"""
demo = create_demo()
demo.launch()
if __name__ == "__main__":
main()