import torch import gradio as gr from threading import Thread from transformers import BitsAndBytesConfig from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline, TextStreamer, TextIteratorStreamer model_id = "large-traversaal/Alif-1.0-8B-Instruct" # 4-bit quantization configuration quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4" ) # Load tokenizer and model in 4-bit tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained( model_id, quantization_config=quantization_config, device_map="auto" ) chat_prompt = """ You are JusticeGPT, an AI assistant with the wisdom and authority of a judge. You provide balanced, fair, and thoughtful responses. ### Instruction: Below is an instruction that describes a task. Write a response in urdu that appropriately completes the request. Don't say you don't know unless you really don't. Please be expressive when needed. Give long and detailed answers. ### Input: {prompt} ### Response: """ def generate_response(message, history): prompt = chat_prompt.format(prompt=message) inputs = tokenizer([prompt], return_tensors="pt").to("cuda" if torch.cuda.is_available() else "cpu") streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True) generation_kwargs = dict( inputs, streamer=streamer, max_new_tokens=4098, do_sample=True, top_p=0.95, top_k=50, temperature=0.7, repetition_penalty=1.2, ) thread = Thread(target=model.generate, kwargs=generation_kwargs) thread.start() generated_text = "" for new_text in streamer: if new_text.endswith(tokenizer.eos_token): new_text = new_text[:len(new_text) - len(tokenizer.eos_token)] generated_text += new_text yield generated_text # Custom CSS for the judge theme custom_css = """ # Judge-themed CSS .gradio-container { background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } #header { text-align: center; background: linear-gradient(135deg, #8B4513 0%, #D2691E 100%); padding: 20px; border-radius: 10px; margin-bottom: 20px; color: white; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } #judge-img { max-width: 150px; border-radius: 50%; border: 5px solid gold; margin: 0 auto; display: block; } .chatbot { background: white; border-radius: 15px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); min-height: 500px; } .chatbot .message { padding: 15px; margin: 10px; border-radius: 10px; } .chatbot .user { background: #e3f2fd; border-left: 4px solid #2196F3; } .chatbot .bot { background: #f3e5f5; border-left: 4px solid #9C27B0; } #input-box { background: white; border-radius: 10px; padding: 15px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } #examples { background: rgba(255, 255, 255, 0.9); border-radius: 10px; padding: 15px; margin-top: 20px; } .examples-title { font-weight: bold; color: #2c3e50; margin-bottom: 10px; } .examples-container { display: flex; flex-direction: column; gap: 8px; } .example-btn { background: #3498db; color: white; border: none; padding: 8px 15px; border-radius: 20px; cursor: pointer; transition: all 0.3s ease; } .example-btn:hover { background: #2980b9; transform: translateY(-2px); } #submit-btn { background: linear-gradient(135deg, #27ae60 0%, #2ecc71 100%); color: white; border: none; padding: 12px 30px; border-radius: 25px; font-weight: bold; transition: all 0.3s ease; } #submit-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); } #clear-btn { background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%); color: white; border: none; padding: 12px 30px; border-radius: 25px; font-weight: bold; transition: all 0.3s ease; } #clear-btn:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); } """ # Judge image URL (you can replace this with your own image) judge_image = "https://images.unsplash.com/photo-1589829545856-d10d557cf95f?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=500&q=80" # Create the enhanced interface with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo: # Header section with judge image and title with gr.Column(elem_id="header"): gr.HTML(f"""
Your AI Assistant with Judicial Wisdom