Buckets:

mishig's picture
|
download
raw
27.4 kB

Bria Fibo 2.0

Fibo 2.0 هو نموذج تحويل (transformer) يعتمد على مطابقة التدفق (flow-matching) ويضم 8.1 مليار معامل، من تطوير Bria، ويولّد الصور من عناوين نصية منظمة بصيغة JSON. مشفّر النص فيه هو Qwen3-VL: حيث يقوم Perceiver بتلخيص الحالات المخفية (hidden states) الخاصة بـ Qwen3-VL إلى رموز ملخصة (gist tokens) تنضم إلى رموز الصورة في تدفق واحد، كما تقرأ خمسة من كتل التحويل (blocks) مباشرةً من Qwen3-VL عبر الانتباه المتقاطع البوَّابي (gated cross-attention).

هناك نقطتا تفتيش:

  • briaai/Fibo-2.0-dev، وهو النموذج الكامل لتحويل النص إلى صورة والتحرير، مع إرشاد بدون مُصنِّف. الإعدادات الافتراضية للخط، وهي 30 خطوة مع إرشاد بقيمة 5، مخصصة لهذا نقطة الفحص.
  • briaai/Fibo-2.0-edit-turbo، مُصغَّر للتعديل في 4 خطوات دون توجيه (guidance_scale=1.0).

مع التوجيه على، فإن الموجه السلبي الافتراضي هو الوصف الفارغ الذي تم تدريب النموذج عليه: الوصف المهيكلي مع ترك كل قيمة فارغة.

توليد

يتم تدريب Fibo 2.0 على عناوين JSON منظمة ولن يعمل بشكل جيد مع النصوص الحرة. مرر العنوان كسلسلة JSON:

import json

import torch
from diffusers import BriaFibo2Pipeline

pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-dev", dtype=torch.bfloat16).to("cuda")

caption = {
    "short_description": "A red vintage bicycle leaning against a whitewashed wall on a narrow Mediterranean street.",
    "objects": [
        {
            "description": "A red vintage bicycle with a wicker basket of lemons on its handlebars.",
            "location": "center",
            "relative_size": "large within frame",
        }
    ],
    "background_setting": "A whitewashed wall with a blue wooden door and potted red geraniums.",
    "lighting": {"conditions": "bright morning sun", "direction": "from the right", "shadows": "long and crisp"},
    "aesthetics": {"composition": "centered", "color_scheme": "red, white and blue", "mood_atmosphere": "calm"},
    "photographic_characteristics": {"depth_of_field": "deep", "focus": "sharp on the bicycle", "camera_angle": "eye level"},
    "style_medium": "photograph",
    "context": "A travel photograph.",
    "artistic_style": "realistic",
}
image = pipe(json.dumps(caption)).images[0]
image.save("bicycle.png")

تنظّف خطّ المعالجة الوصف بالطريقة التي تمّ بها التدريب: فهي تُزيل القيم الفارغة وحقلي aesthetic_score وpreference_score، اللذين لم يكونا موجودين في أيّ وصف تدريبي، وتُرمّز الوصف بشكل مدمج. وقد تمّ تدريب صيغتين مختصرتين أيضاً وتُحفظان كما هما:

# The caption's short description alone, as plain text
image = pipe("A red vintage bicycle leaning against a whitewashed wall on a narrow Mediterranean street.").images[0]

# Exactly a "short_description" and a "text_render" list. The list is kept even when it's empty, to say the image
# has no text
caption = {"short_description": "A bakery storefront at dawn with a painted sign.", "text_render": [{"text": "FRESH BREAD"}]}
image = pipe(json.dumps(caption)).images[0]

لتحويل النص الحر إلى عنوان منظم، راجع نماذج prompt-to-JSON في صفحة Bria Fibo.

التحرير

تعديل الصور باستخدام نفس خط الأنابيب. مرّر الصورة كـimage وتعليمات التعديل كـ prompt:

import torch
from diffusers import BriaFibo2Pipeline
from diffusers.utils import load_image

pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-dev", dtype=torch.bfloat16).to("cuda")
image = load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png"
)
edited = pipe("Make the background a snowy forest", image=image).images[0]
edited.save("pikachu_snow.png")

لتحقيق تعديلات أسرع، حمّل نقطة الفحص turbo وأوقف التوجيه:

import torch
from diffusers import BriaFibo2Pipeline
from diffusers.utils import load_image

pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-edit-turbo", dtype=torch.bfloat16).to("cuda")
image = load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png"
)
edited = pipe("Make the background a snowy forest", image=image, num_inference_steps=4, guidance_scale=1.0).images[0]
edited.save("pikachu_snow.png")

تستمر الأمثلة أدناه من أيٍّ منهما، مع pipe وimage. عند استخدام نقطة التفتيش turbo، مرّر num_inference_steps=4 وguidance_scale=1.0 إلى كل استدعاء.

موجّه التحرير

يمكن أن يكون الأمر أيضًا كائن JSON يحتوي على مفتاح "edit_instruction" ووصف للنتيجة، بأي من الأشكال التي تم تدريب Fibo 2.0 على التحرير بها. يقوم خط المعالجة بتحويله إلى الأمر الذي تم تدريب Fibo 2.0 على التحرير به.

وصف كامل: مفاتيح الوصف بجانب "edit_instruction"، كما تكتب نماذج Bria من النص إلى JSON للتحرير. يتجاهل خط الأنابيب القيم الفارغة وحقلي aesthetic_score وpreference_score، حيث أزال التدريب هذين الحقلين من كل وصف.

import json

prompt = {
    "short_description": "A crocheted yellow Pikachu doll sitting in a snowy pine forest.",
    "objects": [{"description": "A crocheted yellow Pikachu doll with red cheeks.", "location": "center"}],
    "background_setting": "A snowy pine forest with falling snow.",
    "edit_instruction": "Make the background a snowy forest",
}
edited = pipe(json.dumps(prompt), image=image).images[0]

وصف قصير: نص في مفتاح "structured_caption".

prompt = {
    "structured_caption": "A crocheted yellow Pikachu doll sitting in a snowy pine forest.",
    "edit_instruction": "Make the background a snowy forest",
}
edited = pipe(json.dumps(prompt), image=image).images[0]

وصف قصير ونصه: قائمة "short_description" وقائمة "text_render" بالضبط. تُحفظ القائمة حتى عندما تكون فارغة، مما يُخبر Fibo 2.0 أن النتيجة لا تحتوي على نص. يمكن أن يحتوي المفتاح "structured_caption" على هذا النموذج، أو على وصف كامل أيضاً.

prompt = {
    "short_description": "A crocheted yellow Pikachu doll holding a small wooden sign.",
    "text_render": [{"text": "HELLO"}],
    "edit_instruction": "Give the doll a small wooden sign that reads HELLO",
}
edited = pipe(json.dumps(prompt), image=image).images[0]

بعض الصور

يمكن تحرير ما يصل إلى 5 صور معًا، على سبيل المثال لوضع كائن من صورة في أخرى. تشير التعليمات إليها بالترتيب على أنها <image_1>، <image_2> وهكذا.

cat = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")
edited = pipe("Put the cat from <image_2> next to the doll in <image_1>", image=[image, cat]).images[0]

حجم المخرجات

ما لم يُحدد height وwidth، فإن النتيجة تتخذ الحجم الذي تم تدريب Fibo 2.0 عليه بالنسبة لنسبة أبعاد الصورة الأولى، أي حوالي ميجابكسل واحد. يتم اقتصاص صورة واحدة إلى حجم النتيجة. أما الصور المتعددة فيتم اقتصاص كل منها إلى الحجم المُدرَّب عليه الخاص بنسبة أبعادها.

edited = pipe("Make the background a snowy forest", image=image, width=1424, height=800).images[0]

التعديلات المقنّعة

mask يحدد منطقة صورة واحدة لإعادة التوليد، بالأبيض على الأسود، وبمقاس الصورة. تم تدريب Fibo 2.0 على تعديلات تكون فيها تلك المنطقة رمادية في الصورة، ويقوم خط الأنابيب بتغميقها بنفس الطريقة قبل ترميز الصورة: رمادي مسطح (128، 128، 128)، عبر قناع ثنائي القيمة عند 128.

