import gradio as gr from chromadb_semantic_search_for_dataset import search_cases, chat_with_cases # Global variables to store current context current_cases_context = "" current_user_case = "" def search_and_store_cases(query): """Search for cases and store context for chat""" global current_cases_context, current_user_case if not query.strip(): return "कृपया केस खोज्नका लागि केही लेख्नुहोस्।", "" formatted_results, context, user_case = search_cases(query) current_cases_context = context current_user_case = user_case return formatted_results, "" def chat_function(message, history): """Main chat function that uses current case context""" global current_cases_context, current_user_case if not message.strip(): return history, "" # Generate response using current case context and user's case bot_response = chat_with_cases(message, current_cases_context, current_user_case) # Add to chat history history.append([message, bot_response]) return history, "" def clear_context(): """Clear the stored case context""" global current_cases_context, current_user_case current_cases_context = "" current_user_case = "" return "केस कन्टेक्स्ट सफा गरियो। अब तपाईं सामान्य च्याट गर्न सक्नुहुन्छ।", [], "" # Custom CSS css = """ .gradio-container { max-width: 1200px !important; margin: auto !important; } .main-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 20px; border-radius: 10px; text-align: center; margin-bottom: 20px; } .section-header { background: #f8f9fa; padding: 15px; border-radius: 8px; border-left: 4px solid #007bff; margin: 10px 0; } .chat-container { border: 2px solid #e9ecef; border-radius: 10px; padding: 10px; } .search-container { border: 2px solid #e9ecef; border-radius: 10px; padding: 10px; background: #f8f9fa; } """ # Create the main interface with gr.Blocks(css=css, title="नेपाली कानूनी सहायक - Legal RAG System") as demo: # Header gr.HTML("""

⚖️ नेपाली कानूनी सहायक

Nepali Legal Assistant with RAG

आफ्नो मुद्दा खोज्नुहोस् र कानूनी सहायताका लागि च्याट गर्नुहोस्

Search for your case and chat for legal assistance

""") with gr.Row(): # Left Column - Case Search with gr.Column(scale=1): gr.HTML('

🔍 केस खोज्नुहोस् (Case Search)

') with gr.Group(): search_input = gr.Textbox( label="आफ्नो मुद्दाको विवरण लेख्नुहोस्", placeholder="जस्तै: सम्पत्ति विवाद, हत्या मुद्दा, आर्थिक कसूर...", lines=3 ) with gr.Row(): search_btn = gr.Button("🔍 खोज्नुहोस्", variant="primary", scale=2) clear_btn = gr.Button("🗑️ सफा गर्नुहोस्", variant="secondary", scale=1) search_results = gr.Textbox( label="समान मुद्दाहरू (Similar Cases)", lines=12, max_lines=15, interactive=False ) gr.Examples( examples=[ ["जमीन जग्गाको विवाद"], ["घरेलु हिंसा"], ["ऋण असुली"], ["हत्या मुद्दा"], ["आर्थिक ठगी"], ["चोरी मुद्दा"], ["बलात्कार मुद्दा"], ["भ्रष्टाचार मुद्दा"] ], inputs=search_input, label="उदाहरणहरू (Examples)" ) # Right Column - Chat Interface with gr.Column(scale=1): gr.HTML('

💬 कानूनी सहायता च्याट (Legal Chat)

') with gr.Group(): chatbot_ui = gr.Chatbot( label="च्याट", height=400, show_copy_button=True, bubble_full_width=False ) with gr.Row(): msg_input = gr.Textbox( placeholder="आफ्नो प्रश्न सोध्नुहोस्...", show_label=False, scale=4, lines=1 ) send_btn = gr.Button("📤 पठाउनुहोस्", scale=1, variant="primary") with gr.Row(): clear_chat_btn = gr.Button("🗑️ च्याट सफा गर्नुहोस्", variant="secondary", scale=1) clear_context_btn = gr.Button("🔄 कन्टेक्स्ट रिसेट गर्नुहोस्", variant="secondary", scale=1) context_status = gr.Textbox( label="स्थिति (Status)", value="सामान्य च्याट मोड - कुनै केस कन्टेक्स्ट छैन", interactive=False, lines=1 ) gr.Examples( examples=[ ["मेरो केसमा के फैसला हुन सक्छ?"], ["यी केसहरूसँग मेरो मुद्दाको समानता के छ?"], ["मेरो केसको भिन्नता के छ?"], ["यस्ता मुद्दामा कति समय लाग्छ?"], ["के प्रमाणहरू चाहिन्छ?"], ["मेरो केसमा जित्ने सम्भावना कति छ?"], ["यी फैसलाहरूबाट के सिक्न सकिन्छ?"], ["अदालती प्रक्रिया कस्तो हुन्छ?"] ], inputs=msg_input, label="च्याट उदाहरणहरू (Chat Examples)" ) # Information Section gr.HTML("""

📋 कसरी प्रयोग गर्ने (How to Use)

  1. केस खोज्नुहोस्: बाँया भागमा आफ्नो मुद्दाको विवरण लेखेर खोज्नुहोस्
  2. परिणाम हेर्नुहोस्: ५ वटा समान मुद्दाहरू देखाउनेछ
  3. च्याट गर्नुहोस्: दाँया भागमा ती मुद्दाहरूको बारेमा प्रश्न सोध्नुहोस्
  4. सामान्य च्याट: केस नखोजीकन पनि कानूनी प्रश्न सोध्न सक्नुहुन्छ

⚠️ चेतावनी: यो केवल जानकारीमूलक सहायता हो। वास्तविक कानूनी सल्लाहका लागि योग्य वकिलसँग सल्लाह लिनुहोस्।

""") # Event handlers search_btn.click( fn=search_and_store_cases, inputs=[search_input], outputs=[search_results, context_status] ).then( fn=lambda: "तपाईंको केस र समान केसहरूको कन्टेक्स्ट लोड भयो। अब तुलनाका लागि च्याट गर्न सक्नुहुन्छ।", outputs=[context_status] ) clear_btn.click( fn=lambda: ("", ""), outputs=[search_input, search_results] ) msg_input.submit( chat_function, inputs=[msg_input, chatbot_ui], outputs=[chatbot_ui, msg_input] ) send_btn.click( chat_function, inputs=[msg_input, chatbot_ui], outputs=[chatbot_ui, msg_input] ) clear_chat_btn.click( lambda: [], outputs=[chatbot_ui] ) clear_context_btn.click( clear_context, outputs=[context_status, chatbot_ui, msg_input] ) if __name__ == "__main__": demo.launch( server_name="0.0.0.0", server_port=7860, share=False )