Berat Karagol
Fix None error
460f0bb
Raw
History Blame Contribute Delete
3.56 kB
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()