from PIL import Image, ImageDraw

mask = Image.new("L", image.size, 0)
ImageDraw.Draw(mask).rectangle((image.width // 2, 0, image.width, image.height // 2), fill=255)
edited = pipe("Add a red balloon floating in the sky", image=image, mask=mask).images[0]

النص في الصور

عندما يطلب الوصف النص، في إدخالات text_render الخاصة به، يميل Fibo 2.0 إلى عرضه بشكل أفضل إذا كان Qwen3-VL يرى كل نص مرسومًا على حدة. ترسم خط المعالجة هذه الصور افتراضيًا، بالطريقة التي تم بها التدريب، ويمكن تعطيلها. بالنسبة لوصف يحتوي على نص، مثل وصف المخبز أعلاه:

prompt = json.dumps(caption)
image = pipe(prompt, render_text_images=False).images[0]

أظهر التدريب على Fibo 2.0 هذه الصور لبعض التسميات الوصفية التي تحتوي على نصوص ولم يُظهرها لغيرها، لذا يعمل الأمر في الحالتين.

  • يحصل كل إدخال text_render يحتوي على text على صورة: النص في سطر واحد، أسود على أبيض، بخط Pillow المدمج بحجم 20. يتم تقسيم النص الأطول من 256 حرفًا إلى أسطر من 256 حرفًا.
  • تُرسم الأحرف التي لا تتوفر في الخط باستخدام أول خط من fonts يحتوي عليها. استخدم التدريب خط Aileron ثم خط DejaVu Sans، وهما موجودان في مجلد fonts ضمن briaai/Fibo-2.0-dev. في حال عدم وجود fonts، تُرسم هذه الأحرف بالطريقة التي يرسمها الخط المدمج في Pillow، ويصدر خط المعالجة تحذيرًا.
  • يضع خط الأنابيب علامة على كل إدخال بحقل image_tokens الخاص بصورة، ويرى Qwen3-VL الصور بعد أي صور مخصصة للتعديل.
  • تقوم عملية التوليد بخطواتها الأولى، بينما يكون مستوى الضوضاء أعلى من pipe.text_images_max_noise_level (0.9)، على الوصف النصي دون الصور. أما عملية التعديل فتستخدمها في كل خطوة.
  • لا تحصل التسمية بدون نص على أي صور، وكذلك الوصف القصير، كما هو الحال في التدريب.

لرسمها باستخدام خطوط التدريب المستخدمة:

from huggingface_hub import hf_hub_download

fonts = [
    hf_hub_download("briaai/Fibo-2.0-dev", name, subfolder="fonts")
    for name in ("Aileron-Regular.otf", "DejaVuSans.ttf")
]
image = pipe(prompt, fonts=fonts).images[0]

لرسم الصور بنفسك، مررها كـtext_images، صورة واحدة لكل إدخال text_render يحتوي على text، بالترتيب، لموجّه واحد. لها الأولوية على صور خط الأنابيب نفسه. الصور المرسومة بشكل مختلف عن التدريب خارج نطاق التوزيع.

واجهات الخلفية للانتباه

يعمل المحوّل على أيٍّ من واجهات الانتباه الخلفية في diffusers، على سبيل المثال FlashAttention-3 على معالجات Hopper الرسومية مثل H100:

pipe.transformer.set_attention_backend("_flash_3_varlen_hub")

يعمل _flash_3_hub أيضًا مع موجه واحد، لكنه لا يقبل الأقنعة، لذا لا يمكنه تشغيل دفعة من الموجهات بطول مختلف (انظر أدناه).

التجميع

يمكن توليد عدة طلبات في استدعاء واحد. يتم ملء الطلبات ذات الأطوال المختلفة، ويُستبعد الحشو من كل طبقة انتباه، لذا فإن هذه الدفعة تتطلب واجهة خلفية للانتباه تأخذ قناعًا: إما الافتراضية، أو واجهة خلفية متغيرة الطول مثل flash_varlen. في float32، تُعيد الدفعة إنتاج صور الاستدعاءات المنفصلة؛ أما في bfloat16 فتختلف نوى الانتباه بين المدخلات المملوءة وغير المملوءة، لذا قد تختلف صور الدفعات عن الاستدعاءات الفردية في التفاصيل الدقيقة.

BriaFibo2Pipeline[[diffusers.BriaFibo2Pipeline]]

diffusers.BriaFibo2Pipeline[[diffusers.BriaFibo2Pipeline]]

diffusers.BriaFibo2Pipeline(transformer: BriaFibo2Transformer2DModel, scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKLFlux2, text_encoder: Qwen3VLForConditionalGeneration, processor: Qwen3VLProcessor)

المصدر

المعاملات:

transformer (BriaFibo2Transformer2DModel) : نموذج التحويل الذي يُزيل الضوضاء من الكامنات (latents) الخاصة بالصورة.

scheduler (FlowMatchEulerDiscreteScheduler) : الجدولة المستخدمة مع transformer لإزالة الضوضاء من الكمونيات.

vae (AutoencoderKLFlux2) : ترميز فك ترميز احتمالي يقوم بتحويل الصور إلى تمثيلات كامنة (latents) والعكس.

text_encoder (Qwen3VLForConditionalGeneration) : Qwen3-VL. تُشكّل حالاته المخفية شرطًا للتحويلي.

processor (Qwen3VLProcessor) : يحوّل الأمر (prompt) والصور المراد تحريرها إلى مدخلات Qwen3-VL.

خط أنابيب لتوليد الصور من النص وتحرير الصور باستخدام Fibo 2.0.

call[[diffusers.BriaFibo2Pipeline.call]]

__call__(prompt: str | list[str] | None = None, image: PIL.Image.Image | list[PIL.Image.Image] | None = None, mask: PIL.Image.Image | None = None, text_images: list[PIL.Image.Image] | None = None, render_text_images: bool = True, fonts: list[str] | None = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 30, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_embeds_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds_mask: typing.Optional[torch.Tensor] = None, output_type: str = 'pil', return_dict: bool = True, callback_on_step_end: typing.Optional[typing.Callable[[int, int, dict], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'])

المصدر

المعاملات:

prompt (str أو list[str]، اختياري) : الأمر الموجّه لتوليد الصورة، وهو عادةً أمر JSON مُنظّم، يتم تنظيفه كما تم تنظيف التسميات التدريبية في Fibo 2.0: تُحذف القيم الفارغة وحقلَي aesthetic_score وpreference_score، ثم يُسلسل بشكل مضغوط. عند استخدام image، يكون الأمر تعليمات تعديل، أو كائن JSON يحتوي على مفتاح "edit_instruction" وتسمية النتيجة: مفاتيحه الأخرى، أو مفتاح "structured_caption" يحمل التسمية أو وصفًا مختصرًا.

image (PIL.Image.Image أو list[PIL.Image.Image]، اختياري) : الصورة التي سيتم تحريرها، أو حتى 5 صور لتحريرها معًا، حيث يمكن للتعليمات الإشارة إليها على أنها <image_1>، <image_2> وهكذا. بدون image، يولّد خط الأنابيب صورة من الوصف النصي.

mask (PIL.Image.Image، اختياري) : المنطقة من image التي سيتم إعادة توليدها، بيضاء على أسود، عند تحرير صورة واحدة. وكما في التدريب، تُخفَّف المنطقة قبل ترميز الصورة، من خلال جعل القناع ثنائي القيمة عند 128.

text_images (list[PIL.Image.Image]، اختياري) : صور للنصوص التي يطلبها التعليق التوضيحي، صورة واحدة لكل إدخال في text_render يحتوي على text، بالترتيب: يُرسم نص كل إدخال على حدة، كما ترسمها render_text_images. يرى Qwen3-VL هذه الصور مع الاستعلام، حيث يُشار إليها في كل تعليق توضيحي، مما يساعد Fibo 2.0 على رسم النص. يتطلب prompt كتعليق توضيحي JSON واحد، وله الأولوية على render_text_images. أثناء التوليد، تُنفَّذ الخطوات الأولى دون هذه الصور، طالما أن مستوى الضوضاء أعلى من text_images_max_noise_level (0.9)؛ أما في حالة التحرير، فتُستخدم هذه الصور في كل خطوة.

render_text_images (bool، اختياري، القيمة الافتراضية True) : ما إذا كان سيتم رسم text_images لكل عنوان توضيحي، بالطريقة التي رسمتها بها عملية تدريب Fibo 2.0: كل نص في سطر واحد، أسود على أبيض، بخط Pillow المدمج بحجم 20، والحروف التي لا يتوفرها ذلك الخط تُؤخذ من أول خط في fonts يحتوي عليها. العنوان التوضيحي الذي لا يحتوي على نص، والموجّه الذي لا يحتوي على عنوان توضيحي بصيغة JSON، مثل الوصف القصير، لا يتم إنشاء صور له، كما هو الحال في التدريب.

fonts (list[str]، اختياري) : مسارات الخطوط المستخدمة لرسم أحرف text_images التي لا تتوفر في الخط المدمج في Pillow، بالترتيب. تم رسمها أثناء التدريب بخط Aileron ثم بخط DejaVu Sans، وهما موجودان في مجلد fonts ضمن briaai/Fibo-2.0-dev. في حال عدم توفرهما، تُرسم هذه الأحرف بالطريقة التي يرسمها الخط المدمج في Pillow.

height (int, اختياري) : ارتفاع الصورة المولّدة بالبكسلات. يجب أن يكون قابلاً للقسمة على 16. القيمة الافتراضية هي 1024، أو عند التحرير، تكون بحجم Fibo 2.0 الذي تم تدريبه عليه بالنسبة لنسبة أبعاد الصورة الأولى، أي حوالي ميجابكسل واحد.

width (int, اختياري) : عرض الصورة المولّدة بالبكسلات. يجب أن يكون قابلاً للقسمة على 16. القيمة الافتراضية مثل height.

num_inference_steps (int، اختياري، القيمة الافتراضية 30) : عدد خطوات إزالة الضوضاء.

guidance_scale (float، اختياري، القيمة الافتراضية 5.0) : مقياس التوجيه الحر من التصنيف. القيم الأعلى من 1 تُشغّل الموجه السلبي كمرحلة ثانية في كل خطوة، بينما القيمة 1.0 تُعطّل التوجيه.

negative_prompt (str أو list[str]، اختياري) : الأمر الموجّه الذي يجب الابتعاد عنه عند تفعيل التوجيه. القيمة الافتراضية هي العنوان الفارغ الذي تم تدريب Fibo 2.0 عليه: العنوان المهيكلي الذي تكون جميع قيمه فارغة.

num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) : عدد الصور التي سيتم توليدها لكل موجه.

generator (torch.Generator أو list[torch.Generator]، اختياري) : المولّدات المستخدمة لسحب الضوضاء الأولية، من أجل التوليد الحتمي.

latents (torch.Tensor، اختياري) : ضوضاء بداية مُولّدة مسبقًا على شكل (batch_size, 32, height // 8, width // 8).

prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية محسوبة مسبقًا من encode_prompt، تُستخدم بدلًا من prompt.

prompt_embeds_mask (torch.Tensor، اختياري) : القناع الذي أعادته encode_prompt مع prompt_embeds. يُحتاج إليه عند وجود حشو.

negative_prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية محسوبة مسبقًا للموجّه السلبي، تُستخدم بدلًا من negative_prompt.

negative_prompt_embeds_mask (torch.Tensor، اختياري) : القناع الذي أعادته encode_prompt مع negative_prompt_embeds. يُحتاج إليه عند وجود حشو.

output_type (str، اختياري، الافتراضي "pil") : صيغة الإخراج: "pil"، "np"، "pt" أو "latent".

return_dict (bool، اختياري، الافتراضي True) : ما إذا كان يجب إرجاع BriaFibo2PipelineOutput بدلاً من tuple عادي.

callback_on_step_end (Callable، اختياري) : دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء على النحو callback_on_step_end(self, step, timestep, callback_kwargs).

callback_on_step_end_tensor_inputs (list[str]، اختياري، القيمة الافتراضية ["latents"]) : المصفوفات التي تُمرَّر إلى callback_on_step_end ضمن callback_kwargs.

يعيد: BriaFibo2PipelineOutput أو tuple

الصور المولّدة.

الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.

أمثلة:

>>> import json

>>> import torch
>>> from diffusers import BriaFibo2Pipeline
>>> from diffusers.utils import load_image

>>> # Fibo 2.0 reads structured JSON captions, serialized compactly the way it was trained
>>> caption = {
...     "short_description": "A red bicycle leaning against a white brick wall on a sunny morning.",
...     "objects": [{"description": "a red city bicycle with a wicker basket", "location": "center"}],
...     "background_setting": "a white brick wall with a green door",
...     "lighting": {"conditions": "bright morning sun", "direction": "from the right"},
...     "style_medium": "photograph",
... }
>>> prompt = json.dumps(caption, separators=(",", ":"), ensure_ascii=False)

>>> # 30 steps with guidance 5, the defaults
>>> pipe = BriaFibo2Pipeline.from_pretrained("briaai/Fibo-2.0-dev", dtype=torch.bfloat16).to("cuda")
>>> image = pipe(prompt).images[0]
>>> image.save("fibo2.png")

>>> # editing: pass the image, and the instruction as the prompt
>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png"
... )
>>> edited = pipe("Make the background a snowy forest", image=image).images[0]
>>> edited.save("fibo2_edit.png")

encode_prompt[[diffusers.BriaFibo2Pipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], image: list[PIL.Image.Image] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_embeds_mask: typing.Optional[torch.Tensor] = None, text_images: list[PIL.Image.Image] | list[list[PIL.Image.Image]] | None = None)

المصدر

المعاملات:

prompt (str أو list[str]) : الموجه أو الموجهات التي سيتم ترميزها. عند استخدام image، يكون كل موجه عبارة عن تعليمات تعديل، أو كائن JSON يحتوي على مفتاح "edit_instruction" وتسمية النتيجة: مفاتيحه الأخرى، أو مفتاح "structured_caption" يحمل التسمية أو وصفًا مختصرًا. يتم ترميز موجه التوليد كما هو: يضع __call__ أولًا تسمية JSON بالصيغة التي تم تدريب Fibo 2.0 عليها.

image (list[PIL.Image.Image]، اختياري) : الصور التي سيتم تحريرها، كما تراها Qwen3-VL. كل موجه (prompt) يعدّل جميعها.

device (torch.device، اختياري) : الجهاز الذي سيتم وضع التضمينات عليه.

num_images_per_prompt (int، القيمة الافتراضية 1) : عدد الصور التي سيتم توليدها لكل موجه.

prompt_embeds (torch.Tensor، اختياري) : تمثيلات نصية محسوبة مسبقًا على شكل (batch_size, 6, text_len, 7680)، تُستخدم بدلاً من prompt.

prompt_embeds_mask (torch.Tensor، اختياري) : قناع منطقي (Bool) للرموز الفعلية في prompt_embeds، بأبعاد (batch_size, text_len).

text_images (list[PIL.Image.Image] أو list[list[PIL.Image.Image]]، اختياري) : صور لنص الوصف، صورة واحدة لكل إدخال في text_render يحتوي على text، بالترتيب، أو قائمة منها لكل موجه. يحصل كل إدخال على علامة الرؤية لصورته، وترى Qwen3-VL الصور بعد أي صور للتحرير.

يعيد:

تضمينات النص، وقناعها، أو None عندما لم يتم ملء أي موجه.

Xet Storage Details

Size:
27.4 kB
·
Xet hash:
b12526b05fcc091b070fadc55c597862f5ab9d1c6cbd4c8717f00a2ba993021b

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.