--- license: cc-by-4.0 pipeline_tag: image-text-to-text language: - tr - en base_model: - OpenGVLab/InternVL3_5-1B-Instruct model_type: vision-language-model tags: - computer-vision - multimodal - e-commerce - catalog-moderation - vision-language-model - product-understanding library_name: transformers --- # Trendyol-Vision-Flash _Trendyol-Vision-Flash is a fine-tuned **vision-language model (VLM)** built on [OpenGVLab/InternVL3_5-1B-Instruct](https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct) for Trendyol catalog quality and moderation workflows. It is the lightweight Flash-tier VLM in the Trendyol-Vision family — built for production serving under high traffic, with low-latency inference on a single GPU for brand detection, product similarity, attribute extraction, title generation, content moderation, product captioning, and other **e-commerce catalog operations**._ **Trendyol-Vision-Flash vs Master:** Flash is the production-tier VLM for day-to-day, high-traffic catalog workloads on a single GPU. [Trendyol-Vision-Master](https://huggingface.co/Trendyol/Trendyol-Vision-Master) is the larger expert VLM for critical or harder cases (e.g. category detection) and retains stronger general capabilities. ## Model Details - **Architecture**: InternVL3.5-1B (InternViT-300M + Qwen3-0.6B LLM backbone) - **Base model**: [OpenGVLab/InternVL3_5-1B-Instruct](https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct) - **Training**: Full SFT on Trendyol catalog multimodal data - **Languages**: Turkish (primary), English (secondary) - **Modalities**: Image + text (up to 16 images per prompt) - **Serving**: Single GPU ## Intended Use - Detect product brands from images with category context. - Determine whether two product listings represent the same SKU. - Extract structured attributes, titles, and captions from product images. - Moderate unsafe or policy-violating product content. - Run low-latency catalog enrichment on a single GPU under high-traffic production load. - Support research and evaluation use cases in e-commerce catalog operations. **Not intended for** Master-tier category detection, general open-domain chat, medical/legal advice, surveillance, or any use described under Ethical Considerations. Optimized for production catalog workflows rather than general-purpose assistance. For category detection at scale, use [Trendyol/Trendyol-Vision-Master](https://huggingface.co/Trendyol/Trendyol-Vision-Master). ## Supported Use Cases Specialized for **e-commerce catalog operations** (moderation and enrichment). The tasks below are the primary, production-validated workloads; related catalog workflows can be prompted similarly, with best results on these patterns. - **Brand detection** — Infer the brand from product images with optional category context. - **Product similarity** — Decide whether two listings (images and titles) refer to the same product. - **Attribute extraction** — Extract structured product attributes from image and title/description. - **Title generation** — Produce a clean catalog title from the product image and a reference title. - **Product caption** — Generate a grounded product description from the image and optional metadata. - **Content safety classification** — Classify product image and title for catalog content safety (`0` = Forbidden, `1` = Fantasy, `2` = Safe). **Fantasy** means content that may be published but should be treated as adult (+18). - **Per-pack quantity extraction** — Extract pack quantity and unit from image and long title. See **Task Prompts** below for per-task prompt templates. --- ## Quickstart Install dependencies: ```bash pip install "transformers==4.56.2" accelerate sentencepiece torch torchvision pillow requests ``` Load the model, preprocess images from URLs, and run inference with the native InternVL `model.chat()` API: ```python import torch import requests from PIL import Image from io import BytesIO from torchvision import transforms as T from torchvision.transforms.functional import InterpolationMode from transformers import AutoModel, AutoTokenizer MODEL_ID = "Trendyol/Trendyol-Vision-Flash" IMAGENET_MEAN = (0.485, 0.456, 0.406) IMAGENET_STD = (0.229, 0.224, 0.225) model = AutoModel.from_pretrained( MODEL_ID, trust_remote_code=True, dtype=torch.bfloat16, low_cpu_mem_usage=True, use_flash_attn=False, ).eval().cuda() tokenizer = AutoTokenizer.from_pretrained( MODEL_ID, trust_remote_code=True, use_fast=False, ) def build_transform(input_size=448): return T.Compose([ T.Lambda(lambda img: img.convert("RGB") if img.mode != "RGB" else img), T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC), T.ToTensor(), T.Normalize(mean=IMAGENET_MEAN, std=IMAGENET_STD), ]) def load_image_from_url(url, input_size=448): response = requests.get(url, timeout=30) response.raise_for_status() image = Image.open(BytesIO(response.content)).convert("RGB") return build_transform(input_size)(image).unsqueeze(0) urls = [ "https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/a77c7933-c626-3753-9cad-fbb7388bff45/1_org_zoom.jpg", "https://cdn.dsmcdn.com/mnresize/620/920/ty1569/prod/QC/20240924/23/356395c3-c71c-37c5-88c4-5ef97899b3d8/1_org_zoom.jpg", "https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/112305b3-ba5d-3a28-8fd3-b1857749afca/1_org_zoom.jpg", ] pixel_values = torch.cat([load_image_from_url(url) for url in urls], dim=0) pixel_values = pixel_values.to(dtype=torch.bfloat16, device="cuda") question = """ Görsellerden, Eldiven kategorisinde yer alan ürünün markasını çıkar. Sadece verilen görsellerde doğrulanabilen bilgilere dayan. Emin olmadığında "Unknown" şeklinde cevap ver. Sadece marka adını döndür.""" generation_config = {"max_new_tokens": 32, "do_sample": False} response = model.chat(tokenizer, pixel_values, question, generation_config) print(response) # Adidas ``` **Image ordering:** concatenate `pixel_values` in the same order as `` placeholders in the prompt. For a single `` token with multiple product photos, pass all images in one batch (default behavior). > **GPU note:** Trendyol-Vision-Flash is designed for **single-GPU** inference. No tensor parallelism required. --- ## Serving (vLLM) Trendyol-Vision-Flash can be served with vLLM as an OpenAI-compatible API on a **single GPU**. ```bash vllm serve Trendyol/Trendyol-Vision-Flash \ --trust-remote-code \ --max-model-len 16384 \ --structured-outputs-config.backend xgrammar \ --served-model-name Trendyol-Vision-Flash \ --interleave-mm-strings \ ``` When calling the vLLM OpenAI API, use `image_url` content blocks: ```bash curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer EMPTY" \ -d '{ "model": "Trendyol-Vision-Flash", "temperature": 0.0, "max_tokens": 32, "messages": [ { "role": "user", "content": [ {"type": "image_url", "image_url": {"url": "https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/a77c7933-c626-3753-9cad-fbb7388bff45/1_org_zoom.jpg"}}, {"type": "image_url", "image_url": {"url": "https://cdn.dsmcdn.com/mnresize/620/920/ty1569/prod/QC/20240924/23/356395c3-c71c-37c5-88c4-5ef97899b3d8/1_org_zoom.jpg"}}, {"type": "image_url", "image_url": {"url": "https://cdn.dsmcdn.com/mnresize/620/920/ty1571/prod/QC/20240924/23/112305b3-ba5d-3a28-8fd3-b1857749afca/1_org_zoom.jpg"}}, {"type": "text", "text": "Görsellerden, Eldiven kategorisinde yer alan ürünün markasını çıkar.\nSadece verilen görsellerde doğrulanabilen bilgilere dayan.\nEmin olmadığında \"Unknown\" şeklinde cevap ver.\nSadece marka adını döndür."} ] } ] }' ``` --- ## Task Prompts Pass any prompt below to `model.chat()` using the same image-loading flow from Quickstart. Replace `{placeholders}` with your data. Use one `` per image group; for tasks with multiple image slots, pass `num_patches_list` (e.g. `[1, 1]` for before/after). ### 1. Brand Detection **Images:** product photos (1–16) **Output:** brand name or `Unknown` ``` Görsellerden, {category} kategorisinde yer alan ürünün markasını çıkar. Sadece verilen görsellerde doğrulanabilen bilgilere dayan. Emin olmadığında "Unknown" şeklinde cevap ver. Sadece marka adını döndür. ``` ### 2. Product Similarity **Images:** before listing images, then after listing images **Output:** `1` (same SKU) or `0` (different) ``` E-ticaret kataloğundaki ürün benzerliği konusunda uzmansınız. İki ürünün önceki ve sonraki başlık/görsellerini karşılaştırarak aynı ürün olup olmadığını belirle. Ambalaj, arka plan veya model farkları tek başına fark sayılmaz; renk, boyut, miktar veya varyant farkları fark sayılır. Sadece "1" veya "0" döndür. Önceki Ürün Başlığı: {before_title} Önceki Ürün Resimleri: Sonraki Ürün Başlığı: {after_title} Sonraki Ürün Resimleri: ``` ### 3. Attribute Extraction **Images:** 1 product image **Output:** JSON object ``` Bu görseldeki, başlığı '{title}' ve açıklaması '{description}' olan ürünün {attribute_list} bilgilerini json formatında çıkarır mısın? ``` Example: ``` Bu görseldeki, başlığı 'Helen Bar Sandalyesi-mavi-9519q0119' ve açıklaması 'Maksimum kargolanma süresi: Sipariş tarihinden sonraki 7. gün Ortalama montaj süresi: 1 dakika Genişlik: 62cm Derinlik: 52cm Yükseklik: 96cm Oturak Yüksekliği: 44cm Ürün Ağırlığı: 10kg Kullanılan malzeme: Metal Kullanılan sünger: Yüksek yoğunluklu gri sünger Kullanılan kol: Metal Kollu Kullanılan ayak: Metal Ayaklı + Kromajlı Garanti süresi - Menşei: 24 Ay - Yerli Sipariş bazlı üretim-tedarik yapıldığından sipariş iptali yapılamamaktadır Anlaşmalı olunan ambar ve kargolarla bina kapısında teslimat yapılmaktadır' olan ürünün Garanti Süresi, Materyal, Model, Sandalye Kumaşı, Sandalye Sayısı, Tema / Stil bilgilerini json formatında çıkarır mısın? ``` Image URL: `https://cdn.dsmcdn.com/ty1325/product/media/images/prod/QC/20240522/17/f63a7316-5998-3c7d-b45f-93ff8e9c34a2/1_org_zoom.jpg` Expected output: ```json { "Garanti Süresi": "2 Yıl", "Materyal": "Metal", "Model": "Bar Sandalyesi", "Sandalye Kumaşı": "çıkarılamadı", "Sandalye Sayısı": "1", "Tema / Stil": "Modern" } ``` ### 4. Title Generation **Images:** 1 product image **Output:** plain-text title ``` Ürün fotoğrafı ile '{reference_title}' bilgisini karşılaştırıp, Trendyol katalog moderasyon kurallarına göre yanıltıcı ifadelerden kaçınarak net bir başlık üret; çıktıyı düz metin ver. ``` ### 5. Product Caption **Images:** 1 product image **Output:** English product description ``` Without speculating about details you cannot see, describe this product based on the image and the information provided. Product title: {title} Brand: {brand} First decide which object is the product, review OCR for brand/model/title clues, then analyze colors, shape, material, pattern, and other grounded details. ``` ### 6. Content Safety Classification **Images:** 1 product image **Labels:** `0` (Forbidden) = not publishable, `1` (Fantasy) = publishable but adult (+18) content, `2` (Safe) = publishable without restriction. ``` Ürün Başlığı: {title} Bu ürün görselini ve başlığını inceleyerek moderasyon sınıflandırması yap. Sonucu 0 (Forbidden), 1 (Fantasy) veya 2 (Safe) olarak ver. ``` ### 7. Per-Pack Quantity Extraction **Images:** 1 product image **Output:** `{"amount": , "unit": "KG"|"L"|"PIECE"|null}` ``` Extract total product quantity from the title and image. Title is the primary source; use the image only when the title is missing or ambiguous. Return only JSON: {"amount": , "unit": "KG"|"L"|"PIECE"|null} Convert g→KG, ml/cc→L, counts→PIECE. Ignore model numbers, storage, wattage, and dimensions. If unclear, return {"amount": null, "unit": null}. Product Title: {title} ``` --- ## Limitations - **Domain specificity**: Optimized for Trendyol e-commerce product images and Turkish catalog text; may not generalize to other domains. - **Not for Master-tier category detection**: Category detection at taxonomy scale is handled by [Trendyol/Trendyol-Vision-Master](https://huggingface.co/Trendyol/Trendyol-Vision-Master). - **Multi-image tasks**: Product similarity and brand detection may use multiple images; ensure all images are included in the prompt. - **Language bias**: Turkish prompts and outputs are primary; English performance varies by task. - **Not a general assistant**: Fine-tuned for structured catalog tasks in production settings; open-domain chat is out of scope, and quality is strongest on the production-validated tasks above. ## Ethical Considerations - Designed for catalog quality and moderation workflows. - Ensure compliance with data protection regulations when processing product and user-generated content. - Monitor for biased decisions across product categories and brands. - Not intended for surveillance, misinformation, or harmful content generation. - Safety and moderation labels reflect training for catalog workflows and may not match every jurisdiction or platform policy; human review is recommended for high-impact decisions. ## Citation ```bibtex @misc{trendyol-vision-flash, title={Trendyol-Vision-Flash: Lightweight Catalog Quality Vision-Language Model (VLM)}, author={Trendyol Data Science Team}, year={2026}, howpublished={\url{https://huggingface.co/Trendyol/Trendyol-Vision-Flash}} } ``` ```bibtex @article{zhu2025internvl3_5, title={InternVL3.5: Advancing Open-Source Multimodal Models}, author={Zhu, Weiyun and others}, year={2025}, url={https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct} } ``` ## Model Card Authors - Trendyol Data Science Team ## License This model is licensed under the [Creative Commons Attribution 4.0 International License (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/). You are free to share and adapt the model for any purpose, even commercially, as long as you give appropriate credit and indicate if changes were made. This release is a fine-tune of [OpenGVLab/InternVL3_5-1B-Instruct](https://huggingface.co/OpenGVLab/InternVL3_5-1B-Instruct), which is licensed under [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) (including its Qwen3 language-model component). Redistribution of this derivative continues to satisfy Apache-2.0 notice and attribution requirements for the base model; retain the Apache-2.0 license text and any NOTICE attributions shipped with InternVL3.5 when redistributing. For the full CC BY 4.0 license text, see: https://creativecommons.org/licenses/by/4.0/legalcode --- _Released by the Trendyol Data Science Team._