Spaces:
Running on Zero
Running on Zero
File size: 3,555 Bytes
7f5d544 d245beb 7f5d544 460f0bb d245beb 936e52b 460f0bb 936e52b 460f0bb 936e52b d245beb 7f5d544 d245beb 7f5d544 d245beb 7f5d544 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | import os
import torch
import gradio as gr
import spaces
from PIL import Image
from transformers import AutoModel, AutoTokenizer
from transformers.modeling_utils import PreTrainedModel
# Kurşun geçirmez yama: Qwen modeli "None" atasa bile biz her zaman "{}" (boş sözlük) döndürüyoruz.
if not hasattr(PreTrainedModel, "all_tied_weights_keys"):
def _get_tied_keys(self):
return getattr(self, "_tied_weights_keys", {}) or {}
def _set_tied_keys(self, value):
self._tied_weights_keys = value or {}
PreTrainedModel.all_tied_weights_keys = property(_get_tied_keys, _set_tied_keys)
MODEL_ID = "OpenGVLab/InternVL3-8B"
print("Model ve tokenizer yükleniyor...")
tokenizer = AutoTokenizer.from_pretrained(
MODEL_ID,
trust_remote_code=True,
use_fast=False
)
model = AutoModel.from_pretrained(
MODEL_ID,
torch_dtype=torch.bfloat16,
trust_remote_code=True
).eval()
@spaces.GPU(duration=60)
def generate_response(image, text, max_tokens, temperature):
if image is None and not text.strip():
return "Lütfen en azından bir metin veya görsel girin."
model.to("cuda")
pixel_values = None
if image is not None:
image = image.convert("RGB")
if hasattr(model, "preprocess_image"):
pixel_values = model.preprocess_image(image).to(torch.bfloat16).cuda()
else:
import torchvision.transforms as T
transform = T.Compose([
T.Resize((448, 448)),
T.ToTensor(),
T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
pixel_values = transform(image).unsqueeze(0).to(torch.bfloat16).cuda()
generation_config = dict(
max_new_tokens=max_tokens,
do_sample=True if temperature > 0 else False,
temperature=temperature,
top_p=0.8,
)
question = text if text.strip() else "Describe this image in detail."
if pixel_values is not None:
prompt = f"<image>\n{question}"
response = model.chat(tokenizer, pixel_values, prompt, generation_config)
else:
response = model.chat(tokenizer, None, question, generation_config)
return response
with gr.Blocks(theme=gr.themes.Soft(), title="InternVL3-8B Demo") as demo:
gr.Markdown("# 👁️ InternVL3-8B Vision-Language Demo")
with gr.Row():
with gr.Column(scale=1):
image_input = gr.Image(type="pil", label="Görsel Yükle (İsteğe Bağlı)")
text_input = gr.Textbox(
lines=3,
placeholder="Görsel hakkında soru sorun veya metin girin...",
label="Mesaj"
)
with gr.Accordion("Parametreler", open=False):
max_tokens = gr.Slider(64, 2048, 512, step=64, label="Max New Tokens")
temperature = gr.Slider(0.0, 1.0, 0.2, step=0.05, label="Temperature")
submit_btn = gr.Button("Gönder 🚀", variant="primary")
clear_btn = gr.Button("Temizle")
with gr.Column(scale=1):
output_text = gr.Textbox(lines=12, label="Model Yanıtı", interactive=False)
submit_btn.click(
fn=generate_response,
inputs=[image_input, text_input, max_tokens, temperature],
outputs=output_text
)
clear_btn.click(
fn=lambda: (None, "", ""),
inputs=[],
outputs=[image_input, text_input, output_text]
)
if __name__ == "__main__":
demo.queue().launch() |