Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torch | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig | |
| import warnings | |
| warnings.filterwarnings("ignore") | |
| # Model ve tokenizer'ı global olarak tanımla | |
| model = None | |
| tokenizer = None | |
| def load_model(): | |
| """Modeli yükle""" | |
| global model, tokenizer | |
| model_name = "Intelligent-Internet/II-Medical-8B" | |
| try: | |
| # Tokenizer'ı yükle | |
| tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) | |
| # GPU kullanılabilir mi kontrol et | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| if device == "cuda": | |
| # 4-bit quantization kullanarak modeli yükle (GPU bellek kullanımını azaltmak için) | |
| quantization_config = BitsAndBytesConfig( | |
| load_in_4bit=True, | |
| bnb_4bit_compute_dtype=torch.float16, | |
| bnb_4bit_use_double_quant=True, | |
| bnb_4bit_quant_type="nf4" | |
| ) | |
| model = AutoModelForCausalLM.from_pretrained( | |
| model_name, | |
| quantization_config=quantization_config, | |
| device_map="auto", | |
| trust_remote_code=True, | |
| torch_dtype=torch.float16 | |
| ) | |
| else: | |
| # CPU için daha hafif yükleme | |
| model = AutoModelForCausalLM.from_pretrained( | |
| model_name, | |
| trust_remote_code=True, | |
| torch_dtype=torch.float32, | |
| device_map="cpu" | |
| ) | |
| return f"✅ Model başarıyla yüklendi! ({device} üzerinde çalışıyor)" | |
| except Exception as e: | |
| return f"❌ Model yükleme hatası: {str(e)}" | |
| def generate_response(message, history, max_tokens=512, temperature=0.7, top_p=0.9): | |
| """Tıbbi sohbet için yanıt üret""" | |
| global model, tokenizer | |
| if model is None or tokenizer is None: | |
| return "❌ Model henüz yüklenmedi. Lütfen bekleyin..." | |
| try: | |
| # Sohbet geçmişini formatla | |
| conversation = "" | |
| for human, assistant in history: | |
| conversation += f"Hasta: {human}\nDoktor: {assistant}\n" | |
| # Mevcut mesajı ekle | |
| conversation += f"Hasta: {message}\nDoktor:" | |
| # System prompt ekle | |
| system_prompt = """Sen deneyimli bir tıp doktorusun. Hastalara yardımcı olmak, tıbbi sorularını yanıtlamak ve genel sağlık tavsiyeleri vermek için buradaSın. Her zaman: | |
| 1. Empati göster ve sabırlı ol | |
| 2. Karmaşık tıbbi terimleri basit dille açıkla | |
| 3. Acil durumlar için hemen doktora başvurmasını öner | |
| 4. Kesin tanı koymak yerine genel bilgiler ver | |
| 5. Her zaman profesyonel bir doktor muayenesinin önemini vurgula | |
| Lütfen yardımcı ve bilgilendirici bir yanıt ver.""" | |
| full_prompt = f"{system_prompt}\n\n{conversation}" | |
| # Tokenize et | |
| inputs = tokenizer.encode(full_prompt, return_tensors="pt") | |
| # Cihaza gönder | |
| device = next(model.parameters()).device | |
| inputs = inputs.to(device) | |
| # Yanıt üret | |
| with torch.no_grad(): | |
| outputs = model.generate( | |
| inputs, | |
| max_new_tokens=max_tokens, | |
| temperature=temperature, | |
| top_p=top_p, | |
| do_sample=True, | |
| pad_token_id=tokenizer.eos_token_id, | |
| repetition_penalty=1.1 | |
| ) | |
| # Yanıtı decode et | |
| response = tokenizer.decode(outputs[0][inputs.shape[1]:], skip_special_tokens=True) | |
| # Yanıtı temizle | |
| response = response.strip() | |
| if response.startswith("Doktor:"): | |
| response = response[7:].strip() | |
| return response | |
| except Exception as e: | |
| return f"❌ Yanıt üretme hatası: {str(e)}" | |
| def clear_chat(): | |
| """Sohbeti temizle""" | |
| return [], "" | |
| # Model yükleme durumu | |
| model_status = load_model() | |
| # Gradio arayüzü oluştur | |
| with gr.Blocks(title="🏥 Tıbbi Asistan - II-Medical-8B", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown(""" | |
| # 🏥 Tıbbi Asistan - II-Medical-8B | |
| Bu AI asistan, **II-Medical-8B** modeli kullanılarak geliştirilmiştir. Tıbbi sorularınızı sorabilir ve genel sağlık tavsiyeleri alabilirsiniz. | |
| ⚠️ **Önemli Uyarı:** Bu asistan gerçek bir doktor değildir. Verilen bilgiler sadece genel amaçlıdır ve profesyonel tıbbi muayenenin yerini tutmaz. | |
| """) | |
| # Model durumu gösterge | |
| status_display = gr.Markdown(f"**Model Durumu:** {model_status}") | |
| with gr.Row(): | |
| with gr.Column(scale=3): | |
| chatbot = gr.Chatbot( | |
| label="🩺 Tıbbi Sohbet", | |
| height=500, | |
| show_copy_button=True | |
| ) | |
| with gr.Row(): | |
| msg = gr.Textbox( | |
| placeholder="Tıbbi sorunuzu buraya yazın... (örn: 'Baş ağrım var, ne yapmalıyım?')", | |
| label="Mesajınız", | |
| scale=4 | |
| ) | |
| send_btn = gr.Button("📨 Gönder", variant="primary", scale=1) | |
| with gr.Row(): | |
| clear_btn = gr.Button("🗑️ Sohbeti Temizle", variant="secondary") | |
| retry_btn = gr.Button("🔄 Tekrar Dene", variant="secondary") | |
| with gr.Column(scale=1): | |
| gr.Markdown("### ⚙️ Ayarlar") | |
| max_tokens = gr.Slider( | |
| minimum=100, | |
| maximum=1000, | |
| value=512, | |
| step=50, | |
| label="Maksimum Token Sayısı" | |
| ) | |
| temperature = gr.Slider( | |
| minimum=0.1, | |
| maximum=1.5, | |
| value=0.7, | |
| step=0.1, | |
| label="Temperature (Yaratıcılık)" | |
| ) | |
| top_p = gr.Slider( | |
| minimum=0.1, | |
| maximum=1.0, | |
| value=0.9, | |
| step=0.05, | |
| label="Top-p (Odaklanma)" | |
| ) | |
| gr.Markdown(""" | |
| ### 📋 Örnek Sorular | |
| - "Baş ağrım var, ne yapmalıyım?" | |
| - "Grip belirtileri nelerdir?" | |
| - "Sağlıklı beslenme için öneriler" | |
| - "Egzersiz yaparken dikkat edilecekler" | |
| - "Stres yönetimi teknikleri" | |
| """) | |
| # Event handlers | |
| def respond(message, history, max_tokens, temperature, top_p): | |
| if not message.strip(): | |
| return history, "" | |
| bot_message = generate_response(message, history, max_tokens, temperature, top_p) | |
| history.append((message, bot_message)) | |
| return history, "" | |
| # Mesaj gönderme | |
| msg.submit(respond, [msg, chatbot, max_tokens, temperature, top_p], [chatbot, msg]) | |
| send_btn.click(respond, [msg, chatbot, max_tokens, temperature, top_p], [chatbot, msg]) | |
| # Sohbeti temizle | |
| clear_btn.click(clear_chat, [], [chatbot, msg]) | |
| # Tekrar dene | |
| def retry_last(): | |
| return chatbot.value[:-1] if chatbot.value else [], "" | |
| retry_btn.click(retry_last, [], [chatbot, msg]) | |
| gr.Markdown(""" | |
| --- | |
| **⚠️ Feragatname:** Bu AI asistan eğitim ve bilgi amaçlıdır. Acil durumlarda 112'yi arayın. | |
| Herhangi bir sağlık sorunu için mutlaka nitelikli bir sağlık profesyoneline başvurun. | |
| **Model:** [II-Medical-8B](https://huggingface.co/Intelligent-Internet/II-Medical-8B) | **Geliştirici:** [Intelligent-Internet](https://huggingface.co/Intelligent-Internet) | |
| """) | |
| if __name__ == "__main__": | |
| demo.launch() |