Spaces:
Running
Running
| import gradio as gr | |
| import torch | |
| from sentence_transformers import SentenceTransformer | |
| from sklearn.metrics.pairwise import cosine_similarity | |
| import pickle | |
| import os | |
| import numpy as np | |
| class UrduOptimizedPredictor: | |
| def __init__(self, model_path=None): | |
| self.device = "cuda" if torch.cuda.is_available() else "cpu" | |
| print(f"Using device: {self.device}") | |
| # Load the multilingual model | |
| self.text_model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-mpnet-base-v2') | |
| self.text_model.to(self.device) | |
| # Load YOUR model | |
| model_file = "urdu_optimized_model.pkl" | |
| print(f"📁 Loading YOUR model from: {model_file}") | |
| try: | |
| with open(model_file, 'rb') as f: | |
| model_data = pickle.load(f) | |
| self.emoji_embeddings = {k: v[0] for k, v in model_data['emoji_embeddings'].items()} | |
| self.emoji_list = model_data['emoji_list'] | |
| print(f"✅ SUCCESS: Loaded YOUR Urdu-optimized model with {len(self.emoji_list)} emojis") | |
| print(f"📊 Your emojis: {self.emoji_list[:20]}...") # Show first 20 emojis | |
| except Exception as e: | |
| print(f"❌ ERROR loading your model: {e}") | |
| raise e | |
| def predict_smart(self, text, top_k=3, min_confidence=0.3): | |
| """Use YOUR model for prediction""" | |
| print(f"\n🔍 PREDICTING for: '{text}'") | |
| # Get text embedding | |
| text_embedding = self.text_model.encode([text], convert_to_tensor=True) | |
| text_embedding_np = text_embedding.cpu().numpy() | |
| # Calculate similarities with YOUR emoji embeddings | |
| similarities = {} | |
| for emoji, emoji_embedding in self.emoji_embeddings.items(): | |
| similarity = cosine_similarity(text_embedding_np, emoji_embedding.reshape(1, -1))[0][0] | |
| similarities[emoji] = similarity | |
| print(f"📈 Similarities calculated for {len(similarities)} emojis") | |
| # Filter by confidence and return top K | |
| filtered = [(emoji, score) for emoji, score in similarities.items() if score >= min_confidence] | |
| sorted_emojis = sorted(filtered, key=lambda x: x[1], reverse=True) | |
| print(f"🎯 Top predictions: {sorted_emojis[:top_k]}") | |
| # If no confident predictions, return top overall | |
| if not sorted_emojis: | |
| top_overall = sorted(similarities.items(), key=lambda x: x[1], reverse=True)[:top_k] | |
| print(f"⚠️ No confident predictions, using top overall: {top_overall}") | |
| return top_overall | |
| return sorted_emojis[:top_k] | |
| # Initialize predictor | |
| print("🚀 Loading YOUR Urdu Emoji Prediction Model...") | |
| predictor = UrduOptimizedPredictor() | |
| def predict_emoji(urdu_text): | |
| """Main prediction function using YOUR model""" | |
| if not urdu_text.strip(): | |
| return "⬅️ اردو متن لکھیں" | |
| try: | |
| # Get predictions from YOUR model | |
| predictions = predictor.predict_smart(urdu_text, top_k=3, min_confidence=0.3) | |
| # Format output - ONLY EMOJIS, no scores or text | |
| if predictions: | |
| # Extract just the emojis from predictions | |
| emojis_only = [emoji for emoji, score in predictions] | |
| # Join them with spaces for clean display | |
| result = " ".join(emojis_only) | |
| return result | |
| else: | |
| return "❌" | |
| except Exception as e: | |
| print(f"Error in prediction: {e}") | |
| return "⚠️" | |
| # Test your model with some examples before starting the interface | |
| print("\n" + "="*60) | |
| print("🧪 TESTING YOUR MODEL WITH SAMPLE TEXTS") | |
| print("="*60) | |
| test_texts = [ | |
| "میں بہت خوش ہوں", | |
| "دل ٹوٹ گیا ہے", | |
| "دوستوں کے ساتھ پارٹی کا مزہ آیا", | |
| "امی نے میری پسندیدہ ڈش بنائی ہے", | |
| "غصہ سے دماغ پھٹ رہا ہے" | |
| ] | |
| for text in test_texts: | |
| print(f"\n📝 Testing: '{text}'") | |
| predictions = predictor.predict_smart(text, top_k=3, min_confidence=0.3) | |
| print(f" → {[emoji for emoji, score in predictions]}") | |
| print("\n" + "="*60) | |
| print("🚀 STARTING GRADIO INTERFACE") | |
| print("="*60) | |
| # Create Gradio interface | |
| demo = gr.Blocks(title="اردو ایموجی پیشنگوئی") | |
| with demo: | |
| gr.Markdown( | |
| """ | |
| # 🎯 اردو ایموجی پیشنگوئی | |
| اپنے اردو متن کے لیے موزوں ترین ایموجیز دریافت کریں | |
| **10 لاکھ+ اردو ٹویٹس** پر **80+ اردو ایموجیز** سے تربیت یافتہ ماڈل | |
| - **تین بہترین ایموجیز** کی پیشنگوئی | |
| - فوری اور درست نتائج | |
| - مکمل طور پر اردو کے لیے ڈیزائن کیا گیا | |
| """ | |
| ) | |
| with gr.Row(): | |
| with gr.Column(): | |
| input_text = gr.Textbox( | |
| label="اردو متن درج کریں", | |
| placeholder="اپنا اردو متن یہاں لکھیں... مثلاً: آج میں بہت خوش ہوں", | |
| lines=3 | |
| ) | |
| predict_btn = gr.Button("🎯 ایموجیز حاصل کریں", variant="primary") | |
| with gr.Column(): | |
| output_text = gr.Textbox( | |
| label="پیشنگوئی شدہ ایموجیز", | |
| placeholder="یہاں ایموجیز ظاہر ہوں گی...", | |
| lines=2 | |
| ) | |
| gr.Markdown("### 💡 مثالیں") | |
| examples = gr.Examples( | |
| examples=[ | |
| ["میں آج بہت خوش ہوں"], | |
| ["دل ٹوٹ گیا ہے"], | |
| ["دوستوں کے ساتھ پارٹی کا مزہ آیا"], | |
| ["نیند آ رہی ہے"], | |
| ["امی نے میری پسندیدہ کھانا بنایا ہے"], | |
| ["محبت میں پڑ گیا ہوں"], | |
| ["غصہ سے دماغ پھٹ رہا ہے"], | |
| ["آج کا دن بہت خاص ہے، سب خوش رہیں!"] | |
| ], | |
| inputs=input_text, | |
| outputs=output_text, | |
| fn=predict_emoji, | |
| cache_examples=False | |
| ) | |
| # Connect button to function | |
| predict_btn.click(fn=predict_emoji, inputs=input_text, outputs=output_text) | |
| if __name__ == "__main__": | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| share=True | |
| ) |