Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Indian Legal AI Assistant using Hugging Face LLM | |
| This app provides a chat interface for querying Indian laws using the | |
| invincibleambuj/Ambuj-Tripathi-Indian-Legal-Llama-GGUF model. | |
| """ | |
| import os | |
| import gradio as gr | |
| from huggingface_hub import hf_hub_download | |
| from llama_cpp import Llama | |
| # Model configuration | |
| MODEL_REPO = "invincibleambuj/Ambuj-Tripathi-Indian-Legal-Llama-GGUF" | |
| MODEL_FILE = "ambuj-tripathi-indian-legal-llama.Q4_K_M.gguf" | |
| # Global model instance | |
| llm = None | |
| def load_model(): | |
| """Load the GGUF model from Hugging Face Hub""" | |
| global llm | |
| if llm is None: | |
| print(f"Downloading model from {MODEL_REPO}...") | |
| model_path = hf_hub_download( | |
| repo_id=MODEL_REPO, | |
| filename=MODEL_FILE, | |
| cache_dir="./models" | |
| ) | |
| print(f"Model downloaded to: {model_path}") | |
| print("Loading model into memory...") | |
| llm = Llama( | |
| model_path=model_path, | |
| n_ctx=2048, # Context window | |
| n_threads=4, # CPU threads | |
| n_gpu_layers=0, # Set to 0 for CPU-only, increase if GPU available | |
| ) | |
| print("Model loaded successfully!") | |
| return llm | |
| def chat_with_legal_ai(message, history): | |
| """ | |
| Process user message and generate response using the Indian Legal LLM | |
| Args: | |
| message: User's input message | |
| history: Chat history (list of [user_msg, bot_msg] pairs) | |
| Returns: | |
| Response from the LLM | |
| """ | |
| try: | |
| model = load_model() | |
| # Build conversation context | |
| conversation = "" | |
| if history: | |
| for user_msg, bot_msg in history: | |
| conversation += f"User: {user_msg}\nAssistant: {bot_msg}\n" | |
| # Add current message | |
| prompt = f"""You are an expert Indian legal AI assistant. You have deep knowledge of Indian laws, acts, and legal procedures. Provide accurate, helpful, and concise answers to legal queries. | |
| {conversation}User: {message} | |
| Assistant:""" | |
| # Generate response | |
| response = model( | |
| prompt, | |
| max_tokens=512, | |
| temperature=0.7, | |
| top_p=0.95, | |
| echo=False, | |
| stop=["User:", "\n\n\n"] | |
| ) | |
| return response['choices'][0]['text'].strip() | |
| except Exception as e: | |
| return f"Error: {str(e)}\n\nPlease ensure the model is properly downloaded and configured." | |
| def create_gradio_interface(): | |
| """Create and return the Gradio chat interface""" | |
| # Custom CSS for better appearance | |
| custom_css = """ | |
| .container { | |
| max-width: 900px; | |
| margin: auto; | |
| padding: 20px; | |
| } | |
| #title { | |
| text-align: center; | |
| color: #1e3a8a; | |
| } | |
| """ | |
| with gr.Blocks(css=custom_css, title="Indian Legal AI Assistant") as demo: | |
| gr.Markdown( | |
| """ | |
| # 🏛️ Indian Legal AI Assistant | |
| Ask questions about Indian laws, acts, and legal procedures. This AI assistant is powered by | |
| the **Ambuj Tripathi Indian Legal Llama** model, trained on Indian legal documents. | |
| **Examples:** | |
| - What is the Indian Penal Code? | |
| - Explain Section 377 of IPC | |
| - What are the grounds for divorce under Hindu Marriage Act? | |
| - Explain the Right to Information Act | |
| """, | |
| elem_id="title" | |
| ) | |
| chatbot = gr.Chatbot( | |
| height=500, | |
| label="Chat History", | |
| show_label=True, | |
| elem_id="chatbot" | |
| ) | |
| with gr.Row(): | |
| msg = gr.Textbox( | |
| label="Your Question", | |
| placeholder="Ask about Indian laws...", | |
| lines=2, | |
| scale=4 | |
| ) | |
| submit = gr.Button("Send", variant="primary", scale=1) | |
| with gr.Row(): | |
| clear = gr.Button("Clear Chat") | |
| gr.Markdown( | |
| """ | |
| --- | |
| **Disclaimer:** This AI assistant provides general information only and should not be considered | |
| legal advice. For specific legal matters, please consult a qualified legal professional. | |
| **Model:** [invincibleambuj/Ambuj-Tripathi-Indian-Legal-Llama-GGUF](https://huggingface.co/invincibleambuj/Ambuj-Tripathi-Indian-Legal-Llama-GGUF) | |
| """ | |
| ) | |
| # Set up event handlers | |
| msg.submit(chat_with_legal_ai, [msg, chatbot], [chatbot]) | |
| submit.click(chat_with_legal_ai, [msg, chatbot], [chatbot]) | |
| msg.submit(lambda: "", None, [msg]) | |
| submit.click(lambda: "", None, [msg]) | |
| clear.click(lambda: None, None, [chatbot]) | |
| return demo | |
| if __name__ == "__main__": | |
| print("Starting Indian Legal AI Assistant...") | |
| print(f"Using model: {MODEL_REPO}/{MODEL_FILE}") | |
| # Pre-load the model to avoid delays on first query | |
| print("\nPre-loading model (this may take a few minutes on first run)...") | |
| load_model() | |
| # Launch the Gradio interface | |
| demo = create_gradio_interface() | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| share=False, | |
| show_error=True | |
| ) |