Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torch | |
| from transformers import BlipProcessor, BlipForConditionalGeneration | |
| from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer | |
| import logging | |
| import spaces | |
| import os | |
| from huggingface_hub import login | |
| # Logger yapılandırması | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| # Hugging Face token kontrolü | |
| hf_token = os.environ.get("HF_TOKEN") | |
| if not hf_token: | |
| raise ValueError("HF_TOKEN çevre değişkeni ayarlanmamış. Lütfen Hugging Face token'ınızı ayarlayın.") | |
| login(token=hf_token) | |
| # Cihaz seçimi | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| logger.info(f"Kullanılan cihaz: {device}") | |
| # BLIP modeli yükleniyor | |
| logger.info("BLIP modeli yükleniyor...") | |
| blip_processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-large") | |
| blip_model = BlipForConditionalGeneration.from_pretrained( | |
| "Salesforce/blip-image-captioning-large" | |
| ).to(device) | |
| # Gemma modeli yükleniyor | |
| logger.info("Gemma modeli yükleniyor...") | |
| gemma_model_id = "google/gemma-3-12b-it" | |
| gemma_tokenizer = AutoTokenizer.from_pretrained( | |
| gemma_model_id, | |
| token=hf_token | |
| ) | |
| gemma_model = AutoModelForCausalLM.from_pretrained( | |
| gemma_model_id, | |
| torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32, | |
| device_map="auto", | |
| token=hf_token | |
| ) | |
| streamer = TextStreamer(gemma_tokenizer, skip_prompt=True, skip_special_tokens=True) | |
| def generate_story(input_text): | |
| logger.info("Masal üretim süreci başlatıldı.") | |
| try: | |
| # BLIP ile prompt oluştur | |
| blip_prompt = f"Bu konu hakkında detaylı bir açıklama yap: {input_text}" | |
| inputs = blip_processor(text=blip_prompt, return_tensors="pt").to(device) | |
| out = blip_model.generate(**inputs, min_length=30, max_length=100) | |
| enhanced_prompt = blip_processor.decode(out[0], skip_special_tokens=True) | |
| logger.info(f"BLIP tarafından geliştirilen prompt: {enhanced_prompt}") | |
| # Gemma ile masal üret | |
| gemma_prompt = f""" | |
| Aşağıdaki konu ve açıklamaya göre, giriş-gelişme-sonuç bölümleri olan Türkçe bir masal yaz. | |
| Bölüm başlıkları veya açıklama ekleme. Karakterlere isim verme. | |
| Sadece masal başlığını ve hikâyeyi döndür. | |
| Konu: {input_text} | |
| Geliştirilmiş Açıklama: {enhanced_prompt} | |
| """ | |
| input_ids = gemma_tokenizer.encode(gemma_prompt, return_tensors="pt").to(device) | |
| # Masal üretimi | |
| output_ids = gemma_model.generate( | |
| input_ids, | |
| max_new_tokens=1000, | |
| temperature=0.8, | |
| repetition_penalty=1.1, | |
| length_penalty=1.0, | |
| do_sample=True, | |
| streamer=streamer | |
| ) | |
| output_text = gemma_tokenizer.decode(output_ids[0], skip_special_tokens=True) | |
| final_text = output_text.replace(gemma_prompt.strip(), "").strip() | |
| return { | |
| "konu_aciklamasi": enhanced_prompt, | |
| "masal": final_text | |
| } | |
| except Exception as e: | |
| logger.exception("Masal üretimi sırasında hata oluştu:") | |
| return {"error": str(e)} | |
| # Gradio arayüzü | |
| with gr.Blocks() as app: | |
| gr.Markdown("## 📚 Masal Üretici (BLIP ve Gemma ile)") | |
| with gr.Tab("Masal Oluştur"): | |
| text_input = gr.Textbox(label="Masal konusunu girin", lines=3) | |
| generate_button = gr.Button("Masalı Üret") | |
| output_json = gr.JSON(label="Çıktılar") | |
| generate_button.click( | |
| fn=generate_story, | |
| inputs=text_input, | |
| outputs=output_json | |
| ) | |
| app.launch() |