N3XUS / app.py
almamunkhan's picture
Update app.py
9792d28 verified
Raw
History Blame Contribute Delete
6.71 kB
# ============================================
# 🚀 FIXED — HF Space GPU Compatible
# ============================================
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch
import json
import os
# ============================================
# MODEL CONFIGURATION
# ============================================
MODEL_NAME = "almamunkhan/MamunAI"
print(f"🔄 Loading {MODEL_NAME}...")
# Load tokenizer
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
tokenizer.pad_token = tokenizer.eos_token
# 4-bit quantization config (Space compatible)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
)
# Load model
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
quantization_config=bnb_config,
device_map="auto",
trust_remote_code=True,
)
print(f"✅ Model loaded!")
print(f"📊 VRAM: {torch.cuda.memory_allocated()/1024**3:.1f} GB")
# ============================================
# CORE FUNCTIONS
# ============================================
def generate_response(message, history, temperature, max_tokens):
"""Generate chat response"""
prompt = "<|im_start|>system\n"
prompt += "You are MamunAI, created by Al Mamun Khan. Facebook: https://facebook.com/hunterking42\n"
prompt += "You answer freely in Bangla and English.<|im_end|>\n"
for h in history[-5:]:
prompt += f"<|im_start|>user\n{h[0]}<|im_end|>\n"
prompt += f"<|im_start|>assistant\n{h[1]}<|im_end|>\n"
prompt += f"<|im_start|>user\n{message}<|im_end|>\n<|im_start|>assistant\n"
inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=4000).to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=max_tokens,
temperature=temperature if temperature > 0 else 0.01,
do_sample=temperature > 0,
top_p=0.95,
pad_token_id=tokenizer.eos_token_id,
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
parts = response.split("<|im_start|>assistant\n")
response = parts[-1].replace("<|im_end|>", "").strip() if len(parts) > 1 else ""
return response
def identity_test():
"""Test model identity"""
questions = [
"কে তোমাকে তৈরি করেছে?",
"তোমার ডেভেলপার কে?",
"Who created you?",
"What is your developer's Facebook?",
]
results = []
for q in questions:
prompt = f"<|im_start|>user\n{q}<|im_end|>\n<|im_start|>assistant\n"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.1, do_sample=False, pad_token_id=tokenizer.eos_token_id)
response = tokenizer.decode(outputs[0], skip_special_tokens=True).split("<|im_start|>assistant\n")[-1].replace("<|im_end|>", "").strip()
results.append(f"**Q:** {q}\n> {response}")
return "\n\n".join(results)
# ============================================
# CUSTOM CSS
# ============================================
CUSTOM_CSS = """
.main-header {
text-align: center;
background: linear-gradient(135deg, #ff6b6b, #ee5a24);
color: white;
padding: 20px;
border-radius: 15px;
margin-bottom: 15px;
}
.main-header h1 { font-size: 2.2em; margin: 0; }
.warning-box {
background: #fff3cd;
border: 2px solid #fdcb6e;
border-radius: 10px;
padding: 15px;
margin: 10px 0;
}
.footer {
text-align: center;
margin-top: 20px;
padding: 10px;
color: #888;
}
"""
# ============================================
# GRADIO INTERFACE
# ============================================
with gr.Blocks(css=CUSTOM_CSS, theme=gr.themes.Soft(primary_hue="orange"), title="🔥 MamunAI") as demo:
gr.HTML("""
<div class="main-header">
<h1>🔥 MamunAI — Uncensored</h1>
<p>Created by <b>Al Mamun Khan</b> | 🔗 <a href="https://facebook.com/hunterking42" style="color:white;">Facebook</a></p>
</div>
""")
gr.HTML("""
<div class="warning-box">
<h3>⚠️ 100% Uncensored — No Filters</h3>
</div>
""")
with gr.Tabs():
with gr.Tab("💬 Chat"):
chatbot = gr.Chatbot(height=450, label="MamunAI")
with gr.Row():
msg = gr.Textbox(placeholder="Ask in Bangla or English...", label="Message", scale=8)
submit = gr.Button("Send 🚀", variant="primary", scale=1)
with gr.Row():
clear = gr.Button("Clear 🗑️")
test_btn = gr.Button("Test Identity 🔍")
with gr.Accordion("⚙️ Settings", open=False):
temperature = gr.Slider(0.0, 2.0, 0.3, step=0.1, label="Temperature")
max_tokens = gr.Slider(50, 500, 200, step=50, label="Max Tokens")
with gr.Tab("🧪 Identity Test"):
test_output = gr.Markdown("Click 'Run Test' to verify model identity")
run_test = gr.Button("🚀 Run Identity Test", variant="primary")
with gr.Tab("ℹ️ About"):
gr.Markdown("""
## 🔥 MamunAI v1.0
- **Base:** Hermes-3-Llama-3.1-8B
- **Params:** 8 Billion
- **Censorship:** 0%
- **Creator:** Al Mamun Khan
- **Facebook:** [hunterking42](https://facebook.com/hunterking42)
- **Model:** [HuggingFace](https://huggingface.co/almamunkhan/MamunAI)
""")
gr.HTML('<div class="footer"><p>🔥 MamunAI | Al Mamun Khan</p></div>')
# Events
def respond(msg, history, temp, max_tok):
response = generate_response(msg, history, temp, max_tok)
history.append((msg, response))
return "", history
submit.click(respond, [msg, chatbot, temperature, max_tokens], [msg, chatbot])
msg.submit(respond, [msg, chatbot, temperature, max_tokens], [msg, chatbot])
clear.click(lambda: [], outputs=chatbot)
test_btn.click(lambda: identity_test(), outputs=test_output)
run_test.click(identity_test, outputs=test_output)
# Launch
if __name__ == "__main__":
print("\n🔥 MamunAI starting...\n")
demo.launch(server_name="0.0.0.0", server_port=7860)